import { StateCreator } from "zustand"; import { FFS_VIEW_MODE_KEY } from "src/assets/constants"; import { ValueOf } from "src/settings"; import { ExplorerStore } from "src/store"; import FolderFileSplitterPlugin from "../main"; export const VIEW_MODE = { ALL: "all", TAG: "tag", FOLDER: "folder", }; export type ViewMode = ValueOf; export const DEFAULT_VIEW_MODE: ViewMode = VIEW_MODE.FOLDER; export type CommonExplorerStore = { viewMode: ViewMode; changeViewMode: (mode: ViewMode) => void; restoreViewMode: () => void; getDataFromLocalStorage: (key: string) => string | null; saveDataInLocalStorage: (key: string, value: string) => void; removeDataFromLocalStorage: (key: string) => void; getDataFromPlugin: (key: string) => Promise; saveDataInPlugin: (data: Record) => Promise; }; export const createCommonExplorerStore = ( plugin: FolderFileSplitterPlugin ): StateCreator => (set, get) => ({ viewMode: DEFAULT_VIEW_MODE, changeViewMode: (mode: ViewMode) => { const { saveDataInLocalStorage } = get(); set({ viewMode: mode, }); saveDataInLocalStorage(FFS_VIEW_MODE_KEY, mode); }, restoreViewMode: () => { const { getDataFromLocalStorage } = get(); const viewMode = getDataFromLocalStorage(FFS_VIEW_MODE_KEY); if (!viewMode) return; set({ viewMode, }); }, saveDataInLocalStorage: (key: string, value: string) => { localStorage.setItem(key, value); }, getDataFromLocalStorage: (key: string) => { return localStorage.getItem(key); }, removeDataFromLocalStorage: (key: string) => { localStorage.removeItem(key); }, saveDataInPlugin: async ( data: Record ): Promise => { const previousData = await plugin.loadData(); await plugin.saveData({ ...previousData, ...data, }); }, getDataFromPlugin: async (key: string): Promise => { try { const data = await plugin.loadData(); return data[key]; } catch (e) { console.error(e); return undefined; } }, });