refactor: workspace manager (#5060)

This commit is contained in:
EYHN committed 2023-12-15 07:20:50 +00:00
1 parent af15aa06d4
commit fe2851d3e9
217 files changed
+3603 -4242

No files matched your search

@@ -1,17 +1,15 @@
import { toast } from '@affine/component';
import { PublicLinkDisableModal } from '@affine/component/disable-public-link';
import { ShareMenu } from '@affine/core/components/affine/share-page-modal/share-menu';
import type {
AffineCloudWorkspace,
LocalWorkspace,
} from '@affine/env/workspace';
import { WorkspaceFlavour } from '@affine/env/workspace';
import { getOrCreateWorkspace } from '@affine/workspace/manager';
import type { Page } from '@blocksuite/store';
import { waitForCurrentWorkspaceAtom } from '@affine/workspace/atom';
import { type Page } from '@blocksuite/store';
import { expect } from '@storybook/jest';
import type { Meta, StoryFn } from '@storybook/react';
import { use } from 'foxact/use';
import { useState } from 'react';
import { initEmptyPage } from '@toeverything/infra/blocksuite';
import { useAtomValue } from 'jotai';
import { nanoid } from 'nanoid';
import { useEffect, useState } from 'react';
export default {
title: 'AFFiNE/ShareMenu',
@@ -21,57 +19,30 @@ export default {
},
} satisfies Meta;
async function initPage(page: Page) {
await page.waitForLoaded();
// Add page block and surface block at root level
const pageBlockId = page.addBlock('affine:page', {
title: new page.Text('Hello, world!'),
});
page.addBlock('affine:surface', {}, pageBlockId);
const frameId = page.addBlock('affine:note', {}, pageBlockId);
page.addBlock(
'affine:paragraph',
{
text: new page.Text('This is a paragraph.'),
},
frameId
);
page.resetHistory();
}
const blockSuiteWorkspace = getOrCreateWorkspace(
'test-workspace',
WorkspaceFlavour.LOCAL
);
const promise = Promise.all([
initPage(blockSuiteWorkspace.createPage({ id: 'page0' })),
initPage(blockSuiteWorkspace.createPage({ id: 'page1' })),
initPage(blockSuiteWorkspace.createPage({ id: 'page2' })),
]);
const localWorkspace: LocalWorkspace = {
id: 'test-workspace',
flavour: WorkspaceFlavour.LOCAL,
blockSuiteWorkspace,
};
const affineWorkspace: AffineCloudWorkspace = {
id: 'test-workspace',
flavour: WorkspaceFlavour.AFFINE_CLOUD,
blockSuiteWorkspace,
};
async function unimplemented() {
toast('work in progress');
}
export const Basic: StoryFn = () => {
use(promise);
const workspace = useAtomValue(waitForCurrentWorkspaceAtom);
const [page, setPage] = useState<Page | null>(null);
useEffect(() => {
const page = workspace.blockSuiteWorkspace.createPage(nanoid());
initEmptyPage(page);
setPage(page);
}, [workspace]);
if (!page) {
return <div></div>;
}
return (
<ShareMenu
currentPage={blockSuiteWorkspace.getPage('page0') as Page}
workspace={localWorkspace}
currentPage={page}
workspaceMetadata={workspace}
onEnableAffineCloud={unimplemented}
/>
);
@@ -95,11 +66,28 @@ Basic.play = async ({ canvasElement }) => {
};
export const AffineBasic: StoryFn = () => {
use(promise);
const workspace = useAtomValue(waitForCurrentWorkspaceAtom);
const [page, setPage] = useState<Page | null>(null);
useEffect(() => {
const page = workspace.blockSuiteWorkspace.createPage(nanoid());
initEmptyPage(page);
setPage(page);
}, [workspace]);
if (!page) {
return <div></div>;
}
return (
<ShareMenu
currentPage={blockSuiteWorkspace.getPage('page0') as Page}
workspace={affineWorkspace}
currentPage={page}
workspaceMetadata={{
...workspace.meta,
flavour: WorkspaceFlavour.AFFINE_CLOUD,
}}
onEnableAffineCloud={unimplemented}
/>
);
@@ -107,7 +95,6 @@ export const AffineBasic: StoryFn = () => {
export const DisableModal: StoryFn = () => {
const [open, setOpen] = useState(false);
use(promise);
return (
<>
<div onClick={() => setOpen(!open)}>Disable Public Link</div>