Files
twenty/packages/twenty-front/src/modules/activities/blocks/slashMenu.tsx

60 lines
1.2 KiB
TypeScript

import { getDefaultReactSlashMenuItems } from '@blocknote/react';
import {
IconComponent,
IconFile,
IconH1,
IconH2,
IconH3,
IconList,
IconListNumbers,
IconPhoto,
IconPilcrow,
IconTable,
} from 'twenty-ui';
import { SuggestionItem } from '@/ui/input/editor/components/CustomSlashMenu';
import { blockSchema } from './schema';
const Icons: Record<string, IconComponent> = {
'Heading 1': IconH1,
'Heading 2': IconH2,
'Heading 3': IconH3,
'Numbered List': IconListNumbers,
'Bullet List': IconList,
Paragraph: IconPilcrow,
Table: IconTable,
Image: IconPhoto,
};
export const getSlashMenu = (editor: typeof blockSchema.BlockNoteEditor) => {
const items: SuggestionItem[] = [
...getDefaultReactSlashMenuItems(editor).map((x) => ({
...x,
Icon: Icons[x.title],
})),
{
title: 'File',
aliases: ['file', 'folder'],
Icon: IconFile,
onItemClick: () => {
const currentBlock = editor.getTextCursorPosition().block;
editor.insertBlocks(
[
{
type: 'file',
props: {
url: undefined,
},
},
],
currentBlock,
'before',
);
},
},
];
return items;
};