chore: install subApp asynchronous (#336)
* chore: install subApp asynchronous * fix: test * chore: application handleAppStart * chore: remove application createBy field Co-authored-by: chenos <chenlinxh@gmail.com>
This commit is contained in:
parent
ebc1a47721
commit
687e1f4bc5
@ -1,6 +1,7 @@
|
|||||||
import { mockServer, MockServer } from '@nocobase/test';
|
import { mockServer, MockServer } from '@nocobase/test';
|
||||||
import { Database } from '@nocobase/database';
|
import { Database } from '@nocobase/database';
|
||||||
import { PluginMultiAppManager } from '../server';
|
import { PluginMultiAppManager } from '../server';
|
||||||
|
import { ApplicationModel } from '..';
|
||||||
|
|
||||||
describe('multiple apps create', () => {
|
describe('multiple apps create', () => {
|
||||||
let app: MockServer;
|
let app: MockServer;
|
||||||
@ -90,4 +91,20 @@ describe('multiple apps create', () => {
|
|||||||
|
|
||||||
expect(app.appManager.applications.has('miniApp')).toBeTruthy();
|
expect(app.appManager.applications.has('miniApp')).toBeTruthy();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should change handleAppStart', async () => {
|
||||||
|
const customHandler = jest.fn();
|
||||||
|
ApplicationModel.handleAppStart = customHandler;
|
||||||
|
|
||||||
|
await db.getRepository('applications').create({
|
||||||
|
values: {
|
||||||
|
name: 'miniApp',
|
||||||
|
options: {
|
||||||
|
plugins: ['@nocobase/plugin-ui-schema-storage'],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(customHandler).toHaveBeenCalledTimes(1);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@ -6,7 +6,6 @@ export default defineCollection({
|
|||||||
autoGenId: false,
|
autoGenId: false,
|
||||||
title: '{{t("Applications")}}',
|
title: '{{t("Applications")}}',
|
||||||
sortable: 'sort',
|
sortable: 'sort',
|
||||||
createdBy: true,
|
|
||||||
filterTargetKey: 'name',
|
filterTargetKey: 'name',
|
||||||
fields: [
|
fields: [
|
||||||
{
|
{
|
||||||
|
@ -1 +1,4 @@
|
|||||||
|
import { ApplicationModel, registerAppOptions } from './models/application';
|
||||||
|
|
||||||
export { PluginMultiAppManager as default } from './server';
|
export { PluginMultiAppManager as default } from './server';
|
||||||
|
export { ApplicationModel, registerAppOptions };
|
||||||
|
@ -3,7 +3,7 @@ import { Application } from '@nocobase/server';
|
|||||||
import lodash from 'lodash';
|
import lodash from 'lodash';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
|
|
||||||
interface registerAppOptions extends TransactionAble {
|
export interface registerAppOptions extends TransactionAble {
|
||||||
skipInstall?: boolean;
|
skipInstall?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -16,8 +16,17 @@ export class ApplicationModel extends Model {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static async handleAppStart(app: Application, options: registerAppOptions) {
|
||||||
|
await app.load();
|
||||||
|
|
||||||
|
if (!lodash.get(options, 'skipInstall', false)) {
|
||||||
|
await app.install();
|
||||||
|
}
|
||||||
|
|
||||||
|
await app.start();
|
||||||
|
}
|
||||||
|
|
||||||
async registerToMainApp(mainApp: Application, options: registerAppOptions) {
|
async registerToMainApp(mainApp: Application, options: registerAppOptions) {
|
||||||
const { transaction } = options;
|
|
||||||
const appName = this.get('name') as string;
|
const appName = this.get('name') as string;
|
||||||
const appOptions = (this.get('options') as any) || {};
|
const appOptions = (this.get('options') as any) || {};
|
||||||
|
|
||||||
@ -26,6 +35,7 @@ export class ApplicationModel extends Model {
|
|||||||
...appOptions,
|
...appOptions,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// create database before installation if it not exists
|
||||||
app.on('beforeInstall', async function createDatabase() {
|
app.on('beforeInstall', async function createDatabase() {
|
||||||
const { host, port, username, password, database, dialect } = ApplicationModel.getDatabaseConfig(app);
|
const { host, port, username, password, database, dialect } = ApplicationModel.getDatabaseConfig(app);
|
||||||
|
|
||||||
@ -56,13 +66,7 @@ export class ApplicationModel extends Model {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
await app.load();
|
await ApplicationModel.handleAppStart(app, options);
|
||||||
|
|
||||||
if (!lodash.get(options, 'skipInstall', false)) {
|
|
||||||
await app.install();
|
|
||||||
}
|
|
||||||
|
|
||||||
await app.start();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static initOptions(appName: string, mainApp: Application) {
|
static initOptions(appName: string, mainApp: Application) {
|
||||||
|
@ -19,6 +19,7 @@ export class PluginMultiAppManager extends Plugin {
|
|||||||
|
|
||||||
this.db.on('applications.afterCreateWithAssociations', async (model: ApplicationModel, options) => {
|
this.db.on('applications.afterCreateWithAssociations', async (model: ApplicationModel, options) => {
|
||||||
const { transaction } = options;
|
const { transaction } = options;
|
||||||
|
|
||||||
await model.registerToMainApp(this.app, { transaction });
|
await model.registerToMainApp(this.app, { transaction });
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user