mirror of
https://github.com/xuquan-nikkkki/FolderFile-Splitter-Plugin.git
synced 2026-07-22 05:37:28 +00:00
feat: disable create file button in search mode
This commit is contained in:
parent
dfd0c10660
commit
1706dc5b1a
4 changed files with 58 additions and 27 deletions
|
|
@ -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(),
|
||||
}
|
||||
);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
},
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
},
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue