fix: hooks defined in the table options does not work
This commit is contained in:
parent
a96bf09316
commit
e86b573296
@ -9,12 +9,17 @@ class TestHookField extends Integer {
|
|||||||
super(options, context);
|
super(options, context);
|
||||||
const Model = context.sourceTable.getModel();
|
const Model = context.sourceTable.getModel();
|
||||||
Model.addHook('beforeCreate', (model) => {
|
Model.addHook('beforeCreate', (model) => {
|
||||||
model.set('name', 'beforeCreate123');
|
const arr = model.get('arr') as any[];
|
||||||
console.log('beforeCreate123');
|
arr.push(1);
|
||||||
|
model.set('arr', arr);
|
||||||
|
console.log('beforeCreate in field');
|
||||||
});
|
});
|
||||||
Model.addHook('afterCreate', (model) => {
|
Model.addHook('afterCreate', (model) => {
|
||||||
model.set('title', 'afterCreate123');
|
model.set('title', 'afterCreate123');
|
||||||
console.log('afterCreate123');
|
const arr = model.get('arr') as any[];
|
||||||
|
arr.push(2);
|
||||||
|
model.set('arr', arr);
|
||||||
|
console.log('afterCreate in field');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -37,23 +42,58 @@ describe('hooks', () => {
|
|||||||
name: 'testHook',
|
name: 'testHook',
|
||||||
fields: [
|
fields: [
|
||||||
{
|
{
|
||||||
type: 'string',
|
type: 'json',
|
||||||
name: 'name',
|
name: 'arr',
|
||||||
|
defaultValue: [],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'testHook',
|
type: 'testHook',
|
||||||
name: 'testHook',
|
name: 'testHook',
|
||||||
},
|
},
|
||||||
{
|
|
||||||
type: 'string',
|
|
||||||
name: 'title',
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
await db.sync();
|
await db.sync();
|
||||||
const TestHook = db.getModel('testHook');
|
const TestHook = db.getModel('testHook');
|
||||||
const test = await TestHook.create({});
|
const test = await TestHook.create({});
|
||||||
expect(test.get('name')).toBe('beforeCreate123');
|
expect(test.get('arr')).toEqual([1,2]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('add hook in custom field', async () => {
|
||||||
|
db.table({
|
||||||
|
name: 'test1',
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
type: 'testHook',
|
||||||
|
name: 'testHook',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'json',
|
||||||
|
name: 'arr',
|
||||||
|
defaultValue: [],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
hooks: {
|
||||||
|
beforeCreate(model) {
|
||||||
|
model.set('name', 'beforeCreate1');
|
||||||
|
const arr = model.get('arr') as any[];
|
||||||
|
arr.push(3);
|
||||||
|
model.set('arr', arr);
|
||||||
|
console.log('beforeCreate in table');
|
||||||
|
},
|
||||||
|
afterCreate(model) {
|
||||||
|
model.set('name', 'afterCreate1');
|
||||||
|
const arr = model.get('arr') as any[];
|
||||||
|
arr.push(4);
|
||||||
|
model.set('arr', arr);
|
||||||
|
console.log('afterCreate in table');
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
await db.sync();
|
||||||
|
const Test1 = db.getModel('test1');
|
||||||
|
const test = await Test1.create({});
|
||||||
|
console.log(test.get('arr'));
|
||||||
|
expect(test.get('arr')).toEqual([3,1,4,2]);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('add hook in custom field', async () => {
|
it('add hook in custom field', async () => {
|
||||||
@ -61,8 +101,9 @@ describe('hooks', () => {
|
|||||||
name: 'test2',
|
name: 'test2',
|
||||||
fields: [
|
fields: [
|
||||||
{
|
{
|
||||||
type: 'string',
|
type: 'json',
|
||||||
name: 'name',
|
name: 'arr',
|
||||||
|
defaultValue: [],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
@ -78,7 +119,42 @@ describe('hooks', () => {
|
|||||||
await table.sync();
|
await table.sync();
|
||||||
const Test2 = db.getModel('test2');
|
const Test2 = db.getModel('test2');
|
||||||
const test = await Test2.create({});
|
const test = await Test2.create({});
|
||||||
expect(test.get('name')).toBe('beforeCreate123');
|
expect(test.get('arr')).toEqual([1,2]);
|
||||||
expect(test.get('title')).toBe('afterCreate123');
|
});
|
||||||
|
|
||||||
|
it.only('add hook in custom field', async () => {
|
||||||
|
const table = db.table({
|
||||||
|
name: 'test3',
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
type: 'json',
|
||||||
|
name: 'arr',
|
||||||
|
defaultValue: [],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
// 通过 table 新增
|
||||||
|
table.addField({
|
||||||
|
type: 'testHook',
|
||||||
|
name: 'testHook',
|
||||||
|
});
|
||||||
|
table.addField({
|
||||||
|
type: 'string',
|
||||||
|
name: 'title',
|
||||||
|
});
|
||||||
|
await table.sync();
|
||||||
|
const Test3 = db.getModel('test3');
|
||||||
|
Test3.beforeCreate((model) => {
|
||||||
|
const arr = model.get('arr') as any[];
|
||||||
|
arr.push(3);
|
||||||
|
model.set('arr', arr);
|
||||||
|
});
|
||||||
|
Test3.afterCreate((model) => {
|
||||||
|
const arr = model.get('arr') as any[];
|
||||||
|
arr.push(4);
|
||||||
|
model.set('arr', arr);
|
||||||
|
});
|
||||||
|
const test = await Test3.create({});
|
||||||
|
expect(test.get('arr')).toEqual([ 1, 3, 2, 4 ]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -214,14 +214,15 @@ export class Table {
|
|||||||
|
|
||||||
public getModelOptions(): InitOptions {
|
public getModelOptions(): InitOptions {
|
||||||
const { underscored = true } = this.modelOptions;
|
const { underscored = true } = this.modelOptions;
|
||||||
|
const hooks = _.get(this.getModel(), 'options.hooks') || this.options.hooks || {};
|
||||||
return {
|
return {
|
||||||
underscored,
|
underscored,
|
||||||
createdAt: Utils.underscoredIf('createdAt', underscored),
|
createdAt: Utils.underscoredIf('createdAt', underscored),
|
||||||
updatedAt: Utils.underscoredIf('updatedAt', underscored),
|
updatedAt: Utils.underscoredIf('updatedAt', underscored),
|
||||||
indexes: Array.from(this.indexes.values()),
|
indexes: Array.from(this.indexes.values()),
|
||||||
// freezeTableName: true,
|
// freezeTableName: true,
|
||||||
hooks: _.get(this.getModel(), 'options.hooks') || {},
|
|
||||||
...this.modelOptions,
|
...this.modelOptions,
|
||||||
|
hooks,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user