Files
leonpan-assets/src/redux/globalStateSlice.ts
2025-10-19 13:31:11 +00:00

869 lines
26 KiB
TypeScript
Executable File

import { createSlice, PayloadAction } from "@reduxjs/toolkit";
import {
ConflictDetail,
DirectLink,
FileResponse,
Share,
StoragePolicy,
Viewer,
ViewerSession,
} from "../api/explorer.ts";
import { Response } from "../api/request.ts";
import { User } from "../api/user.ts";
import { SelectType } from "../component/Uploader/core";
import SessionManager, { UserSettings } from "../session";
export interface DndState {
dragging?: boolean;
draggingWithSelected?: boolean;
}
export interface ImageViewerState extends GeneralViewerState {
index?: number;
exts: string[];
}
export interface ImageEditorState extends GeneralViewerState {}
export interface GeneralViewerState {
open: boolean;
file: FileResponse;
version?: string;
}
export interface ViewerSelectorState extends GeneralViewerState {
viewers: Viewer[];
entitySize: number;
}
export interface WopiViewerState extends GeneralViewerState {
src: string;
session: ViewerSession;
}
export interface DrawIOViewerState extends GeneralViewerState {
host?: string;
}
export interface CustomViewerState extends GeneralViewerState {
url: string;
}
export interface MusicPlayerState {
files: FileResponse[];
startIndex: number;
version?: string;
}
export const CreateNewDialogType = {
folder: "folder",
file: "file",
};
export interface UploadProgressTotal {
processedSize: number;
totalSize: number;
}
export interface DialogSelectOption {
name: string;
description: string;
value: any;
}
export interface GlobalStateSlice {
loading: {
headlessFrame: boolean;
};
preferredTheme?: string;
drawerOpen: boolean;
mobileDrawerOpen?: boolean;
darkMode?: boolean;
drawerWidth: number;
userInfoCache: {
[key: string]: User;
};
// Others
pinedGeneration: number;
// Dialogs
// Aggregated error dialog
aggregatedErrorDialogOpen?: boolean;
aggregatedError?: Response<any>;
aggregatedErrorFile?: {
[key: string]: FileResponse;
};
// Lock conflict dialog
lockConflictDialogOpen?: boolean;
lockConflictError?: Response<ConflictDetail[]>;
lockConflictFile?: {
[key: string]: FileResponse;
};
lockConflictPromiseId?: string;
// Confirmation dialog
confirmDialogOpen?: boolean;
confirmDialogMessage?: string;
confirmPromiseId?: string;
// Pin file dialog
pinFileDialogOpen?: boolean;
pinFileUri?: string;
// path selection dialog
pathSelectDialogOpen?: boolean;
pathSelectDialogVariant?: string;
pathSelectAllowedFs?: string[];
pathSelectPromiseId?: string;
pathSelectInitialPath?: string;
// Tags dialog
tagsDialogOpen?: boolean;
tagsDialogFile?: FileResponse[];
// Change icon dialog
changeIconDialogOpen?: boolean;
changeIconDialogFile?: FileResponse[];
// Share link dialog
shareLinkDialogOpen?: boolean;
shareLinkDialogFile?: FileResponse;
shareLinkDialogShare?: Share;
// Version control dialog
versionControlDialogOpen?: boolean;
versionControlDialogFile?: FileResponse;
versionControlHighlight?: string;
// Manage share link dialog
manageShareDialogOpen?: boolean;
manageShareDialogFile?: FileResponse;
// Stale version action dialog
staleVersionDialogOpen?: boolean;
staleVersionUri?: string;
staleVersionPromiseId?: string;
// Save as dialog
saveAsDialogOpen?: boolean;
saveAsInitialName?: string;
saveAsPromiseId?: string;
// Create new dialog
createNewDialogOpen?: boolean;
createNewDialogType?: string;
createNewDialogDefault?: string;
createNewPromiseId?: string;
createNewDialogFmIndex?: number;
// Select option dialog
selectOptionDialogOpen?: boolean;
selectOptionDialogOptions?: DialogSelectOption[];
selectOptionPromiseId?: string;
selectOptionTitle?: string;
// Batch download log dialog
batchDownloadLogDialogOpen?: boolean;
batchDownloadLogDialogId?: string;
batchDownloadLogDialogLogs?: {
[key: string]: string;
};
// Create archive dialog
createArchiveDialogOpen?: boolean;
createArchiveDialogFiles?: FileResponse[];
// Extract archive dialog
extractArchiveDialogOpen?: boolean;
extractArchiveDialogFile?: FileResponse;
extractArchiveDialogMask?: string[];
extractArchiveDialogEncoding?: string;
// Remote download dialog
remoteDownloadDialogOpen?: boolean;
remoteDownloadDialogFile?: FileResponse;
// List view column settings dialog
listViewColumnSettingDialogOpen?: boolean;
// Direct Link result dialog
directLinkDialogOpen?: boolean;
directLinkRes?: DirectLink[];
// Direct Link management dialog
directLinkManagementDialogOpen?: boolean;
directLinkManagementDialogFile?: FileResponse;
directLinkHighlight?: string;
// DnD
dndState: DndState;
// Share info cache
shareInfo: {
[key: string]: Share;
};
// Sidebar
sidebarOpen?: boolean;
sidebarTarget?: FileResponse | string;
// Viewers
imageViewer?: ImageViewerState;
imageEditor?: ImageEditorState;
photopeaViewer?: GeneralViewerState;
wopiViewer?: WopiViewerState;
codeViewer?: GeneralViewerState;
drawIOViewer?: DrawIOViewerState;
markdownViewer?: GeneralViewerState;
videoViewer?: GeneralViewerState;
pdfViewer?: GeneralViewerState;
customViewer?: CustomViewerState;
epubViewer?: GeneralViewerState;
musicPlayer?: MusicPlayerState;
excalidrawViewer?: GeneralViewerState;
archiveViewer?: GeneralViewerState;
// Viewer selector
viewerSelector?: ViewerSelectorState;
// Uploader
uploadFileSignal?: number;
uploadFolderSignal?: number;
uploadProgress?: UploadProgressTotal;
uploadTaskCount?: number;
uploadTaskListOpen?: boolean;
uploadFromClipboardDialogOpen?: boolean;
uploadRawFiles?: File[];
uploadRawPromiseId?: string[];
policyOptionCache?: StoragePolicy[];
// Search popup
searchPopupOpen?: boolean;
// Advance search
advanceSearchOpen?: boolean;
advanceSearchBasePath?: string;
advanceSearchInitialNameCondition?: string[];
// Share README
shareReadmeDetect?: number;
shareReadmeOpen?: boolean;
shareReadmeTarget?: FileResponse;
}
let preferred_theme: string | undefined = undefined;
try {
preferred_theme = SessionManager.currentLogin().user.preferred_theme;
} catch (e) {}
const initialState: GlobalStateSlice = {
loading: {
headlessFrame: false,
},
pinedGeneration: 0,
darkMode: SessionManager.get(UserSettings.PreferredDarkMode),
preferredTheme: preferred_theme,
drawerOpen: true,
drawerWidth: SessionManager.getWithFallback(UserSettings.DrawerWidth),
userInfoCache: {},
dndState: {},
shareInfo: {},
};
export const globalStateSlice = createSlice({
name: "globalState",
initialState,
reducers: {
setUploadRawFiles: (
state,
action: PayloadAction<{
files: File[];
promiseId: string[];
}>,
) => {
state.uploadRawFiles = action.payload.files ?? [];
state.uploadRawPromiseId = action.payload.promiseId ?? [];
},
setShareReadmeDetect: (state, action: PayloadAction<boolean>) => {
state.shareReadmeDetect = action.payload ? (state.shareReadmeDetect ?? 0) + 1 : 0;
},
setShareReadmeOpen: (state, action: PayloadAction<{ open: boolean; target?: FileResponse }>) => {
state.shareReadmeOpen = action.payload.open;
state.shareReadmeTarget = action.payload.target;
},
closeShareReadme: (state) => {
state.shareReadmeOpen = false;
},
setDirectLinkManagementDialog: (
state,
action: PayloadAction<{ open: boolean; file?: FileResponse; highlight?: string }>,
) => {
state.directLinkManagementDialogOpen = action.payload.open;
state.directLinkManagementDialogFile = action.payload.file;
state.directLinkHighlight = action.payload.highlight;
},
closeDirectLinkManagementDialog: (state) => {
state.directLinkManagementDialogOpen = false;
state.directLinkManagementDialogFile = undefined;
state.directLinkHighlight = undefined;
},
setMobileDrawerOpen: (state, action: PayloadAction<boolean>) => {
state.mobileDrawerOpen = action.payload;
},
setDirectLinkDialog: (state, action: PayloadAction<{ open: boolean; res?: DirectLink[] }>) => {
state.directLinkDialogOpen = action.payload.open;
state.directLinkRes = action.payload.res;
},
closeDirectLinkDialog: (state) => {
state.directLinkDialogOpen = false;
},
setListViewColumnSettingDialog: (state, action: PayloadAction<boolean>) => {
state.listViewColumnSettingDialogOpen = action.payload;
},
setAdvanceSearch: (
state,
action: PayloadAction<{
open: boolean;
basePath?: string;
nameCondition?: string[];
}>,
) => {
state.advanceSearchOpen = action.payload.open;
state.advanceSearchBasePath = action.payload.basePath;
state.advanceSearchInitialNameCondition = action.payload.nameCondition;
},
closeAdvanceSearch: (state) => {
state.advanceSearchOpen = false;
},
setSearchPopup: (state, action: PayloadAction<boolean>) => {
state.searchPopupOpen = action.payload;
},
setRemoteDownloadDialog: (state, action: PayloadAction<{ open: boolean; file?: FileResponse }>) => {
state.remoteDownloadDialogOpen = action.payload.open;
state.remoteDownloadDialogFile = action.payload.file;
},
closeRemoteDownloadDialog: (state) => {
state.remoteDownloadDialogOpen = false;
},
setPolicyOptionCache: (state, action: PayloadAction<StoragePolicy[] | undefined>) => {
state.policyOptionCache = action.payload;
},
resetDialogs: (state) => {
state.aggregatedErrorDialogOpen = state.aggregatedErrorDialogOpen ? false : undefined;
state.pathSelectDialogOpen = state.pathSelectDialogOpen ? false : undefined;
state.tagsDialogOpen = state.tagsDialogOpen ? false : undefined;
state.changeIconDialogOpen = state.changeIconDialogOpen ? false : undefined;
state.shareLinkDialogOpen = state.shareLinkDialogOpen ? false : undefined;
state.versionControlDialogOpen = state.versionControlDialogOpen ? false : undefined;
state.manageShareDialogOpen = state.manageShareDialogOpen ? false : undefined;
state.createNewDialogOpen = state.createNewDialogOpen ? false : undefined;
state.selectOptionDialogOpen = state.selectOptionDialogOpen ? false : undefined;
state.batchDownloadLogDialogOpen = state.batchDownloadLogDialogOpen ? false : undefined;
state.createArchiveDialogOpen = state.createArchiveDialogOpen ? false : undefined;
state.extractArchiveDialogOpen = state.extractArchiveDialogOpen ? false : undefined;
// reset all viewers
state.imageViewer = undefined;
state.imageEditor = undefined;
state.photopeaViewer = undefined;
state.wopiViewer = undefined;
state.codeViewer = undefined;
state.drawIOViewer = undefined;
state.markdownViewer = undefined;
state.videoViewer = undefined;
state.pdfViewer = undefined;
state.customViewer = undefined;
state.epubViewer = undefined;
state.excalidrawViewer = undefined;
state.archiveViewer = undefined;
},
setExtractArchiveDialog: (
state,
action: PayloadAction<{ open: boolean; file?: FileResponse; mask?: string[]; encoding?: string }>,
) => {
state.extractArchiveDialogOpen = action.payload.open;
state.extractArchiveDialogFile = action.payload.file;
state.extractArchiveDialogMask = action.payload.mask;
state.extractArchiveDialogEncoding = action.payload.encoding;
},
closeExtractArchiveDialog: (state) => {
state.extractArchiveDialogOpen = false;
state.extractArchiveDialogMask = undefined;
state.extractArchiveDialogEncoding = undefined;
},
setCreateArchiveDialog: (
state,
action: PayloadAction<{
open: boolean;
files: FileResponse[];
}>,
) => {
state.createArchiveDialogOpen = action.payload.open;
state.createArchiveDialogFiles = action.payload.files;
},
closeCreateArchiveDialog: (state) => {
state.createArchiveDialogOpen = false;
},
setBatchDownloadLogDialog: (
state,
action: PayloadAction<{
open: boolean;
id: string;
}>,
) => {
state.batchDownloadLogDialogOpen = action.payload.open;
state.batchDownloadLogDialogId = action.payload.id;
},
closeBatchDownloadLogDialog: (state) => {
state.batchDownloadLogDialogOpen = false;
},
setBatchDownloadLog: (
state,
action: PayloadAction<{
id: string;
logs: string;
}>,
) => {
if (!state.batchDownloadLogDialogLogs) {
state.batchDownloadLogDialogLogs = {};
}
state.batchDownloadLogDialogLogs[action.payload.id] = action.payload.logs;
},
setSelectOptionDialog: (
state,
action: PayloadAction<{
open: boolean;
options?: DialogSelectOption[];
promiseId: string;
title?: string;
}>,
) => {
state.selectOptionDialogOpen = action.payload.open;
state.selectOptionDialogOptions = action.payload.options;
state.selectOptionPromiseId = action.payload.promiseId;
state.selectOptionTitle = action.payload.title;
},
closeSelectOptionDialog: (state) => {
state.selectOptionDialogOpen = false;
},
setUploadFromClipboardDialog: (state, action: PayloadAction<boolean>) => {
state.uploadFromClipboardDialogOpen = action.payload;
},
openUploadTaskList: (state) => {
state.uploadTaskListOpen = true;
},
closeUploadTaskList: (state) => {
state.uploadTaskListOpen = false;
},
setUploadProgress: (state, action: PayloadAction<{ progress: UploadProgressTotal; count: number }>) => {
state.uploadProgress = action.payload.progress;
state.uploadTaskCount = action.payload.count;
},
selectForUpload(state, action: PayloadAction<{ type: SelectType }>) {
if (action.payload.type === SelectType.File) {
state.uploadFileSignal = (state.uploadFileSignal ?? 0) + 1;
} else {
state.uploadFolderSignal = (state.uploadFolderSignal ?? 0) + 1;
}
},
setCreateNewDialog: (
state,
action: PayloadAction<{
open: boolean;
type?: string;
default?: string;
promiseId?: string;
fmIndex: number;
}>,
) => {
state.createNewDialogOpen = action.payload.open;
state.createNewDialogType = action.payload.type;
state.createNewDialogDefault = action.payload.default;
state.createNewPromiseId = action.payload.promiseId;
state.createNewDialogFmIndex = action.payload.fmIndex;
},
closeCreateNewDialog: (state) => {
state.createNewDialogOpen = false;
},
setMusicPlayer: (state, action: PayloadAction<MusicPlayerState>) => {
state.musicPlayer = action.payload;
},
closeMusicPlayer: (state) => {
state.musicPlayer = undefined;
},
setEpubViewer: (state, action: PayloadAction<GeneralViewerState>) => {
state.epubViewer = action.payload;
},
closeEpubViewer: (state) => {
state.epubViewer && (state.epubViewer.open = false);
},
setCustomViewer: (state, action: PayloadAction<CustomViewerState>) => {
state.customViewer = action.payload;
},
closeCustomViewer: (state) => {
state.customViewer && (state.customViewer.open = false);
},
setPdfViewer: (state, action: PayloadAction<GeneralViewerState>) => {
state.pdfViewer = action.payload;
},
closePdfViewer: (state) => {
state.pdfViewer && (state.pdfViewer.open = false);
},
setVideoViewer: (state, action: PayloadAction<GeneralViewerState>) => {
state.videoViewer = action.payload;
},
closeVideoViewer: (state) => {
state.videoViewer && (state.videoViewer.open = false);
},
setMarkdownViewer: (state, action: PayloadAction<GeneralViewerState>) => {
state.markdownViewer = action.payload;
},
closeMarkdownViewer: (state) => {
state.markdownViewer && (state.markdownViewer.open = false);
},
setExcalidrawViewer: (state, action: PayloadAction<GeneralViewerState>) => {
state.excalidrawViewer = action.payload;
},
closeExcalidrawViewer: (state) => {
state.excalidrawViewer && (state.excalidrawViewer.open = false);
},
setArchiveViewer: (state, action: PayloadAction<GeneralViewerState>) => {
state.archiveViewer = action.payload;
},
closeArchiveViewer: (state) => {
state.archiveViewer && (state.archiveViewer.open = false);
},
addShareInfo: (state, action: PayloadAction<{ info: Share; id: string }>) => {
state.shareInfo[action.payload.id] = action.payload.info;
},
setHeadlessFrameLoading: (state, action: PayloadAction<boolean>) => {
state.loading.headlessFrame = action.payload;
},
setPreferredTheme: (state, action: PayloadAction<string>) => {
state.preferredTheme = action.payload;
},
setDrawerOpen: (state, action: PayloadAction<boolean>) => {
state.drawerOpen = action.payload;
},
setDrawerWidth: (state, action: PayloadAction<number>) => {
state.drawerWidth = action.payload;
},
setDarkMode: (state, action: PayloadAction<boolean | undefined>) => {
state.darkMode = action.payload;
},
setUserInfoCache: (state, action: PayloadAction<[string, User]>) => {
state.userInfoCache[action.payload[0]] = action.payload[1];
},
setAggregatedErrorDialog: (
state,
action: PayloadAction<{
open: boolean;
error?: Response<any>;
files?: { [key: string]: FileResponse };
}>,
) => {
state.aggregatedErrorDialogOpen = action.payload.open;
state.aggregatedError = action.payload.error;
state.aggregatedErrorFile = action.payload.files;
},
closeAggregatedErrorDialog: (state) => {
state.aggregatedErrorDialogOpen = false;
},
setLockConflictDialog: (
state,
action: PayloadAction<{
open: boolean;
error?: Response<ConflictDetail[]>;
files?: { [key: string]: FileResponse };
promiseId?: string;
}>,
) => {
state.lockConflictDialogOpen = action.payload.open;
state.lockConflictError = action.payload.error;
state.lockConflictFile = action.payload.files;
state.lockConflictPromiseId = action.payload.promiseId;
},
closeLockConflictDialog: (state) => {
state.lockConflictDialogOpen = false;
},
updateLockConflicts: (state, action: PayloadAction<Response<ConflictDetail[]>>) => {
state.lockConflictError = action.payload;
},
setConfirmDialog: (
state,
action: PayloadAction<{
open: boolean;
message?: string;
promiseId?: string;
}>,
) => {
state.confirmDialogOpen = action.payload.open;
state.confirmDialogMessage = action.payload.message;
state.confirmPromiseId = action.payload.promiseId;
},
closeConfirmDialog: (state) => {
state.confirmDialogOpen = false;
},
increasePinedGeneration: (state) => {
state.pinedGeneration += 1;
},
setPinFileDialog: (state, action: PayloadAction<{ open: boolean; uri?: string }>) => {
state.pinFileDialogOpen = action.payload.open;
state.pinFileUri = action.payload.uri;
},
closePinFileDialog: (state) => {
state.pinFileDialogOpen = false;
},
setDragging: (state, action: PayloadAction<DndState>) => {
state.dndState.dragging = action.payload.dragging;
state.dndState.draggingWithSelected = action.payload.draggingWithSelected;
},
setPathSelectionDialog: (
state,
action: PayloadAction<{
open: boolean;
variant: string;
promiseId: string;
initialPath?: string;
}>,
) => {
state.pathSelectDialogOpen = action.payload.open;
state.pathSelectDialogVariant = action.payload.variant;
state.pathSelectPromiseId = action.payload.promiseId;
state.pathSelectInitialPath = action.payload.initialPath;
},
closePathSelectionDialog: (state) => {
state.pathSelectDialogOpen = false;
},
setTagsDialog: (state, action: PayloadAction<{ open: boolean; file?: FileResponse[] }>) => {
state.tagsDialogOpen = action.payload.open;
state.tagsDialogFile = action.payload.file;
},
closeTagsDialog: (state) => {
state.tagsDialogOpen = false;
},
setChangeIconDialog: (state, action: PayloadAction<{ open: boolean; file?: FileResponse[] }>) => {
state.changeIconDialogOpen = action.payload.open;
state.changeIconDialogFile = action.payload.file;
},
closeChangeIconDialog: (state) => {
state.changeIconDialogOpen = false;
},
setShareLinkDialog: (
state,
action: PayloadAction<{
open: boolean;
file?: FileResponse;
share?: Share;
}>,
) => {
state.shareLinkDialogOpen = action.payload.open;
state.shareLinkDialogFile = action.payload.file;
state.shareLinkDialogShare = action.payload.share;
},
closeShareLinkDialog: (state) => {
state.shareLinkDialogOpen = false;
},
setSidebar: (state, action: PayloadAction<{ open: boolean; target?: FileResponse | string }>) => {
state.sidebarOpen = action.payload.open;
state.sidebarTarget = action.payload.target;
},
closeSidebar: (state) => {
state.sidebarOpen = false;
},
setVersionControlDialog: (
state,
action: PayloadAction<{
open: boolean;
file?: FileResponse;
highlight?: string;
}>,
) => {
state.versionControlDialogOpen = action.payload.open;
state.versionControlDialogFile = action.payload.file;
state.versionControlHighlight = action.payload.highlight;
},
closeVersionControlDialog: (state) => {
state.versionControlDialogOpen = false;
},
setManageShareDialog: (state, action: PayloadAction<{ open: boolean; file: FileResponse }>) => {
state.manageShareDialogOpen = action.payload.open;
state.manageShareDialogFile = action.payload.file;
},
closeManageShareDialog: (state) => {
state.manageShareDialogOpen = false;
},
setImageViewer: (state, action: PayloadAction<ImageViewerState>) => {
state.imageViewer = action.payload;
},
closeImageViewer: (state) => {
state.imageViewer = undefined;
},
setImageEditor: (state, action: PayloadAction<ImageEditorState>) => {
state.imageEditor = action.payload;
},
closeImageEditor: (state) => {
state.imageEditor = undefined;
},
setStaleVersionDialog: (state, action: PayloadAction<{ open: boolean; promiseId: string; uri: string }>) => {
state.staleVersionDialogOpen = action.payload.open;
state.staleVersionPromiseId = action.payload.promiseId;
state.staleVersionUri = action.payload.uri;
},
closeStaleVersionDialog: (state) => {
state.staleVersionDialogOpen = false;
},
setSaveAsDialog: (
state,
action: PayloadAction<{
open: boolean;
name?: string;
promiseId: string;
}>,
) => {
state.saveAsDialogOpen = action.payload.open;
state.saveAsInitialName = action.payload.name;
state.saveAsPromiseId = action.payload.promiseId;
},
closeSaveAsDialog: (state) => {
state.saveAsDialogOpen = false;
},
setPhotopeaViewer: (state, action: PayloadAction<GeneralViewerState>) => {
state.photopeaViewer = action.payload;
},
closePhotopeaViewer: (state) => {
state.photopeaViewer && (state.photopeaViewer.open = false);
},
setViewerSelector: (state, action: PayloadAction<ViewerSelectorState>) => {
state.viewerSelector = action.payload;
},
closeViewerSelector: (state) => {
state.viewerSelector && (state.viewerSelector.open = false);
},
setWopiViewer: (state, action: PayloadAction<WopiViewerState>) => {
state.wopiViewer = action.payload;
},
closeWopiViewer: (state) => {
state.wopiViewer && (state.wopiViewer.open = false);
},
setCodeViewer: (state, action: PayloadAction<GeneralViewerState>) => {
state.codeViewer = action.payload;
},
closeCodeViewer: (state) => {
state.codeViewer && (state.codeViewer.open = false);
},
setDrawIOViewer: (state, action: PayloadAction<DrawIOViewerState>) => {
state.drawIOViewer = action.payload;
},
closeDrawIOViewer: (state) => {
state.drawIOViewer && (state.drawIOViewer.open = false);
},
},
});
export default globalStateSlice.reducer;
export const {
setArchiveViewer,
closeArchiveViewer,
setUploadRawFiles,
setMobileDrawerOpen,
setDirectLinkDialog,
closeDirectLinkDialog,
setListViewColumnSettingDialog,
closeAdvanceSearch,
setAdvanceSearch,
setRemoteDownloadDialog,
closeRemoteDownloadDialog,
setExtractArchiveDialog,
closeExtractArchiveDialog,
setCreateArchiveDialog,
closeCreateArchiveDialog,
setBatchDownloadLogDialog,
closeBatchDownloadLogDialog,
setBatchDownloadLog,
setSelectOptionDialog,
closeSelectOptionDialog,
setUploadFromClipboardDialog,
openUploadTaskList,
closeUploadTaskList,
setUploadProgress,
selectForUpload,
setCreateNewDialog,
closeCreateNewDialog,
setMusicPlayer,
closeMusicPlayer,
setEpubViewer,
closeEpubViewer,
setCustomViewer,
closeCustomViewer,
setPdfViewer,
closePdfViewer,
setVideoViewer,
closeVideoViewer,
setMarkdownViewer,
closeMarkdownViewer,
setDrawIOViewer,
closeDrawIOViewer,
setCodeViewer,
closeCodeViewer,
setWopiViewer,
closeWopiViewer,
setViewerSelector,
closeViewerSelector,
setPhotopeaViewer,
closePhotopeaViewer,
setStaleVersionDialog,
closeStaleVersionDialog,
setImageViewer,
closeImageViewer,
setManageShareDialog,
closeManageShareDialog,
setVersionControlDialog,
closeVersionControlDialog,
closeSidebar,
setSidebar,
addShareInfo,
setShareLinkDialog,
closeShareLinkDialog,
setChangeIconDialog,
closeChangeIconDialog,
setTagsDialog,
closeTagsDialog,
setPathSelectionDialog,
closePathSelectionDialog,
setDragging,
setPinFileDialog,
closePinFileDialog,
increasePinedGeneration,
setConfirmDialog,
closeConfirmDialog,
updateLockConflicts,
closeLockConflictDialog,
setLockConflictDialog,
closeAggregatedErrorDialog,
setAggregatedErrorDialog,
setDarkMode,
setDrawerOpen,
setDrawerWidth,
setHeadlessFrameLoading,
setPreferredTheme,
setUserInfoCache,
setImageEditor,
closeImageEditor,
setSaveAsDialog,
closeSaveAsDialog,
resetDialogs,
setPolicyOptionCache,
setSearchPopup,
setExcalidrawViewer,
closeExcalidrawViewer,
setDirectLinkManagementDialog,
closeDirectLinkManagementDialog,
setShareReadmeDetect,
closeShareReadme,
setShareReadmeOpen,
} = globalStateSlice.actions;