fix: page list all, favorite, trash

This commit is contained in:
alt0
2022-12-20 02:01:53 +08:00
parent 49f4c49426
commit f3644385a8
11 changed files with 135 additions and 36 deletions
@@ -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;
};