@acorex/platform 20.3.0-next.8 → 20.3.0-next.9
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 +0 -2
- package/core/index.d.ts +72 -62
- package/fesm2022/acorex-platform-common.mjs +5 -10
- package/fesm2022/acorex-platform-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-core.mjs +115 -115
- package/fesm2022/acorex-platform-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-builder.mjs +420 -24
- package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-components.mjs +1266 -153
- package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-designer.mjs +19 -12
- package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity.mjs +454 -505
- package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-views.mjs +14 -21
- package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
- package/fesm2022/{acorex-platform-themes-default-entity-master-create-view.component-BXbkGGei.mjs → acorex-platform-themes-default-entity-master-create-view.component-Ct-ri59W.mjs} +3 -3
- package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-Ct-ri59W.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-default-entity-master-list-view.component-gQIK6PIx.mjs → acorex-platform-themes-default-entity-master-list-view.component-7BB4LdjK.mjs} +9 -9
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-7BB4LdjK.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-BDJR088o.mjs +101 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-BDJR088o.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default.mjs +8 -8
- package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
- package/fesm2022/{acorex-platform-themes-shared-settings.provider-CXiRmniv.mjs → acorex-platform-themes-shared-settings.provider-CLUKU4y0.mjs} +2 -2
- package/fesm2022/acorex-platform-themes-shared-settings.provider-CLUKU4y0.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-shared.mjs +154 -23
- package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
- package/fesm2022/{acorex-platform-widgets-file-list-popup.component-rW2RD35f.mjs → acorex-platform-widgets-file-list-popup.component-Cmtq2bBV.mjs} +3 -3
- package/fesm2022/acorex-platform-widgets-file-list-popup.component-Cmtq2bBV.mjs.map +1 -0
- package/fesm2022/{acorex-platform-widgets-page-widget-designer.component-DNvnQ4Mc.mjs → acorex-platform-widgets-page-widget-designer.component-D8ivmxzT.mjs} +2 -2
- package/fesm2022/acorex-platform-widgets-page-widget-designer.component-D8ivmxzT.mjs.map +1 -0
- package/fesm2022/{acorex-platform-widgets-tabular-data-edit-popup.component-CPVRbE8B.mjs → acorex-platform-widgets-tabular-data-edit-popup.component-CMqq_iOj.mjs} +8 -8
- package/fesm2022/acorex-platform-widgets-tabular-data-edit-popup.component-CMqq_iOj.mjs.map +1 -0
- package/fesm2022/acorex-platform-widgets.mjs +4943 -4858
- package/fesm2022/acorex-platform-widgets.mjs.map +1 -1
- package/layout/builder/index.d.ts +60 -5
- package/layout/components/index.d.ts +501 -54
- package/layout/designer/index.d.ts +4 -2
- package/layout/entity/index.d.ts +45 -9
- package/package.json +9 -9
- package/widgets/index.d.ts +352 -300
- package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-BXbkGGei.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-gQIK6PIx.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-Bp1JLsj1.mjs +0 -101
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-Bp1JLsj1.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-shared-settings.provider-CXiRmniv.mjs.map +0 -1
- package/fesm2022/acorex-platform-widgets-file-list-popup.component-rW2RD35f.mjs.map +0 -1
- package/fesm2022/acorex-platform-widgets-page-widget-designer.component-DNvnQ4Mc.mjs.map +0 -1
- package/fesm2022/acorex-platform-widgets-tabular-data-edit-popup.component-CPVRbE8B.mjs.map +0 -1
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
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
|
|
5
|
-
import { AXDataSource, AXCommonModule } from '@acorex/cdk/common';
|
|
4
|
+
import { AXDataSource } from '@acorex/cdk/common';
|
|
6
5
|
import { AXFormatService } from '@acorex/core/format';
|
|
7
6
|
import { AXPFilterOperatorMiddlewareService, AXPEntityCommandScope, getEntityInfo, AXPSettingService, AXPRefreshEvent, AXPReloadEvent, AXPCleanNestedFilters, AXPWorkflowNavigateAction, AXPToastAction, AXP_SEARCH_DEFINITION_PROVIDER } from '@acorex/platform/common';
|
|
8
|
-
import * as i1$
|
|
7
|
+
import * as i1$2 from '@acorex/platform/core';
|
|
9
8
|
import { resolveActionLook, AXPExpressionEvaluatorService, AXPPlatformScope, AXPDistributedEventListenerService, getChangedPaths, extractValue, setSmart, AXPSystemActionType } from '@acorex/platform/core';
|
|
10
9
|
import * as i2$2 from '@acorex/platform/workflow';
|
|
11
10
|
import { AXPWorkflowService, ofType, createWorkFlowEvent, AXPWorkflowAction, AXPWorkflowModule } from '@acorex/platform/workflow';
|
|
@@ -16,7 +15,7 @@ import { Subject, takeUntil } from 'rxjs';
|
|
|
16
15
|
import { AXPSessionService, AXPAuthGuard } from '@acorex/platform/auth';
|
|
17
16
|
import { AXPCommandService, AXPQueryService, provideCommandSetups, provideQuerySetups } from '@acorex/platform/runtime';
|
|
18
17
|
import { moveItemInArray } from '@angular/cdk/drag-drop';
|
|
19
|
-
import * as
|
|
18
|
+
import * as i6 from '@acorex/core/translation';
|
|
20
19
|
import { AXTranslationService, AXTranslationModule } from '@acorex/core/translation';
|
|
21
20
|
import { AXDialogService } from '@acorex/components/dialog';
|
|
22
21
|
import { AXLoadingDialogService } from '@acorex/components/loading-dialog';
|
|
@@ -29,10 +28,10 @@ import * as i3 from '@acorex/components/decorators';
|
|
|
29
28
|
import { AXDecoratorModule } from '@acorex/components/decorators';
|
|
30
29
|
import * as i4 from '@acorex/components/dropdown';
|
|
31
30
|
import { AXDropdownModule } from '@acorex/components/dropdown';
|
|
32
|
-
import * as
|
|
31
|
+
import * as i5 from '@angular/common';
|
|
33
32
|
import { CommonModule } from '@angular/common';
|
|
34
33
|
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';
|
|
35
|
-
import * as i1$
|
|
34
|
+
import * as i1$1 from '@angular/forms';
|
|
36
35
|
import { FormsModule } from '@angular/forms';
|
|
37
36
|
import * as i4$1 from '@acorex/components/loading';
|
|
38
37
|
import { AXLoadingModule } from '@acorex/components/loading';
|
|
@@ -40,22 +39,18 @@ import * as i1 from '@acorex/components/badge';
|
|
|
40
39
|
import { AXBadgeModule } from '@acorex/components/badge';
|
|
41
40
|
import * as i5$1 from '@acorex/components/form';
|
|
42
41
|
import { AXFormModule } from '@acorex/components/form';
|
|
43
|
-
import * as
|
|
44
|
-
import {
|
|
45
|
-
import * as i7
|
|
42
|
+
import * as i6$2 from '@acorex/components/search-box';
|
|
43
|
+
import { AXSearchBoxComponent, AXSearchBoxModule } from '@acorex/components/search-box';
|
|
44
|
+
import * as i7 from '@acorex/components/select-box';
|
|
46
45
|
import { AXSelectBoxModule } from '@acorex/components/select-box';
|
|
47
|
-
import * as i6 from '@acorex/components/tag-box';
|
|
46
|
+
import * as i6$1 from '@acorex/components/tag-box';
|
|
48
47
|
import { AXTagBoxComponent, AXTagBoxModule } from '@acorex/components/tag-box';
|
|
49
48
|
import { AXValidationModule } from '@acorex/core/validation';
|
|
50
|
-
import
|
|
51
|
-
import { AXDataTableModule } from '@acorex/components/data-table';
|
|
52
|
-
import { AXDropdownButtonModule } from '@acorex/components/dropdown-button';
|
|
53
|
-
import { AXBasePageComponent } from '@acorex/components/page';
|
|
49
|
+
import { AXPDataSelectorService, AXPWidgetPropertyViewerComponent } from '@acorex/platform/layout/components';
|
|
54
50
|
import * as i2 from '@acorex/components/popover';
|
|
55
51
|
import { AXPopoverModule } from '@acorex/components/popover';
|
|
56
52
|
import * as i2$1 from '@acorex/components/text-box';
|
|
57
53
|
import { AXTextBoxModule, AXTextBoxComponent } from '@acorex/components/text-box';
|
|
58
|
-
import { AXPWidgetPropertyViewerComponent } from '@acorex/platform/layout/components';
|
|
59
54
|
import { transform, isEqual } from 'lodash';
|
|
60
55
|
|
|
61
56
|
const AXP_DATA_SEEDER_TOKEN = new InjectionToken('AXP_DATA_SEEDER_TOKEN');
|
|
@@ -369,7 +364,7 @@ class AXPEntityDetailListViewModel {
|
|
|
369
364
|
module: this.detailEntity()?.module,
|
|
370
365
|
title: this.detailEntity()?.title,
|
|
371
366
|
parentKey: this.detailEntity()?.parentKey,
|
|
372
|
-
source: this.detailEntity()?.
|
|
367
|
+
source: `${this.detailEntity()?.module}.${this.detailEntity()?.name}`,
|
|
373
368
|
},
|
|
374
369
|
options,
|
|
375
370
|
});
|
|
@@ -437,13 +432,6 @@ function createModifierContext(entity) {
|
|
|
437
432
|
return ctx;
|
|
438
433
|
},
|
|
439
434
|
},
|
|
440
|
-
source: {
|
|
441
|
-
get: () => entity.source,
|
|
442
|
-
set: (newValue) => {
|
|
443
|
-
entity.source = newValue;
|
|
444
|
-
return ctx;
|
|
445
|
-
},
|
|
446
|
-
},
|
|
447
435
|
parentKey: {
|
|
448
436
|
get: () => entity.parentKey,
|
|
449
437
|
set: (newValue) => {
|
|
@@ -1542,7 +1530,7 @@ class AXPEntityMasterListViewModel {
|
|
|
1542
1530
|
module: this.entityDef.module,
|
|
1543
1531
|
title: this.entityDef.title,
|
|
1544
1532
|
parentKey: this.entityDef.parentKey,
|
|
1545
|
-
source: this.entityDef.
|
|
1533
|
+
source: `${this.entityDef.module}.${this.entityDef.name}`,
|
|
1546
1534
|
},
|
|
1547
1535
|
data: action?.scope == AXPEntityCommandScope.Selected ? this.selectedItems() : data,
|
|
1548
1536
|
options: options,
|
|
@@ -1550,7 +1538,20 @@ class AXPEntityMasterListViewModel {
|
|
|
1550
1538
|
});
|
|
1551
1539
|
}
|
|
1552
1540
|
else {
|
|
1553
|
-
this.commandService.execute(command, options);
|
|
1541
|
+
// this.commandService.execute(command, options);
|
|
1542
|
+
this.commandService.execute(command, {
|
|
1543
|
+
entity: getEntityInfo(this.entityDef).source,
|
|
1544
|
+
entityInfo: {
|
|
1545
|
+
name: this.entityDef.name,
|
|
1546
|
+
module: this.entityDef.module,
|
|
1547
|
+
title: this.entityDef.title,
|
|
1548
|
+
parentKey: this.entityDef.parentKey,
|
|
1549
|
+
source: `${this.entityDef.module}.${this.entityDef.name}`,
|
|
1550
|
+
},
|
|
1551
|
+
data: action?.scope == AXPEntityCommandScope.Selected ? this.selectedItems() : data,
|
|
1552
|
+
options: options,
|
|
1553
|
+
metadata: action?.metadata,
|
|
1554
|
+
});
|
|
1554
1555
|
}
|
|
1555
1556
|
}
|
|
1556
1557
|
async execute(command) {
|
|
@@ -1661,14 +1662,14 @@ class AXPEntityPerformDeleteAction extends AXPWorkflowAction {
|
|
|
1661
1662
|
// Create dialog config but don't show it yet
|
|
1662
1663
|
const createDialog = async () => {
|
|
1663
1664
|
dialog = this.loadingDialog.show({
|
|
1664
|
-
title: await this.translationService.translateAsync('workflow.deleting'),
|
|
1665
|
+
title: await this.translationService.translateAsync('@general:workflow.deleting'),
|
|
1665
1666
|
mode: 'determinate',
|
|
1666
1667
|
status: 'Deleting...',
|
|
1667
1668
|
progressValue: 0,
|
|
1668
1669
|
text: `0/${idLength}`,
|
|
1669
1670
|
buttons: [
|
|
1670
1671
|
{
|
|
1671
|
-
text: await this.translationService.translateAsync('cancel'),
|
|
1672
|
+
text: await this.translationService.translateAsync('@general:actions.cancel.title'),
|
|
1672
1673
|
color: 'danger',
|
|
1673
1674
|
onClick: () => {
|
|
1674
1675
|
if (dialog) {
|
|
@@ -1729,7 +1730,7 @@ class AXPEntityPerformDeleteAction extends AXPWorkflowAction {
|
|
|
1729
1730
|
if (successfulPromises > 0 && failedPromises === 0) {
|
|
1730
1731
|
// All items deleted successfully
|
|
1731
1732
|
if (showResult) {
|
|
1732
|
-
await this.dialogService.alert(await this.translationService.translateAsync('workflow.success-delete-title'), await this.translationService.translateAsync('workflow.success-delete-body', {
|
|
1733
|
+
await this.dialogService.alert(await this.translationService.translateAsync('@general:workflow.success-delete-title'), await this.translationService.translateAsync('@general:workflow.success-delete-body', {
|
|
1733
1734
|
params: { item: successfulPromises },
|
|
1734
1735
|
}), //TODO test translation
|
|
1735
1736
|
'success');
|
|
@@ -1741,7 +1742,7 @@ class AXPEntityPerformDeleteAction extends AXPWorkflowAction {
|
|
|
1741
1742
|
else if (successfulPromises > 0 && failedPromises > 0) {
|
|
1742
1743
|
// Some items deleted successfully, some failed
|
|
1743
1744
|
if (showResult) {
|
|
1744
|
-
await this.dialogService.alert(await this.translationService.translateAsync('workflow.success-partial-delete-title'), await this.translationService.translateAsync('workflow.partial-delete-body', {
|
|
1745
|
+
await this.dialogService.alert(await this.translationService.translateAsync('@general:workflow.success-partial-delete-title'), await this.translationService.translateAsync('@general:workflow.partial-delete-body', {
|
|
1745
1746
|
params: { success: successfulPromises, fail: failedPromises },
|
|
1746
1747
|
}), 'warning');
|
|
1747
1748
|
}
|
|
@@ -1751,7 +1752,7 @@ class AXPEntityPerformDeleteAction extends AXPWorkflowAction {
|
|
|
1751
1752
|
else if (successfulPromises === 0 && failedPromises > 0) {
|
|
1752
1753
|
// No items deleted, all failed
|
|
1753
1754
|
if (showResult) {
|
|
1754
|
-
await this.dialogService.alert(await this.translationService.translateAsync('workflow.fail-delete-title'), await this.translationService.translateAsync('workflow.fail-delete-body', {
|
|
1755
|
+
await this.dialogService.alert(await this.translationService.translateAsync('@general:workflow.fail-delete-title'), await this.translationService.translateAsync('@general:workflow.fail-delete-body', {
|
|
1755
1756
|
params: { item: failedPromises },
|
|
1756
1757
|
}), 'danger');
|
|
1757
1758
|
}
|
|
@@ -1759,7 +1760,7 @@ class AXPEntityPerformDeleteAction extends AXPWorkflowAction {
|
|
|
1759
1760
|
else {
|
|
1760
1761
|
// No items to delete (no successful or failed promises)
|
|
1761
1762
|
if (showResult) {
|
|
1762
|
-
await this.dialogService.alert(await this.translationService.translateAsync('workflow.no-need'), await this.translationService.translateAsync('workflow.no-item'), 'primary');
|
|
1763
|
+
await this.dialogService.alert(await this.translationService.translateAsync('@general:workflow.no-need'), await this.translationService.translateAsync('@general:workflow.no-item'), 'primary');
|
|
1763
1764
|
}
|
|
1764
1765
|
}
|
|
1765
1766
|
}
|
|
@@ -1797,6 +1798,35 @@ const AXPDeleteEntityWorkflow = {
|
|
|
1797
1798
|
},
|
|
1798
1799
|
};
|
|
1799
1800
|
|
|
1801
|
+
class AXPEntityUpdateViewSectionViewModel {
|
|
1802
|
+
constructor(entity, section) {
|
|
1803
|
+
this.entity = entity;
|
|
1804
|
+
this.section = section;
|
|
1805
|
+
this.group = this.entity.groups?.find((c) => c.id == this.section.id);
|
|
1806
|
+
this.name = signal(this.group.id, ...(ngDevMode ? [{ debugName: "name" }] : []));
|
|
1807
|
+
this.title = computed(() => {
|
|
1808
|
+
return this.group.title ?? this.group.id;
|
|
1809
|
+
}, ...(ngDevMode ? [{ debugName: "title" }] : []));
|
|
1810
|
+
this.description = computed(() => {
|
|
1811
|
+
return this.group.description;
|
|
1812
|
+
}, ...(ngDevMode ? [{ debugName: "description" }] : []));
|
|
1813
|
+
this.layout = computed(() => {
|
|
1814
|
+
const source = cloneDeep(this.section.layout ?? {});
|
|
1815
|
+
set(source, 'positions.default.colSpan', 12);
|
|
1816
|
+
return source;
|
|
1817
|
+
}, ...(ngDevMode ? [{ debugName: "layout" }] : []));
|
|
1818
|
+
this.elements = computed(() => {
|
|
1819
|
+
const { interfaces, properties } = this.entity;
|
|
1820
|
+
const updateProps = interfaces?.master?.update?.properties ?? [];
|
|
1821
|
+
const updatePropNames = new Set(updateProps.map(({ name }) => name));
|
|
1822
|
+
const filteredProperties = properties.filter(({ groupId, schema, name }) => groupId === this.group.id && !schema.hidden && updatePropNames.has(name));
|
|
1823
|
+
return filteredProperties.map((property) => {
|
|
1824
|
+
const updateProp = updateProps.find(({ name }) => name === property.name);
|
|
1825
|
+
return new AXPEntityMasterUpdateElementViewModel(this.entity, property);
|
|
1826
|
+
});
|
|
1827
|
+
}, ...(ngDevMode ? [{ debugName: "elements" }] : []));
|
|
1828
|
+
}
|
|
1829
|
+
}
|
|
1800
1830
|
class AXPEntityMasterUpdateElementViewModel {
|
|
1801
1831
|
constructor(entity, property) {
|
|
1802
1832
|
this.entity = entity;
|
|
@@ -1862,6 +1892,13 @@ class AXPEntityMasterUpdateViewModel {
|
|
|
1862
1892
|
return new AXPEntityMasterUpdateElementViewModel(this.entityDef, e);
|
|
1863
1893
|
});
|
|
1864
1894
|
}, ...(ngDevMode ? [{ debugName: "elements" }] : []));
|
|
1895
|
+
this.sections = computed(() => {
|
|
1896
|
+
const { interfaces, properties } = this.entityDef;
|
|
1897
|
+
const updateProps = interfaces?.master?.update?.properties?.map(({ name }) => name) ?? [];
|
|
1898
|
+
const visibleProperties = properties.filter(({ groupId, schema, name }) => groupId && !schema.hidden && updateProps.includes(name));
|
|
1899
|
+
const sections = interfaces?.master?.update?.sections?.filter(({ id }) => visibleProperties.some(({ groupId }) => groupId === id)) ?? [];
|
|
1900
|
+
return sections.map((section) => new AXPEntityUpdateViewSectionViewModel(this.entityDef, section));
|
|
1901
|
+
}, ...(ngDevMode ? [{ debugName: "sections" }] : []));
|
|
1865
1902
|
}
|
|
1866
1903
|
async save() {
|
|
1867
1904
|
this.isInProgress.set(true);
|
|
@@ -2284,6 +2321,34 @@ const AXPEntityDetailViewModelResolver = (route, state, service = inject(AXPEnti
|
|
|
2284
2321
|
return service.create(moduleName, entityName, id);
|
|
2285
2322
|
};
|
|
2286
2323
|
|
|
2324
|
+
/**
|
|
2325
|
+
* Error type that can be thrown by middlewares to abort the chain with a structured payload.
|
|
2326
|
+
*/
|
|
2327
|
+
class AXPMiddlewareAbortError extends Error {
|
|
2328
|
+
constructor(message, options = {}) {
|
|
2329
|
+
super(message);
|
|
2330
|
+
this.message = message;
|
|
2331
|
+
this.options = options;
|
|
2332
|
+
this.name = 'AXPMiddlewareAbortError';
|
|
2333
|
+
}
|
|
2334
|
+
toResponse() {
|
|
2335
|
+
return {
|
|
2336
|
+
success: false,
|
|
2337
|
+
error: {
|
|
2338
|
+
code: this.options.code,
|
|
2339
|
+
message: this.message,
|
|
2340
|
+
status: this.options.status,
|
|
2341
|
+
details: this.options.details,
|
|
2342
|
+
},
|
|
2343
|
+
};
|
|
2344
|
+
}
|
|
2345
|
+
}
|
|
2346
|
+
/** Type guard for AXPMiddlewareAbortError */
|
|
2347
|
+
function isAXPMiddlewareAbortError(error) {
|
|
2348
|
+
return error instanceof AXPMiddlewareAbortError;
|
|
2349
|
+
}
|
|
2350
|
+
//#endregion
|
|
2351
|
+
|
|
2287
2352
|
const AXP_ENTITY_STORAGE_BACKEND = new InjectionToken('AXP_ENTITY_STORAGE_BACKEND');
|
|
2288
2353
|
const AXP_ENTITY_STORAGE_MIDDLEWARE = new InjectionToken('AXP_ENTITY_STORAGE_MIDDLEWARE');
|
|
2289
2354
|
|
|
@@ -2326,6 +2391,7 @@ class AXMEntityCrudServiceImpl {
|
|
|
2326
2391
|
this._storageService = inject(AXPEntityStorageService);
|
|
2327
2392
|
this.entityRegistery = inject(AXPEntityDefinitionRegistryService);
|
|
2328
2393
|
this._entityDataProvider = new AXPEntityDataProviderImpl(this._storageService, this.entityName);
|
|
2394
|
+
this._entityCategoryDataProvider = new AXPEntityDataProviderImpl(this._storageService, `${this.entityName}Category`);
|
|
2329
2395
|
}
|
|
2330
2396
|
async insertOne(request) {
|
|
2331
2397
|
return this._entityDataProvider.insertOne(request);
|
|
@@ -2405,6 +2471,9 @@ class AXMEntityCrudServiceImpl {
|
|
|
2405
2471
|
const result = await this._entityDataProvider.query(queryRequest);
|
|
2406
2472
|
return result;
|
|
2407
2473
|
}
|
|
2474
|
+
async getCategoriesList(request = { skip: 0, take: 1000 }) {
|
|
2475
|
+
return this._entityCategoryDataProvider.query(request);
|
|
2476
|
+
}
|
|
2408
2477
|
get storageService() {
|
|
2409
2478
|
return this._storageService;
|
|
2410
2479
|
}
|
|
@@ -2461,8 +2530,10 @@ class AXPMiddlewareEntityStorageService extends AXPEntityStorageService {
|
|
|
2461
2530
|
entityName,
|
|
2462
2531
|
locals: new Map(),
|
|
2463
2532
|
backend: {
|
|
2464
|
-
|
|
2465
|
-
|
|
2533
|
+
getOne: (name, id) => this.backend.getOne(name, id),
|
|
2534
|
+
insertOne: (name, e) => this.backend.insertOne(name, e),
|
|
2535
|
+
query: (name, request) => this.backend.query(name, request),
|
|
2536
|
+
updateOne: (name, id, data) => this.backend.updateOne(name, id, data),
|
|
2466
2537
|
},
|
|
2467
2538
|
...init,
|
|
2468
2539
|
};
|
|
@@ -2865,13 +2936,13 @@ class AXPPageDetailsConverter extends AXPBaseRelatedEntityConverter {
|
|
|
2865
2936
|
return {
|
|
2866
2937
|
commands: {
|
|
2867
2938
|
reject: {
|
|
2868
|
-
title: '
|
|
2939
|
+
title: '@general:actions.discard.title',
|
|
2869
2940
|
color: 'default',
|
|
2870
2941
|
visible: '{{context.isDirty()}}',
|
|
2871
2942
|
command: { name: 'discard' },
|
|
2872
2943
|
},
|
|
2873
2944
|
accept: {
|
|
2874
|
-
title: '
|
|
2945
|
+
title: '@general:actions.confirm.title',
|
|
2875
2946
|
color: 'secondary',
|
|
2876
2947
|
visible: '{{context.isDirty()}}',
|
|
2877
2948
|
command: { name: 'update-entity' },
|
|
@@ -3016,7 +3087,7 @@ class AXPPageListConverter extends AXPBaseRelatedEntityConverter {
|
|
|
3016
3087
|
module: entityDef.module,
|
|
3017
3088
|
title: entityDef.title,
|
|
3018
3089
|
parentKey: entityDef.parentKey,
|
|
3019
|
-
source: entityDef.
|
|
3090
|
+
source: `${entityDef.module}.${entityDef.name}`,
|
|
3020
3091
|
},
|
|
3021
3092
|
data: action.scope == AXPEntityCommandScope.Selected
|
|
3022
3093
|
? executeContext
|
|
@@ -3488,7 +3559,7 @@ class AXPMainEntityContentBuilder {
|
|
|
3488
3559
|
settings: {
|
|
3489
3560
|
commands: {
|
|
3490
3561
|
reject: {
|
|
3491
|
-
title: '
|
|
3562
|
+
title: '@general:actions.discard.title',
|
|
3492
3563
|
color: 'default',
|
|
3493
3564
|
visible: '{{context.isDirty()}}',
|
|
3494
3565
|
command: {
|
|
@@ -3496,7 +3567,7 @@ class AXPMainEntityContentBuilder {
|
|
|
3496
3567
|
},
|
|
3497
3568
|
},
|
|
3498
3569
|
accept: {
|
|
3499
|
-
title: '
|
|
3570
|
+
title: '@general:actions.confirm.title',
|
|
3500
3571
|
color: 'secondary',
|
|
3501
3572
|
visible: '{{context.isDirty()}}',
|
|
3502
3573
|
command: {
|
|
@@ -3518,57 +3589,68 @@ class AXPMainEntityContentBuilder {
|
|
|
3518
3589
|
};
|
|
3519
3590
|
},
|
|
3520
3591
|
execute: async (e, context) => {
|
|
3521
|
-
|
|
3522
|
-
|
|
3523
|
-
|
|
3524
|
-
|
|
3525
|
-
|
|
3526
|
-
|
|
3527
|
-
|
|
3528
|
-
|
|
3529
|
-
|
|
3530
|
-
|
|
3531
|
-
|
|
3532
|
-
|
|
3533
|
-
|
|
3534
|
-
|
|
3535
|
-
|
|
3536
|
-
|
|
3537
|
-
|
|
3592
|
+
try {
|
|
3593
|
+
if (e.name == 'update-entity') {
|
|
3594
|
+
const fn = entity?.commands?.update?.execute;
|
|
3595
|
+
const result = await fn(context);
|
|
3596
|
+
return {
|
|
3597
|
+
success: true,
|
|
3598
|
+
result: result,
|
|
3599
|
+
};
|
|
3600
|
+
}
|
|
3601
|
+
else {
|
|
3602
|
+
// Find action in single interface actions
|
|
3603
|
+
const action = actions.find((a) => a.name === e.name);
|
|
3604
|
+
if (action && dependencies?.workflowService) {
|
|
3605
|
+
// Evaluate action options with current context
|
|
3606
|
+
let evaluatedOptions = action.options;
|
|
3607
|
+
if (evaluateExpressions && action.options) {
|
|
3608
|
+
try {
|
|
3609
|
+
evaluatedOptions = await evaluateExpressions(action.options);
|
|
3610
|
+
}
|
|
3611
|
+
catch {
|
|
3612
|
+
// Keep original options if evaluation fails
|
|
3613
|
+
}
|
|
3538
3614
|
}
|
|
3539
|
-
|
|
3540
|
-
|
|
3615
|
+
const commandName = e.name.split('&')[0];
|
|
3616
|
+
if (this.workflowService.exists(commandName)) {
|
|
3617
|
+
await this.workflowService.execute(commandName, {
|
|
3618
|
+
entity: getEntityInfo(entity).source,
|
|
3619
|
+
data: context,
|
|
3620
|
+
entityInfo: {
|
|
3621
|
+
name: entity.name,
|
|
3622
|
+
module: entity.module,
|
|
3623
|
+
title: entity.title,
|
|
3624
|
+
parentKey: entity.parentKey,
|
|
3625
|
+
source: `${entity.module}.${entity.name}`,
|
|
3626
|
+
},
|
|
3627
|
+
options: evaluatedOptions,
|
|
3628
|
+
metadata: action.metadata,
|
|
3629
|
+
});
|
|
3630
|
+
return {
|
|
3631
|
+
success: true,
|
|
3632
|
+
};
|
|
3633
|
+
}
|
|
3634
|
+
if (this.commandService.exists(commandName)) {
|
|
3635
|
+
// check options for evaluation
|
|
3636
|
+
await this.commandService.execute(commandName, e.options);
|
|
3541
3637
|
}
|
|
3542
3638
|
}
|
|
3543
|
-
|
|
3544
|
-
|
|
3545
|
-
|
|
3546
|
-
|
|
3547
|
-
|
|
3548
|
-
|
|
3549
|
-
|
|
3550
|
-
module: entity.module,
|
|
3551
|
-
title: entity.title,
|
|
3552
|
-
parentKey: entity.parentKey,
|
|
3553
|
-
source: entity.source,
|
|
3554
|
-
},
|
|
3555
|
-
options: evaluatedOptions,
|
|
3556
|
-
metadata: action.metadata,
|
|
3557
|
-
});
|
|
3558
|
-
return {
|
|
3559
|
-
success: true,
|
|
3560
|
-
};
|
|
3561
|
-
}
|
|
3562
|
-
if (this.commandService.exists(commandName)) {
|
|
3563
|
-
// check options for evaluation
|
|
3564
|
-
await this.commandService.execute(commandName, e.options);
|
|
3565
|
-
}
|
|
3639
|
+
return {
|
|
3640
|
+
success: false,
|
|
3641
|
+
error: {
|
|
3642
|
+
code: 'invalid_command',
|
|
3643
|
+
message: 'Invalid command',
|
|
3644
|
+
},
|
|
3645
|
+
};
|
|
3566
3646
|
}
|
|
3647
|
+
}
|
|
3648
|
+
catch (error) {
|
|
3567
3649
|
return {
|
|
3568
3650
|
success: false,
|
|
3569
3651
|
error: {
|
|
3570
|
-
|
|
3571
|
-
message:
|
|
3652
|
+
//TODO: handle error as object
|
|
3653
|
+
message: error,
|
|
3572
3654
|
},
|
|
3573
3655
|
};
|
|
3574
3656
|
}
|
|
@@ -4239,7 +4321,7 @@ class AXPEntityListTableService {
|
|
|
4239
4321
|
module: entity.module,
|
|
4240
4322
|
title: entity.title,
|
|
4241
4323
|
parentKey: entity.parentKey,
|
|
4242
|
-
source: entity.
|
|
4324
|
+
source: `${entity.module}.${entity.name}`,
|
|
4243
4325
|
},
|
|
4244
4326
|
data: action?.scope == AXPEntityCommandScope.Selected ? selectedRows : data,
|
|
4245
4327
|
options: options,
|
|
@@ -4515,7 +4597,7 @@ class AXPEntityListWidgetViewComponent extends AXPValueWidgetComponent {
|
|
|
4515
4597
|
module: this.entity()?.module,
|
|
4516
4598
|
title: this.entity()?.title,
|
|
4517
4599
|
parentKey: this.entity()?.parentKey,
|
|
4518
|
-
source: this.entity()?.
|
|
4600
|
+
source: `${this.entity()?.module}.${this.entity()?.name}`,
|
|
4519
4601
|
},
|
|
4520
4602
|
data: action?.scope == AXPEntityCommandScope.Selected
|
|
4521
4603
|
? this.selectedItems()
|
|
@@ -4720,7 +4802,7 @@ class AXPEntityListWidgetViewComponent extends AXPValueWidgetComponent {
|
|
|
4720
4802
|
<ax-button
|
|
4721
4803
|
[class.ax-sm]="layoutThemeService.isSmall()"
|
|
4722
4804
|
[iconOnly]="layoutThemeService.isSmall()"
|
|
4723
|
-
[text]="'actions'"
|
|
4805
|
+
[text]="'@general:terms.workflow.actions' | translate | async"
|
|
4724
4806
|
[look]="layoutThemeService.isSmall() ? 'blank' : 'solid'"
|
|
4725
4807
|
[color]="'default'"
|
|
4726
4808
|
>
|
|
@@ -4774,7 +4856,7 @@ class AXPEntityListWidgetViewComponent extends AXPValueWidgetComponent {
|
|
|
4774
4856
|
></ng-container>
|
|
4775
4857
|
}
|
|
4776
4858
|
</div>
|
|
4777
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { 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: AXPLayoutBuilderModule }, { kind: "directive", type: i3$1.AXPWidgetRendererDirective, selector: "[axp-widget-renderer]", inputs: ["parentNode", "index", "mode", "node"], outputs: ["onOptionsChanged", "onValueChanged"], exportAs: ["widgetRenderer"] }, { 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: "component", type: i3$2.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i3$2.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i4.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
4859
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { 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: AXPLayoutBuilderModule }, { kind: "directive", type: i3$1.AXPWidgetRendererDirective, selector: "[axp-widget-renderer]", inputs: ["parentNode", "index", "mode", "node"], outputs: ["onOptionsChanged", "onValueChanged"], exportAs: ["widgetRenderer"] }, { 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: "component", type: i3$2.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i3$2.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i4.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
4778
4860
|
}
|
|
4779
4861
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPEntityListWidgetViewComponent, decorators: [{
|
|
4780
4862
|
type: Component,
|
|
@@ -4826,7 +4908,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImpor
|
|
|
4826
4908
|
<ax-button
|
|
4827
4909
|
[class.ax-sm]="layoutThemeService.isSmall()"
|
|
4828
4910
|
[iconOnly]="layoutThemeService.isSmall()"
|
|
4829
|
-
[text]="'actions'"
|
|
4911
|
+
[text]="'@general:terms.workflow.actions' | translate | async"
|
|
4830
4912
|
[look]="layoutThemeService.isSmall() ? 'blank' : 'solid'"
|
|
4831
4913
|
[color]="'default'"
|
|
4832
4914
|
>
|
|
@@ -4887,7 +4969,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImpor
|
|
|
4887
4969
|
},
|
|
4888
4970
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
4889
4971
|
providers: [AXPEntityListTableService, AXPEntityListToolbarService],
|
|
4890
|
-
imports: [CommonModule, AXDecoratorModule, AXPLayoutBuilderModule, AXButtonModule, AXDropdownModule],
|
|
4972
|
+
imports: [CommonModule, AXDecoratorModule, AXPLayoutBuilderModule, AXButtonModule, AXDropdownModule, AXTranslationModule],
|
|
4891
4973
|
}]
|
|
4892
4974
|
}] });
|
|
4893
4975
|
|
|
@@ -5178,383 +5260,193 @@ var lookupWidgetView_component = /*#__PURE__*/Object.freeze({
|
|
|
5178
5260
|
AXPLookupWidgetViewComponent: AXPLookupWidgetViewComponent
|
|
5179
5261
|
});
|
|
5180
5262
|
|
|
5181
|
-
|
|
5263
|
+
//#endregion
|
|
5264
|
+
class AXPEntityDataSelectorService {
|
|
5182
5265
|
constructor() {
|
|
5183
|
-
|
|
5184
|
-
this.
|
|
5185
|
-
this.
|
|
5186
|
-
this.
|
|
5187
|
-
this.allowSelect = computed(() => this.selectedItems().length > 0, ...(ngDevMode ? [{ debugName: "allowSelect" }] : []));
|
|
5188
|
-
}
|
|
5189
|
-
ngAfterViewInit() {
|
|
5190
|
-
if (this.initialSelectedItems.length > 0 && this.grid()) {
|
|
5191
|
-
this.grid()?.selectRows(...this.initialSelectedItems);
|
|
5192
|
-
}
|
|
5193
|
-
if (this.searchTerm) {
|
|
5194
|
-
this.vm.applyInlineFilter(this.searchTerm);
|
|
5195
|
-
}
|
|
5196
|
-
else {
|
|
5197
|
-
this.vm.applyFilterAndSort();
|
|
5198
|
-
}
|
|
5266
|
+
//#region ---- Services & Dependencies ----
|
|
5267
|
+
this.dataSelectorService = inject(AXPDataSelectorService);
|
|
5268
|
+
this.filterOperatorMiddleware = inject(AXPFilterOperatorMiddlewareService);
|
|
5269
|
+
this.widgetResolver = inject(AXPWidgetRegistryService);
|
|
5199
5270
|
}
|
|
5200
|
-
|
|
5201
|
-
|
|
5271
|
+
//#endregion
|
|
5272
|
+
//#region ---- Public Methods ----
|
|
5273
|
+
/**
|
|
5274
|
+
* Open entity data selector popup
|
|
5275
|
+
*/
|
|
5276
|
+
async open(options) {
|
|
5277
|
+
const config = this.createDataSelectorConfig(options);
|
|
5278
|
+
const result = await this.dataSelectorService.open(config);
|
|
5279
|
+
return result;
|
|
5202
5280
|
}
|
|
5203
|
-
|
|
5204
|
-
|
|
5205
|
-
|
|
5206
|
-
|
|
5207
|
-
|
|
5208
|
-
|
|
5209
|
-
|
|
5210
|
-
|
|
5211
|
-
|
|
5212
|
-
|
|
5213
|
-
|
|
5214
|
-
|
|
5215
|
-
}
|
|
5216
|
-
|
|
5217
|
-
|
|
5218
|
-
}
|
|
5219
|
-
else {
|
|
5220
|
-
this.selectedItems.set([e.data]);
|
|
5221
|
-
}
|
|
5281
|
+
/**
|
|
5282
|
+
* Open entity data selector with category filter
|
|
5283
|
+
*/
|
|
5284
|
+
async openWithCategoryFilter(options, categoryFilterConfig) {
|
|
5285
|
+
const config = this.createDataSelectorConfig({
|
|
5286
|
+
...options,
|
|
5287
|
+
allowCreate: false
|
|
5288
|
+
});
|
|
5289
|
+
// Add category filter to config
|
|
5290
|
+
config.categoryFilter = {
|
|
5291
|
+
enabled: true,
|
|
5292
|
+
...categoryFilterConfig
|
|
5293
|
+
};
|
|
5294
|
+
const result = await this.dataSelectorService.open(config);
|
|
5295
|
+
return result;
|
|
5222
5296
|
}
|
|
5223
|
-
|
|
5224
|
-
|
|
5297
|
+
//#endregion
|
|
5298
|
+
//#region ---- Private Methods ----
|
|
5299
|
+
/**
|
|
5300
|
+
* Create data selector configuration from entity options
|
|
5301
|
+
*/
|
|
5302
|
+
createDataSelectorConfig(options) {
|
|
5303
|
+
const dataSource = this.createDataSource(options);
|
|
5304
|
+
const columns = this.createColumns(options);
|
|
5305
|
+
const searchFields = this.getSearchFields(options);
|
|
5306
|
+
return {
|
|
5307
|
+
title: options.title,
|
|
5308
|
+
dataSource,
|
|
5309
|
+
columns,
|
|
5310
|
+
selectionMode: options.allowMultiple ? 'multiple' : 'single',
|
|
5311
|
+
searchFields,
|
|
5312
|
+
parentField: options.entity.parentKey,
|
|
5313
|
+
allowCreate: options.allowCreate ?? this.canCreate(options.entity),
|
|
5314
|
+
// Note: Custom filters will be applied to the dataSource in createDataSource
|
|
5315
|
+
};
|
|
5225
5316
|
}
|
|
5226
|
-
|
|
5227
|
-
|
|
5228
|
-
|
|
5229
|
-
|
|
5230
|
-
|
|
5231
|
-
|
|
5232
|
-
this.close();
|
|
5233
|
-
await this.vm.create();
|
|
5234
|
-
}
|
|
5235
|
-
handleCloseClick() {
|
|
5236
|
-
this.close();
|
|
5237
|
-
}
|
|
5238
|
-
handleSelectClick() {
|
|
5239
|
-
this.close({ items: this.selectedItems() });
|
|
5240
|
-
}
|
|
5241
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPLookupWidgetSelectorComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
5242
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.8", type: AXPLookupWidgetSelectorComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "grid", first: true, predicate: ["grid"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
|
|
5243
|
-
<div class="ax-p-4 ax-flex ax-flex-col ax-gap-4 ax-overflow-hidden">
|
|
5244
|
-
@if (vm.hasInlineFilters()) {
|
|
5245
|
-
<div class="ax-w-full">
|
|
5246
|
-
<ax-search-box
|
|
5247
|
-
[placeholder]="('widget.lookup.search' | translate | async) + vm.inlineFiltersPlaceholders().join(', ')"
|
|
5248
|
-
[value]="searchTerm"
|
|
5249
|
-
(onValueChanged)="handleChangeSearchValue($event)"
|
|
5250
|
-
[axAutoFocus]="true"
|
|
5251
|
-
><ax-clear-button></ax-clear-button
|
|
5252
|
-
></ax-search-box>
|
|
5253
|
-
</div>
|
|
5254
|
-
}
|
|
5255
|
-
<ax-data-table
|
|
5256
|
-
#grid
|
|
5257
|
-
[showFooter]="false"
|
|
5258
|
-
class="ax-h-[50vh]"
|
|
5259
|
-
[paging]="true"
|
|
5260
|
-
[fetchDataMode]="'manual'"
|
|
5261
|
-
[loading]="{ enabled: true, animation: true }"
|
|
5262
|
-
[dataSource]="vm.dataSource"
|
|
5263
|
-
[parentField]="vm.parentKey()"
|
|
5264
|
-
(selectedRowsChange)="handleSelectedRowsChange($event)"
|
|
5265
|
-
(onRowClick)="handleRowClick($event)"
|
|
5266
|
-
(onRowDbClick)="handleRowDbClick($event)"
|
|
5267
|
-
>
|
|
5268
|
-
@if (vm.allowMultiple()) {
|
|
5269
|
-
<ax-select-column fixed="start" [width]="'50px'"></ax-select-column>
|
|
5270
|
-
}
|
|
5271
|
-
@for (col of vm.columns(); track col.name) {
|
|
5272
|
-
@if (col.visible) {
|
|
5273
|
-
<axp-widget-column-renderer
|
|
5274
|
-
[expandHandler]="$index === 0 && vm.parentKey() ? true : false"
|
|
5275
|
-
[caption]="col.title | translate | async"
|
|
5276
|
-
[node]="col.node()"
|
|
5277
|
-
></axp-widget-column-renderer>
|
|
5278
|
-
}
|
|
5279
|
-
}
|
|
5280
|
-
</ax-data-table>
|
|
5281
|
-
</div>
|
|
5282
|
-
<ax-footer>
|
|
5283
|
-
<ax-suffix>
|
|
5284
|
-
<ax-button look="solid" [text]="('close' | translate | async)!" (onClick)="handleCloseClick()"> </ax-button>
|
|
5285
|
-
<ax-button
|
|
5286
|
-
look="solid"
|
|
5287
|
-
color="primary"
|
|
5288
|
-
[text]="('select' | translate | async)!"
|
|
5289
|
-
(onClick)="handleSelectClick()"
|
|
5290
|
-
[disabled]="allowSelect() === false"
|
|
5291
|
-
>
|
|
5292
|
-
</ax-button>
|
|
5293
|
-
@if (!vm.canCreate()) {
|
|
5294
|
-
<ax-button
|
|
5295
|
-
look="solid"
|
|
5296
|
-
color="primary"
|
|
5297
|
-
[text]="'Create-New' | translate | async"
|
|
5298
|
-
(onClick)="handleCreateNewClick()"
|
|
5299
|
-
>
|
|
5300
|
-
<ax-prefix>
|
|
5301
|
-
<ax-icon icon="fa-solid fa-add"></ax-icon>
|
|
5302
|
-
</ax-prefix>
|
|
5303
|
-
</ax-button>
|
|
5304
|
-
}
|
|
5305
|
-
</ax-suffix>
|
|
5306
|
-
</ax-footer>
|
|
5307
|
-
`, 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 }); }
|
|
5308
|
-
}
|
|
5309
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPLookupWidgetSelectorComponent, decorators: [{
|
|
5310
|
-
type: Component,
|
|
5311
|
-
args: [{
|
|
5312
|
-
template: `
|
|
5313
|
-
<div class="ax-p-4 ax-flex ax-flex-col ax-gap-4 ax-overflow-hidden">
|
|
5314
|
-
@if (vm.hasInlineFilters()) {
|
|
5315
|
-
<div class="ax-w-full">
|
|
5316
|
-
<ax-search-box
|
|
5317
|
-
[placeholder]="('widget.lookup.search' | translate | async) + vm.inlineFiltersPlaceholders().join(', ')"
|
|
5318
|
-
[value]="searchTerm"
|
|
5319
|
-
(onValueChanged)="handleChangeSearchValue($event)"
|
|
5320
|
-
[axAutoFocus]="true"
|
|
5321
|
-
><ax-clear-button></ax-clear-button
|
|
5322
|
-
></ax-search-box>
|
|
5323
|
-
</div>
|
|
5324
|
-
}
|
|
5325
|
-
<ax-data-table
|
|
5326
|
-
#grid
|
|
5327
|
-
[showFooter]="false"
|
|
5328
|
-
class="ax-h-[50vh]"
|
|
5329
|
-
[paging]="true"
|
|
5330
|
-
[fetchDataMode]="'manual'"
|
|
5331
|
-
[loading]="{ enabled: true, animation: true }"
|
|
5332
|
-
[dataSource]="vm.dataSource"
|
|
5333
|
-
[parentField]="vm.parentKey()"
|
|
5334
|
-
(selectedRowsChange)="handleSelectedRowsChange($event)"
|
|
5335
|
-
(onRowClick)="handleRowClick($event)"
|
|
5336
|
-
(onRowDbClick)="handleRowDbClick($event)"
|
|
5337
|
-
>
|
|
5338
|
-
@if (vm.allowMultiple()) {
|
|
5339
|
-
<ax-select-column fixed="start" [width]="'50px'"></ax-select-column>
|
|
5340
|
-
}
|
|
5341
|
-
@for (col of vm.columns(); track col.name) {
|
|
5342
|
-
@if (col.visible) {
|
|
5343
|
-
<axp-widget-column-renderer
|
|
5344
|
-
[expandHandler]="$index === 0 && vm.parentKey() ? true : false"
|
|
5345
|
-
[caption]="col.title | translate | async"
|
|
5346
|
-
[node]="col.node()"
|
|
5347
|
-
></axp-widget-column-renderer>
|
|
5348
|
-
}
|
|
5349
|
-
}
|
|
5350
|
-
</ax-data-table>
|
|
5351
|
-
</div>
|
|
5352
|
-
<ax-footer>
|
|
5353
|
-
<ax-suffix>
|
|
5354
|
-
<ax-button look="solid" [text]="('close' | translate | async)!" (onClick)="handleCloseClick()"> </ax-button>
|
|
5355
|
-
<ax-button
|
|
5356
|
-
look="solid"
|
|
5357
|
-
color="primary"
|
|
5358
|
-
[text]="('select' | translate | async)!"
|
|
5359
|
-
(onClick)="handleSelectClick()"
|
|
5360
|
-
[disabled]="allowSelect() === false"
|
|
5361
|
-
>
|
|
5362
|
-
</ax-button>
|
|
5363
|
-
@if (!vm.canCreate()) {
|
|
5364
|
-
<ax-button
|
|
5365
|
-
look="solid"
|
|
5366
|
-
color="primary"
|
|
5367
|
-
[text]="'Create-New' | translate | async"
|
|
5368
|
-
(onClick)="handleCreateNewClick()"
|
|
5369
|
-
>
|
|
5370
|
-
<ax-prefix>
|
|
5371
|
-
<ax-icon icon="fa-solid fa-add"></ax-icon>
|
|
5372
|
-
</ax-prefix>
|
|
5373
|
-
</ax-button>
|
|
5374
|
-
}
|
|
5375
|
-
</ax-suffix>
|
|
5376
|
-
</ax-footer>
|
|
5377
|
-
`,
|
|
5378
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
5379
|
-
imports: [
|
|
5380
|
-
CommonModule,
|
|
5381
|
-
AXCommonModule,
|
|
5382
|
-
AXButtonModule,
|
|
5383
|
-
AXFormModule,
|
|
5384
|
-
AXDecoratorModule,
|
|
5385
|
-
AXDropdownButtonModule,
|
|
5386
|
-
AXDataTableModule,
|
|
5387
|
-
AXSearchBoxModule,
|
|
5388
|
-
AXPLayoutBuilderModule,
|
|
5389
|
-
AXTranslationModule,
|
|
5390
|
-
],
|
|
5391
|
-
inputs: [],
|
|
5392
|
-
}]
|
|
5393
|
-
}] });
|
|
5394
|
-
|
|
5395
|
-
class AXPLookupWidgetSelectorViewModel {
|
|
5396
|
-
constructor(injector, entityDef, options = {
|
|
5397
|
-
parentFilters: null,
|
|
5398
|
-
customFilter: null,
|
|
5399
|
-
sortedFields: [],
|
|
5400
|
-
columns: [],
|
|
5401
|
-
}) {
|
|
5402
|
-
this.injector = injector;
|
|
5403
|
-
this.entityDef = entityDef;
|
|
5404
|
-
this.options = options;
|
|
5405
|
-
this.workflow = this.injector.get(AXPWorkflowService);
|
|
5406
|
-
this.filterOperatorMiddleware = this.injector.get(AXPFilterOperatorMiddlewareService);
|
|
5407
|
-
this.widgetResolver = this.injector.get(AXPWidgetRegistryService);
|
|
5408
|
-
this.dataSource = new AXDataSource({
|
|
5317
|
+
/**
|
|
5318
|
+
* Create data source from entity definition
|
|
5319
|
+
*/
|
|
5320
|
+
createDataSource(options) {
|
|
5321
|
+
const { entity, customFilter, parentFilters } = options;
|
|
5322
|
+
return new AXDataSource({
|
|
5409
5323
|
byKey: (key) => {
|
|
5410
|
-
const func =
|
|
5324
|
+
const func = entity.queries.byKey.execute;
|
|
5411
5325
|
return func();
|
|
5412
5326
|
},
|
|
5413
5327
|
load: (e) => {
|
|
5414
|
-
const func =
|
|
5415
|
-
this.
|
|
5328
|
+
const func = entity.queries.list?.execute;
|
|
5329
|
+
this.mergeFilters(e, customFilter, parentFilters);
|
|
5416
5330
|
return func(e);
|
|
5417
5331
|
},
|
|
5418
5332
|
pageSize: 10,
|
|
5419
5333
|
key: 'id',
|
|
5420
5334
|
});
|
|
5421
|
-
|
|
5422
|
-
|
|
5423
|
-
|
|
5424
|
-
|
|
5425
|
-
|
|
5426
|
-
|
|
5427
|
-
|
|
5428
|
-
|
|
5429
|
-
|
|
5430
|
-
|
|
5431
|
-
|
|
5432
|
-
|
|
5433
|
-
|
|
5434
|
-
|
|
5435
|
-
|
|
5436
|
-
|
|
5437
|
-
|
|
5438
|
-
|
|
5439
|
-
|
|
5440
|
-
|
|
5441
|
-
|
|
5442
|
-
|
|
5443
|
-
|
|
5444
|
-
|
|
5445
|
-
|
|
5446
|
-
|
|
5447
|
-
|
|
5448
|
-
|
|
5449
|
-
title: column.title ?? '',
|
|
5450
|
-
schema: {
|
|
5451
|
-
dataType: 'string',
|
|
5452
|
-
interface: {
|
|
5453
|
-
type: column.showAs.type,
|
|
5454
|
-
options: column.showAs.options,
|
|
5455
|
-
},
|
|
5335
|
+
}
|
|
5336
|
+
/**
|
|
5337
|
+
* Create columns configuration from entity definition
|
|
5338
|
+
*/
|
|
5339
|
+
createColumns(options) {
|
|
5340
|
+
const { entity, columns = [] } = options;
|
|
5341
|
+
const { columns: entityColumns = [], properties } = entity;
|
|
5342
|
+
const visibleProperties = properties.filter(({ schema }) => !schema?.hidden);
|
|
5343
|
+
const visiblePropNames = new Set(visibleProperties.map(({ name }) => name));
|
|
5344
|
+
return entityColumns
|
|
5345
|
+
.filter(({ name, showAs }) => visiblePropNames.has(name) || showAs)
|
|
5346
|
+
.filter(({ name }) => columns.length === 0 || columns.includes(name))
|
|
5347
|
+
.map((column) => {
|
|
5348
|
+
let property;
|
|
5349
|
+
let widgetType;
|
|
5350
|
+
let widgetOptions;
|
|
5351
|
+
if (column.showAs) {
|
|
5352
|
+
// Use custom column configuration
|
|
5353
|
+
const widgetConfig = this.widgetResolver.resolve(column.showAs.type);
|
|
5354
|
+
property = {
|
|
5355
|
+
...widgetConfig,
|
|
5356
|
+
name: column.name,
|
|
5357
|
+
title: column.title ?? '',
|
|
5358
|
+
schema: {
|
|
5359
|
+
dataType: 'string',
|
|
5360
|
+
interface: {
|
|
5361
|
+
type: column.showAs.type,
|
|
5362
|
+
options: column.showAs.options,
|
|
5456
5363
|
},
|
|
5457
|
-
}
|
|
5458
|
-
|
|
5459
|
-
|
|
5460
|
-
|
|
5461
|
-
|
|
5462
|
-
|
|
5364
|
+
},
|
|
5365
|
+
};
|
|
5366
|
+
widgetType = column.showAs.type;
|
|
5367
|
+
widgetOptions = column.showAs.options;
|
|
5368
|
+
}
|
|
5369
|
+
else {
|
|
5370
|
+
// Use entity property configuration
|
|
5371
|
+
property = visibleProperties.find(({ name }) => name === column.name);
|
|
5372
|
+
widgetType = property.schema?.interface?.type || 'text';
|
|
5373
|
+
widgetOptions = property.schema?.interface?.options || {};
|
|
5374
|
+
}
|
|
5375
|
+
return {
|
|
5376
|
+
name: column.name,
|
|
5377
|
+
title: property.title || column.title || column.name,
|
|
5378
|
+
visible: true,
|
|
5379
|
+
widget: {
|
|
5380
|
+
type: widgetType,
|
|
5381
|
+
options: widgetOptions
|
|
5463
5382
|
}
|
|
5464
|
-
}
|
|
5465
|
-
};
|
|
5466
|
-
this.inlineFilters = {
|
|
5467
|
-
field: null,
|
|
5468
|
-
logic: 'or',
|
|
5469
|
-
operator: null,
|
|
5470
|
-
filters: [],
|
|
5471
|
-
};
|
|
5472
|
-
this.advanceFilters = {
|
|
5473
|
-
field: null,
|
|
5474
|
-
logic: 'and',
|
|
5475
|
-
operator: null,
|
|
5476
|
-
filters: [],
|
|
5477
|
-
};
|
|
5478
|
-
}
|
|
5479
|
-
async create() {
|
|
5480
|
-
await this.workflow.execute('create-entity', {
|
|
5481
|
-
entity: getEntityInfo(this.entityDef).source,
|
|
5383
|
+
};
|
|
5482
5384
|
});
|
|
5483
5385
|
}
|
|
5484
|
-
|
|
5485
|
-
|
|
5486
|
-
|
|
5487
|
-
|
|
5488
|
-
|
|
5489
|
-
|
|
5490
|
-
|
|
5491
|
-
operator: {
|
|
5492
|
-
type: 'contains',
|
|
5493
|
-
},
|
|
5494
|
-
value,
|
|
5495
|
-
});
|
|
5496
|
-
});
|
|
5386
|
+
/**
|
|
5387
|
+
* Get searchable fields from entity properties
|
|
5388
|
+
*/
|
|
5389
|
+
getSearchFields(options) {
|
|
5390
|
+
const { entity, searchFields } = options;
|
|
5391
|
+
if (searchFields && searchFields.length > 0) {
|
|
5392
|
+
return searchFields;
|
|
5497
5393
|
}
|
|
5498
|
-
|
|
5499
|
-
|
|
5394
|
+
// Auto-detect searchable fields from entity properties
|
|
5395
|
+
return entity.properties
|
|
5396
|
+
.filter(p => p.options?.filter?.inline?.enabled)
|
|
5397
|
+
.map(p => p.name);
|
|
5500
5398
|
}
|
|
5501
|
-
|
|
5502
|
-
|
|
5503
|
-
|
|
5504
|
-
|
|
5505
|
-
|
|
5506
|
-
|
|
5507
|
-
|
|
5508
|
-
|
|
5509
|
-
|
|
5399
|
+
/**
|
|
5400
|
+
* Check if entity supports create operation
|
|
5401
|
+
*/
|
|
5402
|
+
canCreate(entity) {
|
|
5403
|
+
return entity.commands?.create?.execute != null;
|
|
5404
|
+
}
|
|
5405
|
+
/**
|
|
5406
|
+
* Merge custom and parent filters into data source query
|
|
5407
|
+
*/
|
|
5408
|
+
mergeFilters(request, customFilter, parentFilters) {
|
|
5409
|
+
if (!customFilter && !parentFilters) {
|
|
5410
|
+
return request;
|
|
5411
|
+
}
|
|
5510
5412
|
const filters = [];
|
|
5511
|
-
|
|
5512
|
-
|
|
5413
|
+
// Add custom filter
|
|
5414
|
+
if (customFilter) {
|
|
5415
|
+
const cleanedFilters = AXPCleanNestedFilters([customFilter]);
|
|
5513
5416
|
if (cleanedFilters.length > 0) {
|
|
5514
5417
|
filters.push(this.filterOperatorMiddleware.transformFilter(cleanedFilters[0]));
|
|
5515
5418
|
}
|
|
5516
5419
|
}
|
|
5517
|
-
|
|
5518
|
-
|
|
5519
|
-
|
|
5520
|
-
if (hasParentFilters && this.options.parentFilters) {
|
|
5521
|
-
filters.push(this.options.parentFilters);
|
|
5522
|
-
}
|
|
5523
|
-
// Apply the filters to the dataSource
|
|
5524
|
-
this.dataSource.filter({
|
|
5525
|
-
field: null,
|
|
5526
|
-
logic: 'and',
|
|
5527
|
-
operator: null,
|
|
5528
|
-
filters: filters,
|
|
5529
|
-
});
|
|
5530
|
-
// Refresh the dataSource
|
|
5531
|
-
this.dataSource.refresh();
|
|
5532
|
-
}
|
|
5533
|
-
async find(value) {
|
|
5534
|
-
this.applyInlineFilter(value.trim(), false);
|
|
5535
|
-
const func = this.entityDef.queries.list?.execute;
|
|
5536
|
-
return (await func({ filter: this.inlineFilters, take: 10 })) ?? [];
|
|
5537
|
-
}
|
|
5538
|
-
setCustomFilter(filter) {
|
|
5539
|
-
this.options.customFilter = filter;
|
|
5540
|
-
this.applyFilterAndSort();
|
|
5541
|
-
}
|
|
5542
|
-
mergeFilter(request, filter) {
|
|
5543
|
-
if (!filter) {
|
|
5544
|
-
return request;
|
|
5420
|
+
// Add parent filters
|
|
5421
|
+
if (parentFilters) {
|
|
5422
|
+
filters.push(parentFilters);
|
|
5545
5423
|
}
|
|
5424
|
+
// Merge with existing filter
|
|
5546
5425
|
if (request.filter) {
|
|
5547
5426
|
request.filter = {
|
|
5548
5427
|
logic: 'and',
|
|
5549
|
-
filters: [...[request.filter], ...
|
|
5428
|
+
filters: [...[request.filter], ...filters]
|
|
5550
5429
|
};
|
|
5551
5430
|
}
|
|
5552
5431
|
else {
|
|
5553
|
-
request.filter =
|
|
5432
|
+
request.filter = {
|
|
5433
|
+
field: null,
|
|
5434
|
+
logic: 'and',
|
|
5435
|
+
operator: null,
|
|
5436
|
+
filters: filters,
|
|
5437
|
+
};
|
|
5554
5438
|
}
|
|
5555
5439
|
return request;
|
|
5556
5440
|
}
|
|
5441
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPEntityDataSelectorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
5442
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPEntityDataSelectorService, providedIn: 'root' }); }
|
|
5557
5443
|
}
|
|
5444
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPEntityDataSelectorService, decorators: [{
|
|
5445
|
+
type: Injectable,
|
|
5446
|
+
args: [{
|
|
5447
|
+
providedIn: 'root'
|
|
5448
|
+
}]
|
|
5449
|
+
}] });
|
|
5558
5450
|
|
|
5559
5451
|
class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
|
|
5560
5452
|
constructor() {
|
|
@@ -5563,6 +5455,7 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
5563
5455
|
this.entityResolver = inject(AXPEntityResolver);
|
|
5564
5456
|
this.formatService = inject(AXFormatService);
|
|
5565
5457
|
this.popupService = inject(AXPopupService);
|
|
5458
|
+
this.entityDataSelectorService = inject(AXPEntityDataSelectorService);
|
|
5566
5459
|
this.translateService = inject(AXTranslationService);
|
|
5567
5460
|
this.expose = computed(() => this.options()['expose'], ...(ngDevMode ? [{ debugName: "expose" }] : []));
|
|
5568
5461
|
this.entity = computed(() => this.options()['entity'], ...(ngDevMode ? [{ debugName: "entity" }] : []));
|
|
@@ -5588,24 +5481,37 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
5588
5481
|
}, ...(ngDevMode ? [{ debugName: "selectedItemsText" }] : []));
|
|
5589
5482
|
this.valueField = computed(() => this.entityDef()?.properties.find((c) => c.name == 'id')?.name ?? 'id', ...(ngDevMode ? [{ debugName: "valueField" }] : []));
|
|
5590
5483
|
this.entityDef = signal(null, ...(ngDevMode ? [{ debugName: "entityDef" }] : []));
|
|
5484
|
+
this.dataSource = computed(() => {
|
|
5485
|
+
const entity = this.entityDef();
|
|
5486
|
+
if (!entity)
|
|
5487
|
+
return null;
|
|
5488
|
+
return new AXDataSource({
|
|
5489
|
+
byKey: (key) => {
|
|
5490
|
+
const func = entity.queries.byKey.execute;
|
|
5491
|
+
return func();
|
|
5492
|
+
},
|
|
5493
|
+
load: (e) => {
|
|
5494
|
+
const func = entity.queries.list?.execute;
|
|
5495
|
+
this.mergeFilter(e, this.customFilter());
|
|
5496
|
+
return func(e);
|
|
5497
|
+
},
|
|
5498
|
+
pageSize: 10,
|
|
5499
|
+
key: 'id',
|
|
5500
|
+
});
|
|
5501
|
+
}, ...(ngDevMode ? [{ debugName: "dataSource" }] : []));
|
|
5591
5502
|
this.searchTerm = signal(null, ...(ngDevMode ? [{ debugName: "searchTerm" }] : []));
|
|
5592
5503
|
this.selectedItems = signal([], ...(ngDevMode ? [{ debugName: "selectedItems" }] : []));
|
|
5593
5504
|
this.textbox = viewChild(AXTagBoxComponent, ...(ngDevMode ? [{ debugName: "textbox" }] : []));
|
|
5594
5505
|
this.isLoading = signal(false, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
|
|
5595
5506
|
this.isOpen = signal(false, ...(ngDevMode ? [{ debugName: "isOpen" }] : []));
|
|
5596
|
-
this.vm = signal(null, ...(ngDevMode ? [{ debugName: "vm" }] : []));
|
|
5597
5507
|
this.placeholder = computed(() => {
|
|
5598
5508
|
return this.selectedItems().length
|
|
5599
5509
|
? ''
|
|
5600
|
-
: this.translateService.translateSync('
|
|
5510
|
+
: this.translateService.translateSync('@general:widgets.lookup.search');
|
|
5601
5511
|
}, ...(ngDevMode ? [{ debugName: "placeholder" }] : []));
|
|
5602
5512
|
this.#efEntity = effect(async () => {
|
|
5603
5513
|
const [module, entity] = this.entity().split('.');
|
|
5604
5514
|
this.entityDef.set(await this.entityResolver.get(module, entity));
|
|
5605
|
-
this.vm.set(new AXPLookupWidgetSelectorViewModel(this.injector, this.entityDef(), {
|
|
5606
|
-
parentFilters: this.filter,
|
|
5607
|
-
allowMultiple: this.multiple(),
|
|
5608
|
-
}));
|
|
5609
5515
|
}, ...(ngDevMode ? [{ debugName: "#efEntity" }] : []));
|
|
5610
5516
|
this.#efValue = effect(() => {
|
|
5611
5517
|
if (this.getValue()) {
|
|
@@ -5615,15 +5521,9 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
5615
5521
|
this.clear();
|
|
5616
5522
|
}
|
|
5617
5523
|
}, ...(ngDevMode ? [{ debugName: "#efValue" }] : []));
|
|
5618
|
-
this.#efCustomFilter = effect(() => {
|
|
5619
|
-
if (this.customFilter()) {
|
|
5620
|
-
this.vm()?.setCustomFilter(this.customFilter());
|
|
5621
|
-
}
|
|
5622
|
-
}, ...(ngDevMode ? [{ debugName: "#efCustomFilter" }] : []));
|
|
5623
5524
|
}
|
|
5624
5525
|
#efEntity;
|
|
5625
5526
|
#efValue;
|
|
5626
|
-
#efCustomFilter;
|
|
5627
5527
|
async findByValue() {
|
|
5628
5528
|
this.isLoading.set(true);
|
|
5629
5529
|
const rawValue = this.getValue();
|
|
@@ -5648,31 +5548,29 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
5648
5548
|
handleOnClick(e) {
|
|
5649
5549
|
this.showSelector();
|
|
5650
5550
|
}
|
|
5651
|
-
showSelector() {
|
|
5551
|
+
async showSelector() {
|
|
5652
5552
|
this.isOpen.set(true);
|
|
5653
|
-
|
|
5654
|
-
|
|
5655
|
-
|
|
5656
|
-
|
|
5657
|
-
|
|
5658
|
-
|
|
5659
|
-
|
|
5660
|
-
|
|
5661
|
-
|
|
5662
|
-
|
|
5663
|
-
|
|
5664
|
-
|
|
5665
|
-
|
|
5666
|
-
|
|
5667
|
-
|
|
5668
|
-
|
|
5669
|
-
|
|
5553
|
+
try {
|
|
5554
|
+
const result = await this.entityDataSelectorService.open({
|
|
5555
|
+
entity: this.entityDef(),
|
|
5556
|
+
title: `${this.translateService.translateSync('@general:widgets.lookup.search')} ${this.translateService.translateSync(this.entityDef()?.formats.plural ?? '')}`,
|
|
5557
|
+
allowMultiple: this.multiple(),
|
|
5558
|
+
customFilter: this.customFilter(),
|
|
5559
|
+
parentFilters: this.filter,
|
|
5560
|
+
columns: this.columns(),
|
|
5561
|
+
allowCreate: true
|
|
5562
|
+
});
|
|
5563
|
+
if (result && 'items' in result) {
|
|
5564
|
+
this.setItems(result.items);
|
|
5565
|
+
}
|
|
5566
|
+
}
|
|
5567
|
+
catch (error) {
|
|
5568
|
+
console.error('Error opening entity data selector:', error);
|
|
5569
|
+
}
|
|
5570
|
+
finally {
|
|
5670
5571
|
this.isOpen.set(false);
|
|
5671
5572
|
this.textbox()?.focus();
|
|
5672
|
-
|
|
5673
|
-
this.setItems(e.data?.items);
|
|
5674
|
-
}
|
|
5675
|
-
});
|
|
5573
|
+
}
|
|
5676
5574
|
}
|
|
5677
5575
|
selectBoxValueChange(e) {
|
|
5678
5576
|
const items = e.component.selectedItems;
|
|
@@ -5701,7 +5599,7 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
5701
5599
|
this.searchTerm.set(value);
|
|
5702
5600
|
if ((keyEvent.code == 'Enter' || keyEvent.code == 'NumpadEnter') && value) {
|
|
5703
5601
|
this.isLoading.set(true);
|
|
5704
|
-
const result = await this.
|
|
5602
|
+
const result = await this.searchByValue(value);
|
|
5705
5603
|
if (result?.total == 1) {
|
|
5706
5604
|
this.setItems(result.items[0]);
|
|
5707
5605
|
}
|
|
@@ -5758,10 +5656,7 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
5758
5656
|
}
|
|
5759
5657
|
refresh() {
|
|
5760
5658
|
this.clear();
|
|
5761
|
-
|
|
5762
|
-
this.vm()?.setCustomFilter(this.customFilter());
|
|
5763
|
-
}
|
|
5764
|
-
this.vm()?.dataSource.refresh();
|
|
5659
|
+
this.dataSource()?.refresh();
|
|
5765
5660
|
}
|
|
5766
5661
|
clear() {
|
|
5767
5662
|
this.setValue(null);
|
|
@@ -5772,15 +5667,53 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
5772
5667
|
this.textbox()?.inputValue.set('');
|
|
5773
5668
|
this.searchTerm.set('');
|
|
5774
5669
|
}
|
|
5670
|
+
async searchByValue(value) {
|
|
5671
|
+
if (!this.entityDef())
|
|
5672
|
+
return null;
|
|
5673
|
+
const entity = this.entityDef();
|
|
5674
|
+
const searchFields = entity.properties.filter(p => p.options?.filter?.inline?.enabled);
|
|
5675
|
+
const inlineFilters = {
|
|
5676
|
+
field: null,
|
|
5677
|
+
logic: 'or',
|
|
5678
|
+
operator: null,
|
|
5679
|
+
filters: [],
|
|
5680
|
+
};
|
|
5681
|
+
if (value && searchFields.length > 0) {
|
|
5682
|
+
searchFields.forEach((p) => {
|
|
5683
|
+
inlineFilters.filters?.push({
|
|
5684
|
+
field: p.name,
|
|
5685
|
+
operator: { type: 'contains' },
|
|
5686
|
+
value,
|
|
5687
|
+
});
|
|
5688
|
+
});
|
|
5689
|
+
}
|
|
5690
|
+
const func = entity.queries.list?.execute;
|
|
5691
|
+
return await func({ filter: inlineFilters, take: 10 });
|
|
5692
|
+
}
|
|
5693
|
+
mergeFilter(request, filter) {
|
|
5694
|
+
if (!filter) {
|
|
5695
|
+
return request;
|
|
5696
|
+
}
|
|
5697
|
+
if (request.filter) {
|
|
5698
|
+
request.filter = {
|
|
5699
|
+
logic: 'and',
|
|
5700
|
+
filters: [...[request.filter], ...(filter.filters ?? [])]
|
|
5701
|
+
};
|
|
5702
|
+
}
|
|
5703
|
+
else {
|
|
5704
|
+
request.filter = filter;
|
|
5705
|
+
}
|
|
5706
|
+
return request;
|
|
5707
|
+
}
|
|
5775
5708
|
singleOrMultiple(values) {
|
|
5776
5709
|
return this.multiple() ? values : values[0];
|
|
5777
5710
|
}
|
|
5778
5711
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPLookupWidgetEditComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
5779
5712
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.8", type: AXPLookupWidgetEditComponent, isStandalone: true, selector: "axp-lookup-widget-edit", viewQueries: [{ propertyName: "textbox", first: true, predicate: AXTagBoxComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
|
|
5780
|
-
@if(
|
|
5713
|
+
@if(dataSource()) {
|
|
5781
5714
|
@if (look() == 'select') {
|
|
5782
5715
|
<ax-select-box
|
|
5783
|
-
[dataSource]="
|
|
5716
|
+
[dataSource]="dataSource()!"
|
|
5784
5717
|
[ngModel]="selectedItems()"
|
|
5785
5718
|
[textField]="displayField()"
|
|
5786
5719
|
[valueField]="valueField()"
|
|
@@ -5843,19 +5776,19 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
5843
5776
|
</ax-tag-box>
|
|
5844
5777
|
}
|
|
5845
5778
|
}
|
|
5846
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$
|
|
5779
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type:
|
|
5847
5780
|
//
|
|
5848
|
-
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
|
|
5781
|
+
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$1.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.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: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
5849
5782
|
}
|
|
5850
5783
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPLookupWidgetEditComponent, decorators: [{
|
|
5851
5784
|
type: Component,
|
|
5852
5785
|
args: [{
|
|
5853
5786
|
selector: 'axp-lookup-widget-edit',
|
|
5854
5787
|
template: `
|
|
5855
|
-
@if(
|
|
5788
|
+
@if(dataSource()) {
|
|
5856
5789
|
@if (look() == 'select') {
|
|
5857
5790
|
<ax-select-box
|
|
5858
|
-
[dataSource]="
|
|
5791
|
+
[dataSource]="dataSource()!"
|
|
5859
5792
|
[ngModel]="selectedItems()"
|
|
5860
5793
|
[textField]="displayField()"
|
|
5861
5794
|
[valueField]="valueField()"
|
|
@@ -5992,7 +5925,7 @@ class AXPEntityDetailPopoverComponent {
|
|
|
5992
5925
|
try {
|
|
5993
5926
|
const result = await this.queryService.fetch('Entity:GetDetails', {
|
|
5994
5927
|
entity: this.entity(),
|
|
5995
|
-
id: this.entityId()
|
|
5928
|
+
id: this.entityId(),
|
|
5996
5929
|
});
|
|
5997
5930
|
if (result?.success) {
|
|
5998
5931
|
this.entityDetails.set(result);
|
|
@@ -6025,7 +5958,7 @@ class AXPEntityDetailPopoverComponent {
|
|
|
6025
5958
|
}
|
|
6026
5959
|
async navigateToDetails() {
|
|
6027
5960
|
if (this.entityId()) {
|
|
6028
|
-
await this.commandService.execute(
|
|
5961
|
+
await this.commandService.execute('Entity:OpenDetails', {
|
|
6029
5962
|
entity: this.entity(),
|
|
6030
5963
|
data: { id: this.entityId() },
|
|
6031
5964
|
});
|
|
@@ -6058,9 +5991,6 @@ class AXPEntityDetailPopoverComponent {
|
|
|
6058
5991
|
[AXPWidgetsCatalog.text]: 100,
|
|
6059
5992
|
[AXPWidgetsCatalog.select]: 95,
|
|
6060
5993
|
[AXPWidgetsCatalog.number]: 90,
|
|
6061
|
-
[AXPWidgetsCatalog.email]: 88,
|
|
6062
|
-
[AXPWidgetsCatalog.phone]: 87,
|
|
6063
|
-
[AXPWidgetsCatalog.link]: 86,
|
|
6064
5994
|
[AXPWidgetsCatalog.dateTime]: 85,
|
|
6065
5995
|
[AXPWidgetsCatalog.richText]: 80,
|
|
6066
5996
|
[AXPWidgetsCatalog.largeText]: 75,
|
|
@@ -6100,7 +6030,7 @@ class AXPEntityDetailPopoverComponent {
|
|
|
6100
6030
|
{ keys: ['owner', 'assignee', 'assignedto'], score: 92 },
|
|
6101
6031
|
{ keys: ['email', 'phone', 'mobile', 'contact'], score: 90 },
|
|
6102
6032
|
{ keys: ['category', 'type', 'label', 'tag', 'note', 'notes'], score: 85 },
|
|
6103
|
-
{ keys: ['primary', 'active', 'active', 'enabled', 'archived', 'deleted', 'locked', 'disabled'], score: -2 } // send to bottom,
|
|
6033
|
+
{ keys: ['primary', 'active', 'active', 'enabled', 'archived', 'deleted', 'locked', 'disabled'], score: -2 }, // send to bottom,
|
|
6104
6034
|
];
|
|
6105
6035
|
for (const group of priorities) {
|
|
6106
6036
|
for (const key of group.keys) {
|
|
@@ -6127,16 +6057,16 @@ class AXPEntityDetailPopoverComponent {
|
|
|
6127
6057
|
const importantProperties = (entityDefinition.columns ?? [])
|
|
6128
6058
|
.map((prop, index) => {
|
|
6129
6059
|
const propName = prop.options?.dataPath ?? prop.name;
|
|
6130
|
-
const schema = prop.showAs?.type ?? entityDefinition.properties.find(p => p.name === propName)?.schema.interface?.type;
|
|
6131
|
-
const title = prop.title ?? entityDefinition.properties.find(p => p.name === propName)?.title ?? prop.name;
|
|
6060
|
+
const schema = prop.showAs?.type ?? entityDefinition.properties.find((p) => p.name === propName)?.schema.interface?.type;
|
|
6061
|
+
const title = prop.title ?? entityDefinition.properties.find((p) => p.name === propName)?.title ?? prop.name;
|
|
6132
6062
|
return {
|
|
6133
6063
|
...prop,
|
|
6134
6064
|
schema,
|
|
6135
6065
|
title,
|
|
6136
|
-
orderIndex: index
|
|
6066
|
+
orderIndex: index,
|
|
6137
6067
|
};
|
|
6138
6068
|
})
|
|
6139
|
-
.filter(prop => {
|
|
6069
|
+
.filter((prop) => {
|
|
6140
6070
|
// Exclude technical fields
|
|
6141
6071
|
if (prop.name === 'id' || prop.name === this.textField() || prop.name === this.valueField()) {
|
|
6142
6072
|
return false;
|
|
@@ -6146,7 +6076,7 @@ class AXPEntityDetailPopoverComponent {
|
|
|
6146
6076
|
return false;
|
|
6147
6077
|
}
|
|
6148
6078
|
// Filter by property importance based on schema and options
|
|
6149
|
-
const schema = prop.showAs?.type ?? entityDefinition.properties.find(p => p.name === prop.name)?.schema.interface?.type;
|
|
6079
|
+
const schema = prop.showAs?.type ?? entityDefinition.properties.find((p) => p.name === prop.name)?.schema.interface?.type;
|
|
6150
6080
|
// Include common important field types
|
|
6151
6081
|
const importantWidgets = [
|
|
6152
6082
|
AXPWidgetsCatalog.text,
|
|
@@ -6163,9 +6093,6 @@ class AXPEntityDetailPopoverComponent {
|
|
|
6163
6093
|
AXPWidgetsCatalog.dateTime,
|
|
6164
6094
|
AXPWidgetsCatalog.color,
|
|
6165
6095
|
AXPWidgetsCatalog.contact,
|
|
6166
|
-
AXPWidgetsCatalog.email,
|
|
6167
|
-
AXPWidgetsCatalog.link,
|
|
6168
|
-
AXPWidgetsCatalog.phone,
|
|
6169
6096
|
];
|
|
6170
6097
|
//
|
|
6171
6098
|
if (importantWidgets.includes(schema)) {
|
|
@@ -6196,13 +6123,13 @@ class AXPEntityDetailPopoverComponent {
|
|
|
6196
6123
|
return (a.orderIndex ?? 0) - (b.orderIndex ?? 0);
|
|
6197
6124
|
return a.name.localeCompare(b.name);
|
|
6198
6125
|
})
|
|
6199
|
-
.map(prop => {
|
|
6126
|
+
.map((prop) => {
|
|
6200
6127
|
// Create widget node based on property schema
|
|
6201
6128
|
const widgetNode = {
|
|
6202
6129
|
type: prop.schema || AXPWidgetsCatalog.text,
|
|
6203
6130
|
path: prop.options?.dataPath || prop.name,
|
|
6204
6131
|
options: prop.options ?? {},
|
|
6205
|
-
mode: 'view'
|
|
6132
|
+
mode: 'view',
|
|
6206
6133
|
};
|
|
6207
6134
|
return {
|
|
6208
6135
|
name: prop.name,
|
|
@@ -6214,11 +6141,18 @@ class AXPEntityDetailPopoverComponent {
|
|
|
6214
6141
|
return importantProperties;
|
|
6215
6142
|
}
|
|
6216
6143
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPEntityDetailPopoverComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6217
|
-
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:
|
|
6144
|
+
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: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
6218
6145
|
}
|
|
6219
6146
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPEntityDetailPopoverComponent, decorators: [{
|
|
6220
6147
|
type: Component,
|
|
6221
|
-
args: [{ selector: 'axp-entity-detail-popover', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
6148
|
+
args: [{ selector: 'axp-entity-detail-popover', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
6149
|
+
CommonModule,
|
|
6150
|
+
AXButtonModule,
|
|
6151
|
+
AXPopoverModule,
|
|
6152
|
+
AXPLayoutBuilderModule,
|
|
6153
|
+
AXTranslationModule,
|
|
6154
|
+
AXLoadingModule,
|
|
6155
|
+
], 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" }]
|
|
6222
6156
|
}] });
|
|
6223
6157
|
|
|
6224
6158
|
class AXPEntityDetailPopoverService {
|
|
@@ -6587,7 +6521,7 @@ class AXPTagableBoxWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
6587
6521
|
</ax-prefix>
|
|
6588
6522
|
</ax-button>
|
|
6589
6523
|
</div>
|
|
6590
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: AXTextBoxModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$
|
|
6524
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: AXTextBoxModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.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.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: i6$2.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 }); }
|
|
6591
6525
|
}
|
|
6592
6526
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPTagableBoxWidgetEditComponent, decorators: [{
|
|
6593
6527
|
type: Component,
|
|
@@ -6884,7 +6818,7 @@ class AXPWidgetSelectorWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
6884
6818
|
<axp-widget-property-viewer [widget]="selectedWidgetNode()!" (onChanged)="handleChangeWidget($event)">
|
|
6885
6819
|
</axp-widget-property-viewer>
|
|
6886
6820
|
}
|
|
6887
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$
|
|
6821
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.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 }); }
|
|
6888
6822
|
}
|
|
6889
6823
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPWidgetSelectorWidgetEditComponent, decorators: [{
|
|
6890
6824
|
type: Component,
|
|
@@ -6995,7 +6929,7 @@ class AXPEntityCreatePopupAction extends AXPWorkflowAction {
|
|
|
6995
6929
|
const result = await this.popupService.open(com, {
|
|
6996
6930
|
title: headerTitle
|
|
6997
6931
|
? headerTitle
|
|
6998
|
-
: `${await this.translateService.translateAsync('create
|
|
6932
|
+
: `${await this.translateService.translateAsync('@general:actions.create.title')} ${await this.translateService.translateAsync(entityRef.formats.individual)}`,
|
|
6999
6933
|
size: this.platform.is('Mobile') || this.platform.is('SM') ? 'full' : size ? size : 'md',
|
|
7000
6934
|
data: {
|
|
7001
6935
|
vm: await this.factory.create(module, entity, data, options),
|
|
@@ -7403,7 +7337,7 @@ class AXPEntityModule {
|
|
|
7403
7337
|
},
|
|
7404
7338
|
});
|
|
7405
7339
|
}
|
|
7406
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPEntityModule, deps: [{ token: i1$
|
|
7340
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPEntityModule, deps: [{ token: i1$2.AXPAppStartUpService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
7407
7341
|
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] }); }
|
|
7408
7342
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPEntityModule, providers: [
|
|
7409
7343
|
{
|
|
@@ -7555,7 +7489,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImpor
|
|
|
7555
7489
|
]),
|
|
7556
7490
|
],
|
|
7557
7491
|
}]
|
|
7558
|
-
}], ctorParameters: () => [{ type: i1$
|
|
7492
|
+
}], ctorParameters: () => [{ type: i1$2.AXPAppStartUpService }, { type: i0.Injector }] });
|
|
7559
7493
|
|
|
7560
7494
|
//#endregion
|
|
7561
7495
|
//#region ---- Entity Open Details Command ----
|
|
@@ -7722,13 +7656,28 @@ function entityMasterDeleteAction() {
|
|
|
7722
7656
|
scope: AXPEntityCommandScope.Individual,
|
|
7723
7657
|
};
|
|
7724
7658
|
}
|
|
7725
|
-
function entityMasterCrudActions() {
|
|
7726
|
-
|
|
7727
|
-
|
|
7728
|
-
|
|
7729
|
-
|
|
7730
|
-
|
|
7731
|
-
|
|
7659
|
+
function entityMasterCrudActions(options) {
|
|
7660
|
+
const opts = {
|
|
7661
|
+
create: true,
|
|
7662
|
+
delete: true,
|
|
7663
|
+
view: true,
|
|
7664
|
+
edit: true,
|
|
7665
|
+
...options,
|
|
7666
|
+
};
|
|
7667
|
+
const actions = [];
|
|
7668
|
+
if (opts.create) {
|
|
7669
|
+
actions.push(entityMasterCreateAction());
|
|
7670
|
+
}
|
|
7671
|
+
if (opts.delete) {
|
|
7672
|
+
actions.push(entityMasterBulkDeleteAction());
|
|
7673
|
+
}
|
|
7674
|
+
if (opts.view) {
|
|
7675
|
+
actions.push(entityMasterViewAction());
|
|
7676
|
+
}
|
|
7677
|
+
if (opts.edit) {
|
|
7678
|
+
actions.push(entityMasterDeleteAction());
|
|
7679
|
+
}
|
|
7680
|
+
return actions;
|
|
7732
7681
|
}
|
|
7733
7682
|
function entityMasterRecordActions() {
|
|
7734
7683
|
return [entityMasterDeleteAction()];
|
|
@@ -7886,5 +7835,5 @@ const eventDispatchMiddleware = {
|
|
|
7886
7835
|
* Generated bundle index. Do not edit.
|
|
7887
7836
|
*/
|
|
7888
7837
|
|
|
7889
|
-
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 };
|
|
7838
|
+
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, AXPEntityUpdateViewSectionViewModel, AXPGetEntityDetailsQuery, AXPMiddlewareAbortError, 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, isAXPMiddlewareAbortError };
|
|
7890
7839
|
//# sourceMappingURL=acorex-platform-layout-entity.mjs.map
|