@@ -125,18 +125,23 @@ export const useIDEStore = create<IDEState>((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<IDEState>((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) });
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
Reference in New Issue
Block a user