mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-17 18:16:15 +08:00
feat(core): bump blocksuite (#8114)
This commit is contained in:
@@ -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,
|
||||
|
||||
+17
-11
@@ -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', {
|
||||
|
||||
+41
-35
@@ -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
-1
@@ -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';
|
||||
|
||||
Reference in New Issue
Block a user