diff --git a/packages/plugin-collection-manager/src/__tests__/fields/children.test.ts b/packages/plugin-collection-manager/src/__tests__/fields/children.test.ts index ddc60a18d..564b99b1b 100644 --- a/packages/plugin-collection-manager/src/__tests__/fields/children.test.ts +++ b/packages/plugin-collection-manager/src/__tests__/fields/children.test.ts @@ -1,4 +1,4 @@ -import Database, { Collection as DBCollection, StringFieldOptions } from '@nocobase/database'; +import Database, { Collection as DBCollection } from '@nocobase/database'; import Application from '@nocobase/server'; import { createApp } from '..'; diff --git a/packages/plugin-collection-manager/src/hooks/afterCreateForReverseField.ts b/packages/plugin-collection-manager/src/hooks/afterCreateForReverseField.ts index 966bfd1f0..542e30302 100644 --- a/packages/plugin-collection-manager/src/hooks/afterCreateForReverseField.ts +++ b/packages/plugin-collection-manager/src/hooks/afterCreateForReverseField.ts @@ -1,9 +1,8 @@ import Database from '@nocobase/database'; export function afterCreateForReverseField(db: Database) { - const Field = db.getCollection('fields'); - return async (model, { transaction }) => { + const Field = db.getCollection('fields'); const reverseKey = model.get('reverseKey'); if (!reverseKey) { return; diff --git a/packages/plugin-collection-manager/src/hooks/beforeCreateForChildrenCollection.ts b/packages/plugin-collection-manager/src/hooks/beforeCreateForChildrenCollection.ts index ada45ec5b..579a66eb7 100644 --- a/packages/plugin-collection-manager/src/hooks/beforeCreateForChildrenCollection.ts +++ b/packages/plugin-collection-manager/src/hooks/beforeCreateForChildrenCollection.ts @@ -1,10 +1,10 @@ import Database from '@nocobase/database'; export function beforeCreateForChildrenCollection(db: Database) { - const Collection = db.getCollection('collections'); - const Field = db.getCollection('fields'); - return async (model, { transaction, context }) => { + const Collection = db.getCollection('collections'); + const Field = db.getCollection('fields'); + const parentKey = model.get('parentKey'); if (!parentKey) { return; diff --git a/packages/plugin-collection-manager/src/hooks/beforeCreateForReverseField.ts b/packages/plugin-collection-manager/src/hooks/beforeCreateForReverseField.ts index dea9f007c..d5d3b6d25 100644 --- a/packages/plugin-collection-manager/src/hooks/beforeCreateForReverseField.ts +++ b/packages/plugin-collection-manager/src/hooks/beforeCreateForReverseField.ts @@ -1,9 +1,8 @@ import Database from '@nocobase/database'; export function beforeCreateForReverseField(db: Database) { - const Field = db.getCollection('fields'); - return async (model, { transaction }) => { + const Field = db.getCollection('fields'); const reverseKey = model.get('reverseKey'); if (!reverseKey) { return; diff --git a/packages/plugin-collection-manager/src/hooks/beforeInitOptions.ts b/packages/plugin-collection-manager/src/hooks/beforeInitOptions.ts index d45869762..447b96d91 100644 --- a/packages/plugin-collection-manager/src/hooks/beforeInitOptions.ts +++ b/packages/plugin-collection-manager/src/hooks/beforeInitOptions.ts @@ -1,7 +1,7 @@ import { uid } from '@nocobase/utils'; import { Model } from 'sequelize'; -export default { +export const beforeInitOptions = { belongsTo(model: Model) { const defaults = { targetKey: 'id', diff --git a/packages/plugin-collection-manager/src/hooks/index.ts b/packages/plugin-collection-manager/src/hooks/index.ts new file mode 100644 index 000000000..931083d84 --- /dev/null +++ b/packages/plugin-collection-manager/src/hooks/index.ts @@ -0,0 +1,5 @@ +export * from './afterCreateForReverseField'; +export * from './beforeCreateForChildrenCollection'; +export * from './beforeCreateForReverseField'; +export * from './beforeInitOptions'; + diff --git a/packages/plugin-collection-manager/src/index.ts b/packages/plugin-collection-manager/src/index.ts index e815bc463..37dac1725 100644 --- a/packages/plugin-collection-manager/src/index.ts +++ b/packages/plugin-collection-manager/src/index.ts @@ -1,52 +1,3 @@ -import path from 'path'; -import { Plugin } from '@nocobase/server'; -import { CollectionModel } from './models/collection'; -import { FieldModel } from './models/field'; -import beforeInitOptions from './hooks/beforeInitOptions'; -import { beforeCreateForChildrenCollection } from './hooks/beforeCreateForChildrenCollection'; -import { beforeCreateForReverseField } from './hooks/beforeCreateForReverseField'; -import { afterCreateForReverseField } from './hooks/afterCreateForReverseField'; +export { default } from './plugin'; +export * from './repositories'; -export * from './repositories/collection-repository'; - -export default class CollectionManagerPlugin extends Plugin { - async beforeLoad() { - this.app.db.registerModels({ - CollectionModel, - FieldModel, - }); - - // 要在 beforeInitOptions 之前处理 - this.app.db.on('fields.beforeCreate', beforeCreateForReverseField(this.app.db)); - this.app.db.on('fields.beforeCreate', beforeCreateForChildrenCollection(this.app.db)); - this.app.db.on('fields.beforeCreate', async (model, options) => { - const type = model.get('type'); - await this.app.db.emitAsync(`fields.${type}.beforeInitOptions`, model, options); - }); - for (const key in beforeInitOptions) { - if (Object.prototype.hasOwnProperty.call(beforeInitOptions, key)) { - const fn = beforeInitOptions[key]; - this.app.db.on(`fields.${key}.beforeInitOptions`, fn); - } - } - this.app.db.on('fields.afterCreate', afterCreateForReverseField(this.app.db)); - - this.app.db.on('collections.afterCreateWithAssociations', async (model, { context, transaction }) => { - if (context) { - await model.migrate({ transaction }); - } - }); - - this.app.db.on('fields.afterCreate', async (model, { context, transaction }) => { - if (context) { - await model.migrate({ transaction }); - } - }); - } - - async load() { - await this.app.db.import({ - directory: path.resolve(__dirname, './collections'), - }); - } -} diff --git a/packages/plugin-collection-manager/src/models/index.ts b/packages/plugin-collection-manager/src/models/index.ts new file mode 100644 index 000000000..e085bc751 --- /dev/null +++ b/packages/plugin-collection-manager/src/models/index.ts @@ -0,0 +1,3 @@ +export * from './collection'; +export * from './field'; + diff --git a/packages/plugin-collection-manager/src/plugin.ts b/packages/plugin-collection-manager/src/plugin.ts new file mode 100644 index 000000000..1c4288eaa --- /dev/null +++ b/packages/plugin-collection-manager/src/plugin.ts @@ -0,0 +1,53 @@ +import { Plugin } from '@nocobase/server'; +import path from 'path'; +import { + afterCreateForReverseField, + beforeCreateForChildrenCollection, + beforeCreateForReverseField, + beforeInitOptions +} from './hooks'; +import { CollectionModel, FieldModel } from './models'; + +export class CollectionManagerPlugin extends Plugin { + async beforeLoad() { + this.app.db.registerModels({ + CollectionModel, + FieldModel, + }); + + // 要在 beforeInitOptions 之前处理 + this.app.db.on('fields.beforeCreate', beforeCreateForReverseField(this.app.db)); + this.app.db.on('fields.beforeCreate', beforeCreateForChildrenCollection(this.app.db)); + this.app.db.on('fields.beforeCreate', async (model, options) => { + const type = model.get('type'); + await this.app.db.emitAsync(`fields.${type}.beforeInitOptions`, model, options); + }); + for (const key in beforeInitOptions) { + if (Object.prototype.hasOwnProperty.call(beforeInitOptions, key)) { + const fn = beforeInitOptions[key]; + this.app.db.on(`fields.${key}.beforeInitOptions`, fn); + } + } + this.app.db.on('fields.afterCreate', afterCreateForReverseField(this.app.db)); + + this.app.db.on('collections.afterCreateWithAssociations', async (model, { context, transaction }) => { + if (context) { + await model.migrate({ transaction }); + } + }); + + this.app.db.on('fields.afterCreate', async (model, { context, transaction }) => { + if (context) { + await model.migrate({ transaction }); + } + }); + } + + async load() { + await this.app.db.import({ + directory: path.resolve(__dirname, './collections'), + }); + } +} + +export default CollectionManagerPlugin; diff --git a/packages/plugin-collection-manager/src/repositories/index.ts b/packages/plugin-collection-manager/src/repositories/index.ts new file mode 100644 index 000000000..9cb43e238 --- /dev/null +++ b/packages/plugin-collection-manager/src/repositories/index.ts @@ -0,0 +1 @@ +export * from './collection-repository';