refactor(editor): table slash menu config extension (#10673)

This commit is contained in:
L-Sun
2025-03-07 05:48:39 +00:00
parent 460e088873
commit 66ad87c84a
10 changed files with 49 additions and 38 deletions

View File

@@ -18,6 +18,7 @@
"@blocksuite/affine-model": "workspace:*", "@blocksuite/affine-model": "workspace:*",
"@blocksuite/affine-rich-text": "workspace:*", "@blocksuite/affine-rich-text": "workspace:*",
"@blocksuite/affine-shared": "workspace:*", "@blocksuite/affine-shared": "workspace:*",
"@blocksuite/affine-widget-slash-menu": "workspace:*",
"@blocksuite/block-std": "workspace:*", "@blocksuite/block-std": "workspace:*",
"@blocksuite/data-view": "workspace:*", "@blocksuite/data-view": "workspace:*",
"@blocksuite/global": "workspace:*", "@blocksuite/global": "workspace:*",

View File

@@ -44,8 +44,8 @@ export const insertTableBlockCommand: Command<
dataManager.addNRow(2); dataManager.addNRow(2);
dataManager.addNColumn(2); dataManager.addNColumn(2);
if (removeEmptyLine && model.text?.length === 0) { if (removeEmptyLine && targetModel.text?.length === 0) {
std.store.deleteBlock(model); std.store.deleteBlock(targetModel);
} }
next({ insertedTableBlockId: blockId }); next({ insertedTableBlockId: blockId });

View File

@@ -0,0 +1,39 @@
import { getSelectedModelsCommand } from '@blocksuite/affine-shared/commands';
import { TelemetryProvider } from '@blocksuite/affine-shared/services';
import { isInsideBlockByFlavour } from '@blocksuite/affine-shared/utils';
import type { SlashMenuConfig } from '@blocksuite/affine-widget-slash-menu';
import { TableIcon } from '@blocksuite/icons/lit';
import { insertTableBlockCommand } from '../commands';
export const tableSlashMenuConfig: SlashMenuConfig = {
disableWhen: ({ model }) => model.flavour === 'affine:table',
items: [
{
name: 'Table',
description: 'Create a simple table.',
icon: TableIcon(),
group: '4_Content & Media@0',
when: ({ model }) =>
!isInsideBlockByFlavour(model.doc, model, 'affine:edgeless-text'),
action: ({ std }) => {
std.command
.chain()
.pipe(getSelectedModelsCommand)
.pipe(insertTableBlockCommand, {
place: 'after',
removeEmptyLine: true,
})
.pipe(({ insertedTableBlockId }) => {
if (insertedTableBlockId) {
const telemetry = std.getOptional(TelemetryProvider);
telemetry?.track('BlockCreated', {
blockType: 'affine:table',
});
}
})
.run();
},
},
],
};

View File

@@ -1,12 +1,15 @@
import { TableModelFlavour } from '@blocksuite/affine-model'; import { TableModelFlavour } from '@blocksuite/affine-model';
import { SlashMenuConfigExtension } from '@blocksuite/affine-widget-slash-menu';
import { BlockViewExtension, FlavourExtension } from '@blocksuite/block-std'; import { BlockViewExtension, FlavourExtension } from '@blocksuite/block-std';
import type { ExtensionType } from '@blocksuite/store'; import type { ExtensionType } from '@blocksuite/store';
import { literal } from 'lit/static-html.js'; import { literal } from 'lit/static-html.js';
import { TableBlockAdapterExtensions } from './adapters/extension.js'; import { TableBlockAdapterExtensions } from './adapters/extension.js';
import { tableSlashMenuConfig } from './configs/slash-menu.js';
export const TableBlockSpec: ExtensionType[] = [ export const TableBlockSpec: ExtensionType[] = [
FlavourExtension(TableModelFlavour), FlavourExtension(TableModelFlavour),
BlockViewExtension(TableModelFlavour, literal`affine-table`), BlockViewExtension(TableModelFlavour, literal`affine-table`),
TableBlockAdapterExtensions, TableBlockAdapterExtensions,
SlashMenuConfigExtension(TableModelFlavour, tableSlashMenuConfig),
].flat(); ].flat();

View File

@@ -12,6 +12,7 @@
{ "path": "../model" }, { "path": "../model" },
{ "path": "../rich-text" }, { "path": "../rich-text" },
{ "path": "../shared" }, { "path": "../shared" },
{ "path": "../widget-slash-menu" },
{ "path": "../../framework/block-std" }, { "path": "../../framework/block-std" },
{ "path": "../data-view" }, { "path": "../data-view" },
{ "path": "../../framework/global" }, { "path": "../../framework/global" },

View File

@@ -20,7 +20,6 @@
"@blocksuite/affine-block-note": "workspace:*", "@blocksuite/affine-block-note": "workspace:*",
"@blocksuite/affine-block-surface": "workspace:*", "@blocksuite/affine-block-surface": "workspace:*",
"@blocksuite/affine-block-surface-ref": "workspace:*", "@blocksuite/affine-block-surface-ref": "workspace:*",
"@blocksuite/affine-block-table": "workspace:*",
"@blocksuite/affine-components": "workspace:*", "@blocksuite/affine-components": "workspace:*",
"@blocksuite/affine-rich-text": "workspace:*", "@blocksuite/affine-rich-text": "workspace:*",
"@blocksuite/affine-shared": "workspace:*", "@blocksuite/affine-shared": "workspace:*",

View File

@@ -3,7 +3,6 @@ import { insertImagesCommand } from '@blocksuite/affine-block-image';
import { insertLatexBlockCommand } from '@blocksuite/affine-block-latex'; import { insertLatexBlockCommand } from '@blocksuite/affine-block-latex';
import { getSurfaceBlock } from '@blocksuite/affine-block-surface'; import { getSurfaceBlock } from '@blocksuite/affine-block-surface';
import { insertSurfaceRefBlockCommand } from '@blocksuite/affine-block-surface-ref'; import { insertSurfaceRefBlockCommand } from '@blocksuite/affine-block-surface-ref';
import { insertTableBlockCommand } from '@blocksuite/affine-block-table';
import { toggleEmbedCardCreateModal } from '@blocksuite/affine-components/embed-card-modal'; import { toggleEmbedCardCreateModal } from '@blocksuite/affine-components/embed-card-modal';
import { toast } from '@blocksuite/affine-components/toast'; import { toast } from '@blocksuite/affine-components/toast';
import type { import type {
@@ -22,10 +21,7 @@ import {
getTextSelectionCommand, getTextSelectionCommand,
} from '@blocksuite/affine-shared/commands'; } from '@blocksuite/affine-shared/commands';
import { REFERENCE_NODE } from '@blocksuite/affine-shared/consts'; import { REFERENCE_NODE } from '@blocksuite/affine-shared/consts';
import { import { FileSizeLimitService } from '@blocksuite/affine-shared/services';
FileSizeLimitService,
TelemetryProvider,
} from '@blocksuite/affine-shared/services';
import { import {
createDefaultDoc, createDefaultDoc,
openFileOrFiles, openFileOrFiles,
@@ -49,7 +45,6 @@ import {
LoomLogoDuotoneIcon, LoomLogoDuotoneIcon,
NowIcon, NowIcon,
PlusIcon, PlusIcon,
TableIcon,
TeXIcon, TeXIcon,
TodayIcon, TodayIcon,
TomorrowIcon, TomorrowIcon,
@@ -195,32 +190,6 @@ export const defaultSlashMenuConfig: SlashMenuConfig = {
// --------------------------------------------------------- // ---------------------------------------------------------
// { groupName: 'Content & Media' }, // { groupName: 'Content & Media' },
{
name: 'Table',
description: 'Create a simple table.',
icon: TableIcon(),
tooltip: slashMenuToolTips['Table View'],
group: `4_Content & Media@${index++}`,
when: ({ model }) => !insideEdgelessText(model),
action: ({ std }) => {
std.command
.chain()
.pipe(getSelectedModelsCommand)
.pipe(insertTableBlockCommand, {
place: 'after',
removeEmptyLine: true,
})
.pipe(({ insertedTableBlockId }) => {
if (insertedTableBlockId) {
const telemetry = std.getOptional(TelemetryProvider);
telemetry?.track('BlockCreated', {
blockType: 'affine:table',
});
}
})
.run();
},
},
{ {
name: 'Image', name: 'Image',
description: 'Insert an image.', description: 'Insert an image.',

View File

@@ -14,7 +14,6 @@
{ "path": "../block-note" }, { "path": "../block-note" },
{ "path": "../block-surface" }, { "path": "../block-surface" },
{ "path": "../block-surface-ref" }, { "path": "../block-surface-ref" },
{ "path": "../block-table" },
{ "path": "../components" }, { "path": "../components" },
{ "path": "../rich-text" }, { "path": "../rich-text" },
{ "path": "../shared" }, { "path": "../shared" },

View File

@@ -308,6 +308,7 @@ export const PackageList = [
'blocksuite/affine/model', 'blocksuite/affine/model',
'blocksuite/affine/rich-text', 'blocksuite/affine/rich-text',
'blocksuite/affine/shared', 'blocksuite/affine/shared',
'blocksuite/affine/widget-slash-menu',
'blocksuite/framework/block-std', 'blocksuite/framework/block-std',
'blocksuite/affine/data-view', 'blocksuite/affine/data-view',
'blocksuite/framework/global', 'blocksuite/framework/global',
@@ -494,7 +495,6 @@ export const PackageList = [
'blocksuite/affine/block-note', 'blocksuite/affine/block-note',
'blocksuite/affine/block-surface', 'blocksuite/affine/block-surface',
'blocksuite/affine/block-surface-ref', 'blocksuite/affine/block-surface-ref',
'blocksuite/affine/block-table',
'blocksuite/affine/components', 'blocksuite/affine/components',
'blocksuite/affine/rich-text', 'blocksuite/affine/rich-text',
'blocksuite/affine/shared', 'blocksuite/affine/shared',

View File

@@ -2711,6 +2711,7 @@ __metadata:
"@blocksuite/affine-model": "workspace:*" "@blocksuite/affine-model": "workspace:*"
"@blocksuite/affine-rich-text": "workspace:*" "@blocksuite/affine-rich-text": "workspace:*"
"@blocksuite/affine-shared": "workspace:*" "@blocksuite/affine-shared": "workspace:*"
"@blocksuite/affine-widget-slash-menu": "workspace:*"
"@blocksuite/block-std": "workspace:*" "@blocksuite/block-std": "workspace:*"
"@blocksuite/data-view": "workspace:*" "@blocksuite/data-view": "workspace:*"
"@blocksuite/global": "workspace:*" "@blocksuite/global": "workspace:*"
@@ -3038,7 +3039,6 @@ __metadata:
"@blocksuite/affine-block-note": "workspace:*" "@blocksuite/affine-block-note": "workspace:*"
"@blocksuite/affine-block-surface": "workspace:*" "@blocksuite/affine-block-surface": "workspace:*"
"@blocksuite/affine-block-surface-ref": "workspace:*" "@blocksuite/affine-block-surface-ref": "workspace:*"
"@blocksuite/affine-block-table": "workspace:*"
"@blocksuite/affine-components": "workspace:*" "@blocksuite/affine-components": "workspace:*"
"@blocksuite/affine-rich-text": "workspace:*" "@blocksuite/affine-rich-text": "workspace:*"
"@blocksuite/affine-shared": "workspace:*" "@blocksuite/affine-shared": "workspace:*"