feat:修改dirTree
This commit is contained in:
parent
bf30771d66
commit
337b0bda48
|
@ -4,13 +4,14 @@ import {importFile, overWriteFile, saveFileWithName} from "../../../../utils/Fil
|
||||||
import {isEmpty} from "../../../../utils/ObjectUtils";
|
import {isEmpty} from "../../../../utils/ObjectUtils";
|
||||||
import {CLEAR_HISTORY_COMMAND} from "lexical";
|
import {CLEAR_HISTORY_COMMAND} from "lexical";
|
||||||
import {TRANSFORMERS, $convertFromMarkdownString, $convertToMarkdownString,} from "@lexical/markdown";
|
import {TRANSFORMERS, $convertFromMarkdownString, $convertToMarkdownString,} from "@lexical/markdown";
|
||||||
import {getFileExtByPath, getFileNameByPath} from "../../../../utils/PathOperate";
|
import {getFileExtByPath, getFileFullNameByPath, getFileNameByPath} from "../../../../utils/PathOperate";
|
||||||
import {updatedSavedFile} from "../../../../redux/tableBarItem_reducer";
|
import {updatedSavedFile} from "../../../../redux/tableBarItem_reducer";
|
||||||
import {useDispatch, useSelector} from "react-redux";
|
import {useDispatch, useSelector} from "react-redux";
|
||||||
import md5 from "md5"
|
import md5 from "md5"
|
||||||
import {message} from "antd";
|
import {message} from "antd";
|
||||||
const {ipcRenderer} = window.require('electron')
|
const {ipcRenderer} = window.require('electron')
|
||||||
import "./ToobarPlugin.less"
|
import "./ToobarPlugin.less"
|
||||||
|
import {newFileAdd} from "../../../../redux/dirMessage_reducer";
|
||||||
const SaveFilePlugin=(props)=> {
|
const SaveFilePlugin=(props)=> {
|
||||||
let activeKey = useSelector(state => state.tableBarItem.activeKey);
|
let activeKey = useSelector(state => state.tableBarItem.activeKey);
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
|
@ -70,6 +71,7 @@ const SaveFilePlugin=(props)=> {
|
||||||
// 修改当前文件名
|
// 修改当前文件名
|
||||||
dispatch(updatedSavedFile({filePath: filePath}))
|
dispatch(updatedSavedFile({filePath: filePath}))
|
||||||
// 文件目录更新
|
// 文件目录更新
|
||||||
|
dispatch(newFileAdd({fileName:getFileFullNameByPath(filePath),dirFlag:false,children:[],filePath: filePath}))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
|
|
|
@ -28,7 +28,7 @@ export const dirMessageSlice = createSlice({
|
||||||
},
|
},
|
||||||
newFileAdd :(state,action)=>{
|
newFileAdd :(state,action)=>{
|
||||||
console.log("dirMessage:newFileAdd", state, action)
|
console.log("dirMessage:newFileAdd", state, action)
|
||||||
insertNode(state.dirTree,action.payload[0])
|
insertNode(state.dirTree,action.payload)
|
||||||
},
|
},
|
||||||
dirRemove:(state,action)=>{
|
dirRemove:(state,action)=>{
|
||||||
console.log("dirMessage:dirRemove", state, action)
|
console.log("dirMessage:dirRemove", state, action)
|
||||||
|
@ -37,7 +37,7 @@ export const dirMessageSlice = createSlice({
|
||||||
if (isEmpty(state.dirTree.filePath)){
|
if (isEmpty(state.dirTree.filePath)){
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
removeNode(state.dirTree,{fileName:getFileFullNameByPath(selectDirKey),filePath:selectDirKey,dirFlag:true,children:[]})
|
removeNode(state.dirTree,{"fileName":getFileFullNameByPath(selectDirKey),"filePath":selectDirKey,"dirFlag":true,"children":[]})
|
||||||
},
|
},
|
||||||
nextDirAdd: (state, action) => {
|
nextDirAdd: (state, action) => {
|
||||||
console.log("dirMessage:nextDirAdd", state, action)
|
console.log("dirMessage:nextDirAdd", state, action)
|
||||||
|
@ -51,9 +51,11 @@ export const dirMessageSlice = createSlice({
|
||||||
console.log("dirMessage:updateFileName", state, action)
|
console.log("dirMessage:updateFileName", state, action)
|
||||||
let newFilePath = action.payload.newFilePath
|
let newFilePath = action.payload.newFilePath
|
||||||
let oldFilePath = action.payload.oldFilePath
|
let oldFilePath = action.payload.oldFilePath
|
||||||
|
let oldFileName = getFileFullNameByPath(oldFilePath)
|
||||||
|
let newFileName = getFileFullNameByPath(newFilePath)
|
||||||
updateNode(state.dirTree,
|
updateNode(state.dirTree,
|
||||||
{fileName:getFileFullNameByPath(oldFilePath),filePath:oldFilePath,dirFlag:false,children:[]},
|
{"fileName":oldFileName,"filePath":oldFilePath,"dirFlag":false,"children":[]},
|
||||||
{fileName:getFileFullNameByPath(newFilePath),filePath:newFilePath,dirFlag:false,children:[]}
|
{"fileName":newFileName,"filePath":newFilePath,"dirFlag":false,"children":[]}
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
dirFileAdd:(state,action)=>{
|
dirFileAdd:(state,action)=>{
|
||||||
|
@ -90,30 +92,6 @@ export const dirMessageSlice = createSlice({
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
function findChild(fileList, action, selectDirKey) {
|
|
||||||
fileList.forEach(file => {
|
|
||||||
if (file.filePath === selectDirKey && file.dirFlag &&
|
|
||||||
(isEmpty(file.children) || (Array.isArray(file.children) && file.children.length === 0))) {
|
|
||||||
file.children = action.payload.fileStateList[0].children
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if (file.dirFlag && Array.isArray(file.children) && file.children.length > 0) {
|
|
||||||
findChild(file.children, action, selectDirKey)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
function updateFileNameChild(fileList, oldFilePath, newFilePath) {
|
|
||||||
fileList.forEach(file => {
|
|
||||||
if (file.filePath === oldFilePath) {
|
|
||||||
file.filePath = newFilePath
|
|
||||||
file.fileName = getFileFullNameByPath(newFilePath)
|
|
||||||
return
|
|
||||||
}else if (Array.isArray(file.children) && file.children.length > 0 && oldFilePath.startsWith(file.filePath)) {
|
|
||||||
updateFileNameChild(file.children, oldFilePath, newFilePath)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
export const {
|
export const {
|
||||||
dirAdd,
|
dirAdd,
|
||||||
|
|
|
@ -41,7 +41,14 @@ export function insertNode(root,fileMessage) {
|
||||||
if (!fileMessage.dirFlag){
|
if (!fileMessage.dirFlag){
|
||||||
currentNode.children.push(fileMessage)
|
currentNode.children.push(fileMessage)
|
||||||
} else {
|
} else {
|
||||||
currentNode.children = fileMessage.children
|
// 过滤调原来就右的文件,只增加新的
|
||||||
|
if (fileMessage.children.length>0){
|
||||||
|
let sourceFile = currentNode.children.map(file=>file.filePath);
|
||||||
|
let newFileList = fileMessage.children.filter(file=>!sourceFile||!sourceFile.includes(file.filePath));
|
||||||
|
if (newFileList&&newFileList.length>0){
|
||||||
|
currentNode.children.push(...newFileList)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -50,69 +57,41 @@ export function insertNode(root,fileMessage) {
|
||||||
|
|
||||||
export function removeNode(root,fileMessage) {
|
export function removeNode(root,fileMessage) {
|
||||||
let currentNode = root;
|
let currentNode = root;
|
||||||
let fileDir;
|
let fileDir=getFileDirByPath(fileMessage.filePath);
|
||||||
if (fileMessage.dirFlag){
|
|
||||||
fileDir=fileMessage.filePath
|
|
||||||
}else {
|
|
||||||
fileDir=getFileDirByPath(fileMessage.filePath)
|
|
||||||
}
|
|
||||||
let fileDirSplit = filePathSplit(fileDir).filter(fileD=>!isObject(fileD)&&fileD!=="");
|
let fileDirSplit = filePathSplit(fileDir).filter(fileD=>!isObject(fileD)&&fileD!=="");
|
||||||
for (let i = 0; i < fileDirSplit.length; i++) {
|
for (let i = 0; i < fileDirSplit.length; i++) {
|
||||||
if (i===fileDirSplit.length-1) {
|
|
||||||
if (fileMessage.dirFlag) {
|
|
||||||
currentNode.children = currentNode.children.filter(file =>
|
|
||||||
file.fileName !== fileDirSplit[i] && file.dirFlag)
|
|
||||||
break
|
|
||||||
} else {
|
|
||||||
currentNode.children = currentNode.children.filter(file =>
|
|
||||||
file.fileName !== fileMessage.fileName && !file.dirFlag)
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
let find = currentNode.children.find(file=>file.dirFlag&&file.fileName===fileDirSplit[i]);
|
let find = currentNode.children.find(file=>file.dirFlag&&file.fileName===fileDirSplit[i]);
|
||||||
if (!isEmpty(find)){
|
if (!isEmpty(find)){
|
||||||
currentNode=find;
|
currentNode=find;
|
||||||
}else {
|
}else {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
if (i===fileDirSplit.length-1) {
|
||||||
|
currentNode.children = currentNode.children.filter(file =>
|
||||||
|
file.fileName !== fileMessage.fileName)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function updateNode(root,fileMessage,newFileMessage) {
|
export function updateNode(root,fileMessage,newFileMessage) {
|
||||||
let currentNode = root;
|
let currentNode = root;
|
||||||
let fileDir;
|
let fileDir =getFileDirByPath(fileMessage.filePath)
|
||||||
if (fileMessage.dirFlag){
|
|
||||||
fileDir=fileMessage.filePath
|
|
||||||
}else {
|
|
||||||
fileDir=getFileDirByPath(fileMessage.filePath)
|
|
||||||
}
|
|
||||||
|
|
||||||
let fileDirSplit = filePathSplit(fileDir).filter(fileD=>!isObject(fileD)&&fileD!=="");
|
let fileDirSplit = filePathSplit(fileDir).filter(fileD=>!isObject(fileD)&&fileD!=="");
|
||||||
for (let i = 0; i < fileDirSplit.length; i++) {
|
for (let i = 0; i < fileDirSplit.length; i++) {
|
||||||
if (fileMessage.dirFlag){
|
|
||||||
if (i===fileDirSplit.length-1){
|
|
||||||
let node =currentNode.children.find(file=>
|
|
||||||
file.fileName===fileDirSplit[i]&&file.dirFlag);
|
|
||||||
node.fileName=newFileMessage.fileName
|
|
||||||
node.filePath=newFileMessage.filePath
|
|
||||||
node.dirFlag=newFileMessage.dirFlag
|
|
||||||
node.children=newFileMessage.children
|
|
||||||
}
|
|
||||||
}else {
|
|
||||||
if (i===fileDirSplit.length-1){
|
|
||||||
let node=currentNode.children.find(file=>
|
|
||||||
file.fileName===fileMessage.fileName&&!file.dirFlag)
|
|
||||||
node.fileName=newFileMessage.fileName
|
|
||||||
node.filePath=newFileMessage.filePath
|
|
||||||
node.dirFlag=newFileMessage.dirFlag
|
|
||||||
node.children=newFileMessage.children
|
|
||||||
}
|
|
||||||
}
|
|
||||||
let find = currentNode.children.find(file=>file.dirFlag&&file.fileName===fileDirSplit[i]);
|
let find = currentNode.children.find(file=>file.dirFlag&&file.fileName===fileDirSplit[i]);
|
||||||
if (!isEmpty(find)){
|
if (!isEmpty(find)){
|
||||||
currentNode=find;
|
currentNode=find;
|
||||||
}else {
|
}else {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
if (i===fileDirSplit.length-1) {
|
||||||
|
let node =currentNode.children.find(file=>
|
||||||
|
file.fileName===fileMessage.fileName);
|
||||||
|
node.fileName=newFileMessage.fileName
|
||||||
|
node.filePath=newFileMessage.filePath
|
||||||
|
node.dirFlag=newFileMessage.dirFlag
|
||||||
|
node.children=newFileMessage.children
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue