Skip to content

Commit

Permalink
feat(core/reports): add AjfWidgetService for custom widgets definition
Browse files Browse the repository at this point in the history
  • Loading branch information
trik committed Aug 21, 2020
1 parent 7b4cb3b commit b7335ae
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/core/reports/public-api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ export * from './serializers/widget-serializer';
export * from './widget';
export * from './widget-components-map';
export * from './widget-host';
export * from './widget-service';

export * from './utils/aggregation/create-aggregation';
export * from './utils/reports-instances/create-report-instance';
Expand Down
45 changes: 45 additions & 0 deletions src/core/reports/widget-service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
/**
* @license
* Copyright (C) Gnucoop soc. coop.
*
* This file is part of the Advanced JSON forms (ajf).
*
* Advanced JSON forms (ajf) is free software: you can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version.
*
* Advanced JSON forms (ajf) is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero
* General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Advanced JSON forms (ajf).
* If not, see http://www.gnu.org/licenses/.
*
*/

import {Type} from '@angular/core';

import {AjfBaseWidgetComponent} from './base-widget';
import {AjfWidgetComponentsMap} from './widget-components-map';

export abstract class AjfWidgetService {
readonly componentsMap: AjfWidgetComponentsMap = {};

registerCustomWidget(widget: {
widgetType: number,
component: Type<AjfBaseWidgetComponent>,
inputs?: {[key: string]: any},
}): void {
const {widgetType, component} = widget;
if (widgetType < 100) {
throw new Error('Invalid custom widget type, it must be greater than 100');
}
if (component == null) {
throw new Error('Invalid custom widget component');
}
this.componentsMap[widgetType] = widget;
}
}
11 changes: 11 additions & 0 deletions tools/public_api_guard/core/reports.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -322,6 +322,17 @@ export declare class AjfWidgetSerializer {
static fromJson(json: Partial<AjfWidget>): AjfWidget;
}

export declare abstract class AjfWidgetService {
readonly componentsMap: AjfWidgetComponentsMap;
registerCustomWidget(widget: {
widgetType: number;
component: Type<AjfBaseWidgetComponent>;
inputs?: {
[key: string]: any;
};
}): void;
}

export declare enum AjfWidgetType {
Layout = 0,
PageBreak = 1,
Expand Down

0 comments on commit b7335ae

Please sign in to comment.