From 5244ff9b983c98cdb99d870f4b9e0efa354373e8 Mon Sep 17 00:00:00 2001 From: Saul-Mirone Date: Mon, 21 Apr 2025 09:22:11 +0000 Subject: [PATCH] feat(editor): data view and database extension (#11837) Closes: BS-3191 Closes: BS-3192 --- .../affine/blocks/data-view/package.json | 5 +++- .../affine/blocks/data-view/src/store.ts | 15 ++++++++++ .../affine/blocks/data-view/src/view.ts | 28 +++++++++++++++++++ .../affine/blocks/data-view/tsconfig.json | 1 + .../affine/blocks/database/package.json | 5 +++- .../affine/blocks/database/src/store.ts | 19 +++++++++++++ blocksuite/affine/blocks/database/src/view.ts | 28 +++++++++++++++++++ .../affine/blocks/database/tsconfig.json | 1 + tools/utils/src/workspace.gen.ts | 2 ++ yarn.lock | 2 ++ 10 files changed, 104 insertions(+), 2 deletions(-) create mode 100644 blocksuite/affine/blocks/data-view/src/store.ts create mode 100644 blocksuite/affine/blocks/data-view/src/view.ts create mode 100644 blocksuite/affine/blocks/database/src/store.ts create mode 100644 blocksuite/affine/blocks/database/src/view.ts diff --git a/blocksuite/affine/blocks/data-view/package.json b/blocksuite/affine/blocks/data-view/package.json index e858188534..129993f346 100644 --- a/blocksuite/affine/blocks/data-view/package.json +++ b/blocksuite/affine/blocks/data-view/package.json @@ -12,6 +12,7 @@ "dependencies": { "@blocksuite/affine-block-database": "workspace:*", "@blocksuite/affine-components": "workspace:*", + "@blocksuite/affine-ext-loader": "workspace:*", "@blocksuite/affine-model": "workspace:*", "@blocksuite/affine-shared": "workspace:*", "@blocksuite/affine-widget-slash-menu": "workspace:*", @@ -32,7 +33,9 @@ }, "exports": { ".": "./src/index.ts", - "./effects": "./src/effects.ts" + "./effects": "./src/effects.ts", + "./view": "./src/view.ts", + "./store": "./src/store.ts" }, "files": [ "src", diff --git a/blocksuite/affine/blocks/data-view/src/store.ts b/blocksuite/affine/blocks/data-view/src/store.ts new file mode 100644 index 0000000000..b228ea6d29 --- /dev/null +++ b/blocksuite/affine/blocks/data-view/src/store.ts @@ -0,0 +1,15 @@ +import { + type StoreExtensionContext, + StoreExtensionProvider, +} from '@blocksuite/affine-ext-loader'; + +import { DataViewBlockSchemaExtension } from './data-view-model'; + +export default class DataViewStoreExtension extends StoreExtensionProvider { + override name = 'affine-data-view-block'; + + override setup(context: StoreExtensionContext) { + super.setup(context); + context.register(DataViewBlockSchemaExtension); + } +} diff --git a/blocksuite/affine/blocks/data-view/src/view.ts b/blocksuite/affine/blocks/data-view/src/view.ts new file mode 100644 index 0000000000..3fe3eea453 --- /dev/null +++ b/blocksuite/affine/blocks/data-view/src/view.ts @@ -0,0 +1,28 @@ +import { + type ViewExtensionContext, + ViewExtensionProvider, +} from '@blocksuite/affine-ext-loader'; +import { BlockViewExtension, FlavourExtension } from '@blocksuite/std'; +import { literal } from 'lit/static-html.js'; + +import { DataViewBlockSchema } from './data-view-model'; +import { effects } from './effects'; + +const flavour = DataViewBlockSchema.model.flavour; + +export default class DataViewViewExtension extends ViewExtensionProvider { + override name = 'affine-data-view-block'; + + override effect() { + super.effect(); + effects(); + } + + override setup(context: ViewExtensionContext) { + super.setup(context); + context.register([ + FlavourExtension(flavour), + BlockViewExtension(flavour, literal`affine-data-view`), + ]); + } +} diff --git a/blocksuite/affine/blocks/data-view/tsconfig.json b/blocksuite/affine/blocks/data-view/tsconfig.json index 1c415dce52..8e6889a353 100644 --- a/blocksuite/affine/blocks/data-view/tsconfig.json +++ b/blocksuite/affine/blocks/data-view/tsconfig.json @@ -9,6 +9,7 @@ "references": [ { "path": "../database" }, { "path": "../../components" }, + { "path": "../../ext-loader" }, { "path": "../../model" }, { "path": "../../shared" }, { "path": "../../widgets/slash-menu" }, diff --git a/blocksuite/affine/blocks/database/package.json b/blocksuite/affine/blocks/database/package.json index bf2c4f07a9..b662311c85 100644 --- a/blocksuite/affine/blocks/database/package.json +++ b/blocksuite/affine/blocks/database/package.json @@ -11,6 +11,7 @@ "license": "MIT", "dependencies": { "@blocksuite/affine-components": "workspace:*", + "@blocksuite/affine-ext-loader": "workspace:*", "@blocksuite/affine-inline-preset": "workspace:*", "@blocksuite/affine-inline-reference": "workspace:*", "@blocksuite/affine-model": "workspace:*", @@ -38,7 +39,9 @@ }, "exports": { ".": "./src/index.ts", - "./effects": "./src/effects.ts" + "./effects": "./src/effects.ts", + "./store": "./src/store.ts", + "./view": "./src/view.ts" }, "files": [ "src", diff --git a/blocksuite/affine/blocks/database/src/store.ts b/blocksuite/affine/blocks/database/src/store.ts new file mode 100644 index 0000000000..5794f9eda2 --- /dev/null +++ b/blocksuite/affine/blocks/database/src/store.ts @@ -0,0 +1,19 @@ +import { + type StoreExtensionContext, + StoreExtensionProvider, +} from '@blocksuite/affine-ext-loader'; +import { DatabaseBlockSchemaExtension } from '@blocksuite/affine-model'; + +import { DatabaseBlockAdapterExtensions } from './adapters/extension'; +import { DatabaseSelectionExtension } from './selection'; + +export default class DatabaseStoreExtension extends StoreExtensionProvider { + override name = 'affine-database-block'; + + override setup(context: StoreExtensionContext) { + super.setup(context); + context.register(DatabaseBlockSchemaExtension); + context.register(DatabaseSelectionExtension); + context.register(DatabaseBlockAdapterExtensions); + } +} diff --git a/blocksuite/affine/blocks/database/src/view.ts b/blocksuite/affine/blocks/database/src/view.ts new file mode 100644 index 0000000000..3d57a31c67 --- /dev/null +++ b/blocksuite/affine/blocks/database/src/view.ts @@ -0,0 +1,28 @@ +import { + type ViewExtensionContext, + ViewExtensionProvider, +} from '@blocksuite/affine-ext-loader'; +import { SlashMenuConfigExtension } from '@blocksuite/affine-widget-slash-menu'; +import { BlockViewExtension, FlavourExtension } from '@blocksuite/std'; +import { literal } from 'lit/static-html.js'; + +import { databaseSlashMenuConfig } from './configs/slash-menu.js'; +import { effects } from './effects'; + +export default class DatabaseViewExtension extends ViewExtensionProvider { + override name = 'affine-database-block'; + + override effect() { + super.effect(); + effects(); + } + + override setup(context: ViewExtensionContext) { + super.setup(context); + context.register([ + FlavourExtension('affine:database'), + BlockViewExtension('affine:database', literal`affine-database`), + SlashMenuConfigExtension('affine:database', databaseSlashMenuConfig), + ]); + } +} diff --git a/blocksuite/affine/blocks/database/tsconfig.json b/blocksuite/affine/blocks/database/tsconfig.json index 39cdc5c2a3..bac1d9f2e4 100644 --- a/blocksuite/affine/blocks/database/tsconfig.json +++ b/blocksuite/affine/blocks/database/tsconfig.json @@ -9,6 +9,7 @@ "include": ["./src"], "references": [ { "path": "../../components" }, + { "path": "../../ext-loader" }, { "path": "../../inlines/preset" }, { "path": "../../inlines/reference" }, { "path": "../../model" }, diff --git a/tools/utils/src/workspace.gen.ts b/tools/utils/src/workspace.gen.ts index 6699fb7337..fc0f178144 100644 --- a/tools/utils/src/workspace.gen.ts +++ b/tools/utils/src/workspace.gen.ts @@ -136,6 +136,7 @@ export const PackageList = [ workspaceDependencies: [ 'blocksuite/affine/blocks/database', 'blocksuite/affine/components', + 'blocksuite/affine/ext-loader', 'blocksuite/affine/model', 'blocksuite/affine/shared', 'blocksuite/affine/widgets/slash-menu', @@ -150,6 +151,7 @@ export const PackageList = [ name: '@blocksuite/affine-block-database', workspaceDependencies: [ 'blocksuite/affine/components', + 'blocksuite/affine/ext-loader', 'blocksuite/affine/inlines/preset', 'blocksuite/affine/inlines/reference', 'blocksuite/affine/model', diff --git a/yarn.lock b/yarn.lock index 0fe5d64214..01c4f42ad8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2487,6 +2487,7 @@ __metadata: dependencies: "@blocksuite/affine-block-database": "workspace:*" "@blocksuite/affine-components": "workspace:*" + "@blocksuite/affine-ext-loader": "workspace:*" "@blocksuite/affine-model": "workspace:*" "@blocksuite/affine-shared": "workspace:*" "@blocksuite/affine-widget-slash-menu": "workspace:*" @@ -2512,6 +2513,7 @@ __metadata: resolution: "@blocksuite/affine-block-database@workspace:blocksuite/affine/blocks/database" dependencies: "@blocksuite/affine-components": "workspace:*" + "@blocksuite/affine-ext-loader": "workspace:*" "@blocksuite/affine-inline-preset": "workspace:*" "@blocksuite/affine-inline-reference": "workspace:*" "@blocksuite/affine-model": "workspace:*"