feat(core): bump blocksuite (#8114)

This commit is contained in:
akumatus
2024-09-05 13:54:56 +00:00
parent 5083fe3cfd
commit 4bbb94c32d
23 changed files with 313 additions and 249 deletions
@@ -4,6 +4,7 @@ import {
useLitPortalFactory,
} from '@affine/component';
import { useJournalInfoHelper } from '@affine/core/hooks/use-journal';
import { EditorService } from '@affine/core/modules/editor';
import { EditorSettingService } from '@affine/core/modules/editor-settting';
import { PeekViewService } from '@affine/core/modules/peek-view';
import type { DocMode } from '@blocksuite/blocks';
@@ -66,13 +67,19 @@ interface BlocksuiteEditorProps {
const usePatchSpecs = (page: Doc, shared: boolean, mode: DocMode) => {
const [reactToLit, portals] = useLitPortalFactory();
const { peekViewService, docService, docsService, editorSettingService } =
useServices({
PeekViewService,
DocService,
DocsService,
EditorSettingService,
});
const {
peekViewService,
docService,
docsService,
editorSettingService,
editorService,
} = useServices({
PeekViewService,
DocService,
DocsService,
EditorSettingService,
EditorService,
});
const framework = useFramework();
const referenceRenderer: ReferenceReactRenderer = useMemo(() => {
return function customReference(reference) {
@@ -115,12 +122,15 @@ const usePatchSpecs = (page: Doc, shared: boolean, mode: DocMode) => {
if (shared) {
patched = patched.concat(patchForSharedPage());
}
patched = patched.concat(patchDocModeService(docService, docsService));
patched = patched.concat(
patchDocModeService(docService, docsService, editorService)
);
return patched;
}, [
confirmModal,
docService,
docsService,
editorService,
framework,
page.readonly,
peekViewService,
@@ -4,6 +4,7 @@ import {
} from '@affine/core/blocksuite/presets/ai';
import { mixpanel } from '@affine/core/mixpanel';
import { EditorSettingService } from '@affine/core/modules/editor-settting';
import { AffineCanvasTextFonts } from '@blocksuite/affine-block-surface';
import {
BlockFlavourIdentifier,
BlockServiceIdentifier,
@@ -11,9 +12,12 @@ import {
type ExtensionType,
StdIdentifier,
} from '@blocksuite/block-std';
import type { RootService, TelemetryEventMap } from '@blocksuite/blocks';
import {
AffineCanvasTextFonts,
type RootService,
type TelemetryEventMap,
TelemetryProvider,
} from '@blocksuite/blocks';
import {
EdgelessRootBlockSpec,
EdgelessRootService,
PageRootBlockSpec,
@@ -44,15 +48,6 @@ function withAffineRootService(Service: typeof PageRootService) {
override loadFonts(): void {
customLoadFonts(this);
}
override telemetryService = {
track: <T extends keyof TelemetryEventMap>(
eventName: T,
props: TelemetryEventMap[T]
) => {
mixpanel.track(eventName as string, props as Record<string, unknown>);
},
};
};
}
@@ -70,6 +65,17 @@ export function createPageRootBlockSpec(
withAffineRootService(PageRootService),
[StdIdentifier, BlockFlavourIdentifier('affine:page')]
);
di.addImpl(TelemetryProvider, () => ({
track: <T extends keyof TelemetryEventMap>(
eventName: T,
props: TelemetryEventMap[T]
) => {
mixpanel.track(
eventName as string,
props as Record<string, unknown>
);
},
}));
},
},
ConfigExtension('affine:page', {
@@ -9,6 +9,7 @@ import {
} from '@affine/component';
import { track } from '@affine/core/mixpanel';
import { DocsSearchService } from '@affine/core/modules/docs-search';
import type { EditorService } from '@affine/core/modules/editor';
import { resolveLinkToDoc } from '@affine/core/modules/navigation';
import type { PeekViewService } from '@affine/core/modules/peek-view';
import type { ActivePeekView } from '@affine/core/modules/peek-view/entities/peek-view';
@@ -27,13 +28,14 @@ import {
type WidgetComponent,
} from '@blocksuite/block-std';
import { BlockServiceWatcher } from '@blocksuite/block-std';
import type {
AffineReference,
DatabaseBlockService,
DocMode,
ListBlockService,
ParagraphBlockService,
RootService,
import {
type AffineReference,
type DatabaseBlockService,
type DocMode,
EmbedOptionProvider,
type ListBlockService,
type ParagraphBlockService,
type RootService,
} from '@blocksuite/blocks';
import {
AffineSlashMenuWidget,
@@ -239,30 +241,37 @@ export function patchPeekViewService(service: PeekViewService) {
export function patchDocModeService(
docService: DocService,
docsService: DocsService
docsService: DocsService,
editorService: EditorService
): ExtensionType {
const DEFAULT_MODE = 'page';
class AffineDocModeService implements DocModeProvider {
setMode = (mode: DocMode, id?: string) => {
setEditorMode = (mode: DocMode) => {
editorService.editor.setMode(mode);
};
getEditorMode = () => {
return editorService.editor.mode$.value;
};
setPrimaryMode = (mode: DocMode, id?: string) => {
if (id) {
docsService.list.setPrimaryMode(id, mode);
} else {
docService.doc.setPrimaryMode(mode);
}
};
getMode = (id?: string) => {
getPrimaryMode = (id?: string) => {
const mode = id
? docsService.list.getPrimaryMode(id)
: docService.doc.getPrimaryMode();
return (mode || DEFAULT_MODE) as DocMode;
};
toggleMode = (id?: string) => {
togglePrimaryMode = (id?: string) => {
const mode = id
? docsService.list.togglePrimaryMode(id)
: docService.doc.togglePrimaryMode();
return (mode || DEFAULT_MODE) as DocMode;
};
onModeChange = (handler: (mode: DocMode) => void, id?: string) => {
onPrimaryModeChange = (handler: (mode: DocMode) => void, id?: string) => {
// eslint-disable-next-line rxjs/finnish
const mode$ = id
? docsService.list.primaryMode$(id)
@@ -408,7 +417,7 @@ export function patchQuickSearchService(framework: FrameworkProvider) {
) {
const oldAction = item.action;
item.action = async ({ model, rootComponent }) => {
const { host, service, std } = rootComponent;
const { host, std } = rootComponent;
const quickSearchService =
component.std.getOptional(QuickSearchProvider);
@@ -434,9 +443,9 @@ export function patchQuickSearchService(framework: FrameworkProvider) {
}
track.doc.editor.slashMenu.linkDoc({ control: 'linkDoc' });
} else if ('userInput' in result) {
const embedOptions = service.getEmbedBlockOptions(
result.userInput
);
const embedOptions = std
.get(EmbedOptionProvider)
.getEmbedBlockOptions(result.userInput);
if (!embedOptions) return;
host.doc.addSiblingBlocks(model, [
@@ -466,31 +475,28 @@ export function patchEdgelessClipboard() {
const { component } = view;
if (component instanceof EdgelessRootBlockComponent) {
const AIChatBlockFlavour = AIChatBlockSchema.model.flavour;
const createFunc = (blocks: BlockSnapshot[]) => {
const blockIds = blocks.map(({ props }) => {
const {
const createFunc = (block: BlockSnapshot) => {
const {
xywh,
scale,
messages,
sessionId,
rootDocId,
rootWorkspaceId,
} = block.props;
const blockId = component.service.addBlock(
AIChatBlockFlavour,
{
xywh,
scale,
messages,
sessionId,
rootDocId,
rootWorkspaceId,
} = props;
const blockId = component.service.addBlock(
AIChatBlockFlavour,
{
xywh,
scale,
messages,
sessionId,
rootDocId,
rootWorkspaceId,
},
component.surface.model.id
);
return blockId;
});
return blockIds;
},
component.surface.model.id
);
return blockId;
};
component.clipboardController.registerBlock(
AIChatBlockFlavour,
@@ -1,7 +1,7 @@
import { EdgelessSurfaceBlockSpec } from '@blocksuite/affine-block-surface';
import type { ExtensionType } from '@blocksuite/block-std';
import {
EdgelessNoteBlockSpec,
EdgelessSurfaceBlockSpec,
EdgelessSurfaceRefBlockSpec,
EdgelessTextBlockSpec,
FrameBlockSpec,
@@ -1,9 +1,6 @@
import { PageSurfaceBlockSpec } from '@blocksuite/affine-block-surface';
import type { ExtensionType } from '@blocksuite/block-std';
import {
NoteBlockSpec,
PageSurfaceBlockSpec,
PageSurfaceRefBlockSpec,
} from '@blocksuite/blocks';
import { NoteBlockSpec, PageSurfaceRefBlockSpec } from '@blocksuite/blocks';
import { type FrameworkProvider } from '@toeverything/infra';
import { AIBlockSpecs, DefaultBlockSpecs } from './common';