diff --git a/frontend/src/modules/ide/store/useIDEStore.ts b/frontend/src/modules/ide/store/useIDEStore.ts index 39fe5b9..004637e 100644 --- a/frontend/src/modules/ide/store/useIDEStore.ts +++ b/frontend/src/modules/ide/store/useIDEStore.ts @@ -125,18 +125,23 @@ export const useIDEStore = create((set, get) => ({ // Выбор файла selectFile: (node: FileNode) => { if (node.type === "file") { - const { openFiles } = get(); - if (!openFiles.find((f) => f.path === node.path)) { - set((state) => ({ openFiles: [...state.openFiles, node] })); + const { openFiles, files } = get(); + // Берём актуальную версию из дерева файлов + const latestFile = files ? findNode(files, node.path || "") : null; + const fileToOpen = + latestFile && latestFile.type === "file" ? latestFile : node; + + if (!openFiles.find((f) => f.path === fileToOpen.path)) { + set((state) => ({ openFiles: [...state.openFiles, fileToOpen] })); } - set({ activeFile: node }); + set({ activeFile: fileToOpen }); } }, // Обновление содержимого файла updateFileContent: (content: string) => { - const { activeFile } = get(); - if (activeFile) { + const { activeFile, files } = get(); + if (activeFile && files) { const updatedFile = { ...activeFile, content }; set({ activeFile: updatedFile }); set((state) => ({ @@ -144,6 +149,21 @@ export const useIDEStore = create((set, get) => ({ f.path === activeFile.path ? updatedFile : f, ), })); + + // Обновляем также в дереве файлов + const updateFileInTree = (node: FileNode): FileNode => { + if (node.path === activeFile.path) { + return updatedFile; + } + if (node.children) { + return { + ...node, + children: node.children.map((child) => updateFileInTree(child)), + }; + } + return node; + }; + set({ files: updateFileInTree(files) }); } },