@acorex/platform 20.3.0-next.4 → 20.3.0-next.6
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/index.d.ts +6 -6
- package/core/index.d.ts +187 -11
- package/fesm2022/acorex-platform-common.mjs +4 -52
- package/fesm2022/acorex-platform-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-core.mjs +243 -10
- package/fesm2022/acorex-platform-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity.mjs +344 -212
- package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-views.mjs +3 -3
- package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
- package/fesm2022/{acorex-platform-themes-default-entity-master-list-view.component-X0hLRZhX.mjs → acorex-platform-themes-default-entity-master-list-view.component-gQIK6PIx.mjs} +13 -15
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-gQIK6PIx.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default.mjs +2 -2
- package/fesm2022/{acorex-platform-widgets-checkbox-widget-designer.component-JC_nYunG.mjs → acorex-platform-widgets-checkbox-widget-designer.component-BXPrXy-h.mjs} +4 -4
- package/fesm2022/{acorex-platform-widgets-checkbox-widget-designer.component-JC_nYunG.mjs.map → acorex-platform-widgets-checkbox-widget-designer.component-BXPrXy-h.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-widgets-color-box-widget-designer.component-CxgKO2VI.mjs → acorex-platform-widgets-color-box-widget-designer.component-BVZ7lWm9.mjs} +5 -5
- package/fesm2022/{acorex-platform-widgets-color-box-widget-designer.component-CxgKO2VI.mjs.map → acorex-platform-widgets-color-box-widget-designer.component-BVZ7lWm9.mjs.map} +1 -1
- package/fesm2022/acorex-platform-widgets.mjs +282 -210
- package/fesm2022/acorex-platform-widgets.mjs.map +1 -1
- package/layout/entity/index.d.ts +80 -3
- package/package.json +1 -1
- package/widgets/index.d.ts +9 -5
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-X0hLRZhX.mjs.map +0 -1
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, inject, Injectable, computed, signal, Injector, runInInjectionContext, EnvironmentInjector, viewChild, viewChildren, linkedSignal, effect, untracked, ChangeDetectionStrategy, Component, HostBinding, ElementRef, ViewChild, NgModule } from '@angular/core';
|
|
2
|
+
import { InjectionToken, inject, Injectable, computed, signal, Injector, runInInjectionContext, EnvironmentInjector, viewChild, viewChildren, linkedSignal, effect, untracked, ChangeDetectionStrategy, Component, HostBinding, input, ElementRef, ApplicationRef, createComponent, ViewChild, NgModule } from '@angular/core';
|
|
3
3
|
import { castArray, get, cloneDeep, set, merge, isNil, isEmpty, sortBy } from 'lodash-es';
|
|
4
|
-
import * as i1$
|
|
4
|
+
import * as i1$1 from '@acorex/cdk/common';
|
|
5
5
|
import { AXDataSource, AXCommonModule } from '@acorex/cdk/common';
|
|
6
6
|
import { AXFormatService } from '@acorex/core/format';
|
|
7
|
-
import {
|
|
8
|
-
import * as i1$
|
|
9
|
-
import { AXPExpressionEvaluatorService, AXPPlatformScope, AXPDistributedEventListenerService, getChangedPaths, extractValue, setSmart } from '@acorex/platform/core';
|
|
7
|
+
import { AXPFilterOperatorMiddlewareService, AXPEntityCommandScope, getEntityInfo, AXPSettingService, AXPRefreshEvent, AXPReloadEvent, AXPCleanNestedFilters, AXPWorkflowNavigateAction, AXPToastAction, AXP_SEARCH_DEFINITION_PROVIDER } from '@acorex/platform/common';
|
|
8
|
+
import * as i1$3 from '@acorex/platform/core';
|
|
9
|
+
import { resolveActionLook, AXPExpressionEvaluatorService, AXPPlatformScope, AXPDistributedEventListenerService, getChangedPaths, extractValue, setSmart, AXPSystemActionType } from '@acorex/platform/core';
|
|
10
10
|
import * as i2$2 from '@acorex/platform/workflow';
|
|
11
11
|
import { AXPWorkflowService, ofType, createWorkFlowEvent, AXPWorkflowAction, AXPWorkflowModule } from '@acorex/platform/workflow';
|
|
12
12
|
import * as i3$1 from '@acorex/platform/layout/builder';
|
|
@@ -15,6 +15,7 @@ import { AXPLayoutThemeService } from '@acorex/platform/themes/shared';
|
|
|
15
15
|
import { Subject, takeUntil } from 'rxjs';
|
|
16
16
|
import { AXPSessionService, AXPAuthGuard } from '@acorex/platform/auth';
|
|
17
17
|
import { AXPCommandService, AXPQueryService, provideCommandSetups, provideQuerySetups } from '@acorex/platform/runtime';
|
|
18
|
+
import { moveItemInArray } from '@angular/cdk/drag-drop';
|
|
18
19
|
import * as i8 from '@acorex/core/translation';
|
|
19
20
|
import { AXTranslationService, AXTranslationModule } from '@acorex/core/translation';
|
|
20
21
|
import { AXDialogService } from '@acorex/components/dialog';
|
|
@@ -31,11 +32,11 @@ import { AXDropdownModule } from '@acorex/components/dropdown';
|
|
|
31
32
|
import * as i7 from '@angular/common';
|
|
32
33
|
import { CommonModule } from '@angular/common';
|
|
33
34
|
import { AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DISABLED_PROPERTY, AXP_ALLOW_CLEAR_PROPERTY, AXP_DATA_PROPERTY_GROUP, AXP_ALLOW_MULTIPLE_PROPERTY, AXPFileUploaderWidgetService } from '@acorex/platform/widgets';
|
|
34
|
-
import * as i1$
|
|
35
|
+
import * as i1$2 from '@angular/forms';
|
|
35
36
|
import { FormsModule } from '@angular/forms';
|
|
36
|
-
import * as
|
|
37
|
+
import * as i4$1 from '@acorex/components/loading';
|
|
37
38
|
import { AXLoadingModule } from '@acorex/components/loading';
|
|
38
|
-
import * as i1
|
|
39
|
+
import * as i1 from '@acorex/components/badge';
|
|
39
40
|
import { AXBadgeModule } from '@acorex/components/badge';
|
|
40
41
|
import * as i5$1 from '@acorex/components/form';
|
|
41
42
|
import { AXFormModule } from '@acorex/components/form';
|
|
@@ -46,7 +47,7 @@ import { AXSelectBoxModule } from '@acorex/components/select-box';
|
|
|
46
47
|
import * as i6 from '@acorex/components/tag-box';
|
|
47
48
|
import { AXTagBoxComponent, AXTagBoxModule } from '@acorex/components/tag-box';
|
|
48
49
|
import { AXValidationModule } from '@acorex/core/validation';
|
|
49
|
-
import * as i4$
|
|
50
|
+
import * as i4$2 from '@acorex/components/data-table';
|
|
50
51
|
import { AXDataTableModule } from '@acorex/components/data-table';
|
|
51
52
|
import { AXDropdownButtonModule } from '@acorex/components/dropdown-button';
|
|
52
53
|
import { AXBasePageComponent } from '@acorex/components/page';
|
|
@@ -108,7 +109,7 @@ class AXPEntityCommandTriggerViewModel {
|
|
|
108
109
|
this.name = `${typeof action.command === 'string' ? action.command : action.command.name}&${action.name}`;
|
|
109
110
|
this.options = typeof action.command === 'object' ? action.command.options : undefined;
|
|
110
111
|
this.metadata = typeof action.command === 'object' ? action.command.metadata : undefined;
|
|
111
|
-
const resolvedLook = resolveActionLook(action);
|
|
112
|
+
const resolvedLook = resolveActionLook(action.type);
|
|
112
113
|
this.priority = action.priority;
|
|
113
114
|
this.title = action.title;
|
|
114
115
|
this.separated = action.separated ?? false;
|
|
@@ -1252,12 +1253,12 @@ class AXPEntityMasterListViewModel {
|
|
|
1252
1253
|
.map((c) => {
|
|
1253
1254
|
return {
|
|
1254
1255
|
...c,
|
|
1255
|
-
width: columnWidthsMap.get(c.name),
|
|
1256
|
-
visible: columnVisibilityMap.get(c.name) ?? c.visible,
|
|
1256
|
+
width: columnWidthsMap.get(c.column?.options?.dataPath ?? c.name),
|
|
1257
|
+
visible: columnVisibilityMap.get(c.column?.options?.dataPath ?? c.name) ?? c.visible,
|
|
1257
1258
|
};
|
|
1258
1259
|
}) // Update visibility
|
|
1259
|
-
.sort((a, b) => columns.findIndex((col) => col.name === a.name) -
|
|
1260
|
-
columns.findIndex((col) => col.name === b.name)));
|
|
1260
|
+
.sort((a, b) => columns.findIndex((col) => col.name === (a.column?.options?.dataPath ?? a.name)) -
|
|
1261
|
+
columns.findIndex((col) => col.name === (b.column?.options?.dataPath ?? b.name))));
|
|
1261
1262
|
}
|
|
1262
1263
|
if (Array.isArray(sorts)) {
|
|
1263
1264
|
// sorts are AXPSortQuery[]; ensure we map by name
|
|
@@ -1278,10 +1279,25 @@ class AXPEntityMasterListViewModel {
|
|
|
1278
1279
|
updateSettings((prev) => {
|
|
1279
1280
|
const field = data.dataField.split('-')[1];
|
|
1280
1281
|
const newSettings = { ...prev };
|
|
1281
|
-
|
|
1282
|
+
const existingColumns = prev?.list?.views?.[this.view().name]?.columns;
|
|
1283
|
+
const baseColumns = Array.isArray(existingColumns) && existingColumns.length
|
|
1284
|
+
? existingColumns
|
|
1285
|
+
: this.allAvailableColumns().map((c) => ({
|
|
1286
|
+
name: c.column?.options?.dataPath ?? c.name,
|
|
1287
|
+
visible: c.visible,
|
|
1288
|
+
width: c.width,
|
|
1289
|
+
}));
|
|
1290
|
+
const updatedColumns = baseColumns.map((c) => ({
|
|
1282
1291
|
...c,
|
|
1283
1292
|
width: c.name === field ? data.width : c.width,
|
|
1284
|
-
}))
|
|
1293
|
+
}));
|
|
1294
|
+
const x = this.allAvailableColumns().map((c) => ({
|
|
1295
|
+
name: c.column?.options?.dataPath ?? c.name,
|
|
1296
|
+
visible: c.visible,
|
|
1297
|
+
width: c.width,
|
|
1298
|
+
}));
|
|
1299
|
+
set(newSettings, `list.views.${this.view().name}.columns`, updatedColumns);
|
|
1300
|
+
console.log(newSettings, `list.views.${this.view().name}.columns`);
|
|
1285
1301
|
return newSettings;
|
|
1286
1302
|
});
|
|
1287
1303
|
break;
|
|
@@ -1289,7 +1305,7 @@ class AXPEntityMasterListViewModel {
|
|
|
1289
1305
|
updateSettings((prev) => {
|
|
1290
1306
|
const newSettings = { ...prev };
|
|
1291
1307
|
set(newSettings, `list.views.${this.view().name}.columns`, data.map((c) => ({
|
|
1292
|
-
name: c.name,
|
|
1308
|
+
name: c.column?.options?.dataPath ?? c.name,
|
|
1293
1309
|
visible: c.visible,
|
|
1294
1310
|
width: c.width,
|
|
1295
1311
|
})));
|
|
@@ -1485,6 +1501,12 @@ class AXPEntityMasterListViewModel {
|
|
|
1485
1501
|
});
|
|
1486
1502
|
this.columns.set(cloned);
|
|
1487
1503
|
}
|
|
1504
|
+
onColumnsOrderChanged(event) {
|
|
1505
|
+
const columns = [...this.columns()];
|
|
1506
|
+
moveItemInArray(columns, event.previousIndex - 1, event.currentIndex - 1);
|
|
1507
|
+
this.columns.set(columns);
|
|
1508
|
+
this.saveSettings('columnOrders', columns);
|
|
1509
|
+
}
|
|
1488
1510
|
resetSorts() {
|
|
1489
1511
|
this.applyViewSorts();
|
|
1490
1512
|
}
|
|
@@ -5114,7 +5136,7 @@ class AXPLookupWidgetViewComponent extends AXPValueWidgetComponent {
|
|
|
5114
5136
|
<span class="ax-text-muted">---</span>
|
|
5115
5137
|
}
|
|
5116
5138
|
}
|
|
5117
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type:
|
|
5139
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i4$1.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i1.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
5118
5140
|
}
|
|
5119
5141
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPLookupWidgetViewComponent, decorators: [{
|
|
5120
5142
|
type: Component,
|
|
@@ -5278,7 +5300,7 @@ class AXPLookupWidgetSelectorComponent extends AXBasePageComponent {
|
|
|
5278
5300
|
}
|
|
5279
5301
|
</ax-suffix>
|
|
5280
5302
|
</ax-footer>
|
|
5281
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXCommonModule }, { kind: "directive", type: i1$
|
|
5303
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXCommonModule }, { kind: "directive", type: i1$1.AXAutoFocusDirective, selector: "[axAutoFocus]", inputs: ["axAutoFocus", "axAutoFocusTime"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3$2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXFormModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "ngmodule", type: AXDataTableModule }, { kind: "component", type: i4$2.AXDataTableComponent, selector: "ax-data-table", inputs: ["dataSource", "selectedRows", "parentField", "rowTemplate", "emptyTemplate", "noDataTemplate", "alternative", "showHeader", "fixedHeader", "showFooter", "fixedFooter", "itemHeight", "allowReordering", "paging", "fetchDataMode", "loading", "focusedRow"], outputs: ["selectedRowsChange", "focusedRowChange", "onRowClick", "onRowDbClick", "onColumnsOrderChanged", "onColumnSizeChanged", "onPageChanged"] }, { kind: "component", type: i4$2.AXRowSelectColumnComponent, selector: "ax-select-column", inputs: ["width", "caption", "fixed"] }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i5.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "component", type: i3$1.AXPWidgetColumnRendererComponent, selector: "axp-widget-column-renderer", inputs: ["caption", "customExpandIcon", "customCollapseIcon", "customWidth", "node", "footerTemplate", "expandHandler", "cellTemplate", "headerTemplate"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
5282
5304
|
}
|
|
5283
5305
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPLookupWidgetSelectorComponent, decorators: [{
|
|
5284
5306
|
type: Component,
|
|
@@ -5817,9 +5839,9 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
5817
5839
|
</ax-tag-box>
|
|
5818
5840
|
}
|
|
5819
5841
|
}
|
|
5820
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$
|
|
5842
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type:
|
|
5821
5843
|
//
|
|
5822
|
-
AXButtonModule }, { kind: "component", type: i3$2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type:
|
|
5844
|
+
AXButtonModule }, { kind: "component", type: i3$2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i4$1.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXValidationModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "directive", type: i5$1.AXValidationRuleDirective, selector: "ax-validation-rule", inputs: ["rule", "options", "message", "disabled"] }, { kind: "ngmodule", type: AXTagBoxModule }, { kind: "component", type: i6.AXTagBoxComponent, selector: "ax-tag-box", inputs: ["disabled", "tabIndex", "readonly", "value", "state", "name", "id", "placeholder", "allowNull", "type", "look", "addOnComma", "addOnEnter", "valueField", "textField", "readonlyField", "allowDuplicateValues"], outputs: ["onBlur", "onFocus", "valueChange", "stateChange", "onValueChanged", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXSelectBoxModule }, { kind: "component", type: i7$1.AXSelectBoxComponent, selector: "ax-select-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "minValue", "maxValue", "value", "state", "name", "id", "type", "look", "multiple", "valueField", "textField", "disabledField", "textTemplate", "selectedItems", "isItemTruncated", "showItemTooltip", "dataSource", "minRecordsForSearch", "caption", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "dropdownWidth", "searchBoxAutoFocus"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onOpened", "onClosed", "onItemSelected", "onItemClick"] }, { kind: "component", type: AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
5823
5845
|
}
|
|
5824
5846
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPLookupWidgetEditComponent, decorators: [{
|
|
5825
5847
|
type: Component,
|
|
@@ -5916,89 +5938,57 @@ var lookupWidgetEdit_component = /*#__PURE__*/Object.freeze({
|
|
|
5916
5938
|
AXPLookupWidgetEditComponent: AXPLookupWidgetEditComponent
|
|
5917
5939
|
});
|
|
5918
5940
|
|
|
5919
|
-
class
|
|
5941
|
+
class AXPEntityDetailPopoverComponent {
|
|
5920
5942
|
constructor() {
|
|
5921
|
-
super(...arguments);
|
|
5922
5943
|
//#region ---- Dependencies ----
|
|
5923
5944
|
this.commandService = inject(AXPCommandService);
|
|
5924
5945
|
this.queryService = inject(AXPQueryService);
|
|
5925
5946
|
//#endregion
|
|
5947
|
+
//#region ---- Inputs ----
|
|
5948
|
+
this.entity = input.required(...(ngDevMode ? [{ debugName: "entity" }] : []));
|
|
5949
|
+
this.entityId = input.required(...(ngDevMode ? [{ debugName: "entityId" }] : []));
|
|
5950
|
+
this.textField = input('title', ...(ngDevMode ? [{ debugName: "textField" }] : []));
|
|
5951
|
+
this.valueField = input('id', ...(ngDevMode ? [{ debugName: "valueField" }] : []));
|
|
5952
|
+
this.item = input(...(ngDevMode ? [undefined, { debugName: "item" }] : []));
|
|
5953
|
+
//#endregion
|
|
5926
5954
|
//#region ---- View Children ----
|
|
5927
|
-
this.moreButton = viewChild('moreButton', ...(ngDevMode ? [{ debugName: "moreButton" }] : []));
|
|
5928
|
-
this.morePopover = viewChild('morePopover', ...(ngDevMode ? [{ debugName: "morePopover" }] : []));
|
|
5929
5955
|
this.detailPopover = viewChild('detailPopover', ...(ngDevMode ? [{ debugName: "detailPopover" }] : []));
|
|
5930
5956
|
//#endregion
|
|
5931
|
-
//#region ---- Properties ----
|
|
5932
|
-
this.host = inject(ElementRef);
|
|
5933
|
-
this.valueField = this.options['valueField'] ?? 'id';
|
|
5934
|
-
this.textField = this.options['textField'] ?? 'title';
|
|
5935
|
-
this.entity = this.options['entity'] ?? 'title';
|
|
5936
|
-
this.columnName = this.options['columnName'] ?? 'title';
|
|
5937
|
-
this.maxVisible = this.options['maxVisible'] ?? 2;
|
|
5938
|
-
//#endregion
|
|
5939
5957
|
//#region ---- Signals ----
|
|
5940
|
-
this.isMorePopoverOpen = signal(false, ...(ngDevMode ? [{ debugName: "isMorePopoverOpen" }] : []));
|
|
5941
|
-
this.isDetailPopoverOpen = signal(false, ...(ngDevMode ? [{ debugName: "isDetailPopoverOpen" }] : []));
|
|
5942
|
-
this.selectedItem = signal(null, ...(ngDevMode ? [{ debugName: "selectedItem" }] : []));
|
|
5943
|
-
this.selectedItemIndex = signal(-1, ...(ngDevMode ? [{ debugName: "selectedItemIndex" }] : []));
|
|
5944
5958
|
this.entityDetails = signal(null, ...(ngDevMode ? [{ debugName: "entityDetails" }] : []));
|
|
5945
5959
|
this.isLoadingDetails = signal(false, ...(ngDevMode ? [{ debugName: "isLoadingDetails" }] : []));
|
|
5946
|
-
|
|
5947
|
-
//#region ---- Computed Properties ----
|
|
5948
|
-
this.displayItems = computed(() => isNil(this.rawValue)
|
|
5949
|
-
? []
|
|
5950
|
-
: castArray(this.rawValue).map((item) => this.extractItem(item)).filter((c) => c != null), ...(ngDevMode ? [{ debugName: "displayItems" }] : []));
|
|
5951
|
-
this.allItems = computed(() => this.displayItems(), ...(ngDevMode ? [{ debugName: "allItems" }] : []));
|
|
5952
|
-
this.visibleItems = computed(() => {
|
|
5953
|
-
const items = this.allItems();
|
|
5954
|
-
return items.slice(0, this.maxVisible);
|
|
5955
|
-
}, ...(ngDevMode ? [{ debugName: "visibleItems" }] : []));
|
|
5956
|
-
this.hasMoreItems = computed(() => {
|
|
5957
|
-
return this.allItems().length > this.maxVisible;
|
|
5958
|
-
}, ...(ngDevMode ? [{ debugName: "hasMoreItems" }] : []));
|
|
5959
|
-
this.remainingItemsCount = computed(() => {
|
|
5960
|
-
return this.allItems().length - this.maxVisible;
|
|
5961
|
-
}, ...(ngDevMode ? [{ debugName: "remainingItemsCount" }] : []));
|
|
5962
|
-
this.HOVER_DELAY = 3000; // 3 seconds
|
|
5963
|
-
}
|
|
5964
|
-
//#endregion
|
|
5965
|
-
//#region ---- Lifecycle Methods ----
|
|
5966
|
-
ngOnDestroy() {
|
|
5967
|
-
this.clearHoverTimeout();
|
|
5968
|
-
this.clearViewDetailsHoverTimeout();
|
|
5969
|
-
this.clearVisibleItemHoverTimeout();
|
|
5960
|
+
this.isDetailPopoverOpen = signal(false, ...(ngDevMode ? [{ debugName: "isDetailPopoverOpen" }] : []));
|
|
5970
5961
|
}
|
|
5971
5962
|
//#endregion
|
|
5972
5963
|
//#region ---- Public Methods ----
|
|
5973
|
-
|
|
5974
|
-
|
|
5975
|
-
|
|
5976
|
-
|
|
5977
|
-
}
|
|
5978
|
-
onMorePopoverOpenChange(event) {
|
|
5979
|
-
this.isMorePopoverOpen.set(event);
|
|
5980
|
-
// Clear all hover timeouts when popover closes
|
|
5981
|
-
if (!event) {
|
|
5982
|
-
this.clearAllHoverTimeouts();
|
|
5983
|
-
}
|
|
5984
|
-
}
|
|
5985
|
-
async showItemDetail(item, index) {
|
|
5986
|
-
const columnData = this.rowData[this.columnName];
|
|
5987
|
-
const id = Array.isArray(columnData) ? columnData[index] : columnData;
|
|
5988
|
-
//
|
|
5989
|
-
this.selectedItem.set(item);
|
|
5990
|
-
this.selectedItemIndex.set(index);
|
|
5964
|
+
/**
|
|
5965
|
+
* Show the entity detail popover
|
|
5966
|
+
*/
|
|
5967
|
+
async show(target) {
|
|
5991
5968
|
this.isDetailPopoverOpen.set(true);
|
|
5992
5969
|
this.isLoadingDetails.set(true);
|
|
5993
5970
|
this.entityDetails.set(null);
|
|
5994
|
-
|
|
5995
|
-
this.
|
|
5971
|
+
// Open the popover immediately to display loading state
|
|
5972
|
+
if (this.detailPopover()) {
|
|
5973
|
+
const targetElement = target instanceof ElementRef ? target.nativeElement : target;
|
|
5974
|
+
this.detailPopover().target = targetElement;
|
|
5975
|
+
this.detailPopover().open();
|
|
5976
|
+
}
|
|
5977
|
+
else {
|
|
5978
|
+
// In case the view child is not ready yet, schedule an immediate open
|
|
5979
|
+
setTimeout(() => {
|
|
5980
|
+
if (this.detailPopover()) {
|
|
5981
|
+
const targetElement = target instanceof ElementRef ? target.nativeElement : target;
|
|
5982
|
+
this.detailPopover().target = targetElement;
|
|
5983
|
+
this.detailPopover().open();
|
|
5984
|
+
}
|
|
5985
|
+
}, 0);
|
|
5986
|
+
}
|
|
5996
5987
|
// Fetch entity details using the query
|
|
5997
5988
|
try {
|
|
5998
|
-
this.detailPopover;
|
|
5999
5989
|
const result = await this.queryService.fetch('Entity:GetDetails', {
|
|
6000
|
-
entity: this.entity,
|
|
6001
|
-
id:
|
|
5990
|
+
entity: this.entity(),
|
|
5991
|
+
id: this.entityId()
|
|
6002
5992
|
});
|
|
6003
5993
|
if (result?.success) {
|
|
6004
5994
|
this.entityDetails.set(result);
|
|
@@ -6010,21 +6000,11 @@ class AXPLookupWidgetColumnComponent extends AXPColumnWidgetComponent {
|
|
|
6010
6000
|
finally {
|
|
6011
6001
|
this.isLoadingDetails.set(false);
|
|
6012
6002
|
}
|
|
6013
|
-
setTimeout(() => {
|
|
6014
|
-
if (this.detailPopover()) {
|
|
6015
|
-
this.detailPopover().target = this.host.nativeElement;
|
|
6016
|
-
this.detailPopover().open();
|
|
6017
|
-
}
|
|
6018
|
-
}, 100);
|
|
6019
6003
|
}
|
|
6020
|
-
|
|
6021
|
-
|
|
6022
|
-
|
|
6023
|
-
|
|
6024
|
-
this.clearAllHoverTimeouts();
|
|
6025
|
-
}
|
|
6026
|
-
}
|
|
6027
|
-
closeDetailPopover() {
|
|
6004
|
+
/**
|
|
6005
|
+
* Hide the entity detail popover
|
|
6006
|
+
*/
|
|
6007
|
+
hide() {
|
|
6028
6008
|
this.isDetailPopoverOpen.set(false);
|
|
6029
6009
|
this.entityDetails.set(null);
|
|
6030
6010
|
this.isLoadingDetails.set(false);
|
|
@@ -6032,27 +6012,108 @@ class AXPLookupWidgetColumnComponent extends AXPColumnWidgetComponent {
|
|
|
6032
6012
|
this.detailPopover().close();
|
|
6033
6013
|
}
|
|
6034
6014
|
}
|
|
6015
|
+
onDetailPopoverOpenChange(event) {
|
|
6016
|
+
this.isDetailPopoverOpen.set(event);
|
|
6017
|
+
if (!event) {
|
|
6018
|
+
this.entityDetails.set(null);
|
|
6019
|
+
this.isLoadingDetails.set(false);
|
|
6020
|
+
}
|
|
6021
|
+
}
|
|
6035
6022
|
async navigateToDetails() {
|
|
6036
|
-
|
|
6037
|
-
const columnData = this.rowData[this.columnName];
|
|
6038
|
-
const id = Array.isArray(columnData) ? columnData[index] : columnData;
|
|
6039
|
-
if (id) {
|
|
6023
|
+
if (this.entityId()) {
|
|
6040
6024
|
await this.commandService.execute("Entity:OpenDetails", {
|
|
6041
|
-
entity: this.entity,
|
|
6042
|
-
data: { id },
|
|
6025
|
+
entity: this.entity(),
|
|
6026
|
+
data: { id: this.entityId() },
|
|
6043
6027
|
});
|
|
6044
|
-
this.
|
|
6045
|
-
}
|
|
6046
|
-
}
|
|
6047
|
-
handleItemClick(index) {
|
|
6048
|
-
const items = this.allItems();
|
|
6049
|
-
if (index < items.length) {
|
|
6050
|
-
const item = items[index];
|
|
6051
|
-
this.showItemDetail(item, index);
|
|
6028
|
+
this.hide();
|
|
6052
6029
|
}
|
|
6053
6030
|
}
|
|
6054
6031
|
//#endregion
|
|
6055
6032
|
//#region ---- Helper Methods ----
|
|
6033
|
+
/**
|
|
6034
|
+
* Returns true if a value is meaningful for display (non-empty/non-null).
|
|
6035
|
+
*/
|
|
6036
|
+
hasMeaningfulValue(value) {
|
|
6037
|
+
if (value === null || value === undefined)
|
|
6038
|
+
return false;
|
|
6039
|
+
if (typeof value === 'string')
|
|
6040
|
+
return value.trim().length > 0;
|
|
6041
|
+
if (Array.isArray(value))
|
|
6042
|
+
return value.length > 0;
|
|
6043
|
+
if (typeof value === 'object')
|
|
6044
|
+
return Object.keys(value).length > 0;
|
|
6045
|
+
return true;
|
|
6046
|
+
}
|
|
6047
|
+
/**
|
|
6048
|
+
* Calculates an importance score for a property based on its widget type,
|
|
6049
|
+
* whether it currently has a meaningful value, and metadata like title.
|
|
6050
|
+
*/
|
|
6051
|
+
getPropertyImportanceScore(prop, data) {
|
|
6052
|
+
const schema = prop.showAs?.type ?? prop.schema;
|
|
6053
|
+
const importanceMap = {
|
|
6054
|
+
[AXPWidgetsCatalog.text]: 100,
|
|
6055
|
+
[AXPWidgetsCatalog.select]: 95,
|
|
6056
|
+
[AXPWidgetsCatalog.number]: 90,
|
|
6057
|
+
[AXPWidgetsCatalog.email]: 88,
|
|
6058
|
+
[AXPWidgetsCatalog.phone]: 87,
|
|
6059
|
+
[AXPWidgetsCatalog.link]: 86,
|
|
6060
|
+
[AXPWidgetsCatalog.dateTime]: 85,
|
|
6061
|
+
[AXPWidgetsCatalog.richText]: 80,
|
|
6062
|
+
[AXPWidgetsCatalog.largeText]: 75,
|
|
6063
|
+
[AXPWidgetsCatalog.contact]: 74,
|
|
6064
|
+
[AXPWidgetsCatalog.toggle]: 65,
|
|
6065
|
+
[AXPWidgetsCatalog.checkbox]: 60,
|
|
6066
|
+
[AXPWidgetsCatalog.color]: 40,
|
|
6067
|
+
};
|
|
6068
|
+
let score = importanceMap[schema] ?? 50;
|
|
6069
|
+
// Prefer fields that actually have a value for the current entity
|
|
6070
|
+
if (this.hasMeaningfulValue(data?.[prop.name])) {
|
|
6071
|
+
score += 20;
|
|
6072
|
+
}
|
|
6073
|
+
// Slight preference for human-friendly titled fields
|
|
6074
|
+
const hasTitle = prop.title && prop.title !== prop.name;
|
|
6075
|
+
if (hasTitle) {
|
|
6076
|
+
score += 5;
|
|
6077
|
+
}
|
|
6078
|
+
return score;
|
|
6079
|
+
}
|
|
6080
|
+
/**
|
|
6081
|
+
* Calculates a name-based importance score to prioritize common key fields
|
|
6082
|
+
* like title, description, status, and important dates.
|
|
6083
|
+
* Name priority MUST come before widget-type priority.
|
|
6084
|
+
*/
|
|
6085
|
+
getNameImportanceScore(prop) {
|
|
6086
|
+
const rawName = (prop.options?.dataPath ?? prop.name ?? '').toString();
|
|
6087
|
+
const normalized = rawName.toLowerCase();
|
|
6088
|
+
const collapsed = normalized.replace(/[^a-z0-9]/g, '');
|
|
6089
|
+
const priorities = [
|
|
6090
|
+
{ keys: ['title', 'name', 'subject', 'code'], score: 120 },
|
|
6091
|
+
{ keys: ['description', 'details', 'summary', 'remark', 'remarks'], score: 110 },
|
|
6092
|
+
{ keys: ['status', 'state', 'phase', 'stage'], score: 105 },
|
|
6093
|
+
{ keys: ['priority', 'severity', 'rank'], score: 100 },
|
|
6094
|
+
{ keys: ['expirydate', 'expirationdate', 'expiredate', 'duedate', 'deadline', 'enddate'], score: 98 },
|
|
6095
|
+
{ keys: ['startdate', 'createdat', 'createdon', 'updatedat', 'updatedon'], score: 95 },
|
|
6096
|
+
{ keys: ['owner', 'assignee', 'assignedto'], score: 92 },
|
|
6097
|
+
{ keys: ['email', 'phone', 'mobile', 'contact'], score: 90 },
|
|
6098
|
+
{ keys: ['category', 'type', 'label', 'tag', 'note', 'notes'], score: 85 },
|
|
6099
|
+
{ keys: ['primary', 'active', 'active', 'enabled', 'archived', 'deleted', 'locked', 'disabled'], score: -2 } // send to bottom,
|
|
6100
|
+
];
|
|
6101
|
+
for (const group of priorities) {
|
|
6102
|
+
for (const key of group.keys) {
|
|
6103
|
+
if (collapsed === key || collapsed.endsWith(key)) {
|
|
6104
|
+
return group.score;
|
|
6105
|
+
}
|
|
6106
|
+
}
|
|
6107
|
+
}
|
|
6108
|
+
// Pattern-based priorities (generic forms like validFrom/validTo, start*/end*)
|
|
6109
|
+
if (collapsed.endsWith('from') || collapsed.endsWith('to')) {
|
|
6110
|
+
return 97;
|
|
6111
|
+
}
|
|
6112
|
+
if (collapsed.startsWith('start') || collapsed.startsWith('end')) {
|
|
6113
|
+
return 96;
|
|
6114
|
+
}
|
|
6115
|
+
return 0;
|
|
6116
|
+
}
|
|
6056
6117
|
getEntityPropertiesWithWidgets() {
|
|
6057
6118
|
const data = this.entityDetails()?.entityData;
|
|
6058
6119
|
const entityDefinition = this.entityDetails()?.entityDefinition;
|
|
@@ -6060,19 +6121,20 @@ class AXPLookupWidgetColumnComponent extends AXPColumnWidgetComponent {
|
|
|
6060
6121
|
return [];
|
|
6061
6122
|
// Get properties from entity definition and filter by importance
|
|
6062
6123
|
const importantProperties = (entityDefinition.columns ?? [])
|
|
6063
|
-
.map(prop => {
|
|
6124
|
+
.map((prop, index) => {
|
|
6064
6125
|
const propName = prop.options?.dataPath ?? prop.name;
|
|
6065
6126
|
const schema = prop.showAs?.type ?? entityDefinition.properties.find(p => p.name === propName)?.schema.interface?.type;
|
|
6066
6127
|
const title = prop.title ?? entityDefinition.properties.find(p => p.name === propName)?.title ?? prop.name;
|
|
6067
6128
|
return {
|
|
6068
6129
|
...prop,
|
|
6069
6130
|
schema,
|
|
6070
|
-
title
|
|
6131
|
+
title,
|
|
6132
|
+
orderIndex: index
|
|
6071
6133
|
};
|
|
6072
6134
|
})
|
|
6073
6135
|
.filter(prop => {
|
|
6074
6136
|
// Exclude technical fields
|
|
6075
|
-
if (prop.name === 'id' || prop.name === this.textField || prop.name === this.valueField) {
|
|
6137
|
+
if (prop.name === 'id' || prop.name === this.textField() || prop.name === this.valueField()) {
|
|
6076
6138
|
return false;
|
|
6077
6139
|
}
|
|
6078
6140
|
// Only include properties that exist in the data
|
|
@@ -6108,18 +6170,26 @@ class AXPLookupWidgetColumnComponent extends AXPColumnWidgetComponent {
|
|
|
6108
6170
|
return false;
|
|
6109
6171
|
})
|
|
6110
6172
|
.sort((a, b) => {
|
|
6111
|
-
//
|
|
6173
|
+
// Primary: name-based importance
|
|
6174
|
+
const nameScoreA = this.getNameImportanceScore(a);
|
|
6175
|
+
const nameScoreB = this.getNameImportanceScore(b);
|
|
6176
|
+
if (nameScoreA !== nameScoreB)
|
|
6177
|
+
return nameScoreB - nameScoreA;
|
|
6178
|
+
// Secondary: widget/value/title based importance
|
|
6179
|
+
const widgetScoreA = this.getPropertyImportanceScore(a, data);
|
|
6180
|
+
const widgetScoreB = this.getPropertyImportanceScore(b, data);
|
|
6181
|
+
if (widgetScoreA !== widgetScoreB)
|
|
6182
|
+
return widgetScoreB - widgetScoreA;
|
|
6183
|
+
const aHasValue = this.hasMeaningfulValue(data?.[a.name]);
|
|
6184
|
+
const bHasValue = this.hasMeaningfulValue(data?.[b.name]);
|
|
6185
|
+
if (aHasValue !== bHasValue)
|
|
6186
|
+
return aHasValue ? -1 : 1;
|
|
6112
6187
|
const aHasTitle = a.title && a.title !== a.name;
|
|
6113
6188
|
const bHasTitle = b.title && b.title !== b.name;
|
|
6114
|
-
if (aHasTitle
|
|
6115
|
-
return -1;
|
|
6116
|
-
if (
|
|
6117
|
-
return
|
|
6118
|
-
// If both have titles, sort alphabetically
|
|
6119
|
-
if (aHasTitle && bHasTitle) {
|
|
6120
|
-
return a.title.localeCompare(b.title);
|
|
6121
|
-
}
|
|
6122
|
-
// Otherwise sort by name
|
|
6189
|
+
if (aHasTitle !== bHasTitle)
|
|
6190
|
+
return aHasTitle ? -1 : 1;
|
|
6191
|
+
if ((a.orderIndex ?? 0) !== (b.orderIndex ?? 0))
|
|
6192
|
+
return (a.orderIndex ?? 0) - (b.orderIndex ?? 0);
|
|
6123
6193
|
return a.name.localeCompare(b.name);
|
|
6124
6194
|
})
|
|
6125
6195
|
.map(prop => {
|
|
@@ -6139,62 +6209,147 @@ class AXPLookupWidgetColumnComponent extends AXPColumnWidgetComponent {
|
|
|
6139
6209
|
.slice(0, 7); // Limit to 7 most important fields
|
|
6140
6210
|
return importantProperties;
|
|
6141
6211
|
}
|
|
6142
|
-
|
|
6143
|
-
if (
|
|
6144
|
-
|
|
6145
|
-
|
|
6146
|
-
|
|
6147
|
-
if (
|
|
6148
|
-
|
|
6149
|
-
|
|
6150
|
-
|
|
6151
|
-
|
|
6152
|
-
|
|
6153
|
-
|
|
6154
|
-
|
|
6155
|
-
|
|
6212
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPEntityDetailPopoverComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6213
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.8", type: AXPEntityDetailPopoverComponent, isStandalone: true, selector: "axp-entity-detail-popover", inputs: { entity: { classPropertyName: "entity", publicName: "entity", isSignal: true, isRequired: true, transformFunction: null }, entityId: { classPropertyName: "entityId", publicName: "entityId", isSignal: true, isRequired: true, transformFunction: null }, textField: { classPropertyName: "textField", publicName: "textField", isSignal: true, isRequired: false, transformFunction: null }, valueField: { classPropertyName: "valueField", publicName: "valueField", isSignal: true, isRequired: false, transformFunction: null }, item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "detailPopover", first: true, predicate: ["detailPopover"], descendants: true, isSignal: true }], ngImport: i0, template: "<ax-popover [openOn]=\"'manual'\" #detailPopover (openChange)=\"onDetailPopoverOpenChange($event)\">\n <div class=\"ax-lightest-surface ax-border ax-rounded-lg ax-shadow-lg ax-p-4 ax-min-w-[400px]\">\n <div class=\"ax-mb-4 ax-border-b ax-pb-2\">\n <h3 class=\"ax-text-base ax-font-semibold ax-text-on-lightest-surface\">\n @if (entityDetails()?.entityData?.[textField()]) {\n {{ entityDetails()?.entityData[textField()] }}\n } @else {\n {{ item()?.[textField()] }}\n }\n </h3>\n </div>\n @if (isLoadingDetails()) {\n <div class=\"ax-flex ax-items-center ax-justify-center ax-py-8\">\n <ax-loading>Loading details...</ax-loading>\n </div>\n } @else if (entityDetails()) {\n <div class=\"ax-space-y-3 ax-mb-4\">\n <!-- Important Entity Data -->\n @if (entityDetails()?.entityData) {\n <axp-widgets-container [context]=\"entityDetails()?.entityData\">\n <div class=\"ax-space-y-2\">\n @for (item of getEntityPropertiesWithWidgets(); track item.name) {\n <div class=\"ax-flex ax-justify-between ax-items-center\">\n <span class=\"ax-text-sm ax-font-medium\">{{ item.title | translate | async }}:</span>\n <div class=\"ax-flex-1 ax-ml-2 ax-max-w-48\">\n <ng-container axp-widget-renderer [node]=\"item.node\" [mode]=\"'view'\"></ng-container>\n </div>\n </div>\n }\n </div>\n </axp-widgets-container>\n }\n </div>\n <div class=\"ax-flex ax-gap-2 ax-justify-end ax-sm\">\n <ax-button [color]=\"'primary'\" [look]=\"'solid'\" text=\"Open Details\" (click)=\"navigateToDetails()\"> </ax-button>\n </div>\n }\n </div>\n</ax-popover>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3$2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i2.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "component", type: i3$1.AXPWidgetContainerComponent, selector: "axp-widgets-container", inputs: ["context", "functions"], outputs: ["onContextChanged"] }, { kind: "directive", type: i3$1.AXPWidgetRendererDirective, selector: "[axp-widget-renderer]", inputs: ["parentNode", "index", "mode", "node"], outputs: ["onOptionsChanged", "onValueChanged"], exportAs: ["widgetRenderer"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i4$1.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
6214
|
+
}
|
|
6215
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPEntityDetailPopoverComponent, decorators: [{
|
|
6216
|
+
type: Component,
|
|
6217
|
+
args: [{ selector: 'axp-entity-detail-popover', changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, AXButtonModule, AXPopoverModule, AXPLayoutBuilderModule, AXTranslationModule, AXLoadingModule], template: "<ax-popover [openOn]=\"'manual'\" #detailPopover (openChange)=\"onDetailPopoverOpenChange($event)\">\n <div class=\"ax-lightest-surface ax-border ax-rounded-lg ax-shadow-lg ax-p-4 ax-min-w-[400px]\">\n <div class=\"ax-mb-4 ax-border-b ax-pb-2\">\n <h3 class=\"ax-text-base ax-font-semibold ax-text-on-lightest-surface\">\n @if (entityDetails()?.entityData?.[textField()]) {\n {{ entityDetails()?.entityData[textField()] }}\n } @else {\n {{ item()?.[textField()] }}\n }\n </h3>\n </div>\n @if (isLoadingDetails()) {\n <div class=\"ax-flex ax-items-center ax-justify-center ax-py-8\">\n <ax-loading>Loading details...</ax-loading>\n </div>\n } @else if (entityDetails()) {\n <div class=\"ax-space-y-3 ax-mb-4\">\n <!-- Important Entity Data -->\n @if (entityDetails()?.entityData) {\n <axp-widgets-container [context]=\"entityDetails()?.entityData\">\n <div class=\"ax-space-y-2\">\n @for (item of getEntityPropertiesWithWidgets(); track item.name) {\n <div class=\"ax-flex ax-justify-between ax-items-center\">\n <span class=\"ax-text-sm ax-font-medium\">{{ item.title | translate | async }}:</span>\n <div class=\"ax-flex-1 ax-ml-2 ax-max-w-48\">\n <ng-container axp-widget-renderer [node]=\"item.node\" [mode]=\"'view'\"></ng-container>\n </div>\n </div>\n }\n </div>\n </axp-widgets-container>\n }\n </div>\n <div class=\"ax-flex ax-gap-2 ax-justify-end ax-sm\">\n <ax-button [color]=\"'primary'\" [look]=\"'solid'\" text=\"Open Details\" (click)=\"navigateToDetails()\"> </ax-button>\n </div>\n }\n </div>\n</ax-popover>\n" }]
|
|
6218
|
+
}] });
|
|
6219
|
+
|
|
6220
|
+
class AXPEntityDetailPopoverService {
|
|
6221
|
+
constructor() {
|
|
6222
|
+
//#region ---- Dependencies ----
|
|
6223
|
+
this.applicationRef = inject(ApplicationRef);
|
|
6224
|
+
this.environmentInjector = inject(EnvironmentInjector);
|
|
6225
|
+
//#endregion
|
|
6226
|
+
//#region ---- Private Properties ----
|
|
6227
|
+
this.activePopoverRef = null;
|
|
6156
6228
|
}
|
|
6157
6229
|
//#endregion
|
|
6158
|
-
//#region ----
|
|
6159
|
-
|
|
6160
|
-
|
|
6161
|
-
|
|
6162
|
-
|
|
6230
|
+
//#region ---- Public Methods ----
|
|
6231
|
+
/**
|
|
6232
|
+
* Show entity detail popover
|
|
6233
|
+
* @param target - The target element to position the popover
|
|
6234
|
+
* @param options - Configuration options for the popover
|
|
6235
|
+
*/
|
|
6236
|
+
async show(target, options) {
|
|
6237
|
+
// Close any existing popover
|
|
6238
|
+
this.hide();
|
|
6239
|
+
// Create component dynamically
|
|
6240
|
+
this.activePopoverRef = createComponent(AXPEntityDetailPopoverComponent, {
|
|
6241
|
+
environmentInjector: this.environmentInjector,
|
|
6242
|
+
});
|
|
6243
|
+
// Set inputs
|
|
6244
|
+
this.activePopoverRef.setInput('entity', options.entity);
|
|
6245
|
+
this.activePopoverRef.setInput('entityId', options.id);
|
|
6246
|
+
this.activePopoverRef.setInput('textField', options.textField || 'title');
|
|
6247
|
+
this.activePopoverRef.setInput('valueField', options.valueField || 'id');
|
|
6248
|
+
this.activePopoverRef.setInput('item', options.item);
|
|
6249
|
+
// Attach to application
|
|
6250
|
+
this.applicationRef.attachView(this.activePopoverRef.hostView);
|
|
6251
|
+
// Append to document body
|
|
6252
|
+
document.body.appendChild(this.activePopoverRef.location.nativeElement);
|
|
6253
|
+
// Show the popover
|
|
6254
|
+
await this.activePopoverRef.instance.show(target);
|
|
6255
|
+
}
|
|
6256
|
+
/**
|
|
6257
|
+
* Hide the active popover
|
|
6258
|
+
*/
|
|
6259
|
+
hide() {
|
|
6260
|
+
if (this.activePopoverRef) {
|
|
6261
|
+
this.activePopoverRef.instance.hide();
|
|
6262
|
+
this.applicationRef.detachView(this.activePopoverRef.hostView);
|
|
6263
|
+
this.activePopoverRef.destroy();
|
|
6264
|
+
this.activePopoverRef = null;
|
|
6163
6265
|
}
|
|
6164
|
-
this.clearHoverTimeout();
|
|
6165
|
-
this.hoverTimeout = setTimeout(() => {
|
|
6166
|
-
this.showMoreItems();
|
|
6167
|
-
}, this.HOVER_DELAY);
|
|
6168
6266
|
}
|
|
6169
|
-
|
|
6170
|
-
|
|
6267
|
+
/**
|
|
6268
|
+
* Check if a popover is currently active
|
|
6269
|
+
*/
|
|
6270
|
+
get isActive() {
|
|
6271
|
+
return this.activePopoverRef !== null;
|
|
6171
6272
|
}
|
|
6172
|
-
|
|
6173
|
-
|
|
6174
|
-
|
|
6175
|
-
|
|
6176
|
-
|
|
6177
|
-
|
|
6178
|
-
|
|
6179
|
-
|
|
6180
|
-
}
|
|
6273
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPEntityDetailPopoverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
6274
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPEntityDetailPopoverService, providedIn: 'root' }); }
|
|
6275
|
+
}
|
|
6276
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPEntityDetailPopoverService, decorators: [{
|
|
6277
|
+
type: Injectable,
|
|
6278
|
+
args: [{
|
|
6279
|
+
providedIn: 'root'
|
|
6280
|
+
}]
|
|
6281
|
+
}] });
|
|
6282
|
+
|
|
6283
|
+
class AXPLookupWidgetColumnComponent extends AXPColumnWidgetComponent {
|
|
6284
|
+
constructor() {
|
|
6285
|
+
super(...arguments);
|
|
6286
|
+
//#region ---- Dependencies ----
|
|
6287
|
+
this.entityDetailPopoverService = inject(AXPEntityDetailPopoverService);
|
|
6288
|
+
//#endregion
|
|
6289
|
+
//#region ---- View Children ----
|
|
6290
|
+
this.moreButton = viewChild('moreButton', ...(ngDevMode ? [{ debugName: "moreButton" }] : []));
|
|
6291
|
+
this.morePopover = viewChild('morePopover', ...(ngDevMode ? [{ debugName: "morePopover" }] : []));
|
|
6292
|
+
//#endregion
|
|
6293
|
+
//#region ---- Properties ----
|
|
6294
|
+
this.host = inject(ElementRef);
|
|
6295
|
+
this.valueField = this.options['valueField'] ?? 'id';
|
|
6296
|
+
this.textField = this.options['textField'] ?? 'title';
|
|
6297
|
+
this.entity = this.options['entity'] ?? 'title';
|
|
6298
|
+
this.columnName = this.options['columnName'] ?? 'title';
|
|
6299
|
+
this.maxVisible = this.options['maxVisible'] ?? 2;
|
|
6300
|
+
//#endregion
|
|
6301
|
+
//#region ---- Signals ----
|
|
6302
|
+
this.isMorePopoverOpen = signal(false, ...(ngDevMode ? [{ debugName: "isMorePopoverOpen" }] : []));
|
|
6303
|
+
this.selectedItemIndex = signal(-1, ...(ngDevMode ? [{ debugName: "selectedItemIndex" }] : []));
|
|
6304
|
+
//#endregion
|
|
6305
|
+
//#region ---- Computed Properties ----
|
|
6306
|
+
this.displayItems = computed(() => isNil(this.rawValue)
|
|
6307
|
+
? []
|
|
6308
|
+
: castArray(this.rawValue).map((item) => this.extractItem(item)).filter((c) => c != null), ...(ngDevMode ? [{ debugName: "displayItems" }] : []));
|
|
6309
|
+
this.allItems = computed(() => this.displayItems(), ...(ngDevMode ? [{ debugName: "allItems" }] : []));
|
|
6310
|
+
this.visibleItems = computed(() => {
|
|
6311
|
+
const items = this.allItems();
|
|
6312
|
+
return items.slice(0, this.maxVisible);
|
|
6313
|
+
}, ...(ngDevMode ? [{ debugName: "visibleItems" }] : []));
|
|
6314
|
+
this.hasMoreItems = computed(() => {
|
|
6315
|
+
return this.allItems().length > this.maxVisible;
|
|
6316
|
+
}, ...(ngDevMode ? [{ debugName: "hasMoreItems" }] : []));
|
|
6317
|
+
this.remainingItemsCount = computed(() => {
|
|
6318
|
+
return this.allItems().length - this.maxVisible;
|
|
6319
|
+
}, ...(ngDevMode ? [{ debugName: "remainingItemsCount" }] : []));
|
|
6181
6320
|
}
|
|
6182
|
-
|
|
6183
|
-
|
|
6321
|
+
//#endregion
|
|
6322
|
+
//#region ---- Public Methods ----
|
|
6323
|
+
showMoreItems() {
|
|
6324
|
+
this.entityDetailPopoverService.hide();
|
|
6325
|
+
this.openMorePopover();
|
|
6184
6326
|
}
|
|
6185
|
-
|
|
6186
|
-
|
|
6187
|
-
if (this.isMorePopoverOpen() || this.isDetailPopoverOpen()) {
|
|
6188
|
-
return;
|
|
6189
|
-
}
|
|
6190
|
-
this.clearVisibleItemHoverTimeout();
|
|
6191
|
-
this.visibleItemHoverTimeout = setTimeout(() => {
|
|
6192
|
-
this.showItemDetail(item, index);
|
|
6193
|
-
}, this.HOVER_DELAY);
|
|
6327
|
+
onMorePopoverOpenChange(event) {
|
|
6328
|
+
this.isMorePopoverOpen.set(event);
|
|
6194
6329
|
}
|
|
6195
|
-
|
|
6196
|
-
this.
|
|
6330
|
+
async showItemDetail(item, index) {
|
|
6331
|
+
const columnData = this.rowData[this.columnName];
|
|
6332
|
+
const id = Array.isArray(columnData) ? columnData[index] : columnData;
|
|
6333
|
+
this.selectedItemIndex.set(index);
|
|
6334
|
+
this.closeMorePopover();
|
|
6335
|
+
// Show entity detail popover using the service
|
|
6336
|
+
await this.entityDetailPopoverService.show(this.host, {
|
|
6337
|
+
entity: this.entity,
|
|
6338
|
+
id: id,
|
|
6339
|
+
textField: this.textField,
|
|
6340
|
+
valueField: this.valueField,
|
|
6341
|
+
item
|
|
6342
|
+
});
|
|
6343
|
+
}
|
|
6344
|
+
handleItemClick(index) {
|
|
6345
|
+
const items = this.allItems();
|
|
6346
|
+
if (index < items.length) {
|
|
6347
|
+
const item = items[index];
|
|
6348
|
+
this.showItemDetail(item, index);
|
|
6349
|
+
}
|
|
6197
6350
|
}
|
|
6351
|
+
//#endregion
|
|
6352
|
+
//#region ---- Private Methods ----
|
|
6198
6353
|
openMorePopover() {
|
|
6199
6354
|
if (this.morePopover() && this.moreButton()) {
|
|
6200
6355
|
this.morePopover().target = this.moreButton().nativeElement;
|
|
@@ -6208,29 +6363,6 @@ class AXPLookupWidgetColumnComponent extends AXPColumnWidgetComponent {
|
|
|
6208
6363
|
this.isMorePopoverOpen.set(false);
|
|
6209
6364
|
}
|
|
6210
6365
|
}
|
|
6211
|
-
clearHoverTimeout() {
|
|
6212
|
-
if (this.hoverTimeout) {
|
|
6213
|
-
clearTimeout(this.hoverTimeout);
|
|
6214
|
-
this.hoverTimeout = null;
|
|
6215
|
-
}
|
|
6216
|
-
}
|
|
6217
|
-
clearViewDetailsHoverTimeout() {
|
|
6218
|
-
if (this.viewDetailsHoverTimeout) {
|
|
6219
|
-
clearTimeout(this.viewDetailsHoverTimeout);
|
|
6220
|
-
this.viewDetailsHoverTimeout = null;
|
|
6221
|
-
}
|
|
6222
|
-
}
|
|
6223
|
-
clearVisibleItemHoverTimeout() {
|
|
6224
|
-
if (this.visibleItemHoverTimeout) {
|
|
6225
|
-
clearTimeout(this.visibleItemHoverTimeout);
|
|
6226
|
-
this.visibleItemHoverTimeout = null;
|
|
6227
|
-
}
|
|
6228
|
-
}
|
|
6229
|
-
clearAllHoverTimeouts() {
|
|
6230
|
-
this.clearHoverTimeout();
|
|
6231
|
-
this.clearViewDetailsHoverTimeout();
|
|
6232
|
-
this.clearVisibleItemHoverTimeout();
|
|
6233
|
-
}
|
|
6234
6366
|
extractItem(item) {
|
|
6235
6367
|
if (isNil(item)) {
|
|
6236
6368
|
return null;
|
|
@@ -6246,11 +6378,11 @@ class AXPLookupWidgetColumnComponent extends AXPColumnWidgetComponent {
|
|
|
6246
6378
|
};
|
|
6247
6379
|
}
|
|
6248
6380
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPLookupWidgetColumnComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
6249
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.8", type: AXPLookupWidgetColumnComponent, isStandalone: true, selector: "ng-component", inputs: { rawValue: "rawValue", rowData: "rowData" }, viewQueries: [{ propertyName: "moreButton", first: true, predicate: ["moreButton"], descendants: true, isSignal: true }, { propertyName: "morePopover", first: true, predicate: ["morePopover"], descendants: true, isSignal: true }
|
|
6381
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.8", type: AXPLookupWidgetColumnComponent, isStandalone: true, selector: "ng-component", inputs: { rawValue: "rawValue", rowData: "rowData" }, viewQueries: [{ propertyName: "moreButton", first: true, predicate: ["moreButton"], descendants: true, isSignal: true }, { propertyName: "morePopover", first: true, predicate: ["morePopover"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"ax-flex ax-gap-1 ax-items-center\">\n @if (visibleItems().length > 0) {\n @for (item of visibleItems(); track $index) {\n <span class=\"ax-cursor-pointer hover:ax-text-primary hover:ax-underline\" (click)=\"handleItemClick($index)\">\n {{ item[this.textField] }}\n </span>\n @if ($index < visibleItems().length - 1) {\n <span class=\"ax-text-muted\">\u2022</span>\n }\n }\n } @else {\n <span class=\"ax-text-muted\">---</span>\n }\n\n @if (hasMoreItems()) {\n <span\n class=\"ax-absolute ax-flex ax-items-center ax-end-0 ax-px-1 ax-cursor-pointer ax-h-full hover:ax-primary-lighter\"\n (click)=\"showMoreItems()\"\n #moreButton\n >\n <i class=\"fa-light fa-ellipsis-vertical\"></i>\n </span>\n }\n</div>\n\n<!-- More Items Popover -->\n<ax-popover [openOn]=\"'manual'\" #morePopover (openChange)=\"onMorePopoverOpenChange($event)\">\n <div class=\"ax-lightest-surface ax-border ax-rounded-lg ax-shadow-lg ax-p-4 ax-min-w-[280px]\">\n <div class=\"ax-mb-4 ax-border-b ax-pb-2\">\n <h3 class=\"ax-text-base ax-font-semibold\">All {{ allItems().length }} Items</h3>\n </div>\n <div class=\"ax-max-h-64 ax-flex ax-flex-col ax-gap-3\">\n @for (item of allItems(); track $index) {\n <span class=\"ax-cursor-pointer hover:ax-text-primary hover:ax-underline\" (click)=\"showItemDetail(item, $index)\">\n {{ item[this.textField] }}\n </span>\n }\n </div>\n </div>\n</ax-popover>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i2.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
6250
6382
|
}
|
|
6251
6383
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPLookupWidgetColumnComponent, decorators: [{
|
|
6252
6384
|
type: Component,
|
|
6253
|
-
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, AXBadgeModule, AXButtonModule, AXPopoverModule
|
|
6385
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, AXBadgeModule, AXButtonModule, AXPopoverModule], inputs: ['rawValue', 'rowData'], template: "<div class=\"ax-flex ax-gap-1 ax-items-center\">\n @if (visibleItems().length > 0) {\n @for (item of visibleItems(); track $index) {\n <span class=\"ax-cursor-pointer hover:ax-text-primary hover:ax-underline\" (click)=\"handleItemClick($index)\">\n {{ item[this.textField] }}\n </span>\n @if ($index < visibleItems().length - 1) {\n <span class=\"ax-text-muted\">\u2022</span>\n }\n }\n } @else {\n <span class=\"ax-text-muted\">---</span>\n }\n\n @if (hasMoreItems()) {\n <span\n class=\"ax-absolute ax-flex ax-items-center ax-end-0 ax-px-1 ax-cursor-pointer ax-h-full hover:ax-primary-lighter\"\n (click)=\"showMoreItems()\"\n #moreButton\n >\n <i class=\"fa-light fa-ellipsis-vertical\"></i>\n </span>\n }\n</div>\n\n<!-- More Items Popover -->\n<ax-popover [openOn]=\"'manual'\" #morePopover (openChange)=\"onMorePopoverOpenChange($event)\">\n <div class=\"ax-lightest-surface ax-border ax-rounded-lg ax-shadow-lg ax-p-4 ax-min-w-[280px]\">\n <div class=\"ax-mb-4 ax-border-b ax-pb-2\">\n <h3 class=\"ax-text-base ax-font-semibold\">All {{ allItems().length }} Items</h3>\n </div>\n <div class=\"ax-max-h-64 ax-flex ax-flex-col ax-gap-3\">\n @for (item of allItems(); track $index) {\n <span class=\"ax-cursor-pointer hover:ax-text-primary hover:ax-underline\" (click)=\"showItemDetail(item, $index)\">\n {{ item[this.textField] }}\n </span>\n }\n </div>\n </div>\n</ax-popover>\n" }]
|
|
6254
6386
|
}] });
|
|
6255
6387
|
|
|
6256
6388
|
var lookupWidgetColumn_component = /*#__PURE__*/Object.freeze({
|
|
@@ -6346,7 +6478,7 @@ class AXPTagableBoxWidgetColumnComponent extends AXPValueWidgetComponent {
|
|
|
6346
6478
|
<span class="ax-bg-slate-100 ax-px-2 ax-py-1 ax-rounded ax-inline-block">{{ internalValue()[0] }}</span>
|
|
6347
6479
|
} }
|
|
6348
6480
|
</div>
|
|
6349
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i1
|
|
6481
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i1.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
6350
6482
|
}
|
|
6351
6483
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPTagableBoxWidgetColumnComponent, decorators: [{
|
|
6352
6484
|
type: Component,
|
|
@@ -6451,7 +6583,7 @@ class AXPTagableBoxWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
6451
6583
|
</ax-prefix>
|
|
6452
6584
|
</ax-button>
|
|
6453
6585
|
</div>
|
|
6454
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: AXTextBoxModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$
|
|
6586
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: AXTextBoxModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXFormModule }, { kind: "directive", type: i5$1.AXValidationRuleDirective, selector: "ax-validation-rule", inputs: ["rule", "options", "message", "disabled"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXValidationModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3$2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXSelectBoxModule }, { kind: "component", type: i7$1.AXSelectBoxComponent, selector: "ax-select-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "minValue", "maxValue", "value", "state", "name", "id", "type", "look", "multiple", "valueField", "textField", "disabledField", "textTemplate", "selectedItems", "isItemTruncated", "showItemTooltip", "dataSource", "minRecordsForSearch", "caption", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "dropdownWidth", "searchBoxAutoFocus"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onOpened", "onClosed", "onItemSelected", "onItemClick"] }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i5.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
6455
6587
|
}
|
|
6456
6588
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPTagableBoxWidgetEditComponent, decorators: [{
|
|
6457
6589
|
type: Component,
|
|
@@ -6630,7 +6762,7 @@ class AXPTagableBoxWidgetViewComponent extends AXPValueWidgetComponent {
|
|
|
6630
6762
|
@for (item of internalValue(); track $index) {
|
|
6631
6763
|
<ax-badge [look]="'twotone'" [text]="item" color="primary"></ax-badge>
|
|
6632
6764
|
}
|
|
6633
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i1
|
|
6765
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i1.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
6634
6766
|
}
|
|
6635
6767
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPTagableBoxWidgetViewComponent, decorators: [{
|
|
6636
6768
|
type: Component,
|
|
@@ -6748,7 +6880,7 @@ class AXPWidgetSelectorWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
6748
6880
|
<axp-widget-property-viewer [widget]="selectedWidgetNode()!" (onChanged)="handleChangeWidget($event)">
|
|
6749
6881
|
</axp-widget-property-viewer>
|
|
6750
6882
|
}
|
|
6751
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$
|
|
6883
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXSelectBoxModule }, { kind: "ngmodule", type: AXTextBoxModule }, { kind: "component", type: i2$1.AXTextBoxComponent, selector: "ax-text-box", inputs: ["disabled", "tabIndex", "readonly", "value", "state", "name", "id", "placeholder", "maxLength", "allowNull", "type", "autoComplete", "look", "mask-options", "class"], outputs: ["onBlur", "onFocus", "valueChange", "stateChange", "onValueChanged", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3$2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXValidationModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "directive", type: i5$1.AXValidationRuleDirective, selector: "ax-validation-rule", inputs: ["rule", "options", "message", "disabled"] }, { kind: "component", type: AXPWidgetPropertyViewerComponent, selector: "axp-widget-property-viewer", inputs: ["widget", "mode"], outputs: ["onChanged"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
6752
6884
|
}
|
|
6753
6885
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPWidgetSelectorWidgetEditComponent, decorators: [{
|
|
6754
6886
|
type: Component,
|
|
@@ -7267,7 +7399,7 @@ class AXPEntityModule {
|
|
|
7267
7399
|
},
|
|
7268
7400
|
});
|
|
7269
7401
|
}
|
|
7270
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPEntityModule, deps: [{ token: i1$
|
|
7402
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPEntityModule, deps: [{ token: i1$3.AXPAppStartUpService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
7271
7403
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.1.8", ngImport: i0, type: AXPEntityModule, imports: [RouterModule, i2$2.AXPWorkflowModule, i3$1.AXPLayoutBuilderModule] }); }
|
|
7272
7404
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPEntityModule, providers: [
|
|
7273
7405
|
{
|
|
@@ -7419,7 +7551,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImpor
|
|
|
7419
7551
|
]),
|
|
7420
7552
|
],
|
|
7421
7553
|
}]
|
|
7422
|
-
}], ctorParameters: () => [{ type: i1$
|
|
7554
|
+
}], ctorParameters: () => [{ type: i1$3.AXPAppStartUpService }, { type: i0.Injector }] });
|
|
7423
7555
|
|
|
7424
7556
|
//#endregion
|
|
7425
7557
|
//#region ---- Entity Open Details Command ----
|
|
@@ -7554,7 +7686,7 @@ function entityMasterCreateAction() {
|
|
|
7554
7686
|
title: '@general:actions.create.title',
|
|
7555
7687
|
command: 'create-entity',
|
|
7556
7688
|
priority: 'primary',
|
|
7557
|
-
type:
|
|
7689
|
+
type: AXPSystemActionType.Create,
|
|
7558
7690
|
scope: AXPEntityCommandScope.TypeLevel,
|
|
7559
7691
|
};
|
|
7560
7692
|
}
|
|
@@ -7563,7 +7695,7 @@ function entityMasterBulkDeleteAction() {
|
|
|
7563
7695
|
title: '@general:actions.delete-items.title',
|
|
7564
7696
|
command: 'delete-entity',
|
|
7565
7697
|
priority: 'primary',
|
|
7566
|
-
type:
|
|
7698
|
+
type: AXPSystemActionType.Delete,
|
|
7567
7699
|
scope: AXPEntityCommandScope.Selected,
|
|
7568
7700
|
};
|
|
7569
7701
|
}
|
|
@@ -7572,7 +7704,7 @@ function entityMasterViewAction() {
|
|
|
7572
7704
|
title: '@general:actions.view.title',
|
|
7573
7705
|
command: 'open-entity',
|
|
7574
7706
|
priority: 'secondary',
|
|
7575
|
-
type:
|
|
7707
|
+
type: AXPSystemActionType.View,
|
|
7576
7708
|
scope: AXPEntityCommandScope.Individual,
|
|
7577
7709
|
default: true,
|
|
7578
7710
|
};
|
|
@@ -7582,7 +7714,7 @@ function entityMasterDeleteAction() {
|
|
|
7582
7714
|
title: '@general:actions.delete.title',
|
|
7583
7715
|
command: 'delete-entity',
|
|
7584
7716
|
priority: 'secondary',
|
|
7585
|
-
type:
|
|
7717
|
+
type: AXPSystemActionType.Delete,
|
|
7586
7718
|
scope: AXPEntityCommandScope.Individual,
|
|
7587
7719
|
};
|
|
7588
7720
|
}
|
|
@@ -7615,7 +7747,7 @@ function entityDetailsCreateActions(parentId) {
|
|
|
7615
7747
|
},
|
|
7616
7748
|
},
|
|
7617
7749
|
priority: 'primary',
|
|
7618
|
-
type:
|
|
7750
|
+
type: AXPSystemActionType.Create,
|
|
7619
7751
|
scope: AXPEntityCommandScope.TypeLevel,
|
|
7620
7752
|
};
|
|
7621
7753
|
}
|
|
@@ -7645,7 +7777,7 @@ function entityDetailsEditAction() {
|
|
|
7645
7777
|
title: '@general:actions.edit.title',
|
|
7646
7778
|
command: 'quick-modify-entity',
|
|
7647
7779
|
priority: 'secondary',
|
|
7648
|
-
type:
|
|
7780
|
+
type: AXPSystemActionType.Update,
|
|
7649
7781
|
default: true,
|
|
7650
7782
|
scope: AXPEntityCommandScope.Individual,
|
|
7651
7783
|
};
|
|
@@ -7656,7 +7788,7 @@ function entityOverrideDetailsViewAction() {
|
|
|
7656
7788
|
command: 'open-entity',
|
|
7657
7789
|
priority: 'secondary',
|
|
7658
7790
|
hidden: true,
|
|
7659
|
-
type:
|
|
7791
|
+
type: AXPSystemActionType.View,
|
|
7660
7792
|
scope: AXPEntityCommandScope.Individual,
|
|
7661
7793
|
};
|
|
7662
7794
|
}
|
|
@@ -7683,7 +7815,7 @@ function entityDetailsReferenceCreateActions(type) {
|
|
|
7683
7815
|
},
|
|
7684
7816
|
},
|
|
7685
7817
|
priority: 'primary',
|
|
7686
|
-
type:
|
|
7818
|
+
type: AXPSystemActionType.Create,
|
|
7687
7819
|
scope: AXPEntityCommandScope.TypeLevel,
|
|
7688
7820
|
},
|
|
7689
7821
|
entityDetailsEditAction(),
|
|
@@ -7750,5 +7882,5 @@ const eventDispatchMiddleware = {
|
|
|
7750
7882
|
* Generated bundle index. Do not edit.
|
|
7751
7883
|
*/
|
|
7752
7884
|
|
|
7753
|
-
export { AXMEntityCrudService, AXMEntityCrudServiceImpl, AXPCreateEntityWorkflow, AXPDataSeederService, AXPDeleteEntityWorkflow, AXPEntityApplyUpdatesAction, AXPEntityCommandTriggerViewModel, AXPEntityCreateEvent, AXPEntityCreatePopupAction, AXPEntityCreateSubmittedAction, AXPEntityCreateViewElementViewModel, AXPEntityCreateViewModelFactory, AXPEntityCreateViewSectionViewModel, AXPEntityDataProvider, AXPEntityDataProviderImpl, AXPEntityDefinitionRegistryService, AXPEntityDeletedEvent, AXPEntityDetailListViewModel, AXPEntityDetailViewModelFactory, AXPEntityDetailViewModelResolver, AXPEntityEventDispatcherService, AXPEntityListViewColumnViewModel, AXPEntityListViewModelFactory, AXPEntityListViewModelResolver, AXPEntityMasterCreateViewModel, AXPEntityMasterListViewModel, AXPEntityMasterListViewQueryViewModel, AXPEntityMasterSingleElementViewModel, AXPEntityMasterSingleViewGroupViewModel, AXPEntityMasterSingleViewModel, AXPEntityMasterUpdateElementViewModel, AXPEntityMasterUpdateViewModel, AXPEntityMasterUpdateViewModelFactory, AXPEntityMiddleware, AXPEntityModifyConfirmedAction, AXPEntityModifyEvent, AXPEntityModifySectionPopupAction, AXPEntityModule, AXPEntityPerformDeleteAction, AXPEntityResolver, AXPEntityService, AXPEntityStorageService, AXPGetEntityDetailsQuery, AXPMiddlewareEntityStorageService, AXPModifyEntitySectionWorkflow, AXPOpenEntityDetailsCommand, AXPQuickEntityModifyPopupAction, AXPQuickModifyEntityWorkflow, AXPShowDetailViewAction, AXPShowDetailsViewWorkflow, AXPShowListViewAction, AXPShowListViewWorkflow, AXP_DATA_SEEDER_TOKEN, AXP_ENTITY_ACTION_PLUGIN, AXP_ENTITY_CONFIG_TOKEN, AXP_ENTITY_DEFINITION_LOADER, AXP_ENTITY_MODIFIER, AXP_ENTITY_STORAGE_BACKEND, AXP_ENTITY_STORAGE_MIDDLEWARE, DEFAULT_COLUMN_WIDTHS, actionExists, columnWidthMiddlewareFactory, columnWidthMiddlewareProvider, createColumnWidthMiddlewareProvider, createModifierContext, detectEntityChanges, ensureListActions, entityDetailsCreateActions, entityDetailsCrudActions, entityDetailsEditAction, entityDetailsReferenceCondition, entityDetailsReferenceCreateActions, entityDetailsSimpleCondition, entityMasterBulkDeleteAction, entityMasterCreateAction, entityMasterCrudActions, entityMasterDeleteAction, entityMasterRecordActions, entityMasterViewAction, entityOverrideDetailsViewAction, eventDispatchMiddleware };
|
|
7885
|
+
export { AXMEntityCrudService, AXMEntityCrudServiceImpl, AXPCreateEntityWorkflow, AXPDataSeederService, AXPDeleteEntityWorkflow, AXPEntityApplyUpdatesAction, AXPEntityCommandTriggerViewModel, AXPEntityCreateEvent, AXPEntityCreatePopupAction, AXPEntityCreateSubmittedAction, AXPEntityCreateViewElementViewModel, AXPEntityCreateViewModelFactory, AXPEntityCreateViewSectionViewModel, AXPEntityDataProvider, AXPEntityDataProviderImpl, AXPEntityDefinitionRegistryService, AXPEntityDeletedEvent, AXPEntityDetailListViewModel, AXPEntityDetailPopoverComponent, AXPEntityDetailPopoverService, AXPEntityDetailViewModelFactory, AXPEntityDetailViewModelResolver, AXPEntityEventDispatcherService, AXPEntityListViewColumnViewModel, AXPEntityListViewModelFactory, AXPEntityListViewModelResolver, AXPEntityMasterCreateViewModel, AXPEntityMasterListViewModel, AXPEntityMasterListViewQueryViewModel, AXPEntityMasterSingleElementViewModel, AXPEntityMasterSingleViewGroupViewModel, AXPEntityMasterSingleViewModel, AXPEntityMasterUpdateElementViewModel, AXPEntityMasterUpdateViewModel, AXPEntityMasterUpdateViewModelFactory, AXPEntityMiddleware, AXPEntityModifyConfirmedAction, AXPEntityModifyEvent, AXPEntityModifySectionPopupAction, AXPEntityModule, AXPEntityPerformDeleteAction, AXPEntityResolver, AXPEntityService, AXPEntityStorageService, AXPGetEntityDetailsQuery, AXPMiddlewareEntityStorageService, AXPModifyEntitySectionWorkflow, AXPOpenEntityDetailsCommand, AXPQuickEntityModifyPopupAction, AXPQuickModifyEntityWorkflow, AXPShowDetailViewAction, AXPShowDetailsViewWorkflow, AXPShowListViewAction, AXPShowListViewWorkflow, AXP_DATA_SEEDER_TOKEN, AXP_ENTITY_ACTION_PLUGIN, AXP_ENTITY_CONFIG_TOKEN, AXP_ENTITY_DEFINITION_LOADER, AXP_ENTITY_MODIFIER, AXP_ENTITY_STORAGE_BACKEND, AXP_ENTITY_STORAGE_MIDDLEWARE, DEFAULT_COLUMN_WIDTHS, actionExists, columnWidthMiddlewareFactory, columnWidthMiddlewareProvider, createColumnWidthMiddlewareProvider, createModifierContext, detectEntityChanges, ensureListActions, entityDetailsCreateActions, entityDetailsCrudActions, entityDetailsEditAction, entityDetailsReferenceCondition, entityDetailsReferenceCreateActions, entityDetailsSimpleCondition, entityMasterBulkDeleteAction, entityMasterCreateAction, entityMasterCrudActions, entityMasterDeleteAction, entityMasterRecordActions, entityMasterViewAction, entityOverrideDetailsViewAction, eventDispatchMiddleware };
|
|
7754
7886
|
//# sourceMappingURL=acorex-platform-layout-entity.mjs.map
|