mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-13 12:55:00 +00:00
feat(infra): framework
This commit is contained in:
@@ -3,38 +3,32 @@ 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/blocks';
|
||||
import {
|
||||
initEmptyPage,
|
||||
PageRecordList,
|
||||
type WorkspaceManager,
|
||||
} from '@toeverything/infra';
|
||||
import type { WorkspacesService } from '@toeverything/infra';
|
||||
import { DocsService, initEmptyPage } from '@toeverything/infra';
|
||||
|
||||
export async function buildShowcaseWorkspace(
|
||||
workspaceManager: WorkspaceManager,
|
||||
workspacesService: WorkspacesService,
|
||||
flavour: WorkspaceFlavour,
|
||||
workspaceName: string
|
||||
) {
|
||||
const meta = await workspaceManager.createWorkspace(
|
||||
flavour,
|
||||
async docCollection => {
|
||||
docCollection.meta.setName(workspaceName);
|
||||
const blob = await (await fetch(onboardingUrl)).blob();
|
||||
const meta = await workspacesService.create(flavour, async docCollection => {
|
||||
docCollection.meta.setName(workspaceName);
|
||||
const blob = await (await fetch(onboardingUrl)).blob();
|
||||
|
||||
await ZipTransformer.importDocs(docCollection, blob);
|
||||
}
|
||||
);
|
||||
await ZipTransformer.importDocs(docCollection, blob);
|
||||
});
|
||||
|
||||
const { workspace, release } = workspaceManager.open(meta);
|
||||
const { workspace, dispose } = workspacesService.open({ metadata: meta });
|
||||
|
||||
await workspace.engine.waitForRootDocReady();
|
||||
|
||||
const pageRecordList = workspace.services.get(PageRecordList);
|
||||
const docsService = workspace.scope.get(DocsService);
|
||||
|
||||
// todo: find better way to do the following
|
||||
// perhaps put them into middleware?
|
||||
{
|
||||
// the "Write, Draw, Plan all at Once." page should be set to edgeless mode
|
||||
const edgelessPage1 = pageRecordList.records$.value.find(
|
||||
const edgelessPage1 = docsService.list.docs$.value.find(
|
||||
p => p.title$.value === 'Write, Draw, Plan all at Once.'
|
||||
);
|
||||
|
||||
@@ -43,7 +37,7 @@ export async function buildShowcaseWorkspace(
|
||||
}
|
||||
|
||||
// should jump to "Write, Draw, Plan all at Once." by default
|
||||
const defaultPage = pageRecordList.records$.value.find(p =>
|
||||
const defaultPage = docsService.list.docs$.value.find(p =>
|
||||
p.title$.value.startsWith('Write, Draw, Plan all at Once.')
|
||||
);
|
||||
|
||||
@@ -53,27 +47,27 @@ export async function buildShowcaseWorkspace(
|
||||
});
|
||||
}
|
||||
}
|
||||
release();
|
||||
dispose();
|
||||
return meta;
|
||||
}
|
||||
|
||||
const logger = new DebugLogger('createFirstAppData');
|
||||
|
||||
export async function createFirstAppData(workspaceManager: WorkspaceManager) {
|
||||
export async function createFirstAppData(workspacesService: WorkspacesService) {
|
||||
if (localStorage.getItem('is-first-open') !== null) {
|
||||
return;
|
||||
}
|
||||
localStorage.setItem('is-first-open', 'false');
|
||||
if (runtimeConfig.enablePreloading) {
|
||||
const workspaceMetadata = await buildShowcaseWorkspace(
|
||||
workspaceManager,
|
||||
workspacesService,
|
||||
WorkspaceFlavour.LOCAL,
|
||||
DEFAULT_WORKSPACE_NAME
|
||||
);
|
||||
logger.info('create first workspace', workspaceMetadata);
|
||||
return workspaceMetadata;
|
||||
} else {
|
||||
const workspaceMetadata = await workspaceManager.createWorkspace(
|
||||
const workspaceMetadata = await workspacesService.create(
|
||||
WorkspaceFlavour.LOCAL,
|
||||
async workspace => {
|
||||
workspace.meta.setName(DEFAULT_WORKSPACE_NAME);
|
||||
|
||||
Reference in New Issue
Block a user