返回 oh-my-ppt
sessionDetailRuntimeStore.ts
根目录 / src / renderer / src / store / sessionDetailRuntimeStore.ts
1 import { create } from 'zustand'
2 import type {
3 AddSessionElementHandler,
4 WorkspaceRibbonRegisteredActions
5 } from '@renderer/types/session-detail'
6
7 export type {
8 AddSessionElementHandler,
9 AddSessionElementOptions,
10 WorkspaceRibbonRegisteredActions
11 } from '@renderer/types/session-detail'
12
13 interface SessionDetailRuntimeStore {
14 addElementHandler: AddSessionElementHandler | null
15 setAddElementHandler: (handler: AddSessionElementHandler | null) => void
16 addElement: AddSessionElementHandler
17 refreshCurrentPreviewHandler: (() => void) | null
18 setRefreshCurrentPreviewHandler: (handler: (() => void) | null) => void
19 refreshCurrentPreview: () => void
20 reloadCurrentPreviewIgnoringCacheHandler: (() => void) | null
21 setReloadCurrentPreviewIgnoringCacheHandler: (handler: (() => void) | null) => void
22 reloadCurrentPreviewIgnoringCache: () => void
23 workspaceRibbonActions: WorkspaceRibbonRegisteredActions | null
24 setWorkspaceRibbonActions: (actions: WorkspaceRibbonRegisteredActions | null) => void
25 }
26
27 export const useSessionDetailRuntimeStore = create<SessionDetailRuntimeStore>((set, get) => ({
28 addElementHandler: null,
29 setAddElementHandler: (addElementHandler) => set({ addElementHandler }),
30 addElement: async (relativePath, fileName, options) => {
31 const handler = get().addElementHandler
32 return handler ? handler(relativePath, fileName, options) : false
33 },
34 refreshCurrentPreviewHandler: null,
35 setRefreshCurrentPreviewHandler: (refreshCurrentPreviewHandler) =>
36 set({ refreshCurrentPreviewHandler }),
37 refreshCurrentPreview: () => {
38 const handler = get().refreshCurrentPreviewHandler
39 handler?.()
40 },
41 reloadCurrentPreviewIgnoringCacheHandler: null,
42 setReloadCurrentPreviewIgnoringCacheHandler: (reloadCurrentPreviewIgnoringCacheHandler) =>
43 set({ reloadCurrentPreviewIgnoringCacheHandler }),
44 reloadCurrentPreviewIgnoringCache: () => {
45 const handler = get().reloadCurrentPreviewIgnoringCacheHandler
46 handler?.()
47 },
48 workspaceRibbonActions: null,
49 setWorkspaceRibbonActions: (workspaceRibbonActions) => set({ workspaceRibbonActions })
50 }))
51
51 lines TYPESCRIPT