diff --git a/src/components/FileActions/CreateFile.tsx b/src/components/FileActions/CreateFile.tsx index 5fba18b..cac059f 100644 --- a/src/components/FileActions/CreateFile.tsx +++ b/src/components/FileActions/CreateFile.tsx @@ -9,17 +9,22 @@ const CreateFile = () => { const { useExplorerStore, plugin } = useExplorer(); const { language } = plugin; - const { createFileWithDefaultName, getNameOfFolder, focusedFolder } = - useExplorerStore( - useShallow((store: ExplorerStore) => ({ - createFileWithDefaultName: store.createFileWithDefaultName, - getNameOfFolder: store.getNameOfFolder, - focusedFolder: store.focusedFolder, - })) - ); + const { + createFileWithDefaultName, + getNameOfFolder, + focusedFolder, + isCreateFileAbled, + } = useExplorerStore( + useShallow((store: ExplorerStore) => ({ + createFileWithDefaultName: store.createFileWithDefaultName, + getNameOfFolder: store.getNameOfFolder, + focusedFolder: store.focusedFolder, + isCreateFileAbled: store.isCreateFileAbled, + })) + ); const onCreateNewFile = async () => { - if (!focusedFolder) return; + if (!isCreateFileAbled() || !focusedFolder) return; await createFileWithDefaultName(focusedFolder); }; @@ -27,7 +32,7 @@ const CreateFile = () => { return classNames( "ffs__action-button-wrapper clickable-icon nav-action-button", { - "ffs__action-button-wrapper--disabled": !focusedFolder, + "ffs__action-button-wrapper--disabled": !isCreateFileAbled(), } ); }; diff --git a/src/store/common/viewMode.ts b/src/store/common/viewMode.ts index 2459c87..e4d52b8 100644 --- a/src/store/common/viewMode.ts +++ b/src/store/common/viewMode.ts @@ -9,18 +9,25 @@ export const VIEW_MODE = { ALL: "all", TAG: "tag", FOLDER: "folder", + SEARCH: "search", }; export type ViewMode = ValueOf; export const DEFAULT_VIEW_MODE: ViewMode = VIEW_MODE.FOLDER; export type ViewModeSlice = { viewMode: ViewMode; + + canFilesManualSortViewModes: ViewMode[]; + canFilesSortViewModes: ViewMode[]; + canCreateFilesViewModes: ViewMode[] + changeViewMode: (mode: ViewMode) => void; restoreViewMode: () => void; changeToTagMode: () => void; changeToFolderMode: () => void; changeToAllMode: () => void; + changeToSearchMode: () => void; }; export const createViewModeSlice = @@ -30,6 +37,18 @@ export const createViewModeSlice = (set, get) => ({ viewMode: DEFAULT_VIEW_MODE, + get canFilesManualSortViewModes(): ViewMode[] { + return [VIEW_MODE.FOLDER]; + }, + + get canFilesSortViewModes(): ViewMode[] { + return [VIEW_MODE.FOLDER, VIEW_MODE.TAG, VIEW_MODE.ALL]; + }, + + get canCreateFilesViewModes(): ViewMode[] { + return [VIEW_MODE.FOLDER]; + }, + changeViewMode: (mode: ViewMode) => { get().setValueAndSaveInLocalStorage({ key: "viewMode", @@ -54,4 +73,7 @@ export const createViewModeSlice = changeToAllMode: () => { get().changeViewMode(VIEW_MODE.ALL); }, + changeToSearchMode: () => { + get().changeViewMode(VIEW_MODE.SEARCH); + }, }); diff --git a/src/store/file/actions.ts b/src/store/file/actions.ts index ceebb74..88466f4 100644 --- a/src/store/file/actions.ts +++ b/src/store/file/actions.ts @@ -2,7 +2,11 @@ import { TFile, TFolder } from "obsidian"; import { StateCreator } from "zustand"; import FolderFileSplitterPlugin from "src/main"; -import { getCopyName, getDefaultUntitledName, replaceNameInPath } from "src/utils"; +import { + getCopyName, + getDefaultUntitledName, + replaceNameInPath, +} from "src/utils"; import { ExplorerStore } from ".."; @@ -21,6 +25,7 @@ export interface FileActionsSlice { createFileAndOpen: (path: string, focus?: boolean) => Promise; createFileWithDefaultName: (folder: TFolder) => Promise; duplicateFile: (file: TFile) => Promise; + isCreateFileAbled: () => boolean; moveFile: (file: TFile, newPath: string) => Promise; renameFile: (file: TFile, newName: string) => Promise; @@ -46,7 +51,7 @@ export const createFileActionsSlice = files.map((f) => f.name), defaultFileName ); - return replaceNameInPath(file, copyName) + return replaceNameInPath(file, copyName); }, openFile: (file: TFile, active = true): void => { @@ -87,13 +92,17 @@ export const createFileActionsSlice = selectFileAndOpen(newFile, false); return newFile; }, + isCreateFileAbled: () => { + const { canCreateFilesViewModes, viewMode } = get(); + return canCreateFilesViewModes.includes(viewMode); + }, moveFile: async (file: TFile, newPath: string) => { await plugin.app.fileManager.renameFile(file, newPath); }, renameFile: async (file: TFile, newName: string) => { const { moveFile } = get(); - const newPath = replaceNameInPath(file, newName) + const newPath = replaceNameInPath(file, newName); await moveFile(file, newPath); }, diff --git a/src/store/file/sort.ts b/src/store/file/sort.ts index 1dcf76f..77b474a 100644 --- a/src/store/file/sort.ts +++ b/src/store/file/sort.ts @@ -32,8 +32,6 @@ export interface SortFileSlice { fileSortRule: FileSortRule; filesSortRulesGroup: FileSortRule[][]; - canManualSortViewModes: ViewMode[]; - sortDisabledViewModes: ViewMode[]; isFileSortDisabled: () => boolean; isFileSortRuleAbled: (rule: FileSortRule) => boolean; @@ -59,23 +57,20 @@ export const createSortFileSlice = ]; }, - get canManualSortViewModes(): ViewMode[] { - return [VIEW_MODE.FOLDER]; - }, - - get sortDisabledViewModes(): ViewMode[] { - return [VIEW_MODE.SEARCH]; - }, - isFileSortDisabled(): boolean { - const { sortDisabledViewModes, viewMode } = get(); - return sortDisabledViewModes.includes(viewMode); + const { canFilesSortViewModes, viewMode } = get(); + return !canFilesSortViewModes.includes(viewMode); }, isFileSortRuleAbled: (rule: FileSortRule) => { - const { canManualSortViewModes, viewMode } = get(); + const { + canFilesManualSortViewModes, + isFileSortDisabled, + viewMode, + } = get(); + if (isFileSortDisabled()) return false; return rule === FILE_MANUAL_SORT_RULE - ? canManualSortViewModes.includes(viewMode) + ? canFilesManualSortViewModes.includes(viewMode) : true; },