From 3a2f09541c77920dde527725a1ca494a3ba3e680 Mon Sep 17 00:00:00 2001 From: codetypes Date: Thu, 20 Mar 2025 08:15:34 +0800 Subject: [PATCH] save last build dir --- src/components/menu.tsx | 4 +--- src/components/workspace.tsx | 2 +- src/contexts/setting-context.ts | 40 ++++++++++++++++++------------- src/contexts/workspace-context.ts | 5 +++- 4 files changed, 29 insertions(+), 22 deletions(-) diff --git a/src/components/menu.tsx b/src/components/menu.tsx index 66bfe3b..01bcbed 100644 --- a/src/components/menu.tsx +++ b/src/components/menu.tsx @@ -58,9 +58,7 @@ export const Menu: FC = () => { ); const enabled = !!workspace.workdir; const homedir = app.getPath("home"); - const settings = { - recent: useSetting((state) => state.recent), - }; + const { settings } = useSetting(useShallow((state) => ({ settings: state.data }))); const menuTemplate: MenuItemConstructorOptions[] = useMemo(() => { const recentWorkspaces: MenuItemConstructorOptions[] = settings.recent.map((path, i) => ({ diff --git a/src/components/workspace.tsx b/src/components/workspace.tsx index 1fa7744..848dd25 100644 --- a/src/components/workspace.tsx +++ b/src/components/workspace.tsx @@ -39,7 +39,7 @@ export const Workspace: FC = () => { find: state.find, })) ); - const settings = useSetting(useShallow((state) => ({ recent: state.recent }))); + const { settings } = useSetting(useShallow((state) => ({ settings: state.data }))); const [isShowingAlert, setShowingAlert] = useState(false); const { t } = useTranslation(); const forceUpdate = useForceUpdate(); diff --git a/src/contexts/setting-context.ts b/src/contexts/setting-context.ts index 2639f12..5966b65 100644 --- a/src/contexts/setting-context.ts +++ b/src/contexts/setting-context.ts @@ -7,47 +7,53 @@ const settingPath = app.getPath("userData") + "/settings.json"; export type SettingModel = { recent: string[]; + buildDir: string; }; export type SettingStore = { - recent: string[]; + data: SettingModel; + load: () => void; save: () => void; appendRecent: (path: string) => void; removeRecent: (path: string) => void; + setBuildDir: (dir: string) => void; }; export const useSetting = create((set, get) => ({ - recent: [], + data: { + recent: [], + buildDir: "", + }, load: () => { try { if (fs.existsSync(settingPath)) { const settings = readJson(settingPath) as SettingModel; - if (!(settings.recent instanceof Array)) { - settings.recent = []; - } - - set({ recent: settings.recent }); + set({ data: settings }); } } catch (error) { console.error(error); } }, save: () => { - const settings = get(); - writeJson(settingPath, { - recent: settings.recent, - } as SettingModel); + writeJson(settingPath, get().data); }, appendRecent: (path: string) => { - const recent = get().recent.filter((v) => v !== path); + const { data, save } = get(); + const recent = data.recent.filter((v) => v !== path); recent.unshift(path); - set({ recent }); - get().save(); + set({ data: { ...data, recent } }); + save(); }, removeRecent: (path: string) => { - const recent = get().recent.filter((v) => v !== path); - set({ recent }); - get().save(); + const { data, save } = get(); + const recent = data.recent.filter((v) => v !== path); + set({ data: { ...data, recent } }); + save(); + }, + setBuildDir: (dir: string) => { + const { data, save } = get(); + set({ data: { ...data, buildDir: dir } }); + save(); }, })); diff --git a/src/contexts/workspace-context.ts b/src/contexts/workspace-context.ts index b759ff2..e0fdfbe 100644 --- a/src/contexts/workspace-context.ts +++ b/src/contexts/workspace-context.ts @@ -342,12 +342,14 @@ export const useWorkspace = create((set, get) => ({ buildProject: () => { const workspace = get(); - if (workspace.path) + if (workspace.path) { if (!buildDir) { buildDir = dialog.showOpenDialogSync({ properties: ["openDirectory", "createDirectory"], + defaultPath: useSetting.getState().data.buildDir, })?.[0]; } + } if (buildDir) { for (const editor of workspace.editors) { editor.dispatch("save"); @@ -382,6 +384,7 @@ export const useWorkspace = create((set, get) => ({ } else { message.success(i18n.t("buildCompleted")); } + useSetting.getState().setBuildDir(buildDir); } catch (error) { console.error(error); message.error(i18n.t("buildFailed"));