refactor(editor): table slash menu config extension (#10673)
This commit is contained in:
@@ -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:*",
|
||||||
|
|||||||
@@ -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 });
|
||||||
|
|||||||
39
blocksuite/affine/block-table/src/configs/slash-menu.ts
Normal file
39
blocksuite/affine/block-table/src/configs/slash-menu.ts
Normal 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();
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
@@ -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();
|
||||||
|
|||||||
@@ -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" },
|
||||||
|
|||||||
@@ -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:*",
|
||||||
|
|||||||
@@ -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.',
|
||||||
|
|||||||
@@ -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" },
|
||||||
|
|||||||
@@ -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',
|
||||||
|
|||||||
@@ -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:*"
|
||||||
|
|||||||
Reference in New Issue
Block a user