@meshmakers/octo-ui 3.3.980 → 3.3.1010
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-branding-settings.mjs +2 -2
- package/fesm2022/meshmakers-octo-ui-branding-settings.mjs.map +1 -1
- package/fesm2022/meshmakers-octo-ui.mjs +2942 -407
- package/fesm2022/meshmakers-octo-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/types/meshmakers-octo-ui.d.ts +1019 -193
|
@@ -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, ListViewMessages, 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,16 +235,52 @@ 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
|
+
interface CkTypeSelectorDialogMessages {
|
|
243
|
+
modelFilterLabel: string;
|
|
244
|
+
modelFilterPlaceholder: string;
|
|
245
|
+
typeSearchLabel: string;
|
|
246
|
+
typeSearchPlaceholder: string;
|
|
247
|
+
clearFiltersTitle: string;
|
|
248
|
+
columnTypeTitle: string;
|
|
249
|
+
columnBaseTypeTitle: string;
|
|
250
|
+
columnDescriptionTitle: string;
|
|
251
|
+
badgeAbstract: string;
|
|
252
|
+
badgeFinal: string;
|
|
253
|
+
selectedLabel: string;
|
|
254
|
+
cancel: string;
|
|
255
|
+
ok: string;
|
|
256
|
+
defaultDialogTitle: string;
|
|
257
|
+
pagerItemsPerPage: string;
|
|
258
|
+
pagerOf: string;
|
|
259
|
+
pagerItems: string;
|
|
260
|
+
pagerPage: string;
|
|
261
|
+
pagerFirstPage: string;
|
|
262
|
+
pagerLastPage: string;
|
|
263
|
+
pagerPreviousPage: string;
|
|
264
|
+
pagerNextPage: string;
|
|
265
|
+
noRecords: string;
|
|
266
|
+
/** Tooltip on the dialog window close (X) button. */
|
|
267
|
+
closeTitle?: string;
|
|
268
|
+
/** Tooltip on the dialog window minimize button. */
|
|
269
|
+
minimizeTitle?: string;
|
|
270
|
+
/** Tooltip on the dialog window maximize button. */
|
|
271
|
+
maximizeTitle?: string;
|
|
272
|
+
/** Tooltip on the dialog window restore button. */
|
|
273
|
+
restoreTitle?: string;
|
|
274
|
+
}
|
|
275
|
+
declare const DEFAULT_CK_TYPE_SELECTOR_DIALOG_MESSAGES: CkTypeSelectorDialogMessages;
|
|
276
|
+
|
|
242
277
|
interface CkTypeSelectorDialogData {
|
|
243
278
|
selectedCkTypeId?: string;
|
|
244
279
|
ckModelIds?: string[];
|
|
245
280
|
dialogTitle?: string;
|
|
246
281
|
allowAbstract?: boolean;
|
|
247
282
|
derivedFromRtCkTypeId?: string;
|
|
283
|
+
messages?: Partial<CkTypeSelectorDialogMessages>;
|
|
248
284
|
}
|
|
249
285
|
interface CkTypeSelectorDialogResult {
|
|
250
286
|
selectedCkType: CkTypeSelectorItem$1;
|
|
@@ -258,6 +294,8 @@ declare class CkTypeSelectorDialogComponent implements OnInit, OnDestroy {
|
|
|
258
294
|
protected readonly filterClearIcon: _progress_kendo_svg_icons.SVGIcon;
|
|
259
295
|
dialogTitle: string;
|
|
260
296
|
allowAbstract: boolean;
|
|
297
|
+
_messages: CkTypeSelectorDialogMessages;
|
|
298
|
+
set messages(value: Partial<CkTypeSelectorDialogMessages> | undefined);
|
|
261
299
|
searchText: string;
|
|
262
300
|
selectedModel: string | null;
|
|
263
301
|
availableModels: string[];
|
|
@@ -288,8 +326,8 @@ declare class CkTypeSelectorDialogComponent implements OnInit, OnDestroy {
|
|
|
288
326
|
onCellClick(event: CellClickEvent): void;
|
|
289
327
|
onCancel(): void;
|
|
290
328
|
onConfirm(): void;
|
|
291
|
-
static ɵfac:
|
|
292
|
-
static ɵcmp:
|
|
329
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CkTypeSelectorDialogComponent, never>;
|
|
330
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<CkTypeSelectorDialogComponent, "mm-ck-type-selector-dialog", never, { "messages": { "alias": "messages"; "required": false; }; }, {}, never, never, true, never>;
|
|
293
331
|
}
|
|
294
332
|
|
|
295
333
|
interface CkTypeSelectorResult {
|
|
@@ -299,22 +337,30 @@ interface CkTypeSelectorResult {
|
|
|
299
337
|
declare class CkTypeSelectorDialogService {
|
|
300
338
|
private readonly windowService;
|
|
301
339
|
private readonly windowStateService;
|
|
302
|
-
|
|
303
|
-
* Opens the CkType selector dialog
|
|
304
|
-
* @param options Dialog options
|
|
305
|
-
* @returns Promise that resolves with the result containing selected CkType and confirmation status
|
|
306
|
-
*/
|
|
340
|
+
defaultMessages: Partial<CkTypeSelectorDialogMessages> | undefined;
|
|
307
341
|
openCkTypeSelector(options?: {
|
|
308
342
|
selectedCkTypeId?: string;
|
|
309
343
|
ckModelIds?: string[];
|
|
310
344
|
dialogTitle?: string;
|
|
311
345
|
allowAbstract?: boolean;
|
|
312
346
|
derivedFromRtCkTypeId?: string;
|
|
347
|
+
messages?: Partial<CkTypeSelectorDialogMessages>;
|
|
313
348
|
}): Promise<CkTypeSelectorResult>;
|
|
314
|
-
static ɵfac:
|
|
315
|
-
static ɵprov:
|
|
349
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CkTypeSelectorDialogService, never>;
|
|
350
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<CkTypeSelectorDialogService>;
|
|
316
351
|
}
|
|
317
352
|
|
|
353
|
+
interface CkTypeSelectorInputMessages {
|
|
354
|
+
placeholder: string;
|
|
355
|
+
/** `{0}` is replaced with the current search value. */
|
|
356
|
+
noTypesFound: string;
|
|
357
|
+
/** `{0}` is replaced with the minimum search length. */
|
|
358
|
+
minCharactersHint: string;
|
|
359
|
+
advancedSearchLabel: string;
|
|
360
|
+
defaultDialogTitle: string;
|
|
361
|
+
}
|
|
362
|
+
declare const DEFAULT_CK_TYPE_SELECTOR_INPUT_MESSAGES: CkTypeSelectorInputMessages;
|
|
363
|
+
|
|
318
364
|
declare class CkTypeSelectorInputComponent implements OnInit, OnDestroy, ControlValueAccessor, Validator {
|
|
319
365
|
autocomplete: AutoCompleteComponent;
|
|
320
366
|
placeholder: string;
|
|
@@ -326,6 +372,11 @@ declare class CkTypeSelectorInputComponent implements OnInit, OnDestroy, Control
|
|
|
326
372
|
dialogTitle: string;
|
|
327
373
|
advancedSearchLabel: string;
|
|
328
374
|
derivedFromRtCkTypeId?: string;
|
|
375
|
+
_messages: CkTypeSelectorInputMessages;
|
|
376
|
+
set messages(value: Partial<CkTypeSelectorInputMessages> | undefined);
|
|
377
|
+
dialogMessages?: Partial<CkTypeSelectorDialogMessages>;
|
|
378
|
+
protected formatNoTypesFound(searchValue: string): string;
|
|
379
|
+
protected formatMinCharactersHint(minLength: number): string;
|
|
329
380
|
private _disabled;
|
|
330
381
|
get disabled(): boolean;
|
|
331
382
|
set disabled(value: boolean);
|
|
@@ -369,8 +420,128 @@ declare class CkTypeSelectorInputComponent implements OnInit, OnDestroy, Control
|
|
|
369
420
|
private injectPopupStyles;
|
|
370
421
|
private selectCkType;
|
|
371
422
|
openDialog(event?: Event): Promise<void>;
|
|
372
|
-
static ɵfac:
|
|
373
|
-
static ɵcmp:
|
|
423
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CkTypeSelectorInputComponent, never>;
|
|
424
|
+
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; }; "messages": { "alias": "messages"; "required": false; }; "dialogMessages": { "alias": "dialogMessages"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "required": { "alias": "required"; "required": false; }; }, { "ckTypeSelected": "ckTypeSelected"; "ckTypeCleared": "ckTypeCleared"; }, never, never, true, never>;
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
/**
|
|
428
|
+
* Pure helpers for extracting runtime data point names from a CK entity. Kept
|
|
429
|
+
* Angular-free so unit tests can exercise the record-shape branches without
|
|
430
|
+
* spinning up a TestBed, and so the same logic can be called both from the
|
|
431
|
+
* service (which fetches the entity via GraphQL) and from any caller that
|
|
432
|
+
* already has the entity in hand (e.g. the runtime-browser detail pane).
|
|
433
|
+
*
|
|
434
|
+
* A "data point" here is one entry of an entity's `States` or `DataPoints`
|
|
435
|
+
* RecordArray attribute — for Loxone Controls these are the state names
|
|
436
|
+
* (`tempActual`, `co2`, `humidityActual`, …); for adapters that don't model
|
|
437
|
+
* sub-states the array is absent and the only available data point is the
|
|
438
|
+
* default `currentValue` constant the runtime adapter exposes for
|
|
439
|
+
* single-state polling.
|
|
440
|
+
*/
|
|
441
|
+
/**
|
|
442
|
+
* Default data-point name for entities without a States/DataPoints RecordArray.
|
|
443
|
+
* Matches the constant the runtime adapters (Loxone, MQTT, OPC-UA) use as the
|
|
444
|
+
* `sourceAttributePath` fallback when no specific state is configured.
|
|
445
|
+
*/
|
|
446
|
+
declare const DEFAULT_DATA_POINT = "currentValue";
|
|
447
|
+
/** Minimal shape we accept for an attribute item. */
|
|
448
|
+
interface AttributeItemLike {
|
|
449
|
+
attributeName?: string | null;
|
|
450
|
+
value?: unknown;
|
|
451
|
+
}
|
|
452
|
+
/**
|
|
453
|
+
* Extracts the list of available data point names from an entity's attribute
|
|
454
|
+
* list. Always includes {@link DEFAULT_DATA_POINT} first; named state entries
|
|
455
|
+
* follow in alphabetical order.
|
|
456
|
+
*
|
|
457
|
+
* Tolerates the three record shapes the platform produces for a RecordArray:
|
|
458
|
+
*
|
|
459
|
+
* 1. GraphQL: each record is `{ ckRecordId, attributes: [{attributeName, value}, …] }`.
|
|
460
|
+
* 2. Pipeline / MongoDB: each record is `{ attributes: { Name: "…", ExternalId: "…" } }`.
|
|
461
|
+
* 3. Flat: each record is `{ Name: "…", ExternalId: "…" }` (older dumps / sample data).
|
|
462
|
+
*
|
|
463
|
+
* Returns `[DEFAULT_DATA_POINT]` for null/undefined input, attributes without a
|
|
464
|
+
* States/DataPoints entry, or malformed RecordArrays.
|
|
465
|
+
*/
|
|
466
|
+
declare function extractDataPointNames(attributes: readonly (AttributeItemLike | null | undefined)[] | null | undefined): string[];
|
|
467
|
+
|
|
468
|
+
/**
|
|
469
|
+
* Source data-point picker for DataPointMapping `sourceAttributePath`.
|
|
470
|
+
*
|
|
471
|
+
* Renders a Kendo combobox of the data points exposed by a source entity —
|
|
472
|
+
* a Loxone Control's State names (`tempActual`, `co2`, …), an MQTT topic
|
|
473
|
+
* sub-key, an OPC-UA node attribute, etc. — with `currentValue` as the
|
|
474
|
+
* always-available default for single-state sources.
|
|
475
|
+
*
|
|
476
|
+
* Two ways to feed the picker:
|
|
477
|
+
* - `entity` — pass a pre-loaded RtEntityDto; the picker reads the
|
|
478
|
+
* States/DataPoints RecordArray straight off it (no GraphQL roundtrip).
|
|
479
|
+
* Used by the runtime-browser detail pane.
|
|
480
|
+
* - `entityRtId` + `entityCkTypeId` — the picker fetches the entity via
|
|
481
|
+
* `getRuntimeEntityById` and extracts data points itself. Used by the
|
|
482
|
+
* mapping-edit dialog where only the IDs are known.
|
|
483
|
+
*
|
|
484
|
+
* `allowCustom: true` keeps the picker useful when the user needs to escape
|
|
485
|
+
* the catalogue — e.g. typing a path the entity hasn't published yet, or a
|
|
486
|
+
* field a future state will expose.
|
|
487
|
+
*/
|
|
488
|
+
declare class DataPointPickerComponent {
|
|
489
|
+
private readonly resolver;
|
|
490
|
+
/** Pre-loaded source entity. When set, no GraphQL call is made. */
|
|
491
|
+
readonly entity: _angular_core.InputSignal<RtEntityDto | null | undefined>;
|
|
492
|
+
/** Source entity rtId. Required (together with ckTypeId) when `entity` is not provided. */
|
|
493
|
+
readonly entityRtId: _angular_core.InputSignal<string | null | undefined>;
|
|
494
|
+
/** Source entity CK type id. */
|
|
495
|
+
readonly entityCkTypeId: _angular_core.InputSignal<string | null | undefined>;
|
|
496
|
+
/** Two-way bound data-point name. */
|
|
497
|
+
readonly value: _angular_core.ModelSignal<string>;
|
|
498
|
+
/** Optional placeholder shown when the combobox is empty. */
|
|
499
|
+
readonly placeholder: _angular_core.InputSignal<string>;
|
|
500
|
+
/** Disables the combobox without hiding it. */
|
|
501
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
502
|
+
/** Emits whenever the user enters a custom filter — useful for callers that
|
|
503
|
+
* want to refine a backing catalogue independently of the value selection. */
|
|
504
|
+
readonly filterChange: _angular_core.OutputEmitterRef<string>;
|
|
505
|
+
protected readonly options: _angular_core.WritableSignal<string[]>;
|
|
506
|
+
protected readonly loading: _angular_core.WritableSignal<boolean>;
|
|
507
|
+
/**
|
|
508
|
+
* Current filter text entered into the combobox. Drives the case-insensitive
|
|
509
|
+
* *contains* match below. Kendo's combobox by default does not filter the
|
|
510
|
+
* `[data]` it is given — when `filterable` is true it just emits
|
|
511
|
+
* `filterChange` events and expects the consumer to refilter. Without this,
|
|
512
|
+
* typing "co2" would show every data point regardless of name.
|
|
513
|
+
*/
|
|
514
|
+
protected readonly filter: _angular_core.WritableSignal<string>;
|
|
515
|
+
protected readonly filteredOptions: _angular_core.Signal<string[]>;
|
|
516
|
+
constructor();
|
|
517
|
+
protected onValueChange(v: string | null): void;
|
|
518
|
+
protected onFilterChange(filter: string): void;
|
|
519
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataPointPickerComponent, never>;
|
|
520
|
+
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>;
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
/**
|
|
524
|
+
* Resolves the list of runtime data points available on a source entity.
|
|
525
|
+
* Single source of truth shared by the runtime-browser detail pane (which
|
|
526
|
+
* already has the entity loaded) and the mapping-edit dialog (which only
|
|
527
|
+
* has rtId + ckTypeId and has to fetch). Picks the right path automatically:
|
|
528
|
+
*
|
|
529
|
+
* - {@link extractFromEntity} is sync — pass a pre-loaded entity.
|
|
530
|
+
* - {@link load} is async — fetches via `getRuntimeEntityById` then extracts.
|
|
531
|
+
*
|
|
532
|
+
* Both paths share the same pure helper so a Loxone Control's state list
|
|
533
|
+
* (`tempActual`, `co2`, …) is reported identically regardless of who's asking.
|
|
534
|
+
*/
|
|
535
|
+
declare class DataPointResolverService {
|
|
536
|
+
private readonly getRuntimeEntityByIdGQL;
|
|
537
|
+
extractFromEntity(entity: {
|
|
538
|
+
attributes?: {
|
|
539
|
+
items?: readonly (AttributeItemLike | null | undefined)[] | null;
|
|
540
|
+
} | null;
|
|
541
|
+
} | null | undefined): string[];
|
|
542
|
+
load(rtId: string, ckTypeId: string): Promise<string[]>;
|
|
543
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataPointResolverService, never>;
|
|
544
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<DataPointResolverService>;
|
|
374
545
|
}
|
|
375
546
|
|
|
376
547
|
declare abstract class OctoGraphQlDataSource<TDto> extends DataSourceTyped<TDto | null> {
|
|
@@ -423,8 +594,8 @@ declare class EntityIdInfoComponent {
|
|
|
423
594
|
protected get copyOptions(): CopyOption[];
|
|
424
595
|
private truncateValue;
|
|
425
596
|
protected copyToClipboard(option: CopyOption): Promise<void>;
|
|
426
|
-
static ɵfac:
|
|
427
|
-
static ɵcmp:
|
|
597
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntityIdInfoComponent, never>;
|
|
598
|
+
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
599
|
}
|
|
429
600
|
|
|
430
601
|
type BrowserItem$3 = RtEntityDto | CkModelDto | CkTypeDto | {
|
|
@@ -512,8 +683,8 @@ declare class RuntimeBrowserDataSource extends OctoGraphQlHierarchyDataSource<Br
|
|
|
512
683
|
private checkBasicConstructionKitAvailable;
|
|
513
684
|
private fetchCkModels;
|
|
514
685
|
private fetchCkTypes;
|
|
515
|
-
static ɵfac:
|
|
516
|
-
static ɵprov:
|
|
686
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RuntimeBrowserDataSource, never>;
|
|
687
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<RuntimeBrowserDataSource>;
|
|
517
688
|
}
|
|
518
689
|
|
|
519
690
|
interface EntitySelectorDialogData {
|
|
@@ -528,7 +699,7 @@ interface EntitySelectorDialogResult {
|
|
|
528
699
|
}
|
|
529
700
|
|
|
530
701
|
declare class EntitySelectorDialogComponent {
|
|
531
|
-
private readonly
|
|
702
|
+
private readonly windowRef;
|
|
532
703
|
readonly treeDataSource: RuntimeBrowserDataSource;
|
|
533
704
|
data: EntitySelectorDialogData;
|
|
534
705
|
selectedEntity: {
|
|
@@ -539,8 +710,8 @@ declare class EntitySelectorDialogComponent {
|
|
|
539
710
|
onNodeSelected(node: TreeItemData): void;
|
|
540
711
|
onConfirm(): void;
|
|
541
712
|
onCancel(): void;
|
|
542
|
-
static ɵfac:
|
|
543
|
-
static ɵcmp:
|
|
713
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntitySelectorDialogComponent, never>;
|
|
714
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EntitySelectorDialogComponent, "mm-entity-selector-dialog", never, {}, {}, never, never, true, never>;
|
|
544
715
|
}
|
|
545
716
|
|
|
546
717
|
interface EntitySelectorResult {
|
|
@@ -548,10 +719,17 @@ interface EntitySelectorResult {
|
|
|
548
719
|
entity?: EntitySelectorDialogResult;
|
|
549
720
|
}
|
|
550
721
|
declare class EntitySelectorDialogService {
|
|
551
|
-
private readonly
|
|
722
|
+
private readonly windowService;
|
|
723
|
+
private readonly windowStateService;
|
|
724
|
+
/**
|
|
725
|
+
* Opens the entity selector as a Kendo Window so it stacks correctly above
|
|
726
|
+
* other Kendo Windows (e.g. the Mapping-Edit dialog calls this from its
|
|
727
|
+
* own Window — Kendo Dialogs would land underneath because Window and
|
|
728
|
+
* Dialog use different z-index ranges).
|
|
729
|
+
*/
|
|
552
730
|
openEntitySelector(data?: EntitySelectorDialogData): Promise<EntitySelectorResult>;
|
|
553
|
-
static ɵfac:
|
|
554
|
-
static ɵprov:
|
|
731
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntitySelectorDialogService, never>;
|
|
732
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<EntitySelectorDialogService>;
|
|
555
733
|
}
|
|
556
734
|
|
|
557
735
|
/**
|
|
@@ -687,8 +865,8 @@ declare class FieldFilterEditorComponent implements OnChanges {
|
|
|
687
865
|
private isArrayValue;
|
|
688
866
|
private extractArrayContent;
|
|
689
867
|
private parseAndCleanArrayValues;
|
|
690
|
-
static ɵfac:
|
|
691
|
-
static ɵcmp:
|
|
868
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FieldFilterEditorComponent, never>;
|
|
869
|
+
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
870
|
}
|
|
693
871
|
|
|
694
872
|
/**
|
|
@@ -707,8 +885,8 @@ declare class FieldFilterEditorComponent implements OnChanges {
|
|
|
707
885
|
*/
|
|
708
886
|
declare class OctoLoaderComponent {
|
|
709
887
|
size: 'small' | 'medium';
|
|
710
|
-
static ɵfac:
|
|
711
|
-
static ɵcmp:
|
|
888
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<OctoLoaderComponent, never>;
|
|
889
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<OctoLoaderComponent, "mm-octo-loader", never, { "size": { "alias": "size"; "required": false; }; }, {}, never, never, true, never>;
|
|
712
890
|
}
|
|
713
891
|
|
|
714
892
|
declare enum AttributeValueTypeDto {
|
|
@@ -820,6 +998,23 @@ interface BinaryDownloadEvent {
|
|
|
820
998
|
downloadUri?: string;
|
|
821
999
|
}
|
|
822
1000
|
|
|
1001
|
+
/**
|
|
1002
|
+
* Translatable messages for PropertyGridComponent.
|
|
1003
|
+
*/
|
|
1004
|
+
interface PropertyGridMessages {
|
|
1005
|
+
/** Placeholder for the search input. Default: "Search attributes..." */
|
|
1006
|
+
searchPlaceholder: string;
|
|
1007
|
+
/** Title of the Property column. Default: "Property" */
|
|
1008
|
+
columnPropertyTitle: string;
|
|
1009
|
+
/** Title of the Value column. Default: "Value" */
|
|
1010
|
+
columnValueTitle: string;
|
|
1011
|
+
/** Title of the Type column. Default: "Type" */
|
|
1012
|
+
columnTypeTitle: string;
|
|
1013
|
+
/** Tooltip on the read-only lock icon. Default: "Read-only" */
|
|
1014
|
+
readOnlyTooltip: string;
|
|
1015
|
+
}
|
|
1016
|
+
declare const DEFAULT_PROPERTY_GRID_MESSAGES: PropertyGridMessages;
|
|
1017
|
+
|
|
823
1018
|
/** Represents an attribute from an RtEntity */
|
|
824
1019
|
interface RtAttribute {
|
|
825
1020
|
attributeName?: string | null;
|
|
@@ -904,8 +1099,8 @@ declare class PropertyConverterService {
|
|
|
904
1099
|
* Check if string is ISO date format
|
|
905
1100
|
*/
|
|
906
1101
|
private isIsoDateString;
|
|
907
|
-
static ɵfac:
|
|
908
|
-
static ɵprov:
|
|
1102
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PropertyConverterService, never>;
|
|
1103
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<PropertyConverterService>;
|
|
909
1104
|
}
|
|
910
1105
|
|
|
911
1106
|
/**
|
|
@@ -915,6 +1110,8 @@ declare class PropertyGridComponent implements OnInit, OnChanges {
|
|
|
915
1110
|
data: PropertyGridItem[];
|
|
916
1111
|
config: PropertyGridConfig;
|
|
917
1112
|
showTypeColumn: boolean;
|
|
1113
|
+
protected _messages: PropertyGridMessages;
|
|
1114
|
+
set messages(value: Partial<PropertyGridMessages> | undefined);
|
|
918
1115
|
propertyChange: EventEmitter<PropertyChangeEvent>;
|
|
919
1116
|
saveRequested: EventEmitter<PropertyGridItem[]>;
|
|
920
1117
|
binaryDownload: EventEmitter<BinaryDownloadEvent>;
|
|
@@ -963,8 +1160,8 @@ declare class PropertyGridComponent implements OnInit, OnChanges {
|
|
|
963
1160
|
* Handle binary download request from property value display
|
|
964
1161
|
*/
|
|
965
1162
|
onBinaryDownload(event: BinaryDownloadEvent): void;
|
|
966
|
-
static ɵfac:
|
|
967
|
-
static ɵcmp:
|
|
1163
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PropertyGridComponent, never>;
|
|
1164
|
+
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; }; "messages": { "alias": "messages"; "required": false; }; }, { "propertyChange": "propertyChange"; "saveRequested": "saveRequested"; "binaryDownload": "binaryDownload"; }, never, never, true, never>;
|
|
968
1165
|
}
|
|
969
1166
|
|
|
970
1167
|
/**
|
|
@@ -1080,8 +1277,8 @@ declare class PropertyValueDisplayComponent implements OnInit, OnChanges {
|
|
|
1080
1277
|
* Handle download button click
|
|
1081
1278
|
*/
|
|
1082
1279
|
onDownload(): void;
|
|
1083
|
-
static ɵfac:
|
|
1084
|
-
static ɵcmp:
|
|
1280
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PropertyValueDisplayComponent, never>;
|
|
1281
|
+
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
1282
|
}
|
|
1086
1283
|
|
|
1087
1284
|
interface RecordProperty {
|
|
@@ -1168,9 +1365,207 @@ declare class RecordDetailDialogComponent implements OnInit {
|
|
|
1168
1365
|
private getObjectProperties;
|
|
1169
1366
|
private inferType;
|
|
1170
1367
|
private formatAttributeName;
|
|
1171
|
-
static ɵfac:
|
|
1172
|
-
static ɵcmp:
|
|
1368
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RecordDetailDialogComponent, never>;
|
|
1369
|
+
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>;
|
|
1370
|
+
}
|
|
1371
|
+
|
|
1372
|
+
/**
|
|
1373
|
+
* Translatable messages for the RuntimeBrowser components.
|
|
1374
|
+
* Pass translated strings to override the English defaults.
|
|
1375
|
+
*/
|
|
1376
|
+
interface RuntimeBrowserMessages {
|
|
1377
|
+
/**
|
|
1378
|
+
* Messages forwarded to the embedded ck-type-selector-input
|
|
1379
|
+
* (rendered by the create-editor flow).
|
|
1380
|
+
*/
|
|
1381
|
+
ckTypeSelectorInput?: Partial<CkTypeSelectorInputMessages>;
|
|
1382
|
+
/**
|
|
1383
|
+
* Messages forwarded to the embedded property-grid
|
|
1384
|
+
* (attributes tab in entity detail view).
|
|
1385
|
+
*/
|
|
1386
|
+
propertyGrid?: Partial<PropertyGridMessages>;
|
|
1387
|
+
/**
|
|
1388
|
+
* Messages forwarded to the embedded list-view
|
|
1389
|
+
* (associations tab in entity detail view: column headers, pager,
|
|
1390
|
+
* Excel/PDF/Refresh tooltips).
|
|
1391
|
+
*/
|
|
1392
|
+
listView?: Partial<ListViewMessages>;
|
|
1393
|
+
/** Header label for record card in attributes-group. Default: "Record" */
|
|
1394
|
+
recordLabel?: string;
|
|
1395
|
+
/** Back button on the standalone entity-detail page. Default: "Back" */
|
|
1396
|
+
back?: string;
|
|
1397
|
+
/** Hint above a RECORD_ARRAY tabstrip in attributes-group. */
|
|
1398
|
+
recordArrayHint?: string;
|
|
1399
|
+
/** Hint above an optional RECORD section in attributes-group. */
|
|
1400
|
+
recordHint?: string;
|
|
1401
|
+
/** "Add" button for RECORD_ARRAY items. Default: "Add" */
|
|
1402
|
+
addRecord?: string;
|
|
1403
|
+
/** "Remove" button for RECORD_ARRAY items. Default: "Remove" */
|
|
1404
|
+
removeRecord?: string;
|
|
1405
|
+
/** "Load" button for optional RECORD. Default: "Load" */
|
|
1406
|
+
loadRecord?: string;
|
|
1407
|
+
/** "Unload" button for optional RECORD. Default: "Unload" */
|
|
1408
|
+
unloadRecord?: string;
|
|
1409
|
+
/** Hint for GEO longitude input. */
|
|
1410
|
+
longitudeHint?: string;
|
|
1411
|
+
/** Hint for GEO latitude input. */
|
|
1412
|
+
latitudeHint?: string;
|
|
1413
|
+
/**
|
|
1414
|
+
* Drag-and-drop messages for the binary attribute drop zone
|
|
1415
|
+
* (forwarded to <kendo-fileselect-messages>).
|
|
1416
|
+
*/
|
|
1417
|
+
dragDrop?: {
|
|
1418
|
+
/** Drop-zone hint label. Default: 'Drop files here to upload' */
|
|
1419
|
+
dropZone?: string;
|
|
1420
|
+
/** Error shown when a file exceeds the size limit. Default: 'File size too large.' */
|
|
1421
|
+
errorFileTooBig?: string;
|
|
1422
|
+
/** Error shown when the file extension is not allowed. Default: 'File type not allowed.' */
|
|
1423
|
+
errorInvalidType?: string;
|
|
1424
|
+
/** Error shown when file upload fails. Default: 'File failed to upload.' */
|
|
1425
|
+
errorUploadFailed?: string;
|
|
1426
|
+
};
|
|
1427
|
+
/**
|
|
1428
|
+
* Labels/tooltips for the binary reference (file picker) editor,
|
|
1429
|
+
* shown when a BINARY attribute is restored from stored base64 data.
|
|
1430
|
+
*/
|
|
1431
|
+
binaryReference?: {
|
|
1432
|
+
/** Inline label text. Default: 'Preview (restored from stored data)' */
|
|
1433
|
+
label?: string;
|
|
1434
|
+
/** Tooltip on the label span. Default: 'Content and size are from stored data. File name is a placeholder because the original name is not stored.' */
|
|
1435
|
+
tooltip?: string;
|
|
1436
|
+
};
|
|
1437
|
+
/**
|
|
1438
|
+
* Labels/tooltips for the reference preview component,
|
|
1439
|
+
* shown when a BINARY_LINKED attribute is a synthetic reference file.
|
|
1440
|
+
*/
|
|
1441
|
+
referencePreview?: {
|
|
1442
|
+
/** Inline label text. Default: 'Preview (reference file)' */
|
|
1443
|
+
label?: string;
|
|
1444
|
+
/** Tooltip on the label span. Default: 'Shows metadata of an existing file in the system; content is not loaded. Replace with a file to change.' */
|
|
1445
|
+
tooltip?: string;
|
|
1446
|
+
};
|
|
1447
|
+
/**
|
|
1448
|
+
* Generic error messages emitted by mm-attribute-field.
|
|
1449
|
+
*/
|
|
1450
|
+
attributeField?: {
|
|
1451
|
+
/** Validation error shown below a field when it is invalid and dirty/touched. Default: 'This field is required or invalid.' */
|
|
1452
|
+
errorMessage?: string;
|
|
1453
|
+
};
|
|
1454
|
+
title: string;
|
|
1455
|
+
badgeLabel: string;
|
|
1456
|
+
titlePrefix: string;
|
|
1457
|
+
ready: string;
|
|
1458
|
+
selectItem: string;
|
|
1459
|
+
noPropertiesAvailable: string;
|
|
1460
|
+
constructionKitModel: string;
|
|
1461
|
+
constructionKitModels: string;
|
|
1462
|
+
fullName: string;
|
|
1463
|
+
semanticName: string;
|
|
1464
|
+
modelName: string;
|
|
1465
|
+
version: string;
|
|
1466
|
+
state: string;
|
|
1467
|
+
selectTypeFromTree: string;
|
|
1468
|
+
browseModelsAndTypes: string;
|
|
1469
|
+
type: string;
|
|
1470
|
+
abstract: string;
|
|
1471
|
+
final: string;
|
|
1472
|
+
base: string;
|
|
1473
|
+
runtimeEntities: string;
|
|
1474
|
+
runtimeId: string;
|
|
1475
|
+
typeId: string;
|
|
1476
|
+
entityIdentifier: string;
|
|
1477
|
+
wellKnownName: string;
|
|
1478
|
+
entityInformation: string;
|
|
1479
|
+
loadingEntityDetails: string;
|
|
1480
|
+
retry: string;
|
|
1481
|
+
attributes: string;
|
|
1482
|
+
associations: string;
|
|
1483
|
+
direction: string;
|
|
1484
|
+
role: string;
|
|
1485
|
+
relatedType: string;
|
|
1486
|
+
relatedEntity: string;
|
|
1487
|
+
all: string;
|
|
1488
|
+
inbound: string;
|
|
1489
|
+
outbound: string;
|
|
1490
|
+
allRoles: string;
|
|
1491
|
+
allTypes: string;
|
|
1492
|
+
entityId: string;
|
|
1493
|
+
viewDetails: string;
|
|
1494
|
+
copyToClipboard: string;
|
|
1495
|
+
copyEntityIdentifierToClipboard: string;
|
|
1496
|
+
goToEntity: string;
|
|
1497
|
+
refresh: string;
|
|
1498
|
+
create: string;
|
|
1499
|
+
edit: string;
|
|
1500
|
+
delete: string;
|
|
1501
|
+
createEntity: string;
|
|
1502
|
+
updateEntity: string;
|
|
1503
|
+
name: string;
|
|
1504
|
+
runtimeCkTypeId: string;
|
|
1505
|
+
targetLocation: string;
|
|
1506
|
+
rootLevel: string;
|
|
1507
|
+
entityType: string;
|
|
1508
|
+
selectType: string;
|
|
1509
|
+
selectTypePrompt: string;
|
|
1510
|
+
save: string;
|
|
1511
|
+
cancel: string;
|
|
1512
|
+
longitude: string;
|
|
1513
|
+
latitude: string;
|
|
1514
|
+
resetToInitialValue: string;
|
|
1515
|
+
attributesFor: string;
|
|
1516
|
+
couldNotLoadEntityDetails: string;
|
|
1517
|
+
failedToLoadEntityDetails: string;
|
|
1518
|
+
entityNotFound?: string;
|
|
1519
|
+
entityIdInvalidFormat?: string;
|
|
1520
|
+
copiedToClipboard: string;
|
|
1521
|
+
failedToCopyToClipboard: string;
|
|
1522
|
+
downloadNotAvailable: string;
|
|
1523
|
+
failedToLoadDownloadInfo: string;
|
|
1524
|
+
missingRequiredIdentifiers: string;
|
|
1525
|
+
failedToCreateEntity: string;
|
|
1526
|
+
failedToUpdateEntity: string;
|
|
1527
|
+
goToEntityTitle: string;
|
|
1528
|
+
goToEntityPrompt: string;
|
|
1529
|
+
go: string;
|
|
1530
|
+
created: string;
|
|
1531
|
+
modified: string;
|
|
1532
|
+
dataMapping: string;
|
|
1533
|
+
mappingTarget: string;
|
|
1534
|
+
mappingSourceAttributePath: string;
|
|
1535
|
+
mappingTargetAttributePath: string;
|
|
1536
|
+
mappingExpression: string;
|
|
1537
|
+
mappingExpressionHint: string;
|
|
1538
|
+
selectTargetEntity: string;
|
|
1539
|
+
removeMapping: string;
|
|
1540
|
+
saveMapping: string;
|
|
1541
|
+
noMappingConfigured: string;
|
|
1542
|
+
mappingSaved: string;
|
|
1543
|
+
mappingRemoved: string;
|
|
1544
|
+
failedToSaveMapping: string;
|
|
1545
|
+
failedToLoadMapping: string;
|
|
1546
|
+
/** Toast text emitted when user tries to move a tree item INTO the root. */
|
|
1547
|
+
treeMoveToRootUnsupported?: string;
|
|
1548
|
+
/** Toast text emitted when user tries to drop a tree item directly ON the root node. */
|
|
1549
|
+
treeMoveOnRootUnsupported?: string;
|
|
1550
|
+
/** Card header prefix for each mapping card: "MAPPING N". Default: "MAPPING" */
|
|
1551
|
+
mappingHeader?: string;
|
|
1552
|
+
/** Label for the source data point row. Default: "Source Data Point" */
|
|
1553
|
+
mappingSourceDataPoint?: string;
|
|
1554
|
+
/** Label for the "Add Mapping" toolbar button. Default: "+ Add Mapping" */
|
|
1555
|
+
mappingAddMapping?: string;
|
|
1556
|
+
/** Label for the "Save All Mappings" button. Default: "Save All Mappings" */
|
|
1557
|
+
mappingSaveAll?: string;
|
|
1558
|
+
/** Placeholder shown when a target entity or attribute is not configured. Default: "(not set)" */
|
|
1559
|
+
mappingNotSet?: string;
|
|
1560
|
+
/** Label for the "Select..." / "Change..." picker buttons. Default: "Select..." */
|
|
1561
|
+
mappingSelect?: string;
|
|
1562
|
+
/** Empty-state hint shown when no mappings exist. Default: "No data point mappings configured yet." */
|
|
1563
|
+
mappingNoneConfigured?: string;
|
|
1173
1564
|
}
|
|
1565
|
+
/**
|
|
1566
|
+
* Default English messages for the RuntimeBrowser components.
|
|
1567
|
+
*/
|
|
1568
|
+
declare const DEFAULT_RUNTIME_BROWSER_MESSAGES: RuntimeBrowserMessages;
|
|
1174
1569
|
|
|
1175
1570
|
/**
|
|
1176
1571
|
* Result of validating a mapping expression.
|
|
@@ -1250,6 +1645,8 @@ declare class EntityDetailComponent implements OnInit, OnDestroy {
|
|
|
1250
1645
|
private readonly attributeSelectorDialog;
|
|
1251
1646
|
private readonly destroy$;
|
|
1252
1647
|
protected readonly arrowLeftIcon: _progress_kendo_svg_icons.SVGIcon;
|
|
1648
|
+
protected _messages: RuntimeBrowserMessages;
|
|
1649
|
+
set messages(value: Partial<RuntimeBrowserMessages> | undefined);
|
|
1253
1650
|
showDataMapping: boolean;
|
|
1254
1651
|
entity: RtEntityDto | null;
|
|
1255
1652
|
loading: boolean;
|
|
@@ -1272,8 +1669,8 @@ declare class EntityDetailComponent implements OnInit, OnDestroy {
|
|
|
1272
1669
|
onSelectSourceAttribute(mapping: DataPointMappingItem): Promise<void>;
|
|
1273
1670
|
onSelectTargetAttribute(mapping: DataPointMappingItem): Promise<void>;
|
|
1274
1671
|
onSaveAllMappings(): Promise<void>;
|
|
1275
|
-
static ɵfac:
|
|
1276
|
-
static ɵcmp:
|
|
1672
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntityDetailComponent, never>;
|
|
1673
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EntityDetailComponent, "mm-entity-detail", never, { "messages": { "alias": "messages"; "required": false; }; }, {}, never, never, true, never>;
|
|
1277
1674
|
}
|
|
1278
1675
|
|
|
1279
1676
|
declare const botService: {
|
|
@@ -1507,115 +1904,14 @@ declare const article: {
|
|
|
1507
1904
|
viewBox: string;
|
|
1508
1905
|
};
|
|
1509
1906
|
|
|
1510
|
-
/**
|
|
1511
|
-
* Translatable messages for the RuntimeBrowser components.
|
|
1512
|
-
* Pass translated strings to override the English defaults.
|
|
1513
|
-
*/
|
|
1514
|
-
interface RuntimeBrowserMessages {
|
|
1515
|
-
title: string;
|
|
1516
|
-
badgeLabel: string;
|
|
1517
|
-
titlePrefix: string;
|
|
1518
|
-
ready: string;
|
|
1519
|
-
selectItem: string;
|
|
1520
|
-
noPropertiesAvailable: string;
|
|
1521
|
-
constructionKitModel: string;
|
|
1522
|
-
constructionKitModels: string;
|
|
1523
|
-
fullName: string;
|
|
1524
|
-
semanticName: string;
|
|
1525
|
-
modelName: string;
|
|
1526
|
-
version: string;
|
|
1527
|
-
state: string;
|
|
1528
|
-
selectTypeFromTree: string;
|
|
1529
|
-
browseModelsAndTypes: string;
|
|
1530
|
-
type: string;
|
|
1531
|
-
abstract: string;
|
|
1532
|
-
final: string;
|
|
1533
|
-
base: string;
|
|
1534
|
-
runtimeEntities: string;
|
|
1535
|
-
runtimeId: string;
|
|
1536
|
-
typeId: string;
|
|
1537
|
-
entityIdentifier: string;
|
|
1538
|
-
wellKnownName: string;
|
|
1539
|
-
entityInformation: string;
|
|
1540
|
-
loadingEntityDetails: string;
|
|
1541
|
-
retry: string;
|
|
1542
|
-
attributes: string;
|
|
1543
|
-
associations: string;
|
|
1544
|
-
direction: string;
|
|
1545
|
-
role: string;
|
|
1546
|
-
relatedType: string;
|
|
1547
|
-
relatedEntity: string;
|
|
1548
|
-
all: string;
|
|
1549
|
-
inbound: string;
|
|
1550
|
-
outbound: string;
|
|
1551
|
-
allRoles: string;
|
|
1552
|
-
allTypes: string;
|
|
1553
|
-
entityId: string;
|
|
1554
|
-
viewDetails: string;
|
|
1555
|
-
copyToClipboard: string;
|
|
1556
|
-
copyEntityIdentifierToClipboard: string;
|
|
1557
|
-
goToEntity: string;
|
|
1558
|
-
refresh: string;
|
|
1559
|
-
create: string;
|
|
1560
|
-
edit: string;
|
|
1561
|
-
delete: string;
|
|
1562
|
-
createEntity: string;
|
|
1563
|
-
updateEntity: string;
|
|
1564
|
-
name: string;
|
|
1565
|
-
runtimeCkTypeId: string;
|
|
1566
|
-
targetLocation: string;
|
|
1567
|
-
rootLevel: string;
|
|
1568
|
-
entityType: string;
|
|
1569
|
-
selectType: string;
|
|
1570
|
-
selectTypePrompt: string;
|
|
1571
|
-
save: string;
|
|
1572
|
-
cancel: string;
|
|
1573
|
-
longitude: string;
|
|
1574
|
-
latitude: string;
|
|
1575
|
-
resetToInitialValue: string;
|
|
1576
|
-
attributesFor: string;
|
|
1577
|
-
couldNotLoadEntityDetails: string;
|
|
1578
|
-
failedToLoadEntityDetails: string;
|
|
1579
|
-
copiedToClipboard: string;
|
|
1580
|
-
failedToCopyToClipboard: string;
|
|
1581
|
-
downloadNotAvailable: string;
|
|
1582
|
-
failedToLoadDownloadInfo: string;
|
|
1583
|
-
missingRequiredIdentifiers: string;
|
|
1584
|
-
failedToCreateEntity: string;
|
|
1585
|
-
failedToUpdateEntity: string;
|
|
1586
|
-
goToEntityTitle: string;
|
|
1587
|
-
goToEntityPrompt: string;
|
|
1588
|
-
go: string;
|
|
1589
|
-
created: string;
|
|
1590
|
-
modified: string;
|
|
1591
|
-
dataMapping: string;
|
|
1592
|
-
mappingTarget: string;
|
|
1593
|
-
mappingSourceAttributePath: string;
|
|
1594
|
-
mappingTargetAttributePath: string;
|
|
1595
|
-
mappingExpression: string;
|
|
1596
|
-
mappingExpressionHint: string;
|
|
1597
|
-
selectTargetEntity: string;
|
|
1598
|
-
removeMapping: string;
|
|
1599
|
-
saveMapping: string;
|
|
1600
|
-
noMappingConfigured: string;
|
|
1601
|
-
mappingSaved: string;
|
|
1602
|
-
mappingRemoved: string;
|
|
1603
|
-
failedToSaveMapping: string;
|
|
1604
|
-
failedToLoadMapping: string;
|
|
1605
|
-
}
|
|
1606
|
-
/**
|
|
1607
|
-
* Default English messages for the RuntimeBrowser components.
|
|
1608
|
-
*/
|
|
1609
|
-
declare const DEFAULT_RUNTIME_BROWSER_MESSAGES: RuntimeBrowserMessages;
|
|
1610
|
-
|
|
1611
1907
|
declare class CkTypeEntitiesDataSourceDirective extends OctoGraphQlDataSource<RtEntityDto> {
|
|
1612
1908
|
private readonly getRuntimeEntitiesGQL;
|
|
1613
1909
|
private ckTypeId;
|
|
1614
1910
|
constructor();
|
|
1615
1911
|
setRtCkTypeId(ckTypeId: string): void;
|
|
1616
1912
|
fetchData(queryOptions: FetchDataOptions): Observable<FetchResultTyped<RtEntityDto> | null>;
|
|
1617
|
-
static ɵfac:
|
|
1618
|
-
static ɵdir:
|
|
1913
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CkTypeEntitiesDataSourceDirective, never>;
|
|
1914
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<CkTypeEntitiesDataSourceDirective, "[mmCkTypeEntitiesDataSource]", ["mmCkTypeEntitiesDataSource"], {}, {}, never, never, true, never>;
|
|
1619
1915
|
}
|
|
1620
1916
|
|
|
1621
1917
|
/**
|
|
@@ -1629,8 +1925,8 @@ declare class TypeHelperService {
|
|
|
1629
1925
|
* @returns True for runtime entity, false otherwise.
|
|
1630
1926
|
*/
|
|
1631
1927
|
isRuntimeEntity(item: unknown): item is RtEntityDto;
|
|
1632
|
-
static ɵfac:
|
|
1633
|
-
static ɵprov:
|
|
1928
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TypeHelperService, never>;
|
|
1929
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<TypeHelperService>;
|
|
1634
1930
|
}
|
|
1635
1931
|
|
|
1636
1932
|
interface CreateInput {
|
|
@@ -1724,7 +2020,6 @@ declare class RuntimeBrowserDetailsComponent implements OnChanges, AfterViewInit
|
|
|
1724
2020
|
private readonly entitySelectorDialog;
|
|
1725
2021
|
private readonly attributeSelectorDialog;
|
|
1726
2022
|
dataMappings: DataPointMappingItem[];
|
|
1727
|
-
sourceDataPoints: string[];
|
|
1728
2023
|
/**
|
|
1729
2024
|
* Optional expression validator function passed through to EntityDetailViewComponent → DataMappingListComponent.
|
|
1730
2025
|
*/
|
|
@@ -1831,11 +2126,6 @@ declare class RuntimeBrowserDetailsComponent implements OnChanges, AfterViewInit
|
|
|
1831
2126
|
* Tracks in-memory changes to a mapping (no server save yet).
|
|
1832
2127
|
*/
|
|
1833
2128
|
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
2129
|
/**
|
|
1840
2130
|
* Opens attribute selector for the source entity's attributes.
|
|
1841
2131
|
*/
|
|
@@ -1848,8 +2138,8 @@ declare class RuntimeBrowserDetailsComponent implements OnChanges, AfterViewInit
|
|
|
1848
2138
|
* Saves all DataPointMapping entities (attributes + MapsTo associations).
|
|
1849
2139
|
*/
|
|
1850
2140
|
onSaveAllMappings(): Promise<void>;
|
|
1851
|
-
static ɵfac:
|
|
1852
|
-
static ɵcmp:
|
|
2141
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RuntimeBrowserDetailsComponent, never>;
|
|
2142
|
+
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
2143
|
}
|
|
1854
2144
|
|
|
1855
2145
|
type BrowserItem$1 = RtEntityDto | CkModelDto | CkTypeDto | {
|
|
@@ -1870,14 +2160,14 @@ declare class RuntimeBrowserComponent implements AfterViewInit {
|
|
|
1870
2160
|
private isSelectedItemAnRtEntity;
|
|
1871
2161
|
private isLoading;
|
|
1872
2162
|
private isEditing;
|
|
1873
|
-
messages:
|
|
1874
|
-
showDataMapping:
|
|
2163
|
+
messages: _angular_core.InputSignal<Partial<RuntimeBrowserMessages>>;
|
|
2164
|
+
showDataMapping: _angular_core.InputSignal<boolean>;
|
|
1875
2165
|
/**
|
|
1876
2166
|
* Optional expression validator function for DataPointMapping expressions.
|
|
1877
2167
|
* Passed through to RuntimeBrowserDetailsComponent → EntityDetailViewComponent → DataMappingListComponent.
|
|
1878
2168
|
*/
|
|
1879
|
-
expressionValidator:
|
|
1880
|
-
protected readonly resolvedMessages:
|
|
2169
|
+
expressionValidator: _angular_core.InputSignal<ExpressionValidatorFn | undefined>;
|
|
2170
|
+
protected readonly resolvedMessages: _angular_core.Signal<RuntimeBrowserMessages>;
|
|
1881
2171
|
treeDetail: BaseTreeDetailComponent<BrowserItem$1>;
|
|
1882
2172
|
detailsPanel: RuntimeBrowserDetailsComponent;
|
|
1883
2173
|
protected get leftToolbarActions(): CommandItem[];
|
|
@@ -1964,8 +2254,8 @@ declare class RuntimeBrowserComponent implements AfterViewInit {
|
|
|
1964
2254
|
protected refreshTreeAfterCreation(parentInfo?: {
|
|
1965
2255
|
parentRtId?: string;
|
|
1966
2256
|
}): Promise<void>;
|
|
1967
|
-
static ɵfac:
|
|
1968
|
-
static ɵcmp:
|
|
2257
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RuntimeBrowserComponent, never>;
|
|
2258
|
+
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
2259
|
}
|
|
1970
2260
|
|
|
1971
2261
|
/**
|
|
@@ -1973,8 +2263,8 @@ declare class RuntimeBrowserComponent implements AfterViewInit {
|
|
|
1973
2263
|
* Use as the parent component when mounting runtime browser routes as children.
|
|
1974
2264
|
*/
|
|
1975
2265
|
declare class RuntimeBrowserOutletComponent {
|
|
1976
|
-
static ɵfac:
|
|
1977
|
-
static ɵcmp:
|
|
2266
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RuntimeBrowserOutletComponent, never>;
|
|
2267
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<RuntimeBrowserOutletComponent, "mm-runtime-browser-outlet", never, {}, {}, never, never, true, never>;
|
|
1978
2268
|
}
|
|
1979
2269
|
|
|
1980
2270
|
/**
|
|
@@ -1984,8 +2274,8 @@ declare class RuntimeBrowserOutletComponent {
|
|
|
1984
2274
|
declare class RuntimeBrowserPageComponent {
|
|
1985
2275
|
private readonly injectedMessages;
|
|
1986
2276
|
protected readonly messages: RuntimeBrowserMessages;
|
|
1987
|
-
static ɵfac:
|
|
1988
|
-
static ɵcmp:
|
|
2277
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RuntimeBrowserPageComponent, never>;
|
|
2278
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<RuntimeBrowserPageComponent, "mm-runtime-browser-page", never, {}, {}, never, never, true, never>;
|
|
1989
2279
|
}
|
|
1990
2280
|
|
|
1991
2281
|
/** Options for creating runtime browser routes. */
|
|
@@ -2078,8 +2368,8 @@ declare class AssociationValidationService {
|
|
|
2078
2368
|
private toLowerCamelCase;
|
|
2079
2369
|
/** Clears the role cache (e.g. on tenant switch). */
|
|
2080
2370
|
clearCache(): void;
|
|
2081
|
-
static ɵfac:
|
|
2082
|
-
static ɵprov:
|
|
2371
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AssociationValidationService, never>;
|
|
2372
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AssociationValidationService>;
|
|
2083
2373
|
}
|
|
2084
2374
|
|
|
2085
2375
|
type BrowserItem = RtEntityDto | CkModelDto | CkTypeDto | {
|
|
@@ -2122,8 +2412,8 @@ declare class RuntimeBrowserStateService {
|
|
|
2122
2412
|
* Get unique identifier for a tree item
|
|
2123
2413
|
*/
|
|
2124
2414
|
private getItemId;
|
|
2125
|
-
static ɵfac:
|
|
2126
|
-
static ɵprov:
|
|
2415
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RuntimeBrowserStateService, never>;
|
|
2416
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<RuntimeBrowserStateService>;
|
|
2127
2417
|
}
|
|
2128
2418
|
|
|
2129
2419
|
/**
|
|
@@ -2182,16 +2472,16 @@ declare class DataMappingOverviewComponent implements OnInit {
|
|
|
2182
2472
|
rtId: string;
|
|
2183
2473
|
ckTypeId: string;
|
|
2184
2474
|
}>;
|
|
2185
|
-
readonly mappings:
|
|
2186
|
-
readonly loading:
|
|
2187
|
-
readonly selectedMapping:
|
|
2475
|
+
readonly mappings: _angular_core.WritableSignal<DataPointMappingOverviewItem[]>;
|
|
2476
|
+
readonly loading: _angular_core.WritableSignal<boolean>;
|
|
2477
|
+
readonly selectedMapping: _angular_core.WritableSignal<DataPointMappingOverviewItem | null>;
|
|
2188
2478
|
pageSize: number;
|
|
2189
2479
|
skip: number;
|
|
2190
|
-
readonly gridData:
|
|
2480
|
+
readonly gridData: _angular_core.Signal<{
|
|
2191
2481
|
data: DataPointMappingOverviewItem[];
|
|
2192
2482
|
total: number;
|
|
2193
2483
|
}>;
|
|
2194
|
-
readonly summary:
|
|
2484
|
+
readonly summary: _angular_core.Signal<MappingOverviewSummary>;
|
|
2195
2485
|
protected readonly refreshIcon: _progress_kendo_svg_icons.SVGIcon;
|
|
2196
2486
|
protected readonly checkIcon: _progress_kendo_svg_icons.SVGIcon;
|
|
2197
2487
|
protected readonly warnIcon: _progress_kendo_svg_icons.SVGIcon;
|
|
@@ -2210,8 +2500,544 @@ declare class DataMappingOverviewComponent implements OnInit {
|
|
|
2210
2500
|
* Updates items in-place and triggers signal update.
|
|
2211
2501
|
*/
|
|
2212
2502
|
private resolveEntityNames;
|
|
2213
|
-
static ɵfac:
|
|
2214
|
-
static ɵcmp:
|
|
2503
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataMappingOverviewComponent, never>;
|
|
2504
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DataMappingOverviewComponent, "mm-data-mapping-overview", never, {}, { "navigateToEntity": "navigateToEntity"; }, never, never, true, never>;
|
|
2505
|
+
}
|
|
2506
|
+
|
|
2507
|
+
/**
|
|
2508
|
+
* Generic configuration that drives the Mapping Coverage Tree.
|
|
2509
|
+
*
|
|
2510
|
+
* The tree displays any entity hierarchy reachable via a single association role
|
|
2511
|
+
* (defaults to `System/ParentChild` between `Basic/Tree` and `Basic/TreeNode`).
|
|
2512
|
+
* Mapping counts are computed from the number of inbound associations with
|
|
2513
|
+
* `mappingRoleId` (defaults to `System.Communication/MapsTo`).
|
|
2514
|
+
*/
|
|
2515
|
+
interface MappingCoverageTreeConfig {
|
|
2516
|
+
/** CK type of root entities the user can pick (e.g. `Basic/Tree`). */
|
|
2517
|
+
rootCkTypeId: string;
|
|
2518
|
+
/** CK type of child nodes in the hierarchy (e.g. `Basic/TreeNode`). */
|
|
2519
|
+
childCkTypeId: string;
|
|
2520
|
+
/** Association role connecting parent to child (e.g. `System/ParentChild`). Inbound direction is used. */
|
|
2521
|
+
childRoleId: string;
|
|
2522
|
+
/** Association role connecting target entities to their DataPointMappings. */
|
|
2523
|
+
mappingRoleId: string;
|
|
2524
|
+
/** Association role connecting DataPointMappings back to their source entities. */
|
|
2525
|
+
mappingSourceRoleId: string;
|
|
2526
|
+
/** CK type of the mapping entity (e.g. `System.Communication/DataPointMapping`). */
|
|
2527
|
+
mappingCkTypeId: string;
|
|
2528
|
+
/** Outbound role name used when creating a new mapping with a MapsTo association. */
|
|
2529
|
+
mappingTargetOutboundRoleName: string;
|
|
2530
|
+
/** Outbound role name used when creating/updating a new mapping with a MapsFrom association. */
|
|
2531
|
+
mappingSourceOutboundRoleName: string;
|
|
2532
|
+
/** CK type of the pipeline used to drive validation (defaults to System.Communication/Pipeline). */
|
|
2533
|
+
validationPipelineCkTypeId: string;
|
|
2534
|
+
/** CK type of pipeline executions whose OutputData carries the validation report. */
|
|
2535
|
+
validationExecutionCkTypeId: string;
|
|
2536
|
+
/** Association role linking a PipelineExecution to its Pipeline (defaults to System.Communication/ExecutedPipeline). */
|
|
2537
|
+
validationExecutesRoleId: string;
|
|
2538
|
+
/**
|
|
2539
|
+
* CK types whose entities can act as mapping sources. Used by the Orphan
|
|
2540
|
+
* Sources tab to list unmapped candidates (e.g. `Loxone/Control`,
|
|
2541
|
+
* `MQTT/Topic`, `OpcUa/Node`). Empty list hides the tab.
|
|
2542
|
+
*/
|
|
2543
|
+
sourceCandidateCkTypeIds: string[];
|
|
2544
|
+
}
|
|
2545
|
+
/**
|
|
2546
|
+
* Default configuration: Basic/Tree + Basic/TreeNode driven by System/ParentChild,
|
|
2547
|
+
* mappings via System.Communication/MapsTo.
|
|
2548
|
+
*/
|
|
2549
|
+
declare const DEFAULT_MAPPING_COVERAGE_TREE_CONFIG: MappingCoverageTreeConfig;
|
|
2550
|
+
/**
|
|
2551
|
+
* Reference to a runtime entity used in the coverage tree (root, node, source, target).
|
|
2552
|
+
*/
|
|
2553
|
+
interface CoverageEntityRef {
|
|
2554
|
+
rtId: string;
|
|
2555
|
+
ckTypeId: string;
|
|
2556
|
+
name: string;
|
|
2557
|
+
description?: string;
|
|
2558
|
+
}
|
|
2559
|
+
/**
|
|
2560
|
+
* Coverage validation status calculated by the ValidateDataPointCoverage pipeline
|
|
2561
|
+
* node. Maps to the JSON `status` field in its emitted report.
|
|
2562
|
+
*/
|
|
2563
|
+
type CoverageNodeStatus = 'ok' | 'warning' | 'error' | 'info';
|
|
2564
|
+
/**
|
|
2565
|
+
* Per-node detail loaded from the latest validation execution's OutputData. Held
|
|
2566
|
+
* in a `Map<rtId, …>` by the component and consulted by the data source when
|
|
2567
|
+
* decorating tree items.
|
|
2568
|
+
*/
|
|
2569
|
+
interface CoverageValidationDetail {
|
|
2570
|
+
status: CoverageNodeStatus;
|
|
2571
|
+
/**
|
|
2572
|
+
* Worst status found in the node's subtree (including the node itself).
|
|
2573
|
+
* Used to colour the tree icon so an `info` node with red descendants is
|
|
2574
|
+
* still visually flagged as red — the user sees where to drill in without
|
|
2575
|
+
* expanding every branch.
|
|
2576
|
+
*/
|
|
2577
|
+
subtreeStatus: CoverageNodeStatus;
|
|
2578
|
+
/** Aggregate counts of each status in the subtree (including this node). */
|
|
2579
|
+
subtreeCounts: {
|
|
2580
|
+
ok: number;
|
|
2581
|
+
warning: number;
|
|
2582
|
+
error: number;
|
|
2583
|
+
info: number;
|
|
2584
|
+
};
|
|
2585
|
+
required: string[];
|
|
2586
|
+
recommended: string[];
|
|
2587
|
+
present: string[];
|
|
2588
|
+
missingRequired: string[];
|
|
2589
|
+
missingRecommended: string[];
|
|
2590
|
+
}
|
|
2591
|
+
/**
|
|
2592
|
+
* Payload attached to every tree item in the coverage tree. Stored as the `item`
|
|
2593
|
+
* of a `TreeItemDataTyped<CoverageNodePayload>` so the host can render and react.
|
|
2594
|
+
*/
|
|
2595
|
+
interface CoverageNodePayload extends CoverageEntityRef {
|
|
2596
|
+
/** Number of inbound mappings (DataPointMappings pointing to this node). */
|
|
2597
|
+
mappingCount: number;
|
|
2598
|
+
/** Whether this node has structural children (drives expand chevron). */
|
|
2599
|
+
hasChildren: boolean;
|
|
2600
|
+
/** True for the synthetic root entity (the picked Tree). */
|
|
2601
|
+
isRoot: boolean;
|
|
2602
|
+
/** Validation status from the latest validation report (when loaded). */
|
|
2603
|
+
validationStatus: CoverageNodeStatus | null;
|
|
2604
|
+
/** Full validation detail (missing/present lists) when loaded. */
|
|
2605
|
+
validationDetail: CoverageValidationDetail | null;
|
|
2606
|
+
}
|
|
2607
|
+
type CoverageTreeItem = TreeItemDataTyped<CoverageNodePayload>;
|
|
2608
|
+
/**
|
|
2609
|
+
* Flat view-model for a DataPointMapping shown in the detail panel.
|
|
2610
|
+
*/
|
|
2611
|
+
interface CoverageMappingItem {
|
|
2612
|
+
rtId: string;
|
|
2613
|
+
ckTypeId: string;
|
|
2614
|
+
name: string;
|
|
2615
|
+
enabled: boolean;
|
|
2616
|
+
sourceAttributePath: string;
|
|
2617
|
+
targetAttributePath: string;
|
|
2618
|
+
mappingExpression: string;
|
|
2619
|
+
sourceRtId?: string;
|
|
2620
|
+
sourceCkTypeId?: string;
|
|
2621
|
+
sourceName?: string;
|
|
2622
|
+
}
|
|
2623
|
+
interface CoverageTreeIcons {
|
|
2624
|
+
rootIcon: SVGIcon;
|
|
2625
|
+
nodeIcon: SVGIcon;
|
|
2626
|
+
nodeWithMappingsIcon?: SVGIcon;
|
|
2627
|
+
}
|
|
2628
|
+
/**
|
|
2629
|
+
* Counts emitted by the ValidateDataPointCoverage pipeline node in the
|
|
2630
|
+
* <c>summary</c> object of its JSON report. Mirrors the C# `SummaryCounters`
|
|
2631
|
+
* record so the UI can render the totals without recomputing.
|
|
2632
|
+
*/
|
|
2633
|
+
interface CoverageReportSummary {
|
|
2634
|
+
ok: number;
|
|
2635
|
+
warning: number;
|
|
2636
|
+
error: number;
|
|
2637
|
+
info: number;
|
|
2638
|
+
total: number;
|
|
2639
|
+
}
|
|
2640
|
+
/**
|
|
2641
|
+
* One step in the parent chain of an OrphanCandidate (closest parent first).
|
|
2642
|
+
* Loaded via 3 nested `targets(direction: OUTBOUND, role: $childRoleId)` hops
|
|
2643
|
+
* in `getOrphanCandidates.graphql` so the orphan tab can show where each
|
|
2644
|
+
* source sits in the structural tree without a follow-up query.
|
|
2645
|
+
*/
|
|
2646
|
+
interface OrphanCandidateParent {
|
|
2647
|
+
rtId: string;
|
|
2648
|
+
ckTypeId: string;
|
|
2649
|
+
name: string;
|
|
2650
|
+
}
|
|
2651
|
+
/**
|
|
2652
|
+
* Source candidate listed in the Orphan Sources tab. Carries the inbound
|
|
2653
|
+
* MapsFrom mapping count so the tab can split the catalogue into mapped vs
|
|
2654
|
+
* unmapped entries without an extra round trip.
|
|
2655
|
+
*/
|
|
2656
|
+
interface OrphanCandidate {
|
|
2657
|
+
rtId: string;
|
|
2658
|
+
ckTypeId: string;
|
|
2659
|
+
name: string;
|
|
2660
|
+
description?: string;
|
|
2661
|
+
mappingCount: number;
|
|
2662
|
+
/**
|
|
2663
|
+
* Ancestors via the configured `childRoleId` (default System/ParentChild),
|
|
2664
|
+
* ordered from immediate parent (index 0) to root-most known ancestor.
|
|
2665
|
+
* Empty when the source has no parents reachable within 3 hops or when
|
|
2666
|
+
* the parent walk failed (e.g. `childCkTypeId` did not match the parent's
|
|
2667
|
+
* concrete type). The UI displays this as a breadcrumb under the entity
|
|
2668
|
+
* name; absence is silent (no parent → no breadcrumb).
|
|
2669
|
+
*/
|
|
2670
|
+
parentPath: OrphanCandidateParent[];
|
|
2671
|
+
}
|
|
2672
|
+
|
|
2673
|
+
/**
|
|
2674
|
+
* Generic hierarchy data source for the Mapping Coverage Tree.
|
|
2675
|
+
*
|
|
2676
|
+
* Configure with `setRoot(...)` and `setConfig(...)` before passing to a
|
|
2677
|
+
* `<mm-tree-view>` instance. The data source resolves child nodes through the
|
|
2678
|
+
* configured `childRoleId` / `childCkTypeId` and decorates each item with the
|
|
2679
|
+
* number of inbound mappings (via `mappingRoleId`).
|
|
2680
|
+
*/
|
|
2681
|
+
declare class MappingCoverageTreeDataSource extends HierarchyDataSourceBase<CoverageNodePayload> {
|
|
2682
|
+
private readonly getCoverageNodeGQL;
|
|
2683
|
+
private _root;
|
|
2684
|
+
private _config;
|
|
2685
|
+
private _rootMappingCount;
|
|
2686
|
+
private _validationMap;
|
|
2687
|
+
setRoot(root: CoverageEntityRef | null): void;
|
|
2688
|
+
setConfig(config: MappingCoverageTreeConfig): void;
|
|
2689
|
+
/**
|
|
2690
|
+
* Inject the validation report (rtId → status detail) loaded from the
|
|
2691
|
+
* latest PipelineExecution. Pass an empty map to clear the overlay.
|
|
2692
|
+
* The caller must trigger a tree refresh after updating the map.
|
|
2693
|
+
*/
|
|
2694
|
+
setValidationMap(map: ReadonlyMap<string, CoverageValidationDetail>): void;
|
|
2695
|
+
getValidationMap(): ReadonlyMap<string, CoverageValidationDetail>;
|
|
2696
|
+
getRoot(): CoverageEntityRef | null;
|
|
2697
|
+
getRootMappingCount(): number;
|
|
2698
|
+
fetchRootNodes(): Promise<CoverageTreeItem[]>;
|
|
2699
|
+
fetchChildren(item: TreeItemDataTyped<CoverageNodePayload>): Promise<CoverageTreeItem[]>;
|
|
2700
|
+
/**
|
|
2701
|
+
* Reloads the coverage payload (mapping count / hasChildren flag) for a single
|
|
2702
|
+
* entity. Used after CRUD operations on mappings so the badge updates without
|
|
2703
|
+
* collapsing the surrounding subtree.
|
|
2704
|
+
*/
|
|
2705
|
+
refreshNode(rtId: string, ckTypeId: string): Promise<CoverageNodePayload | null>;
|
|
2706
|
+
private buildItem;
|
|
2707
|
+
private queryNode;
|
|
2708
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MappingCoverageTreeDataSource, never>;
|
|
2709
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<MappingCoverageTreeDataSource>;
|
|
2710
|
+
}
|
|
2711
|
+
|
|
2712
|
+
interface RootCandidate {
|
|
2713
|
+
rtId: string;
|
|
2714
|
+
ckTypeId: string;
|
|
2715
|
+
name: string;
|
|
2716
|
+
description: string;
|
|
2717
|
+
}
|
|
2718
|
+
interface PipelineCandidate {
|
|
2719
|
+
rtId: string;
|
|
2720
|
+
ckTypeId: string;
|
|
2721
|
+
name: string;
|
|
2722
|
+
}
|
|
2723
|
+
/**
|
|
2724
|
+
* A bucket of orphan candidates sharing the same immediate parent. Produced
|
|
2725
|
+
* by `orphanGroupedList` when the "group by parent" toggle is on.
|
|
2726
|
+
*/
|
|
2727
|
+
interface OrphanGroup {
|
|
2728
|
+
/** Stable key — parent's CkTypeId@RtId, or `__no_parent__` for the catch-all bucket. */
|
|
2729
|
+
key: string;
|
|
2730
|
+
/** Human-readable label rendered as the section heading. */
|
|
2731
|
+
label: string;
|
|
2732
|
+
items: OrphanCandidate[];
|
|
2733
|
+
}
|
|
2734
|
+
/**
|
|
2735
|
+
* Master-detail component that visualises mapping coverage on a generic entity
|
|
2736
|
+
* hierarchy (defaults: Basic/Tree + Basic/TreeNode, mappings via
|
|
2737
|
+
* System.Communication/MapsTo). The user picks a root, browses the hierarchy on
|
|
2738
|
+
* the left and inspects / edits DataPointMappings on the right.
|
|
2739
|
+
*
|
|
2740
|
+
* Phase 1: tree + counts + read-only mapping list + CRUD (add new mapping,
|
|
2741
|
+
* relink source via {@link EntitySelectorDialogService}, delete).
|
|
2742
|
+
*/
|
|
2743
|
+
declare class MappingCoverageTreeComponent implements OnInit {
|
|
2744
|
+
private readonly entitySelector;
|
|
2745
|
+
private readonly editDialog;
|
|
2746
|
+
private readonly confirmation;
|
|
2747
|
+
private readonly communicationService;
|
|
2748
|
+
private readonly getEntitiesByCkType;
|
|
2749
|
+
private readonly getNodeMappingsGQL;
|
|
2750
|
+
private readonly getRuntimeEntityByIdGQL;
|
|
2751
|
+
private readonly getLatestValidationGQL;
|
|
2752
|
+
private readonly getOrphanCandidatesGQL;
|
|
2753
|
+
private readonly createEntitiesGQL;
|
|
2754
|
+
private readonly deleteEntitiesGQL;
|
|
2755
|
+
private readonly updateEntitiesGQL;
|
|
2756
|
+
protected readonly dataSource: MappingCoverageTreeDataSource;
|
|
2757
|
+
protected treeView: TreeComponent;
|
|
2758
|
+
/** Optional override for non-default hierarchies / mapping roles. */
|
|
2759
|
+
config: MappingCoverageTreeConfig;
|
|
2760
|
+
/** Pre-select a root on first show (e.g. via route param). */
|
|
2761
|
+
initialRoot: CoverageEntityRef | null;
|
|
2762
|
+
/**
|
|
2763
|
+
* Current tenant ID. Required for the "Run Validation" pipeline trigger
|
|
2764
|
+
* which calls a tenant-scoped REST endpoint on the Communication Controller.
|
|
2765
|
+
* When not provided, the Run button is hidden and the user has to trigger
|
|
2766
|
+
* the pipeline externally.
|
|
2767
|
+
*/
|
|
2768
|
+
tenantId: string | null;
|
|
2769
|
+
readonly entitySelected: EventEmitter<CoverageEntityRef>;
|
|
2770
|
+
protected readonly icons: {
|
|
2771
|
+
refresh: _progress_kendo_svg_icons.SVGIcon;
|
|
2772
|
+
folderOpen: _progress_kendo_svg_icons.SVGIcon;
|
|
2773
|
+
plus: _progress_kendo_svg_icons.SVGIcon;
|
|
2774
|
+
pencil: _progress_kendo_svg_icons.SVGIcon;
|
|
2775
|
+
trash: _progress_kendo_svg_icons.SVGIcon;
|
|
2776
|
+
link: _progress_kendo_svg_icons.SVGIcon;
|
|
2777
|
+
};
|
|
2778
|
+
protected readonly rootCandidates: _angular_core.WritableSignal<RootCandidate[]>;
|
|
2779
|
+
protected readonly selectedRoot: _angular_core.WritableSignal<RootCandidate | null>;
|
|
2780
|
+
protected readonly selectedNode: _angular_core.WritableSignal<CoverageNodePayload | null>;
|
|
2781
|
+
protected readonly mappings: _angular_core.WritableSignal<CoverageMappingItem[]>;
|
|
2782
|
+
protected readonly mappingsLoading: _angular_core.WritableSignal<boolean>;
|
|
2783
|
+
protected readonly mappingsError: _angular_core.WritableSignal<string | null>;
|
|
2784
|
+
protected readonly validationPipelines: _angular_core.WritableSignal<PipelineCandidate[]>;
|
|
2785
|
+
protected readonly selectedPipeline: _angular_core.WritableSignal<PipelineCandidate | null>;
|
|
2786
|
+
protected readonly validationSummary: _angular_core.WritableSignal<CoverageReportSummary | null>;
|
|
2787
|
+
protected readonly validationExecutedAt: _angular_core.WritableSignal<string | null>;
|
|
2788
|
+
protected readonly validationLoading: _angular_core.WritableSignal<boolean>;
|
|
2789
|
+
protected readonly validationError: _angular_core.WritableSignal<string | null>;
|
|
2790
|
+
protected readonly validationRunning: _angular_core.WritableSignal<boolean>;
|
|
2791
|
+
/** Active tab: 'coverage' shows the tree, 'orphans' shows the unmapped sources. */
|
|
2792
|
+
protected readonly activeTab: _angular_core.WritableSignal<"coverage" | "orphans">;
|
|
2793
|
+
/** Source CK type currently inspected for orphans. */
|
|
2794
|
+
protected readonly orphanCkType: _angular_core.WritableSignal<string | null>;
|
|
2795
|
+
protected readonly orphanCandidates: _angular_core.WritableSignal<OrphanCandidate[]>;
|
|
2796
|
+
protected readonly orphanLoading: _angular_core.WritableSignal<boolean>;
|
|
2797
|
+
protected readonly orphanError: _angular_core.WritableSignal<string | null>;
|
|
2798
|
+
protected readonly orphanHideMapped: _angular_core.WritableSignal<boolean>;
|
|
2799
|
+
protected readonly orphanFilteredList: _angular_core.Signal<OrphanCandidate[]>;
|
|
2800
|
+
protected readonly orphanStats: _angular_core.Signal<{
|
|
2801
|
+
total: number;
|
|
2802
|
+
unmapped: number;
|
|
2803
|
+
mapped: number;
|
|
2804
|
+
}>;
|
|
2805
|
+
/**
|
|
2806
|
+
* Which parent CK type to group by, or null for a flat list. We let the user
|
|
2807
|
+
* pick the type instead of just "immediate parent" because Loxone-style trees
|
|
2808
|
+
* include intermediate buckets (Loxone/Category) where each parent rtId is
|
|
2809
|
+
* unique per room — grouping by Category produces dozens of look-alike
|
|
2810
|
+
* sections ("Stellantrieb" appears N times, once per room). The user almost
|
|
2811
|
+
* always wants Loxone/Room or whichever level genuinely partitions the data,
|
|
2812
|
+
* so we expose all parent types seen in the loaded data and let them choose.
|
|
2813
|
+
*/
|
|
2814
|
+
protected readonly orphanGroupParentType: _angular_core.WritableSignal<string | null>;
|
|
2815
|
+
/**
|
|
2816
|
+
* Distinct parent CK type ids found in the loaded candidates, sorted so the
|
|
2817
|
+
* deepest type (root-most ancestor) comes first. For Loxone-Controls this is
|
|
2818
|
+
* Loxone/Room first, then Loxone/Category — usually the deeper one is also
|
|
2819
|
+
* the more meaningful grouping context.
|
|
2820
|
+
*/
|
|
2821
|
+
protected readonly orphanAvailableParentTypes: _angular_core.Signal<string[]>;
|
|
2822
|
+
protected readonly orphanGroupedList: _angular_core.Signal<OrphanGroup[]>;
|
|
2823
|
+
protected readonly summaryLine: _angular_core.Signal<string | null>;
|
|
2824
|
+
ngOnInit(): Promise<void>;
|
|
2825
|
+
protected onPipelineSelectChange(rtId: string): void;
|
|
2826
|
+
protected refreshValidation(): Promise<void>;
|
|
2827
|
+
protected clearValidation(): void;
|
|
2828
|
+
protected selectTab(tab: 'coverage' | 'orphans'): void;
|
|
2829
|
+
protected onOrphanCkTypeChange(ckTypeId: string): void;
|
|
2830
|
+
protected refreshOrphans(): Promise<void>;
|
|
2831
|
+
protected toggleOrphanHideMapped(): void;
|
|
2832
|
+
protected onOrphanGroupParentTypeChange(value: string): void;
|
|
2833
|
+
/**
|
|
2834
|
+
* Returns the parent chain ordered for breadcrumb display: root-most ancestor
|
|
2835
|
+
* first, immediate parent last. `parentPath` itself is stored immediate-first
|
|
2836
|
+
* (so `parentPath[0]` cheaply reports the grouping key), but humans read
|
|
2837
|
+
* breadcrumbs from outside in.
|
|
2838
|
+
*/
|
|
2839
|
+
protected breadcrumbFor(item: OrphanCandidate): OrphanCandidateParent[];
|
|
2840
|
+
/**
|
|
2841
|
+
* Fetches all entities of the selected source CK type and tags each with
|
|
2842
|
+
* its inbound MapsFrom DataPointMapping count. The view filters the list
|
|
2843
|
+
* down to mappingCount === 0 by default, but the user can flip the toggle
|
|
2844
|
+
* to see all candidates (mapped + unmapped) for verification.
|
|
2845
|
+
*/
|
|
2846
|
+
private loadOrphanCandidates;
|
|
2847
|
+
/**
|
|
2848
|
+
* Opens the mapping editor pre-populated with the orphan as source and lets
|
|
2849
|
+
* the user pick the target + attribute paths. Creates the DataPointMapping
|
|
2850
|
+
* entity atomically on save (both MapsFrom and MapsTo wired up in one
|
|
2851
|
+
* mutation). Cancel leaves nothing behind.
|
|
2852
|
+
*/
|
|
2853
|
+
protected createMappingFromOrphan(orphan: OrphanCandidate): Promise<void>;
|
|
2854
|
+
protected trackOrphanByRtId(_index: number, item: OrphanCandidate): string;
|
|
2855
|
+
/**
|
|
2856
|
+
* Triggers the selected validation pipeline on the Communication Controller
|
|
2857
|
+
* and, when it completes, automatically refreshes the coverage report so the
|
|
2858
|
+
* tree colour-codes update. Requires {@link tenantId} to be set.
|
|
2859
|
+
*
|
|
2860
|
+
* Polling strategy: every 1.5 s, fetch the latest execution metadata for the
|
|
2861
|
+
* pipeline. When `dateTime` differs from the snapshot taken before the run,
|
|
2862
|
+
* we know a new execution finished — refresh and stop. Aborts after 60 s.
|
|
2863
|
+
*/
|
|
2864
|
+
protected runValidation(): Promise<void>;
|
|
2865
|
+
private refreshTreeOverlay;
|
|
2866
|
+
private loadValidationPipelines;
|
|
2867
|
+
protected refreshRoots(): Promise<void>;
|
|
2868
|
+
protected pickRoot(): Promise<void>;
|
|
2869
|
+
protected selectRoot(root: RootCandidate): Promise<void>;
|
|
2870
|
+
protected onRootSelectChange(rtId: string): void;
|
|
2871
|
+
protected onNodeSelected(item: TreeItemData): Promise<void>;
|
|
2872
|
+
protected refreshSelected(): Promise<void>;
|
|
2873
|
+
protected addMapping(): Promise<void>;
|
|
2874
|
+
/**
|
|
2875
|
+
* Opens the focused edit dialog for one mapping and, on save, persists
|
|
2876
|
+
* attribute and (if changed) MapsFrom- / MapsTo-association updates in a
|
|
2877
|
+
* single UpdateRuntimeEntities mutation.
|
|
2878
|
+
*/
|
|
2879
|
+
protected editMapping(mapping: CoverageMappingItem): Promise<void>;
|
|
2880
|
+
private saveEditedMapping;
|
|
2881
|
+
protected deleteMapping(mapping: CoverageMappingItem): Promise<void>;
|
|
2882
|
+
protected trackByRtId(_index: number, item: {
|
|
2883
|
+
rtId: string;
|
|
2884
|
+
}): string;
|
|
2885
|
+
private loadRootCandidates;
|
|
2886
|
+
private loadMappingsForSelected;
|
|
2887
|
+
/**
|
|
2888
|
+
* Resolves source entity names by issuing a parallel `getRuntimeEntityById`
|
|
2889
|
+
* per unique (rtId, ckTypeId) pair. Updates the mappings signal in-place so
|
|
2890
|
+
* the detail panel re-renders with names. Failures are silent — the row
|
|
2891
|
+
* still falls back to displaying the source rtId.
|
|
2892
|
+
*/
|
|
2893
|
+
private resolveSourceNames;
|
|
2894
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MappingCoverageTreeComponent, never>;
|
|
2895
|
+
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>;
|
|
2896
|
+
}
|
|
2897
|
+
|
|
2898
|
+
/**
|
|
2899
|
+
* Editable view-model for one DataPointMapping. The fields mirror the CK
|
|
2900
|
+
* attributes (Name, Enabled, SourceAttributePath, MappingExpression,
|
|
2901
|
+
* TargetAttributePath) plus both the MapsFrom source-entity reference and
|
|
2902
|
+
* the MapsTo target-entity reference. The `_originalSource*` and
|
|
2903
|
+
* `_originalTarget*` snapshots let the caller decide whether the
|
|
2904
|
+
* corresponding association needs an update on save.
|
|
2905
|
+
*
|
|
2906
|
+
* `rtId === ''` denotes a not-yet-persisted mapping (orphan-tab "Map…"
|
|
2907
|
+
* flow). The caller branches on this to choose CreateEntities vs.
|
|
2908
|
+
* UpdateRuntimeEntities.
|
|
2909
|
+
*/
|
|
2910
|
+
interface MappingEditValue {
|
|
2911
|
+
rtId: string;
|
|
2912
|
+
ckTypeId: string;
|
|
2913
|
+
name: string;
|
|
2914
|
+
enabled: boolean;
|
|
2915
|
+
sourceRtId?: string;
|
|
2916
|
+
sourceCkTypeId?: string;
|
|
2917
|
+
sourceName?: string;
|
|
2918
|
+
sourceAttributePath: string;
|
|
2919
|
+
mappingExpression: string;
|
|
2920
|
+
/** MapsTo target entity reference. Empty for new mappings until the user picks one. */
|
|
2921
|
+
targetRtId?: string;
|
|
2922
|
+
targetCkTypeId?: string;
|
|
2923
|
+
targetName?: string;
|
|
2924
|
+
targetAttributePath: string;
|
|
2925
|
+
/** Source rtId at dialog-open time — used to detect MapsFrom changes. */
|
|
2926
|
+
_originalSourceRtId?: string;
|
|
2927
|
+
_originalSourceCkTypeId?: string;
|
|
2928
|
+
/** Target rtId at dialog-open time — used to detect MapsTo changes. */
|
|
2929
|
+
_originalTargetRtId?: string;
|
|
2930
|
+
_originalTargetCkTypeId?: string;
|
|
2931
|
+
}
|
|
2932
|
+
interface MappingEditDialogData {
|
|
2933
|
+
mapping: MappingEditValue;
|
|
2934
|
+
title?: string;
|
|
2935
|
+
/**
|
|
2936
|
+
* Default CK type id for the Target Attribute Path autocomplete when the
|
|
2937
|
+
* mapping has no target picked yet. Once the user picks a target entity,
|
|
2938
|
+
* the model's `targetCkTypeId` takes over.
|
|
2939
|
+
* @deprecated Set `mapping.targetCkTypeId` instead; this is kept for
|
|
2940
|
+
* backward compatibility with the original (target-fixed) usage where
|
|
2941
|
+
* the dialog was always opened for a specific tree node.
|
|
2942
|
+
*/
|
|
2943
|
+
targetCkTypeId?: string;
|
|
2944
|
+
}
|
|
2945
|
+
type MappingEditDialogResult = {
|
|
2946
|
+
confirmed: true;
|
|
2947
|
+
mapping: MappingEditValue;
|
|
2948
|
+
} | {
|
|
2949
|
+
confirmed: false;
|
|
2950
|
+
};
|
|
2951
|
+
/**
|
|
2952
|
+
* Focused single-mapping editor dialog. The host renders this via
|
|
2953
|
+
* `MappingEditDialogService.open(...)` and awaits the resulting promise:
|
|
2954
|
+
* `confirmed=true` means the user saved (caller persists), `confirmed=false`
|
|
2955
|
+
* means cancel.
|
|
2956
|
+
*/
|
|
2957
|
+
declare class MappingEditDialogComponent {
|
|
2958
|
+
private readonly windowRef;
|
|
2959
|
+
private readonly entitySelector;
|
|
2960
|
+
private readonly attributeSelectorDialog;
|
|
2961
|
+
private readonly attributeService;
|
|
2962
|
+
protected readonly icons: {
|
|
2963
|
+
link: _progress_kendo_svg_icons.SVGIcon;
|
|
2964
|
+
browse: _progress_kendo_svg_icons.SVGIcon;
|
|
2965
|
+
regenerate: _progress_kendo_svg_icons.SVGIcon;
|
|
2966
|
+
};
|
|
2967
|
+
/** Set by the service before the dialog content is shown. */
|
|
2968
|
+
data: MappingEditDialogData;
|
|
2969
|
+
/** Reactive working copy — the form binds to this. */
|
|
2970
|
+
protected readonly model: _angular_core.WritableSignal<MappingEditValue>;
|
|
2971
|
+
/** Target CK-type attribute catalogue. The source side is now handled by
|
|
2972
|
+
* the dedicated {@link DataPointPickerComponent}, which loads runtime state
|
|
2973
|
+
* names from the entity itself instead of CK schema attributes. */
|
|
2974
|
+
private readonly targetAttributes;
|
|
2975
|
+
private readonly targetFilter;
|
|
2976
|
+
protected readonly targetAttributesLoading: _angular_core.WritableSignal<boolean>;
|
|
2977
|
+
protected readonly targetAttributeList: _angular_core.Signal<AttributeItem[]>;
|
|
2978
|
+
/**
|
|
2979
|
+
* Effective target CK type id — prefers the value picked by the user via
|
|
2980
|
+
* {@link pickTarget}; falls back to the optional {@link MappingEditDialogData.targetCkTypeId}
|
|
2981
|
+
* legacy default. Drives the Target Attribute Path autocomplete dropdown.
|
|
2982
|
+
*/
|
|
2983
|
+
protected readonly effectiveTargetCkTypeId: _angular_core.Signal<string | undefined>;
|
|
2984
|
+
initialise(data: MappingEditDialogData): void;
|
|
2985
|
+
/**
|
|
2986
|
+
* Enabled when at least one labelled side of the mapping is filled enough
|
|
2987
|
+
* to produce a meaningful name. We require *some* identifying info on each
|
|
2988
|
+
* end so the generated name isn't just "(unset) → (unset)".
|
|
2989
|
+
*/
|
|
2990
|
+
protected canGenerateName(): boolean;
|
|
2991
|
+
/**
|
|
2992
|
+
* Writes a deterministic, human-readable name into the mapping based on the
|
|
2993
|
+
* current source/target selection. Format:
|
|
2994
|
+
* `{sourceName} {sourcePath} → {targetName} {targetPath}`
|
|
2995
|
+
* Falls back to rtId fragments when names are missing. The user can still
|
|
2996
|
+
* edit the result freely — this just gives them a sensible starting point
|
|
2997
|
+
* so they don't have to invent a name from scratch when finishing an
|
|
2998
|
+
* orphan-tab mapping.
|
|
2999
|
+
*/
|
|
3000
|
+
protected generateName(): void;
|
|
3001
|
+
protected isValid(): boolean;
|
|
3002
|
+
protected pickSource(): Promise<void>;
|
|
3003
|
+
protected pickTarget(): Promise<void>;
|
|
3004
|
+
protected onSourceAttributePathChange(value: string): void;
|
|
3005
|
+
protected onTargetAttributePathChange(value: string | null): void;
|
|
3006
|
+
protected onTargetAttributeFilter(filter: string): void;
|
|
3007
|
+
protected onSave(): void;
|
|
3008
|
+
protected onCancel(): void;
|
|
3009
|
+
/**
|
|
3010
|
+
* Fetches the CK-schema attribute catalogue for the target side and stores
|
|
3011
|
+
* it for the target combobox dropdown. Navigation properties are excluded —
|
|
3012
|
+
* they drown out the direct attributes; the browse button below opens the
|
|
3013
|
+
* full {@link AttributeSelectorDialog} for users who need a deep path.
|
|
3014
|
+
*
|
|
3015
|
+
* (The source side now uses {@link DataPointPickerComponent}, which queries
|
|
3016
|
+
* the runtime entity's States RecordArray directly — runtime data points,
|
|
3017
|
+
* not CK schema attributes, are what the runtime engine matches against.)
|
|
3018
|
+
*/
|
|
3019
|
+
private loadTargetAttributes;
|
|
3020
|
+
protected browseTargetAttribute(): Promise<void>;
|
|
3021
|
+
private emptyValue;
|
|
3022
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MappingEditDialogComponent, never>;
|
|
3023
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MappingEditDialogComponent, "mm-mapping-edit-dialog", never, {}, {}, never, never, true, never>;
|
|
3024
|
+
}
|
|
3025
|
+
|
|
3026
|
+
declare class MappingEditDialogService {
|
|
3027
|
+
private readonly windowService;
|
|
3028
|
+
private readonly windowStateService;
|
|
3029
|
+
/**
|
|
3030
|
+
* Opens the focused mapping editor as a resizable Kendo Window and returns
|
|
3031
|
+
* the user's choice. The window's size is persisted across sessions via
|
|
3032
|
+
* `WindowStateService` (same pattern as the AttributeSelectorDialog and the
|
|
3033
|
+
* EntitySelectDialog).
|
|
3034
|
+
*
|
|
3035
|
+
* The host is responsible for persisting changes when `confirmed=true` — the
|
|
3036
|
+
* dialog itself only mutates a local copy.
|
|
3037
|
+
*/
|
|
3038
|
+
open(data: MappingEditDialogData): Promise<MappingEditDialogResult>;
|
|
3039
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MappingEditDialogService, never>;
|
|
3040
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<MappingEditDialogService>;
|
|
2215
3041
|
}
|
|
2216
3042
|
|
|
2217
3043
|
/**
|
|
@@ -2264,11 +3090,11 @@ declare class RuntimeEntityVariableDialogComponent {
|
|
|
2264
3090
|
protected readonly trashIcon: _progress_kendo_svg_icons.SVGIcon;
|
|
2265
3091
|
/** Data passed to the dialog (set by service) */
|
|
2266
3092
|
data: RuntimeEntityVariableDialogData;
|
|
2267
|
-
readonly selectedCkType:
|
|
2268
|
-
readonly selectedEntity:
|
|
2269
|
-
readonly variableMappings:
|
|
2270
|
-
readonly entityDataSource:
|
|
2271
|
-
readonly entityDialogDataSource:
|
|
3093
|
+
readonly selectedCkType: _angular_core.WritableSignal<CkTypeSelectorItem | null>;
|
|
3094
|
+
readonly selectedEntity: _angular_core.WritableSignal<RuntimeEntityItem | null>;
|
|
3095
|
+
readonly variableMappings: _angular_core.WritableSignal<RuntimeEntityVariableMapping[]>;
|
|
3096
|
+
readonly entityDataSource: _angular_core.Signal<RuntimeEntitySelectDataSource | null>;
|
|
3097
|
+
readonly entityDialogDataSource: _angular_core.Signal<RuntimeEntityDialogDataSource | null>;
|
|
2272
3098
|
private readonly VALID_NAME_REGEX;
|
|
2273
3099
|
onCkTypeSelected(ckType: CkTypeSelectorItem): void;
|
|
2274
3100
|
onCkTypeCleared(): void;
|
|
@@ -2284,8 +3110,8 @@ declare class RuntimeEntityVariableDialogComponent {
|
|
|
2284
3110
|
private addAttributeMappings;
|
|
2285
3111
|
private attributePathToVariableName;
|
|
2286
3112
|
private isDuplicateName;
|
|
2287
|
-
static ɵfac:
|
|
2288
|
-
static ɵcmp:
|
|
3113
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RuntimeEntityVariableDialogComponent, never>;
|
|
3114
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<RuntimeEntityVariableDialogComponent, "mm-runtime-entity-variable-dialog", never, {}, {}, never, never, true, never>;
|
|
2289
3115
|
}
|
|
2290
3116
|
|
|
2291
3117
|
interface RuntimeEntityVariableResult {
|
|
@@ -2301,8 +3127,8 @@ declare class RuntimeEntityVariableDialogService {
|
|
|
2301
3127
|
* @returns Promise with confirmation status and dialog result
|
|
2302
3128
|
*/
|
|
2303
3129
|
openRuntimeEntityVariableDialog(data?: RuntimeEntityVariableDialogData): Promise<RuntimeEntityVariableResult>;
|
|
2304
|
-
static ɵfac:
|
|
2305
|
-
static ɵprov:
|
|
3130
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RuntimeEntityVariableDialogService, never>;
|
|
3131
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<RuntimeEntityVariableDialogService>;
|
|
2306
3132
|
}
|
|
2307
3133
|
|
|
2308
3134
|
declare class TenantSwitcherComponent {
|
|
@@ -2322,8 +3148,8 @@ declare class TenantSwitcherComponent {
|
|
|
2322
3148
|
onSelectTenant(tenantId: string): void;
|
|
2323
3149
|
onRefresh(event: MouseEvent): void;
|
|
2324
3150
|
private contains;
|
|
2325
|
-
static ɵfac:
|
|
2326
|
-
static ɵcmp:
|
|
3151
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TenantSwitcherComponent, never>;
|
|
3152
|
+
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
3153
|
}
|
|
2328
3154
|
|
|
2329
3155
|
/**
|
|
@@ -2332,5 +3158,5 @@ declare class TenantSwitcherComponent {
|
|
|
2332
3158
|
*/
|
|
2333
3159
|
declare function provideOctoUi(): EnvironmentProviders;
|
|
2334
3160
|
|
|
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 };
|
|
3161
|
+
export { AssociationValidationService, AttributeSelectorDialogComponent, AttributeSelectorDialogService, AttributeSortSelectorDialogComponent, AttributeSortSelectorDialogService, AttributeValueTypeDto, CkTypeSelectorDialogComponent, CkTypeSelectorDialogService, CkTypeSelectorInputComponent, DEFAULT_CK_TYPE_SELECTOR_DIALOG_MESSAGES, DEFAULT_CK_TYPE_SELECTOR_INPUT_MESSAGES, DEFAULT_DATA_POINT, DEFAULT_MAPPING_COVERAGE_TREE_CONFIG, DEFAULT_PROPERTY_GRID_MESSAGES, 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 };
|
|
3162
|
+
export type { AttributeItemLike, AttributeSelectorDialogData, AttributeSelectorDialogResult, AttributeSelectorResult, AttributeSortItem, AttributeSortSelectorDialogData, AttributeSortSelectorDialogResult, AttributeSortSelectorResult, BinaryDownloadEvent, BrowserItem, BrowserState, CkAssociationRole, CkTypeSelectorDialogData, CkTypeSelectorDialogMessages, CkTypeSelectorDialogResult, CkTypeSelectorInputMessages, CkTypeSelectorResult, CoverageEntityRef, CoverageMappingItem, CoverageNodePayload, CoverageTreeIcons, CoverageTreeItem, DataPointMappingItem, DataPointMappingOverviewItem, EntitySelectorDialogData, EntitySelectorDialogResult, EntitySelectorResult, ExpressionValidationResult, ExpressionValidatorFn, FieldFilterItem, FilterVariable, MappingCoverageTreeConfig, MappingEditDialogData, MappingEditDialogResult, MappingEditValue, MappingOverviewSummary, MoveValidationResult, PropertyChangeEvent, PropertyGridConfig, PropertyGridItem, PropertyGridMessages, RtEntityId, RuntimeBrowserMessages, RuntimeBrowserRouteOptions, RuntimeEntityVariableDialogData, RuntimeEntityVariableDialogResult, RuntimeEntityVariableMapping, RuntimeEntityVariableResult, SortOption, ValidationMessage };
|