feat(component): add skeleton in page detail (#2292)

This commit is contained in:
Himself65
2023-05-09 22:38:30 -05:00
committed by GitHub
parent 0c550a2827
commit b38017cd23
4 changed files with 40 additions and 9 deletions
@@ -1,6 +1,6 @@
import { PageDetailSkeleton } from '@affine/component/page-detail-skeleton';
import type { BlockSuiteFeatureFlags } from '@affine/env'; import type { BlockSuiteFeatureFlags } from '@affine/env';
import { config } from '@affine/env'; import { config } from '@affine/env';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { rootCurrentPageIdAtom } from '@affine/workspace/atom'; import { rootCurrentPageIdAtom } from '@affine/workspace/atom';
import { WorkspaceFlavour } from '@affine/workspace/type'; import { WorkspaceFlavour } from '@affine/workspace/type';
import { assertExists } from '@blocksuite/store'; import { assertExists } from '@blocksuite/store';
@@ -16,7 +16,6 @@ import { useCallback, useEffect } from 'react';
import { rootCurrentWorkspaceAtom } from '../../../atoms/root'; import { rootCurrentWorkspaceAtom } from '../../../atoms/root';
import { Unreachable } from '../../../components/affine/affine-error-eoundary'; import { Unreachable } from '../../../components/affine/affine-error-eoundary';
import { PageLoading } from '../../../components/pure/loading';
import { useReferenceLinkEffect } from '../../../hooks/affine/use-reference-link-effect'; import { useReferenceLinkEffect } from '../../../hooks/affine/use-reference-link-effect';
import { useCurrentWorkspace } from '../../../hooks/current/use-current-workspace'; import { useCurrentWorkspace } from '../../../hooks/current/use-current-workspace';
import { usePinboardHandler } from '../../../hooks/use-pinboard-handler'; import { usePinboardHandler } from '../../../hooks/use-pinboard-handler';
@@ -41,8 +40,8 @@ const WorkspaceDetail: React.FC = () => {
const { openPage } = useRouterHelper(router); const { openPage } = useRouterHelper(router);
const currentPageId = useAtomValue(rootCurrentPageIdAtom); const currentPageId = useAtomValue(rootCurrentPageIdAtom);
const [currentWorkspace] = useCurrentWorkspace(); const [currentWorkspace] = useCurrentWorkspace();
const t = useAFFiNEI18N();
assertExists(currentWorkspace); assertExists(currentWorkspace);
assertExists(currentPageId);
const blockSuiteWorkspace = currentWorkspace.blockSuiteWorkspace; const blockSuiteWorkspace = currentWorkspace.blockSuiteWorkspace;
const { setPageMeta, getPageMeta } = usePageMetaHelper(blockSuiteWorkspace); const { setPageMeta, getPageMeta } = usePageMetaHelper(blockSuiteWorkspace);
const { deletePin } = usePinboardHandler({ const { deletePin } = usePinboardHandler({
@@ -85,9 +84,6 @@ const WorkspaceDetail: React.FC = () => {
setEditorFlags(currentWorkspace.blockSuiteWorkspace); setEditorFlags(currentWorkspace.blockSuiteWorkspace);
} }
}, [currentWorkspace]); }, [currentWorkspace]);
if (!currentPageId) {
return <PageLoading text={t['Loading Page']()} />;
}
if (currentWorkspace.flavour === WorkspaceFlavour.AFFINE) { if (currentWorkspace.flavour === WorkspaceFlavour.AFFINE) {
const PageDetail = WorkspacePlugins[currentWorkspace.flavour].UI.PageDetail; const PageDetail = WorkspacePlugins[currentWorkspace.flavour].UI.PageDetail;
return ( return (
@@ -112,16 +108,15 @@ const WorkspaceDetailPage: NextPageWithLayout = () => {
const router = useRouter(); const router = useRouter();
const currentWorkspace = useAtomValue(rootCurrentWorkspaceAtom); const currentWorkspace = useAtomValue(rootCurrentWorkspaceAtom);
const currentPageId = useAtomValue(rootCurrentPageIdAtom); const currentPageId = useAtomValue(rootCurrentPageIdAtom);
const t = useAFFiNEI18N();
useRouterAndWorkspaceWithPageIdDefense(router); useRouterAndWorkspaceWithPageIdDefense(router);
const page = useBlockSuiteWorkspacePage( const page = useBlockSuiteWorkspacePage(
currentWorkspace.blockSuiteWorkspace, currentWorkspace.blockSuiteWorkspace,
currentPageId currentPageId
); );
if (!router.isReady) { if (!router.isReady) {
return <PageLoading text={t['Router is Loading']()} />; return <PageDetailSkeleton key="router-not-ready" />;
} else if (!currentPageId || !page) { } else if (!currentPageId || !page) {
return <PageLoading text={t['Page is Loading']()} />; return <PageDetailSkeleton key="current-page-is-null" />;
} }
return <WorkspaceDetail />; return <WorkspaceDetail />;
}; };
@@ -0,0 +1,10 @@
import { style } from '@vanilla-extract/css';
export const pageDetailSkeletonStyle = style({
padding: '0 20px',
});
export const pageDetailSkeletonTitleStyle = style({
height: '52px',
width: '100%',
});
@@ -0,0 +1,12 @@
import type { Meta } from '@storybook/react';
import { PageDetailSkeleton } from '.';
export default {
title: 'AFFiNE/PageDetailSkeleton',
component: PageDetailSkeleton,
} satisfies Meta<typeof PageDetailSkeleton>;
export const Basic = () => {
return <PageDetailSkeleton />;
};
@@ -0,0 +1,14 @@
import { BlockSuiteFallback } from '../block-suite-editor';
import {
pageDetailSkeletonStyle,
pageDetailSkeletonTitleStyle,
} from './index.css';
export const PageDetailSkeleton = () => {
return (
<div className={pageDetailSkeletonStyle}>
<div className={pageDetailSkeletonTitleStyle} />
<BlockSuiteFallback />
</div>
);
};