diff --git a/src/store/common.ts b/src/store/common.ts index 6185beb..6e4f77b 100644 --- a/src/store/common.ts +++ b/src/store/common.ts @@ -27,7 +27,19 @@ export type CommonExplorerStore = { saveDataInLocalStorage: (key: string, value: string) => void; removeDataFromLocalStorage: (key: string) => void; getDataFromPlugin: (key: string) => Promise; - saveDataInPlugin: (data: Record) => Promise; + saveDataInPlugin: (oata: Record) => Promise; + + setValueAndSaveInLocalStorage: ({ + key, + value, + localStorageKey, + localStorageValue, + }: { + key: string; + value: T; + localStorageKey: string; + localStorageValue: string; + }) => void; }; export const createCommonExplorerStore = @@ -38,11 +50,13 @@ export const createCommonExplorerStore = viewMode: DEFAULT_VIEW_MODE, changeViewMode: (mode: ViewMode) => { - const { saveDataInLocalStorage } = get(); - set({ - viewMode: mode, + const { setValueAndSaveInLocalStorage } = get(); + setValueAndSaveInLocalStorage({ + key: "viewMode", + value: mode, + localStorageKey: FFS_VIEW_MODE_KEY, + localStorageValue: mode, }); - saveDataInLocalStorage(FFS_VIEW_MODE_KEY, mode); }, restoreViewMode: () => { const { getDataFromLocalStorage } = get(); @@ -80,4 +94,27 @@ export const createCommonExplorerStore = return undefined; } }, + + setValueAndSaveInLocalStorage: ({ + key, + value, + localStorageKey, + localStorageValue, + }: { + key: string; + value: T; + localStorageKey: string; + localStorageValue: string; + }) => { + const { saveDataInLocalStorage, removeDataFromLocalStorage } = + get(); + + set({ [key]: value } as Partial); + + if (value === null || value === undefined) { + removeDataFromLocalStorage(localStorageKey); + } else { + saveDataInLocalStorage(localStorageKey, localStorageValue); + } + }, }); diff --git a/src/store/file/focus.ts b/src/store/file/focus.ts index f3c1d00..f03e04d 100644 --- a/src/store/file/focus.ts +++ b/src/store/file/focus.ts @@ -47,16 +47,13 @@ export const createFocusedFileSlice = }, setFocusedFile: async (file: TFile | null) => { - const { saveDataInLocalStorage, removeDataFromLocalStorage } = - get(); - set({ - focusedFile: file, + const { setValueAndSaveInLocalStorage } = get(); + setValueAndSaveInLocalStorage({ + key: "focusedFile", + value: file, + localStorageKey: FFS_FOCUSED_FILE_PATH_KEY, + localStorageValue: file ? file.path : "", }); - if (file) { - saveDataInLocalStorage(FFS_FOCUSED_FILE_PATH_KEY, file.path); - } else { - removeDataFromLocalStorage(FFS_FOCUSED_FILE_PATH_KEY); - } }, restoreLastFocusedFile: async () => { diff --git a/src/store/folder/toggle.ts b/src/store/folder/toggle.ts index 010efdf..5ea2124 100644 --- a/src/store/folder/toggle.ts +++ b/src/store/folder/toggle.ts @@ -8,13 +8,13 @@ import { uniq } from "src/utils"; import { ExplorerStore } from ".."; export interface ToggleFolderSlice { - expandedFolderPaths: string[]; + expandedFolderPaths: string[]; - canFolderToggle: (folder: TFolder) => boolean; - changeExpandedFolderPaths: (folderNames: string[]) => Promise; - restoreExpandedFolderPaths: () => Promise; - expandFolder: (folder: TFolder) => Promise; - collapseFolder: (folder: TFolder) => Promise; + canFolderToggle: (folder: TFolder) => boolean; + changeExpandedFolderPaths: (folderNames: string[]) => Promise; + restoreExpandedFolderPaths: () => Promise; + expandFolder: (folder: TFolder) => Promise; + collapseFolder: (folder: TFolder) => Promise; } export const createToggleFolderSlice = @@ -53,14 +53,13 @@ export const createToggleFolderSlice = ); }, changeExpandedFolderPaths: async (folderPaths: string[]) => { - const { saveDataInLocalStorage } = get(); - set({ - expandedFolderPaths: folderPaths, + const { setValueAndSaveInLocalStorage } = get(); + setValueAndSaveInLocalStorage({ + key: "expandedFolderPaths", + value: folderPaths, + localStorageKey: FFS_EXPANDED_FOLDER_PATHS_KEY, + localStorageValue: JSON.stringify(folderPaths), }); - saveDataInLocalStorage( - FFS_EXPANDED_FOLDER_PATHS_KEY, - JSON.stringify(folderPaths) - ); }, restoreExpandedFolderPaths: async () => { const { getDataFromLocalStorage, hasFolderChildren } = get(); diff --git a/src/store/tag/toggle.ts b/src/store/tag/toggle.ts index 60c93cc..b8c653f 100644 --- a/src/store/tag/toggle.ts +++ b/src/store/tag/toggle.ts @@ -24,14 +24,13 @@ export const createToggleTagSlice = expandedTagPaths: [], changeExpandedTagPaths: async (tagPaths: string[]) => { - const { saveDataInLocalStorage } = get(); - set({ - expandedTagPaths: tagPaths, + const { setValueAndSaveInLocalStorage } = get(); + setValueAndSaveInLocalStorage({ + key: "expandedTagPaths", + value: tagPaths, + localStorageKey: FFS_EXPANDED_TAG_PATHS_KEY, + localStorageValue: JSON.stringify(tagPaths), }); - saveDataInLocalStorage( - FFS_EXPANDED_TAG_PATHS_KEY, - JSON.stringify(tagPaths) - ); }, expandTag: async (tag: TagNode) => {