feat: register default hooks
This commit is contained in:
parent
4607e0da49
commit
05fe32fcf1
@ -2,7 +2,6 @@ import { mockServer, MockServer } from '@nocobase/test';
|
|||||||
import { Database } from '@nocobase/database';
|
import { Database } from '@nocobase/database';
|
||||||
import PluginUiSchema, { UiSchemaRepository } from '@nocobase/plugin-ui-schema-storage';
|
import PluginUiSchema, { UiSchemaRepository } from '@nocobase/plugin-ui-schema-storage';
|
||||||
import PluginCollectionManager from '@nocobase/plugin-collection-manager';
|
import PluginCollectionManager from '@nocobase/plugin-collection-manager';
|
||||||
import { removeEmptyParents } from '../server-hooks/removeEmptyParents';
|
|
||||||
|
|
||||||
describe('server hooks', () => {
|
describe('server hooks', () => {
|
||||||
let app: MockServer;
|
let app: MockServer;
|
||||||
@ -144,8 +143,6 @@ describe('server hooks', () => {
|
|||||||
|
|
||||||
await uiSchemaRepository.insert(schema);
|
await uiSchemaRepository.insert(schema);
|
||||||
|
|
||||||
uiSchemaPlugin.serverHooks.register('onCollectionFieldDestroy', 'removeEmptyParents', removeEmptyParents);
|
|
||||||
|
|
||||||
await db.getRepository('fields').destroy({
|
await db.getRepository('fields').destroy({
|
||||||
filter: {
|
filter: {
|
||||||
name: 'intro',
|
name: 'intro',
|
||||||
@ -157,4 +154,34 @@ describe('server hooks', () => {
|
|||||||
expect(jsonTree['properties']['row1']['properties']['col11']).toBeDefined();
|
expect(jsonTree['properties']['row1']['properties']['col11']).toBeDefined();
|
||||||
expect(jsonTree['properties']['row1']['properties']['col12']).not.toBeDefined();
|
expect(jsonTree['properties']['row1']['properties']['col12']).not.toBeDefined();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should remove schema when collection destroy', async () => {
|
||||||
|
await db.getRepository('collections').create({
|
||||||
|
values: {
|
||||||
|
name: 'posts',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
await db.getRepository('fields').create({
|
||||||
|
values: {
|
||||||
|
name: 'title',
|
||||||
|
type: 'string',
|
||||||
|
collectionName: 'posts',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const schema = {
|
||||||
|
'x-uid': 'root',
|
||||||
|
properties: {
|
||||||
|
child1: {
|
||||||
|
'x-uid': 'child1',
|
||||||
|
},
|
||||||
|
|
||||||
|
child2: {
|
||||||
|
'x-uid': 'child2',
|
||||||
|
'x-server-hooks': [],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { Repository } from '@nocobase/database';
|
import { Repository, TransactionAble } from '@nocobase/database';
|
||||||
import lodash from 'lodash';
|
import lodash from 'lodash';
|
||||||
import { ChildOptions, SchemaNode, TargetPosition, UiSchemaNodeDAO } from './dao/ui_schema_node_dao';
|
import { ChildOptions, SchemaNode, TargetPosition, UiSchemaNodeDAO } from './dao/ui_schema_node_dao';
|
||||||
import { uid } from '@nocobase/utils';
|
import { uid } from '@nocobase/utils';
|
||||||
@ -227,7 +227,7 @@ export default class UiSchemaRepository extends Repository {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
async remove(uid: string, options?) {
|
async remove(uid: string, options?: TransactionAble) {
|
||||||
let handleTransaction: boolean = true;
|
let handleTransaction: boolean = true;
|
||||||
let transaction;
|
let transaction;
|
||||||
|
|
||||||
|
@ -0,0 +1,9 @@
|
|||||||
|
import { HookType } from '../index';
|
||||||
|
|
||||||
|
export function hookFactory(hookType: HookType, hookName: string, hookFunc) {
|
||||||
|
return {
|
||||||
|
hookType,
|
||||||
|
hookName,
|
||||||
|
hookFunc,
|
||||||
|
};
|
||||||
|
}
|
@ -0,0 +1,3 @@
|
|||||||
|
const hooks = [require('./removeEmptyParents').default];
|
||||||
|
|
||||||
|
export { hooks };
|
@ -1,4 +1,5 @@
|
|||||||
import { UiSchemaRepository } from '@nocobase/plugin-ui-schema-storage';
|
import { UiSchemaRepository } from '@nocobase/plugin-ui-schema-storage';
|
||||||
|
import { hookFactory } from './factory';
|
||||||
|
|
||||||
// given a child uid, if it is a single child ,return its parent
|
// given a child uid, if it is a single child ,return its parent
|
||||||
async function isSingleChild(uid, db, transaction) {
|
async function isSingleChild(uid, db, transaction) {
|
||||||
@ -31,7 +32,7 @@ async function isSingleChild(uid, db, transaction) {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function removeEmptyParents({ schemaInstance, options, db }) {
|
async function removeEmptyParents({ schemaInstance, options, db }) {
|
||||||
const { transaction } = options;
|
const { transaction } = options;
|
||||||
const uiSchemaRepository: UiSchemaRepository = db.getRepository('ui_schemas');
|
const uiSchemaRepository: UiSchemaRepository = db.getRepository('ui_schemas');
|
||||||
const uid = schemaInstance.get('uid');
|
const uid = schemaInstance.get('uid');
|
||||||
@ -50,3 +51,5 @@ export async function removeEmptyParents({ schemaInstance, options, db }) {
|
|||||||
await uiSchemaRepository.remove(uid, { transaction });
|
await uiSchemaRepository.remove(uid, { transaction });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export default hookFactory('onCollectionFieldDestroy', 'removeEmptyParents', removeEmptyParents);
|
@ -1,5 +1,6 @@
|
|||||||
import { Database } from '@nocobase/database';
|
import { Database } from '@nocobase/database';
|
||||||
import { ServerHookModel } from './model';
|
import { ServerHookModel } from './model';
|
||||||
|
import { hooks } from './hooks';
|
||||||
|
|
||||||
export type HookType =
|
export type HookType =
|
||||||
| 'onSelfDestroy'
|
| 'onSelfDestroy'
|
||||||
@ -13,6 +14,11 @@ export class ServerHooks {
|
|||||||
|
|
||||||
constructor(protected db: Database) {
|
constructor(protected db: Database) {
|
||||||
this.listen();
|
this.listen();
|
||||||
|
this.registerHooks();
|
||||||
|
}
|
||||||
|
|
||||||
|
registerHooks() {
|
||||||
|
hooks.forEach((hook) => this.register(hook.hookType, hook.hookName, hook.hookFunc));
|
||||||
}
|
}
|
||||||
|
|
||||||
listen() {
|
listen() {
|
||||||
|
Loading…
Reference in New Issue
Block a user