mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-18 18:46:19 +08:00
40 lines
1.0 KiB
TypeScript
40 lines
1.0 KiB
TypeScript
import { useCallback, useEffect, useState } from 'react';
|
|
import { useAppState, PageMeta } from '@/providers/app-state-provider';
|
|
|
|
export const useCurrentPageMeta = (): PageMeta | null => {
|
|
const { currentPage, currentWorkspace } = useAppState();
|
|
|
|
const pageMetaHandler = useCallback((): PageMeta | null => {
|
|
if (!currentPage || !currentWorkspace) {
|
|
return null;
|
|
}
|
|
return (
|
|
(currentWorkspace.blocksuiteWorkspace?.meta.pageMetas.find(
|
|
p => p.id === currentPage.id
|
|
) as PageMeta) ?? null
|
|
);
|
|
}, [currentPage, currentWorkspace]);
|
|
|
|
const [currentPageMeta, setCurrentPageMeta] = useState<PageMeta | null>(
|
|
pageMetaHandler
|
|
);
|
|
|
|
useEffect(() => {
|
|
setCurrentPageMeta(pageMetaHandler);
|
|
|
|
const dispose = currentWorkspace?.blocksuiteWorkspace?.meta.pagesUpdated.on(
|
|
() => {
|
|
setCurrentPageMeta(pageMetaHandler);
|
|
}
|
|
).dispose;
|
|
|
|
return () => {
|
|
dispose?.();
|
|
};
|
|
}, [currentPage, currentWorkspace, pageMetaHandler]);
|
|
|
|
return currentPageMeta;
|
|
};
|
|
|
|
export default useCurrentPageMeta;
|