mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-18 18:46:19 +08:00
45 lines
1.4 KiB
TypeScript
45 lines
1.4 KiB
TypeScript
import { NoteBlockSchema, NoteDisplayMode } from '@blocksuite/affine-model';
|
|
import {
|
|
BlockHtmlAdapterExtension,
|
|
type BlockHtmlAdapterMatcher,
|
|
} from '@blocksuite/affine-shared/adapters';
|
|
|
|
/**
|
|
* Create a html adapter matcher for note block.
|
|
*
|
|
* @param displayModeToSkip - The note with specific display mode to skip.
|
|
* For example, the note with display mode `EdgelessOnly` should not be converted to html when current editor mode is `Doc(Page)`.
|
|
* @returns The html adapter matcher.
|
|
*/
|
|
const createNoteBlockHtmlAdapterMatcher = (
|
|
displayModeToSkip: NoteDisplayMode
|
|
): BlockHtmlAdapterMatcher => ({
|
|
flavour: NoteBlockSchema.model.flavour,
|
|
toMatch: () => false,
|
|
fromMatch: o => o.node.flavour === NoteBlockSchema.model.flavour,
|
|
toBlockSnapshot: {},
|
|
fromBlockSnapshot: {
|
|
enter: (o, context) => {
|
|
const node = o.node;
|
|
if (node.props.displayMode === displayModeToSkip) {
|
|
context.walkerContext.skipAllChildren();
|
|
}
|
|
},
|
|
},
|
|
});
|
|
|
|
export const docNoteBlockHtmlAdapterMatcher = createNoteBlockHtmlAdapterMatcher(
|
|
NoteDisplayMode.EdgelessOnly
|
|
);
|
|
|
|
export const edgelessNoteBlockHtmlAdapterMatcher =
|
|
createNoteBlockHtmlAdapterMatcher(NoteDisplayMode.DocOnly);
|
|
|
|
export const DocNoteBlockHtmlAdapterExtension = BlockHtmlAdapterExtension(
|
|
docNoteBlockHtmlAdapterMatcher
|
|
);
|
|
|
|
export const EdgelessNoteBlockHtmlAdapterExtension = BlockHtmlAdapterExtension(
|
|
edgelessNoteBlockHtmlAdapterMatcher
|
|
);
|