62 lines
1.6 KiB
TypeScript
62 lines
1.6 KiB
TypeScript
|
import { InstallOptions, Plugin } from '@nocobase/server';
|
||
|
import JSON5 from 'json5';
|
||
|
import { resolve } from 'path';
|
||
|
import { getData, listMetadata, validate } from './actions/chartsQueries';
|
||
|
import { query } from './query';
|
||
|
|
||
|
export class ChartsPlugin extends Plugin {
|
||
|
syncFields = async (instance, { transaction }) => {
|
||
|
const _data = await query[instance.type](instance.options, { db: this.db, transaction, validateSQL: true });
|
||
|
let data;
|
||
|
if (typeof _data === 'string') {
|
||
|
data = JSON5.parse(_data);
|
||
|
} else {
|
||
|
data = _data;
|
||
|
}
|
||
|
const d = Array.isArray(data) ? data?.[0] : data;
|
||
|
const fields = Object.keys(d || {}).map((f) => {
|
||
|
return {
|
||
|
name: f,
|
||
|
};
|
||
|
});
|
||
|
instance.set('fields', fields);
|
||
|
};
|
||
|
|
||
|
afterAdd() {}
|
||
|
|
||
|
beforeLoad() {
|
||
|
this.app.db.on('chartsQueries.beforeCreate', this.syncFields);
|
||
|
this.app.db.on('chartsQueries.beforeUpdate', this.syncFields);
|
||
|
}
|
||
|
|
||
|
async load() {
|
||
|
await this.db.import({
|
||
|
directory: resolve(__dirname, 'collections'),
|
||
|
});
|
||
|
|
||
|
this.app.resourcer.registerActionHandlers({
|
||
|
'chartsQueries:getData': getData,
|
||
|
'chartsQueries:listMetadata': listMetadata,
|
||
|
'chartsQueries:validate': validate,
|
||
|
});
|
||
|
|
||
|
this.app.acl.registerSnippet({
|
||
|
name: 'pm.charts.queries',
|
||
|
actions: ['chartsQueries:*'],
|
||
|
});
|
||
|
|
||
|
this.app.acl.allow('chartsQueries', 'getData', 'loggedIn');
|
||
|
this.app.acl.allow('chartsQueries', 'listMetadata', 'loggedIn');
|
||
|
}
|
||
|
|
||
|
async install(options?: InstallOptions) {}
|
||
|
|
||
|
async afterEnable() {}
|
||
|
|
||
|
async afterDisable() {}
|
||
|
|
||
|
async remove() {}
|
||
|
}
|
||
|
|
||
|
export default ChartsPlugin;
|