import { DebugLogger } from '@affine/debug'; import { config, DEFAULT_HELLO_WORLD_PAGE_ID, DEFAULT_WORKSPACE_NAME, } from '@affine/env'; import { initEmptyPage, initPageWithPreloading } from '@affine/env/blocksuite'; import { PageNotFoundError } from '@affine/env/constant'; import type { LocalIndexedDBDownloadProvider } from '@affine/env/workspace'; import { LoadPriority, ReleaseType, WorkspaceFlavour, } from '@affine/env/workspace'; import { CRUD, saveWorkspaceToLocalStorage, } from '@affine/workspace/local/crud'; import { createIndexedDBDownloadProvider } from '@affine/workspace/providers'; import { createEmptyBlockSuiteWorkspace } from '@affine/workspace/utils'; import { nanoid } from '@blocksuite/store'; import { BlockSuitePageList, NewWorkspaceSettingDetail, PageDetailEditor, WorkspaceHeader, WorkspaceSettingDetail, } from '../shared'; import type { WorkspaceAdapter } from '../type'; const logger = new DebugLogger('use-create-first-workspace'); export const LocalAdapter: WorkspaceAdapter = { releaseType: ReleaseType.STABLE, flavour: WorkspaceFlavour.LOCAL, loadPriority: LoadPriority.LOW, Events: { 'app:init': () => { const blockSuiteWorkspace = createEmptyBlockSuiteWorkspace( nanoid(), WorkspaceFlavour.LOCAL ); blockSuiteWorkspace.meta.setName(DEFAULT_WORKSPACE_NAME); const page = blockSuiteWorkspace.createPage({ id: DEFAULT_HELLO_WORLD_PAGE_ID, }); if (config.enablePreloading) { initPageWithPreloading(page).catch(err => { logger.error('init page with preloading failed', err); }); } else { initEmptyPage(page).catch(error => { logger.error('init page with empty failed', error); }); } blockSuiteWorkspace.setPageMeta(page.id, { jumpOnce: true, }); const provider = createIndexedDBDownloadProvider( blockSuiteWorkspace.id, blockSuiteWorkspace.doc, { awareness: blockSuiteWorkspace.awarenessStore.awareness, } ) as LocalIndexedDBDownloadProvider; provider.sync(); provider.whenReady.catch(console.error); saveWorkspaceToLocalStorage(blockSuiteWorkspace.id); logger.debug('create first workspace'); return [blockSuiteWorkspace.id]; }, }, CRUD, UI: { Header: WorkspaceHeader, Provider: ({ children }) => { return <>{children}; }, PageDetail: ({ currentWorkspace, currentPageId, onLoadEditor }) => { const page = currentWorkspace.blockSuiteWorkspace.getPage(currentPageId); if (!page) { throw new PageNotFoundError( currentWorkspace.blockSuiteWorkspace, currentPageId ); } return ( <> ); }, PageList: ({ blockSuiteWorkspace, onOpenPage, view }) => { return ( ); }, SettingsDetail: ({ currentWorkspace, onChangeTab, currentTab, onDeleteWorkspace, onTransformWorkspace, }) => { return ( ); }, NewSettingsDetail: ({ currentWorkspace, onDeleteWorkspace, onTransformWorkspace, }) => { return ( ); }, }, };