feat(core): unify all new created page IDs to nanoid (#4884)

This commit is contained in:
liuyi
2023-11-09 17:22:02 +08:00
committed by GitHub
parent e3e0553c56
commit f9654bb1f8
4 changed files with 10 additions and 27 deletions

View File

@@ -19,8 +19,8 @@ export const usePageHelper = (blockSuiteWorkspace: BlockSuiteWorkspace) => {
); );
const setPageMode = useSetAtom(setPageModeAtom); const setPageMode = useSetAtom(setPageModeAtom);
const createPageAndOpen = useCallback( const createPageAndOpen = useCallback(
(id?: string, mode?: 'page' | 'edgeless') => { (mode?: 'page' | 'edgeless') => {
const page = createPage(id); const page = createPage();
initEmptyPage(page).catch(error => { initEmptyPage(page).catch(error => {
toast(`Failed to initialize Page: ${error.message}`); toast(`Failed to initialize Page: ${error.message}`);
}); });
@@ -30,12 +30,9 @@ export const usePageHelper = (blockSuiteWorkspace: BlockSuiteWorkspace) => {
}, },
[blockSuiteWorkspace.id, createPage, openPage, setPageMode] [blockSuiteWorkspace.id, createPage, openPage, setPageMode]
); );
const createEdgelessAndOpen = useCallback( const createEdgelessAndOpen = useCallback(() => {
(id?: string) => { return createPageAndOpen('edgeless');
return createPageAndOpen(id, 'edgeless'); }, [createPageAndOpen]);
},
[createPageAndOpen]
);
const importFileAndOpen = useCallback(async () => { const importFileAndOpen = useCallback(async () => {
const { showImportModal } = await import('@blocksuite/blocks'); const { showImportModal } = await import('@blocksuite/blocks');
const onSuccess = (pageIds: string[], isWorkspaceFile: boolean) => { const onSuccess = (pageIds: string[], isWorkspaceFile: boolean) => {

View File

@@ -33,7 +33,6 @@ import { useBlockSuitePageMeta } from '@toeverything/hooks/use-block-suite-page-
import { loadPage } from '@toeverything/hooks/use-block-suite-workspace-page'; import { loadPage } from '@toeverything/hooks/use-block-suite-workspace-page';
import { currentWorkspaceIdAtom } from '@toeverything/infra/atom'; import { currentWorkspaceIdAtom } from '@toeverything/infra/atom';
import { useAtom, useAtomValue, useSetAtom } from 'jotai'; import { useAtom, useAtomValue, useSetAtom } from 'jotai';
import { nanoid } from 'nanoid';
import type { PropsWithChildren, ReactNode } from 'react'; import type { PropsWithChildren, ReactNode } from 'react';
import { lazy, Suspense, useCallback, useEffect, useState } from 'react'; import { lazy, Suspense, useCallback, useEffect, useState } from 'react';
import { useLocation, useParams } from 'react-router-dom'; import { useLocation, useParams } from 'react-router-dom';
@@ -198,12 +197,8 @@ export const WorkspaceLayoutInner = ({
}, [currentWorkspace.blockSuiteWorkspace.doc]); }, [currentWorkspace.blockSuiteWorkspace.doc]);
const handleCreatePage = useCallback(() => { const handleCreatePage = useCallback(() => {
const id = nanoid(); return pageHelper.createPage();
pageHelper.createPage(id); }, [pageHelper]);
const page = currentWorkspace.blockSuiteWorkspace.getPage(id);
assertExists(page);
return page;
}, [currentWorkspace.blockSuiteWorkspace, pageHelper]);
const [, setOpenQuickSearchModalAtom] = useAtom(openQuickSearchModalAtom); const [, setOpenQuickSearchModalAtom] = useAtom(openQuickSearchModalAtom);
const handleOpenQuickSearchModal = useCallback(() => { const handleOpenQuickSearchModal = useCallback(() => {

View File

@@ -1,14 +1,10 @@
import type { Page, Workspace } from '@blocksuite/store'; import type { Page, Workspace } from '@blocksuite/store';
import { useMemo } from 'react'; import { useMemo } from 'react';
import { v4 as uuid } from 'uuid';
export function useBlockSuiteWorkspaceHelper(blockSuiteWorkspace: Workspace) { export function useBlockSuiteWorkspaceHelper(blockSuiteWorkspace: Workspace) {
return useMemo( return useMemo(
() => ({ () => ({
createPage: (pageId?: string): Page => { createPage: (pageId?: string): Page => {
if (!pageId) {
pageId = uuid();
}
return blockSuiteWorkspace.createPage({ id: pageId }); return blockSuiteWorkspace.createPage({ id: pageId });
}, },
}), }),

View File

@@ -4,13 +4,9 @@ import { WorkspaceFlavour } from '@affine/env/workspace';
import { createAffinePublicProviders } from '@affine/workspace/providers'; import { createAffinePublicProviders } from '@affine/workspace/providers';
import { __unstableSchemas, AffineSchemas } from '@blocksuite/blocks/models'; import { __unstableSchemas, AffineSchemas } from '@blocksuite/blocks/models';
import type { DocProviderCreator, StoreOptions } from '@blocksuite/store'; import type { DocProviderCreator, StoreOptions } from '@blocksuite/store';
import { import { createIndexeddbStorage, Schema, Workspace } from '@blocksuite/store';
createIndexeddbStorage,
Generator,
Schema,
Workspace,
} from '@blocksuite/store';
import { INTERNAL_BLOCKSUITE_HASH_MAP } from '@toeverything/infra/__internal__/workspace'; import { INTERNAL_BLOCKSUITE_HASH_MAP } from '@toeverything/infra/__internal__/workspace';
import { nanoid } from 'nanoid';
import type { Doc } from 'yjs'; import type { Doc } from 'yjs';
import type { Transaction } from 'yjs'; import type { Transaction } from 'yjs';
@@ -94,7 +90,6 @@ export function getOrCreateWorkspace(
if (INTERNAL_BLOCKSUITE_HASH_MAP.has(id)) { if (INTERNAL_BLOCKSUITE_HASH_MAP.has(id)) {
return INTERNAL_BLOCKSUITE_HASH_MAP.get(id) as Workspace; return INTERNAL_BLOCKSUITE_HASH_MAP.get(id) as Workspace;
} }
const idGenerator = Generator.NanoID;
const blobStorages: StoreOptions['blobStorages'] = []; const blobStorages: StoreOptions['blobStorages'] = [];
if (flavour === WorkspaceFlavour.AFFINE_CLOUD) { if (flavour === WorkspaceFlavour.AFFINE_CLOUD) {
@@ -135,7 +130,7 @@ export function getOrCreateWorkspace(
isSSR: !isBrowser, isSSR: !isBrowser,
providerCreators: typeof window === 'undefined' ? [] : providerCreators, providerCreators: typeof window === 'undefined' ? [] : providerCreators,
blobStorages: blobStorages, blobStorages: blobStorages,
idGenerator, idGenerator: () => nanoid(),
schema: globalBlockSuiteSchema, schema: globalBlockSuiteSchema,
}); });
createMonitor(workspace.doc); createMonitor(workspace.doc);