fix(core): use patched preview spec builder in ai chat (#10090)

[BS-2526](https://linear.app/affine-design/issue/BS-2526/chat-panel-里的-footnote-popup-需要支持交互)
This commit is contained in:
donteatfriedrice
2025-02-11 15:11:54 +00:00
parent 54d194afe7
commit 19f0eb1931
11 changed files with 227 additions and 27 deletions

View File

@@ -0,0 +1,29 @@
import { toReactNode } from '@affine/component';
import { AIChatBlockPeekViewTemplate } from '@affine/core/blocksuite/presets/ai';
import type { EditorHost } from '@blocksuite/affine/block-std';
import { useFramework } from '@toeverything/infra';
import { useMemo } from 'react';
import type { AIChatBlockModel } from '../../../../blocksuite/blocks/ai-chat-block/ai-chat-model';
import { createPageModePreviewSpecs } from '../../../../components/blocksuite/block-suite-editor/specs/preview';
export type AIChatBlockPeekViewProps = {
model: AIChatBlockModel;
host: EditorHost;
};
export const AIChatBlockPeekView = ({
model,
host,
}: AIChatBlockPeekViewProps) => {
const framework = useFramework();
return useMemo(() => {
const previewSpecBuilder = createPageModePreviewSpecs(framework);
const template = AIChatBlockPeekViewTemplate(
model,
host,
previewSpecBuilder
);
return toReactNode(template);
}, [framework, model, host]);
};

View File

@@ -1,11 +1,11 @@
import { toReactNode } from '@affine/component';
import { AIChatBlockPeekViewTemplate } from '@affine/core/blocksuite/presets/ai';
import { BlockComponent } from '@blocksuite/affine/block-std';
import { useLiveData, useService } from '@toeverything/infra';
import { useCallback, useEffect, useMemo, useState } from 'react';
import type { ActivePeekView } from '../entities/peek-view';
import { PeekViewService } from '../services/peek-view';
import { AIChatBlockPeekView } from './ai-chat-block-peek-view';
import { AttachmentPreviewPeekView } from './attachment-preview';
import { DocPeekPreview } from './doc-preview';
import { ImagePreviewPeekView } from './image-preview';
@@ -46,8 +46,7 @@ function renderPeekView({ info }: ActivePeekView, animating?: boolean) {
}
if (info.type === 'ai-chat-block') {
const template = AIChatBlockPeekViewTemplate(info.model, info.host);
return toReactNode(template);
return <AIChatBlockPeekView model={info.model} host={info.host} />;
}
return null; // unreachable