@acorex/platform 21.0.0-next.5 → 21.0.0-next.51
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/fesm2022/acorex-platform-auth.mjs +281 -23
- package/fesm2022/acorex-platform-auth.mjs.map +1 -1
- package/fesm2022/acorex-platform-common-common-settings.provider-Bi1RYif5.mjs +163 -0
- package/fesm2022/acorex-platform-common-common-settings.provider-Bi1RYif5.mjs.map +1 -0
- package/fesm2022/acorex-platform-common.mjs +1047 -263
- package/fesm2022/acorex-platform-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-core.mjs +1138 -510
- package/fesm2022/acorex-platform-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-domain.mjs +557 -826
- package/fesm2022/acorex-platform-domain.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-builder.mjs +804 -186
- package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-components-binding-expression-editor-popup.component-CXEdvDTf.mjs +121 -0
- package/fesm2022/acorex-platform-layout-components-binding-expression-editor-popup.component-CXEdvDTf.mjs.map +1 -0
- package/fesm2022/acorex-platform-layout-components.mjs +6208 -2344
- package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-designer.mjs +456 -204
- package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity.mjs +18632 -10286
- package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-views.mjs +538 -168
- package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-widget-core.mjs +720 -456
- package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-button-widget-designer.component-C3VoBb_b.mjs → acorex-platform-layout-widgets-button-widget-designer.component-Dy7jF-oD.mjs} +10 -10
- package/fesm2022/acorex-platform-layout-widgets-button-widget-designer.component-Dy7jF-oD.mjs.map +1 -0
- package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-CDYAGBku.mjs +103 -0
- package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-CDYAGBku.mjs.map +1 -0
- package/fesm2022/{acorex-platform-layout-widgets-image-preview.popup-V31OpYah.mjs → acorex-platform-layout-widgets-image-preview.popup-C_EPAvCU.mjs} +6 -7
- package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-C_EPAvCU.mjs.map +1 -0
- package/fesm2022/{acorex-platform-layout-widgets-page-widget-designer.component-BtZMBxYp.mjs → acorex-platform-layout-widgets-page-widget-designer.component-D10yO28c.mjs} +12 -12
- package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-D10yO28c.mjs.map +1 -0
- package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-BGO75IMz.mjs +116 -0
- package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-BGO75IMz.mjs.map +1 -0
- package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-Ck7-wpT2.mjs → acorex-platform-layout-widgets-tabular-data-edit-popup.component-DmzNTYiS.mjs} +6 -6
- package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-DmzNTYiS.mjs.map +1 -0
- package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-y8vjUiVs.mjs → acorex-platform-layout-widgets-tabular-data-view-popup.component-BNG_588B.mjs} +5 -5
- package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-BNG_588B.mjs.map +1 -0
- package/fesm2022/{acorex-platform-layout-widgets-text-block-widget-designer.component-Df1BFkSa.mjs → acorex-platform-layout-widgets-text-block-widget-designer.component-Vo4fWHtX.mjs} +6 -6
- package/fesm2022/acorex-platform-layout-widgets-text-block-widget-designer.component-Vo4fWHtX.mjs.map +1 -0
- package/fesm2022/acorex-platform-layout-widgets.mjs +8728 -4269
- package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
- package/fesm2022/acorex-platform-native.mjs +8 -7
- package/fesm2022/acorex-platform-native.mjs.map +1 -1
- package/fesm2022/acorex-platform-runtime.mjs +391 -166
- package/fesm2022/acorex-platform-runtime.mjs.map +1 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-Cx1lLUaR.mjs +160 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-Cx1lLUaR.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-AOrcgjDF.mjs +120 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-AOrcgjDF.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-eMBby9k4.mjs → acorex-platform-themes-default-entity-master-single-view.component-BfCeUU5F.mjs} +19 -26
- package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-BfCeUU5F.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-default-error-401.component-cfREo88K.mjs → acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs} +4 -4
- package/fesm2022/acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-default-error-404.component-CdCV5ZoA.mjs → acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs} +4 -4
- package/fesm2022/acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default-error-offline.component-DR6G8gPC.mjs +19 -0
- package/fesm2022/acorex-platform-themes-default-error-offline.component-DR6G8gPC.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default.mjs +1836 -67
- package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
- package/fesm2022/{acorex-platform-themes-shared-icon-chooser-column.component-C0EpfU2k.mjs → acorex-platform-themes-shared-icon-chooser-column.component-CqkWJYdv.mjs} +6 -6
- package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-CqkWJYdv.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-shared-icon-chooser-view.component-9W52W6Nu.mjs → acorex-platform-themes-shared-icon-chooser-view.component-BOTuLdWN.mjs} +6 -6
- package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-BOTuLdWN.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-shared-settings.provider-DSs1o1M6.mjs → acorex-platform-themes-shared-settings.provider-DK6R87Lf.mjs} +24 -25
- package/fesm2022/acorex-platform-themes-shared-settings.provider-DK6R87Lf.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-D566Kdvy.mjs +94 -0
- package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-D566Kdvy.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-D7-rCGl7.mjs +86 -0
- package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-D7-rCGl7.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-shared.mjs +674 -573
- package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
- package/fesm2022/acorex-platform-workflow.mjs +1715 -535
- package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
- package/fesm2022/acorex-platform.mjs.map +1 -1
- package/package.json +37 -37
- package/{auth/index.d.ts → types/acorex-platform-auth.d.ts} +241 -4
- package/{common/index.d.ts → types/acorex-platform-common.d.ts} +598 -80
- package/{core/index.d.ts → types/acorex-platform-core.d.ts} +595 -132
- package/{domain/index.d.ts → types/acorex-platform-domain.d.ts} +744 -412
- package/{layout/builder/index.d.ts → types/acorex-platform-layout-builder.d.ts} +193 -48
- package/types/acorex-platform-layout-components.d.ts +2979 -0
- package/{layout/designer/index.d.ts → types/acorex-platform-layout-designer.d.ts} +96 -18
- package/{layout/entity/index.d.ts → types/acorex-platform-layout-entity.d.ts} +1601 -261
- package/{layout/views/index.d.ts → types/acorex-platform-layout-views.d.ts} +116 -55
- package/{layout/widget-core/index.d.ts → types/acorex-platform-layout-widget-core.d.ts} +272 -124
- package/{layout/widgets/index.d.ts → types/acorex-platform-layout-widgets.d.ts} +1055 -157
- package/{native/index.d.ts → types/acorex-platform-native.d.ts} +0 -7
- package/types/acorex-platform-runtime.d.ts +571 -0
- package/{themes/default/index.d.ts → types/acorex-platform-themes-default.d.ts} +122 -5
- package/{themes/shared/index.d.ts → types/acorex-platform-themes-shared.d.ts} +1 -1
- package/types/acorex-platform-workflow.d.ts +1884 -0
- package/fesm2022/acorex-platform-common-common-settings.provider-zhqNP3xb.mjs +0 -71
- package/fesm2022/acorex-platform-common-common-settings.provider-zhqNP3xb.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-button-widget-designer.component-C3VoBb_b.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-CxrsI6Hn.mjs +0 -135
- package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-CxrsI6Hn.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-V31OpYah.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-BtZMBxYp.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-Ck7-wpT2.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-y8vjUiVs.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-text-block-widget-designer.component-Df1BFkSa.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-VIGuU5M4.mjs +0 -157
- package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-VIGuU5M4.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-DyDa_hyd.mjs +0 -1542
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-DyDa_hyd.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-Ua3ZA5hk.mjs +0 -101
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-Ua3ZA5hk.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-eMBby9k4.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-error-401.component-cfREo88K.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-error-404.component-CdCV5ZoA.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-error-offline.component-E7SzBcAt.mjs +0 -19
- package/fesm2022/acorex-platform-themes-default-error-offline.component-E7SzBcAt.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-C0EpfU2k.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-9W52W6Nu.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-shared-settings.provider-DSs1o1M6.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-DTnfRy5f.mjs +0 -65
- package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-DTnfRy5f.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-DY0JtT1v.mjs +0 -64
- package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-DY0JtT1v.mjs.map +0 -1
- package/layout/components/index.d.ts +0 -1669
- package/runtime/index.d.ts +0 -307
- package/workflow/index.d.ts +0 -1808
- /package/{index.d.ts → types/acorex-platform.d.ts} +0 -0
|
@@ -1,43 +1,111 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as _acorex_platform_core from '@acorex/platform/core';
|
|
2
|
+
import { AXPExecuteCommandResult, AXPMetaData, AXPDataSourceDefinitionProvider, AXPDataSourceDefinition, AXPGridLayoutOptions, AXPBreadcrumbItem, AXPFilterQuery, AXPFilterDefinition, AXPExecuteCommand, AXPQueryRequest, AXPPagedListResult, AXPUserReference, AXPCategoryEntity as AXPCategoryEntity$1, AXPEntityOp, AXPMiddlewareErrorResponse, AXHighlightService, AXPExpression, AXPMultiLanguageString, AXPColumnQuery, AXPSortDefinition, AXPDeviceService, AXPBroadcastEventService, AXPActionMenuItem, AXPContextChangeEvent } from '@acorex/platform/core';
|
|
2
3
|
import { AXPCommand, AXPQueryExecutor, AXPCommandService, AXPQuery } from '@acorex/platform/runtime';
|
|
3
4
|
import * as _angular_core from '@angular/core';
|
|
4
|
-
import { ElementRef, InjectionToken, Injector, Type, OnInit, ChangeDetectorRef, OnDestroy } from '@angular/core';
|
|
5
|
+
import { ElementRef, InjectionToken, Injector, Type, EnvironmentProviders, OnInit, ChangeDetectorRef, OnDestroy } from '@angular/core';
|
|
5
6
|
import { AXPopoverComponent } from '@acorex/components/popover';
|
|
6
7
|
import * as i3 from '@acorex/platform/layout/widget-core';
|
|
7
8
|
import { AXPWidgetNode, AXPWidgetColumnNode, AXPWidgetCoreService, AXPColumnWidgetComponent, AXPValueWidgetComponent, AXPWidgetConfig, AXPWidgetRendererDirective } from '@acorex/platform/layout/widget-core';
|
|
8
|
-
import {
|
|
9
|
+
import { AXPPreloadFiltersApplyEvent, AXPColumnItemListItem, AXPDataSelectorAllowCreate, AXPCategoryTreeDataSource } from '@acorex/platform/layout/components';
|
|
10
|
+
import { AXPPageLayoutBaseComponent } from '@acorex/platform/layout/views';
|
|
11
|
+
import { AXStyleColorType, AXDataSource, AXDataSourceFilterOption, AXDataSourceSortOption, AXValueChangedEvent, AXClickEvent, AXFocusEvent, AXHtmlEvent } from '@acorex/cdk/common';
|
|
9
12
|
import * as _acorex_platform_common from '@acorex/platform/common';
|
|
10
|
-
import { AXPEntityCommandScope, AXPEntity, AXPEntityAction, AXPEntityProperty, AXPEntityTableColumn, AXPRelatedEntity, AXPEntitySectionView, AXPEntityPropertyCreateView, AXPEntityPropertyLayoutConfig, AXPQueryView, AXPEntityPropertyView, AXPCategoryEntity, AXPEntityPropertyGroup, AXPEntityMasterCreateLayoutView, AXPEntityMasterUpdateLayoutView, AXPEntityMasterSingleLayoutView, AXPEntityMasterListView, AXPEntityDetailListView, AXPQueryFilter } from '@acorex/platform/common';
|
|
13
|
+
import { AXPEntityCommandScope, AXPEntity, AXPEntityAction, AXPEntityProperty, AXPEntityTableColumn, AXPRelatedEntity, AXPEntitySectionView, AXPEntityPropertyCreateView, AXPEntityPropertyLayoutConfig, AXPQueryView, AXPEntityPropertyView, AXPCategoryEntity, AXPEntityPropertyGroup, AXPEntityMasterCreateLayoutView, AXPEntityMasterUpdateLayoutView, AXPEntityMasterSingleLayoutView, AXPEntityMasterListView, AXPEntityDetailListView, AXPEntityPage, AXPQueryFilter } from '@acorex/platform/common';
|
|
11
14
|
import * as i1 from '@angular/router';
|
|
12
15
|
import { ResolveFn } from '@angular/router';
|
|
13
16
|
import * as rxjs from 'rxjs';
|
|
14
17
|
import { Subject } from 'rxjs';
|
|
18
|
+
export { AXPEntityDefinitionCrudService, AXP_ENTITY_DEFINITION_CRUD_SERVICE } from '@acorex/platform/domain';
|
|
15
19
|
import * as i2 from '@acorex/platform/workflow';
|
|
16
|
-
import { AXPWorkflowService, AXPWorkflowAction, AXPWorkflowContext
|
|
20
|
+
import { AXPWorkflowService, AXPWorkflow, AXPWorkflowAction, AXPWorkflowContext } from '@acorex/platform/workflow';
|
|
21
|
+
import * as i4 from '@acorex/platform/layout/builder';
|
|
22
|
+
import { IActionBuilder, AXPDialogRef, IFormFieldBuilder } from '@acorex/platform/layout/builder';
|
|
17
23
|
import { AXPSessionService } from '@acorex/platform/auth';
|
|
18
|
-
import { AXTreeViewNode, AXTreeViewComponent,
|
|
19
|
-
import { AXTranslationService } from '@acorex/core/translation';
|
|
24
|
+
import { AXTreeViewNode, AXTreeViewComponent, AXTreeViewNodeSelectEvent } from '@acorex/components/tree-view';
|
|
20
25
|
import { AXPopupSizeType, AXPopupService } from '@acorex/components/popup';
|
|
21
|
-
import { IActionBuilder, IFormFieldBuilder, AXPDialogRef } from '@acorex/platform/layout/builder';
|
|
22
26
|
import { AXBasePageComponent } from '@acorex/components/page';
|
|
23
27
|
import { AXFormatService } from '@acorex/core/format';
|
|
24
28
|
import { AXTagBoxComponent } from '@acorex/components/tag-box';
|
|
25
|
-
import
|
|
26
|
-
import {
|
|
29
|
+
import * as _acorex_core_translation from '@acorex/core/translation';
|
|
30
|
+
import { AXPProviderSelectWidgetEditBase, AXPDataListWidgetComponentOptions } from '@acorex/platform/layout/widgets';
|
|
27
31
|
|
|
28
32
|
declare class AXPCreateEntityCommand implements AXPCommand<any, any> {
|
|
29
33
|
private entityForm;
|
|
30
|
-
private settingsService;
|
|
31
34
|
private entityService;
|
|
32
35
|
private toastService;
|
|
33
36
|
private translationService;
|
|
34
|
-
private
|
|
37
|
+
private settingsService;
|
|
38
|
+
private openEntityDetailsCommand;
|
|
35
39
|
protected context: {};
|
|
36
40
|
execute(input: any): Promise<AXPExecuteCommandResult<any>>;
|
|
37
41
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPCreateEntityCommand, never>;
|
|
38
42
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPCreateEntityCommand>;
|
|
39
43
|
}
|
|
40
44
|
|
|
45
|
+
/**
|
|
46
|
+
* Merged into AI/tool payloads for `Entity:Create` so post-create navigation does not run from agent flows.
|
|
47
|
+
* Applied in the AI module when normalizing tool arguments (not in the generic command executor).
|
|
48
|
+
*/
|
|
49
|
+
declare const axpCreateEntityAiToolInputDefaults: {
|
|
50
|
+
readonly __context__: {
|
|
51
|
+
readonly options: {
|
|
52
|
+
readonly process: {
|
|
53
|
+
readonly redirect: false;
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
declare const axpCreateEntityCommandDefinition: {
|
|
59
|
+
key: string;
|
|
60
|
+
title: string;
|
|
61
|
+
description: string;
|
|
62
|
+
executionMode: "frontend";
|
|
63
|
+
inputs: ({
|
|
64
|
+
name: string;
|
|
65
|
+
title: string;
|
|
66
|
+
description: string;
|
|
67
|
+
interface: {
|
|
68
|
+
name: string;
|
|
69
|
+
};
|
|
70
|
+
validations?: undefined;
|
|
71
|
+
} | {
|
|
72
|
+
name: string;
|
|
73
|
+
title: string;
|
|
74
|
+
description: string;
|
|
75
|
+
interface: {
|
|
76
|
+
name: string;
|
|
77
|
+
};
|
|
78
|
+
validations: {
|
|
79
|
+
rule: string;
|
|
80
|
+
}[];
|
|
81
|
+
})[];
|
|
82
|
+
outcomes: {
|
|
83
|
+
mode: "dynamic";
|
|
84
|
+
summary: string;
|
|
85
|
+
derivesFrom: string;
|
|
86
|
+
};
|
|
87
|
+
capabilities: "ai"[];
|
|
88
|
+
ai: {
|
|
89
|
+
shortDescription: string;
|
|
90
|
+
usage: {
|
|
91
|
+
whenToUse: string[];
|
|
92
|
+
avoidWhen: string[];
|
|
93
|
+
followUpTools: string[];
|
|
94
|
+
};
|
|
95
|
+
tags: string[];
|
|
96
|
+
toolInputDefaults: {
|
|
97
|
+
__context__: {
|
|
98
|
+
readonly options: {
|
|
99
|
+
readonly process: {
|
|
100
|
+
readonly redirect: false;
|
|
101
|
+
};
|
|
102
|
+
};
|
|
103
|
+
};
|
|
104
|
+
};
|
|
105
|
+
};
|
|
106
|
+
categories: _acorex_platform_core.AXPDefinitionCategory[];
|
|
107
|
+
};
|
|
108
|
+
|
|
41
109
|
declare class AXPUpdateEntityCommand implements AXPCommand<any, any> {
|
|
42
110
|
private readonly entityForm;
|
|
43
111
|
private readonly settingsService;
|
|
@@ -89,10 +157,20 @@ declare class AXPEntityDetailPopoverComponent {
|
|
|
89
157
|
textField: _angular_core.InputSignal<string>;
|
|
90
158
|
valueField: _angular_core.InputSignal<string>;
|
|
91
159
|
item: _angular_core.InputSignal<AXPMetaData | undefined>;
|
|
160
|
+
breadcrumb: _angular_core.InputSignal<string | null>;
|
|
92
161
|
protected detailPopover: _angular_core.Signal<AXPopoverComponent | undefined>;
|
|
93
162
|
protected entityDetails: _angular_core.WritableSignal<any>;
|
|
94
163
|
protected isLoadingDetails: _angular_core.WritableSignal<boolean>;
|
|
95
164
|
protected isDetailPopoverOpen: _angular_core.WritableSignal<boolean>;
|
|
165
|
+
/**
|
|
166
|
+
* Stable list of property widgets for the template. Must be a signal (computed), not a method:
|
|
167
|
+
* calling a method from the template rebuilds nodes every CD cycle and can make the widget renderer loop.
|
|
168
|
+
*/
|
|
169
|
+
protected readonly entityPropertiesWithWidgets: _angular_core.Signal<{
|
|
170
|
+
name: string;
|
|
171
|
+
title: string;
|
|
172
|
+
node: AXPWidgetNode;
|
|
173
|
+
}[]>;
|
|
96
174
|
/**
|
|
97
175
|
* Show the entity detail popover
|
|
98
176
|
*/
|
|
@@ -118,13 +196,14 @@ declare class AXPEntityDetailPopoverComponent {
|
|
|
118
196
|
* Name priority MUST come before widget-type priority.
|
|
119
197
|
*/
|
|
120
198
|
private getNameImportanceScore;
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
199
|
+
private buildEntityPropertiesWithWidgets;
|
|
200
|
+
/**
|
|
201
|
+
* Resolves the data path for a property. For lookups with expose, returns the expanded path
|
|
202
|
+
* when data has it (e.g. personTitle). Otherwise returns property name (e.g. personTitleId).
|
|
203
|
+
*/
|
|
204
|
+
private resolveDataPath;
|
|
126
205
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityDetailPopoverComponent, never>;
|
|
127
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPEntityDetailPopoverComponent, "axp-entity-detail-popover", never, { "entity": { "alias": "entity"; "required": true; "isSignal": true; }; "entityId": { "alias": "entityId"; "required": true; "isSignal": true; }; "textField": { "alias": "textField"; "required": false; "isSignal": true; }; "valueField": { "alias": "valueField"; "required": false; "isSignal": true; }; "item": { "alias": "item"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
206
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPEntityDetailPopoverComponent, "axp-entity-detail-popover", never, { "entity": { "alias": "entity"; "required": true; "isSignal": true; }; "entityId": { "alias": "entityId"; "required": true; "isSignal": true; }; "textField": { "alias": "textField"; "required": false; "isSignal": true; }; "valueField": { "alias": "valueField"; "required": false; "isSignal": true; }; "item": { "alias": "item"; "required": false; "isSignal": true; }; "breadcrumb": { "alias": "breadcrumb"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
128
207
|
}
|
|
129
208
|
|
|
130
209
|
interface AXPEntityDetailPopoverOptions {
|
|
@@ -133,6 +212,7 @@ interface AXPEntityDetailPopoverOptions {
|
|
|
133
212
|
item: AXPMetaData;
|
|
134
213
|
textField?: string;
|
|
135
214
|
valueField?: string;
|
|
215
|
+
breadcrumb?: string;
|
|
136
216
|
}
|
|
137
217
|
declare class AXPEntityDetailPopoverService {
|
|
138
218
|
private readonly applicationRef;
|
|
@@ -156,6 +236,25 @@ declare class AXPEntityDetailPopoverService {
|
|
|
156
236
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityDetailPopoverService>;
|
|
157
237
|
}
|
|
158
238
|
|
|
239
|
+
declare class AXPEntityPreloadFiltersContainerComponent extends AXPPageLayoutBaseComponent {
|
|
240
|
+
private readonly route;
|
|
241
|
+
private readonly router;
|
|
242
|
+
private readonly entityService;
|
|
243
|
+
private readonly filterOperatorMiddleware;
|
|
244
|
+
protected readonly noMatchText: _angular_core.WritableSignal<string | null>;
|
|
245
|
+
private vm;
|
|
246
|
+
preloadFiltersDef: _angular_core.Signal<_acorex_platform_core.AXPFilterDefinition[]>;
|
|
247
|
+
hasNoRequiredFilters: _angular_core.Signal<boolean>;
|
|
248
|
+
protected getPageTitle(): string;
|
|
249
|
+
protected getPageDescription(): string | null;
|
|
250
|
+
onApply(event: AXPPreloadFiltersApplyEvent): Promise<void>;
|
|
251
|
+
onShowAll(): Promise<void>;
|
|
252
|
+
private buildPreloadFilterQueries;
|
|
253
|
+
private buildListQueryFilter;
|
|
254
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityPreloadFiltersContainerComponent, never>;
|
|
255
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPEntityPreloadFiltersContainerComponent, "axp-entity-preload-filters-container", never, {}, {}, never, never, true, never>;
|
|
256
|
+
}
|
|
257
|
+
|
|
159
258
|
interface AXPDataSeeder {
|
|
160
259
|
seed(): Promise<void>;
|
|
161
260
|
}
|
|
@@ -167,8 +266,17 @@ declare class AXPDataSeederService {
|
|
|
167
266
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPDataSeederService>;
|
|
168
267
|
}
|
|
169
268
|
|
|
269
|
+
/**
|
|
270
|
+
* Data source definition provider that returns all entity names
|
|
271
|
+
* from entity loaders' list() (const.ts in each module).
|
|
272
|
+
*/
|
|
273
|
+
declare class AXPEntitiesListDataSourceDefinition implements AXPDataSourceDefinitionProvider {
|
|
274
|
+
private readonly entityResolver;
|
|
275
|
+
items(): Promise<AXPDataSourceDefinition[]>;
|
|
276
|
+
}
|
|
277
|
+
|
|
170
278
|
declare class AXPEntityCommandTriggerViewModel {
|
|
171
|
-
priority: 'primary' | 'secondary';
|
|
279
|
+
priority: 'primary' | 'secondary' | 'none';
|
|
172
280
|
order: number;
|
|
173
281
|
color: AXStyleColorType;
|
|
174
282
|
icon: string;
|
|
@@ -182,7 +290,9 @@ declare class AXPEntityCommandTriggerViewModel {
|
|
|
182
290
|
options: any;
|
|
183
291
|
metadata?: AXPMetaData;
|
|
184
292
|
default?: boolean;
|
|
185
|
-
|
|
293
|
+
items?: AXPEntityCommandTriggerViewModel[];
|
|
294
|
+
isChild?: boolean;
|
|
295
|
+
constructor(entity: AXPEntity, action: AXPEntityAction, isChild?: boolean);
|
|
186
296
|
}
|
|
187
297
|
declare class AXPEntityListViewColumnViewModel {
|
|
188
298
|
readonly property: AXPEntityProperty;
|
|
@@ -190,7 +300,7 @@ declare class AXPEntityListViewColumnViewModel {
|
|
|
190
300
|
constructor(property: AXPEntityProperty, column: AXPEntityTableColumn);
|
|
191
301
|
name: string;
|
|
192
302
|
title: string;
|
|
193
|
-
visible: boolean;
|
|
303
|
+
visible: string | boolean;
|
|
194
304
|
dir: "asc" | "desc" | undefined;
|
|
195
305
|
sortEnabled: boolean | undefined;
|
|
196
306
|
width: '';
|
|
@@ -207,12 +317,19 @@ declare class AXPEntityDetailListViewModel {
|
|
|
207
317
|
private filterOperatorMiddleware;
|
|
208
318
|
private expressionEvaluator;
|
|
209
319
|
private queryExecutor;
|
|
320
|
+
private readonly settingsService;
|
|
321
|
+
private readonly destroyed;
|
|
322
|
+
private readonly showRowIndexColumnEnabled;
|
|
323
|
+
/** Whether the row index column is shown (user setting). */
|
|
324
|
+
readonly showIndexColumn: _angular_core.Signal<boolean>;
|
|
210
325
|
dataSource: AXDataSource<any>;
|
|
211
326
|
parentKey: _angular_core.Signal<string | undefined>;
|
|
212
327
|
constructor(injector: Injector, detailEntityConfig: AXPRelatedEntity, parent: {
|
|
213
328
|
entity: AXPEntity;
|
|
214
329
|
data: any;
|
|
215
330
|
});
|
|
331
|
+
private syncShowRowIndexColumnSetting;
|
|
332
|
+
destroy(): void;
|
|
216
333
|
initialize(): Promise<void>;
|
|
217
334
|
selectedItems: _angular_core.WritableSignal<any[]>;
|
|
218
335
|
hasSelectedItems: _angular_core.Signal<boolean>;
|
|
@@ -250,6 +367,49 @@ declare const AXPEntityEventsKeys: {
|
|
|
250
367
|
REFRESH_DATA: string;
|
|
251
368
|
};
|
|
252
369
|
|
|
370
|
+
interface AXPEntityListExpandRowRef {
|
|
371
|
+
data: Record<string, unknown>;
|
|
372
|
+
}
|
|
373
|
+
/**
|
|
374
|
+
* Resolves a stable row id from entity list row data.
|
|
375
|
+
*/
|
|
376
|
+
declare function getEntityListRowId(data: Record<string, unknown>, key?: string): string;
|
|
377
|
+
/**
|
|
378
|
+
* Finds row data in a hierarchical grid tree (root rows and nested children).
|
|
379
|
+
*/
|
|
380
|
+
declare function findEntityListRowDataInTree(items: unknown[], id: string, key: string): Record<string, unknown> | null;
|
|
381
|
+
/**
|
|
382
|
+
* Restores expanded rows after data load (parents before children).
|
|
383
|
+
*/
|
|
384
|
+
declare function restoreEntityListExpandedRows(options: {
|
|
385
|
+
expandedRowIds: string[];
|
|
386
|
+
rowKey: string;
|
|
387
|
+
getDisplayedRows: () => unknown[];
|
|
388
|
+
expandRow: (row: AXPEntityListExpandRowRef) => Promise<void>;
|
|
389
|
+
}): Promise<void>;
|
|
390
|
+
|
|
391
|
+
interface AXPEntityListPagingState {
|
|
392
|
+
take: number;
|
|
393
|
+
skip: number;
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* Applies take/skip to the data source without triggering {@link AXDataSource.load}.
|
|
397
|
+
*/
|
|
398
|
+
declare function applyDataSourcePagingWithoutLoad(dataSource: AXDataSource, paging: AXPEntityListPagingState): void;
|
|
399
|
+
declare function getDataSourcePageIndex(dataSource: AXDataSource): number;
|
|
400
|
+
declare function normalizeListPaging(paging: Partial<AXPEntityListPagingState> | undefined, defaultTake: number): AXPEntityListPagingState;
|
|
401
|
+
|
|
402
|
+
/** How entity list UI state (columns, filters, paging, etc.) is persisted for the user. */
|
|
403
|
+
type AXPEntityListPersistenceMode = 'none' | 'persistent' | 'route';
|
|
404
|
+
declare const AXPEntityListPersistenceModeDefault: AXPEntityListPersistenceMode;
|
|
405
|
+
declare function normalizeEntityListPersistenceMode(value: unknown): AXPEntityListPersistenceMode;
|
|
406
|
+
declare function canPersistEntityListState(mode: AXPEntityListPersistenceMode): boolean;
|
|
407
|
+
/** `none` never reads list state from user settings. */
|
|
408
|
+
declare function shouldLoadEntityListStateFromStorage(mode: AXPEntityListPersistenceMode): boolean;
|
|
409
|
+
/** `route` clears stored list state when the route entity (module + name) changes. */
|
|
410
|
+
declare function shouldResetEntityListStateOnRouteEntry(mode: AXPEntityListPersistenceMode): boolean;
|
|
411
|
+
declare const ENTITY_LIST_ROUTE_CONTEXT_SESSION_KEY = "axp-entity-list-route-context";
|
|
412
|
+
|
|
253
413
|
/**
|
|
254
414
|
* Entity Event Dispatcher - A wrapper for entity-specific events
|
|
255
415
|
* Handles pattern-based dispatching for entity operations with wildcard support
|
|
@@ -362,35 +522,112 @@ declare class AXPEntityMasterListViewModel {
|
|
|
362
522
|
private readonly destroyed;
|
|
363
523
|
private lastAppliedSortKey;
|
|
364
524
|
private lastAppliedFilterKey;
|
|
525
|
+
private hasQueryParamsFilters;
|
|
526
|
+
/** Persisted expanded row ids for hierarchical lists (per view). */
|
|
527
|
+
private readonly expandedRowIds;
|
|
528
|
+
/** When true, row expand/collapse is not written to user settings (restore in progress). */
|
|
529
|
+
skipExpandedRowPersistence: boolean;
|
|
530
|
+
/** Resolved take/skip for the current view (null until loaded from settings). */
|
|
531
|
+
private readonly resolvedListPaging;
|
|
532
|
+
/** When true, pager changes are not persisted (programmatic UI sync). */
|
|
533
|
+
skipListPagingPersistence: boolean;
|
|
534
|
+
private listPersistenceMode;
|
|
365
535
|
events$: Subject<{
|
|
366
536
|
action: string;
|
|
367
537
|
meta?: any;
|
|
368
538
|
}>;
|
|
369
539
|
views: _angular_core.Signal<AXPEntityMasterListViewQueryViewModel[]>;
|
|
370
540
|
view: _angular_core.WritableSignal<AXPEntityMasterListViewQueryViewModel>;
|
|
541
|
+
private readonly showRowIndexColumnEnabled;
|
|
542
|
+
/**
|
|
543
|
+
* Row index column: if the list view defines `indexCol` (true/false), that overrides the user setting;
|
|
544
|
+
* if `indexCol` is omitted, visibility follows {@link AXPCommonSettings.ShowRowIndexColumn}.
|
|
545
|
+
*/
|
|
546
|
+
showIndexColumn: _angular_core.Signal<boolean>;
|
|
547
|
+
private createExpressionScope;
|
|
548
|
+
private resolveCommandNameExpression;
|
|
549
|
+
private resolveTitleExpression;
|
|
550
|
+
private resolveTriggerName;
|
|
371
551
|
setView(viewName?: string | null): Promise<void>;
|
|
372
552
|
dataSource: AXDataSource<any>;
|
|
373
553
|
constructor(injector: Injector, config: AXPEntity);
|
|
554
|
+
private syncShowRowIndexColumnSetting;
|
|
555
|
+
/**
|
|
556
|
+
* Applies {@link AXPCommonSettings.EntityListPersistenceMode} for this list instance.
|
|
557
|
+
* Call once when the list view model is created (before loading list UI state).
|
|
558
|
+
*/
|
|
559
|
+
initializeListPersistence(): Promise<void>;
|
|
560
|
+
getListPersistenceMode(): Promise<AXPEntityListPersistenceMode>;
|
|
561
|
+
shouldLoadPersistedListState(): Promise<boolean>;
|
|
562
|
+
shouldPersistListState(): Promise<boolean>;
|
|
563
|
+
private clearEntityListSettings;
|
|
374
564
|
applySettings(): Promise<void>;
|
|
375
|
-
|
|
565
|
+
ensureListPagingResolved(): Promise<void>;
|
|
566
|
+
getResolvedListPaging(): AXPEntityListPagingState;
|
|
567
|
+
applyPagingToDataSourceWithoutLoad(): void;
|
|
568
|
+
saveListPaging(take: number, skip: number): void;
|
|
569
|
+
resetListPagingSkip(): void;
|
|
570
|
+
private loadListPagingFromViewSettings;
|
|
571
|
+
getExpandedRowIds(): string[];
|
|
572
|
+
/**
|
|
573
|
+
* Updates persisted expanded row ids when the user expands or collapses a tree row.
|
|
574
|
+
*/
|
|
575
|
+
updateExpandedRowId(rowId: string, expanded: boolean): void;
|
|
576
|
+
handleRowExpandChange(rowData: Record<string, unknown>): void;
|
|
577
|
+
saveSettings(changesType: 'columnSizes' | 'columnOrders' | 'view' | 'pageSize' | 'listPaging' | 'filters' | 'sorts' | 'expandedRows', data?: unknown): Promise<void>;
|
|
376
578
|
selectedItems: _angular_core.WritableSignal<any[]>;
|
|
579
|
+
/**
|
|
580
|
+
* Selected category from the category sidebar (left panel).
|
|
581
|
+
* Used to set default category when creating new entities via command.
|
|
582
|
+
* Structure: { id: string; title: string } or null when "All Items" is selected.
|
|
583
|
+
*/
|
|
584
|
+
selectedCategory: _angular_core.WritableSignal<{
|
|
585
|
+
id: string;
|
|
586
|
+
title: string;
|
|
587
|
+
} | null>;
|
|
377
588
|
parentKey: _angular_core.Signal<string | undefined>;
|
|
378
589
|
hasSelectedItems: _angular_core.Signal<boolean>;
|
|
379
590
|
clearSelection(): void;
|
|
591
|
+
/**
|
|
592
|
+
* Sets the selected category from the category sidebar.
|
|
593
|
+
* Call with null to clear (e.g. when "All Items" is selected).
|
|
594
|
+
*/
|
|
595
|
+
setSelectedCategory(category: {
|
|
596
|
+
id: string;
|
|
597
|
+
title: string;
|
|
598
|
+
} | null): void;
|
|
380
599
|
title: _angular_core.Signal<string>;
|
|
381
600
|
description: _angular_core.Signal<string | null>;
|
|
382
601
|
inlineFiltersPlaceholders: _angular_core.Signal<string[]>;
|
|
383
602
|
hasInlineFilters: _angular_core.Signal<boolean>;
|
|
384
603
|
beardcrumbs: _angular_core.Signal<AXPBreadcrumbItem[]>;
|
|
385
604
|
private allActions;
|
|
605
|
+
/** Flattened actions including children for execute lookup */
|
|
606
|
+
private flattenedActions;
|
|
386
607
|
getPrimaryActions(): Promise<AXPEntityCommandTriggerViewModel[]>;
|
|
387
608
|
getSecondaryActions(): Promise<AXPEntityCommandTriggerViewModel[]>;
|
|
388
609
|
selectedScopeActionsCount: _angular_core.Signal<number>;
|
|
389
610
|
primaryRowActions: _angular_core.Signal<AXPEntityCommandTriggerViewModel[]>;
|
|
390
611
|
secondaryRowActions(rowData: any): Promise<AXPEntityCommandTriggerViewModel[]>;
|
|
391
612
|
filterQueries: _angular_core.WritableSignal<AXPFilterQuery[]>;
|
|
613
|
+
private static readonly URL_FILTER_OPERATOR_TYPES;
|
|
392
614
|
get properties(): AXPEntityProperty[];
|
|
615
|
+
/**
|
|
616
|
+
* Canonical JSON for the `filters` query param (sorted by field), or null when there are no active value filters.
|
|
617
|
+
*/
|
|
618
|
+
filtersQueryParamCanonical(queries: AXPFilterQuery[]): string | null;
|
|
619
|
+
/**
|
|
620
|
+
* Parse a `filters` query string to the same canonical form used by {@link filtersQueryParamCanonical}.
|
|
621
|
+
*/
|
|
622
|
+
static parseQueryParamFiltersToCanonical(filtersJson: string | null): string | null;
|
|
623
|
+
private toUrlFilterPayloadItems;
|
|
624
|
+
private static coerceFilterOperatorFromUrl;
|
|
625
|
+
/**
|
|
626
|
+
* Apply filters from query params
|
|
627
|
+
*/
|
|
628
|
+
applyFiltersFromQueryParams(filtersJson: string | null): boolean;
|
|
393
629
|
get filtersDef(): AXPFilterDefinition[];
|
|
630
|
+
get preloadFiltersDef(): AXPFilterDefinition[];
|
|
394
631
|
applyViewFilters(): Promise<void>;
|
|
395
632
|
resetFilters(): void;
|
|
396
633
|
applyFilterAndSort(): Promise<void>;
|
|
@@ -414,6 +651,17 @@ declare class AXPEntityMasterListViewModel {
|
|
|
414
651
|
resetSorts(): void;
|
|
415
652
|
applyViewSorts(): void;
|
|
416
653
|
executeCommand(commandName: string, data?: any): Promise<void>;
|
|
654
|
+
/**
|
|
655
|
+
* Merges default category from selected category in sidebar when executing create command.
|
|
656
|
+
* For Entity:Create and create-entity, if entity has category plugin and a category is selected,
|
|
657
|
+
* pre-fills categoryIds and categories for the create form.
|
|
658
|
+
*/
|
|
659
|
+
private mergeDefaultCategoryForCreate;
|
|
660
|
+
/**
|
|
661
|
+
* Seeds create payloads with fixed list-view conditions (e.g. scope=T on the tenant dashboards view)
|
|
662
|
+
* so new rows match the view context and downstream queries (such as home dashboard) can find them.
|
|
663
|
+
*/
|
|
664
|
+
private mergeViewConditionsForCreate;
|
|
417
665
|
private evaluateExpressions;
|
|
418
666
|
execute(command: AXPExecuteCommand): Promise<void>;
|
|
419
667
|
destroy(): void;
|
|
@@ -520,6 +768,7 @@ declare class AXPEntityMasterUpdateElementViewModel {
|
|
|
520
768
|
title: _angular_core.WritableSignal<string>;
|
|
521
769
|
description: _angular_core.WritableSignal<string | undefined>;
|
|
522
770
|
editable: _angular_core.Signal<boolean>;
|
|
771
|
+
isVisible: _angular_core.Signal<string | boolean>;
|
|
523
772
|
isRequired: _angular_core.Signal<boolean>;
|
|
524
773
|
layout: _angular_core.Signal<AXPEntityPropertyLayoutConfig>;
|
|
525
774
|
node: _angular_core.Signal<AXPWidgetNode>;
|
|
@@ -553,8 +802,63 @@ declare class AXPEntityMasterUpdateViewModelFactory {
|
|
|
553
802
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityMasterUpdateViewModelFactory>;
|
|
554
803
|
}
|
|
555
804
|
|
|
805
|
+
type AXPCollectEntityQuickSearchPathsResolver = (moduleName: string, entityName: string) => Promise<AXPEntity | null>;
|
|
806
|
+
/**
|
|
807
|
+
* Lodash-get paths for quick search from a single entity definition: string-like property names
|
|
808
|
+
* plus lookup `expose[].target` paths (e.g. `brand.title`).
|
|
809
|
+
*/
|
|
810
|
+
declare function collectQuickSearchPathsFromSingleEntityDefinition(entity: AXPEntity | null | undefined): string[];
|
|
811
|
+
/**
|
|
812
|
+
* Adds dotted paths from master columns (`name` or `options.dataPath`), e.g. `person.fullName`, `jobDefinition.title`.
|
|
813
|
+
*/
|
|
814
|
+
declare function collectNestedFieldPathsFromEntityColumns(entity: AXPEntity | null | undefined): string[];
|
|
815
|
+
/**
|
|
816
|
+
* Collects lodash-get field paths used for mock/API quick search (`contains` / OR filters):
|
|
817
|
+
* host properties and lookup expose targets, dotted column paths, and merge-detail related entities
|
|
818
|
+
* prefixed with the related entity merge `persistence.dataPath` (e.g. `person.firstName`).
|
|
819
|
+
*/
|
|
820
|
+
declare function collectEntityQuickSearchFieldPaths(entity: AXPEntity | null | undefined, resolveRelatedDefinition: AXPCollectEntityQuickSearchPathsResolver): Promise<string[]>;
|
|
821
|
+
|
|
822
|
+
declare class AXPEntityPreloadFiltersViewModel {
|
|
823
|
+
private injector;
|
|
824
|
+
private config;
|
|
825
|
+
readonly entityDef: AXPEntity;
|
|
826
|
+
private readonly widgetResolver;
|
|
827
|
+
constructor(injector: Injector, config: AXPEntity);
|
|
828
|
+
/**
|
|
829
|
+
* Entity title
|
|
830
|
+
*/
|
|
831
|
+
title: _angular_core.Signal<string>;
|
|
832
|
+
/**
|
|
833
|
+
* Entity description
|
|
834
|
+
*/
|
|
835
|
+
description: _angular_core.Signal<string | null>;
|
|
836
|
+
/**
|
|
837
|
+
* All filter definitions for properties with preload enabled
|
|
838
|
+
*/
|
|
839
|
+
preloadFiltersDef: _angular_core.Signal<AXPFilterDefinition[]>;
|
|
840
|
+
/**
|
|
841
|
+
* Required filter definitions only
|
|
842
|
+
*/
|
|
843
|
+
requiredFiltersDef: _angular_core.Signal<AXPFilterDefinition[]>;
|
|
844
|
+
/**
|
|
845
|
+
* Serialize filter values to plain objects (remove signals, functions, etc.)
|
|
846
|
+
*/
|
|
847
|
+
serializeFilters(filters: any): AXPFilterQuery[];
|
|
848
|
+
}
|
|
849
|
+
declare const AXPEntityPreloadFiltersViewModelResolver: ResolveFn<Promise<AXPEntityPreloadFiltersViewModel>>;
|
|
850
|
+
|
|
556
851
|
interface AXPEntityModifierContext {
|
|
557
852
|
readonly entity: AXPEntity;
|
|
853
|
+
plugins: {
|
|
854
|
+
list(): NonNullable<AXPEntity['plugins']>;
|
|
855
|
+
add(...items: NonNullable<AXPEntity['plugins']>): AXPEntityModifierContext;
|
|
856
|
+
remove(predicate: (p: NonNullable<AXPEntity['plugins']>[number]) => boolean): AXPEntityModifierContext;
|
|
857
|
+
find(name: string): {
|
|
858
|
+
get(): NonNullable<AXPEntity['plugins']>[number] | undefined;
|
|
859
|
+
update(updater: (p: NonNullable<AXPEntity['plugins']>[number]) => NonNullable<AXPEntity['plugins']>[number]): AXPEntityModifierContext;
|
|
860
|
+
};
|
|
861
|
+
};
|
|
558
862
|
title: {
|
|
559
863
|
get(): string;
|
|
560
864
|
set(newTitle: string): AXPEntityModifierContext;
|
|
@@ -657,6 +961,7 @@ type AXPEntityModifier = (context: AXPEntityModifierContext) => void;
|
|
|
657
961
|
interface AXPEntityModifierProvider {
|
|
658
962
|
entityName: string | RegExp;
|
|
659
963
|
modifier: AXPEntityModifier;
|
|
964
|
+
order?: number;
|
|
660
965
|
}
|
|
661
966
|
|
|
662
967
|
declare function ensureListActions(ctx: AXPEntityModifierContext): void;
|
|
@@ -697,8 +1002,10 @@ declare class AXPEntityMiddleware {
|
|
|
697
1002
|
protected providedActionPlugins: AXPEntityActionPlugin[];
|
|
698
1003
|
protected injector: Injector;
|
|
699
1004
|
constructor();
|
|
700
|
-
register(entityName: string | RegExp, modifier: AXPEntityModifier): void;
|
|
1005
|
+
register(entityName: string | RegExp, modifier: AXPEntityModifier, order?: number): void;
|
|
701
1006
|
process(entity: AXPEntity): Promise<AXPEntity>;
|
|
1007
|
+
private createModifierStep;
|
|
1008
|
+
private createPluginStep;
|
|
702
1009
|
private wildcardToRegExp;
|
|
703
1010
|
private normalizeRegExp;
|
|
704
1011
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityMiddleware, never>;
|
|
@@ -718,6 +1025,7 @@ interface AXPEntityDefinitionPreloader {
|
|
|
718
1025
|
}
|
|
719
1026
|
declare class AXPEntityDefinitionRegistryService {
|
|
720
1027
|
private middleware;
|
|
1028
|
+
private columnEnrichment;
|
|
721
1029
|
private onChanged;
|
|
722
1030
|
get onChanged$(): rxjs.Observable<{
|
|
723
1031
|
name: string;
|
|
@@ -779,30 +1087,145 @@ declare class AXPEntityDefinitionRegistryService {
|
|
|
779
1087
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityDefinitionRegistryService>;
|
|
780
1088
|
}
|
|
781
1089
|
|
|
1090
|
+
type AXPEntityAggregateReducerType = 'count' | 'sum' | 'min' | 'max' | 'avg';
|
|
1091
|
+
interface AXPEntityAggregateMeasure {
|
|
1092
|
+
reducer: AXPEntityAggregateReducerType;
|
|
1093
|
+
/** Required for sum, min, max, and avg. Ignored for count (rows per group). */
|
|
1094
|
+
field?: string;
|
|
1095
|
+
/** Result column name; defaults are derived from the reducer and field. */
|
|
1096
|
+
alias?: string;
|
|
1097
|
+
}
|
|
1098
|
+
/**
|
|
1099
|
+
* Aggregate stored rows after the same filter/sort pipeline as {@link AXPQueryRequest}.
|
|
1100
|
+
* Group keys use dotted field paths (same as lodash-style getters).
|
|
1101
|
+
*/
|
|
1102
|
+
interface AXPEntityAggregateRequest extends Pick<AXPQueryRequest, 'filter' | 'sort'> {
|
|
1103
|
+
groupBy: string[];
|
|
1104
|
+
measures: AXPEntityAggregateMeasure[];
|
|
1105
|
+
}
|
|
1106
|
+
interface AXPEntityAggregateResult {
|
|
1107
|
+
rows: Record<string, unknown>[];
|
|
1108
|
+
}
|
|
1109
|
+
interface AXPEntityQueryAllOptions {
|
|
1110
|
+
/**
|
|
1111
|
+
* Page size for backends that read page-by-page (HTTP API).
|
|
1112
|
+
* In-memory backends load the filtered set once and ignore this.
|
|
1113
|
+
*/
|
|
1114
|
+
pageSize?: number;
|
|
1115
|
+
/** Maximum rows to return or scan (safety cap). */
|
|
1116
|
+
maxRows?: number;
|
|
1117
|
+
}
|
|
1118
|
+
interface AXPEntityQueryAllResult<T> {
|
|
1119
|
+
items: T[];
|
|
1120
|
+
/** Row count matching filter/sort before applying maxRows. */
|
|
1121
|
+
total: number;
|
|
1122
|
+
/** True when maxRows prevented returning every matching row. */
|
|
1123
|
+
truncated: boolean;
|
|
1124
|
+
}
|
|
1125
|
+
interface AXPEntityAggregateOptions {
|
|
1126
|
+
/** Maximum rows to load for aggregation when the backend pages remotely (default 50_000). */
|
|
1127
|
+
maxRows?: number;
|
|
1128
|
+
/** Page size for remote paging during aggregate (default 500). */
|
|
1129
|
+
pageSize?: number;
|
|
1130
|
+
}
|
|
1131
|
+
|
|
1132
|
+
/**
|
|
1133
|
+
* Pure aggregation over already-filtered plain rows (e.g. outputs of {@link filterSortEntityRows}).
|
|
1134
|
+
*/
|
|
1135
|
+
declare function computeEntityAggregates<T extends Record<string, unknown>>(rows: T[], request: AXPEntityAggregateRequest): Record<string, unknown>[];
|
|
1136
|
+
|
|
1137
|
+
interface RunEntityQueryAdapters<T = unknown> {
|
|
1138
|
+
getRawAll(entityName: string): Promise<T[]>;
|
|
1139
|
+
getDirectChildCount(categoryId: string, entityName: string): Promise<number>;
|
|
1140
|
+
getAllChildCategoryIds(categoryId: string, entityName: string): Promise<string[]>;
|
|
1141
|
+
}
|
|
1142
|
+
/**
|
|
1143
|
+
* Check if the entity is a category entity (ends with 'Category').
|
|
1144
|
+
*/
|
|
1145
|
+
declare function isCategoryEntity(entityName: string): boolean;
|
|
1146
|
+
/**
|
|
1147
|
+
* Check if the filter is a category filter (contains operator on categoryIds field).
|
|
1148
|
+
* Handles both simple filters and compound filters.
|
|
1149
|
+
*/
|
|
1150
|
+
declare function isCategoryFilter(filter: any): boolean;
|
|
1151
|
+
/**
|
|
1152
|
+
* Loads raw rows for an entity and applies the same sorting and filtering as {@link runEntityQuery},
|
|
1153
|
+
* without pagination.
|
|
1154
|
+
*/
|
|
1155
|
+
declare function filterSortEntityRows<T = unknown>(entityName: string, request: Pick<AXPQueryRequest, 'filter' | 'sort'>, adapters: RunEntityQueryAdapters<T>): Promise<T[]>;
|
|
1156
|
+
/**
|
|
1157
|
+
* Shared entity query logic: sort, filter (including recursive category filter), childrenCount, pagination.
|
|
1158
|
+
*/
|
|
1159
|
+
declare function runEntityQuery<T = unknown>(entityName: string, request: AXPQueryRequest, adapters: RunEntityQueryAdapters<T>): Promise<AXPPagedListResult<T>>;
|
|
1160
|
+
|
|
1161
|
+
/**
|
|
1162
|
+
* One audit point in time for a record lifecycle event.
|
|
1163
|
+
*
|
|
1164
|
+
* Used inside {@link AXPRecordAuditInfo} (`created`, `updated`, `deleted`).
|
|
1165
|
+
* Backends and mock middleware typically set `at` and `by`; `reason` and `source`
|
|
1166
|
+
* (for example `api`, `system`, `import`) are optional diagnostic fields.
|
|
1167
|
+
*/
|
|
782
1168
|
interface AXPAuditEvent {
|
|
783
1169
|
at?: Date;
|
|
784
1170
|
by?: AXPUserReference;
|
|
1171
|
+
/** Optional business or technical reason for the event. */
|
|
785
1172
|
reason?: string;
|
|
1173
|
+
/** Optional origin of the change (for example `api`, `system`, `import`). */
|
|
786
1174
|
source?: string;
|
|
787
1175
|
}
|
|
788
|
-
|
|
1176
|
+
/**
|
|
1177
|
+
* Aggregated audit trail for a persisted row.
|
|
1178
|
+
*
|
|
1179
|
+
* Filled by APIs or connectivity mock middleware when creating, updating, or
|
|
1180
|
+
* soft-deleting records. UI surfaces may show these via the history plugin or
|
|
1181
|
+
* custom columns. Version snapshot pipelines often **omit** this object from
|
|
1182
|
+
* stored snapshots while still applying it to live payloads.
|
|
1183
|
+
*
|
|
1184
|
+
* @remarks Fields are optional today; callers should tolerate partial data.
|
|
1185
|
+
*/
|
|
1186
|
+
interface AXPRecordAuditInfo {
|
|
789
1187
|
created?: AXPAuditEvent;
|
|
790
1188
|
updated?: AXPAuditEvent;
|
|
791
1189
|
deleted?: AXPAuditEvent;
|
|
792
1190
|
}
|
|
1191
|
+
/**
|
|
1192
|
+
* Cross-cutting flags that are not part of the domain schema but affect how a
|
|
1193
|
+
* row is shown or edited (visibility, built-in/system rows, immutability).
|
|
1194
|
+
*
|
|
1195
|
+
* Module entity models sometimes expose only this slice (for example
|
|
1196
|
+
* `stateInfo` on business units) when the rest of the row uses a bespoke shape.
|
|
1197
|
+
*
|
|
1198
|
+
* @remarks Entity list/detail flows should honor these flags where applicable.
|
|
1199
|
+
*/
|
|
793
1200
|
interface AXPRecordStateInfo {
|
|
794
1201
|
isHidden?: boolean;
|
|
795
1202
|
isSystem?: boolean;
|
|
796
1203
|
isImmutable?: boolean;
|
|
1204
|
+
/** @deprecated Prefer explicit domain modeling over this flag. */
|
|
797
1205
|
isDistributed?: boolean;
|
|
798
1206
|
}
|
|
1207
|
+
/**
|
|
1208
|
+
* Tenancy and actor scope for a row in a multi-tenant application.
|
|
1209
|
+
*
|
|
1210
|
+
* Used to associate a record with a tenant, application instance, or owning
|
|
1211
|
+
* user when the API returns ownership metadata alongside domain fields.
|
|
1212
|
+
*/
|
|
799
1213
|
interface AXPRecordOwnershipInfo {
|
|
800
1214
|
tenantId?: string;
|
|
801
1215
|
applicationId?: string;
|
|
1216
|
+
userId?: string;
|
|
802
1217
|
}
|
|
1218
|
+
/**
|
|
1219
|
+
* Base shape for **entity row** TypeScript models across modules: a stable
|
|
1220
|
+
* identifier plus optional platform metadata.
|
|
1221
|
+
*
|
|
1222
|
+
* Module-specific interfaces extend this with domain properties
|
|
1223
|
+
* (`extends AXPEntityModel<string>` / `AXPEntityModel<Id>`) while reusing
|
|
1224
|
+
* `auditInfo`, `stateInfo`, and `ownershipInfo` when the backend sends them.
|
|
1225
|
+
*/
|
|
803
1226
|
interface AXPEntityModel<Id> {
|
|
804
1227
|
id: Id;
|
|
805
|
-
auditInfo?:
|
|
1228
|
+
auditInfo?: AXPRecordAuditInfo;
|
|
806
1229
|
stateInfo?: AXPRecordStateInfo;
|
|
807
1230
|
ownershipInfo?: AXPRecordOwnershipInfo;
|
|
808
1231
|
}
|
|
@@ -831,6 +1254,14 @@ declare abstract class AXPEntityStorageService<TKey, TDetailDto extends AXPEntit
|
|
|
831
1254
|
abstract insertOne(entityName: string, entity: TCreateDto): Promise<TKey>;
|
|
832
1255
|
abstract getAll(entityName: string): Promise<TListItemDto[]>;
|
|
833
1256
|
abstract query(entityName: string, request: AXPQueryRequest): Promise<AXPPagedListResult<TListItemDto>>;
|
|
1257
|
+
abstract count(entityName: string, request: Pick<AXPQueryRequest, 'filter' | 'sort'>): Promise<number>;
|
|
1258
|
+
abstract queryAll(entityName: string, request: Pick<AXPQueryRequest, 'filter' | 'sort'>, options?: AXPEntityQueryAllOptions): Promise<AXPEntityQueryAllResult<TListItemDto>>;
|
|
1259
|
+
abstract getMany(entityName: string, ids: TKey[]): Promise<(TListItemDto | null)[]>;
|
|
1260
|
+
abstract exists(entityName: string, id: TKey): Promise<boolean>;
|
|
1261
|
+
abstract upsertOne(entityName: string, entity: TCreateDto, options?: {
|
|
1262
|
+
merge?: boolean;
|
|
1263
|
+
}): Promise<TKey>;
|
|
1264
|
+
abstract aggregate(entityName: string, request: AXPEntityAggregateRequest, options?: AXPEntityAggregateOptions): Promise<AXPEntityAggregateResult>;
|
|
834
1265
|
}
|
|
835
1266
|
declare abstract class AXPEntityDataProvider<TKey, TDetailDto extends AXPEntityDetailDto<TKey> = AXPEntityModel<TKey>, TListItemDto extends AXPEntityListItemDto<TKey> = TDetailDto, TCreateDto extends AXPEntityCreateDto = TDetailDto, TUpdateDto extends AXPEntityUpdateDto<TKey> = TDetailDto> {
|
|
836
1267
|
abstract get entityName(): string;
|
|
@@ -841,6 +1272,14 @@ declare abstract class AXPEntityDataProvider<TKey, TDetailDto extends AXPEntityD
|
|
|
841
1272
|
abstract deleteOne(id: TKey): Promise<void>;
|
|
842
1273
|
abstract insertOne(entity: TCreateDto): Promise<TKey>;
|
|
843
1274
|
abstract query(request: AXPQueryRequest): Promise<AXPPagedListResult<TListItemDto>>;
|
|
1275
|
+
abstract count(request: Pick<AXPQueryRequest, 'filter' | 'sort'>): Promise<number>;
|
|
1276
|
+
abstract queryAll(request: Pick<AXPQueryRequest, 'filter' | 'sort'>, options?: AXPEntityQueryAllOptions): Promise<AXPEntityQueryAllResult<TListItemDto>>;
|
|
1277
|
+
abstract getMany(ids: TKey[]): Promise<(TListItemDto | null)[]>;
|
|
1278
|
+
abstract exists(id: TKey): Promise<boolean>;
|
|
1279
|
+
abstract upsertOne(entity: TCreateDto, options?: {
|
|
1280
|
+
merge?: boolean;
|
|
1281
|
+
}): Promise<TKey>;
|
|
1282
|
+
abstract aggregate(request: AXPEntityAggregateRequest, options?: AXPEntityAggregateOptions): Promise<AXPEntityAggregateResult>;
|
|
844
1283
|
}
|
|
845
1284
|
declare class AXPEntityDataProviderImpl<TKey, TDetailDto extends AXPEntityDetailDto<TKey> = AXPEntityModel<TKey>, TListItemDto extends AXPEntityListItemDto<TKey> = TDetailDto, TCreateDto extends AXPEntityCreateDto = TDetailDto, TUpdateDto extends AXPEntityUpdateDto<TKey> = TDetailDto> implements AXPEntityDataProvider<TKey, TDetailDto, TListItemDto, TCreateDto, TUpdateDto> {
|
|
846
1285
|
private storageService;
|
|
@@ -853,6 +1292,14 @@ declare class AXPEntityDataProviderImpl<TKey, TDetailDto extends AXPEntityDetail
|
|
|
853
1292
|
updateOne(id: TKey, keyValues: Omit<Partial<TUpdateDto>, 'id'>): Promise<TDetailDto>;
|
|
854
1293
|
deleteOne(id: TKey): Promise<void>;
|
|
855
1294
|
insertOne(entity: TCreateDto): Promise<TKey>;
|
|
1295
|
+
count(request: Pick<AXPQueryRequest, 'filter' | 'sort'>): Promise<number>;
|
|
1296
|
+
queryAll(request: Pick<AXPQueryRequest, 'filter' | 'sort'>, options?: AXPEntityQueryAllOptions): Promise<AXPEntityQueryAllResult<TListItemDto>>;
|
|
1297
|
+
getMany(ids: TKey[]): Promise<(TListItemDto | null)[]>;
|
|
1298
|
+
exists(id: TKey): Promise<boolean>;
|
|
1299
|
+
upsertOne(entity: TCreateDto, options?: {
|
|
1300
|
+
merge?: boolean;
|
|
1301
|
+
}): Promise<TKey>;
|
|
1302
|
+
aggregate(request: AXPEntityAggregateRequest, options?: AXPEntityAggregateOptions): Promise<AXPEntityAggregateResult>;
|
|
856
1303
|
}
|
|
857
1304
|
declare abstract class AXMEntityCrudService<TKey, TDetailDto extends AXPEntityDetailDto<TKey> = AXPEntityModel<TKey>, TListItemDto extends AXPEntityListItemDto<TKey> = TDetailDto, TCreateDto extends AXPEntityCreateDto = TDetailDto, TUpdateDto extends AXPEntityUpdateDto<TKey> = TDetailDto> {
|
|
858
1305
|
abstract insertOne(request: TCreateDto): Promise<TKey>;
|
|
@@ -885,6 +1332,14 @@ declare class AXMEntityCrudServiceImpl<TKey, TDetailDto extends AXPEntityDetailD
|
|
|
885
1332
|
}): Promise<AXPPagedListResult<TListItemDto>>;
|
|
886
1333
|
getCategoriesList(request?: AXPQueryRequest): Promise<AXPPagedListResult<AXPCategoryEntity$1<TKey>>>;
|
|
887
1334
|
get storageService(): AXPEntityStorageService<any, any, any, any, any>;
|
|
1335
|
+
count(request: Pick<AXPQueryRequest, 'filter' | 'sort'>): Promise<number>;
|
|
1336
|
+
queryAll(request: Pick<AXPQueryRequest, 'filter' | 'sort'>, options?: AXPEntityQueryAllOptions): Promise<AXPEntityQueryAllResult<TListItemDto>>;
|
|
1337
|
+
getMany(ids: TKey[]): Promise<(TListItemDto | null)[]>;
|
|
1338
|
+
exists(id: TKey): Promise<boolean>;
|
|
1339
|
+
upsertOne(entity: TCreateDto, options?: {
|
|
1340
|
+
merge?: boolean;
|
|
1341
|
+
}): Promise<TKey>;
|
|
1342
|
+
aggregate(request: AXPEntityAggregateRequest, options?: AXPEntityAggregateOptions): Promise<AXPEntityAggregateResult>;
|
|
888
1343
|
custom<Req, Res>(request: Req): Promise<void>;
|
|
889
1344
|
}
|
|
890
1345
|
|
|
@@ -904,20 +1359,85 @@ interface AXPEntityConfigs {
|
|
|
904
1359
|
};
|
|
905
1360
|
}
|
|
906
1361
|
declare const AXP_ENTITY_CONFIG_TOKEN: InjectionToken<AXPEntityConfigs>;
|
|
1362
|
+
/** Raw input from entity loaders' list(). */
|
|
1363
|
+
type AXPEntityListInput = {
|
|
1364
|
+
name: string;
|
|
1365
|
+
module: string;
|
|
1366
|
+
};
|
|
1367
|
+
/** Output from listAll(); fullName is populated by the resolver. */
|
|
1368
|
+
type AXPEntityListEntry = {
|
|
1369
|
+
name: string;
|
|
1370
|
+
module: string;
|
|
1371
|
+
fullName: string;
|
|
1372
|
+
};
|
|
907
1373
|
interface AXPEntityDefinitionLoader {
|
|
908
1374
|
get(moduleName: string, entityName: string): Promise<AXPEntity | null>;
|
|
1375
|
+
list(): Promise<AXPEntityListInput[]>;
|
|
909
1376
|
}
|
|
910
1377
|
declare const AXP_ENTITY_DEFINITION_LOADER: InjectionToken<AXPEntityDefinitionLoader>;
|
|
911
1378
|
declare class AXPEntityResolver {
|
|
912
1379
|
private providers;
|
|
1380
|
+
/** Aggregates list() from all entity loaders (including lazy). Populates fullName. */
|
|
1381
|
+
listAll(): Promise<AXPEntityListEntry[]>;
|
|
913
1382
|
get(moduleName: string, entityName: string): Promise<AXPEntity | null>;
|
|
1383
|
+
private resolveLoaders;
|
|
914
1384
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityResolver, never>;
|
|
915
1385
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityResolver>;
|
|
916
1386
|
}
|
|
917
1387
|
|
|
1388
|
+
/**
|
|
1389
|
+
* Built-in entity detail tabs from plugins. Sidebar order (after related page-list / page-detail
|
|
1390
|
+
* tabs): meta-data-builder → attachments → documents → comments → history.
|
|
1391
|
+
*/
|
|
1392
|
+
type EntityDetailPluginPageSlot = 'meta-data-builder' | 'attachments' | 'documents' | 'comments' | 'history';
|
|
1393
|
+
/** Identifies an `entity.pages` entry when skipping its order during recomputation. */
|
|
1394
|
+
interface SkipEntityComponentPageRef {
|
|
1395
|
+
componentKey: string;
|
|
1396
|
+
/** When set, only the page with this `field` is skipped (e.g. attachments / meta-data per field). */
|
|
1397
|
+
field?: string;
|
|
1398
|
+
}
|
|
1399
|
+
interface ResolveEntityPluginDetailPageOrderOptions {
|
|
1400
|
+
/** Component key of the page being added or updated (used to count sibling tabs in the same slot). */
|
|
1401
|
+
componentKey: string;
|
|
1402
|
+
/**
|
|
1403
|
+
* Ignore this page when counting siblings / recomputing (the page currently being updated).
|
|
1404
|
+
*/
|
|
1405
|
+
skipPage?: SkipEntityComponentPageRef;
|
|
1406
|
+
/**
|
|
1407
|
+
* Field name for multi-page slots (`attachments`, `meta-data-builder`). Omit for single-tab slots.
|
|
1408
|
+
*/
|
|
1409
|
+
field?: string;
|
|
1410
|
+
/** Gap between auto-assigned related tab orders. Default: 10. */
|
|
1411
|
+
relatedOrderStep?: number;
|
|
1412
|
+
/** Minimum start of the plugin zone (after related tabs). Default: 100_000. */
|
|
1413
|
+
pluginZoneFloor?: number;
|
|
1414
|
+
}
|
|
1415
|
+
/**
|
|
1416
|
+
* Resolves `layout.order` for a built-in plugin detail tab (`entity.pages`).
|
|
1417
|
+
*
|
|
1418
|
+
* 1. Assigns finite `layout.order` values to related `page-list` / `page-detail` rows that omit
|
|
1419
|
+
* `order` (the composer otherwise treats them as +Infinity).
|
|
1420
|
+
* 2. Places plugin tabs in a fixed relative order: meta-data-builder → attachments → documents →
|
|
1421
|
+
* comments → history, after all related tabs.
|
|
1422
|
+
*/
|
|
1423
|
+
declare function resolveEntityPluginDetailPageOrder(input: {
|
|
1424
|
+
relatedEntities?: AXPRelatedEntity[];
|
|
1425
|
+
pages?: Array<AXPEntityPage & {
|
|
1426
|
+
field?: string;
|
|
1427
|
+
}>;
|
|
1428
|
+
}, slot: EntityDetailPluginPageSlot, options: ResolveEntityPluginDetailPageOrderOptions): number;
|
|
1429
|
+
|
|
1430
|
+
/**
|
|
1431
|
+
* Sort key for entries in `interfaces.master.{create|update|single}.properties`.
|
|
1432
|
+
* Uses `layout.order` when set and finite; otherwise the property index in that list.
|
|
1433
|
+
*/
|
|
1434
|
+
declare function getMasterInterfacePropertySortKey(interfaceRow: {
|
|
1435
|
+
layout?: AXPEntityPropertyLayoutConfig | undefined;
|
|
1436
|
+
} | undefined, indexInMasterInterfaceList: number): number;
|
|
1437
|
+
|
|
918
1438
|
declare class AXPEntityModule {
|
|
919
1439
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityModule, never>;
|
|
920
|
-
static ɵmod: _angular_core.ɵɵNgModuleDeclaration<AXPEntityModule, never, [typeof i1.RouterModule, typeof i2.AXPWorkflowModule, typeof i3.AXPWidgetCoreModule], never>;
|
|
1440
|
+
static ɵmod: _angular_core.ɵɵNgModuleDeclaration<AXPEntityModule, never, [typeof i1.RouterModule, typeof i2.AXPWorkflowModule, typeof i3.AXPWidgetCoreModule, typeof i4.LayoutBuilderModule], never>;
|
|
921
1441
|
static ɵinj: _angular_core.ɵɵInjectorDeclaration<AXPEntityModule>;
|
|
922
1442
|
}
|
|
923
1443
|
|
|
@@ -1028,7 +1548,6 @@ declare class AXPEntityService {
|
|
|
1028
1548
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityService>;
|
|
1029
1549
|
}
|
|
1030
1550
|
|
|
1031
|
-
type AXPEntityOp = 'initial' | 'create' | 'update' | 'delete' | 'getOne' | 'getAll' | 'query';
|
|
1032
1551
|
interface AXPEntityStorageContext<TKey = any, TDetailDto extends AXPEntityDetailDto<TKey> = any, TListItemDto extends AXPEntityListItemDto<TKey> = any, TCreateDto extends AXPEntityCreateDto = any, TUpdateDto extends AXPEntityUpdateDto<TKey> = any> {
|
|
1033
1552
|
op: AXPEntityOp;
|
|
1034
1553
|
entityName: string;
|
|
@@ -1042,7 +1561,16 @@ interface AXPEntityStorageContext<TKey = any, TDetailDto extends AXPEntityDetail
|
|
|
1042
1561
|
getOne: (entityName: string, id: TKey) => Promise<TDetailDto>;
|
|
1043
1562
|
insertOne: (entityName: string, entity: TCreateDto) => Promise<TKey>;
|
|
1044
1563
|
query: (entityName: string, request: AXPQueryRequest) => Promise<AXPPagedListResult<TListItemDto>>;
|
|
1045
|
-
updateOne: (entityName: string, id: TKey, data: Partial<TUpdateDto>) => Promise<
|
|
1564
|
+
updateOne: (entityName: string, id: TKey, data: Partial<TUpdateDto>) => Promise<TDetailDto>;
|
|
1565
|
+
deleteOne: (entityName: string, id: TKey) => Promise<void>;
|
|
1566
|
+
count: (entityName: string, request: Pick<AXPQueryRequest, 'filter' | 'sort'>) => Promise<number>;
|
|
1567
|
+
queryAll: (entityName: string, request: Pick<AXPQueryRequest, 'filter' | 'sort'>, options?: AXPEntityQueryAllOptions) => Promise<AXPEntityQueryAllResult<TListItemDto>>;
|
|
1568
|
+
getMany: (entityName: string, ids: TKey[]) => Promise<(TListItemDto | null)[]>;
|
|
1569
|
+
exists: (entityName: string, id: TKey) => Promise<boolean>;
|
|
1570
|
+
upsertOne: (entityName: string, entity: TCreateDto, options?: {
|
|
1571
|
+
merge?: boolean;
|
|
1572
|
+
}) => Promise<TKey>;
|
|
1573
|
+
aggregate: (entityName: string, request: AXPEntityAggregateRequest, options?: AXPEntityAggregateOptions) => Promise<AXPEntityAggregateResult>;
|
|
1046
1574
|
};
|
|
1047
1575
|
}
|
|
1048
1576
|
interface AXPEntityStorageMiddleware<TKey = any, TDetailDto extends AXPEntityDetailDto<TKey> = any, TListItemDto extends AXPEntityListItemDto<TKey> = any, TCreateDto extends AXPEntityCreateDto = any, TUpdateDto extends AXPEntityUpdateDto<TKey> = any> {
|
|
@@ -1077,66 +1605,107 @@ declare function isAXPMiddlewareAbortError(error: unknown): error is AXPMiddlewa
|
|
|
1077
1605
|
declare const eventDispatchMiddleware: AXPEntityStorageMiddleware;
|
|
1078
1606
|
|
|
1079
1607
|
/**
|
|
1080
|
-
*
|
|
1081
|
-
*
|
|
1608
|
+
* Entity modifier that applies column widths using the column width service
|
|
1609
|
+
* Uses the generic column width resolution system from core library
|
|
1610
|
+
* Note: inject() works here because modifiers are executed via runInInjectionContext()
|
|
1611
|
+
*/
|
|
1612
|
+
declare const columnWidthMiddleware: AXPEntityModifier;
|
|
1613
|
+
/**
|
|
1614
|
+
* Default provider that applies column width middleware to all entities
|
|
1082
1615
|
*/
|
|
1083
|
-
|
|
1616
|
+
declare const columnWidthMiddlewareProvider: AXPEntityModifierProvider;
|
|
1617
|
+
|
|
1084
1618
|
/**
|
|
1085
|
-
* Default
|
|
1619
|
+
* Default order for common list view columns.
|
|
1620
|
+
* Lower numbers appear first. Columns not in this map get order 500 (middle).
|
|
1621
|
+
* Use high numbers (990+) for columns that should appear at the end.
|
|
1086
1622
|
*/
|
|
1087
|
-
declare const
|
|
1623
|
+
declare const DEFAULT_COLUMN_ORDER: Record<string, number>;
|
|
1088
1624
|
/**
|
|
1089
|
-
*
|
|
1090
|
-
*
|
|
1625
|
+
* Entity modifier that sorts list view columns by default order.
|
|
1626
|
+
* Similar to layout-ordering for sections/properties, but for list columns.
|
|
1091
1627
|
*/
|
|
1092
|
-
declare const
|
|
1628
|
+
declare const columnOrderingMiddleware: AXPEntityModifier;
|
|
1093
1629
|
/**
|
|
1094
|
-
*
|
|
1095
|
-
* By default it applies to all entities using the '*' pattern.
|
|
1630
|
+
* Factory to create a column ordering middleware with custom order config
|
|
1096
1631
|
*/
|
|
1097
|
-
declare const
|
|
1632
|
+
declare const createColumnOrderingMiddlewareProvider: (columnOrder?: Record<string, number>, entityName?: string | RegExp) => AXPEntityModifierProvider;
|
|
1098
1633
|
/**
|
|
1099
|
-
* Default provider
|
|
1634
|
+
* Default provider that applies column ordering to all entities
|
|
1100
1635
|
*/
|
|
1101
|
-
declare const
|
|
1636
|
+
declare const columnOrderingMiddlewareProvider: AXPEntityModifierProvider;
|
|
1102
1637
|
|
|
1103
1638
|
/**
|
|
1104
|
-
*
|
|
1639
|
+
* Default colSpans for two properties in one section (`md` / `lg`).
|
|
1640
|
+
* Missing `positions[*].colSpan` are filled only; entities keep full control.
|
|
1105
1641
|
*/
|
|
1642
|
+
interface PairSpanRule {
|
|
1643
|
+
first: string;
|
|
1644
|
+
second: string;
|
|
1645
|
+
/** Col span applied to {@link first} */
|
|
1646
|
+
firstSpan: number;
|
|
1647
|
+
/** Col span applied to {@link second} */
|
|
1648
|
+
secondSpan: number;
|
|
1649
|
+
breakpoints?: readonly ('sm' | 'md' | 'lg')[];
|
|
1650
|
+
}
|
|
1106
1651
|
interface SectionOrderConfig {
|
|
1107
|
-
/**
|
|
1108
|
-
* Default order for common sections
|
|
1109
|
-
* Lower numbers appear first
|
|
1110
|
-
*/
|
|
1111
1652
|
sections: Record<string, number>;
|
|
1653
|
+
properties: Record<string, number>;
|
|
1112
1654
|
/**
|
|
1113
|
-
*
|
|
1114
|
-
*
|
|
1655
|
+
* Defaults for pairing two columns (e.g. code + title). Replace or extend defaults.
|
|
1656
|
+
* - `undefined`: use {@link DEFAULT_PAIR_SPAN_RULES}
|
|
1657
|
+
* - `false`: do not apply any pair spans
|
|
1658
|
+
* - `[...]` + spread `DEFAULT_PAIR_SPAN_RULES` when you want to append custom pairs
|
|
1115
1659
|
*/
|
|
1116
|
-
|
|
1660
|
+
pairSpanRules?: PairSpanRule[] | false;
|
|
1117
1661
|
}
|
|
1118
1662
|
/**
|
|
1119
|
-
* Default
|
|
1663
|
+
* Default shipped rules: narrow identifier + wider title on `md` / `lg`.
|
|
1120
1664
|
*/
|
|
1665
|
+
declare const DEFAULT_PAIR_SPAN_RULES: readonly PairSpanRule[];
|
|
1121
1666
|
declare const DEFAULT_SECTION_ORDER: Record<string, number>;
|
|
1667
|
+
declare const DEFAULT_PROPERTY_ORDER: Record<string, number>;
|
|
1668
|
+
declare const layoutOrderingMiddlewareFactory: (config: SectionOrderConfig) => AXPEntityModifier;
|
|
1669
|
+
declare const createLayoutOrderingMiddlewareProvider: (config?: Partial<SectionOrderConfig>, entityName?: string | RegExp) => AXPEntityModifierProvider;
|
|
1670
|
+
declare const layoutOrderingMiddlewareProvider: AXPEntityModifierProvider;
|
|
1671
|
+
|
|
1122
1672
|
/**
|
|
1123
|
-
*
|
|
1124
|
-
*
|
|
1673
|
+
* Provides synchronous access to the ApplyLayoutOrdering setting.
|
|
1674
|
+
* Used by layout ordering middleware to avoid async in the modifier and prevent startup deadlocks.
|
|
1675
|
+
* Value is updated on onLoaded/onChanged; first read can trigger a one-time background get (no await).
|
|
1125
1676
|
*/
|
|
1126
|
-
declare
|
|
1677
|
+
declare class AXPLayoutOrderingConfigService {
|
|
1678
|
+
private readonly settingsService;
|
|
1679
|
+
private readonly _applyOrdering;
|
|
1680
|
+
private syncScheduled;
|
|
1681
|
+
constructor();
|
|
1682
|
+
getApplyOrdering(): boolean;
|
|
1683
|
+
private syncFromSettings;
|
|
1684
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPLayoutOrderingConfigService, never>;
|
|
1685
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPLayoutOrderingConfigService>;
|
|
1686
|
+
}
|
|
1687
|
+
|
|
1127
1688
|
/**
|
|
1128
|
-
*
|
|
1689
|
+
* Ensures all entities have a searchResult.description.
|
|
1690
|
+
* Uses @{i18nScope}:module.title when missing (guaranteed to exist in i18n).
|
|
1129
1691
|
*/
|
|
1130
|
-
declare const
|
|
1692
|
+
declare const searchResultDescriptionMiddleware: AXPEntityModifier;
|
|
1693
|
+
declare const searchResultDescriptionMiddlewareProvider: AXPEntityModifierProvider;
|
|
1694
|
+
|
|
1131
1695
|
/**
|
|
1132
|
-
*
|
|
1133
|
-
*
|
|
1696
|
+
* When enabled in regional settings ({@link AXPRegionalSetting.MultiLanguageSupport}), walks each
|
|
1697
|
+
* property's `schema.interface` widget tree and sets `options.multiLanguage` on matching text-like
|
|
1698
|
+
* editors (including nested GridLayout leaves such as `pre.content` / `post.summaryContent`), unless
|
|
1699
|
+
* the node already specifies `multiLanguage` (including explicit false to opt out).
|
|
1134
1700
|
*/
|
|
1135
|
-
declare const
|
|
1701
|
+
declare const defaultMultiLanguageMiddleware: AXPEntityModifier;
|
|
1702
|
+
declare const defaultMultiLanguageMiddlewareProvider: AXPEntityModifierProvider;
|
|
1703
|
+
|
|
1136
1704
|
/**
|
|
1137
|
-
*
|
|
1705
|
+
* Registers entity CRUD commands and queries for the given entity keys.
|
|
1706
|
+
* Use in app/module providers; consumes AXPEntityService from this package.
|
|
1138
1707
|
*/
|
|
1139
|
-
declare
|
|
1708
|
+
declare function provideEntity(entityKeys: string[]): EnvironmentProviders;
|
|
1140
1709
|
|
|
1141
1710
|
interface AXPGetEntityDetailsQueryInput {
|
|
1142
1711
|
entity: string;
|
|
@@ -1171,9 +1740,14 @@ declare class AXPGetEntityDetailsQuery implements AXPQuery<AXPGetEntityDetailsQu
|
|
|
1171
1740
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPGetEntityDetailsQuery>;
|
|
1172
1741
|
}
|
|
1173
1742
|
|
|
1743
|
+
/**
|
|
1744
|
+
* i18n key for the synthetic root node ("all categories"). Resolve in templates with the translate pipe.
|
|
1745
|
+
*/
|
|
1746
|
+
declare const AXP_CATEGORY_TREE_ROOT_TITLE_I18N_KEY = "@general:terms.interface.selection.all-items";
|
|
1174
1747
|
interface CategoryQueryEvent {
|
|
1175
1748
|
skip: number;
|
|
1176
1749
|
take: number;
|
|
1750
|
+
sort?: AXDataSourceSortOption[];
|
|
1177
1751
|
filter?: {
|
|
1178
1752
|
field?: string;
|
|
1179
1753
|
value?: unknown;
|
|
@@ -1203,7 +1777,14 @@ interface CategoryTreeNodeData {
|
|
|
1203
1777
|
}
|
|
1204
1778
|
declare class AXPCategoryTreeService {
|
|
1205
1779
|
protected readonly entityResolver: AXPEntityDefinitionRegistryService;
|
|
1206
|
-
|
|
1780
|
+
private readonly translation;
|
|
1781
|
+
/** Sort field for list queries (backend); matches configured category display field. */
|
|
1782
|
+
private getAlphabeticalSortOptions;
|
|
1783
|
+
/**
|
|
1784
|
+
* Sort tree nodes by resolved display title (locale-aware).
|
|
1785
|
+
* Ensures correct order for multi-language titles when storage order differs from UI order.
|
|
1786
|
+
*/
|
|
1787
|
+
private sortTreeNodesByDisplayTitle;
|
|
1207
1788
|
/**
|
|
1208
1789
|
* Initialize category tree data source
|
|
1209
1790
|
*/
|
|
@@ -1220,6 +1801,11 @@ declare class AXPCategoryTreeService {
|
|
|
1220
1801
|
* Load root categories
|
|
1221
1802
|
*/
|
|
1222
1803
|
loadRootCategories(treeData: CategoryTreeNodeData, config: CategoryTreeConfig): Promise<Record<string, unknown>[] | null>;
|
|
1804
|
+
/**
|
|
1805
|
+
* Fetches a single category item by ID. Uses byKey when available (full item with parent),
|
|
1806
|
+
* otherwise falls back to list query with filter so ancestor chains can be built.
|
|
1807
|
+
*/
|
|
1808
|
+
fetchItemById(id: string, treeData: CategoryTreeNodeData, config: CategoryTreeConfig): Promise<Record<string, unknown> | null>;
|
|
1223
1809
|
/**
|
|
1224
1810
|
* Load children for a given node
|
|
1225
1811
|
*/
|
|
@@ -1236,6 +1822,48 @@ declare class AXPCategoryTreeService {
|
|
|
1236
1822
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPCategoryTreeService>;
|
|
1237
1823
|
}
|
|
1238
1824
|
|
|
1825
|
+
declare class AXPRelatedColumnEnrichmentService {
|
|
1826
|
+
private readonly metadataResolver;
|
|
1827
|
+
/**
|
|
1828
|
+
* Enriches entity columns with:
|
|
1829
|
+
* 1. dataPath for FK columns (e.g. fromPersonId) derived from lookup property schema
|
|
1830
|
+
* 2. title and showAs from related entity properties for dotted paths (e.g. person.firstName)
|
|
1831
|
+
*/
|
|
1832
|
+
enrich(entity: AXPEntity): Promise<AXPEntity>;
|
|
1833
|
+
/**
|
|
1834
|
+
* Derives dataPath for FK columns from lookup property schema.
|
|
1835
|
+
* Uses expose.target where source matches textField (default 'title').
|
|
1836
|
+
*/
|
|
1837
|
+
private deriveDataPathForFkColumn;
|
|
1838
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPRelatedColumnEnrichmentService, never>;
|
|
1839
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPRelatedColumnEnrichmentService>;
|
|
1840
|
+
}
|
|
1841
|
+
|
|
1842
|
+
interface AXPRelatedColumnMetadata {
|
|
1843
|
+
title?: string;
|
|
1844
|
+
showAs?: AXPEntityTableColumn['showAs'];
|
|
1845
|
+
}
|
|
1846
|
+
declare class AXPRelatedColumnMetadataResolver {
|
|
1847
|
+
private readonly entityLoader;
|
|
1848
|
+
/**
|
|
1849
|
+
* Resolves title and showAs for a column that references a related entity property via dotted path.
|
|
1850
|
+
* Uses relatedEntities when available; falls back to lookup expose when not.
|
|
1851
|
+
*/
|
|
1852
|
+
resolve(entity: AXPEntity, columnName: string): Promise<AXPRelatedColumnMetadata | null>;
|
|
1853
|
+
/**
|
|
1854
|
+
* Finds a lookup property whose expose target matches the dotted path.
|
|
1855
|
+
* Returns the lookup's entity string (e.g. 'PersonCore.Person') or null.
|
|
1856
|
+
*/
|
|
1857
|
+
private findLookupEntityByExposeTarget;
|
|
1858
|
+
/**
|
|
1859
|
+
* Derives showAs from source property schema.
|
|
1860
|
+
* Passes through the full interface (type, options, children) for column display.
|
|
1861
|
+
*/
|
|
1862
|
+
private deriveShowAs;
|
|
1863
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPRelatedColumnMetadataResolver, never>;
|
|
1864
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPRelatedColumnMetadataResolver>;
|
|
1865
|
+
}
|
|
1866
|
+
|
|
1239
1867
|
interface IEntitySelectorStage {
|
|
1240
1868
|
/** Select target entity using "module.entity" format */
|
|
1241
1869
|
entity(fullName: string): IInterfaceSelectorStage;
|
|
@@ -1253,6 +1881,8 @@ interface IPropertyFilterStage {
|
|
|
1253
1881
|
include(...propertyNames: string[]): IPropertyFilterStage;
|
|
1254
1882
|
/** Exclude provided property names (by AXPEntityProperty.name). Ignored if include() was already set. */
|
|
1255
1883
|
exclude(...propertyNames: string[]): IPropertyFilterStage;
|
|
1884
|
+
/** Mark provided property names as readonly. Overrides property schema for display. */
|
|
1885
|
+
readonlyProperties(...propertyNames: string[]): IPropertyFilterStage;
|
|
1256
1886
|
/** Optionally override dialog title */
|
|
1257
1887
|
title(text: string): IPropertyFilterStage;
|
|
1258
1888
|
/** Provide initial dialog context/model data */
|
|
@@ -1261,8 +1891,18 @@ interface IPropertyFilterStage {
|
|
|
1261
1891
|
size(size: AXPopupSizeType): IPropertyFilterStage;
|
|
1262
1892
|
/** Configure footer actions (cancel/submit/custom). If not called, defaults to cancel+submit. */
|
|
1263
1893
|
actions(delegate: (a: IActionBuilder) => void): IPropertyFilterStage;
|
|
1894
|
+
/**
|
|
1895
|
+
* Handler invoked when user clicks an action. Receives AXPDialogRef.
|
|
1896
|
+
* If handler throws, dialog stays open for retry.
|
|
1897
|
+
* If handler returns, dialog closes and show() resolves with the return value.
|
|
1898
|
+
*/
|
|
1899
|
+
onAction<T = any>(handler: (dialogRef: AXPDialogRef) => T | Promise<T>): IPropertyFilterStage & {
|
|
1900
|
+
show(): Promise<T>;
|
|
1901
|
+
};
|
|
1264
1902
|
/** Add an extra field into a specific group, using the original field builder API */
|
|
1265
1903
|
field(groupId: string, path: string, delegate?: (field: CompatFormFieldBuilder) => void): IPropertyFilterStage;
|
|
1904
|
+
/** Build and return the widget node without showing dialog */
|
|
1905
|
+
build(): Promise<AXPWidgetNode>;
|
|
1266
1906
|
/** Show dialog */
|
|
1267
1907
|
show(): Promise<AXPDialogRef>;
|
|
1268
1908
|
mode(mode: 'edit' | 'view'): IPropertyFilterStage;
|
|
@@ -1271,7 +1911,15 @@ declare class AXPEntityFormBuilderService implements IEntitySelectorStage {
|
|
|
1271
1911
|
private readonly entityRegistry;
|
|
1272
1912
|
private readonly layoutBuilder;
|
|
1273
1913
|
private readonly deviceService;
|
|
1914
|
+
private readonly expressionEvaluator;
|
|
1274
1915
|
entity(fullName: string): IInterfaceSelectorStage;
|
|
1916
|
+
/**
|
|
1917
|
+
* Fetches a record by ID for the specified entity.
|
|
1918
|
+
* @param fullName - Entity full name in "module.entity" format
|
|
1919
|
+
* @param id - Record ID to fetch
|
|
1920
|
+
* @returns Promise resolving to the record data, or empty object if not found
|
|
1921
|
+
*/
|
|
1922
|
+
getRecordById(fullName: string, id: string): Promise<Record<string, any>>;
|
|
1275
1923
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityFormBuilderService, never>;
|
|
1276
1924
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityFormBuilderService>;
|
|
1277
1925
|
}
|
|
@@ -1290,6 +1938,8 @@ declare class AXPMiddlewareEntityStorageService<TKey = any, TDetailDto extends A
|
|
|
1290
1938
|
private readonly backend;
|
|
1291
1939
|
private readonly allMiddlewares;
|
|
1292
1940
|
private readonly injector;
|
|
1941
|
+
/** In-flight read requests - identical parallel requests share one execution */
|
|
1942
|
+
private readonly inFlight;
|
|
1293
1943
|
get dbName(): string;
|
|
1294
1944
|
private filterMiddlewares;
|
|
1295
1945
|
private compose;
|
|
@@ -1305,11 +1955,21 @@ declare class AXPMiddlewareEntityStorageService<TKey = any, TDetailDto extends A
|
|
|
1305
1955
|
insertOne(entityName: string, entity: TCreateDto): Promise<TKey>;
|
|
1306
1956
|
getAll(entityName: string): Promise<TListItemDto[]>;
|
|
1307
1957
|
query(entityName: string, request: AXPQueryRequest): Promise<AXPPagedListResult<TListItemDto>>;
|
|
1958
|
+
count(entityName: string, request: Pick<AXPQueryRequest, 'filter' | 'sort'>): Promise<number>;
|
|
1959
|
+
queryAll(entityName: string, request: Pick<AXPQueryRequest, 'filter' | 'sort'>, options?: AXPEntityQueryAllOptions): Promise<AXPEntityQueryAllResult<TListItemDto>>;
|
|
1960
|
+
getMany(entityName: string, ids: TKey[]): Promise<(TListItemDto | null)[]>;
|
|
1961
|
+
exists(entityName: string, id: TKey): Promise<boolean>;
|
|
1962
|
+
upsertOne(entityName: string, entity: TCreateDto, options?: {
|
|
1963
|
+
merge?: boolean;
|
|
1964
|
+
}): Promise<TKey>;
|
|
1965
|
+
aggregate(entityName: string, request: AXPEntityAggregateRequest, options?: AXPEntityAggregateOptions): Promise<AXPEntityAggregateResult>;
|
|
1966
|
+
private runWithDedup;
|
|
1308
1967
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPMiddlewareEntityStorageService<any, any, any, any, any>, never>;
|
|
1309
1968
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPMiddlewareEntityStorageService<any, any, any, any, any>>;
|
|
1310
1969
|
}
|
|
1311
1970
|
|
|
1312
1971
|
declare function entityMasterCreateAction(): AXPEntityAction;
|
|
1972
|
+
declare function entityMasterEditAction(): AXPEntityAction;
|
|
1313
1973
|
declare function entityMasterBulkDeleteAction(): AXPEntityAction;
|
|
1314
1974
|
declare function entityMasterViewAction(): AXPEntityAction;
|
|
1315
1975
|
declare function entityMasterDeleteAction(): AXPEntityAction;
|
|
@@ -1321,12 +1981,23 @@ declare function entityMasterCrudActions(options?: {
|
|
|
1321
1981
|
}): AXPEntityAction[];
|
|
1322
1982
|
declare function entityMasterRecordActions(): AXPEntityAction[];
|
|
1323
1983
|
declare function entityDetailsCreateActions(parentId: string): AXPEntityAction;
|
|
1984
|
+
/**
|
|
1985
|
+
* Type-level Create with empty `process.data`; the FK is supplied from `relatedEntity.persistence.foreignKeyField`
|
|
1986
|
+
* when the related list is built (see `mergeForeignKeyFieldIntoCreateActions`).
|
|
1987
|
+
*/
|
|
1988
|
+
declare function entityDetailsCreateActionsDeferredParent(): AXPEntityAction;
|
|
1989
|
+
/**
|
|
1990
|
+
* Ensures each type-level `Entity:Create` action includes `process.data[foreignKeyField]` bound to the parent row id.
|
|
1991
|
+
*/
|
|
1992
|
+
declare function mergeForeignKeyFieldIntoCreateActions(foreignKeyField: string | undefined, actions: AXPEntityAction[] | undefined): AXPEntityAction[];
|
|
1993
|
+
/** Property names hidden on nested Create from a related list (`excludeProperties` plus `foreignKeyField` when set). */
|
|
1994
|
+
declare function collectNestedCreateHiddenProperties(relatedEntity: AXPRelatedEntity): string[] | undefined;
|
|
1324
1995
|
declare function entityDetailsSimpleCondition(fk: string): AXPQueryFilter;
|
|
1325
1996
|
declare function entityDetailsReferenceCondition(type: string): AXPQueryFilter[];
|
|
1326
1997
|
declare function entityDetailsEditAction(): AXPEntityAction;
|
|
1327
1998
|
declare function entityDetailsNewEditAction(): AXPEntityAction;
|
|
1328
1999
|
declare function entityOverrideDetailsViewAction(): AXPEntityAction;
|
|
1329
|
-
declare function entityDetailsCrudActions(parentId
|
|
2000
|
+
declare function entityDetailsCrudActions(parentId?: string, options?: {
|
|
1330
2001
|
create?: boolean;
|
|
1331
2002
|
delete?: boolean;
|
|
1332
2003
|
view?: boolean;
|
|
@@ -1351,13 +2022,18 @@ declare function detectEntityChanges(oldObj: any, newObj: any): AXPEntityChangeS
|
|
|
1351
2022
|
|
|
1352
2023
|
declare class AXPEntityCategoryTreeSelectorComponent extends AXBasePageComponent implements OnInit {
|
|
1353
2024
|
protected readonly categoryTreeService: AXPCategoryTreeService;
|
|
2025
|
+
/** i18n key for the synthetic "all items" root row; resolved in the template with the translate pipe. */
|
|
2026
|
+
protected readonly categoryTreeRootTitleI18nKey = "@general:terms.interface.selection.all-items";
|
|
1354
2027
|
private readonly translationService;
|
|
1355
2028
|
protected readonly highlightService: AXHighlightService;
|
|
2029
|
+
private readonly changeDetectorRef;
|
|
1356
2030
|
entityKey: _angular_core.WritableSignal<string>;
|
|
1357
2031
|
textField: _angular_core.WritableSignal<string>;
|
|
1358
2032
|
valueField: _angular_core.WritableSignal<string>;
|
|
1359
2033
|
allowMultiple: _angular_core.WritableSignal<boolean>;
|
|
1360
2034
|
selectedValues: _angular_core.WritableSignal<string[]>;
|
|
2035
|
+
/** Optional input for when popup passes selected values via inputs instead of data */
|
|
2036
|
+
selectedValuesInput: _angular_core.WritableSignal<string[]>;
|
|
1361
2037
|
searchPlaceholder: _angular_core.WritableSignal<string>;
|
|
1362
2038
|
excludedNodeId: _angular_core.WritableSignal<string | undefined>;
|
|
1363
2039
|
searchWithChildren: _angular_core.WritableSignal<boolean>;
|
|
@@ -1384,9 +2060,19 @@ declare class AXPEntityCategoryTreeSelectorComponent extends AXBasePageComponent
|
|
|
1384
2060
|
private relevantNodeIds;
|
|
1385
2061
|
private expandedNodesBeforeSearch;
|
|
1386
2062
|
private nodesExpandedDuringSearch;
|
|
1387
|
-
private
|
|
2063
|
+
private initialExpandSyncDone;
|
|
2064
|
+
constructor();
|
|
1388
2065
|
ngOnInit(): void;
|
|
1389
2066
|
private initializeTree;
|
|
2067
|
+
/**
|
|
2068
|
+
* Called when popup data arrives after ngOnInit: load data, set selection, expand and sync.
|
|
2069
|
+
*/
|
|
2070
|
+
private runInitialExpandAndSync;
|
|
2071
|
+
/**
|
|
2072
|
+
* Runs expand path + sync selection once the tree viewChild is available.
|
|
2073
|
+
* Uses retry loop so we don't run before the view has rendered the tree.
|
|
2074
|
+
*/
|
|
2075
|
+
private runExpandAndSyncWhenTreeReady;
|
|
1390
2076
|
/**
|
|
1391
2077
|
* Handles search input value changes - Uses server-side search for efficiency and reliability
|
|
1392
2078
|
*/
|
|
@@ -1407,7 +2093,8 @@ declare class AXPEntityCategoryTreeSelectorComponent extends AXBasePageComponent
|
|
|
1407
2093
|
*/
|
|
1408
2094
|
private collectChildrenRecursively;
|
|
1409
2095
|
/**
|
|
1410
|
-
* Fetches a single item by ID
|
|
2096
|
+
* Fetches a single item by ID. Uses category tree service so byKey is used when available
|
|
2097
|
+
* (returns full item with parent/parentId for building ancestor chains).
|
|
1411
2098
|
*/
|
|
1412
2099
|
private fetchItemById;
|
|
1413
2100
|
/**
|
|
@@ -1423,13 +2110,20 @@ declare class AXPEntityCategoryTreeSelectorComponent extends AXBasePageComponent
|
|
|
1423
2110
|
* Resets search state and restores tree to original expanded state
|
|
1424
2111
|
*/
|
|
1425
2112
|
private resetSearch;
|
|
1426
|
-
|
|
2113
|
+
/**
|
|
2114
|
+
* Restores selection state after tree reload.
|
|
2115
|
+
* Expands ancestor nodes and selects the previously selected leaf nodes.
|
|
2116
|
+
*/
|
|
2117
|
+
private restoreSelectionAfterReload;
|
|
1427
2118
|
protected onNodeSelect(event: AXTreeViewNodeSelectEvent): Promise<void>;
|
|
1428
|
-
protected onSelectionChange(event: AXTreeViewSelectionChangeEvent): Promise<void>;
|
|
1429
2119
|
/** Datasource callback for tree-view component. */
|
|
1430
2120
|
protected datasource: (id?: string) => Promise<AXTreeViewNode[]>;
|
|
1431
2121
|
protected onConfirm(): Promise<void>;
|
|
1432
2122
|
protected onCancel(): Promise<void>;
|
|
2123
|
+
/**
|
|
2124
|
+
* Clears all selected items
|
|
2125
|
+
*/
|
|
2126
|
+
protected onClearAll(): void;
|
|
1433
2127
|
/**
|
|
1434
2128
|
* Checks if a node matches the current search term
|
|
1435
2129
|
*/
|
|
@@ -1439,62 +2133,76 @@ declare class AXPEntityCategoryTreeSelectorComponent extends AXBasePageComponent
|
|
|
1439
2133
|
*/
|
|
1440
2134
|
protected isNodeSelected(nodeId: string | number | undefined): boolean;
|
|
1441
2135
|
/**
|
|
1442
|
-
*
|
|
1443
|
-
*
|
|
1444
|
-
*
|
|
1445
|
-
*/
|
|
1446
|
-
protected handleCheckboxChange(nodeId: string | number | undefined, checked: boolean): Promise<void>;
|
|
1447
|
-
/**
|
|
1448
|
-
* Selects a node and recursively selects all its children
|
|
2136
|
+
* Expands parent nodes, collects all LEAF descendants, and selects them visually.
|
|
2137
|
+
* If the parent itself is a leaf (no children), it will be added.
|
|
2138
|
+
* When prefetchedChildren is provided, avoids an extra datasource(parentId) call.
|
|
1449
2139
|
*/
|
|
1450
|
-
private
|
|
2140
|
+
private selectAllLeafDescendants;
|
|
1451
2141
|
/**
|
|
1452
|
-
*
|
|
2142
|
+
* Removes all LEAF descendants from selectedNodeIds.
|
|
2143
|
+
* For 'all' node: clears everything and uses tree's deselectAll().
|
|
2144
|
+
* For other nodes: tree handles visual state via user click.
|
|
1453
2145
|
*/
|
|
1454
|
-
private
|
|
2146
|
+
private deselectAllLeafDescendants;
|
|
1455
2147
|
/**
|
|
1456
|
-
*
|
|
2148
|
+
* Recursively expands parent nodes and collects LEAF node IDs.
|
|
2149
|
+
* When treeComponent is provided, expands each parent node before loading children.
|
|
2150
|
+
* When prefetchedChildren is provided, uses it instead of calling datasource(parentId) (one less API call).
|
|
2151
|
+
* Fetches each node's children at most once by passing grandchildren when recursing.
|
|
1457
2152
|
*/
|
|
1458
|
-
private
|
|
2153
|
+
private collectLeafNodes;
|
|
1459
2154
|
/**
|
|
1460
|
-
*
|
|
2155
|
+
* Checks if a node has children
|
|
1461
2156
|
*/
|
|
1462
|
-
private
|
|
2157
|
+
private nodeHasChildren;
|
|
1463
2158
|
/**
|
|
1464
|
-
*
|
|
1465
|
-
* Called after a node is selected/deselected to update parent checkbox states
|
|
2159
|
+
* Checks if a node is a leaf (has no children)
|
|
1466
2160
|
*/
|
|
1467
|
-
private
|
|
2161
|
+
private isLeafNodeCheck;
|
|
1468
2162
|
/**
|
|
1469
|
-
*
|
|
1470
|
-
* This method directly calls datasource without expanding/collapsing nodes to avoid UI glitches
|
|
2163
|
+
* Caches node data from a tree node
|
|
1471
2164
|
*/
|
|
1472
|
-
private
|
|
1473
|
-
private updateSelectedNodes;
|
|
2165
|
+
private cacheNodeFromTreeNode;
|
|
1474
2166
|
/**
|
|
1475
|
-
*
|
|
1476
|
-
*
|
|
2167
|
+
* Builds complete ancestor chains for all selected node IDs.
|
|
2168
|
+
* Returns a Map where key is the selected node ID and value is array of ancestor IDs from root to parent.
|
|
2169
|
+
* Batch-fetches missing node and ancestor data in parallel to minimize API calls.
|
|
1477
2170
|
*/
|
|
1478
|
-
private
|
|
2171
|
+
private buildAncestorChains;
|
|
1479
2172
|
/**
|
|
1480
|
-
* Expands
|
|
2173
|
+
* Expands ancestor nodes in order from root to leaf.
|
|
2174
|
+
* This ensures parent nodes are loaded into the tree before selecting children.
|
|
1481
2175
|
*/
|
|
1482
|
-
private
|
|
2176
|
+
private expandAncestorNodesInOrder;
|
|
2177
|
+
/** Waits until the node is expanded (tree has loaded children). Polls so deep paths load. */
|
|
2178
|
+
private waitForNodeExpanded;
|
|
1483
2179
|
/**
|
|
1484
|
-
*
|
|
1485
|
-
*
|
|
2180
|
+
* Syncs selection state with the tree component.
|
|
2181
|
+
* Selects leaf nodes and manually updates parent states (indeterminate/selected).
|
|
1486
2182
|
*/
|
|
1487
|
-
private
|
|
2183
|
+
private syncSelectionWithTree;
|
|
1488
2184
|
/**
|
|
1489
|
-
*
|
|
1490
|
-
*
|
|
2185
|
+
* Updates parent node states (selected/indeterminate) based on children selection.
|
|
2186
|
+
* Called after leaf nodes are selected to properly show parent states.
|
|
2187
|
+
* Works bottom-up from deepest parents to root, tracking states in a Map.
|
|
1491
2188
|
*/
|
|
1492
|
-
private
|
|
2189
|
+
private updateParentStatesAfterSelection;
|
|
1493
2190
|
/**
|
|
1494
2191
|
* Loads node data for IDs that are selected but not yet in the cache.
|
|
1495
2192
|
* This is critical for pre-selected values in collapsed branches.
|
|
2193
|
+
* Fetches all missing IDs in parallel to minimize API calls and latency.
|
|
1496
2194
|
*/
|
|
1497
2195
|
private loadMissingNodeData;
|
|
2196
|
+
/**
|
|
2197
|
+
* For each selected id, if cached item has no parent (e.g. batch query returned minimal fields),
|
|
2198
|
+
* re-fetch by id so we have parent/parentId for building ancestor chains.
|
|
2199
|
+
* Fetches all needing refresh in parallel.
|
|
2200
|
+
*/
|
|
2201
|
+
private ensureParentDataInCache;
|
|
2202
|
+
/**
|
|
2203
|
+
* Resolves parent ID from node data: supports nested `parent` object or flat parentId/parentKey.
|
|
2204
|
+
*/
|
|
2205
|
+
private getParentIdFromNodeData;
|
|
1498
2206
|
/**
|
|
1499
2207
|
* Marks nodes as selected in the tree structure based on selectedNodeIds.
|
|
1500
2208
|
* This ensures pre-selected nodes appear selected when the tree is rendered.
|
|
@@ -1513,7 +2221,8 @@ declare class AXPEntityCategoryTreeSelectorComponent extends AXBasePageComponent
|
|
|
1513
2221
|
*/
|
|
1514
2222
|
private processRootNode;
|
|
1515
2223
|
/**
|
|
1516
|
-
* Processes child nodes: marks excluded as disabled
|
|
2224
|
+
* Processes child nodes: marks excluded as disabled
|
|
2225
|
+
* Selection marking is handled in datasource callback ONLY during initial load
|
|
1517
2226
|
*/
|
|
1518
2227
|
private processChildNodes;
|
|
1519
2228
|
/**
|
|
@@ -1526,7 +2235,7 @@ declare class AXPEntityCategoryTreeSelectorComponent extends AXBasePageComponent
|
|
|
1526
2235
|
private cacheNodeDataFromNodes;
|
|
1527
2236
|
/**
|
|
1528
2237
|
* Calculate the full path from root to the selected node.
|
|
1529
|
-
* Returns an array of strings like ["
|
|
2238
|
+
* Returns an array of strings like ["Operations", "IT Operations"] for node "IT Operations" under parent "Operations".
|
|
1530
2239
|
* Uses tree-view's getNodePath() API when available, otherwise falls back to manual calculation.
|
|
1531
2240
|
*/
|
|
1532
2241
|
private calculateNodePath;
|
|
@@ -1538,14 +2247,6 @@ declare class AXPEntityCategoryTreeSelectorComponent extends AXBasePageComponent
|
|
|
1538
2247
|
* Get the display title for a node.
|
|
1539
2248
|
*/
|
|
1540
2249
|
private getNodeTitle;
|
|
1541
|
-
/**
|
|
1542
|
-
* Checks if a node is a leaf node (has no children)
|
|
1543
|
-
*/
|
|
1544
|
-
private isLeafNode;
|
|
1545
|
-
/**
|
|
1546
|
-
* Checks if a node has children by querying the data source
|
|
1547
|
-
*/
|
|
1548
|
-
private checkIfNodeHasChildren;
|
|
1549
2250
|
private getSelectedItems;
|
|
1550
2251
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityCategoryTreeSelectorComponent, never>;
|
|
1551
2252
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPEntityCategoryTreeSelectorComponent, "axp-entity-category-tree-selector", never, {}, {}, never, never, true, never>;
|
|
@@ -1555,6 +2256,7 @@ declare class AXPEntityCategoryWidgetColumnComponent extends AXPColumnWidgetComp
|
|
|
1555
2256
|
protected readonly entityDetailPopoverService: AXPEntityDetailPopoverService;
|
|
1556
2257
|
protected readonly formatService: AXFormatService;
|
|
1557
2258
|
protected readonly entityResolver: AXPEntityDefinitionRegistryService;
|
|
2259
|
+
private readonly categoryBatchResolver;
|
|
1558
2260
|
private readonly rawValueSignal;
|
|
1559
2261
|
set rawValueInput(value: any);
|
|
1560
2262
|
protected entity: _angular_core.Signal<string>;
|
|
@@ -1570,12 +2272,21 @@ declare class AXPEntityCategoryWidgetColumnComponent extends AXPColumnWidgetComp
|
|
|
1570
2272
|
private efEntity;
|
|
1571
2273
|
private efDisplay;
|
|
1572
2274
|
protected visibleItems: _angular_core.Signal<any[]>;
|
|
2275
|
+
protected columnItems: _angular_core.Signal<AXPColumnItemListItem[]>;
|
|
1573
2276
|
protected showItemDetail(item: any, index: number): Promise<void>;
|
|
1574
|
-
protected handleItemClick(
|
|
2277
|
+
protected handleItemClick(listItem: AXPColumnItemListItem): void;
|
|
1575
2278
|
protected getItemPath(item: any): string[];
|
|
1576
2279
|
protected hasParent(item: any): boolean;
|
|
1577
2280
|
protected getItemText(item: any): string;
|
|
2281
|
+
protected joinPath(path: string[]): string;
|
|
1578
2282
|
protected getItemId(item: any): string;
|
|
2283
|
+
protected getBreadcrumbPath(item: any): string;
|
|
2284
|
+
private resolveItemsWithPaths;
|
|
2285
|
+
/**
|
|
2286
|
+
* Build path from categories array when record has full chain (id, parentId, title).
|
|
2287
|
+
* Used when middleware enriches categories on create/update.
|
|
2288
|
+
*/
|
|
2289
|
+
private buildItemWithPathFromChain;
|
|
1579
2290
|
private extractItemWithPath;
|
|
1580
2291
|
/**
|
|
1581
2292
|
* Calculate the full path from root to the item.
|
|
@@ -1633,6 +2344,11 @@ declare class AXPEntityCategoryWidgetEditComponent extends AXPValueWidgetCompone
|
|
|
1633
2344
|
protected tagBox: _angular_core.Signal<AXTagBoxComponent | undefined>;
|
|
1634
2345
|
protected searchTerm: _angular_core.WritableSignal<string | null>;
|
|
1635
2346
|
private entityDef;
|
|
2347
|
+
/**
|
|
2348
|
+
* Flag to prevent the value effect from running during internal updates.
|
|
2349
|
+
* This prevents circular dependency when setItems() calls setValue().
|
|
2350
|
+
*/
|
|
2351
|
+
private isInternalUpdate;
|
|
1636
2352
|
protected handleAddClick(e: AXClickEvent): void;
|
|
1637
2353
|
protected handleValueChange(e: AXValueChangedEvent): void;
|
|
1638
2354
|
protected handleOnBlur(e: AXFocusEvent): void;
|
|
@@ -1647,14 +2363,14 @@ declare class AXPEntityCategoryWidgetEditComponent extends AXPValueWidgetCompone
|
|
|
1647
2363
|
private singleOrMultiple;
|
|
1648
2364
|
protected getItemLabel(item: any): string;
|
|
1649
2365
|
/**
|
|
1650
|
-
* Get item path as array for breadcrumb component
|
|
2366
|
+
* Get item path as array for breadcrumb component (raw MLS or string per segment).
|
|
1651
2367
|
*/
|
|
1652
|
-
protected getItemPath(item: any):
|
|
2368
|
+
protected getItemPath(item: any): AXPMultiLanguageString[];
|
|
1653
2369
|
/**
|
|
1654
2370
|
* Join path array with separator.
|
|
1655
2371
|
* Override this method to customize the separator (e.g., " > ", " -> ", " / ")
|
|
1656
2372
|
*/
|
|
1657
|
-
protected joinPath(path:
|
|
2373
|
+
protected joinPath(path: unknown[]): string;
|
|
1658
2374
|
protected getItemId(item: any): string;
|
|
1659
2375
|
/**
|
|
1660
2376
|
* Calculate the full path from root to the item.
|
|
@@ -1666,7 +2382,6 @@ declare class AXPEntityCategoryWidgetEditComponent extends AXPValueWidgetCompone
|
|
|
1666
2382
|
}
|
|
1667
2383
|
|
|
1668
2384
|
declare class AXPEntityCategoryWidgetViewComponent extends AXPValueWidgetComponent<any> {
|
|
1669
|
-
protected readonly formatService: AXFormatService;
|
|
1670
2385
|
protected readonly entityResolver: AXPEntityDefinitionRegistryService;
|
|
1671
2386
|
protected entity: _angular_core.Signal<string>;
|
|
1672
2387
|
protected multiple: _angular_core.Signal<boolean>;
|
|
@@ -1678,12 +2393,11 @@ declare class AXPEntityCategoryWidgetViewComponent extends AXPValueWidgetCompone
|
|
|
1678
2393
|
private entityDef;
|
|
1679
2394
|
protected displayItems: _angular_core.WritableSignal<{
|
|
1680
2395
|
id: string;
|
|
1681
|
-
|
|
2396
|
+
titleRaw: AXPMultiLanguageString | null | undefined;
|
|
1682
2397
|
}[]>;
|
|
1683
2398
|
private efEntity;
|
|
1684
2399
|
private efDisplay;
|
|
1685
2400
|
private extractItem;
|
|
1686
|
-
private getDisplayText;
|
|
1687
2401
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityCategoryWidgetViewComponent, never>;
|
|
1688
2402
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPEntityCategoryWidgetViewComponent, "axp-entity-category-widget-view", never, {}, {}, never, never, true, never>;
|
|
1689
2403
|
}
|
|
@@ -1691,110 +2405,95 @@ declare class AXPEntityCategoryWidgetViewComponent extends AXPValueWidgetCompone
|
|
|
1691
2405
|
declare const AXPEntityCategoryWidget: AXPWidgetConfig;
|
|
1692
2406
|
|
|
1693
2407
|
declare class AXPTruncatedBreadcrumbComponent implements OnDestroy {
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
sections: _angular_core.InputSignal<string[]>;
|
|
1698
|
-
/**
|
|
1699
|
-
* Maximum number of characters per section.
|
|
1700
|
-
* Can be a number or 'auto' to calculate based on available space.
|
|
1701
|
-
*/
|
|
2408
|
+
private readonly mlsResolver;
|
|
2409
|
+
/** Plain string or locale map per segment; truncation uses resolved text (see {@link resolvedSectionTexts}). */
|
|
2410
|
+
sections: _angular_core.InputSignal<readonly (_acorex_core_translation.AXMultiLanguageString | null | undefined)[]>;
|
|
1702
2411
|
characterLimit: _angular_core.InputSignal<number | "auto">;
|
|
1703
|
-
/**
|
|
1704
|
-
* Maximum number of sections to display before showing ellipsis.
|
|
1705
|
-
* Can be a number or 'auto' to calculate based on available space.
|
|
1706
|
-
*/
|
|
1707
2412
|
sectionLimit: _angular_core.InputSignal<number | "auto">;
|
|
1708
|
-
/**
|
|
1709
|
-
* Icon class for separator between sections
|
|
1710
|
-
*/
|
|
1711
2413
|
separatorIcon: _angular_core.InputSignal<string>;
|
|
1712
|
-
/**
|
|
1713
|
-
* Icon class for ellipsis
|
|
1714
|
-
*/
|
|
1715
2414
|
ellipsisIcon: _angular_core.InputSignal<string>;
|
|
1716
|
-
/**
|
|
1717
|
-
* Icon class for eye icon (collapse button)
|
|
1718
|
-
*/
|
|
1719
2415
|
eyeIcon: _angular_core.InputSignal<string>;
|
|
1720
2416
|
protected container: _angular_core.Signal<ElementRef<HTMLDivElement> | undefined>;
|
|
1721
2417
|
protected isExpanded: _angular_core.WritableSignal<boolean>;
|
|
1722
2418
|
private containerWidth;
|
|
1723
2419
|
private resizeObserver;
|
|
1724
|
-
/**
|
|
1725
|
-
|
|
1726
|
-
*/
|
|
2420
|
+
/** Resolved display strings for length / ellipsis (same rules as the pipe). */
|
|
2421
|
+
protected resolvedSectionTexts: _angular_core.Signal<string[]>;
|
|
1727
2422
|
protected effectiveCharacterLimit: _angular_core.Signal<number>;
|
|
1728
|
-
/**
|
|
1729
|
-
* Effective section limit (calculated if 'auto', otherwise uses input value)
|
|
1730
|
-
*/
|
|
1731
2423
|
protected effectiveSectionLimit: _angular_core.Signal<number>;
|
|
2424
|
+
protected hasTruncatedText: _angular_core.Signal<boolean>;
|
|
2425
|
+
protected hasHiddenSections: _angular_core.Signal<boolean>;
|
|
1732
2426
|
/**
|
|
1733
|
-
*
|
|
2427
|
+
* canToggle: If this is false, NO Eye Icon and NO Click events will exist.
|
|
1734
2428
|
*/
|
|
1735
|
-
protected
|
|
2429
|
+
protected canToggle: _angular_core.Signal<boolean>;
|
|
2430
|
+
protected allSectionsTruncated: _angular_core.Signal<{
|
|
1736
2431
|
text: string;
|
|
1737
2432
|
original: string;
|
|
1738
2433
|
}[]>;
|
|
1739
|
-
/**
|
|
1740
|
-
* All sections with full text (for expanded display)
|
|
1741
|
-
*/
|
|
1742
|
-
protected allSectionsFull: _angular_core.Signal<string[]>;
|
|
1743
|
-
/**
|
|
1744
|
-
* Sections to display (first N sections) when collapsed
|
|
1745
|
-
*/
|
|
1746
2434
|
protected displayedSections: _angular_core.Signal<{
|
|
1747
2435
|
text: string;
|
|
1748
2436
|
original: string;
|
|
1749
2437
|
}[]>;
|
|
1750
|
-
/**
|
|
1751
|
-
* Last section (always shown if there are hidden sections)
|
|
1752
|
-
*/
|
|
1753
2438
|
protected lastSection: _angular_core.Signal<{
|
|
1754
2439
|
text: string;
|
|
1755
2440
|
original: string;
|
|
1756
2441
|
}>;
|
|
1757
|
-
|
|
1758
|
-
* Check if there are hidden sections
|
|
1759
|
-
*/
|
|
1760
|
-
protected hasHiddenSections: _angular_core.Signal<boolean>;
|
|
2442
|
+
protected fullPath: _angular_core.Signal<string>;
|
|
1761
2443
|
constructor();
|
|
1762
2444
|
ngOnDestroy(): void;
|
|
1763
|
-
/**
|
|
1764
|
-
* Handles click on separator icon to expand
|
|
1765
|
-
*/
|
|
1766
2445
|
protected handleSeparatorClick(event: Event): void;
|
|
1767
|
-
/**
|
|
1768
|
-
* Handles click on ellipsis icon to expand
|
|
1769
|
-
*/
|
|
1770
2446
|
protected handleEllipsisClick(event: Event): void;
|
|
2447
|
+
protected handleCollapseClick(event: Event): void;
|
|
2448
|
+
private initializeResizeObserver;
|
|
2449
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPTruncatedBreadcrumbComponent, never>;
|
|
2450
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPTruncatedBreadcrumbComponent, "axp-truncated-breadcrumb", never, { "sections": { "alias": "sections"; "required": false; "isSignal": true; }; "characterLimit": { "alias": "characterLimit"; "required": false; "isSignal": true; }; "sectionLimit": { "alias": "sectionLimit"; "required": false; "isSignal": true; }; "separatorIcon": { "alias": "separatorIcon"; "required": false; "isSignal": true; }; "ellipsisIcon": { "alias": "ellipsisIcon"; "required": false; "isSignal": true; }; "eyeIcon": { "alias": "eyeIcon"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
2451
|
+
}
|
|
2452
|
+
|
|
2453
|
+
declare const AXPEntityDefinitionProviderWidget: AXPWidgetConfig;
|
|
2454
|
+
declare module '@acorex/platform/layout/widget-core' {
|
|
2455
|
+
interface AXPWidgetTypesMap {
|
|
2456
|
+
entityDefinitionProvider: 'entity-definition-provider-editor';
|
|
2457
|
+
}
|
|
2458
|
+
}
|
|
2459
|
+
|
|
2460
|
+
declare class AXPEntityDefinitionProviderWidgetEditComponent extends AXPProviderSelectWidgetEditBase {
|
|
2461
|
+
private readonly entityRegistry;
|
|
1771
2462
|
/**
|
|
1772
|
-
*
|
|
2463
|
+
* Last applied module filter (from context) to avoid redundant reloads.
|
|
1773
2464
|
*/
|
|
1774
|
-
|
|
2465
|
+
private readonly lastModuleFilterKey;
|
|
1775
2466
|
/**
|
|
1776
|
-
*
|
|
2467
|
+
* Reloads entity options when `filterModuleField` changes in form context (not only via `widget.refresh()`).
|
|
1777
2468
|
*/
|
|
1778
|
-
private
|
|
2469
|
+
private readonly reloadWhenModuleContextChanges;
|
|
1779
2470
|
/**
|
|
1780
|
-
*
|
|
2471
|
+
* Options:
|
|
2472
|
+
* - `filterModuleField`: sibling context field name (e.g. `entityListModule`); when set, only entities in that module are listed.
|
|
2473
|
+
* - `valueFormat`: `fullKey` (`module.name`, default) or `entityName` (short name only, for menus that store `entityListRef.entity`).
|
|
1781
2474
|
*/
|
|
1782
|
-
|
|
2475
|
+
protected loadDataSourceRows(): Promise<Array<{
|
|
2476
|
+
value: string;
|
|
2477
|
+
title: string;
|
|
2478
|
+
}>>;
|
|
2479
|
+
refresh(): void;
|
|
1783
2480
|
/**
|
|
1784
|
-
*
|
|
2481
|
+
* Reads sibling field from context store data (same shape as `lodash/get` paths).
|
|
1785
2482
|
*/
|
|
1786
|
-
private
|
|
2483
|
+
private readModuleFromContext;
|
|
1787
2484
|
/**
|
|
1788
|
-
*
|
|
2485
|
+
* Resolves a sibling field path relative to the current widget's parent path.
|
|
1789
2486
|
*/
|
|
1790
|
-
private
|
|
1791
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<
|
|
1792
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<
|
|
2487
|
+
private resolveSiblingContextPath;
|
|
2488
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityDefinitionProviderWidgetEditComponent, never>;
|
|
2489
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPEntityDefinitionProviderWidgetEditComponent, "axp-entity-definition-provider-widget-edit", never, {}, {}, never, never, true, never>;
|
|
1793
2490
|
}
|
|
1794
2491
|
|
|
1795
2492
|
declare class AXPEntityListTableService {
|
|
1796
2493
|
private readonly workflow;
|
|
2494
|
+
private readonly commandService;
|
|
1797
2495
|
private readonly expressionEvaluator;
|
|
2496
|
+
private readonly settings;
|
|
1798
2497
|
/**
|
|
1799
2498
|
* Convert Entity to List Widget Options
|
|
1800
2499
|
*/
|
|
@@ -1815,6 +2514,12 @@ declare class AXPEntityListTableService {
|
|
|
1815
2514
|
* Convert Entity Actions to Row Commands
|
|
1816
2515
|
*/
|
|
1817
2516
|
private createRowCommands;
|
|
2517
|
+
/**
|
|
2518
|
+
* Wraps string values with AXP_ROW_EXPR_PREFIX so widget-renderer does not
|
|
2519
|
+
* evaluate them (it only treats {{ ... }} as expressions). Data-list will
|
|
2520
|
+
* unwrap and evaluate per row with row data. Only used for secondary commands.
|
|
2521
|
+
*/
|
|
2522
|
+
private wrapRowExpr;
|
|
1818
2523
|
/**
|
|
1819
2524
|
* Check if entity has Selected Scope Actions
|
|
1820
2525
|
*/
|
|
@@ -1824,6 +2529,11 @@ declare class AXPEntityListTableService {
|
|
|
1824
2529
|
* Handle execution of a row command (shared by double-click and command handlers)
|
|
1825
2530
|
*/
|
|
1826
2531
|
private handleRowCommand;
|
|
2532
|
+
/**
|
|
2533
|
+
* When a related entity list declares `excludeProperties`, row commands bypass the details page
|
|
2534
|
+
* `execute()` merge — apply the same exclusions for embedded create/update commands.
|
|
2535
|
+
*/
|
|
2536
|
+
private mergeRelatedListFormOptions;
|
|
1827
2537
|
/**
|
|
1828
2538
|
* Create default events
|
|
1829
2539
|
*/
|
|
@@ -1832,26 +2542,43 @@ declare class AXPEntityListTableService {
|
|
|
1832
2542
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityListTableService>;
|
|
1833
2543
|
}
|
|
1834
2544
|
|
|
2545
|
+
interface AXPEntityListToolbarConvertOptions {
|
|
2546
|
+
excludeColumns?: string[];
|
|
2547
|
+
includeColumns?: string[];
|
|
2548
|
+
/** Related list: evaluated `AXPEntityTableColumn[]` from `AXPRelatedEntity.columns` */
|
|
2549
|
+
relatedTableColumns?: AXPEntityTableColumn[];
|
|
2550
|
+
customFilterDefinitions?: Partial<AXPFilterDefinition>[];
|
|
2551
|
+
}
|
|
1835
2552
|
declare class AXPEntityListToolbarService {
|
|
1836
2553
|
private readonly widgetResolver;
|
|
1837
2554
|
/**
|
|
1838
2555
|
* Convert Entity to Toolbar Options
|
|
1839
2556
|
*/
|
|
1840
|
-
convertEntityToolbarOptions(entity: AXPEntity, options:
|
|
2557
|
+
convertEntityToolbarOptions(entity: AXPEntity, options: AXPEntityListToolbarConvertOptions | undefined): Promise<{
|
|
1841
2558
|
filterDefinitions: AXPFilterDefinition[];
|
|
1842
2559
|
columnDefinitions: AXPColumnQuery[];
|
|
1843
2560
|
sortDefinitions: AXPSortDefinition[];
|
|
1844
2561
|
}>;
|
|
2562
|
+
/**
|
|
2563
|
+
* Merges custom filter definitions into the entity-derived list by `field`.
|
|
2564
|
+
* Matching fields: custom properties are applied on top of the base definition.
|
|
2565
|
+
* Non-matching custom entries are appended.
|
|
2566
|
+
*/
|
|
2567
|
+
private mergeFilterDefinitions;
|
|
2568
|
+
private filterFieldKey;
|
|
2569
|
+
private mergeFilterDefinition;
|
|
1845
2570
|
/**
|
|
1846
2571
|
* Create Filter Definitions for Toolbar
|
|
1847
2572
|
*/
|
|
1848
2573
|
private createFilterDefinitions;
|
|
1849
2574
|
/**
|
|
1850
|
-
* Create Column Definitions for Toolbar
|
|
2575
|
+
* Create Column Definitions for Toolbar.
|
|
2576
|
+
* Includes both entity.properties and enriched columns (e.g. person.firstName with showAs).
|
|
1851
2577
|
*/
|
|
1852
2578
|
private createColumnDefinitions;
|
|
1853
2579
|
/**
|
|
1854
|
-
* Create Sort Definitions for Toolbar
|
|
2580
|
+
* Create Sort Definitions for Toolbar.
|
|
2581
|
+
* Includes entity.properties with sort enabled, plus enriched columns (dotted paths).
|
|
1855
2582
|
*/
|
|
1856
2583
|
private createSortDefinitions;
|
|
1857
2584
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityListToolbarService, never>;
|
|
@@ -1867,6 +2594,8 @@ declare class AXPEntityListWidgetViewComponent extends AXPValueWidgetComponent {
|
|
|
1867
2594
|
protected deviceService: AXPDeviceService;
|
|
1868
2595
|
protected commandService: AXPCommandService;
|
|
1869
2596
|
protected eventService: AXPBroadcastEventService;
|
|
2597
|
+
private readonly expressionEvaluator;
|
|
2598
|
+
private readonly route;
|
|
1870
2599
|
protected isMounted: _angular_core.WritableSignal<boolean>;
|
|
1871
2600
|
readonly entity: _angular_core.WritableSignal<AXPEntity | null>;
|
|
1872
2601
|
protected listNode: _angular_core.WritableSignal<AXPWidgetNode | null>;
|
|
@@ -1880,6 +2609,8 @@ declare class AXPEntityListWidgetViewComponent extends AXPValueWidgetComponent {
|
|
|
1880
2609
|
protected entitySource: _angular_core.Signal<any>;
|
|
1881
2610
|
protected excludeColumns: _angular_core.Signal<string[]>;
|
|
1882
2611
|
protected includeColumns: _angular_core.Signal<string[]>;
|
|
2612
|
+
protected relatedTableColumns: _angular_core.Signal<AXPEntityTableColumn[] | undefined>;
|
|
2613
|
+
protected customFilterDefinitions: _angular_core.Signal<Partial<AXPFilterDefinition>[] | undefined>;
|
|
1883
2614
|
protected externalActions: _angular_core.Signal<AXPEntityAction[]>;
|
|
1884
2615
|
protected maxHeight: _angular_core.Signal<string>;
|
|
1885
2616
|
protected showEntityActions: _angular_core.Signal<any>;
|
|
@@ -1890,7 +2621,47 @@ declare class AXPEntityListWidgetViewComponent extends AXPValueWidgetComponent {
|
|
|
1890
2621
|
protected secondaryActions: _angular_core.Signal<AXPActionMenuItem[]>;
|
|
1891
2622
|
protected handleActionClick(item: AXPActionMenuItem): void;
|
|
1892
2623
|
protected handleSecondaryActionClick(item: AXPActionMenuItem): void;
|
|
1893
|
-
protected execute(commandName: string,
|
|
2624
|
+
protected execute(commandName: string, _data: unknown): Promise<void>;
|
|
2625
|
+
/**
|
|
2626
|
+
* Resolves toolbar commands including nested dropdown (`items`) actions.
|
|
2627
|
+
*/
|
|
2628
|
+
private findToolbarAction;
|
|
2629
|
+
private evaluateToolbarExpressions;
|
|
2630
|
+
/**
|
|
2631
|
+
* Parses the `filters` query param (same shape as standalone entity list routes).
|
|
2632
|
+
*/
|
|
2633
|
+
private parseFiltersFromRoute;
|
|
2634
|
+
/**
|
|
2635
|
+
* Route `filters` apply only when the active details `page` matches this list's entity
|
|
2636
|
+
* (e.g. WorkOrder filters must not affect FailureRegister on the same asset layout).
|
|
2637
|
+
*/
|
|
2638
|
+
private shouldApplyRouteFilters;
|
|
2639
|
+
/**
|
|
2640
|
+
* Merges route filters into related-entity toolbar filters (route wins per field).
|
|
2641
|
+
*/
|
|
2642
|
+
private mergeToolbarFilters;
|
|
2643
|
+
private getMergedToolbarFilters;
|
|
2644
|
+
/**
|
|
2645
|
+
* Applies merged route + parent-scope filters to the widget value and data source.
|
|
2646
|
+
*/
|
|
2647
|
+
private applyMergedRouteFiltersToList;
|
|
2648
|
+
/**
|
|
2649
|
+
* Re-evaluates related-entity list filters from the live dialog form context (e.g. after create saves the main row id).
|
|
2650
|
+
*/
|
|
2651
|
+
private applyRelatedFiltersFromContext;
|
|
2652
|
+
/**
|
|
2653
|
+
* Pushes current toolbar filters to the embedded list data source when both exist.
|
|
2654
|
+
* Returns false while data-list is still mounting (see deferred listNode.set in ngOnInit).
|
|
2655
|
+
*/
|
|
2656
|
+
private pushToolbarFiltersToDataSource;
|
|
2657
|
+
/**
|
|
2658
|
+
* Writes toolbar filters from specs and pushes them onto the data source so refresh/reload keeps the parent scope.
|
|
2659
|
+
*/
|
|
2660
|
+
private applyRelatedFiltersFromContextAndDatasource;
|
|
2661
|
+
/**
|
|
2662
|
+
* Refreshes the embedded data list (toolbar / workflow). In wizard mode, `refresh` is patched to re-apply scoped filters first.
|
|
2663
|
+
*/
|
|
2664
|
+
private refreshGridWithParentScopedFilters;
|
|
1894
2665
|
protected queries: undefined;
|
|
1895
2666
|
/**
|
|
1896
2667
|
* Validates that all required dependencies are available
|
|
@@ -1928,32 +2699,6 @@ declare class AXPEntityListWidgetViewComponent extends AXPValueWidgetComponent {
|
|
|
1928
2699
|
|
|
1929
2700
|
declare const AXPEntityListWidget: AXPWidgetConfig;
|
|
1930
2701
|
|
|
1931
|
-
declare class AXPLookupFilterWidgetEditComponent extends AXPValueWidgetComponent<any> {
|
|
1932
|
-
#private;
|
|
1933
|
-
protected editorPath: string;
|
|
1934
|
-
protected lookupWidgetRenderer: _angular_core.Signal<AXPWidgetRendererDirective | undefined>;
|
|
1935
|
-
protected entity: _angular_core.Signal<string>;
|
|
1936
|
-
protected textField: _angular_core.Signal<string>;
|
|
1937
|
-
protected valueField: _angular_core.Signal<string>;
|
|
1938
|
-
protected customFilter: _angular_core.Signal<AXDataSourceFilterOption>;
|
|
1939
|
-
protected multiple: _angular_core.Signal<boolean>;
|
|
1940
|
-
protected lookupNode: _angular_core.WritableSignal<AXPWidgetNode>;
|
|
1941
|
-
private shouldFocus;
|
|
1942
|
-
/**
|
|
1943
|
-
* Public focus method to trigger focusing
|
|
1944
|
-
*/
|
|
1945
|
-
focus(): void;
|
|
1946
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPLookupFilterWidgetEditComponent, never>;
|
|
1947
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPLookupFilterWidgetEditComponent, "ng-component", never, {}, {}, never, never, true, never>;
|
|
1948
|
-
}
|
|
1949
|
-
|
|
1950
|
-
declare const AXPLookupFilterWidget: AXPWidgetConfig;
|
|
1951
|
-
declare module '@acorex/platform/layout/widget-core' {
|
|
1952
|
-
interface AXPWidgetTypesMap {
|
|
1953
|
-
lookupFilter: 'lookup-filter';
|
|
1954
|
-
}
|
|
1955
|
-
}
|
|
1956
|
-
|
|
1957
2702
|
declare class AXPLookupWidgetViewComponent extends AXPValueWidgetComponent<any> {
|
|
1958
2703
|
protected readonly formatService: AXFormatService;
|
|
1959
2704
|
protected readonly entityResolver: AXPEntityDefinitionRegistryService;
|
|
@@ -1970,7 +2715,7 @@ declare class AXPLookupWidgetViewComponent extends AXPValueWidgetComponent<any>
|
|
|
1970
2715
|
private efEntity;
|
|
1971
2716
|
private efDisplay;
|
|
1972
2717
|
private extractItem;
|
|
1973
|
-
private
|
|
2718
|
+
private getDisplayRaw;
|
|
1974
2719
|
private get __class();
|
|
1975
2720
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPLookupWidgetViewComponent, never>;
|
|
1976
2721
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPLookupWidgetViewComponent, "axp-lookup-widget-view", never, {}, {}, never, never, true, never>;
|
|
@@ -1987,10 +2732,18 @@ interface AXPEntityDataSelectorOptions {
|
|
|
1987
2732
|
name: string;
|
|
1988
2733
|
dir: 'asc' | 'desc';
|
|
1989
2734
|
}[];
|
|
1990
|
-
allowCreate?:
|
|
2735
|
+
allowCreate?: AXPDataSelectorAllowCreate;
|
|
1991
2736
|
searchFields?: string[];
|
|
1992
2737
|
initialSearchTerm?: string;
|
|
1993
2738
|
selectedItemIds?: string[] | number[];
|
|
2739
|
+
categoryFilter?: {
|
|
2740
|
+
title: string;
|
|
2741
|
+
dataSource: AXPCategoryTreeDataSource;
|
|
2742
|
+
filterField: string;
|
|
2743
|
+
filterOperator?: 'equal' | 'contains' | 'in';
|
|
2744
|
+
width?: string;
|
|
2745
|
+
};
|
|
2746
|
+
showCategoryFilter?: boolean;
|
|
1994
2747
|
}
|
|
1995
2748
|
interface AXPEntityDataSelectorResult {
|
|
1996
2749
|
items: any[];
|
|
@@ -1999,20 +2752,22 @@ declare class AXPEntityDataSelectorService {
|
|
|
1999
2752
|
private readonly dataSelectorService;
|
|
2000
2753
|
private readonly filterOperatorMiddleware;
|
|
2001
2754
|
private readonly widgetResolver;
|
|
2755
|
+
private readonly entityResolver;
|
|
2756
|
+
private readonly commandService;
|
|
2002
2757
|
/**
|
|
2003
2758
|
* Open entity data selector popup
|
|
2004
2759
|
*/
|
|
2005
2760
|
open(options: AXPEntityDataSelectorOptions): Promise<AXPEntityDataSelectorResult | null>;
|
|
2006
2761
|
/**
|
|
2007
|
-
*
|
|
2762
|
+
* Execute Entity:Create and return created item.
|
|
2763
|
+
* Used by lookup widget and data selector for inline create.
|
|
2008
2764
|
*/
|
|
2009
|
-
|
|
2010
|
-
|
|
2011
|
-
|
|
2012
|
-
|
|
2013
|
-
|
|
2014
|
-
|
|
2015
|
-
}): Promise<AXPEntityDataSelectorResult | null>;
|
|
2765
|
+
executeEntityCreate(entity: AXPEntity, mode: 'full' | 'quick'): Promise<any | null>;
|
|
2766
|
+
/**
|
|
2767
|
+
* Normalize item's phones/emails for expose/display.
|
|
2768
|
+
* Call this when receiving items from any source (create, API, selector).
|
|
2769
|
+
*/
|
|
2770
|
+
normalizeItemContactArrays(item: any): any;
|
|
2016
2771
|
/**
|
|
2017
2772
|
* Create data selector configuration from entity options
|
|
2018
2773
|
*/
|
|
@@ -2030,9 +2785,23 @@ declare class AXPEntityDataSelectorService {
|
|
|
2030
2785
|
*/
|
|
2031
2786
|
private getSearchFields;
|
|
2032
2787
|
/**
|
|
2033
|
-
*
|
|
2788
|
+
* Get allowCreate mode from entity
|
|
2789
|
+
*/
|
|
2790
|
+
private getAllowCreate;
|
|
2791
|
+
/**
|
|
2792
|
+
* Execute Entity:Create and return created item
|
|
2793
|
+
*/
|
|
2794
|
+
private executeCreate;
|
|
2795
|
+
/**
|
|
2796
|
+
* Normalize phones/emails from repeater form to plain arrays of { value: string }.
|
|
2797
|
+
* Repeater/ContactBox can return nested structure: { value: { label: "", value: "101010" } }
|
|
2798
|
+
* Contact widget expects: { value: "101010", label?: string }
|
|
2034
2799
|
*/
|
|
2035
|
-
private
|
|
2800
|
+
private normalizeContactArrays;
|
|
2801
|
+
/**
|
|
2802
|
+
* Create category tree data source from category entity key
|
|
2803
|
+
*/
|
|
2804
|
+
private createCategoryTreeDataSource;
|
|
2036
2805
|
/**
|
|
2037
2806
|
* Merge custom and parent filters into data source query
|
|
2038
2807
|
*/
|
|
@@ -2041,7 +2810,48 @@ declare class AXPEntityDataSelectorService {
|
|
|
2041
2810
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityDataSelectorService>;
|
|
2042
2811
|
}
|
|
2043
2812
|
|
|
2813
|
+
/**
|
|
2814
|
+
* Base interface for lookup widget look components
|
|
2815
|
+
* All look components should implement this interface to ensure consistency
|
|
2816
|
+
*/
|
|
2817
|
+
declare abstract class LookupWidgetLookBase {
|
|
2818
|
+
abstract refresh(): void;
|
|
2819
|
+
abstract focus(): void;
|
|
2820
|
+
abstract clear(): void;
|
|
2821
|
+
}
|
|
2822
|
+
|
|
2044
2823
|
type AXPLookupWidgetLookType = 'select' | 'lookup';
|
|
2824
|
+
/**
|
|
2825
|
+
* How the lookup column resolves related items for display in entity lists.
|
|
2826
|
+
* - `hydrated`: titles (and optional ids) are already on the row; inline preview + overflow popover use row data only.
|
|
2827
|
+
* - `idsWithCount`: ids and optional count live on the row; the cell shows a count summary and loads titles via entity `byKey` when the popover opens.
|
|
2828
|
+
* - `countOnly`: only a count is on the row; the popover loads ids/titles via a registered `AXPQuery` when opened.
|
|
2829
|
+
*/
|
|
2830
|
+
type AXPLookupColumnResolveStrategy = 'hydrated' | 'idsWithCount' | 'countOnly';
|
|
2831
|
+
/**
|
|
2832
|
+
* Column list only: controls how the lookup column loads and displays related items in grids.
|
|
2833
|
+
* Omitted or empty strategy defaults to `hydrated` at runtime.
|
|
2834
|
+
*/
|
|
2835
|
+
interface AXPLookupColumnResolveOptions {
|
|
2836
|
+
/** Default `hydrated` when omitted. */
|
|
2837
|
+
strategy?: AXPLookupColumnResolveStrategy;
|
|
2838
|
+
/** Lodash-style path on `rowData` for the displayed count (e.g. `rolesCount`). */
|
|
2839
|
+
countFieldPath?: string;
|
|
2840
|
+
/** Lodash-style path on `rowData` for the related id list (`idsWithCount`). If omitted, the column `rawValue` is used. */
|
|
2841
|
+
idsPath?: string;
|
|
2842
|
+
/** Registered query key for `AXPQueryExecutor.fetch` when using `countOnly`. */
|
|
2843
|
+
queryKey?: string;
|
|
2844
|
+
/**
|
|
2845
|
+
* Maps query input property names to lodash-style paths on `rowData` (e.g. `{ "userId": "id" }`).
|
|
2846
|
+
* May be a JSON string when set from the layout designer text field.
|
|
2847
|
+
*/
|
|
2848
|
+
queryParams?: Record<string, string> | string;
|
|
2849
|
+
/**
|
|
2850
|
+
* Dot path into the named query result for the items array. Defaults to `items` when the result is an object.
|
|
2851
|
+
* If the query returns an array directly, leave unset and handle at runtime.
|
|
2852
|
+
*/
|
|
2853
|
+
queryResultItemsPath?: string;
|
|
2854
|
+
}
|
|
2045
2855
|
interface AXPLookupWidgetOptions {
|
|
2046
2856
|
disabled?: boolean | AXPExpression;
|
|
2047
2857
|
readonly?: boolean | AXPExpression;
|
|
@@ -2050,68 +2860,62 @@ interface AXPLookupWidgetOptions {
|
|
|
2050
2860
|
look?: AXPLookupWidgetLookType;
|
|
2051
2861
|
allowClear?: boolean;
|
|
2052
2862
|
displayFormat?: string;
|
|
2863
|
+
/** Column list: lazy resolve and summary behavior. */
|
|
2864
|
+
columnResolve?: AXPLookupColumnResolveOptions;
|
|
2053
2865
|
}
|
|
2054
2866
|
|
|
2055
2867
|
declare class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent<any> {
|
|
2056
2868
|
#private;
|
|
2057
2869
|
protected readonly injector: Injector;
|
|
2058
2870
|
protected readonly entityResolver: AXPEntityDefinitionRegistryService;
|
|
2059
|
-
protected readonly
|
|
2060
|
-
protected readonly popupService: AXPopupService;
|
|
2871
|
+
protected readonly entityService: AXPEntityService;
|
|
2061
2872
|
protected readonly entityDataSelectorService: AXPEntityDataSelectorService;
|
|
2062
|
-
private readonly
|
|
2063
|
-
protected
|
|
2064
|
-
protected tagBox: _angular_core.Signal<AXTagBoxComponent | undefined>;
|
|
2065
|
-
private shouldFocus;
|
|
2873
|
+
private readonly mlsResolver;
|
|
2874
|
+
protected componentLook: _angular_core.Signal<LookupWidgetLookBase | undefined>;
|
|
2066
2875
|
protected expose: _angular_core.Signal<string | any[] | undefined>;
|
|
2067
2876
|
protected entity: _angular_core.Signal<string>;
|
|
2068
|
-
protected disabled: _angular_core.Signal<string>;
|
|
2877
|
+
protected disabled: _angular_core.Signal<string | boolean>;
|
|
2069
2878
|
protected columns: _angular_core.Signal<string[]>;
|
|
2070
2879
|
protected textField: _angular_core.Signal<string>;
|
|
2071
2880
|
protected hasClearButton: _angular_core.Signal<boolean>;
|
|
2072
2881
|
protected customFilter: _angular_core.Signal<AXDataSourceFilterOption>;
|
|
2882
|
+
protected placeholder: _angular_core.Signal<string>;
|
|
2883
|
+
protected filterMode: _angular_core.Signal<boolean>;
|
|
2073
2884
|
protected multiple: _angular_core.Signal<boolean>;
|
|
2074
2885
|
protected look: _angular_core.Signal<AXPLookupWidgetLookType>;
|
|
2075
|
-
protected allowClear: _angular_core.Signal<boolean>;
|
|
2076
2886
|
protected defaultTextField: _angular_core.Signal<string>;
|
|
2077
2887
|
protected displayField: _angular_core.Signal<string>;
|
|
2078
|
-
protected
|
|
2888
|
+
protected allowCreate: _angular_core.Signal<"none" | "full" | "quick">;
|
|
2079
2889
|
protected valueField: _angular_core.Signal<string>;
|
|
2080
2890
|
protected displayFormat: _angular_core.Signal<string | undefined>;
|
|
2081
2891
|
protected conditions?: AXPQueryFilter[];
|
|
2082
2892
|
protected filter: AXDataSourceFilterOption | null;
|
|
2083
|
-
|
|
2084
|
-
/**
|
|
2085
|
-
* Get default sort order from entity's first list view
|
|
2086
|
-
*/
|
|
2087
|
-
protected defaultSorts: _angular_core.Signal<AXDataSourceSortOption[]>;
|
|
2088
|
-
protected dataSource: _angular_core.Signal<AXDataSource<unknown> | null>;
|
|
2089
|
-
protected searchTerm: _angular_core.WritableSignal<string | null>;
|
|
2893
|
+
protected entityDef: _angular_core.WritableSignal<AXPEntity | null>;
|
|
2090
2894
|
protected selectedItems: _angular_core.WritableSignal<any[]>;
|
|
2091
|
-
|
|
2895
|
+
protected initialItems: _angular_core.WritableSignal<boolean>;
|
|
2896
|
+
protected initialized: _angular_core.WritableSignal<boolean>;
|
|
2897
|
+
protected previousValue: _angular_core.WritableSignal<any>;
|
|
2092
2898
|
protected isLoading: _angular_core.WritableSignal<boolean>;
|
|
2093
|
-
|
|
2094
|
-
private placeholderUpdateToken;
|
|
2899
|
+
private hasValue;
|
|
2095
2900
|
private findByValue;
|
|
2096
|
-
protected
|
|
2097
|
-
|
|
2098
|
-
|
|
2099
|
-
protected
|
|
2100
|
-
protected
|
|
2101
|
-
|
|
2102
|
-
|
|
2103
|
-
|
|
2104
|
-
|
|
2901
|
+
protected handleComponentValueChanged(items: any[] | null): void;
|
|
2902
|
+
protected handleCreateClick(_e: AXClickEvent): Promise<void>;
|
|
2903
|
+
private executeCreate;
|
|
2904
|
+
protected setLoading: (loading: boolean) => void;
|
|
2905
|
+
protected setItems: (items: any[]) => void;
|
|
2906
|
+
/**
|
|
2907
|
+
* Writes expose targets into context using per-path updates.
|
|
2908
|
+
* Avoids `contextService.patch()` with nested objects: patch shallow-merges top-level keys only,
|
|
2909
|
+
* so e.g. `{ person: { educationLevel: { id, title } } }` would replace the entire `person`
|
|
2910
|
+
* object and drop sibling fields like `person.educationLevelId`, causing a value/effect loop.
|
|
2911
|
+
*/
|
|
2912
|
+
private expoesItems;
|
|
2913
|
+
outputs(): (string | {
|
|
2914
|
+
[name: string]: unknown;
|
|
2915
|
+
})[];
|
|
2916
|
+
private singleOrMultiple;
|
|
2105
2917
|
refresh(): void;
|
|
2106
2918
|
clear(): void;
|
|
2107
|
-
clearInput(): void;
|
|
2108
|
-
protected getTagLabel(item: any): string;
|
|
2109
|
-
private searchByValue;
|
|
2110
|
-
private mergeFilter;
|
|
2111
|
-
private singleOrMultiple;
|
|
2112
|
-
/**
|
|
2113
|
-
* Public focus method to trigger focusing
|
|
2114
|
-
*/
|
|
2115
2919
|
focus(): void;
|
|
2116
2920
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPLookupWidgetEditComponent, never>;
|
|
2117
2921
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPLookupWidgetEditComponent, "axp-lookup-widget-edit", never, {}, {}, never, never, true, never>;
|
|
@@ -2119,8 +2923,12 @@ declare class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent<any>
|
|
|
2119
2923
|
|
|
2120
2924
|
declare class AXPLookupWidgetColumnComponent extends AXPColumnWidgetComponent<any> {
|
|
2121
2925
|
private readonly entityDetailPopoverService;
|
|
2926
|
+
private readonly translation;
|
|
2122
2927
|
private readonly formatService;
|
|
2928
|
+
private readonly entityService;
|
|
2929
|
+
private readonly queryExecutor;
|
|
2123
2930
|
protected moreButton: _angular_core.Signal<ElementRef<any> | undefined>;
|
|
2931
|
+
protected lazyTrigger: _angular_core.Signal<ElementRef<any> | undefined>;
|
|
2124
2932
|
protected morePopover: _angular_core.Signal<AXPopoverComponent | undefined>;
|
|
2125
2933
|
protected host: ElementRef<any>;
|
|
2126
2934
|
protected valueField: string;
|
|
@@ -2130,27 +2938,550 @@ declare class AXPLookupWidgetColumnComponent extends AXPColumnWidgetComponent<an
|
|
|
2130
2938
|
protected maxVisible: number;
|
|
2131
2939
|
protected displayFormat: _angular_core.Signal<string | undefined>;
|
|
2132
2940
|
protected displayField: _angular_core.Signal<string>;
|
|
2941
|
+
protected columnResolve: _angular_core.Signal<AXPLookupColumnResolveOptions | undefined>;
|
|
2942
|
+
protected resolveStrategy: _angular_core.Signal<AXPLookupColumnResolveStrategy>;
|
|
2943
|
+
protected isHydratedStrategy: _angular_core.Signal<boolean>;
|
|
2133
2944
|
protected isMorePopoverOpen: _angular_core.WritableSignal<boolean>;
|
|
2134
2945
|
protected selectedItemIndex: _angular_core.WritableSignal<number>;
|
|
2946
|
+
protected resolvedPopoverItems: _angular_core.WritableSignal<any[]>;
|
|
2947
|
+
protected resolveStatus: _angular_core.WritableSignal<"error" | "idle" | "loading" | "ready">;
|
|
2948
|
+
protected resolveError: _angular_core.WritableSignal<string | null>;
|
|
2949
|
+
protected summaryLabel: _angular_core.WritableSignal<string>;
|
|
2950
|
+
protected popoverHeader: _angular_core.WritableSignal<string>;
|
|
2135
2951
|
protected displayItems: _angular_core.Signal<any[]>;
|
|
2136
2952
|
protected allItems: _angular_core.Signal<any[]>;
|
|
2137
2953
|
protected visibleItems: _angular_core.Signal<any[]>;
|
|
2138
2954
|
protected hasMoreItems: _angular_core.Signal<boolean>;
|
|
2139
|
-
protected
|
|
2955
|
+
protected idsFromRow: _angular_core.Signal<any[]>;
|
|
2956
|
+
protected displayCount: _angular_core.Signal<number>;
|
|
2957
|
+
protected popoverListItems: _angular_core.Signal<any[]>;
|
|
2958
|
+
/** Avoid resetting lazy cache on every CD when `rowData` is a new object reference for the same row. */
|
|
2959
|
+
private previousLazyRowId;
|
|
2960
|
+
constructor();
|
|
2140
2961
|
protected showMoreItems(): void;
|
|
2141
|
-
protected
|
|
2962
|
+
protected openLazyPopover(): void;
|
|
2963
|
+
protected onPopoverOpenChange(event: unknown): void;
|
|
2142
2964
|
protected showItemDetail(item: any, index: number): Promise<void>;
|
|
2143
2965
|
protected handleItemClick(index: number): void;
|
|
2144
|
-
|
|
2966
|
+
protected handleResolvedItemClick(index: number): void;
|
|
2967
|
+
protected handlePopoverItemClick(index: number): void;
|
|
2968
|
+
protected getDisplayRaw(item: any): string;
|
|
2969
|
+
private refreshSummaryLabel;
|
|
2970
|
+
private refreshPopoverHeader;
|
|
2971
|
+
private resetLazyState;
|
|
2972
|
+
private openPopoverFromRef;
|
|
2145
2973
|
private closeMorePopover;
|
|
2974
|
+
private ensureLazyItemsLoaded;
|
|
2975
|
+
/**
|
|
2976
|
+
* ax-popover may emit a boolean, CustomEvent with detail, or a DOM Event depending on version.
|
|
2977
|
+
*/
|
|
2978
|
+
private coercePopoverOpenEvent;
|
|
2979
|
+
private loadByIds;
|
|
2980
|
+
private loadByNamedQuery;
|
|
2981
|
+
private buildNamedQueryInput;
|
|
2982
|
+
private parseQueryParamsMap;
|
|
2983
|
+
private extractItemsFromQueryResult;
|
|
2146
2984
|
private extractItem;
|
|
2147
|
-
|
|
2985
|
+
private resolveDisplayValue;
|
|
2148
2986
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPLookupWidgetColumnComponent, never>;
|
|
2149
2987
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPLookupWidgetColumnComponent, "ng-component", never, { "rawValue": { "alias": "rawValue"; "required": false; }; "rowData": { "alias": "rowData"; "required": false; }; }, {}, never, never, true, never>;
|
|
2150
2988
|
}
|
|
2151
2989
|
|
|
2152
2990
|
declare const AXPLookupWidget: AXPWidgetConfig;
|
|
2153
2991
|
|
|
2992
|
+
/**
|
|
2993
|
+
* Unified reference format for all sources
|
|
2994
|
+
*/
|
|
2995
|
+
interface AXPMultiSourceRef {
|
|
2996
|
+
/** Source identifier (e.g., 'site-location', 'inline-address', 'employee-user') */
|
|
2997
|
+
sourceKey: string;
|
|
2998
|
+
/** Entity ID if entity source (optional for inline sources) */
|
|
2999
|
+
refId?: string;
|
|
3000
|
+
/** Always present - used for display */
|
|
3001
|
+
displayName: string;
|
|
3002
|
+
/** Full data (for inline sources or denormalized entity data) */
|
|
3003
|
+
data?: any;
|
|
3004
|
+
/** Additional metadata */
|
|
3005
|
+
meta?: Record<string, unknown>;
|
|
3006
|
+
}
|
|
3007
|
+
/**
|
|
3008
|
+
* Stored value type
|
|
3009
|
+
* - Single: AXPMultiSourceRef
|
|
3010
|
+
* - Multiple: AXPMultiSourceRef[]
|
|
3011
|
+
*/
|
|
3012
|
+
type AXPMultiSourceValue = AXPMultiSourceRef | AXPMultiSourceRef[];
|
|
3013
|
+
/**
|
|
3014
|
+
* Source type
|
|
3015
|
+
*/
|
|
3016
|
+
declare enum AXPMultiSourceType {
|
|
3017
|
+
Entity = "entity",
|
|
3018
|
+
Inline = "inline"
|
|
3019
|
+
}
|
|
3020
|
+
/**
|
|
3021
|
+
* Single source item definition
|
|
3022
|
+
*/
|
|
3023
|
+
interface AXPMultiSourceItem {
|
|
3024
|
+
/** Unique identifier for this source */
|
|
3025
|
+
key: string;
|
|
3026
|
+
/** Display information */
|
|
3027
|
+
title: string;
|
|
3028
|
+
icon?: string;
|
|
3029
|
+
badge?: string;
|
|
3030
|
+
description?: string;
|
|
3031
|
+
/** Source type */
|
|
3032
|
+
type: AXPMultiSourceType;
|
|
3033
|
+
/** For entity sources: entity name (e.g., 'LocationManagement.Location') */
|
|
3034
|
+
entity?: string;
|
|
3035
|
+
/** For inline sources: command key to execute for inline creation (e.g., 'Module.Entity:CreateInline') */
|
|
3036
|
+
inlineCreateCommand?: string;
|
|
3037
|
+
/** Optional: Filter/constraints for this source */
|
|
3038
|
+
filters?: AXDataSourceFilterOption;
|
|
3039
|
+
/** Optional: Custom search fields */
|
|
3040
|
+
searchFields?: string[];
|
|
3041
|
+
/** Display format template for results */
|
|
3042
|
+
displayFormat?: string;
|
|
3043
|
+
/** Value transformation (how to store this source) */
|
|
3044
|
+
valueTransform?: (item: any) => AXPMultiSourceRef;
|
|
3045
|
+
}
|
|
3046
|
+
/**
|
|
3047
|
+
* Complete source configuration (from provider)
|
|
3048
|
+
*/
|
|
3049
|
+
interface AXPMultiSourceDefinition {
|
|
3050
|
+
/** Provider name */
|
|
3051
|
+
name: string;
|
|
3052
|
+
/** Display title */
|
|
3053
|
+
title: string;
|
|
3054
|
+
/** Sources array */
|
|
3055
|
+
sources: AXPMultiSourceItem[];
|
|
3056
|
+
/** Default search strategy */
|
|
3057
|
+
searchStrategy: 'unified' | 'tabs' | 'grouped';
|
|
3058
|
+
/** Default display format */
|
|
3059
|
+
defaultDisplayFormat?: string;
|
|
3060
|
+
/** Default multiple selection */
|
|
3061
|
+
defaultMultiple?: boolean;
|
|
3062
|
+
}
|
|
3063
|
+
/**
|
|
3064
|
+
* Widget options
|
|
3065
|
+
*/
|
|
3066
|
+
interface AXPMultiSourceSelectorWidgetOptions {
|
|
3067
|
+
/** Provider name (required) */
|
|
3068
|
+
providerName: string;
|
|
3069
|
+
/** Override multiple selection (optional, uses provider default if not specified) */
|
|
3070
|
+
multiple?: boolean;
|
|
3071
|
+
/** Override display format (optional, uses provider default if not specified) */
|
|
3072
|
+
displayFormat?: string;
|
|
3073
|
+
/** Additional filters to apply to all sources */
|
|
3074
|
+
filters?: AXDataSourceFilterOption;
|
|
3075
|
+
/** Custom placeholder */
|
|
3076
|
+
placeholder?: string;
|
|
3077
|
+
/** Allow clear */
|
|
3078
|
+
allowClear?: boolean;
|
|
3079
|
+
}
|
|
3080
|
+
|
|
3081
|
+
/**
|
|
3082
|
+
* Injection token for multi-source definition providers
|
|
3083
|
+
*/
|
|
3084
|
+
declare const AXP_MULTI_SOURCE_DEFINITION_PROVIDER: InjectionToken<AXPMultiSourceDefinitionProvider[]>;
|
|
3085
|
+
/**
|
|
3086
|
+
* Provider context for building definitions
|
|
3087
|
+
*/
|
|
3088
|
+
declare class AXPMultiSourceDefinitionProviderContext {
|
|
3089
|
+
private definitions;
|
|
3090
|
+
addDefinition(definition: AXPMultiSourceDefinition): void;
|
|
3091
|
+
getDefinitions(): AXPMultiSourceDefinition[];
|
|
3092
|
+
findDefinition(name: string): AXPMultiSourceDefinition | undefined;
|
|
3093
|
+
}
|
|
3094
|
+
/**
|
|
3095
|
+
* Provider interface
|
|
3096
|
+
*/
|
|
3097
|
+
interface AXPMultiSourceDefinitionProvider {
|
|
3098
|
+
provide(context: AXPMultiSourceDefinitionProviderContext): Promise<void> | void;
|
|
3099
|
+
}
|
|
3100
|
+
/**
|
|
3101
|
+
* Service for managing multi-source definitions
|
|
3102
|
+
*/
|
|
3103
|
+
declare class AXPMultiSourceDefinitionProviderService {
|
|
3104
|
+
private readonly providers;
|
|
3105
|
+
private cache;
|
|
3106
|
+
private load;
|
|
3107
|
+
/**
|
|
3108
|
+
* Get definition by name
|
|
3109
|
+
*/
|
|
3110
|
+
getDefinition(name: string): Promise<AXPMultiSourceDefinition>;
|
|
3111
|
+
/**
|
|
3112
|
+
* Reload definitions (clear cache)
|
|
3113
|
+
*/
|
|
3114
|
+
reload(): Promise<void>;
|
|
3115
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPMultiSourceDefinitionProviderService, never>;
|
|
3116
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPMultiSourceDefinitionProviderService>;
|
|
3117
|
+
}
|
|
3118
|
+
|
|
3119
|
+
declare const AXPMultiSourceSelectorWidget: AXPWidgetConfig;
|
|
3120
|
+
|
|
3121
|
+
/**
|
|
3122
|
+
* Search result item with source information
|
|
3123
|
+
*/
|
|
3124
|
+
interface AXPMultiSourceSearchResultItem {
|
|
3125
|
+
source: AXPMultiSourceItem;
|
|
3126
|
+
item: any;
|
|
3127
|
+
}
|
|
3128
|
+
/**
|
|
3129
|
+
* Search result
|
|
3130
|
+
*/
|
|
3131
|
+
interface AXPMultiSourceSearchResult {
|
|
3132
|
+
items: AXPMultiSourceSearchResultItem[];
|
|
3133
|
+
total: number;
|
|
3134
|
+
}
|
|
3135
|
+
declare class AXPMultiSourceFederatedSearchService {
|
|
3136
|
+
private readonly entityResolver;
|
|
3137
|
+
/**
|
|
3138
|
+
* Search across all enabled sources
|
|
3139
|
+
*/
|
|
3140
|
+
search(definition: AXPMultiSourceDefinition, searchTerm: string, filters?: AXDataSourceFilterOption): Promise<AXPMultiSourceSearchResult>;
|
|
3141
|
+
/**
|
|
3142
|
+
* Search single source
|
|
3143
|
+
*/
|
|
3144
|
+
searchSource(source: AXPMultiSourceItem, searchTerm: string, filters?: AXDataSourceFilterOption): Promise<{
|
|
3145
|
+
items: any[];
|
|
3146
|
+
total: number;
|
|
3147
|
+
}>;
|
|
3148
|
+
/**
|
|
3149
|
+
* Resolve entity from entity name string (e.g., 'LocationManagement.Location')
|
|
3150
|
+
*/
|
|
3151
|
+
private resolveEntity;
|
|
3152
|
+
/**
|
|
3153
|
+
* Search entity using entity queries
|
|
3154
|
+
*/
|
|
3155
|
+
private searchEntity;
|
|
3156
|
+
/**
|
|
3157
|
+
* Build search filters from search term
|
|
3158
|
+
*/
|
|
3159
|
+
private buildSearchFilters;
|
|
3160
|
+
/**
|
|
3161
|
+
* Get default searchable fields from entity
|
|
3162
|
+
*/
|
|
3163
|
+
private getDefaultSearchFields;
|
|
3164
|
+
/**
|
|
3165
|
+
* Merge multiple filters
|
|
3166
|
+
*/
|
|
3167
|
+
private mergeFilters;
|
|
3168
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPMultiSourceFederatedSearchService, never>;
|
|
3169
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPMultiSourceFederatedSearchService>;
|
|
3170
|
+
}
|
|
3171
|
+
|
|
3172
|
+
/**
|
|
3173
|
+
* Selector open configuration
|
|
3174
|
+
*/
|
|
3175
|
+
interface AXPMultiSourceSelectorOpenConfig {
|
|
3176
|
+
definition: AXPMultiSourceDefinition;
|
|
3177
|
+
multiple: boolean;
|
|
3178
|
+
selectedValues?: AXPMultiSourceValue;
|
|
3179
|
+
filters?: AXDataSourceFilterOption;
|
|
3180
|
+
title?: string;
|
|
3181
|
+
}
|
|
3182
|
+
/**
|
|
3183
|
+
* Selector result
|
|
3184
|
+
*/
|
|
3185
|
+
interface AXPMultiSourceSelectorResult {
|
|
3186
|
+
items: AXPMultiSourceRef[];
|
|
3187
|
+
}
|
|
3188
|
+
declare class AXPMultiSourceSelectorService {
|
|
3189
|
+
private readonly popupService;
|
|
3190
|
+
private readonly definitionService;
|
|
3191
|
+
/**
|
|
3192
|
+
* Open selector popup by provider name
|
|
3193
|
+
*/
|
|
3194
|
+
openByProviderName(providerName: string, config: {
|
|
3195
|
+
multiple: boolean;
|
|
3196
|
+
selectedValues?: AXPMultiSourceValue;
|
|
3197
|
+
filters?: AXDataSourceFilterOption;
|
|
3198
|
+
title?: string;
|
|
3199
|
+
}): Promise<AXPMultiSourceSelectorResult | null>;
|
|
3200
|
+
/**
|
|
3201
|
+
* Open selector popup
|
|
3202
|
+
*/
|
|
3203
|
+
open(config: AXPMultiSourceSelectorOpenConfig): Promise<AXPMultiSourceSelectorResult | null>;
|
|
3204
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPMultiSourceSelectorService, never>;
|
|
3205
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPMultiSourceSelectorService>;
|
|
3206
|
+
}
|
|
3207
|
+
|
|
3208
|
+
/**
|
|
3209
|
+
* Multi-source selector popup component
|
|
3210
|
+
*/
|
|
3211
|
+
declare class AXPMultiSourceSelectorComponent extends AXBasePageComponent {
|
|
3212
|
+
private readonly entityDataSelectorService;
|
|
3213
|
+
private readonly entityResolver;
|
|
3214
|
+
private readonly translationService;
|
|
3215
|
+
protected config: _angular_core.WritableSignal<AXPMultiSourceSelectorOpenConfig>;
|
|
3216
|
+
protected definition: _angular_core.Signal<AXPMultiSourceDefinition>;
|
|
3217
|
+
protected activeTabKey: _angular_core.WritableSignal<string | null>;
|
|
3218
|
+
protected activeSource: _angular_core.Signal<AXPMultiSourceItem | null>;
|
|
3219
|
+
protected selectedItems: _angular_core.WritableSignal<AXPMultiSourceRef[]>;
|
|
3220
|
+
protected readonly AXPMultiSourceType: typeof AXPMultiSourceType;
|
|
3221
|
+
protected ngOnInit(): void;
|
|
3222
|
+
protected handleTabClick(source: AXPMultiSourceItem): void;
|
|
3223
|
+
protected handleSelectFromSource(source: AXPMultiSourceItem): Promise<void>;
|
|
3224
|
+
protected handleCancel(): void;
|
|
3225
|
+
protected handleConfirm(): void;
|
|
3226
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPMultiSourceSelectorComponent, never>;
|
|
3227
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPMultiSourceSelectorComponent, "axp-multi-source-selector", never, {}, {}, never, never, true, never>;
|
|
3228
|
+
}
|
|
3229
|
+
|
|
3230
|
+
declare class AXPMultiSourceSelectorWidgetEditComponent extends AXPValueWidgetComponent<any> {
|
|
3231
|
+
protected readonly popupService: AXPopupService;
|
|
3232
|
+
protected readonly definitionService: AXPMultiSourceDefinitionProviderService;
|
|
3233
|
+
protected readonly selectorService: AXPMultiSourceSelectorService;
|
|
3234
|
+
protected tagBox: _angular_core.Signal<AXTagBoxComponent | undefined>;
|
|
3235
|
+
protected providerName: _angular_core.Signal<string>;
|
|
3236
|
+
protected disabled: _angular_core.Signal<boolean>;
|
|
3237
|
+
protected multiple: _angular_core.Signal<boolean>;
|
|
3238
|
+
protected allowClear: _angular_core.Signal<boolean>;
|
|
3239
|
+
protected placeholderText: _angular_core.Signal<string>;
|
|
3240
|
+
protected searchTerm: _angular_core.WritableSignal<string | null>;
|
|
3241
|
+
protected selectedItems: _angular_core.WritableSignal<AXPMultiSourceRef[]>;
|
|
3242
|
+
protected isLoading: _angular_core.WritableSignal<boolean>;
|
|
3243
|
+
protected isOpen: _angular_core.WritableSignal<boolean>;
|
|
3244
|
+
protected definition: _angular_core.WritableSignal<AXPMultiSourceDefinition | null>;
|
|
3245
|
+
private efProvider;
|
|
3246
|
+
private efValue;
|
|
3247
|
+
protected handleOnClick(e: AXClickEvent): void;
|
|
3248
|
+
protected handleValueChange(e: AXValueChangedEvent): void;
|
|
3249
|
+
protected handleSearchInputChange(e: AXValueChangedEvent): void;
|
|
3250
|
+
protected handleOnBlur(e: AXFocusEvent): void;
|
|
3251
|
+
protected handleKeyUp(e: AXHtmlEvent): Promise<void>;
|
|
3252
|
+
protected handleClearClick(): void;
|
|
3253
|
+
private findByValue;
|
|
3254
|
+
private normalizeToRef;
|
|
3255
|
+
private showSelector;
|
|
3256
|
+
private setItems;
|
|
3257
|
+
refresh(): void;
|
|
3258
|
+
clear(): void;
|
|
3259
|
+
private clearInput;
|
|
3260
|
+
protected getTagLabel(item: AXPMultiSourceRef): string;
|
|
3261
|
+
private singleOrMultiple;
|
|
3262
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPMultiSourceSelectorWidgetEditComponent, never>;
|
|
3263
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPMultiSourceSelectorWidgetEditComponent, "axp-multi-source-selector-widget-edit", never, {}, {}, never, never, true, never>;
|
|
3264
|
+
}
|
|
3265
|
+
|
|
3266
|
+
declare class AXPMultiSourceSelectorWidgetViewComponent extends AXPValueWidgetComponent<any> {
|
|
3267
|
+
protected readonly formatService: AXFormatService;
|
|
3268
|
+
protected readonly definitionService: AXPMultiSourceDefinitionProviderService;
|
|
3269
|
+
protected providerName: _angular_core.Signal<string>;
|
|
3270
|
+
protected multiple: _angular_core.Signal<boolean>;
|
|
3271
|
+
protected badgeClass: _angular_core.Signal<string>;
|
|
3272
|
+
protected displayFormat: _angular_core.Signal<string | undefined>;
|
|
3273
|
+
protected loading: _angular_core.WritableSignal<boolean>;
|
|
3274
|
+
private definition;
|
|
3275
|
+
protected displayItems: _angular_core.WritableSignal<{
|
|
3276
|
+
id: string;
|
|
3277
|
+
text: string;
|
|
3278
|
+
}[]>;
|
|
3279
|
+
private efProvider;
|
|
3280
|
+
private efDisplay;
|
|
3281
|
+
private extractDisplayItem;
|
|
3282
|
+
private getDisplayText;
|
|
3283
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPMultiSourceSelectorWidgetViewComponent, never>;
|
|
3284
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPMultiSourceSelectorWidgetViewComponent, "axp-multi-source-selector-widget-view", never, {}, {}, never, never, true, never>;
|
|
3285
|
+
}
|
|
3286
|
+
|
|
3287
|
+
declare class AXPMultiSourceSelectorWidgetColumnComponent extends AXPColumnWidgetComponent<any> {
|
|
3288
|
+
private readonly formatService;
|
|
3289
|
+
private readonly definitionService;
|
|
3290
|
+
protected providerName: string;
|
|
3291
|
+
protected columnName: string;
|
|
3292
|
+
protected maxVisible: number;
|
|
3293
|
+
protected displayFormat: _angular_core.Signal<string | undefined>;
|
|
3294
|
+
private definition;
|
|
3295
|
+
constructor();
|
|
3296
|
+
protected displayItems: _angular_core.Signal<{
|
|
3297
|
+
id: string;
|
|
3298
|
+
text: string;
|
|
3299
|
+
}[]>;
|
|
3300
|
+
protected allItems: _angular_core.Signal<{
|
|
3301
|
+
id: string;
|
|
3302
|
+
text: string;
|
|
3303
|
+
}[]>;
|
|
3304
|
+
protected visibleItems: _angular_core.Signal<{
|
|
3305
|
+
id: string;
|
|
3306
|
+
text: string;
|
|
3307
|
+
}[]>;
|
|
3308
|
+
protected hasMoreItems: _angular_core.Signal<boolean>;
|
|
3309
|
+
protected remainingItemsCount: _angular_core.Signal<number>;
|
|
3310
|
+
private loadDefinition;
|
|
3311
|
+
private extractDisplayItem;
|
|
3312
|
+
private getDisplayText;
|
|
3313
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPMultiSourceSelectorWidgetColumnComponent, never>;
|
|
3314
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPMultiSourceSelectorWidgetColumnComponent, "axp-multi-source-selector-widget-column", never, { "rawValue": { "alias": "rawValue"; "required": false; }; "rowData": { "alias": "rowData"; "required": false; }; }, {}, never, never, true, never>;
|
|
3315
|
+
}
|
|
3316
|
+
|
|
3317
|
+
declare class AXPSelectorStructureWidgetColumnComponent extends AXPValueWidgetComponent {
|
|
3318
|
+
protected identityField: _angular_core.Signal<string>;
|
|
3319
|
+
protected textField: _angular_core.Signal<string>;
|
|
3320
|
+
protected valueField: _angular_core.Signal<string>;
|
|
3321
|
+
protected previewIcon: _angular_core.Signal<string>;
|
|
3322
|
+
protected cellText: _angular_core.Signal<string>;
|
|
3323
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPSelectorStructureWidgetColumnComponent, never>;
|
|
3324
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPSelectorStructureWidgetColumnComponent, "axp-selector-structure-widget-column", never, {}, {}, never, never, true, never>;
|
|
3325
|
+
}
|
|
3326
|
+
|
|
3327
|
+
type AXPSelectorStructureSelectorMode = 'select' | 'lookup';
|
|
3328
|
+
type AXPSelectorStructureStructureMode = 'schema' | 'freeform';
|
|
3329
|
+
type AXPSelectorStructureIdentityDisplay = 'readonly' | 'hidden';
|
|
3330
|
+
/** UI layout: standard = global multi-select + collapse rows; compactPanel = per-row select (address-style). */
|
|
3331
|
+
type AXPSelectorStructurePresentationMode = 'standard' | 'compactPanel';
|
|
3332
|
+
interface AXPSelectorStructureFieldDef {
|
|
3333
|
+
name: string;
|
|
3334
|
+
title: string;
|
|
3335
|
+
widgetType: string;
|
|
3336
|
+
options?: Record<string, unknown>;
|
|
3337
|
+
}
|
|
3338
|
+
declare const AXPSelectorStructureWidget: AXPWidgetConfig;
|
|
3339
|
+
interface AXPSelectorStructureWidgetDesignerOptions {
|
|
3340
|
+
selectorMode?: AXPSelectorStructureSelectorMode;
|
|
3341
|
+
structureMode?: AXPSelectorStructureStructureMode;
|
|
3342
|
+
presentation?: AXPSelectorStructurePresentationMode;
|
|
3343
|
+
previewIcon?: string;
|
|
3344
|
+
placeholder?: string;
|
|
3345
|
+
contextSiblingPath?: string;
|
|
3346
|
+
identityField?: string;
|
|
3347
|
+
identityDisplay?: AXPSelectorStructureIdentityDisplay;
|
|
3348
|
+
valueField?: string;
|
|
3349
|
+
textField?: string;
|
|
3350
|
+
dataSource?: unknown;
|
|
3351
|
+
multiple?: boolean;
|
|
3352
|
+
lookup?: {
|
|
3353
|
+
entity?: string;
|
|
3354
|
+
look?: 'select' | 'lookup';
|
|
3355
|
+
filter?: unknown;
|
|
3356
|
+
hasClearButton?: boolean;
|
|
3357
|
+
};
|
|
3358
|
+
structureFields?: AXPSelectorStructureFieldDef[];
|
|
3359
|
+
freeformPath?: string;
|
|
3360
|
+
}
|
|
3361
|
+
interface AXPSelectorStructureWidgetViewOptions extends AXPSelectorStructureWidgetDesignerOptions {
|
|
3362
|
+
}
|
|
3363
|
+
interface AXPSelectorStructureWidgetEditOptions extends AXPSelectorStructureWidgetDesignerOptions {
|
|
3364
|
+
}
|
|
3365
|
+
interface AXPSelectorStructureWidgetColumnOptions {
|
|
3366
|
+
identityField?: string;
|
|
3367
|
+
textField?: string;
|
|
3368
|
+
previewIcon?: string;
|
|
3369
|
+
}
|
|
3370
|
+
interface AXPSelectorStructureWidgetPrintOptions {
|
|
3371
|
+
}
|
|
3372
|
+
interface AXPSelectorStructureWidgetOptions {
|
|
3373
|
+
designer: AXPSelectorStructureWidgetDesignerOptions;
|
|
3374
|
+
view: AXPSelectorStructureWidgetViewOptions;
|
|
3375
|
+
edit: AXPSelectorStructureWidgetEditOptions;
|
|
3376
|
+
print: AXPSelectorStructureWidgetPrintOptions;
|
|
3377
|
+
column: AXPSelectorStructureWidgetColumnOptions;
|
|
3378
|
+
}
|
|
3379
|
+
|
|
3380
|
+
declare class AXPSelectorStructureWidgetEditComponent extends AXPValueWidgetComponent {
|
|
3381
|
+
#private;
|
|
3382
|
+
private readonly entityRegistry;
|
|
3383
|
+
protected selectorMode: _angular_core.Signal<"select" | "lookup">;
|
|
3384
|
+
protected structureMode: _angular_core.Signal<"schema" | "freeform">;
|
|
3385
|
+
protected contextSiblingPath: _angular_core.Signal<string>;
|
|
3386
|
+
protected identityField: _angular_core.Signal<string>;
|
|
3387
|
+
protected identityDisplay: _angular_core.Signal<"readonly" | "hidden">;
|
|
3388
|
+
protected valueField: _angular_core.Signal<string>;
|
|
3389
|
+
protected textField: _angular_core.Signal<string>;
|
|
3390
|
+
protected multiple: _angular_core.Signal<boolean>;
|
|
3391
|
+
protected freeformPath: _angular_core.Signal<string>;
|
|
3392
|
+
protected lookupEntityKey: _angular_core.Signal<string | undefined>;
|
|
3393
|
+
protected lookupHasClearButton: _angular_core.Signal<boolean>;
|
|
3394
|
+
protected lookupCustomFilter: _angular_core.Signal<AXDataSourceFilterOption | undefined>;
|
|
3395
|
+
protected disabled: _angular_core.Signal<boolean>;
|
|
3396
|
+
protected presentationMode: _angular_core.Signal<"standard" | "compactPanel">;
|
|
3397
|
+
/** Compact panel (address-style) applies only to sibling select mode; lookup falls back to standard layout. */
|
|
3398
|
+
protected useCompactLayout: _angular_core.Signal<boolean>;
|
|
3399
|
+
protected previewIcon: _angular_core.Signal<string>;
|
|
3400
|
+
protected placeholder: _angular_core.Signal<string>;
|
|
3401
|
+
protected compactSelectPlaceholder: _angular_core.Signal<string>;
|
|
3402
|
+
protected addCompactItemLabel: _angular_core.Signal<string>;
|
|
3403
|
+
protected clearRowTitle: _angular_core.Signal<string>;
|
|
3404
|
+
protected removeRowTitle: _angular_core.Signal<string>;
|
|
3405
|
+
protected resolvedSiblingPath(): string;
|
|
3406
|
+
/**
|
|
3407
|
+
* Items shown in the selector: sibling context array when path is set, otherwise optional static `dataSource` array.
|
|
3408
|
+
*/
|
|
3409
|
+
protected contextItems: _angular_core.Signal<unknown[]>;
|
|
3410
|
+
protected contextSelectDataSource: _angular_core.Signal<AXDataSource<unknown>>;
|
|
3411
|
+
protected selectedSourceItems: _angular_core.WritableSignal<unknown[]>;
|
|
3412
|
+
protected compactRowDataSources: _angular_core.Signal<AXDataSource<unknown>[]>;
|
|
3413
|
+
protected compactRowSelectedItems: _angular_core.Signal<unknown[][]>;
|
|
3414
|
+
protected lookupEntityDef: _angular_core.WritableSignal<AXPEntity | null>;
|
|
3415
|
+
protected defaultLookupSorts: _angular_core.Signal<AXDataSourceSortOption[]>;
|
|
3416
|
+
protected lookupDataSource: _angular_core.Signal<AXDataSource<unknown> | null>;
|
|
3417
|
+
protected lookupTextField: _angular_core.Signal<string>;
|
|
3418
|
+
protected lookupSelectedItems: _angular_core.WritableSignal<unknown[]>;
|
|
3419
|
+
protected rows: _angular_core.Signal<Record<string, unknown>[]>;
|
|
3420
|
+
protected structureFields: _angular_core.Signal<AXPSelectorStructureFieldDef[]>;
|
|
3421
|
+
protected structureFieldNodes: _angular_core.Signal<{
|
|
3422
|
+
name: string;
|
|
3423
|
+
title: string;
|
|
3424
|
+
node: AXPWidgetNode;
|
|
3425
|
+
}[]>;
|
|
3426
|
+
protected identityLabel: _angular_core.Signal<string>;
|
|
3427
|
+
protected identityNode: _angular_core.Signal<AXPWidgetNode | null>;
|
|
3428
|
+
protected freeformHeading: _angular_core.Signal<string>;
|
|
3429
|
+
protected keyPlaceholder: _angular_core.Signal<string>;
|
|
3430
|
+
protected valuePlaceholder: _angular_core.Signal<string>;
|
|
3431
|
+
protected addPairLabel: _angular_core.Signal<string>;
|
|
3432
|
+
protected removePairTitle: _angular_core.Signal<string>;
|
|
3433
|
+
protected disabledHint: _angular_core.Signal<string>;
|
|
3434
|
+
protected trackRow(row: Record<string, unknown>): unknown;
|
|
3435
|
+
protected rowCaption(row: Record<string, unknown>): string;
|
|
3436
|
+
protected isDraftRow(row: Record<string, unknown>): boolean;
|
|
3437
|
+
protected isRowSelectLocked(row: Record<string, unknown>): boolean;
|
|
3438
|
+
/**
|
|
3439
|
+
* Items available for row `index`: all source items minus keys already chosen on other committed rows;
|
|
3440
|
+
* always includes the current row's selected item so the select can display it.
|
|
3441
|
+
*/
|
|
3442
|
+
protected exclusiveItemsForRow(index: number): unknown[];
|
|
3443
|
+
private newRowUid;
|
|
3444
|
+
protected handleCompactSelectChange(index: number, e: AXValueChangedEvent): void;
|
|
3445
|
+
protected applyCompactRowFromItem(index: number, rawItem: unknown | undefined): void;
|
|
3446
|
+
protected clearCompactRow(index: number): void;
|
|
3447
|
+
protected removeCompactRow(index: number): void;
|
|
3448
|
+
protected addCompactRow(): void;
|
|
3449
|
+
protected handleSelectValueChange(e: AXValueChangedEvent): void;
|
|
3450
|
+
protected handleLookupValueChange(e: AXValueChangedEvent): void;
|
|
3451
|
+
protected applyRowsFromSourceItems(items: unknown[]): void;
|
|
3452
|
+
protected handleSchemaContextChange(rowKey: unknown, e: AXPContextChangeEvent): void;
|
|
3453
|
+
protected freeformEntries(row: Record<string, unknown>): {
|
|
3454
|
+
key: string;
|
|
3455
|
+
value: string;
|
|
3456
|
+
index: number;
|
|
3457
|
+
}[];
|
|
3458
|
+
private serializeFreeformValue;
|
|
3459
|
+
protected onFreeformKeyInput(row: Record<string, unknown>, entry: {
|
|
3460
|
+
key: string;
|
|
3461
|
+
value: string;
|
|
3462
|
+
index: number;
|
|
3463
|
+
}, nextKey: string): void;
|
|
3464
|
+
protected patchFreeformValue(row: Record<string, unknown>, key: string, raw: string): void;
|
|
3465
|
+
protected removeFreeformKey(row: Record<string, unknown>, key: string): void;
|
|
3466
|
+
protected addFreeformPair(row: Record<string, unknown>): void;
|
|
3467
|
+
private renameFreeformKey;
|
|
3468
|
+
private patchFreeformMap;
|
|
3469
|
+
private tryParseFreeformString;
|
|
3470
|
+
private mergeListFilter;
|
|
3471
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPSelectorStructureWidgetEditComponent, never>;
|
|
3472
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPSelectorStructureWidgetEditComponent, "axp-selector-structure-widget-edit", never, {}, {}, never, never, true, never>;
|
|
3473
|
+
}
|
|
3474
|
+
|
|
3475
|
+
declare class AXPSelectorStructureWidgetViewComponent extends AXPValueWidgetComponent {
|
|
3476
|
+
protected identityField: _angular_core.Signal<string>;
|
|
3477
|
+
protected textField: _angular_core.Signal<string>;
|
|
3478
|
+
protected valueField: _angular_core.Signal<string>;
|
|
3479
|
+
protected previewIcon: _angular_core.Signal<string>;
|
|
3480
|
+
protected summaries: _angular_core.Signal<string[]>;
|
|
3481
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPSelectorStructureWidgetViewComponent, never>;
|
|
3482
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPSelectorStructureWidgetViewComponent, "axp-selector-structure-widget-view", never, {}, {}, never, never, true, never>;
|
|
3483
|
+
}
|
|
3484
|
+
|
|
2154
3485
|
declare const AXPEntityCreateEvent: {
|
|
2155
3486
|
(payload: {
|
|
2156
3487
|
entity: string;
|
|
@@ -2272,14 +3603,23 @@ declare class AXPShowDetailViewAction extends AXPWorkflowAction {
|
|
|
2272
3603
|
}
|
|
2273
3604
|
declare const AXPShowDetailsViewWorkflow: AXPWorkflow;
|
|
2274
3605
|
|
|
3606
|
+
/** Optional list filters passed into `show-list-view` (e.g. from `Entity:List` with `conditions`). */
|
|
3607
|
+
interface AXPShowListViewCondition {
|
|
3608
|
+
name?: string;
|
|
3609
|
+
field?: string;
|
|
3610
|
+
operator?: {
|
|
3611
|
+
type: string;
|
|
3612
|
+
};
|
|
3613
|
+
value?: unknown;
|
|
3614
|
+
}
|
|
2275
3615
|
declare class AXPShowListViewAction extends AXPWorkflowAction {
|
|
2276
3616
|
private navigation;
|
|
2277
3617
|
private sessionService;
|
|
2278
|
-
execute(context
|
|
3618
|
+
execute(context: AXPWorkflowContext): Promise<void>;
|
|
2279
3619
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPShowListViewAction, never>;
|
|
2280
3620
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPShowListViewAction>;
|
|
2281
3621
|
}
|
|
2282
3622
|
declare const AXPShowListViewWorkflow: AXPWorkflow;
|
|
2283
3623
|
|
|
2284
|
-
export { AXMEntityCrudService, AXMEntityCrudServiceImpl, AXPCategoryTreeService, AXPCreateEntityCommand, AXPCreateEntityWorkflow, AXPDataSeederService, AXPDeleteEntityWorkflow, AXPEntityApplyUpdatesAction, AXPEntityCategoryTreeSelectorComponent, AXPEntityCategoryWidget, AXPEntityCategoryWidgetColumnComponent, AXPEntityCategoryWidgetEditComponent, AXPEntityCategoryWidgetViewComponent, AXPEntityCommandTriggerViewModel, AXPEntityCreateEvent, AXPEntityCreatePopupAction, AXPEntityCreateSubmittedAction, AXPEntityCreateViewElementViewModel, AXPEntityCreateViewModelFactory, AXPEntityCreateViewSectionViewModel, AXPEntityDataProvider, AXPEntityDataProviderImpl, AXPEntityDataSelectorService, AXPEntityDefinitionRegistryService, AXPEntityDeletedEvent, AXPEntityDetailListViewModel, AXPEntityDetailPopoverComponent, AXPEntityDetailPopoverService, AXPEntityDetailViewModelFactory, AXPEntityDetailViewModelResolver, AXPEntityEventDispatcherService, AXPEntityEventsKeys, AXPEntityFormBuilderService, AXPEntityListTableService, AXPEntityListViewColumnViewModel, AXPEntityListViewModelFactory, AXPEntityListViewModelResolver, AXPEntityListWidget, AXPEntityListWidgetViewComponent, AXPEntityMasterCreateViewModel, AXPEntityMasterListViewModel, AXPEntityMasterListViewQueryViewModel, AXPEntityMasterSingleElementViewModel, AXPEntityMasterSingleViewGroupViewModel, AXPEntityMasterSingleViewModel, AXPEntityMasterUpdateElementViewModel, AXPEntityMasterUpdateViewModel, AXPEntityMasterUpdateViewModelFactory, AXPEntityMiddleware, AXPEntityModifyConfirmedAction, AXPEntityModifyEvent, AXPEntityModifySectionPopupAction, AXPEntityModule, AXPEntityPerformDeleteAction, AXPEntityResolver, AXPEntityService, AXPEntityStorageService, AXPEntityUpdateViewSectionViewModel, AXPGetEntityDetailsQuery,
|
|
2285
|
-
export type { AXPAuditEvent,
|
|
3624
|
+
export { AXMEntityCrudService, AXMEntityCrudServiceImpl, AXPCategoryTreeService, AXPCreateEntityCommand, AXPCreateEntityWorkflow, AXPDataSeederService, AXPDeleteEntityWorkflow, AXPEntitiesListDataSourceDefinition, AXPEntityApplyUpdatesAction, AXPEntityCategoryTreeSelectorComponent, AXPEntityCategoryWidget, AXPEntityCategoryWidgetColumnComponent, AXPEntityCategoryWidgetEditComponent, AXPEntityCategoryWidgetViewComponent, AXPEntityCommandTriggerViewModel, AXPEntityCreateEvent, AXPEntityCreatePopupAction, AXPEntityCreateSubmittedAction, AXPEntityCreateViewElementViewModel, AXPEntityCreateViewModelFactory, AXPEntityCreateViewSectionViewModel, AXPEntityDataProvider, AXPEntityDataProviderImpl, AXPEntityDataSelectorService, AXPEntityDefinitionProviderWidget, AXPEntityDefinitionProviderWidgetEditComponent, AXPEntityDefinitionRegistryService, AXPEntityDeletedEvent, AXPEntityDetailListViewModel, AXPEntityDetailPopoverComponent, AXPEntityDetailPopoverService, AXPEntityDetailViewModelFactory, AXPEntityDetailViewModelResolver, AXPEntityEventDispatcherService, AXPEntityEventsKeys, AXPEntityFormBuilderService, AXPEntityListPersistenceModeDefault, AXPEntityListTableService, AXPEntityListToolbarService, AXPEntityListViewColumnViewModel, AXPEntityListViewModelFactory, AXPEntityListViewModelResolver, AXPEntityListWidget, AXPEntityListWidgetViewComponent, AXPEntityMasterCreateViewModel, AXPEntityMasterListViewModel, AXPEntityMasterListViewQueryViewModel, AXPEntityMasterSingleElementViewModel, AXPEntityMasterSingleViewGroupViewModel, AXPEntityMasterSingleViewModel, AXPEntityMasterUpdateElementViewModel, AXPEntityMasterUpdateViewModel, AXPEntityMasterUpdateViewModelFactory, AXPEntityMiddleware, AXPEntityModifyConfirmedAction, AXPEntityModifyEvent, AXPEntityModifySectionPopupAction, AXPEntityModule, AXPEntityPerformDeleteAction, AXPEntityPreloadFiltersContainerComponent, AXPEntityPreloadFiltersViewModel, AXPEntityPreloadFiltersViewModelResolver, AXPEntityResolver, AXPEntityService, AXPEntityStorageService, AXPEntityUpdateViewSectionViewModel, AXPGetEntityDetailsQuery, AXPLayoutOrderingConfigService, AXPLookupWidget, AXPLookupWidgetColumnComponent, AXPLookupWidgetEditComponent, AXPLookupWidgetViewComponent, AXPMiddlewareAbortError, AXPMiddlewareEntityStorageService, AXPModifyEntitySectionWorkflow, AXPMultiSourceDefinitionProviderContext, AXPMultiSourceDefinitionProviderService, AXPMultiSourceFederatedSearchService, AXPMultiSourceSelectorComponent, AXPMultiSourceSelectorService, AXPMultiSourceSelectorWidget, AXPMultiSourceSelectorWidgetColumnComponent, AXPMultiSourceSelectorWidgetEditComponent, AXPMultiSourceSelectorWidgetViewComponent, AXPMultiSourceType, AXPOpenEntityDetailsCommand, AXPQuickEntityModifyPopupAction, AXPQuickModifyEntityWorkflow, AXPRelatedColumnEnrichmentService, AXPRelatedColumnMetadataResolver, AXPSelectorStructureWidget, AXPSelectorStructureWidgetColumnComponent, AXPSelectorStructureWidgetEditComponent, AXPSelectorStructureWidgetViewComponent, AXPShowDetailViewAction, AXPShowDetailsViewWorkflow, AXPShowListViewAction, AXPShowListViewWorkflow, AXPTruncatedBreadcrumbComponent, AXPUpdateEntityCommand, AXPViewEntityDetailsCommand, AXP_CATEGORY_TREE_ROOT_TITLE_I18N_KEY, 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, AXP_MULTI_SOURCE_DEFINITION_PROVIDER, DEFAULT_COLUMN_ORDER, DEFAULT_PAIR_SPAN_RULES, DEFAULT_PROPERTY_ORDER, DEFAULT_SECTION_ORDER, ENTITY_LIST_ROUTE_CONTEXT_SESSION_KEY, EntityBuilder, EntityDataAccessor, actionExists, applyDataSourcePagingWithoutLoad, axpCreateEntityAiToolInputDefaults, axpCreateEntityCommandDefinition, canPersistEntityListState, cloneLayoutArrays, collectEntityQuickSearchFieldPaths, collectNestedCreateHiddenProperties, collectNestedFieldPathsFromEntityColumns, collectQuickSearchPathsFromSingleEntityDefinition, columnOrderingMiddleware, columnOrderingMiddlewareProvider, columnWidthMiddleware, columnWidthMiddlewareProvider, computeEntityAggregates, createColumnOrderingMiddlewareProvider, createLayoutOrderingMiddlewareProvider, createModifierContext, defaultMultiLanguageMiddleware, defaultMultiLanguageMiddlewareProvider, detectEntityChanges, ensureLayoutPropertyView, ensureLayoutSection, ensureListActions, entityDetailsCreateActions, entityDetailsCreateActionsDeferredParent, entityDetailsCrudActions, entityDetailsEditAction, entityDetailsNewEditAction, entityDetailsReferenceCondition, entityDetailsReferenceCreateActions, entityDetailsSimpleCondition, entityMasterBulkDeleteAction, entityMasterCreateAction, entityMasterCrudActions, entityMasterDeleteAction, entityMasterEditAction, entityMasterRecordActions, entityMasterViewAction, entityOverrideDetailsViewAction, eventDispatchMiddleware, filterSortEntityRows, findEntityListRowDataInTree, getDataSourcePageIndex, getEntityListRowId, getMasterInterfacePropertySortKey, isAXPMiddlewareAbortError, isCategoryEntity, isCategoryFilter, layoutOrderingMiddlewareFactory, layoutOrderingMiddlewareProvider, mergeForeignKeyFieldIntoCreateActions, normalizeEntityListPersistenceMode, normalizeListPaging, provideEntity, resolveEntityPluginDetailPageOrder, restoreEntityListExpandedRows, runEntityQuery, searchResultDescriptionMiddleware, searchResultDescriptionMiddlewareProvider, shouldLoadEntityListStateFromStorage, shouldResetEntityListStateOnRouteEntry };
|
|
3625
|
+
export type { AXPAuditEvent, AXPCollectEntityQuickSearchPathsResolver, AXPDataSeeder, AXPEntityActionPlugin, AXPEntityAggregateMeasure, AXPEntityAggregateOptions, AXPEntityAggregateReducerType, AXPEntityAggregateRequest, AXPEntityAggregateResult, AXPEntityCategoryWidgetOptions, AXPEntityChangeSet, AXPEntityConfigs, AXPEntityCreateDto, AXPEntityDataSelectorOptions, AXPEntityDataSelectorResult, AXPEntityDefinitionLoader, AXPEntityDefinitionPreloader, AXPEntityDeleteOptions, AXPEntityDetailDto, AXPEntityDetailPopoverOptions, AXPEntityLayoutLike, AXPEntityLayoutPropertyLike, AXPEntityLayoutSectionLike, AXPEntityListEntry, AXPEntityListExpandRowRef, AXPEntityListInput, AXPEntityListItemDto, AXPEntityListPagingState, AXPEntityListPersistenceMode, AXPEntityListToolbarConvertOptions, AXPEntityMasterListViewSortPropViewModel, AXPEntityModel, AXPEntityModifier, AXPEntityModifierContext, AXPEntityModifierProvider, AXPEntityOutputDto, AXPEntityPreloadEntity, AXPEntityQueryAllOptions, AXPEntityQueryAllResult, AXPEntityStorageContext, AXPEntityStorageMiddleware, AXPEntityUpdateDto, AXPGetEntityDetailsQueryInput, AXPGetEntityDetailsQueryResult, AXPLookupColumnResolveOptions, AXPLookupColumnResolveStrategy, AXPLookupWidgetLookType, AXPLookupWidgetOptions, AXPMultiSourceDefinition, AXPMultiSourceDefinitionProvider, AXPMultiSourceItem, AXPMultiSourceRef, AXPMultiSourceSearchResult, AXPMultiSourceSearchResultItem, AXPMultiSourceSelectorOpenConfig, AXPMultiSourceSelectorResult, AXPMultiSourceSelectorWidgetOptions, AXPMultiSourceValue, AXPOpenEntityDetailsCommandInput, AXPRecordAuditInfo, AXPRecordOwnershipInfo, AXPRecordStateInfo, AXPRelatedColumnMetadata, AXPSelectorStructureFieldDef, AXPSelectorStructureIdentityDisplay, AXPSelectorStructurePresentationMode, AXPSelectorStructureSelectorMode, AXPSelectorStructureStructureMode, AXPSelectorStructureWidgetColumnOptions, AXPSelectorStructureWidgetDesignerOptions, AXPSelectorStructureWidgetEditOptions, AXPSelectorStructureWidgetOptions, AXPSelectorStructureWidgetPrintOptions, AXPSelectorStructureWidgetViewOptions, AXPShowListViewCondition, CategoryQueryEvent, CategoryQueryFunction, CategoryQueryResult, CategoryTreeConfig, CategoryTreeNodeData, EntityDetailPluginPageSlot, PairSpanRule, ResolveEntityPluginDetailPageOrderOptions, RunEntityQueryAdapters, SectionOrderConfig, SkipEntityComponentPageRef };
|