refactor(editor): improve element adapters (#11473)

This commit is contained in:
Saul-Mirone
2025-04-05 09:40:13 +00:00
parent 0fbca31c27
commit aed7f40568
45 changed files with 292 additions and 248 deletions

View File

@@ -0,0 +1,2 @@
export * from './markdown';
export * from './plain-text';

View File

@@ -0,0 +1,25 @@
import { ElementToMarkdownAdapterExtension } from '@blocksuite/affine-block-surface';
import { getGroupTitle } from '../text';
export const groupToMarkdownAdapterMatcher = ElementToMarkdownAdapterExtension({
name: 'group',
match: elementModel => elementModel.type === 'group',
toAST: elementModel => {
const title = getGroupTitle(elementModel);
if (!title) {
return null;
}
const content = `Group, with title "${title}"`;
return {
type: 'paragraph',
children: [
{
type: 'text',
value: content,
},
],
};
},
});

View File

@@ -0,0 +1,14 @@
import { ElementToPlainTextAdapterExtension } from '@blocksuite/affine-block-surface';
import { getGroupTitle } from '../text';
export const groupToPlainTextAdapterMatcher =
ElementToPlainTextAdapterExtension({
name: 'group',
match: elementModel => elementModel.type === 'group',
toAST: elementModel => {
const title = getGroupTitle(elementModel);
const content = `Group, with title "${title}"`;
return { content };
},
});

View File

@@ -0,0 +1,21 @@
import type { DeltaInsert } from '@blocksuite/affine/store';
export function getGroupTitle(elementModel: Record<string, unknown>): string {
let title = '';
if (elementModel.type !== 'group') {
return title;
}
if (
'title' in elementModel &&
typeof elementModel.title === 'object' &&
elementModel.title
) {
let delta: DeltaInsert[] = [];
if ('delta' in elementModel.title) {
delta = elementModel.title.delta as DeltaInsert[];
}
title = delta.map(d => d.insert).join('');
}
return title;
}

View File

@@ -1,3 +1,4 @@
export * from './adapter';
export * from './command';
export * from './element-renderer';
export * from './text/text';