@meshmakers/octo-ui 3.3.980 → 3.3.1000
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/meshmakers-octo-ui.mjs +2606 -272
- package/fesm2022/meshmakers-octo-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/types/meshmakers-octo-ui.d.ts +744 -87
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
2
|
import { OnInit, OnDestroy, EventEmitter, OnChanges, SimpleChanges, AfterViewInit, Provider, InjectionToken, EnvironmentProviders } from '@angular/core';
|
|
3
3
|
import * as _progress_kendo_svg_icons from '@progress/kendo-svg-icons';
|
|
4
4
|
import { SVGIcon } from '@progress/kendo-svg-icons';
|
|
5
|
-
import { AttributeItem, AttributeValueTypeDto as AttributeValueTypeDto$1, CkTypeSelectorItem as CkTypeSelectorItem$1, FieldFilterDto, SearchFilterDto, SortDto,
|
|
5
|
+
import { AttributeItem, AttributeValueTypeDto as AttributeValueTypeDto$1, CkTypeSelectorItem as CkTypeSelectorItem$1, RtEntityDto, FieldFilterDto, SearchFilterDto, SortDto, CkModelDto, CkTypeDto, RtAssociationDto, FieldFilterOperatorsDto, GetCkTypesDtoGQL, RuntimeEntityItem, RuntimeEntitySelectDataSource, RuntimeEntityDialogDataSource } from '@meshmakers/octo-services';
|
|
6
6
|
import { GridDataResult, CellClickEvent, RowArgs, PageChangeEvent, SelectionEvent } from '@progress/kendo-angular-grid';
|
|
7
7
|
import { TreeItemDataTyped, TreeItemData, CommandItemExecuteEventArgs, CommandItem } from '@meshmakers/shared-services';
|
|
8
8
|
import { ControlValueAccessor, Validator, FormControl, AbstractControl, ValidationErrors } from '@angular/forms';
|
|
9
9
|
import { AutoCompleteComponent, PopupSettings } from '@progress/kendo-angular-dropdowns';
|
|
10
|
-
import { DataSourceTyped, ListViewComponent, HierarchyDataSourceBase, FetchDataOptions, FetchResultTyped, BaseTreeDetailComponent, NodeDroppedEvent } from '@meshmakers/shared-ui';
|
|
10
|
+
import { DataSourceTyped, ListViewComponent, HierarchyDataSourceBase, FetchDataOptions, FetchResultTyped, BaseTreeDetailComponent, NodeDroppedEvent, TreeComponent } from '@meshmakers/shared-ui';
|
|
11
11
|
import { State } from '@progress/kendo-data-query/dist/npm/state';
|
|
12
12
|
import { Observable } from 'rxjs';
|
|
13
13
|
import { Routes } from '@angular/router';
|
|
@@ -110,8 +110,8 @@ declare class AttributeSelectorDialogComponent implements OnInit {
|
|
|
110
110
|
* Move a single attribute from selected to available
|
|
111
111
|
*/
|
|
112
112
|
private moveAttributeToAvailable;
|
|
113
|
-
static ɵfac:
|
|
114
|
-
static ɵcmp:
|
|
113
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AttributeSelectorDialogComponent, never>;
|
|
114
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AttributeSelectorDialogComponent, "mm-attribute-selector-dialog", never, {}, {}, never, never, true, never>;
|
|
115
115
|
}
|
|
116
116
|
|
|
117
117
|
interface AttributeSelectorResult {
|
|
@@ -134,8 +134,8 @@ declare class AttributeSelectorDialogService {
|
|
|
134
134
|
* @returns Promise that resolves with the result containing selected attributes and confirmation status
|
|
135
135
|
*/
|
|
136
136
|
openAttributeSelector(rtCkTypeId: string, selectedAttributes?: string[], dialogTitle?: string, singleSelect?: boolean, additionalAttributes?: AttributeItem[], includeNavigationProperties?: boolean, maxDepth?: number, hideNavigationControls?: boolean, attributePaths?: string[]): Promise<AttributeSelectorResult>;
|
|
137
|
-
static ɵfac:
|
|
138
|
-
static ɵprov:
|
|
137
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AttributeSelectorDialogService, never>;
|
|
138
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AttributeSelectorDialogService>;
|
|
139
139
|
}
|
|
140
140
|
|
|
141
141
|
interface AttributeSortItem {
|
|
@@ -214,8 +214,8 @@ declare class AttributeSortSelectorDialogComponent implements OnInit {
|
|
|
214
214
|
private updateSelectedGrid;
|
|
215
215
|
onOk(): void;
|
|
216
216
|
onCancel(): void;
|
|
217
|
-
static ɵfac:
|
|
218
|
-
static ɵcmp:
|
|
217
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AttributeSortSelectorDialogComponent, never>;
|
|
218
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AttributeSortSelectorDialogComponent, "mm-attribute-sort-selector-dialog", never, {}, {}, never, never, true, never>;
|
|
219
219
|
}
|
|
220
220
|
|
|
221
221
|
interface AttributeSortSelectorResult {
|
|
@@ -235,8 +235,8 @@ declare class AttributeSortSelectorDialogService {
|
|
|
235
235
|
* @returns Promise that resolves with the result containing selected attributes with sort orders and confirmation status
|
|
236
236
|
*/
|
|
237
237
|
openAttributeSortSelector(ckTypeId: string, selectedAttributes?: AttributeSortItem[], dialogTitle?: string, includeNavigationProperties?: boolean, hideNavigationControls?: boolean, attributePaths?: string[], additionalAttributes?: AttributeItem[]): Promise<AttributeSortSelectorResult>;
|
|
238
|
-
static ɵfac:
|
|
239
|
-
static ɵprov:
|
|
238
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AttributeSortSelectorDialogService, never>;
|
|
239
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AttributeSortSelectorDialogService>;
|
|
240
240
|
}
|
|
241
241
|
|
|
242
242
|
interface CkTypeSelectorDialogData {
|
|
@@ -288,8 +288,8 @@ declare class CkTypeSelectorDialogComponent implements OnInit, OnDestroy {
|
|
|
288
288
|
onCellClick(event: CellClickEvent): void;
|
|
289
289
|
onCancel(): void;
|
|
290
290
|
onConfirm(): void;
|
|
291
|
-
static ɵfac:
|
|
292
|
-
static ɵcmp:
|
|
291
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CkTypeSelectorDialogComponent, never>;
|
|
292
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<CkTypeSelectorDialogComponent, "mm-ck-type-selector-dialog", never, {}, {}, never, never, true, never>;
|
|
293
293
|
}
|
|
294
294
|
|
|
295
295
|
interface CkTypeSelectorResult {
|
|
@@ -311,8 +311,8 @@ declare class CkTypeSelectorDialogService {
|
|
|
311
311
|
allowAbstract?: boolean;
|
|
312
312
|
derivedFromRtCkTypeId?: string;
|
|
313
313
|
}): Promise<CkTypeSelectorResult>;
|
|
314
|
-
static ɵfac:
|
|
315
|
-
static ɵprov:
|
|
314
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CkTypeSelectorDialogService, never>;
|
|
315
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<CkTypeSelectorDialogService>;
|
|
316
316
|
}
|
|
317
317
|
|
|
318
318
|
declare class CkTypeSelectorInputComponent implements OnInit, OnDestroy, ControlValueAccessor, Validator {
|
|
@@ -369,8 +369,128 @@ declare class CkTypeSelectorInputComponent implements OnInit, OnDestroy, Control
|
|
|
369
369
|
private injectPopupStyles;
|
|
370
370
|
private selectCkType;
|
|
371
371
|
openDialog(event?: Event): Promise<void>;
|
|
372
|
-
static ɵfac:
|
|
373
|
-
static ɵcmp:
|
|
372
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CkTypeSelectorInputComponent, never>;
|
|
373
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<CkTypeSelectorInputComponent, "mm-ck-type-selector-input", never, { "placeholder": { "alias": "placeholder"; "required": false; }; "minSearchLength": { "alias": "minSearchLength"; "required": false; }; "maxResults": { "alias": "maxResults"; "required": false; }; "debounceMs": { "alias": "debounceMs"; "required": false; }; "ckModelIds": { "alias": "ckModelIds"; "required": false; }; "allowAbstract": { "alias": "allowAbstract"; "required": false; }; "dialogTitle": { "alias": "dialogTitle"; "required": false; }; "advancedSearchLabel": { "alias": "advancedSearchLabel"; "required": false; }; "derivedFromRtCkTypeId": { "alias": "derivedFromRtCkTypeId"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "required": { "alias": "required"; "required": false; }; }, { "ckTypeSelected": "ckTypeSelected"; "ckTypeCleared": "ckTypeCleared"; }, never, never, true, never>;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
/**
|
|
377
|
+
* Pure helpers for extracting runtime data point names from a CK entity. Kept
|
|
378
|
+
* Angular-free so unit tests can exercise the record-shape branches without
|
|
379
|
+
* spinning up a TestBed, and so the same logic can be called both from the
|
|
380
|
+
* service (which fetches the entity via GraphQL) and from any caller that
|
|
381
|
+
* already has the entity in hand (e.g. the runtime-browser detail pane).
|
|
382
|
+
*
|
|
383
|
+
* A "data point" here is one entry of an entity's `States` or `DataPoints`
|
|
384
|
+
* RecordArray attribute — for Loxone Controls these are the state names
|
|
385
|
+
* (`tempActual`, `co2`, `humidityActual`, …); for adapters that don't model
|
|
386
|
+
* sub-states the array is absent and the only available data point is the
|
|
387
|
+
* default `currentValue` constant the runtime adapter exposes for
|
|
388
|
+
* single-state polling.
|
|
389
|
+
*/
|
|
390
|
+
/**
|
|
391
|
+
* Default data-point name for entities without a States/DataPoints RecordArray.
|
|
392
|
+
* Matches the constant the runtime adapters (Loxone, MQTT, OPC-UA) use as the
|
|
393
|
+
* `sourceAttributePath` fallback when no specific state is configured.
|
|
394
|
+
*/
|
|
395
|
+
declare const DEFAULT_DATA_POINT = "currentValue";
|
|
396
|
+
/** Minimal shape we accept for an attribute item. */
|
|
397
|
+
interface AttributeItemLike {
|
|
398
|
+
attributeName?: string | null;
|
|
399
|
+
value?: unknown;
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* Extracts the list of available data point names from an entity's attribute
|
|
403
|
+
* list. Always includes {@link DEFAULT_DATA_POINT} first; named state entries
|
|
404
|
+
* follow in alphabetical order.
|
|
405
|
+
*
|
|
406
|
+
* Tolerates the three record shapes the platform produces for a RecordArray:
|
|
407
|
+
*
|
|
408
|
+
* 1. GraphQL: each record is `{ ckRecordId, attributes: [{attributeName, value}, …] }`.
|
|
409
|
+
* 2. Pipeline / MongoDB: each record is `{ attributes: { Name: "…", ExternalId: "…" } }`.
|
|
410
|
+
* 3. Flat: each record is `{ Name: "…", ExternalId: "…" }` (older dumps / sample data).
|
|
411
|
+
*
|
|
412
|
+
* Returns `[DEFAULT_DATA_POINT]` for null/undefined input, attributes without a
|
|
413
|
+
* States/DataPoints entry, or malformed RecordArrays.
|
|
414
|
+
*/
|
|
415
|
+
declare function extractDataPointNames(attributes: readonly (AttributeItemLike | null | undefined)[] | null | undefined): string[];
|
|
416
|
+
|
|
417
|
+
/**
|
|
418
|
+
* Source data-point picker for DataPointMapping `sourceAttributePath`.
|
|
419
|
+
*
|
|
420
|
+
* Renders a Kendo combobox of the data points exposed by a source entity —
|
|
421
|
+
* a Loxone Control's State names (`tempActual`, `co2`, …), an MQTT topic
|
|
422
|
+
* sub-key, an OPC-UA node attribute, etc. — with `currentValue` as the
|
|
423
|
+
* always-available default for single-state sources.
|
|
424
|
+
*
|
|
425
|
+
* Two ways to feed the picker:
|
|
426
|
+
* - `entity` — pass a pre-loaded RtEntityDto; the picker reads the
|
|
427
|
+
* States/DataPoints RecordArray straight off it (no GraphQL roundtrip).
|
|
428
|
+
* Used by the runtime-browser detail pane.
|
|
429
|
+
* - `entityRtId` + `entityCkTypeId` — the picker fetches the entity via
|
|
430
|
+
* `getRuntimeEntityById` and extracts data points itself. Used by the
|
|
431
|
+
* mapping-edit dialog where only the IDs are known.
|
|
432
|
+
*
|
|
433
|
+
* `allowCustom: true` keeps the picker useful when the user needs to escape
|
|
434
|
+
* the catalogue — e.g. typing a path the entity hasn't published yet, or a
|
|
435
|
+
* field a future state will expose.
|
|
436
|
+
*/
|
|
437
|
+
declare class DataPointPickerComponent {
|
|
438
|
+
private readonly resolver;
|
|
439
|
+
/** Pre-loaded source entity. When set, no GraphQL call is made. */
|
|
440
|
+
readonly entity: _angular_core.InputSignal<RtEntityDto | null | undefined>;
|
|
441
|
+
/** Source entity rtId. Required (together with ckTypeId) when `entity` is not provided. */
|
|
442
|
+
readonly entityRtId: _angular_core.InputSignal<string | null | undefined>;
|
|
443
|
+
/** Source entity CK type id. */
|
|
444
|
+
readonly entityCkTypeId: _angular_core.InputSignal<string | null | undefined>;
|
|
445
|
+
/** Two-way bound data-point name. */
|
|
446
|
+
readonly value: _angular_core.ModelSignal<string>;
|
|
447
|
+
/** Optional placeholder shown when the combobox is empty. */
|
|
448
|
+
readonly placeholder: _angular_core.InputSignal<string>;
|
|
449
|
+
/** Disables the combobox without hiding it. */
|
|
450
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
451
|
+
/** Emits whenever the user enters a custom filter — useful for callers that
|
|
452
|
+
* want to refine a backing catalogue independently of the value selection. */
|
|
453
|
+
readonly filterChange: _angular_core.OutputEmitterRef<string>;
|
|
454
|
+
protected readonly options: _angular_core.WritableSignal<string[]>;
|
|
455
|
+
protected readonly loading: _angular_core.WritableSignal<boolean>;
|
|
456
|
+
/**
|
|
457
|
+
* Current filter text entered into the combobox. Drives the case-insensitive
|
|
458
|
+
* *contains* match below. Kendo's combobox by default does not filter the
|
|
459
|
+
* `[data]` it is given — when `filterable` is true it just emits
|
|
460
|
+
* `filterChange` events and expects the consumer to refilter. Without this,
|
|
461
|
+
* typing "co2" would show every data point regardless of name.
|
|
462
|
+
*/
|
|
463
|
+
protected readonly filter: _angular_core.WritableSignal<string>;
|
|
464
|
+
protected readonly filteredOptions: _angular_core.Signal<string[]>;
|
|
465
|
+
constructor();
|
|
466
|
+
protected onValueChange(v: string | null): void;
|
|
467
|
+
protected onFilterChange(filter: string): void;
|
|
468
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataPointPickerComponent, never>;
|
|
469
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DataPointPickerComponent, "mm-data-point-picker", never, { "entity": { "alias": "entity"; "required": false; "isSignal": true; }; "entityRtId": { "alias": "entityRtId"; "required": false; "isSignal": true; }; "entityCkTypeId": { "alias": "entityCkTypeId"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "filterChange": "filterChange"; }, never, never, true, never>;
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
/**
|
|
473
|
+
* Resolves the list of runtime data points available on a source entity.
|
|
474
|
+
* Single source of truth shared by the runtime-browser detail pane (which
|
|
475
|
+
* already has the entity loaded) and the mapping-edit dialog (which only
|
|
476
|
+
* has rtId + ckTypeId and has to fetch). Picks the right path automatically:
|
|
477
|
+
*
|
|
478
|
+
* - {@link extractFromEntity} is sync — pass a pre-loaded entity.
|
|
479
|
+
* - {@link load} is async — fetches via `getRuntimeEntityById` then extracts.
|
|
480
|
+
*
|
|
481
|
+
* Both paths share the same pure helper so a Loxone Control's state list
|
|
482
|
+
* (`tempActual`, `co2`, …) is reported identically regardless of who's asking.
|
|
483
|
+
*/
|
|
484
|
+
declare class DataPointResolverService {
|
|
485
|
+
private readonly getRuntimeEntityByIdGQL;
|
|
486
|
+
extractFromEntity(entity: {
|
|
487
|
+
attributes?: {
|
|
488
|
+
items?: readonly (AttributeItemLike | null | undefined)[] | null;
|
|
489
|
+
} | null;
|
|
490
|
+
} | null | undefined): string[];
|
|
491
|
+
load(rtId: string, ckTypeId: string): Promise<string[]>;
|
|
492
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataPointResolverService, never>;
|
|
493
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<DataPointResolverService>;
|
|
374
494
|
}
|
|
375
495
|
|
|
376
496
|
declare abstract class OctoGraphQlDataSource<TDto> extends DataSourceTyped<TDto | null> {
|
|
@@ -423,8 +543,8 @@ declare class EntityIdInfoComponent {
|
|
|
423
543
|
protected get copyOptions(): CopyOption[];
|
|
424
544
|
private truncateValue;
|
|
425
545
|
protected copyToClipboard(option: CopyOption): Promise<void>;
|
|
426
|
-
static ɵfac:
|
|
427
|
-
static ɵcmp:
|
|
546
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntityIdInfoComponent, never>;
|
|
547
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EntityIdInfoComponent, "mm-entity-id-info", never, { "rtId": { "alias": "rtId"; "required": true; }; "rtCkTypeId": { "alias": "rtCkTypeId"; "required": true; }; "ckTypeId": { "alias": "ckTypeId"; "required": false; }; }, {}, never, never, true, never>;
|
|
428
548
|
}
|
|
429
549
|
|
|
430
550
|
type BrowserItem$3 = RtEntityDto | CkModelDto | CkTypeDto | {
|
|
@@ -512,8 +632,8 @@ declare class RuntimeBrowserDataSource extends OctoGraphQlHierarchyDataSource<Br
|
|
|
512
632
|
private checkBasicConstructionKitAvailable;
|
|
513
633
|
private fetchCkModels;
|
|
514
634
|
private fetchCkTypes;
|
|
515
|
-
static ɵfac:
|
|
516
|
-
static ɵprov:
|
|
635
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RuntimeBrowserDataSource, never>;
|
|
636
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<RuntimeBrowserDataSource>;
|
|
517
637
|
}
|
|
518
638
|
|
|
519
639
|
interface EntitySelectorDialogData {
|
|
@@ -528,7 +648,7 @@ interface EntitySelectorDialogResult {
|
|
|
528
648
|
}
|
|
529
649
|
|
|
530
650
|
declare class EntitySelectorDialogComponent {
|
|
531
|
-
private readonly
|
|
651
|
+
private readonly windowRef;
|
|
532
652
|
readonly treeDataSource: RuntimeBrowserDataSource;
|
|
533
653
|
data: EntitySelectorDialogData;
|
|
534
654
|
selectedEntity: {
|
|
@@ -539,8 +659,8 @@ declare class EntitySelectorDialogComponent {
|
|
|
539
659
|
onNodeSelected(node: TreeItemData): void;
|
|
540
660
|
onConfirm(): void;
|
|
541
661
|
onCancel(): void;
|
|
542
|
-
static ɵfac:
|
|
543
|
-
static ɵcmp:
|
|
662
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntitySelectorDialogComponent, never>;
|
|
663
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EntitySelectorDialogComponent, "mm-entity-selector-dialog", never, {}, {}, never, never, true, never>;
|
|
544
664
|
}
|
|
545
665
|
|
|
546
666
|
interface EntitySelectorResult {
|
|
@@ -548,10 +668,17 @@ interface EntitySelectorResult {
|
|
|
548
668
|
entity?: EntitySelectorDialogResult;
|
|
549
669
|
}
|
|
550
670
|
declare class EntitySelectorDialogService {
|
|
551
|
-
private readonly
|
|
671
|
+
private readonly windowService;
|
|
672
|
+
private readonly windowStateService;
|
|
673
|
+
/**
|
|
674
|
+
* Opens the entity selector as a Kendo Window so it stacks correctly above
|
|
675
|
+
* other Kendo Windows (e.g. the Mapping-Edit dialog calls this from its
|
|
676
|
+
* own Window — Kendo Dialogs would land underneath because Window and
|
|
677
|
+
* Dialog use different z-index ranges).
|
|
678
|
+
*/
|
|
552
679
|
openEntitySelector(data?: EntitySelectorDialogData): Promise<EntitySelectorResult>;
|
|
553
|
-
static ɵfac:
|
|
554
|
-
static ɵprov:
|
|
680
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntitySelectorDialogService, never>;
|
|
681
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<EntitySelectorDialogService>;
|
|
555
682
|
}
|
|
556
683
|
|
|
557
684
|
/**
|
|
@@ -687,8 +814,8 @@ declare class FieldFilterEditorComponent implements OnChanges {
|
|
|
687
814
|
private isArrayValue;
|
|
688
815
|
private extractArrayContent;
|
|
689
816
|
private parseAndCleanArrayValues;
|
|
690
|
-
static ɵfac:
|
|
691
|
-
static ɵcmp:
|
|
817
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FieldFilterEditorComponent, never>;
|
|
818
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FieldFilterEditorComponent, "mm-field-filter-editor", never, { "availableAttributes": { "alias": "availableAttributes"; "required": false; }; "ckTypeId": { "alias": "ckTypeId"; "required": false; }; "hideNavigationProperties": { "alias": "hideNavigationProperties"; "required": false; }; "attributePaths": { "alias": "attributePaths"; "required": false; }; "enableVariables": { "alias": "enableVariables"; "required": false; }; "availableVariables": { "alias": "availableVariables"; "required": false; }; "filters": { "alias": "filters"; "required": false; }; }, { "filtersChange": "filtersChange"; }, never, never, true, never>;
|
|
692
819
|
}
|
|
693
820
|
|
|
694
821
|
/**
|
|
@@ -707,8 +834,8 @@ declare class FieldFilterEditorComponent implements OnChanges {
|
|
|
707
834
|
*/
|
|
708
835
|
declare class OctoLoaderComponent {
|
|
709
836
|
size: 'small' | 'medium';
|
|
710
|
-
static ɵfac:
|
|
711
|
-
static ɵcmp:
|
|
837
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<OctoLoaderComponent, never>;
|
|
838
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<OctoLoaderComponent, "mm-octo-loader", never, { "size": { "alias": "size"; "required": false; }; }, {}, never, never, true, never>;
|
|
712
839
|
}
|
|
713
840
|
|
|
714
841
|
declare enum AttributeValueTypeDto {
|
|
@@ -904,8 +1031,8 @@ declare class PropertyConverterService {
|
|
|
904
1031
|
* Check if string is ISO date format
|
|
905
1032
|
*/
|
|
906
1033
|
private isIsoDateString;
|
|
907
|
-
static ɵfac:
|
|
908
|
-
static ɵprov:
|
|
1034
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PropertyConverterService, never>;
|
|
1035
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<PropertyConverterService>;
|
|
909
1036
|
}
|
|
910
1037
|
|
|
911
1038
|
/**
|
|
@@ -963,8 +1090,8 @@ declare class PropertyGridComponent implements OnInit, OnChanges {
|
|
|
963
1090
|
* Handle binary download request from property value display
|
|
964
1091
|
*/
|
|
965
1092
|
onBinaryDownload(event: BinaryDownloadEvent): void;
|
|
966
|
-
static ɵfac:
|
|
967
|
-
static ɵcmp:
|
|
1093
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PropertyGridComponent, never>;
|
|
1094
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PropertyGridComponent, "mm-property-grid", never, { "data": { "alias": "data"; "required": false; }; "config": { "alias": "config"; "required": false; }; "showTypeColumn": { "alias": "showTypeColumn"; "required": false; }; }, { "propertyChange": "propertyChange"; "saveRequested": "saveRequested"; "binaryDownload": "binaryDownload"; }, never, never, true, never>;
|
|
968
1095
|
}
|
|
969
1096
|
|
|
970
1097
|
/**
|
|
@@ -1080,8 +1207,8 @@ declare class PropertyValueDisplayComponent implements OnInit, OnChanges {
|
|
|
1080
1207
|
* Handle download button click
|
|
1081
1208
|
*/
|
|
1082
1209
|
onDownload(): void;
|
|
1083
|
-
static ɵfac:
|
|
1084
|
-
static ɵcmp:
|
|
1210
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PropertyValueDisplayComponent, never>;
|
|
1211
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PropertyValueDisplayComponent, "mm-property-value-display", never, { "value": { "alias": "value"; "required": false; }; "type": { "alias": "type"; "required": false; }; "displayMode": { "alias": "displayMode"; "required": false; }; "attributeName": { "alias": "attributeName"; "required": false; }; }, { "binaryDownload": "binaryDownload"; }, never, never, true, never>;
|
|
1085
1212
|
}
|
|
1086
1213
|
|
|
1087
1214
|
interface RecordProperty {
|
|
@@ -1168,8 +1295,8 @@ declare class RecordDetailDialogComponent implements OnInit {
|
|
|
1168
1295
|
private getObjectProperties;
|
|
1169
1296
|
private inferType;
|
|
1170
1297
|
private formatAttributeName;
|
|
1171
|
-
static ɵfac:
|
|
1172
|
-
static ɵcmp:
|
|
1298
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RecordDetailDialogComponent, never>;
|
|
1299
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<RecordDetailDialogComponent, "mm-record-detail-dialog", never, { "attributeName": { "alias": "attributeName"; "required": false; }; "value": { "alias": "value"; "required": false; }; "type": { "alias": "type"; "required": false; }; }, { "closed": "closed"; }, never, never, true, never>;
|
|
1173
1300
|
}
|
|
1174
1301
|
|
|
1175
1302
|
/**
|
|
@@ -1272,8 +1399,8 @@ declare class EntityDetailComponent implements OnInit, OnDestroy {
|
|
|
1272
1399
|
onSelectSourceAttribute(mapping: DataPointMappingItem): Promise<void>;
|
|
1273
1400
|
onSelectTargetAttribute(mapping: DataPointMappingItem): Promise<void>;
|
|
1274
1401
|
onSaveAllMappings(): Promise<void>;
|
|
1275
|
-
static ɵfac:
|
|
1276
|
-
static ɵcmp:
|
|
1402
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntityDetailComponent, never>;
|
|
1403
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EntityDetailComponent, "mm-entity-detail", never, {}, {}, never, never, true, never>;
|
|
1277
1404
|
}
|
|
1278
1405
|
|
|
1279
1406
|
declare const botService: {
|
|
@@ -1614,8 +1741,8 @@ declare class CkTypeEntitiesDataSourceDirective extends OctoGraphQlDataSource<Rt
|
|
|
1614
1741
|
constructor();
|
|
1615
1742
|
setRtCkTypeId(ckTypeId: string): void;
|
|
1616
1743
|
fetchData(queryOptions: FetchDataOptions): Observable<FetchResultTyped<RtEntityDto> | null>;
|
|
1617
|
-
static ɵfac:
|
|
1618
|
-
static ɵdir:
|
|
1744
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CkTypeEntitiesDataSourceDirective, never>;
|
|
1745
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<CkTypeEntitiesDataSourceDirective, "[mmCkTypeEntitiesDataSource]", ["mmCkTypeEntitiesDataSource"], {}, {}, never, never, true, never>;
|
|
1619
1746
|
}
|
|
1620
1747
|
|
|
1621
1748
|
/**
|
|
@@ -1629,8 +1756,8 @@ declare class TypeHelperService {
|
|
|
1629
1756
|
* @returns True for runtime entity, false otherwise.
|
|
1630
1757
|
*/
|
|
1631
1758
|
isRuntimeEntity(item: unknown): item is RtEntityDto;
|
|
1632
|
-
static ɵfac:
|
|
1633
|
-
static ɵprov:
|
|
1759
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TypeHelperService, never>;
|
|
1760
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<TypeHelperService>;
|
|
1634
1761
|
}
|
|
1635
1762
|
|
|
1636
1763
|
interface CreateInput {
|
|
@@ -1724,7 +1851,6 @@ declare class RuntimeBrowserDetailsComponent implements OnChanges, AfterViewInit
|
|
|
1724
1851
|
private readonly entitySelectorDialog;
|
|
1725
1852
|
private readonly attributeSelectorDialog;
|
|
1726
1853
|
dataMappings: DataPointMappingItem[];
|
|
1727
|
-
sourceDataPoints: string[];
|
|
1728
1854
|
/**
|
|
1729
1855
|
* Optional expression validator function passed through to EntityDetailViewComponent → DataMappingListComponent.
|
|
1730
1856
|
*/
|
|
@@ -1831,11 +1957,6 @@ declare class RuntimeBrowserDetailsComponent implements OnChanges, AfterViewInit
|
|
|
1831
1957
|
* Tracks in-memory changes to a mapping (no server save yet).
|
|
1832
1958
|
*/
|
|
1833
1959
|
onMappingChanged(_mapping: DataPointMappingItem): void;
|
|
1834
|
-
/**
|
|
1835
|
-
* Extracts DataPoint names from the entity's States/DataPoints RecordArray attribute.
|
|
1836
|
-
* Provides them as dropdown options for sourceAttributePath selection.
|
|
1837
|
-
*/
|
|
1838
|
-
private extractSourceDataPoints;
|
|
1839
1960
|
/**
|
|
1840
1961
|
* Opens attribute selector for the source entity's attributes.
|
|
1841
1962
|
*/
|
|
@@ -1848,8 +1969,8 @@ declare class RuntimeBrowserDetailsComponent implements OnChanges, AfterViewInit
|
|
|
1848
1969
|
* Saves all DataPointMapping entities (attributes + MapsTo associations).
|
|
1849
1970
|
*/
|
|
1850
1971
|
onSaveAllMappings(): Promise<void>;
|
|
1851
|
-
static ɵfac:
|
|
1852
|
-
static ɵcmp:
|
|
1972
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RuntimeBrowserDetailsComponent, never>;
|
|
1973
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<RuntimeBrowserDetailsComponent, "mm-runtime-browser-details", never, { "selectedItem": { "alias": "selectedItem"; "required": false; }; "showDataMapping": { "alias": "showDataMapping"; "required": false; }; "messages": { "alias": "messages"; "required": false; }; "expressionValidator": { "alias": "expressionValidator"; "required": false; }; }, { "entitySaved": "entitySaved"; }, never, never, true, never>;
|
|
1853
1974
|
}
|
|
1854
1975
|
|
|
1855
1976
|
type BrowserItem$1 = RtEntityDto | CkModelDto | CkTypeDto | {
|
|
@@ -1870,14 +1991,14 @@ declare class RuntimeBrowserComponent implements AfterViewInit {
|
|
|
1870
1991
|
private isSelectedItemAnRtEntity;
|
|
1871
1992
|
private isLoading;
|
|
1872
1993
|
private isEditing;
|
|
1873
|
-
messages:
|
|
1874
|
-
showDataMapping:
|
|
1994
|
+
messages: _angular_core.InputSignal<Partial<RuntimeBrowserMessages>>;
|
|
1995
|
+
showDataMapping: _angular_core.InputSignal<boolean>;
|
|
1875
1996
|
/**
|
|
1876
1997
|
* Optional expression validator function for DataPointMapping expressions.
|
|
1877
1998
|
* Passed through to RuntimeBrowserDetailsComponent → EntityDetailViewComponent → DataMappingListComponent.
|
|
1878
1999
|
*/
|
|
1879
|
-
expressionValidator:
|
|
1880
|
-
protected readonly resolvedMessages:
|
|
2000
|
+
expressionValidator: _angular_core.InputSignal<ExpressionValidatorFn | undefined>;
|
|
2001
|
+
protected readonly resolvedMessages: _angular_core.Signal<RuntimeBrowserMessages>;
|
|
1881
2002
|
treeDetail: BaseTreeDetailComponent<BrowserItem$1>;
|
|
1882
2003
|
detailsPanel: RuntimeBrowserDetailsComponent;
|
|
1883
2004
|
protected get leftToolbarActions(): CommandItem[];
|
|
@@ -1964,8 +2085,8 @@ declare class RuntimeBrowserComponent implements AfterViewInit {
|
|
|
1964
2085
|
protected refreshTreeAfterCreation(parentInfo?: {
|
|
1965
2086
|
parentRtId?: string;
|
|
1966
2087
|
}): Promise<void>;
|
|
1967
|
-
static ɵfac:
|
|
1968
|
-
static ɵcmp:
|
|
2088
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RuntimeBrowserComponent, never>;
|
|
2089
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<RuntimeBrowserComponent, "mm-runtime-browser", never, { "messages": { "alias": "messages"; "required": false; "isSignal": true; }; "showDataMapping": { "alias": "showDataMapping"; "required": false; "isSignal": true; }; "expressionValidator": { "alias": "expressionValidator"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1969
2090
|
}
|
|
1970
2091
|
|
|
1971
2092
|
/**
|
|
@@ -1973,8 +2094,8 @@ declare class RuntimeBrowserComponent implements AfterViewInit {
|
|
|
1973
2094
|
* Use as the parent component when mounting runtime browser routes as children.
|
|
1974
2095
|
*/
|
|
1975
2096
|
declare class RuntimeBrowserOutletComponent {
|
|
1976
|
-
static ɵfac:
|
|
1977
|
-
static ɵcmp:
|
|
2097
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RuntimeBrowserOutletComponent, never>;
|
|
2098
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<RuntimeBrowserOutletComponent, "mm-runtime-browser-outlet", never, {}, {}, never, never, true, never>;
|
|
1978
2099
|
}
|
|
1979
2100
|
|
|
1980
2101
|
/**
|
|
@@ -1984,8 +2105,8 @@ declare class RuntimeBrowserOutletComponent {
|
|
|
1984
2105
|
declare class RuntimeBrowserPageComponent {
|
|
1985
2106
|
private readonly injectedMessages;
|
|
1986
2107
|
protected readonly messages: RuntimeBrowserMessages;
|
|
1987
|
-
static ɵfac:
|
|
1988
|
-
static ɵcmp:
|
|
2108
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RuntimeBrowserPageComponent, never>;
|
|
2109
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<RuntimeBrowserPageComponent, "mm-runtime-browser-page", never, {}, {}, never, never, true, never>;
|
|
1989
2110
|
}
|
|
1990
2111
|
|
|
1991
2112
|
/** Options for creating runtime browser routes. */
|
|
@@ -2078,8 +2199,8 @@ declare class AssociationValidationService {
|
|
|
2078
2199
|
private toLowerCamelCase;
|
|
2079
2200
|
/** Clears the role cache (e.g. on tenant switch). */
|
|
2080
2201
|
clearCache(): void;
|
|
2081
|
-
static ɵfac:
|
|
2082
|
-
static ɵprov:
|
|
2202
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AssociationValidationService, never>;
|
|
2203
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AssociationValidationService>;
|
|
2083
2204
|
}
|
|
2084
2205
|
|
|
2085
2206
|
type BrowserItem = RtEntityDto | CkModelDto | CkTypeDto | {
|
|
@@ -2122,8 +2243,8 @@ declare class RuntimeBrowserStateService {
|
|
|
2122
2243
|
* Get unique identifier for a tree item
|
|
2123
2244
|
*/
|
|
2124
2245
|
private getItemId;
|
|
2125
|
-
static ɵfac:
|
|
2126
|
-
static ɵprov:
|
|
2246
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RuntimeBrowserStateService, never>;
|
|
2247
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<RuntimeBrowserStateService>;
|
|
2127
2248
|
}
|
|
2128
2249
|
|
|
2129
2250
|
/**
|
|
@@ -2182,16 +2303,16 @@ declare class DataMappingOverviewComponent implements OnInit {
|
|
|
2182
2303
|
rtId: string;
|
|
2183
2304
|
ckTypeId: string;
|
|
2184
2305
|
}>;
|
|
2185
|
-
readonly mappings:
|
|
2186
|
-
readonly loading:
|
|
2187
|
-
readonly selectedMapping:
|
|
2306
|
+
readonly mappings: _angular_core.WritableSignal<DataPointMappingOverviewItem[]>;
|
|
2307
|
+
readonly loading: _angular_core.WritableSignal<boolean>;
|
|
2308
|
+
readonly selectedMapping: _angular_core.WritableSignal<DataPointMappingOverviewItem | null>;
|
|
2188
2309
|
pageSize: number;
|
|
2189
2310
|
skip: number;
|
|
2190
|
-
readonly gridData:
|
|
2311
|
+
readonly gridData: _angular_core.Signal<{
|
|
2191
2312
|
data: DataPointMappingOverviewItem[];
|
|
2192
2313
|
total: number;
|
|
2193
2314
|
}>;
|
|
2194
|
-
readonly summary:
|
|
2315
|
+
readonly summary: _angular_core.Signal<MappingOverviewSummary>;
|
|
2195
2316
|
protected readonly refreshIcon: _progress_kendo_svg_icons.SVGIcon;
|
|
2196
2317
|
protected readonly checkIcon: _progress_kendo_svg_icons.SVGIcon;
|
|
2197
2318
|
protected readonly warnIcon: _progress_kendo_svg_icons.SVGIcon;
|
|
@@ -2210,8 +2331,544 @@ declare class DataMappingOverviewComponent implements OnInit {
|
|
|
2210
2331
|
* Updates items in-place and triggers signal update.
|
|
2211
2332
|
*/
|
|
2212
2333
|
private resolveEntityNames;
|
|
2213
|
-
static ɵfac:
|
|
2214
|
-
static ɵcmp:
|
|
2334
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataMappingOverviewComponent, never>;
|
|
2335
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DataMappingOverviewComponent, "mm-data-mapping-overview", never, {}, { "navigateToEntity": "navigateToEntity"; }, never, never, true, never>;
|
|
2336
|
+
}
|
|
2337
|
+
|
|
2338
|
+
/**
|
|
2339
|
+
* Generic configuration that drives the Mapping Coverage Tree.
|
|
2340
|
+
*
|
|
2341
|
+
* The tree displays any entity hierarchy reachable via a single association role
|
|
2342
|
+
* (defaults to `System/ParentChild` between `Basic/Tree` and `Basic/TreeNode`).
|
|
2343
|
+
* Mapping counts are computed from the number of inbound associations with
|
|
2344
|
+
* `mappingRoleId` (defaults to `System.Communication/MapsTo`).
|
|
2345
|
+
*/
|
|
2346
|
+
interface MappingCoverageTreeConfig {
|
|
2347
|
+
/** CK type of root entities the user can pick (e.g. `Basic/Tree`). */
|
|
2348
|
+
rootCkTypeId: string;
|
|
2349
|
+
/** CK type of child nodes in the hierarchy (e.g. `Basic/TreeNode`). */
|
|
2350
|
+
childCkTypeId: string;
|
|
2351
|
+
/** Association role connecting parent to child (e.g. `System/ParentChild`). Inbound direction is used. */
|
|
2352
|
+
childRoleId: string;
|
|
2353
|
+
/** Association role connecting target entities to their DataPointMappings. */
|
|
2354
|
+
mappingRoleId: string;
|
|
2355
|
+
/** Association role connecting DataPointMappings back to their source entities. */
|
|
2356
|
+
mappingSourceRoleId: string;
|
|
2357
|
+
/** CK type of the mapping entity (e.g. `System.Communication/DataPointMapping`). */
|
|
2358
|
+
mappingCkTypeId: string;
|
|
2359
|
+
/** Outbound role name used when creating a new mapping with a MapsTo association. */
|
|
2360
|
+
mappingTargetOutboundRoleName: string;
|
|
2361
|
+
/** Outbound role name used when creating/updating a new mapping with a MapsFrom association. */
|
|
2362
|
+
mappingSourceOutboundRoleName: string;
|
|
2363
|
+
/** CK type of the pipeline used to drive validation (defaults to System.Communication/Pipeline). */
|
|
2364
|
+
validationPipelineCkTypeId: string;
|
|
2365
|
+
/** CK type of pipeline executions whose OutputData carries the validation report. */
|
|
2366
|
+
validationExecutionCkTypeId: string;
|
|
2367
|
+
/** Association role linking a PipelineExecution to its Pipeline (defaults to System.Communication/ExecutedPipeline). */
|
|
2368
|
+
validationExecutesRoleId: string;
|
|
2369
|
+
/**
|
|
2370
|
+
* CK types whose entities can act as mapping sources. Used by the Orphan
|
|
2371
|
+
* Sources tab to list unmapped candidates (e.g. `Loxone/Control`,
|
|
2372
|
+
* `MQTT/Topic`, `OpcUa/Node`). Empty list hides the tab.
|
|
2373
|
+
*/
|
|
2374
|
+
sourceCandidateCkTypeIds: string[];
|
|
2375
|
+
}
|
|
2376
|
+
/**
|
|
2377
|
+
* Default configuration: Basic/Tree + Basic/TreeNode driven by System/ParentChild,
|
|
2378
|
+
* mappings via System.Communication/MapsTo.
|
|
2379
|
+
*/
|
|
2380
|
+
declare const DEFAULT_MAPPING_COVERAGE_TREE_CONFIG: MappingCoverageTreeConfig;
|
|
2381
|
+
/**
|
|
2382
|
+
* Reference to a runtime entity used in the coverage tree (root, node, source, target).
|
|
2383
|
+
*/
|
|
2384
|
+
interface CoverageEntityRef {
|
|
2385
|
+
rtId: string;
|
|
2386
|
+
ckTypeId: string;
|
|
2387
|
+
name: string;
|
|
2388
|
+
description?: string;
|
|
2389
|
+
}
|
|
2390
|
+
/**
|
|
2391
|
+
* Coverage validation status calculated by the ValidateDataPointCoverage pipeline
|
|
2392
|
+
* node. Maps to the JSON `status` field in its emitted report.
|
|
2393
|
+
*/
|
|
2394
|
+
type CoverageNodeStatus = 'ok' | 'warning' | 'error' | 'info';
|
|
2395
|
+
/**
|
|
2396
|
+
* Per-node detail loaded from the latest validation execution's OutputData. Held
|
|
2397
|
+
* in a `Map<rtId, …>` by the component and consulted by the data source when
|
|
2398
|
+
* decorating tree items.
|
|
2399
|
+
*/
|
|
2400
|
+
interface CoverageValidationDetail {
|
|
2401
|
+
status: CoverageNodeStatus;
|
|
2402
|
+
/**
|
|
2403
|
+
* Worst status found in the node's subtree (including the node itself).
|
|
2404
|
+
* Used to colour the tree icon so an `info` node with red descendants is
|
|
2405
|
+
* still visually flagged as red — the user sees where to drill in without
|
|
2406
|
+
* expanding every branch.
|
|
2407
|
+
*/
|
|
2408
|
+
subtreeStatus: CoverageNodeStatus;
|
|
2409
|
+
/** Aggregate counts of each status in the subtree (including this node). */
|
|
2410
|
+
subtreeCounts: {
|
|
2411
|
+
ok: number;
|
|
2412
|
+
warning: number;
|
|
2413
|
+
error: number;
|
|
2414
|
+
info: number;
|
|
2415
|
+
};
|
|
2416
|
+
required: string[];
|
|
2417
|
+
recommended: string[];
|
|
2418
|
+
present: string[];
|
|
2419
|
+
missingRequired: string[];
|
|
2420
|
+
missingRecommended: string[];
|
|
2421
|
+
}
|
|
2422
|
+
/**
|
|
2423
|
+
* Payload attached to every tree item in the coverage tree. Stored as the `item`
|
|
2424
|
+
* of a `TreeItemDataTyped<CoverageNodePayload>` so the host can render and react.
|
|
2425
|
+
*/
|
|
2426
|
+
interface CoverageNodePayload extends CoverageEntityRef {
|
|
2427
|
+
/** Number of inbound mappings (DataPointMappings pointing to this node). */
|
|
2428
|
+
mappingCount: number;
|
|
2429
|
+
/** Whether this node has structural children (drives expand chevron). */
|
|
2430
|
+
hasChildren: boolean;
|
|
2431
|
+
/** True for the synthetic root entity (the picked Tree). */
|
|
2432
|
+
isRoot: boolean;
|
|
2433
|
+
/** Validation status from the latest validation report (when loaded). */
|
|
2434
|
+
validationStatus: CoverageNodeStatus | null;
|
|
2435
|
+
/** Full validation detail (missing/present lists) when loaded. */
|
|
2436
|
+
validationDetail: CoverageValidationDetail | null;
|
|
2437
|
+
}
|
|
2438
|
+
type CoverageTreeItem = TreeItemDataTyped<CoverageNodePayload>;
|
|
2439
|
+
/**
|
|
2440
|
+
* Flat view-model for a DataPointMapping shown in the detail panel.
|
|
2441
|
+
*/
|
|
2442
|
+
interface CoverageMappingItem {
|
|
2443
|
+
rtId: string;
|
|
2444
|
+
ckTypeId: string;
|
|
2445
|
+
name: string;
|
|
2446
|
+
enabled: boolean;
|
|
2447
|
+
sourceAttributePath: string;
|
|
2448
|
+
targetAttributePath: string;
|
|
2449
|
+
mappingExpression: string;
|
|
2450
|
+
sourceRtId?: string;
|
|
2451
|
+
sourceCkTypeId?: string;
|
|
2452
|
+
sourceName?: string;
|
|
2453
|
+
}
|
|
2454
|
+
interface CoverageTreeIcons {
|
|
2455
|
+
rootIcon: SVGIcon;
|
|
2456
|
+
nodeIcon: SVGIcon;
|
|
2457
|
+
nodeWithMappingsIcon?: SVGIcon;
|
|
2458
|
+
}
|
|
2459
|
+
/**
|
|
2460
|
+
* Counts emitted by the ValidateDataPointCoverage pipeline node in the
|
|
2461
|
+
* <c>summary</c> object of its JSON report. Mirrors the C# `SummaryCounters`
|
|
2462
|
+
* record so the UI can render the totals without recomputing.
|
|
2463
|
+
*/
|
|
2464
|
+
interface CoverageReportSummary {
|
|
2465
|
+
ok: number;
|
|
2466
|
+
warning: number;
|
|
2467
|
+
error: number;
|
|
2468
|
+
info: number;
|
|
2469
|
+
total: number;
|
|
2470
|
+
}
|
|
2471
|
+
/**
|
|
2472
|
+
* One step in the parent chain of an OrphanCandidate (closest parent first).
|
|
2473
|
+
* Loaded via 3 nested `targets(direction: OUTBOUND, role: $childRoleId)` hops
|
|
2474
|
+
* in `getOrphanCandidates.graphql` so the orphan tab can show where each
|
|
2475
|
+
* source sits in the structural tree without a follow-up query.
|
|
2476
|
+
*/
|
|
2477
|
+
interface OrphanCandidateParent {
|
|
2478
|
+
rtId: string;
|
|
2479
|
+
ckTypeId: string;
|
|
2480
|
+
name: string;
|
|
2481
|
+
}
|
|
2482
|
+
/**
|
|
2483
|
+
* Source candidate listed in the Orphan Sources tab. Carries the inbound
|
|
2484
|
+
* MapsFrom mapping count so the tab can split the catalogue into mapped vs
|
|
2485
|
+
* unmapped entries without an extra round trip.
|
|
2486
|
+
*/
|
|
2487
|
+
interface OrphanCandidate {
|
|
2488
|
+
rtId: string;
|
|
2489
|
+
ckTypeId: string;
|
|
2490
|
+
name: string;
|
|
2491
|
+
description?: string;
|
|
2492
|
+
mappingCount: number;
|
|
2493
|
+
/**
|
|
2494
|
+
* Ancestors via the configured `childRoleId` (default System/ParentChild),
|
|
2495
|
+
* ordered from immediate parent (index 0) to root-most known ancestor.
|
|
2496
|
+
* Empty when the source has no parents reachable within 3 hops or when
|
|
2497
|
+
* the parent walk failed (e.g. `childCkTypeId` did not match the parent's
|
|
2498
|
+
* concrete type). The UI displays this as a breadcrumb under the entity
|
|
2499
|
+
* name; absence is silent (no parent → no breadcrumb).
|
|
2500
|
+
*/
|
|
2501
|
+
parentPath: OrphanCandidateParent[];
|
|
2502
|
+
}
|
|
2503
|
+
|
|
2504
|
+
/**
|
|
2505
|
+
* Generic hierarchy data source for the Mapping Coverage Tree.
|
|
2506
|
+
*
|
|
2507
|
+
* Configure with `setRoot(...)` and `setConfig(...)` before passing to a
|
|
2508
|
+
* `<mm-tree-view>` instance. The data source resolves child nodes through the
|
|
2509
|
+
* configured `childRoleId` / `childCkTypeId` and decorates each item with the
|
|
2510
|
+
* number of inbound mappings (via `mappingRoleId`).
|
|
2511
|
+
*/
|
|
2512
|
+
declare class MappingCoverageTreeDataSource extends HierarchyDataSourceBase<CoverageNodePayload> {
|
|
2513
|
+
private readonly getCoverageNodeGQL;
|
|
2514
|
+
private _root;
|
|
2515
|
+
private _config;
|
|
2516
|
+
private _rootMappingCount;
|
|
2517
|
+
private _validationMap;
|
|
2518
|
+
setRoot(root: CoverageEntityRef | null): void;
|
|
2519
|
+
setConfig(config: MappingCoverageTreeConfig): void;
|
|
2520
|
+
/**
|
|
2521
|
+
* Inject the validation report (rtId → status detail) loaded from the
|
|
2522
|
+
* latest PipelineExecution. Pass an empty map to clear the overlay.
|
|
2523
|
+
* The caller must trigger a tree refresh after updating the map.
|
|
2524
|
+
*/
|
|
2525
|
+
setValidationMap(map: ReadonlyMap<string, CoverageValidationDetail>): void;
|
|
2526
|
+
getValidationMap(): ReadonlyMap<string, CoverageValidationDetail>;
|
|
2527
|
+
getRoot(): CoverageEntityRef | null;
|
|
2528
|
+
getRootMappingCount(): number;
|
|
2529
|
+
fetchRootNodes(): Promise<CoverageTreeItem[]>;
|
|
2530
|
+
fetchChildren(item: TreeItemDataTyped<CoverageNodePayload>): Promise<CoverageTreeItem[]>;
|
|
2531
|
+
/**
|
|
2532
|
+
* Reloads the coverage payload (mapping count / hasChildren flag) for a single
|
|
2533
|
+
* entity. Used after CRUD operations on mappings so the badge updates without
|
|
2534
|
+
* collapsing the surrounding subtree.
|
|
2535
|
+
*/
|
|
2536
|
+
refreshNode(rtId: string, ckTypeId: string): Promise<CoverageNodePayload | null>;
|
|
2537
|
+
private buildItem;
|
|
2538
|
+
private queryNode;
|
|
2539
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MappingCoverageTreeDataSource, never>;
|
|
2540
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<MappingCoverageTreeDataSource>;
|
|
2541
|
+
}
|
|
2542
|
+
|
|
2543
|
+
interface RootCandidate {
|
|
2544
|
+
rtId: string;
|
|
2545
|
+
ckTypeId: string;
|
|
2546
|
+
name: string;
|
|
2547
|
+
description: string;
|
|
2548
|
+
}
|
|
2549
|
+
interface PipelineCandidate {
|
|
2550
|
+
rtId: string;
|
|
2551
|
+
ckTypeId: string;
|
|
2552
|
+
name: string;
|
|
2553
|
+
}
|
|
2554
|
+
/**
|
|
2555
|
+
* A bucket of orphan candidates sharing the same immediate parent. Produced
|
|
2556
|
+
* by `orphanGroupedList` when the "group by parent" toggle is on.
|
|
2557
|
+
*/
|
|
2558
|
+
interface OrphanGroup {
|
|
2559
|
+
/** Stable key — parent's CkTypeId@RtId, or `__no_parent__` for the catch-all bucket. */
|
|
2560
|
+
key: string;
|
|
2561
|
+
/** Human-readable label rendered as the section heading. */
|
|
2562
|
+
label: string;
|
|
2563
|
+
items: OrphanCandidate[];
|
|
2564
|
+
}
|
|
2565
|
+
/**
|
|
2566
|
+
* Master-detail component that visualises mapping coverage on a generic entity
|
|
2567
|
+
* hierarchy (defaults: Basic/Tree + Basic/TreeNode, mappings via
|
|
2568
|
+
* System.Communication/MapsTo). The user picks a root, browses the hierarchy on
|
|
2569
|
+
* the left and inspects / edits DataPointMappings on the right.
|
|
2570
|
+
*
|
|
2571
|
+
* Phase 1: tree + counts + read-only mapping list + CRUD (add new mapping,
|
|
2572
|
+
* relink source via {@link EntitySelectorDialogService}, delete).
|
|
2573
|
+
*/
|
|
2574
|
+
declare class MappingCoverageTreeComponent implements OnInit {
|
|
2575
|
+
private readonly entitySelector;
|
|
2576
|
+
private readonly editDialog;
|
|
2577
|
+
private readonly confirmation;
|
|
2578
|
+
private readonly communicationService;
|
|
2579
|
+
private readonly getEntitiesByCkType;
|
|
2580
|
+
private readonly getNodeMappingsGQL;
|
|
2581
|
+
private readonly getRuntimeEntityByIdGQL;
|
|
2582
|
+
private readonly getLatestValidationGQL;
|
|
2583
|
+
private readonly getOrphanCandidatesGQL;
|
|
2584
|
+
private readonly createEntitiesGQL;
|
|
2585
|
+
private readonly deleteEntitiesGQL;
|
|
2586
|
+
private readonly updateEntitiesGQL;
|
|
2587
|
+
protected readonly dataSource: MappingCoverageTreeDataSource;
|
|
2588
|
+
protected treeView: TreeComponent;
|
|
2589
|
+
/** Optional override for non-default hierarchies / mapping roles. */
|
|
2590
|
+
config: MappingCoverageTreeConfig;
|
|
2591
|
+
/** Pre-select a root on first show (e.g. via route param). */
|
|
2592
|
+
initialRoot: CoverageEntityRef | null;
|
|
2593
|
+
/**
|
|
2594
|
+
* Current tenant ID. Required for the "Run Validation" pipeline trigger
|
|
2595
|
+
* which calls a tenant-scoped REST endpoint on the Communication Controller.
|
|
2596
|
+
* When not provided, the Run button is hidden and the user has to trigger
|
|
2597
|
+
* the pipeline externally.
|
|
2598
|
+
*/
|
|
2599
|
+
tenantId: string | null;
|
|
2600
|
+
readonly entitySelected: EventEmitter<CoverageEntityRef>;
|
|
2601
|
+
protected readonly icons: {
|
|
2602
|
+
refresh: _progress_kendo_svg_icons.SVGIcon;
|
|
2603
|
+
folderOpen: _progress_kendo_svg_icons.SVGIcon;
|
|
2604
|
+
plus: _progress_kendo_svg_icons.SVGIcon;
|
|
2605
|
+
pencil: _progress_kendo_svg_icons.SVGIcon;
|
|
2606
|
+
trash: _progress_kendo_svg_icons.SVGIcon;
|
|
2607
|
+
link: _progress_kendo_svg_icons.SVGIcon;
|
|
2608
|
+
};
|
|
2609
|
+
protected readonly rootCandidates: _angular_core.WritableSignal<RootCandidate[]>;
|
|
2610
|
+
protected readonly selectedRoot: _angular_core.WritableSignal<RootCandidate | null>;
|
|
2611
|
+
protected readonly selectedNode: _angular_core.WritableSignal<CoverageNodePayload | null>;
|
|
2612
|
+
protected readonly mappings: _angular_core.WritableSignal<CoverageMappingItem[]>;
|
|
2613
|
+
protected readonly mappingsLoading: _angular_core.WritableSignal<boolean>;
|
|
2614
|
+
protected readonly mappingsError: _angular_core.WritableSignal<string | null>;
|
|
2615
|
+
protected readonly validationPipelines: _angular_core.WritableSignal<PipelineCandidate[]>;
|
|
2616
|
+
protected readonly selectedPipeline: _angular_core.WritableSignal<PipelineCandidate | null>;
|
|
2617
|
+
protected readonly validationSummary: _angular_core.WritableSignal<CoverageReportSummary | null>;
|
|
2618
|
+
protected readonly validationExecutedAt: _angular_core.WritableSignal<string | null>;
|
|
2619
|
+
protected readonly validationLoading: _angular_core.WritableSignal<boolean>;
|
|
2620
|
+
protected readonly validationError: _angular_core.WritableSignal<string | null>;
|
|
2621
|
+
protected readonly validationRunning: _angular_core.WritableSignal<boolean>;
|
|
2622
|
+
/** Active tab: 'coverage' shows the tree, 'orphans' shows the unmapped sources. */
|
|
2623
|
+
protected readonly activeTab: _angular_core.WritableSignal<"coverage" | "orphans">;
|
|
2624
|
+
/** Source CK type currently inspected for orphans. */
|
|
2625
|
+
protected readonly orphanCkType: _angular_core.WritableSignal<string | null>;
|
|
2626
|
+
protected readonly orphanCandidates: _angular_core.WritableSignal<OrphanCandidate[]>;
|
|
2627
|
+
protected readonly orphanLoading: _angular_core.WritableSignal<boolean>;
|
|
2628
|
+
protected readonly orphanError: _angular_core.WritableSignal<string | null>;
|
|
2629
|
+
protected readonly orphanHideMapped: _angular_core.WritableSignal<boolean>;
|
|
2630
|
+
protected readonly orphanFilteredList: _angular_core.Signal<OrphanCandidate[]>;
|
|
2631
|
+
protected readonly orphanStats: _angular_core.Signal<{
|
|
2632
|
+
total: number;
|
|
2633
|
+
unmapped: number;
|
|
2634
|
+
mapped: number;
|
|
2635
|
+
}>;
|
|
2636
|
+
/**
|
|
2637
|
+
* Which parent CK type to group by, or null for a flat list. We let the user
|
|
2638
|
+
* pick the type instead of just "immediate parent" because Loxone-style trees
|
|
2639
|
+
* include intermediate buckets (Loxone/Category) where each parent rtId is
|
|
2640
|
+
* unique per room — grouping by Category produces dozens of look-alike
|
|
2641
|
+
* sections ("Stellantrieb" appears N times, once per room). The user almost
|
|
2642
|
+
* always wants Loxone/Room or whichever level genuinely partitions the data,
|
|
2643
|
+
* so we expose all parent types seen in the loaded data and let them choose.
|
|
2644
|
+
*/
|
|
2645
|
+
protected readonly orphanGroupParentType: _angular_core.WritableSignal<string | null>;
|
|
2646
|
+
/**
|
|
2647
|
+
* Distinct parent CK type ids found in the loaded candidates, sorted so the
|
|
2648
|
+
* deepest type (root-most ancestor) comes first. For Loxone-Controls this is
|
|
2649
|
+
* Loxone/Room first, then Loxone/Category — usually the deeper one is also
|
|
2650
|
+
* the more meaningful grouping context.
|
|
2651
|
+
*/
|
|
2652
|
+
protected readonly orphanAvailableParentTypes: _angular_core.Signal<string[]>;
|
|
2653
|
+
protected readonly orphanGroupedList: _angular_core.Signal<OrphanGroup[]>;
|
|
2654
|
+
protected readonly summaryLine: _angular_core.Signal<string | null>;
|
|
2655
|
+
ngOnInit(): Promise<void>;
|
|
2656
|
+
protected onPipelineSelectChange(rtId: string): void;
|
|
2657
|
+
protected refreshValidation(): Promise<void>;
|
|
2658
|
+
protected clearValidation(): void;
|
|
2659
|
+
protected selectTab(tab: 'coverage' | 'orphans'): void;
|
|
2660
|
+
protected onOrphanCkTypeChange(ckTypeId: string): void;
|
|
2661
|
+
protected refreshOrphans(): Promise<void>;
|
|
2662
|
+
protected toggleOrphanHideMapped(): void;
|
|
2663
|
+
protected onOrphanGroupParentTypeChange(value: string): void;
|
|
2664
|
+
/**
|
|
2665
|
+
* Returns the parent chain ordered for breadcrumb display: root-most ancestor
|
|
2666
|
+
* first, immediate parent last. `parentPath` itself is stored immediate-first
|
|
2667
|
+
* (so `parentPath[0]` cheaply reports the grouping key), but humans read
|
|
2668
|
+
* breadcrumbs from outside in.
|
|
2669
|
+
*/
|
|
2670
|
+
protected breadcrumbFor(item: OrphanCandidate): OrphanCandidateParent[];
|
|
2671
|
+
/**
|
|
2672
|
+
* Fetches all entities of the selected source CK type and tags each with
|
|
2673
|
+
* its inbound MapsFrom DataPointMapping count. The view filters the list
|
|
2674
|
+
* down to mappingCount === 0 by default, but the user can flip the toggle
|
|
2675
|
+
* to see all candidates (mapped + unmapped) for verification.
|
|
2676
|
+
*/
|
|
2677
|
+
private loadOrphanCandidates;
|
|
2678
|
+
/**
|
|
2679
|
+
* Opens the mapping editor pre-populated with the orphan as source and lets
|
|
2680
|
+
* the user pick the target + attribute paths. Creates the DataPointMapping
|
|
2681
|
+
* entity atomically on save (both MapsFrom and MapsTo wired up in one
|
|
2682
|
+
* mutation). Cancel leaves nothing behind.
|
|
2683
|
+
*/
|
|
2684
|
+
protected createMappingFromOrphan(orphan: OrphanCandidate): Promise<void>;
|
|
2685
|
+
protected trackOrphanByRtId(_index: number, item: OrphanCandidate): string;
|
|
2686
|
+
/**
|
|
2687
|
+
* Triggers the selected validation pipeline on the Communication Controller
|
|
2688
|
+
* and, when it completes, automatically refreshes the coverage report so the
|
|
2689
|
+
* tree colour-codes update. Requires {@link tenantId} to be set.
|
|
2690
|
+
*
|
|
2691
|
+
* Polling strategy: every 1.5 s, fetch the latest execution metadata for the
|
|
2692
|
+
* pipeline. When `dateTime` differs from the snapshot taken before the run,
|
|
2693
|
+
* we know a new execution finished — refresh and stop. Aborts after 60 s.
|
|
2694
|
+
*/
|
|
2695
|
+
protected runValidation(): Promise<void>;
|
|
2696
|
+
private refreshTreeOverlay;
|
|
2697
|
+
private loadValidationPipelines;
|
|
2698
|
+
protected refreshRoots(): Promise<void>;
|
|
2699
|
+
protected pickRoot(): Promise<void>;
|
|
2700
|
+
protected selectRoot(root: RootCandidate): Promise<void>;
|
|
2701
|
+
protected onRootSelectChange(rtId: string): void;
|
|
2702
|
+
protected onNodeSelected(item: TreeItemData): Promise<void>;
|
|
2703
|
+
protected refreshSelected(): Promise<void>;
|
|
2704
|
+
protected addMapping(): Promise<void>;
|
|
2705
|
+
/**
|
|
2706
|
+
* Opens the focused edit dialog for one mapping and, on save, persists
|
|
2707
|
+
* attribute and (if changed) MapsFrom- / MapsTo-association updates in a
|
|
2708
|
+
* single UpdateRuntimeEntities mutation.
|
|
2709
|
+
*/
|
|
2710
|
+
protected editMapping(mapping: CoverageMappingItem): Promise<void>;
|
|
2711
|
+
private saveEditedMapping;
|
|
2712
|
+
protected deleteMapping(mapping: CoverageMappingItem): Promise<void>;
|
|
2713
|
+
protected trackByRtId(_index: number, item: {
|
|
2714
|
+
rtId: string;
|
|
2715
|
+
}): string;
|
|
2716
|
+
private loadRootCandidates;
|
|
2717
|
+
private loadMappingsForSelected;
|
|
2718
|
+
/**
|
|
2719
|
+
* Resolves source entity names by issuing a parallel `getRuntimeEntityById`
|
|
2720
|
+
* per unique (rtId, ckTypeId) pair. Updates the mappings signal in-place so
|
|
2721
|
+
* the detail panel re-renders with names. Failures are silent — the row
|
|
2722
|
+
* still falls back to displaying the source rtId.
|
|
2723
|
+
*/
|
|
2724
|
+
private resolveSourceNames;
|
|
2725
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MappingCoverageTreeComponent, never>;
|
|
2726
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MappingCoverageTreeComponent, "mm-mapping-coverage-tree", never, { "config": { "alias": "config"; "required": false; }; "initialRoot": { "alias": "initialRoot"; "required": false; }; "tenantId": { "alias": "tenantId"; "required": false; }; }, { "entitySelected": "entitySelected"; }, never, never, true, never>;
|
|
2727
|
+
}
|
|
2728
|
+
|
|
2729
|
+
/**
|
|
2730
|
+
* Editable view-model for one DataPointMapping. The fields mirror the CK
|
|
2731
|
+
* attributes (Name, Enabled, SourceAttributePath, MappingExpression,
|
|
2732
|
+
* TargetAttributePath) plus both the MapsFrom source-entity reference and
|
|
2733
|
+
* the MapsTo target-entity reference. The `_originalSource*` and
|
|
2734
|
+
* `_originalTarget*` snapshots let the caller decide whether the
|
|
2735
|
+
* corresponding association needs an update on save.
|
|
2736
|
+
*
|
|
2737
|
+
* `rtId === ''` denotes a not-yet-persisted mapping (orphan-tab "Map…"
|
|
2738
|
+
* flow). The caller branches on this to choose CreateEntities vs.
|
|
2739
|
+
* UpdateRuntimeEntities.
|
|
2740
|
+
*/
|
|
2741
|
+
interface MappingEditValue {
|
|
2742
|
+
rtId: string;
|
|
2743
|
+
ckTypeId: string;
|
|
2744
|
+
name: string;
|
|
2745
|
+
enabled: boolean;
|
|
2746
|
+
sourceRtId?: string;
|
|
2747
|
+
sourceCkTypeId?: string;
|
|
2748
|
+
sourceName?: string;
|
|
2749
|
+
sourceAttributePath: string;
|
|
2750
|
+
mappingExpression: string;
|
|
2751
|
+
/** MapsTo target entity reference. Empty for new mappings until the user picks one. */
|
|
2752
|
+
targetRtId?: string;
|
|
2753
|
+
targetCkTypeId?: string;
|
|
2754
|
+
targetName?: string;
|
|
2755
|
+
targetAttributePath: string;
|
|
2756
|
+
/** Source rtId at dialog-open time — used to detect MapsFrom changes. */
|
|
2757
|
+
_originalSourceRtId?: string;
|
|
2758
|
+
_originalSourceCkTypeId?: string;
|
|
2759
|
+
/** Target rtId at dialog-open time — used to detect MapsTo changes. */
|
|
2760
|
+
_originalTargetRtId?: string;
|
|
2761
|
+
_originalTargetCkTypeId?: string;
|
|
2762
|
+
}
|
|
2763
|
+
interface MappingEditDialogData {
|
|
2764
|
+
mapping: MappingEditValue;
|
|
2765
|
+
title?: string;
|
|
2766
|
+
/**
|
|
2767
|
+
* Default CK type id for the Target Attribute Path autocomplete when the
|
|
2768
|
+
* mapping has no target picked yet. Once the user picks a target entity,
|
|
2769
|
+
* the model's `targetCkTypeId` takes over.
|
|
2770
|
+
* @deprecated Set `mapping.targetCkTypeId` instead; this is kept for
|
|
2771
|
+
* backward compatibility with the original (target-fixed) usage where
|
|
2772
|
+
* the dialog was always opened for a specific tree node.
|
|
2773
|
+
*/
|
|
2774
|
+
targetCkTypeId?: string;
|
|
2775
|
+
}
|
|
2776
|
+
type MappingEditDialogResult = {
|
|
2777
|
+
confirmed: true;
|
|
2778
|
+
mapping: MappingEditValue;
|
|
2779
|
+
} | {
|
|
2780
|
+
confirmed: false;
|
|
2781
|
+
};
|
|
2782
|
+
/**
|
|
2783
|
+
* Focused single-mapping editor dialog. The host renders this via
|
|
2784
|
+
* `MappingEditDialogService.open(...)` and awaits the resulting promise:
|
|
2785
|
+
* `confirmed=true` means the user saved (caller persists), `confirmed=false`
|
|
2786
|
+
* means cancel.
|
|
2787
|
+
*/
|
|
2788
|
+
declare class MappingEditDialogComponent {
|
|
2789
|
+
private readonly windowRef;
|
|
2790
|
+
private readonly entitySelector;
|
|
2791
|
+
private readonly attributeSelectorDialog;
|
|
2792
|
+
private readonly attributeService;
|
|
2793
|
+
protected readonly icons: {
|
|
2794
|
+
link: _progress_kendo_svg_icons.SVGIcon;
|
|
2795
|
+
browse: _progress_kendo_svg_icons.SVGIcon;
|
|
2796
|
+
regenerate: _progress_kendo_svg_icons.SVGIcon;
|
|
2797
|
+
};
|
|
2798
|
+
/** Set by the service before the dialog content is shown. */
|
|
2799
|
+
data: MappingEditDialogData;
|
|
2800
|
+
/** Reactive working copy — the form binds to this. */
|
|
2801
|
+
protected readonly model: _angular_core.WritableSignal<MappingEditValue>;
|
|
2802
|
+
/** Target CK-type attribute catalogue. The source side is now handled by
|
|
2803
|
+
* the dedicated {@link DataPointPickerComponent}, which loads runtime state
|
|
2804
|
+
* names from the entity itself instead of CK schema attributes. */
|
|
2805
|
+
private readonly targetAttributes;
|
|
2806
|
+
private readonly targetFilter;
|
|
2807
|
+
protected readonly targetAttributesLoading: _angular_core.WritableSignal<boolean>;
|
|
2808
|
+
protected readonly targetAttributeList: _angular_core.Signal<AttributeItem[]>;
|
|
2809
|
+
/**
|
|
2810
|
+
* Effective target CK type id — prefers the value picked by the user via
|
|
2811
|
+
* {@link pickTarget}; falls back to the optional {@link MappingEditDialogData.targetCkTypeId}
|
|
2812
|
+
* legacy default. Drives the Target Attribute Path autocomplete dropdown.
|
|
2813
|
+
*/
|
|
2814
|
+
protected readonly effectiveTargetCkTypeId: _angular_core.Signal<string | undefined>;
|
|
2815
|
+
initialise(data: MappingEditDialogData): void;
|
|
2816
|
+
/**
|
|
2817
|
+
* Enabled when at least one labelled side of the mapping is filled enough
|
|
2818
|
+
* to produce a meaningful name. We require *some* identifying info on each
|
|
2819
|
+
* end so the generated name isn't just "(unset) → (unset)".
|
|
2820
|
+
*/
|
|
2821
|
+
protected canGenerateName(): boolean;
|
|
2822
|
+
/**
|
|
2823
|
+
* Writes a deterministic, human-readable name into the mapping based on the
|
|
2824
|
+
* current source/target selection. Format:
|
|
2825
|
+
* `{sourceName} {sourcePath} → {targetName} {targetPath}`
|
|
2826
|
+
* Falls back to rtId fragments when names are missing. The user can still
|
|
2827
|
+
* edit the result freely — this just gives them a sensible starting point
|
|
2828
|
+
* so they don't have to invent a name from scratch when finishing an
|
|
2829
|
+
* orphan-tab mapping.
|
|
2830
|
+
*/
|
|
2831
|
+
protected generateName(): void;
|
|
2832
|
+
protected isValid(): boolean;
|
|
2833
|
+
protected pickSource(): Promise<void>;
|
|
2834
|
+
protected pickTarget(): Promise<void>;
|
|
2835
|
+
protected onSourceAttributePathChange(value: string): void;
|
|
2836
|
+
protected onTargetAttributePathChange(value: string | null): void;
|
|
2837
|
+
protected onTargetAttributeFilter(filter: string): void;
|
|
2838
|
+
protected onSave(): void;
|
|
2839
|
+
protected onCancel(): void;
|
|
2840
|
+
/**
|
|
2841
|
+
* Fetches the CK-schema attribute catalogue for the target side and stores
|
|
2842
|
+
* it for the target combobox dropdown. Navigation properties are excluded —
|
|
2843
|
+
* they drown out the direct attributes; the browse button below opens the
|
|
2844
|
+
* full {@link AttributeSelectorDialog} for users who need a deep path.
|
|
2845
|
+
*
|
|
2846
|
+
* (The source side now uses {@link DataPointPickerComponent}, which queries
|
|
2847
|
+
* the runtime entity's States RecordArray directly — runtime data points,
|
|
2848
|
+
* not CK schema attributes, are what the runtime engine matches against.)
|
|
2849
|
+
*/
|
|
2850
|
+
private loadTargetAttributes;
|
|
2851
|
+
protected browseTargetAttribute(): Promise<void>;
|
|
2852
|
+
private emptyValue;
|
|
2853
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MappingEditDialogComponent, never>;
|
|
2854
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MappingEditDialogComponent, "mm-mapping-edit-dialog", never, {}, {}, never, never, true, never>;
|
|
2855
|
+
}
|
|
2856
|
+
|
|
2857
|
+
declare class MappingEditDialogService {
|
|
2858
|
+
private readonly windowService;
|
|
2859
|
+
private readonly windowStateService;
|
|
2860
|
+
/**
|
|
2861
|
+
* Opens the focused mapping editor as a resizable Kendo Window and returns
|
|
2862
|
+
* the user's choice. The window's size is persisted across sessions via
|
|
2863
|
+
* `WindowStateService` (same pattern as the AttributeSelectorDialog and the
|
|
2864
|
+
* EntitySelectDialog).
|
|
2865
|
+
*
|
|
2866
|
+
* The host is responsible for persisting changes when `confirmed=true` — the
|
|
2867
|
+
* dialog itself only mutates a local copy.
|
|
2868
|
+
*/
|
|
2869
|
+
open(data: MappingEditDialogData): Promise<MappingEditDialogResult>;
|
|
2870
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MappingEditDialogService, never>;
|
|
2871
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<MappingEditDialogService>;
|
|
2215
2872
|
}
|
|
2216
2873
|
|
|
2217
2874
|
/**
|
|
@@ -2264,11 +2921,11 @@ declare class RuntimeEntityVariableDialogComponent {
|
|
|
2264
2921
|
protected readonly trashIcon: _progress_kendo_svg_icons.SVGIcon;
|
|
2265
2922
|
/** Data passed to the dialog (set by service) */
|
|
2266
2923
|
data: RuntimeEntityVariableDialogData;
|
|
2267
|
-
readonly selectedCkType:
|
|
2268
|
-
readonly selectedEntity:
|
|
2269
|
-
readonly variableMappings:
|
|
2270
|
-
readonly entityDataSource:
|
|
2271
|
-
readonly entityDialogDataSource:
|
|
2924
|
+
readonly selectedCkType: _angular_core.WritableSignal<CkTypeSelectorItem | null>;
|
|
2925
|
+
readonly selectedEntity: _angular_core.WritableSignal<RuntimeEntityItem | null>;
|
|
2926
|
+
readonly variableMappings: _angular_core.WritableSignal<RuntimeEntityVariableMapping[]>;
|
|
2927
|
+
readonly entityDataSource: _angular_core.Signal<RuntimeEntitySelectDataSource | null>;
|
|
2928
|
+
readonly entityDialogDataSource: _angular_core.Signal<RuntimeEntityDialogDataSource | null>;
|
|
2272
2929
|
private readonly VALID_NAME_REGEX;
|
|
2273
2930
|
onCkTypeSelected(ckType: CkTypeSelectorItem): void;
|
|
2274
2931
|
onCkTypeCleared(): void;
|
|
@@ -2284,8 +2941,8 @@ declare class RuntimeEntityVariableDialogComponent {
|
|
|
2284
2941
|
private addAttributeMappings;
|
|
2285
2942
|
private attributePathToVariableName;
|
|
2286
2943
|
private isDuplicateName;
|
|
2287
|
-
static ɵfac:
|
|
2288
|
-
static ɵcmp:
|
|
2944
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RuntimeEntityVariableDialogComponent, never>;
|
|
2945
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<RuntimeEntityVariableDialogComponent, "mm-runtime-entity-variable-dialog", never, {}, {}, never, never, true, never>;
|
|
2289
2946
|
}
|
|
2290
2947
|
|
|
2291
2948
|
interface RuntimeEntityVariableResult {
|
|
@@ -2301,8 +2958,8 @@ declare class RuntimeEntityVariableDialogService {
|
|
|
2301
2958
|
* @returns Promise with confirmation status and dialog result
|
|
2302
2959
|
*/
|
|
2303
2960
|
openRuntimeEntityVariableDialog(data?: RuntimeEntityVariableDialogData): Promise<RuntimeEntityVariableResult>;
|
|
2304
|
-
static ɵfac:
|
|
2305
|
-
static ɵprov:
|
|
2961
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RuntimeEntityVariableDialogService, never>;
|
|
2962
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<RuntimeEntityVariableDialogService>;
|
|
2306
2963
|
}
|
|
2307
2964
|
|
|
2308
2965
|
declare class TenantSwitcherComponent {
|
|
@@ -2322,8 +2979,8 @@ declare class TenantSwitcherComponent {
|
|
|
2322
2979
|
onSelectTenant(tenantId: string): void;
|
|
2323
2980
|
onRefresh(event: MouseEvent): void;
|
|
2324
2981
|
private contains;
|
|
2325
|
-
static ɵfac:
|
|
2326
|
-
static ɵcmp:
|
|
2982
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TenantSwitcherComponent, never>;
|
|
2983
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TenantSwitcherComponent, "mm-tenant-switcher", never, { "currentTenantId": { "alias": "currentTenantId"; "required": false; }; "allowedTenants": { "alias": "allowedTenants"; "required": false; }; "isDenied": { "alias": "isDenied"; "required": false; }; }, { "tenantSelected": "tenantSelected"; "refreshRequested": "refreshRequested"; }, never, never, true, never>;
|
|
2327
2984
|
}
|
|
2328
2985
|
|
|
2329
2986
|
/**
|
|
@@ -2332,5 +2989,5 @@ declare class TenantSwitcherComponent {
|
|
|
2332
2989
|
*/
|
|
2333
2990
|
declare function provideOctoUi(): EnvironmentProviders;
|
|
2334
2991
|
|
|
2335
|
-
export { AssociationValidationService, AttributeSelectorDialogComponent, AttributeSelectorDialogService, AttributeSortSelectorDialogComponent, AttributeSortSelectorDialogService, AttributeValueTypeDto, CkTypeSelectorDialogComponent, CkTypeSelectorDialogService, CkTypeSelectorInputComponent, DEFAULT_RUNTIME_BROWSER_MESSAGES, DataMappingOverviewComponent, DefaultPropertyCategory, EntityDetailComponent, EntityIdInfoComponent, EntitySelectorDialogComponent, EntitySelectorDialogService, FieldFilterEditorComponent, OctoGraphQlDataSource, OctoGraphQlHierarchyDataSource, OctoLoaderComponent, PropertyConverterService, PropertyDisplayMode, PropertyGridComponent, PropertyValueDisplayComponent, RUNTIME_BROWSER_MESSAGES, RecordDetailDialogComponent, RtEntityIdHelper, RuntimeBrowserComponent, RuntimeBrowserOutletComponent, RuntimeBrowserPageComponent, RuntimeBrowserStateService, RuntimeEntityVariableDialogComponent, RuntimeEntityVariableDialogService, TenantSwitcherComponent, account_tree, add, analytics, app_registration, article, botService, category, chat, checklist, code, component_exchange, computer, createRuntimeBrowserRoutes, customer, dashboard, event_list, graphic_eq, group, identityService, insert_link, manage_accounts, more_time, notifications, page_info, pages, person_search, playlist_add_check, pool, power, provideOctoUi, publicIcon, query_builder, schedule_send, settings, sort, storage, swagger, swagger_asset, swagger_bot, swagger_communication, swagger_identity, team_dashboard, tenancy, text_snippet, travel_explore, user_diagnostics, webhook, work };
|
|
2336
|
-
export type { AttributeSelectorDialogData, AttributeSelectorDialogResult, AttributeSelectorResult, AttributeSortItem, AttributeSortSelectorDialogData, AttributeSortSelectorDialogResult, AttributeSortSelectorResult, BinaryDownloadEvent, BrowserItem, BrowserState, CkAssociationRole, CkTypeSelectorDialogData, CkTypeSelectorDialogResult, CkTypeSelectorResult, DataPointMappingItem, DataPointMappingOverviewItem, EntitySelectorDialogData, EntitySelectorDialogResult, EntitySelectorResult, ExpressionValidationResult, ExpressionValidatorFn, FieldFilterItem, FilterVariable, MappingOverviewSummary, MoveValidationResult, PropertyChangeEvent, PropertyGridConfig, PropertyGridItem, RtEntityId, RuntimeBrowserMessages, RuntimeBrowserRouteOptions, RuntimeEntityVariableDialogData, RuntimeEntityVariableDialogResult, RuntimeEntityVariableMapping, RuntimeEntityVariableResult, SortOption, ValidationMessage };
|
|
2992
|
+
export { AssociationValidationService, AttributeSelectorDialogComponent, AttributeSelectorDialogService, AttributeSortSelectorDialogComponent, AttributeSortSelectorDialogService, AttributeValueTypeDto, CkTypeSelectorDialogComponent, CkTypeSelectorDialogService, CkTypeSelectorInputComponent, DEFAULT_DATA_POINT, DEFAULT_MAPPING_COVERAGE_TREE_CONFIG, DEFAULT_RUNTIME_BROWSER_MESSAGES, DataMappingOverviewComponent, DataPointPickerComponent, DataPointResolverService, DefaultPropertyCategory, EntityDetailComponent, EntityIdInfoComponent, EntitySelectorDialogComponent, EntitySelectorDialogService, FieldFilterEditorComponent, MappingCoverageTreeComponent, MappingCoverageTreeDataSource, MappingEditDialogComponent, MappingEditDialogService, OctoGraphQlDataSource, OctoGraphQlHierarchyDataSource, OctoLoaderComponent, PropertyConverterService, PropertyDisplayMode, PropertyGridComponent, PropertyValueDisplayComponent, RUNTIME_BROWSER_MESSAGES, RecordDetailDialogComponent, RtEntityIdHelper, RuntimeBrowserComponent, RuntimeBrowserOutletComponent, RuntimeBrowserPageComponent, RuntimeBrowserStateService, RuntimeEntityVariableDialogComponent, RuntimeEntityVariableDialogService, TenantSwitcherComponent, account_tree, add, analytics, app_registration, article, botService, category, chat, checklist, code, component_exchange, computer, createRuntimeBrowserRoutes, customer, dashboard, event_list, extractDataPointNames, graphic_eq, group, identityService, insert_link, manage_accounts, more_time, notifications, page_info, pages, person_search, playlist_add_check, pool, power, provideOctoUi, publicIcon, query_builder, schedule_send, settings, sort, storage, swagger, swagger_asset, swagger_bot, swagger_communication, swagger_identity, team_dashboard, tenancy, text_snippet, travel_explore, user_diagnostics, webhook, work };
|
|
2993
|
+
export type { AttributeItemLike, AttributeSelectorDialogData, AttributeSelectorDialogResult, AttributeSelectorResult, AttributeSortItem, AttributeSortSelectorDialogData, AttributeSortSelectorDialogResult, AttributeSortSelectorResult, BinaryDownloadEvent, BrowserItem, BrowserState, CkAssociationRole, CkTypeSelectorDialogData, CkTypeSelectorDialogResult, CkTypeSelectorResult, CoverageEntityRef, CoverageMappingItem, CoverageNodePayload, CoverageTreeIcons, CoverageTreeItem, DataPointMappingItem, DataPointMappingOverviewItem, EntitySelectorDialogData, EntitySelectorDialogResult, EntitySelectorResult, ExpressionValidationResult, ExpressionValidatorFn, FieldFilterItem, FilterVariable, MappingCoverageTreeConfig, MappingEditDialogData, MappingEditDialogResult, MappingEditValue, MappingOverviewSummary, MoveValidationResult, PropertyChangeEvent, PropertyGridConfig, PropertyGridItem, RtEntityId, RuntimeBrowserMessages, RuntimeBrowserRouteOptions, RuntimeEntityVariableDialogData, RuntimeEntityVariableDialogResult, RuntimeEntityVariableMapping, RuntimeEntityVariableResult, SortOption, ValidationMessage };
|