feat: disable create file button in search mode

This commit is contained in:
Xu Quan 2025-07-14 13:34:48 +08:00
parent dfd0c10660
commit 1706dc5b1a
4 changed files with 58 additions and 27 deletions

View file

@ -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(),
}
);
};

View file

@ -9,18 +9,25 @@ export const VIEW_MODE = {
ALL: "all",
TAG: "tag",
FOLDER: "folder",
SEARCH: "search",
};
export type ViewMode = ValueOf<typeof VIEW_MODE>;
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);
},
});

View file

@ -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<TFile>;
createFileWithDefaultName: (folder: TFolder) => Promise<TFile | undefined>;
duplicateFile: (file: TFile) => Promise<TFile>;
isCreateFileAbled: () => boolean;
moveFile: (file: TFile, newPath: string) => Promise<void>;
renameFile: (file: TFile, newName: string) => Promise<void>;
@ -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);
},

View file

@ -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;
},