mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-22 20:46:38 +08:00
fix: page list all, favorite, trash
This commit is contained in:
@@ -30,6 +30,8 @@ export interface AppStateContext extends AppStateValue {
|
||||
loadPage: (pageId: string) => Promise<StorePage | null> | null;
|
||||
createPage: (pageId?: string) => Promise<string | null> | null;
|
||||
getPageMeta: (pageId: string) => PageMeta | null;
|
||||
toggleFavoritePage: (pageId: string) => void;
|
||||
toggleDeletePage: (pageId: string) => void;
|
||||
}
|
||||
|
||||
export const AppState = createContext<AppStateContext>({
|
||||
@@ -50,6 +52,8 @@ export const AppState = createContext<AppStateContext>({
|
||||
loadPage: () => null,
|
||||
createPage: () => null,
|
||||
getPageMeta: () => null,
|
||||
toggleFavoritePage: () => {},
|
||||
toggleDeletePage: () => {},
|
||||
});
|
||||
|
||||
export const useAppState = () => {
|
||||
|
||||
@@ -124,6 +124,32 @@ export const AppStateProvider = ({ children }: { children?: ReactNode }) => {
|
||||
null
|
||||
);
|
||||
},
|
||||
toggleFavoritePage: (pageId: string) => {
|
||||
const { currentWorkspace } = state;
|
||||
if (!currentWorkspace) {
|
||||
return;
|
||||
}
|
||||
const pageMeta = currentWorkspace.meta.pageMetas.find(
|
||||
p => p.id === pageId
|
||||
);
|
||||
if (pageMeta) {
|
||||
currentWorkspace.setPageMeta(pageId, {
|
||||
favorite: !pageMeta.favorite,
|
||||
});
|
||||
}
|
||||
},
|
||||
toggleDeletePage: (pageId: string) => {
|
||||
const { currentWorkspace } = state;
|
||||
const pageMeta = currentWorkspace?.meta.pageMetas.find(
|
||||
p => p.id === pageId
|
||||
);
|
||||
if (pageMeta) {
|
||||
currentWorkspace!.setPageMeta(pageId, {
|
||||
trash: !pageMeta.trash,
|
||||
trashDate: +new Date(),
|
||||
});
|
||||
}
|
||||
},
|
||||
}),
|
||||
[state, setState, loadWorkspaceHandler, createEditorHandler]
|
||||
);
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
import { useState, useEffect } from 'react';
|
||||
import type { Workspace } from '@blocksuite/store';
|
||||
import type { PageMeta as OriginalPageMeta } from '@blocksuite/store';
|
||||
import type { EditorContainer } from '@blocksuite/editor';
|
||||
|
||||
export type PageMeta = {
|
||||
favorite: boolean;
|
||||
trash: boolean;
|
||||
trashDate: number | void;
|
||||
updatedDate: number | void;
|
||||
mode: EditorContainer['mode'];
|
||||
} & OriginalPageMeta;
|
||||
|
||||
export const usePageList = (workspace: Workspace | null) => {
|
||||
const [pageList, setPageList] = useState<PageMeta[]>([]);
|
||||
|
||||
useEffect(() => {
|
||||
if (!workspace) {
|
||||
return;
|
||||
}
|
||||
setPageList(workspace.meta.pageMetas as PageMeta[]);
|
||||
const dispose = workspace.meta.pagesUpdated.on(res => {
|
||||
setPageList(workspace.meta.pageMetas as PageMeta[]);
|
||||
}).dispose;
|
||||
return () => {
|
||||
dispose();
|
||||
};
|
||||
}, [workspace]);
|
||||
|
||||
return pageList;
|
||||
};
|
||||
Reference in New Issue
Block a user