refactor: workspace manager (#5060)
This commit is contained in:
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>
|
||||
|
||||
Reference in new issue
Block a user