Files
AFFiNE/packages/frontend/core/src/utils/first-app-data.ts
Saul-Mirone 35e232c61c feat: migrate to blocksuite/affine (#8332)
Use `@blocksuite/affine` package for all blocksuite features in affine.

```ts
@blocksuite/store -> @blocksuite/affine/store
@blocksuite/global -> @blocksuite/affine/global
@blocksuite/block-std -> @blocksuite/affine/block-std
@blocksuite/blocks -> @blocksuite/affine/blocks
@blocksuite/presets -> @blocksuite/affine/presets
```
2024-09-20 10:55:47 +00:00

57 lines
1.8 KiB
TypeScript

import { DebugLogger } from '@affine/debug';
import { DEFAULT_WORKSPACE_NAME } from '@affine/env/constant';
import { WorkspaceFlavour } from '@affine/env/workspace';
import onboardingUrl from '@affine/templates/onboarding.zip';
import { ZipTransformer } from '@blocksuite/affine/blocks';
import type { WorkspacesService } from '@toeverything/infra';
import { DocsService } from '@toeverything/infra';
export async function buildShowcaseWorkspace(
workspacesService: WorkspacesService,
flavour: WorkspaceFlavour,
workspaceName: string
) {
const meta = await workspacesService.create(flavour, async docCollection => {
docCollection.meta.initialize();
docCollection.meta.setName(workspaceName);
const blob = await (await fetch(onboardingUrl)).blob();
await ZipTransformer.importDocs(docCollection, blob);
});
const { workspace, dispose } = workspacesService.open({ metadata: meta });
await workspace.engine.waitForRootDocReady();
const docsService = workspace.scope.get(DocsService);
// should jump to "Write, Draw, Plan all at Once." in edgeless by default
const defaultDoc = docsService.list.docs$.value.find(p =>
p.title$.value.startsWith('Write, Draw, Plan all at Once.')
);
if (defaultDoc) {
defaultDoc.setPrimaryMode('edgeless');
}
dispose();
return { meta, defaultDocId: defaultDoc?.id };
}
const logger = new DebugLogger('createFirstAppData');
export async function createFirstAppData(workspacesService: WorkspacesService) {
if (localStorage.getItem('is-first-open') !== null) {
return;
}
localStorage.setItem('is-first-open', 'false');
const { meta, defaultDocId } = await buildShowcaseWorkspace(
workspacesService,
WorkspaceFlavour.LOCAL,
DEFAULT_WORKSPACE_NAME
);
logger.info('create first workspace', defaultDocId);
return { meta, defaultPageId: defaultDocId };
}