@acorex/platform 18.0.16 → 18.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/common/lib/schema/entity/entity.class.d.ts +2 -1
- package/esm2022/common/lib/schema/entity/entity.class.mjs +1 -1
- package/esm2022/common/lib/workflows/common.workflow.mjs +1 -1
- package/esm2022/layout/builder/lib/builder/builder.module.mjs +4 -3
- package/esm2022/layout/builder/lib/builder/index.mjs +2 -1
- package/esm2022/layout/builder/lib/builder/widget-renderer.component.directive.mjs +280 -0
- package/esm2022/layout/designer/lib/designer/components/board/board.component.mjs +3 -3
- package/esm2022/layout/designer/lib/designer/components/header-menu/header-menu.component.mjs +3 -3
- package/esm2022/layout/designer/lib/designer/designer.component.mjs +9 -5
- package/esm2022/layout/designer/lib/designer/shared/designer.service.mjs +21 -21
- package/esm2022/layout/designer/lib/designer/shared/designer.typs.mjs +6 -2
- package/esm2022/layout/entity/lib/entity.module.mjs +4 -2
- package/esm2022/layout/entity/lib/widgets/lookup-widget/lookup-widget-view.component.mjs +7 -4
- package/esm2022/layout/entity/lib/workflows/create-entity.workflow.mjs +4 -3
- package/esm2022/layout/entity/lib/workflows/delete-entity.workflow.mjs +10 -11
- package/esm2022/layouts/lib/admin/entity-layout/entity-create-view/entity-create-view.component.mjs +3 -2
- package/esm2022/layouts/lib/admin/entity-layout/entity-details-view/detail-view.config.mjs +2 -3
- package/esm2022/layouts/lib/admin/entity-layout/entity-list-view/entity-list-view.component.mjs +3 -3
- package/esm2022/layouts/lib/admin/entity-layout/index.mjs +2 -2
- package/esm2022/layouts/lib/admin/entity-layout/workflows/show-list.workflow.mjs +2 -2
- package/esm2022/themes/default/lib/entity-reuse.strategy.mjs +2 -4
- package/esm2022/themes/default/lib/layouts/entity-layouts/entity-detail-list-view/entity-detail-list-view.component.mjs +33 -6
- package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-list-view/entity-master-list-view.component.mjs +4 -4
- package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-single-view/comments/comment-list-view.component.mjs +4 -4
- package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-single-view/overview/entity-single-overview.component.mjs +3 -3
- package/esm2022/widgets/lib/properties/editors.props.mjs +61 -2
- package/esm2022/widgets/lib/properties/table-column.props.mjs +17 -2
- package/esm2022/widgets/lib/widgets/actions/button/button-widget-designer.component.mjs +25 -9
- package/esm2022/widgets/lib/widgets/actions/button/button-widget-view.component.mjs +26 -10
- package/esm2022/widgets/lib/widgets/actions/button/button-widget.config.mjs +4 -2
- package/esm2022/widgets/lib/widgets/advance/file/file-box-widget-column.component.mjs +3 -3
- package/esm2022/widgets/lib/widgets/advance/gallery/gallery-widget-column.component.mjs +3 -3
- package/esm2022/widgets/lib/widgets/advance/map/map-box-widget-edit.component.mjs +7 -3
- package/esm2022/widgets/lib/widgets/advance/map/map-box-widget-view.component.mjs +3 -3
- package/esm2022/widgets/lib/widgets/advance/map/map-box-widget.config.mjs +4 -4
- package/esm2022/widgets/lib/widgets/advance/qrcode/qrcode-widget.config.mjs +3 -3
- package/esm2022/widgets/lib/widgets/advance/signature/signature-pad-widget-column.component.mjs +3 -3
- package/esm2022/widgets/lib/widgets/editors/checkbox/checkbox-widget-column.component.mjs +6 -6
- package/esm2022/widgets/lib/widgets/editors/contact/contact-widget-edit.component.mjs +26 -17
- package/esm2022/widgets/lib/widgets/editors/contact/contact-widget-view.component.mjs +63 -63
- package/esm2022/widgets/lib/widgets/editors/contact/contact-widget.config.mjs +3 -3
- package/esm2022/widgets/lib/widgets/editors/contact/index.mjs +3 -4
- package/esm2022/widgets/lib/widgets/editors/date-time/date-time-box-widget-column.component.mjs +1 -1
- package/esm2022/widgets/lib/widgets/editors/date-time/date-time-box-widget-edit.component.mjs +63 -41
- package/esm2022/widgets/lib/widgets/editors/date-time/date-time-box-widget-view.component.mjs +14 -20
- package/esm2022/widgets/lib/widgets/editors/large-text/large-text-widget-column.component.mjs +1 -1
- package/esm2022/widgets/lib/widgets/editors/large-text/large-text-widget-edit.component.mjs +1 -1
- package/esm2022/widgets/lib/widgets/editors/large-text/large-text-widget-view.component.mjs +1 -1
- package/esm2022/widgets/lib/widgets/editors/large-text/large-text-widget.config.mjs +5 -4
- package/esm2022/widgets/lib/widgets/editors/number/number-box-widget-edit.component.mjs +49 -57
- package/esm2022/widgets/lib/widgets/editors/number/number-box-widget-view.component.mjs +11 -17
- package/esm2022/widgets/lib/widgets/editors/number/number-box-widget.config.mjs +3 -2
- package/esm2022/widgets/lib/widgets/editors/password/password-box-widget-column.component.mjs +44 -7
- package/esm2022/widgets/lib/widgets/editors/password/password-box-widget-edit.component.mjs +1 -1
- package/esm2022/widgets/lib/widgets/editors/password/password-box-widget-view.component.mjs +11 -5
- package/esm2022/widgets/lib/widgets/editors/rich-text/rich-text-widget-edit.component.mjs +33 -15
- package/esm2022/widgets/lib/widgets/editors/rich-text/rich-text-widget-view.component.mjs +5 -3
- package/esm2022/widgets/lib/widgets/editors/rich-text/rich-text-widget.config.mjs +4 -4
- package/esm2022/widgets/lib/widgets/editors/select/select-box-widget-column.component.mjs +36 -6
- package/esm2022/widgets/lib/widgets/editors/selection-list/selection-list-widget-column.component.mjs +21 -6
- package/esm2022/widgets/lib/widgets/editors/selection-list/selection-list-widget.config.mjs +4 -4
- package/esm2022/widgets/lib/widgets/editors/text/text-box-widget.config.mjs +4 -4
- package/esm2022/widgets/lib/widgets/layout/block/block-widget-view.component.mjs +4 -4
- package/esm2022/widgets/lib/widgets/layout/form-field/form-field-widget-view.component.mjs +28 -16
- package/esm2022/widgets/lib/widgets/layout/grid/grid-widget-designer.component.mjs +37 -31
- package/esm2022/widgets/lib/widgets/layout/grid/grid-widget-view.component.mjs +27 -6
- package/esm2022/widgets/lib/widgets/layout/grid-item/grid-item-widget-designer.component.mjs +32 -26
- package/esm2022/widgets/lib/widgets/layout/grid-item/grid-item-widget-view.component.mjs +82 -8
- package/esm2022/widgets/lib/widgets/layout/grid-row/grid-row-widget-view.component.mjs +27 -6
- package/esm2022/widgets/lib/widgets/layout/page/page-widget-view.component.mjs +6 -4
- package/esm2022/widgets/lib/widgets.module.mjs +16 -10
- package/fesm2022/acorex-platform-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-builder.mjs +276 -4
- package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-designer.mjs +36 -28
- package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity.mjs +18 -13
- package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
- package/fesm2022/{acorex-platform-layouts-entity-create-view.component-C2pYReAo.mjs → acorex-platform-layouts-entity-create-view.component-CPGbLM4C.mjs} +3 -2
- package/fesm2022/acorex-platform-layouts-entity-create-view.component-CPGbLM4C.mjs.map +1 -0
- package/fesm2022/acorex-platform-layouts.mjs +1633 -1633
- package/fesm2022/acorex-platform-layouts.mjs.map +1 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-CWXJxLS0.mjs +281 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-CWXJxLS0.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-B9lGgO_u.mjs +357 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-B9lGgO_u.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default.mjs +11 -562
- package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
- package/fesm2022/{acorex-platform-widgets-button-widget-designer.component-C0S_HJkl.mjs → acorex-platform-widgets-button-widget-designer.component-Oxpdaz9P.mjs} +25 -9
- package/fesm2022/acorex-platform-widgets-button-widget-designer.component-Oxpdaz9P.mjs.map +1 -0
- package/fesm2022/{acorex-platform-widgets-checkbox-widget-column.component-BzNhzB9y.mjs → acorex-platform-widgets-checkbox-widget-column.component-j1jG8pCr.mjs} +6 -6
- package/fesm2022/acorex-platform-widgets-checkbox-widget-column.component-j1jG8pCr.mjs.map +1 -0
- package/fesm2022/acorex-platform-widgets-contact-widget-filter.component-GTwK51nJ.mjs +23 -0
- package/fesm2022/acorex-platform-widgets-contact-widget-filter.component-GTwK51nJ.mjs.map +1 -0
- package/fesm2022/acorex-platform-widgets.mjs +981 -650
- package/fesm2022/acorex-platform-widgets.mjs.map +1 -1
- package/layout/builder/lib/builder/builder.module.d.ts +5 -4
- package/layout/builder/lib/builder/index.d.ts +1 -0
- package/layout/builder/lib/builder/widget-renderer.component.directive.d.ts +42 -0
- package/layout/designer/lib/designer/designer.component.d.ts +1 -0
- package/layout/designer/lib/designer/shared/designer.service.d.ts +2 -1
- package/layout/designer/lib/designer/shared/designer.typs.d.ts +15 -0
- package/layout/entity/lib/widgets/lookup-widget/lookup-widget-view.component.d.ts +1 -1
- package/layout/entity/lib/workflows/create-entity.workflow.d.ts +2 -0
- package/layout/entity/lib/workflows/delete-entity.workflow.d.ts +2 -0
- package/layouts/lib/admin/entity-layout/index.d.ts +1 -1
- package/package.json +17 -17
- package/themes/default/lib/entity-reuse.strategy.d.ts +1 -1
- package/themes/default/lib/layouts/entity-layouts/entity-detail-list-view/entity-detail-list-view.component.d.ts +5 -0
- package/widgets/lib/properties/editors.props.d.ts +4 -0
- package/widgets/lib/properties/table-column.props.d.ts +1 -0
- package/widgets/lib/widgets/actions/button/button-widget-designer.component.d.ts +3 -2
- package/widgets/lib/widgets/actions/button/button-widget-view.component.d.ts +3 -2
- package/widgets/lib/widgets/advance/file/file-box-widget-column.component.d.ts +1 -1
- package/widgets/lib/widgets/advance/gallery/gallery-widget-column.component.d.ts +1 -1
- package/widgets/lib/widgets/advance/map/map-box-widget-edit.component.d.ts +2 -0
- package/widgets/lib/widgets/advance/signature/signature-pad-widget-column.component.d.ts +1 -1
- package/widgets/lib/widgets/editors/checkbox/checkbox-widget-column.component.d.ts +1 -1
- package/widgets/lib/widgets/editors/contact/contact-widget-edit.component.d.ts +1 -0
- package/widgets/lib/widgets/editors/contact/contact-widget-view.component.d.ts +2 -2
- package/widgets/lib/widgets/editors/contact/index.d.ts +2 -3
- package/widgets/lib/widgets/editors/date-time/date-time-box-widget-column.component.d.ts +1 -1
- package/widgets/lib/widgets/editors/date-time/date-time-box-widget-edit.component.d.ts +2 -1
- package/widgets/lib/widgets/editors/date-time/date-time-box-widget-view.component.d.ts +2 -2
- package/widgets/lib/widgets/editors/large-text/large-text-widget-column.component.d.ts +1 -1
- package/widgets/lib/widgets/editors/large-text/large-text-widget-edit.component.d.ts +1 -1
- package/widgets/lib/widgets/editors/large-text/large-text-widget-view.component.d.ts +1 -1
- package/widgets/lib/widgets/editors/number/number-box-widget-edit.component.d.ts +1 -1
- package/widgets/lib/widgets/editors/password/password-box-widget-column.component.d.ts +7 -3
- package/widgets/lib/widgets/editors/password/password-box-widget-edit.component.d.ts +1 -1
- package/widgets/lib/widgets/editors/password/password-box-widget-view.component.d.ts +1 -1
- package/widgets/lib/widgets/editors/rich-text/rich-text-widget-edit.component.d.ts +2 -0
- package/widgets/lib/widgets/editors/select/select-box-widget-column.component.d.ts +5 -0
- package/widgets/lib/widgets/editors/selection-list/selection-list-widget-column.component.d.ts +1 -1
- package/widgets/lib/widgets/layout/form-field/form-field-widget-view.component.d.ts +2 -1
- package/widgets/lib/widgets/layout/grid/grid-widget-view.component.d.ts +3 -0
- package/widgets/lib/widgets/layout/grid-item/grid-item-widget-view.component.d.ts +11 -2
- package/widgets/lib/widgets/layout/grid-row/grid-row-widget-view.component.d.ts +3 -0
- package/fesm2022/acorex-platform-layouts-entity-create-view.component-C2pYReAo.mjs.map +0 -1
- package/fesm2022/acorex-platform-widgets-button-widget-designer.component-C0S_HJkl.mjs.map +0 -1
- package/fesm2022/acorex-platform-widgets-checkbox-widget-column.component-BzNhzB9y.mjs.map +0 -1
|
@@ -5,7 +5,7 @@ import { ComponentPortal, PortalModule } from '@angular/cdk/portal';
|
|
|
5
5
|
import * as i1 from '@angular/common';
|
|
6
6
|
import { CommonModule } from '@angular/common';
|
|
7
7
|
import * as i0 from '@angular/core';
|
|
8
|
-
import { signal, Injectable, InjectionToken, inject, ElementRef, computed, afterNextRender, Injector, Component, ChangeDetectionStrategy, Input, EventEmitter, model, effect, Output, ChangeDetectorRef, ViewChild, NgModule, Optional, Inject } from '@angular/core';
|
|
8
|
+
import { signal, Injectable, InjectionToken, inject, ElementRef, computed, afterNextRender, Injector, Component, ChangeDetectionStrategy, Input, EventEmitter, model, effect, Output, ChangeDetectorRef, ViewChild, input, ViewContainerRef, Directive, NgModule, Optional, Inject } from '@angular/core';
|
|
9
9
|
import { AXUnsubscriber } from '@acorex/core/utils';
|
|
10
10
|
import { set, get, isEqual, clone, merge, cloneDeep, isUndefined, sum } from 'lodash-es';
|
|
11
11
|
import { Subject, debounceTime, filter } from 'rxjs';
|
|
@@ -741,7 +741,279 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
|
|
|
741
741
|
args: ['header']
|
|
742
742
|
}] } });
|
|
743
743
|
|
|
744
|
-
|
|
744
|
+
class AXPWidgetRendererDirective {
|
|
745
|
+
constructor() {
|
|
746
|
+
this.parentNode = input();
|
|
747
|
+
this.index = input();
|
|
748
|
+
this.mode = input.required();
|
|
749
|
+
this.node = input.required();
|
|
750
|
+
this.mergedOptions = signal({});
|
|
751
|
+
this.injector = inject(Injector);
|
|
752
|
+
this.builderService = inject(AXPLayoutBuilderService);
|
|
753
|
+
this.widgetRegistery = inject(AXPWidgetRegistryService);
|
|
754
|
+
this.unsubscriber = inject(AXUnsubscriber);
|
|
755
|
+
this.viewContainerRef = inject(ViewContainerRef);
|
|
756
|
+
this.isLoading = signal(true);
|
|
757
|
+
this.expressionCache = new Map();
|
|
758
|
+
this.expressionEvaluators = new Map();
|
|
759
|
+
this.scope = null;
|
|
760
|
+
this.builderService.onChanged.pipe(this.unsubscriber.takeUntilDestroy).subscribe(async (e) => {
|
|
761
|
+
if ((await this.updateOptionsBasedOnContext()) > 0) {
|
|
762
|
+
this.applyOptions();
|
|
763
|
+
}
|
|
764
|
+
if (this.checkFormulaForUpdate(this.node().formula, e.path)) {
|
|
765
|
+
await this.updateValueBasedOnFormula();
|
|
766
|
+
}
|
|
767
|
+
});
|
|
768
|
+
//
|
|
769
|
+
effect(async () => {
|
|
770
|
+
await this.loadComponent();
|
|
771
|
+
}, { allowSignalWrites: true });
|
|
772
|
+
}
|
|
773
|
+
async loadComponent() {
|
|
774
|
+
this.isLoading.set(true);
|
|
775
|
+
this.viewContainerRef.clear();
|
|
776
|
+
const widget = this.widgetRegistery.resolve(this.node().type);
|
|
777
|
+
//
|
|
778
|
+
const props = widget?.components[this.mode()]?.properties
|
|
779
|
+
?.filter((c) => c.schema.defaultValue)
|
|
780
|
+
.map((c) => ({ [c.name]: c.schema.defaultValue }))
|
|
781
|
+
.reduce((acc, curr) => {
|
|
782
|
+
return { ...acc, ...curr };
|
|
783
|
+
}, {});
|
|
784
|
+
//
|
|
785
|
+
this.mergedOptions.set(merge(props, this.node().options) || {});
|
|
786
|
+
this.preprocessAndInitialOptions(cloneDeep(this.node().options));
|
|
787
|
+
await this.updateOptionsBasedOnContext();
|
|
788
|
+
//
|
|
789
|
+
const tokenValue = {
|
|
790
|
+
node: this.node(),
|
|
791
|
+
options: this.mergedOptions(),
|
|
792
|
+
config: widget,
|
|
793
|
+
};
|
|
794
|
+
const token = Injector.create({
|
|
795
|
+
parent: this.injector,
|
|
796
|
+
providers: [
|
|
797
|
+
{
|
|
798
|
+
provide: AXP_WIDGET_TOKEN,
|
|
799
|
+
useValue: tokenValue,
|
|
800
|
+
},
|
|
801
|
+
],
|
|
802
|
+
});
|
|
803
|
+
//
|
|
804
|
+
var com = await widget?.components[this.mode()]?.component();
|
|
805
|
+
this.instance = this.viewContainerRef.createComponent(com, { injector: token }).instance;
|
|
806
|
+
this.instance.parent = this.parentNode();
|
|
807
|
+
this.instance.index = this.index();
|
|
808
|
+
this.instance.mode = this.mode();
|
|
809
|
+
await this.updateValueBasedOnFormula();
|
|
810
|
+
await this.assignTriggers();
|
|
811
|
+
//
|
|
812
|
+
this.isLoading.set(false);
|
|
813
|
+
}
|
|
814
|
+
applyOptions() {
|
|
815
|
+
if (!this.instance)
|
|
816
|
+
return;
|
|
817
|
+
this.instance.setOptions(this.mergedOptions());
|
|
818
|
+
}
|
|
819
|
+
checkFormulaForUpdate(formula, path) {
|
|
820
|
+
if (formula) {
|
|
821
|
+
const regex = /context\.eval\('([^']+)'\)/g;
|
|
822
|
+
const matches = formula.match(regex);
|
|
823
|
+
const nodes = matches ? matches.map((match) => match.match(/'([^']+)'/)[1]) : [];
|
|
824
|
+
return nodes.includes(path);
|
|
825
|
+
}
|
|
826
|
+
else
|
|
827
|
+
return false;
|
|
828
|
+
}
|
|
829
|
+
preprocessAndInitialOptions(obj, pathPrefix = '') {
|
|
830
|
+
if (!obj)
|
|
831
|
+
return;
|
|
832
|
+
Object.entries(obj).forEach(([key, value]) => {
|
|
833
|
+
const currentPath = pathPrefix ? `${pathPrefix}.${key}` : key;
|
|
834
|
+
if (typeof value === 'string' && value.includes('{{')) {
|
|
835
|
+
// Cache dynamic expression for later evaluation
|
|
836
|
+
this.expressionEvaluators.set(currentPath, () => this.evaluateExpression(value));
|
|
837
|
+
}
|
|
838
|
+
else if (typeof value === 'object' && value !== null && (value.constructor === Object || Array.isArray(value))) {
|
|
839
|
+
// Recursively handle nested objects
|
|
840
|
+
this.preprocessAndInitialOptions(value, currentPath);
|
|
841
|
+
}
|
|
842
|
+
else {
|
|
843
|
+
// Apply static values directly
|
|
844
|
+
this.mergedOptions.update((currentOptions) => {
|
|
845
|
+
return set(currentOptions, currentPath, value);
|
|
846
|
+
});
|
|
847
|
+
}
|
|
848
|
+
});
|
|
849
|
+
}
|
|
850
|
+
async updateOptionsBasedOnContext() {
|
|
851
|
+
const updates = [];
|
|
852
|
+
for (let [path, evaluator] of this.expressionEvaluators) {
|
|
853
|
+
const newValue = await evaluator();
|
|
854
|
+
updates.push({ path, newValue });
|
|
855
|
+
}
|
|
856
|
+
// Apply updates to mergedOptions
|
|
857
|
+
if (updates.length > 0) {
|
|
858
|
+
this.mergedOptions.update((o) => {
|
|
859
|
+
const updatedOptions = { ...o };
|
|
860
|
+
updates.forEach(({ path, newValue }) => {
|
|
861
|
+
// Set the new value in the updatedOptions object by path
|
|
862
|
+
set(updatedOptions, path, newValue); // Assuming 'set' can handle paths like 'property.subproperty'
|
|
863
|
+
});
|
|
864
|
+
return updatedOptions;
|
|
865
|
+
});
|
|
866
|
+
}
|
|
867
|
+
return updates.length;
|
|
868
|
+
}
|
|
869
|
+
async updateValueBasedOnFormula() {
|
|
870
|
+
if (this.node().formula) {
|
|
871
|
+
const value = await this.evaluateExpression(this.node().formula);
|
|
872
|
+
this.instance.setValue(value);
|
|
873
|
+
}
|
|
874
|
+
}
|
|
875
|
+
async evaluateExpression(templateExpression) {
|
|
876
|
+
try {
|
|
877
|
+
// Check cache first, but cache the function for evaluation, not the evaluated value
|
|
878
|
+
if (!this.expressionCache.has(templateExpression)) {
|
|
879
|
+
const expressionMatch = templateExpression.match(/\{\{\s*(.*?)\s*\}\}/);
|
|
880
|
+
if (!expressionMatch) {
|
|
881
|
+
throw Error(`No valid expression found in "${templateExpression}"`);
|
|
882
|
+
}
|
|
883
|
+
const expression = expressionMatch[1];
|
|
884
|
+
// Cache the evaluation function instead of the result
|
|
885
|
+
const scope = this.getGlobalScope();
|
|
886
|
+
const evaluationFunction = async () => {
|
|
887
|
+
const sandbox = new Function('scope', `with (scope) { return (async function() { return ${expression}; })(); }`);
|
|
888
|
+
return await sandbox(scope);
|
|
889
|
+
};
|
|
890
|
+
this.expressionCache.set(templateExpression, evaluationFunction);
|
|
891
|
+
}
|
|
892
|
+
// Retrieve the function from the cache and call it to evaluate the expression
|
|
893
|
+
const evaluate = this.expressionCache.get(templateExpression);
|
|
894
|
+
if (evaluate) {
|
|
895
|
+
const result = await evaluate();
|
|
896
|
+
return result;
|
|
897
|
+
}
|
|
898
|
+
else {
|
|
899
|
+
throw Error(`Failed to retrieve evaluation function for expression: "${templateExpression}"`);
|
|
900
|
+
}
|
|
901
|
+
}
|
|
902
|
+
catch (error) {
|
|
903
|
+
console.error('Error evaluating expression:', error);
|
|
904
|
+
return false;
|
|
905
|
+
}
|
|
906
|
+
}
|
|
907
|
+
getGlobalScope() {
|
|
908
|
+
if (this.scope)
|
|
909
|
+
return this.scope;
|
|
910
|
+
this.scope = {};
|
|
911
|
+
set(this.scope, 'context', this.getContextScope());
|
|
912
|
+
set(this.scope, 'events', this.getEventScope());
|
|
913
|
+
set(this.scope, 'widget', this.getWidgetScope());
|
|
914
|
+
set(this.scope, 'methods', this.getFunctionScope());
|
|
915
|
+
set(this.scope, 'vars', this.getVariablesScope());
|
|
916
|
+
return this.scope;
|
|
917
|
+
}
|
|
918
|
+
getContextScope() {
|
|
919
|
+
const scope = {};
|
|
920
|
+
set(scope, 'eval', (path) => this.builderService.getValue(path));
|
|
921
|
+
return scope;
|
|
922
|
+
}
|
|
923
|
+
getEventScope() {
|
|
924
|
+
const scope = {};
|
|
925
|
+
set(scope, 'context', (path) => this.builderService.onChanged.pipe(filter((c) => c.path == path)));
|
|
926
|
+
set(scope, 'from', (event) => get(this.instance.api(), event));
|
|
927
|
+
return scope;
|
|
928
|
+
}
|
|
929
|
+
getWidgetScope() {
|
|
930
|
+
const scope = {};
|
|
931
|
+
set(scope, 'call', (name, ...args) => {
|
|
932
|
+
this.instance.call(name, ...args);
|
|
933
|
+
});
|
|
934
|
+
set(scope, 'find', (id) => {
|
|
935
|
+
return this.builderService.getWidget(id)?.api();
|
|
936
|
+
});
|
|
937
|
+
return scope;
|
|
938
|
+
}
|
|
939
|
+
getFunctionScope() {
|
|
940
|
+
const scope = {};
|
|
941
|
+
set(scope, 'sum', (values) => {
|
|
942
|
+
return sum(values);
|
|
943
|
+
});
|
|
944
|
+
Object.entries(this.builderService.functions).forEach((i) => {
|
|
945
|
+
set(scope, i[0], (...args) => {
|
|
946
|
+
return i[1](...args);
|
|
947
|
+
});
|
|
948
|
+
});
|
|
949
|
+
return scope;
|
|
950
|
+
}
|
|
951
|
+
getVariablesScope() {
|
|
952
|
+
const scope = {};
|
|
953
|
+
set(scope, 'eval', (path) => get(this.builderService.variables, path));
|
|
954
|
+
return scope;
|
|
955
|
+
}
|
|
956
|
+
async assignTriggers() {
|
|
957
|
+
this.node().triggers?.forEach((t) => {
|
|
958
|
+
const event = this.evaluateTrigger(t.event);
|
|
959
|
+
event?.pipe(this.unsubscriber.takeUntilDestroy).subscribe((c) => {
|
|
960
|
+
this.evaluateAction(t.action);
|
|
961
|
+
});
|
|
962
|
+
});
|
|
963
|
+
}
|
|
964
|
+
evaluateTrigger(templateExpression) {
|
|
965
|
+
try {
|
|
966
|
+
const expressionMatch = templateExpression.match(/\{\{\s*(.*?)\s*\}\}/);
|
|
967
|
+
if (!expressionMatch) {
|
|
968
|
+
throw Error(`No valid expression found in "${templateExpression}"`);
|
|
969
|
+
}
|
|
970
|
+
const expression = expressionMatch[1];
|
|
971
|
+
// Cache the evaluation function instead of the result
|
|
972
|
+
const scope = this.getGlobalScope();
|
|
973
|
+
const sandbox = new Function('scope', `with (scope) { return ( function() { return ${expression}; })(); }`);
|
|
974
|
+
return sandbox(scope);
|
|
975
|
+
}
|
|
976
|
+
catch (error) {
|
|
977
|
+
console.error('Error evaluating expression:', error);
|
|
978
|
+
return null;
|
|
979
|
+
}
|
|
980
|
+
}
|
|
981
|
+
evaluateAction(templateExpression) {
|
|
982
|
+
try {
|
|
983
|
+
const expressionMatch = templateExpression.match(/\{\{\s*(.*?)\s*\}\}/);
|
|
984
|
+
if (!expressionMatch) {
|
|
985
|
+
throw Error(`No valid expression found in "${templateExpression}"`);
|
|
986
|
+
}
|
|
987
|
+
const expression = expressionMatch[1];
|
|
988
|
+
// Cache the evaluation function instead of the result
|
|
989
|
+
const scope = this.getGlobalScope();
|
|
990
|
+
const sandbox = new Function('scope', `with (scope) { ${expression} }`);
|
|
991
|
+
sandbox(scope);
|
|
992
|
+
}
|
|
993
|
+
catch (error) {
|
|
994
|
+
console.error('Error evaluating expression:', error);
|
|
995
|
+
}
|
|
996
|
+
}
|
|
997
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPWidgetRendererDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
998
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.0", type: AXPWidgetRendererDirective, selector: "[axp-widget-renderer]", inputs: { parentNode: { classPropertyName: "parentNode", publicName: "parentNode", isSignal: true, isRequired: false, transformFunction: null }, index: { classPropertyName: "index", publicName: "index", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: true, transformFunction: null }, node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null } }, providers: [
|
|
999
|
+
{
|
|
1000
|
+
provide: AXUnsubscriber,
|
|
1001
|
+
},
|
|
1002
|
+
], ngImport: i0 }); }
|
|
1003
|
+
}
|
|
1004
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPWidgetRendererDirective, decorators: [{
|
|
1005
|
+
type: Directive,
|
|
1006
|
+
args: [{
|
|
1007
|
+
selector: '[axp-widget-renderer]',
|
|
1008
|
+
providers: [
|
|
1009
|
+
{
|
|
1010
|
+
provide: AXUnsubscriber,
|
|
1011
|
+
},
|
|
1012
|
+
],
|
|
1013
|
+
}]
|
|
1014
|
+
}], ctorParameters: () => [] });
|
|
1015
|
+
|
|
1016
|
+
const COMPONENTS = [AXPWidgetContainerComponent, AXPWidgetRendererComponent, AXPWidgetColumnRendererComponent, AXPWidgetRendererDirective];
|
|
745
1017
|
class AXPLayoutBuilderModule {
|
|
746
1018
|
static forRoot(config) {
|
|
747
1019
|
return {
|
|
@@ -782,7 +1054,7 @@ class AXPLayoutBuilderModule {
|
|
|
782
1054
|
});
|
|
783
1055
|
}
|
|
784
1056
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPLayoutBuilderModule, deps: [{ token: 'AXPLayoutBuilderModuleFactory', optional: true }], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
785
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.0", ngImport: i0, type: AXPLayoutBuilderModule, declarations: [AXPWidgetContainerComponent, AXPWidgetRendererComponent, AXPWidgetColumnRendererComponent], imports: [CommonModule, PortalModule, AXSkeletonModule, CommonModule], exports: [AXPWidgetContainerComponent, AXPWidgetRendererComponent, AXPWidgetColumnRendererComponent] }); }
|
|
1057
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.0", ngImport: i0, type: AXPLayoutBuilderModule, declarations: [AXPWidgetContainerComponent, AXPWidgetRendererComponent, AXPWidgetColumnRendererComponent, AXPWidgetRendererDirective], imports: [CommonModule, PortalModule, AXSkeletonModule, CommonModule], exports: [AXPWidgetContainerComponent, AXPWidgetRendererComponent, AXPWidgetColumnRendererComponent, AXPWidgetRendererDirective] }); }
|
|
786
1058
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPLayoutBuilderModule, imports: [CommonModule, PortalModule, AXSkeletonModule, CommonModule] }); }
|
|
787
1059
|
}
|
|
788
1060
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPLayoutBuilderModule, decorators: [{
|
|
@@ -864,5 +1136,5 @@ const AXP_WIDGETS_GROUPS = [
|
|
|
864
1136
|
* Generated bundle index. Do not edit.
|
|
865
1137
|
*/
|
|
866
1138
|
|
|
867
|
-
export { AXPColumnWidgetComponent, AXPContainerWidgetComponent, AXPLayoutBuilderModule, AXPLayoutBuilderService, AXPLayoutElement, AXPWidgetColumnRendererComponent, AXPWidgetComponent, AXPWidgetContainerComponent, AXPWidgetRegistryService, AXPWidgetRendererComponent, AXPWidgetsCatalog, AXP_WIDGETS_ACTION_GROUP, AXP_WIDGETS_ADVANCE_GROUP, AXP_WIDGETS_EDITOR_GROUP, AXP_WIDGETS_GROUPS, AXP_WIDGETS_LAYOUT_GROUP, AXP_WIDGET_COLUMN_TOKEN, AXP_WIDGET_TOKEN, cloneProperty };
|
|
1139
|
+
export { AXPColumnWidgetComponent, AXPContainerWidgetComponent, AXPLayoutBuilderModule, AXPLayoutBuilderService, AXPLayoutElement, AXPWidgetColumnRendererComponent, AXPWidgetComponent, AXPWidgetContainerComponent, AXPWidgetRegistryService, AXPWidgetRendererComponent, AXPWidgetRendererDirective, AXPWidgetsCatalog, AXP_WIDGETS_ACTION_GROUP, AXP_WIDGETS_ADVANCE_GROUP, AXP_WIDGETS_EDITOR_GROUP, AXP_WIDGETS_GROUPS, AXP_WIDGETS_LAYOUT_GROUP, AXP_WIDGET_COLUMN_TOKEN, AXP_WIDGET_TOKEN, cloneProperty };
|
|
868
1140
|
//# sourceMappingURL=acorex-platform-layout-builder.mjs.map
|