mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-17 01:56:27 +08:00
chore: migrate page method to hooks
This commit is contained in:
@@ -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;
|
||||
};
|
||||
@@ -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;
|
||||
Reference in New Issue
Block a user