From 05a6845962080190a94ac223b701ea55a3f2edae Mon Sep 17 00:00:00 2001 From: L-Sun Date: Fri, 7 Mar 2025 15:22:41 +0000 Subject: [PATCH] refactor(editor): data view slash menu config extension (#10684) --- .../affine/block-data-view/package.json | 1 + .../block-data-view/src/configs/slash-menu.ts | 51 +++++++++++++++++++ .../block-data-view/src/configs/tooltips.ts | 16 ++++++ .../affine/block-data-view/tsconfig.json | 1 + tools/utils/src/workspace.gen.ts | 1 + yarn.lock | 1 + 6 files changed, 71 insertions(+) create mode 100644 blocksuite/affine/block-data-view/src/configs/slash-menu.ts create mode 100644 blocksuite/affine/block-data-view/src/configs/tooltips.ts diff --git a/blocksuite/affine/block-data-view/package.json b/blocksuite/affine/block-data-view/package.json index 3bdb100951..b341c03b17 100644 --- a/blocksuite/affine/block-data-view/package.json +++ b/blocksuite/affine/block-data-view/package.json @@ -17,6 +17,7 @@ "@blocksuite/affine-components": "workspace:*", "@blocksuite/affine-model": "workspace:*", "@blocksuite/affine-shared": "workspace:*", + "@blocksuite/affine-widget-slash-menu": "workspace:*", "@blocksuite/block-std": "workspace:*", "@blocksuite/data-view": "workspace:*", "@blocksuite/global": "workspace:*", diff --git a/blocksuite/affine/block-data-view/src/configs/slash-menu.ts b/blocksuite/affine/block-data-view/src/configs/slash-menu.ts new file mode 100644 index 0000000000..0a9f4e8bfc --- /dev/null +++ b/blocksuite/affine/block-data-view/src/configs/slash-menu.ts @@ -0,0 +1,51 @@ +import { FeatureFlagService } from '@blocksuite/affine-shared/services'; +import { isInsideBlockByFlavour } from '@blocksuite/affine-shared/utils'; +import { type SlashMenuConfig } from '@blocksuite/affine-widget-slash-menu'; +import { DatabaseTableViewIcon } from '@blocksuite/icons/lit'; + +import type { DataViewBlockComponent } from '../data-view-block'; +import { ToDoListTooltip } from './tooltips'; + +export const dataViewSlashMenuConfig: SlashMenuConfig = { + disableWhen: ({ model }) => { + return model.flavour === 'affine:data-view'; + }, + items: [ + { + name: 'Todo', + searchAlias: ['todo view'], + icon: DatabaseTableViewIcon(), + tooltip: { + figure: ToDoListTooltip, + caption: 'To-do List', + }, + group: '7_Database@1', + when: ({ model, std }) => + !isInsideBlockByFlavour(model.doc, model, 'affine:edgeless-text') && + !!std.get(FeatureFlagService).getFlag('enable_block_query'), + + action: ({ model, std }) => { + const { host } = std; + const parent = host.doc.getParent(model); + if (!parent) return; + const index = parent.children.indexOf(model); + const id = host.doc.addBlock( + 'affine:data-view', + {}, + host.doc.getParent(model), + index + 1 + ); + const dataViewModel = host.doc.getBlock(id)!; + + const dataView = std.view.getBlock( + dataViewModel.id + ) as DataViewBlockComponent | null; + dataView?.dataSource.viewManager.viewAdd('table'); + + if (model.text?.length === 0) { + model.doc.deleteBlock(model); + } + }, + }, + ], +}; diff --git a/blocksuite/affine/block-data-view/src/configs/tooltips.ts b/blocksuite/affine/block-data-view/src/configs/tooltips.ts new file mode 100644 index 0000000000..541d6acdbc --- /dev/null +++ b/blocksuite/affine/block-data-view/src/configs/tooltips.ts @@ -0,0 +1,16 @@ +import { html } from 'lit'; + +// prettier-ignore +export const ToDoListTooltip = html` + + + + + + +Here is an example of todo list. + +Make a list for building preview. + + +`; diff --git a/blocksuite/affine/block-data-view/tsconfig.json b/blocksuite/affine/block-data-view/tsconfig.json index 2642e82451..0fad6ab334 100644 --- a/blocksuite/affine/block-data-view/tsconfig.json +++ b/blocksuite/affine/block-data-view/tsconfig.json @@ -11,6 +11,7 @@ { "path": "../components" }, { "path": "../model" }, { "path": "../shared" }, + { "path": "../widget-slash-menu" }, { "path": "../../framework/block-std" }, { "path": "../data-view" }, { "path": "../../framework/global" }, diff --git a/tools/utils/src/workspace.gen.ts b/tools/utils/src/workspace.gen.ts index 9584d2d59b..7434c95989 100644 --- a/tools/utils/src/workspace.gen.ts +++ b/tools/utils/src/workspace.gen.ts @@ -82,6 +82,7 @@ export const PackageList = [ 'blocksuite/affine/components', 'blocksuite/affine/model', 'blocksuite/affine/shared', + 'blocksuite/affine/widget-slash-menu', 'blocksuite/framework/block-std', 'blocksuite/affine/data-view', 'blocksuite/framework/global', diff --git a/yarn.lock b/yarn.lock index 75a2bd77ab..392bdc6fb6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2326,6 +2326,7 @@ __metadata: "@blocksuite/affine-components": "workspace:*" "@blocksuite/affine-model": "workspace:*" "@blocksuite/affine-shared": "workspace:*" + "@blocksuite/affine-widget-slash-menu": "workspace:*" "@blocksuite/block-std": "workspace:*" "@blocksuite/data-view": "workspace:*" "@blocksuite/global": "workspace:*"