chore: migrate page method to hooks

This commit is contained in:
QiShaoXuan
2022-12-20 17:40:05 +08:00
parent 9fdb3c4311
commit 393da326e6
12 changed files with 159 additions and 54 deletions
@@ -0,0 +1,23 @@
import { useCallback } from 'react';
import { useAppState } from '@/providers/app-state-provider';
import { PageMeta } from '@blocksuite/store';
export type ChangePageMeta = (
pageId: string,
pageMeta: Partial<PageMeta>
) => void;
export const useChangePageMeta = () => {
const { currentWorkspace } = useAppState();
return useCallback<ChangePageMeta>(
(pageId, pageMeta) => {
currentWorkspace?.setPageMeta(pageId, {
...pageMeta,
});
},
[currentWorkspace]
);
};
export default ChangePageMeta;
@@ -0,0 +1,37 @@
import { useCallback, useEffect, useState } from 'react';
import { useAppState } from '@/providers/app-state-provider';
import { PageMeta } from '@blocksuite/store';
export const useCurrentPageMeta = () => {
const { currentPage, currentWorkspace } = useAppState();
const pageMetaHandler = useCallback(() => {
if (!currentPage || !currentWorkspace) {
return null;
}
return (
currentWorkspace?.meta.pageMetas.find(p => p.id === currentPage.pageId) ??
null
);
}, [currentPage, currentWorkspace]);
const [currentPageMeta, setCurrentPageMeta] = useState<PageMeta | null>(
pageMetaHandler
);
useEffect(() => {
setCurrentPageMeta(pageMetaHandler);
const dispose = currentWorkspace?.meta.pagesUpdated.on(res => {
setCurrentPageMeta(pageMetaHandler);
}).dispose;
return () => {
dispose?.();
};
}, [currentPage, currentWorkspace, pageMetaHandler]);
return currentPageMeta;
};
export default useCurrentPageMeta;
@@ -0,0 +1,7 @@
import { useState } from 'react';
import { EditorContainer } from '@blocksuite/editor';
import { useAppState } from '@/providers/app-state-provider';
export const usePageHandler = () => {
return null;
};
+52
View File
@@ -0,0 +1,52 @@
import { Page } from '@blocksuite/store';
import { QueryContent } from '@blocksuite/store/dist/workspace/search';
import { PageMeta } from '@/providers/editor-provider';
import { useAppState } from '@/providers/app-state-provider';
export type EditorHandlers = {
// createPage: (params?: { pageId?: string; title?: string }) => Promise<Page>;
// openPage: (
// pageId: string,
// query?: { [key: string]: string }
// ) => Promise<boolean>;
// getPageMeta: (pageId?: string) => PageMeta;
toggleDeletePage: (pageId: string) => void;
toggleFavoritePage: (pageId: string) => void;
// permanentlyDeletePage: (pageId: string) => void;
search: (query: QueryContent) => Map<string, string | undefined>;
// changeEditorMode: (pageId: string) => void;
};
export const usePageHelper = (): EditorHandlers => {
const { currentWorkspace } = useAppState();
return {
toggleFavoritePage: (pageId: string) => {
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 pageMeta = currentWorkspace?.meta.pageMetas.find(
p => p.id === pageId
);
if (pageMeta) {
currentWorkspace!.setPageMeta(pageId, {
trash: !pageMeta.trash,
trashDate: +new Date(),
});
}
},
search: (query: QueryContent) => {
return currentWorkspace!.search(query);
},
};
};
@@ -0,0 +1,25 @@
import { useEffect, useState } from 'react';
import { PageMeta } from '@/providers/app-state-provider/usePageList';
import { useAppState } from '@/providers/app-state-provider';
export const usePageMetaList = () => {
const { currentWorkspace } = useAppState();
const [pageList, setPageList] = useState<PageMeta[]>([]);
useEffect(() => {
if (!currentWorkspace) {
return;
}
setPageList(currentWorkspace.meta.pageMetas as PageMeta[]);
const dispose = currentWorkspace.meta.pagesUpdated.on(res => {
setPageList(currentWorkspace.meta.pageMetas as PageMeta[]);
}).dispose;
return () => {
dispose();
};
}, [currentWorkspace]);
return pageList;
};
export default usePageMetaList;