@@ -125,18 +125,23 @@ export const useIDEStore = create<IDEState>((set, get) => ({
|
|||||||
// Выбор файла
|
// Выбор файла
|
||||||
selectFile: (node: FileNode) => {
|
selectFile: (node: FileNode) => {
|
||||||
if (node.type === "file") {
|
if (node.type === "file") {
|
||||||
const { openFiles } = get();
|
const { openFiles, files } = get();
|
||||||
if (!openFiles.find((f) => f.path === node.path)) {
|
// Берём актуальную версию из дерева файлов
|
||||||
set((state) => ({ openFiles: [...state.openFiles, node] }));
|
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) => {
|
updateFileContent: (content: string) => {
|
||||||
const { activeFile } = get();
|
const { activeFile, files } = get();
|
||||||
if (activeFile) {
|
if (activeFile && files) {
|
||||||
const updatedFile = { ...activeFile, content };
|
const updatedFile = { ...activeFile, content };
|
||||||
set({ activeFile: updatedFile });
|
set({ activeFile: updatedFile });
|
||||||
set((state) => ({
|
set((state) => ({
|
||||||
@@ -144,6 +149,21 @@ export const useIDEStore = create<IDEState>((set, get) => ({
|
|||||||
f.path === activeFile.path ? updatedFile : f,
|
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) });
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user