mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-08-21 20:11:43 +08:00
11dfc1d1df
Close [BS-3404](https://linear.app/affine-design/issue/BS-3404/通过embed-doc时,插入的doc还是card-view,应该要默认embed-view) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Added the ability to insert and display embedded synced documents, supporting different link types based on editor mode and user preferences. - Introduced new UI interactions and view options for embedded synced documents in edgeless mode. - **Bug Fixes** - Updated UI selectors and preference keys to ensure consistent behavior and correct application of user settings. - **Tests** - Added and updated end-to-end tests for embedding synced documents, including header interactions and viewport fitting. - Improved test coverage for quick search insertion and edgeless embed synced doc features. - **Chores** - Renamed settings and updated exports to align with new embedding functionality. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
80 lines
2.2 KiB
TypeScript
80 lines
2.2 KiB
TypeScript
import { insertEmbedIframeWithUrlCommand } from '@blocksuite/affine-block-embed';
|
|
import {
|
|
type InsertedLinkType,
|
|
insertEmbedLinkedDocCommand,
|
|
insertEmbedSyncedDocCommand,
|
|
type LinkableFlavour,
|
|
} from '@blocksuite/affine-block-embed-doc';
|
|
import {
|
|
DocModeProvider,
|
|
EditorSettingProvider,
|
|
QuickSearchProvider,
|
|
} from '@blocksuite/affine-shared/services';
|
|
import type { Command } from '@blocksuite/std';
|
|
|
|
import { insertBookmarkCommand } from './insert-bookmark';
|
|
|
|
export const insertLinkByQuickSearchCommand: Command<
|
|
{},
|
|
{ insertedLinkType: Promise<InsertedLinkType> }
|
|
> = (ctx, next) => {
|
|
const { std } = ctx;
|
|
const quickSearchService = std.getOptional(QuickSearchProvider);
|
|
if (!quickSearchService) {
|
|
return;
|
|
}
|
|
|
|
const insertedLinkType: Promise<InsertedLinkType> = quickSearchService
|
|
.openQuickSearch()
|
|
.then(result => {
|
|
if (!result) return null;
|
|
|
|
// add linked doc
|
|
if ('docId' in result) {
|
|
const editorMode = std.get(DocModeProvider).getEditorMode();
|
|
const editorSettings = std.get(EditorSettingProvider);
|
|
let flavour: LinkableFlavour = 'affine:embed-linked-doc';
|
|
if (editorMode === 'edgeless') {
|
|
flavour =
|
|
editorSettings.setting$.value.docCanvasPreferView ?? flavour;
|
|
}
|
|
|
|
const insertCommand =
|
|
flavour === 'affine:embed-linked-doc'
|
|
? insertEmbedLinkedDocCommand
|
|
: insertEmbedSyncedDocCommand;
|
|
|
|
std.command.exec(insertCommand, {
|
|
docId: result.docId,
|
|
params: result.params,
|
|
});
|
|
|
|
return {
|
|
flavour,
|
|
};
|
|
}
|
|
|
|
// add normal link;
|
|
if ('externalUrl' in result) {
|
|
// try to insert embed iframe block first
|
|
const [success, { flavour }] = std.command
|
|
.chain()
|
|
.try(chain => [
|
|
chain.pipe(insertEmbedIframeWithUrlCommand, {
|
|
url: result.externalUrl,
|
|
}),
|
|
chain.pipe(insertBookmarkCommand, { url: result.externalUrl }),
|
|
])
|
|
.run();
|
|
if (!success || !flavour) return null;
|
|
return {
|
|
flavour: flavour as LinkableFlavour,
|
|
};
|
|
}
|
|
|
|
return null;
|
|
});
|
|
|
|
next({ insertedLinkType });
|
|
};
|