ngx-dynamic-entity-builder 1.0.0 → 1.2.0
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/README.md +75 -54
- package/esm2022/lib/builder-store.service.mjs +166 -32
- package/esm2022/lib/clone.mjs +1 -1
- package/esm2022/lib/components/entity-builder-tree-node.component.mjs +21 -3
- package/esm2022/lib/components/entity-reference-config.component.mjs +301 -301
- package/esm2022/lib/components/field-inspector.component.mjs +3 -3
- package/esm2022/lib/components/field-palette.component.mjs +33 -33
- package/esm2022/lib/components/field-rules-list.component.mjs +157 -157
- package/esm2022/lib/components/referenced-field-config.component.mjs +8 -2
- package/esm2022/lib/components/rule-form.component.mjs +1 -1
- package/esm2022/lib/components/tab-manager.component.mjs +301 -288
- package/esm2022/lib/entity-builder.component.mjs +27 -4
- package/esm2022/public-api.mjs +1 -2
- package/fesm2022/ngx-dynamic-entity-builder.mjs +999 -926
- package/fesm2022/ngx-dynamic-entity-builder.mjs.map +1 -1
- package/lib/builder-store.service.d.ts +41 -0
- package/lib/components/referenced-field-config.component.d.ts +6 -0
- package/lib/components/tab-manager.component.d.ts +11 -2
- package/lib/entity-builder.component.d.ts +12 -1
- package/package.json +22 -13
- package/public-api.d.ts +0 -1
- package/esm2022/lib/components/connection-source-config.component.mjs +0 -121
- package/lib/components/connection-source-config.component.d.ts +0 -16
|
@@ -19,11 +19,19 @@ export declare class BuilderStore {
|
|
|
19
19
|
*/
|
|
20
20
|
private readonly manualIds;
|
|
21
21
|
private readonly _isDirty;
|
|
22
|
+
/**
|
|
23
|
+
* Roles of the person using the builder — distinct from `availableRoles`, which is the
|
|
24
|
+
* vocabulary a schema may reference. Needed so the SYSTEM_DEFAULT_CAN_EDIT predicate can
|
|
25
|
+
* be asked a real question; it was previously called with a hardcoded empty array, which
|
|
26
|
+
* made any role-checking predicate answer false for everyone.
|
|
27
|
+
*/
|
|
28
|
+
private readonly _userRoles;
|
|
22
29
|
readonly config: import("@angular/core").Signal<EntityFormConfig>;
|
|
23
30
|
readonly selectedFieldId: import("@angular/core").Signal<string>;
|
|
24
31
|
readonly activeLanguage: import("@angular/core").Signal<string>;
|
|
25
32
|
readonly rules: import("@angular/core").Signal<FormRule[]>;
|
|
26
33
|
readonly isDirty: import("@angular/core").Signal<boolean>;
|
|
34
|
+
readonly userRoles: import("@angular/core").Signal<string[]>;
|
|
27
35
|
readonly tabs: import("@angular/core").Signal<NestedTabConfig[]>;
|
|
28
36
|
readonly fields: import("@angular/core").Signal<NestedFieldConfig[]>;
|
|
29
37
|
readonly selectedField: import("@angular/core").Signal<NestedFieldConfig>;
|
|
@@ -39,7 +47,27 @@ export declare class BuilderStore {
|
|
|
39
47
|
setMaskData(mask: boolean): void;
|
|
40
48
|
setPermission(action: keyof EntityPermissions, roles: string[]): void;
|
|
41
49
|
setActiveLanguage(language: string): void;
|
|
50
|
+
/** Roles of the person using the builder, for SYSTEM_DEFAULT_CAN_EDIT. */
|
|
51
|
+
setUserRoles(roles: string[]): void;
|
|
42
52
|
private getAllFields;
|
|
53
|
+
/**
|
|
54
|
+
* Every tab in the tree, flattened.
|
|
55
|
+
*
|
|
56
|
+
* The structural operations below used to iterate `draft.tabs` directly, which is only
|
|
57
|
+
* the top level. A field on a sub-tab could be selected and edited but never removed,
|
|
58
|
+
* duplicated, moved or reordered — the builder could author nested configs it was then
|
|
59
|
+
* unable to restructure, which is the worst possible state for an authoring tool.
|
|
60
|
+
*/
|
|
61
|
+
private flattenTabs;
|
|
62
|
+
/**
|
|
63
|
+
* Every field id in the config, including `group`/`array` children.
|
|
64
|
+
*
|
|
65
|
+
* Id uniqueness is a whole-config invariant, not a per-tab one: rules, `showWhen`
|
|
66
|
+
* conditions and `autoPatch` mappings all address fields by bare id, so two fields
|
|
67
|
+
* sharing an id anywhere in the tree interfere with each other. Uniqueness checks must
|
|
68
|
+
* therefore see deeper than `fields()`, which stops at a tab's own fields.
|
|
69
|
+
*/
|
|
70
|
+
private allFieldIds;
|
|
43
71
|
private findFieldInTabs;
|
|
44
72
|
addField(type: RichFieldType, targetTabId?: string): string;
|
|
45
73
|
updateField(id: string, patch: Partial<NestedFieldConfig>): void;
|
|
@@ -158,6 +186,19 @@ export declare class BuilderStore {
|
|
|
158
186
|
moveTab(id: string, direction: -1 | 1): void;
|
|
159
187
|
exportConfig(): EntityFormConfig;
|
|
160
188
|
private mutate;
|
|
189
|
+
/**
|
|
190
|
+
* Replace one field, copying only the objects on the path to it.
|
|
191
|
+
*
|
|
192
|
+
* `mutate` deep-clones the entire config, which is right for a structural edit but wrong
|
|
193
|
+
* for the two setters bound to keystroke events: typing a label allocated a full copy of
|
|
194
|
+
* the config per character. Here every tab and field outside the target's chain is reused
|
|
195
|
+
* by reference, so the cost is proportional to nesting depth rather than config size —
|
|
196
|
+
* while the parts that did change are still fresh objects, so change detection and the
|
|
197
|
+
* signal both see a new identity.
|
|
198
|
+
*
|
|
199
|
+
* Returns without touching anything when the field is not found.
|
|
200
|
+
*/
|
|
201
|
+
private mutateField;
|
|
161
202
|
private uniqueId;
|
|
162
203
|
private validate;
|
|
163
204
|
static ɵfac: i0.ɵɵFactoryDeclaration<BuilderStore, never>;
|
|
@@ -10,6 +10,12 @@ export declare class ReferencedFieldConfigComponent {
|
|
|
10
10
|
protected updateEntityKey(field: NestedFieldConfig, key: string): void;
|
|
11
11
|
protected updateFieldId(field: NestedFieldConfig, fieldId: string): void;
|
|
12
12
|
protected syncWithSource(field: NestedFieldConfig): Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* Both callers pass the id of the field they just edited. This used to ignore that
|
|
15
|
+
* argument and read `store.selectedField()` instead, so whenever the edited field was not
|
|
16
|
+
* the selected one it checked drift against the wrong field's source entity — or bailed
|
|
17
|
+
* out entirely if nothing was selected.
|
|
18
|
+
*/
|
|
13
19
|
private checkDriftForField;
|
|
14
20
|
private findField;
|
|
15
21
|
private findFieldInList;
|
|
@@ -1,8 +1,17 @@
|
|
|
1
|
-
import { InjectionToken } from '@angular/core';
|
|
2
1
|
import type { NestedTabConfig } from '@dynamic-entity/core';
|
|
2
|
+
import { SYSTEM_DEFAULT_CAN_EDIT } from 'ngx-dynamic-entity';
|
|
3
3
|
import { BuilderStore } from '../builder-store.service';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
|
-
|
|
5
|
+
/**
|
|
6
|
+
* Re-exported so existing imports from this package keep working.
|
|
7
|
+
*
|
|
8
|
+
* This file used to declare its own `new InjectionToken('SYSTEM_DEFAULT_CAN_EDIT')` while
|
|
9
|
+
* `ngx-dynamic-entity` exported another under the same name. InjectionToken identity is by
|
|
10
|
+
* object reference, so a consumer providing the renderer's — the documented one — was
|
|
11
|
+
* providing a token nothing injected, and the predicate silently never ran. One token now,
|
|
12
|
+
* defined in the lower-level package that both depend on.
|
|
13
|
+
*/
|
|
14
|
+
export { SYSTEM_DEFAULT_CAN_EDIT };
|
|
6
15
|
/**
|
|
7
16
|
* TabManagerComponent — add / rename / reorder / remove tabs & sub-tabs with systemDefault protection.
|
|
8
17
|
*/
|
|
@@ -8,12 +8,23 @@ import * as i0 from "@angular/core";
|
|
|
8
8
|
*/
|
|
9
9
|
export declare class EntityBuilderComponent implements OnChanges {
|
|
10
10
|
protected readonly store: BuilderStore;
|
|
11
|
+
/**
|
|
12
|
+
* Optional: only apps that registered a CONFIG_SOURCE have one. Used to drop the cached
|
|
13
|
+
* copy of a config the moment it is edited — see `doSave`.
|
|
14
|
+
*/
|
|
15
|
+
private readonly configSource;
|
|
11
16
|
/** Existing config to edit. When omitted, the builder starts blank. */
|
|
12
17
|
config?: EntityFormConfig;
|
|
13
18
|
/** Languages available for label/placeholder editing. First entry is the default. */
|
|
14
19
|
languages: string[];
|
|
15
20
|
/** Optional role list — enables multi-select role pickers for RBAC instead of free text. */
|
|
16
21
|
availableRoles: string[];
|
|
22
|
+
/**
|
|
23
|
+
* Roles of the person using the builder. Distinct from `availableRoles`, which is the
|
|
24
|
+
* vocabulary a schema may reference. Passed to the `SYSTEM_DEFAULT_CAN_EDIT` predicate so
|
|
25
|
+
* it can decide whether this user may edit system-default tabs.
|
|
26
|
+
*/
|
|
27
|
+
userRoles: string[];
|
|
17
28
|
/** Optional common-module definitions for module tabs; defaults to the built-in list from core. */
|
|
18
29
|
commonModules: readonly CommonModuleEntry[];
|
|
19
30
|
/** Emitted on every change to the working config. */
|
|
@@ -38,5 +49,5 @@ export declare class EntityBuilderComponent implements OnChanges {
|
|
|
38
49
|
/** Parse a comma-separated role string into a trimmed, de-duplicated array. */
|
|
39
50
|
protected setRolesFromText(action: keyof EntityPermissions, text: string): void;
|
|
40
51
|
static ɵfac: i0.ɵɵFactoryDeclaration<EntityBuilderComponent, never>;
|
|
41
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<EntityBuilderComponent, "ngx-entity-builder", never, { "config": { "alias": "config"; "required": false; }; "languages": { "alias": "languages"; "required": false; }; "availableRoles": { "alias": "availableRoles"; "required": false; }; "commonModules": { "alias": "commonModules"; "required": false; }; }, { "configChange": "configChange"; "save": "save"; }, never, ["[ngxBuilderPreview]"], true, never>;
|
|
52
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<EntityBuilderComponent, "ngx-entity-builder", never, { "config": { "alias": "config"; "required": false; }; "languages": { "alias": "languages"; "required": false; }; "availableRoles": { "alias": "availableRoles"; "required": false; }; "userRoles": { "alias": "userRoles"; "required": false; }; "commonModules": { "alias": "commonModules"; "required": false; }; }, { "configChange": "configChange"; "save": "save"; }, never, ["[ngxBuilderPreview]"], true, never>;
|
|
42
53
|
}
|
package/package.json
CHANGED
|
@@ -1,19 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ngx-dynamic-entity-builder",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "Angular
|
|
5
|
-
"dependencies": {
|
|
6
|
-
"ngx-dynamic-entity": "*",
|
|
7
|
-
"tslib": "^2.3.0"
|
|
8
|
-
},
|
|
3
|
+
"version": "1.2.0",
|
|
4
|
+
"description": "Angular standalone visual builder for authoring dynamic-entity EntityConfig (fields, tabs, validators, RBAC).",
|
|
9
5
|
"peerDependencies": {
|
|
10
|
-
"@angular/cdk": "^17.0.0",
|
|
11
|
-
"@angular/common": "^17.0.0",
|
|
12
|
-
"@angular/core": "^17.0.0",
|
|
13
|
-
"@angular/forms": "^17.0.0",
|
|
14
|
-
"@angular/material": "^17.0.0",
|
|
15
|
-
"@dynamic-entity/core": "^1.
|
|
16
|
-
"ngx-dynamic-entity": "^1.
|
|
6
|
+
"@angular/cdk": "^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0",
|
|
7
|
+
"@angular/common": "^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0",
|
|
8
|
+
"@angular/core": "^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0",
|
|
9
|
+
"@angular/forms": "^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0",
|
|
10
|
+
"@angular/material": "^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0",
|
|
11
|
+
"@dynamic-entity/core": "^1.2.0",
|
|
12
|
+
"ngx-dynamic-entity": "^1.2.0",
|
|
17
13
|
"rxjs": "^7.0.0"
|
|
18
14
|
},
|
|
19
15
|
"keywords": [
|
|
@@ -26,6 +22,16 @@
|
|
|
26
22
|
],
|
|
27
23
|
"license": "MIT",
|
|
28
24
|
"sideEffects": false,
|
|
25
|
+
"repository": {
|
|
26
|
+
"type": "git",
|
|
27
|
+
"url": "git+https://github.com/berserker5619/Dynamic-Entity.git",
|
|
28
|
+
"directory": "packages/ngx-dynamic-entity-builder"
|
|
29
|
+
},
|
|
30
|
+
"homepage": "https://github.com/berserker5619/Dynamic-Entity/tree/main/packages/ngx-dynamic-entity-builder#readme",
|
|
31
|
+
"bugs": {
|
|
32
|
+
"url": "https://github.com/berserker5619/Dynamic-Entity/issues"
|
|
33
|
+
},
|
|
34
|
+
"author": "Nizamudeen",
|
|
29
35
|
"module": "fesm2022/ngx-dynamic-entity-builder.mjs",
|
|
30
36
|
"typings": "index.d.ts",
|
|
31
37
|
"exports": {
|
|
@@ -38,5 +44,8 @@
|
|
|
38
44
|
"esm": "./esm2022/ngx-dynamic-entity-builder.mjs",
|
|
39
45
|
"default": "./fesm2022/ngx-dynamic-entity-builder.mjs"
|
|
40
46
|
}
|
|
47
|
+
},
|
|
48
|
+
"dependencies": {
|
|
49
|
+
"tslib": "^2.3.0"
|
|
41
50
|
}
|
|
42
51
|
}
|
package/public-api.d.ts
CHANGED
|
@@ -5,7 +5,6 @@ export * from './lib/components/tab-manager.component';
|
|
|
5
5
|
export * from './lib/components/rule-form.component';
|
|
6
6
|
export * from './lib/components/field-rules-list.component';
|
|
7
7
|
export * from './lib/components/entity-reference-config.component';
|
|
8
|
-
export * from './lib/components/connection-source-config.component';
|
|
9
8
|
export * from './lib/components/entity-builder-canvas.component';
|
|
10
9
|
export * from './lib/components/entity-builder-tree-node.component';
|
|
11
10
|
export * from './lib/builder-store.service';
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
import { Component, computed, inject } from '@angular/core';
|
|
2
|
-
import { CommonModule } from '@angular/common';
|
|
3
|
-
import { FormsModule } from '@angular/forms';
|
|
4
|
-
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
5
|
-
import { MatInputModule } from '@angular/material/input';
|
|
6
|
-
import { MatSelectModule } from '@angular/material/select';
|
|
7
|
-
import { BuilderStore } from '../builder-store.service';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "@angular/forms";
|
|
10
|
-
import * as i2 from "@angular/material/form-field";
|
|
11
|
-
import * as i3 from "@angular/material/input";
|
|
12
|
-
/**
|
|
13
|
-
* ConnectionSourceConfigComponent — allows configuring connection source settings
|
|
14
|
-
* for an entity or field (Phase 7.2).
|
|
15
|
-
*/
|
|
16
|
-
export class ConnectionSourceConfigComponent {
|
|
17
|
-
store = inject(BuilderStore);
|
|
18
|
-
field = computed(() => this.store.selectedField());
|
|
19
|
-
connectionSourceEntity(field) {
|
|
20
|
-
return field.connectionSource?.entity ?? '';
|
|
21
|
-
}
|
|
22
|
-
setConnectionSourceEntity(field, entity) {
|
|
23
|
-
const trimmed = entity.trim();
|
|
24
|
-
const existing = field.connectionSource ?? {};
|
|
25
|
-
if (!trimmed && !existing.targetField) {
|
|
26
|
-
this.store.updateField(field.id, { connectionSource: undefined });
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
this.store.updateField(field.id, {
|
|
30
|
-
connectionSource: { ...existing, entity: trimmed },
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
connectionTargetField(field) {
|
|
35
|
-
return field.connectionSource?.targetField ?? '';
|
|
36
|
-
}
|
|
37
|
-
setConnectionTargetField(field, targetField) {
|
|
38
|
-
const trimmed = targetField.trim();
|
|
39
|
-
const existing = field.connectionSource ?? {};
|
|
40
|
-
if (!trimmed && !existing.entity) {
|
|
41
|
-
this.store.updateField(field.id, { connectionSource: undefined });
|
|
42
|
-
}
|
|
43
|
-
else {
|
|
44
|
-
this.store.updateField(field.id, {
|
|
45
|
-
connectionSource: { ...existing, targetField: trimmed },
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ConnectionSourceConfigComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
50
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ConnectionSourceConfigComponent, isStandalone: true, selector: "ngx-connection-source-config", ngImport: i0, template: `
|
|
51
|
-
@if (field(); as f) {
|
|
52
|
-
<div class="deb-connection-source">
|
|
53
|
-
<span class="deb-section-title">Connection Source</span>
|
|
54
|
-
<mat-form-field appearance="outline" subscriptSizing="dynamic" class="deb-full">
|
|
55
|
-
<mat-label>Source Entity</mat-label>
|
|
56
|
-
<input
|
|
57
|
-
matInput
|
|
58
|
-
data-testid="connection-source-entity"
|
|
59
|
-
[ngModel]="connectionSourceEntity(f)"
|
|
60
|
-
(ngModelChange)="setConnectionSourceEntity(f, $event)"
|
|
61
|
-
placeholder="e.g. organizations"
|
|
62
|
-
/>
|
|
63
|
-
</mat-form-field>
|
|
64
|
-
|
|
65
|
-
<mat-form-field appearance="outline" subscriptSizing="dynamic" class="deb-full">
|
|
66
|
-
<mat-label>Target Field ID</mat-label>
|
|
67
|
-
<input
|
|
68
|
-
matInput
|
|
69
|
-
data-testid="connection-target-field"
|
|
70
|
-
[ngModel]="connectionTargetField(f)"
|
|
71
|
-
(ngModelChange)="setConnectionTargetField(f, $event)"
|
|
72
|
-
placeholder="e.g. companyId"
|
|
73
|
-
/>
|
|
74
|
-
</mat-form-field>
|
|
75
|
-
</div>
|
|
76
|
-
}
|
|
77
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }] });
|
|
78
|
-
}
|
|
79
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ConnectionSourceConfigComponent, decorators: [{
|
|
80
|
-
type: Component,
|
|
81
|
-
args: [{
|
|
82
|
-
selector: 'ngx-connection-source-config',
|
|
83
|
-
standalone: true,
|
|
84
|
-
imports: [
|
|
85
|
-
CommonModule,
|
|
86
|
-
FormsModule,
|
|
87
|
-
MatFormFieldModule,
|
|
88
|
-
MatInputModule,
|
|
89
|
-
MatSelectModule,
|
|
90
|
-
],
|
|
91
|
-
template: `
|
|
92
|
-
@if (field(); as f) {
|
|
93
|
-
<div class="deb-connection-source">
|
|
94
|
-
<span class="deb-section-title">Connection Source</span>
|
|
95
|
-
<mat-form-field appearance="outline" subscriptSizing="dynamic" class="deb-full">
|
|
96
|
-
<mat-label>Source Entity</mat-label>
|
|
97
|
-
<input
|
|
98
|
-
matInput
|
|
99
|
-
data-testid="connection-source-entity"
|
|
100
|
-
[ngModel]="connectionSourceEntity(f)"
|
|
101
|
-
(ngModelChange)="setConnectionSourceEntity(f, $event)"
|
|
102
|
-
placeholder="e.g. organizations"
|
|
103
|
-
/>
|
|
104
|
-
</mat-form-field>
|
|
105
|
-
|
|
106
|
-
<mat-form-field appearance="outline" subscriptSizing="dynamic" class="deb-full">
|
|
107
|
-
<mat-label>Target Field ID</mat-label>
|
|
108
|
-
<input
|
|
109
|
-
matInput
|
|
110
|
-
data-testid="connection-target-field"
|
|
111
|
-
[ngModel]="connectionTargetField(f)"
|
|
112
|
-
(ngModelChange)="setConnectionTargetField(f, $event)"
|
|
113
|
-
placeholder="e.g. companyId"
|
|
114
|
-
/>
|
|
115
|
-
</mat-form-field>
|
|
116
|
-
</div>
|
|
117
|
-
}
|
|
118
|
-
`,
|
|
119
|
-
}]
|
|
120
|
-
}] });
|
|
121
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdGlvbi1zb3VyY2UtY29uZmlnLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jb25uZWN0aW9uLXNvdXJjZS1jb25maWcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7OztBQUV4RDs7O0dBR0c7QUF3Q0gsTUFBTSxPQUFPLCtCQUErQjtJQUN2QixLQUFLLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzdCLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBRTVELHNCQUFzQixDQUFDLEtBQVU7UUFDekMsT0FBTyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRVMseUJBQXlCLENBQUMsS0FBVSxFQUFFLE1BQWM7UUFDNUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzlCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFTLENBQUMsQ0FBQztRQUMzRSxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUU7Z0JBQy9CLGdCQUFnQixFQUFFLEVBQUUsR0FBRyxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRTthQUM1QyxDQUFDLENBQUM7UUFDWixDQUFDO0lBQ0gsQ0FBQztJQUVTLHFCQUFxQixDQUFDLEtBQVU7UUFDeEMsT0FBTyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxJQUFJLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBRVMsd0JBQXdCLENBQUMsS0FBVSxFQUFFLFdBQW1CO1FBQ2hFLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNuQyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDO1FBQzlDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBUyxDQUFDLENBQUM7UUFDM0UsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFO2dCQUMvQixnQkFBZ0IsRUFBRSxFQUFFLEdBQUcsUUFBUSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUU7YUFDakQsQ0FBQyxDQUFDO1FBQ1osQ0FBQztJQUNILENBQUM7d0dBbENVLCtCQUErQjs0RkFBL0IsK0JBQStCLHdGQTdCaEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJCVCwyREFqQ0MsWUFBWSw4QkFDWixXQUFXLDhtQkFDWCxrQkFBa0IsMFNBQ2xCLGNBQWMsMFdBQ2QsZUFBZTs7NEZBK0JOLCtCQUErQjtrQkF2QzNDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDhCQUE4QjtvQkFDeEMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsa0JBQWtCO3dCQUNsQixjQUFjO3dCQUNkLGVBQWU7cUJBQ2hCO29CQUNELFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJUO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IEJ1aWxkZXJTdG9yZSB9IGZyb20gJy4uL2J1aWxkZXItc3RvcmUuc2VydmljZSc7XG5cbi8qKlxuICogQ29ubmVjdGlvblNvdXJjZUNvbmZpZ0NvbXBvbmVudCDigJQgYWxsb3dzIGNvbmZpZ3VyaW5nIGNvbm5lY3Rpb24gc291cmNlIHNldHRpbmdzXG4gKiBmb3IgYW4gZW50aXR5IG9yIGZpZWxkIChQaGFzZSA3LjIpLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtY29ubmVjdGlvbi1zb3VyY2UtY29uZmlnJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIEBpZiAoZmllbGQoKTsgYXMgZikge1xuICAgICAgPGRpdiBjbGFzcz1cImRlYi1jb25uZWN0aW9uLXNvdXJjZVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImRlYi1zZWN0aW9uLXRpdGxlXCI+Q29ubmVjdGlvbiBTb3VyY2U8L3NwYW4+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIiBjbGFzcz1cImRlYi1mdWxsXCI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5Tb3VyY2UgRW50aXR5PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJjb25uZWN0aW9uLXNvdXJjZS1lbnRpdHlcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwiY29ubmVjdGlvblNvdXJjZUVudGl0eShmKVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRDb25uZWN0aW9uU291cmNlRW50aXR5KGYsICRldmVudClcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlLmcuIG9yZ2FuaXphdGlvbnNcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiIGNsYXNzPVwiZGViLWZ1bGxcIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPlRhcmdldCBGaWVsZCBJRDwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiY29ubmVjdGlvbi10YXJnZXQtZmllbGRcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwiY29ubmVjdGlvblRhcmdldEZpZWxkKGYpXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldENvbm5lY3Rpb25UYXJnZXRGaWVsZChmLCAkZXZlbnQpXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZS5nLiBjb21wYW55SWRcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIENvbm5lY3Rpb25Tb3VyY2VDb25maWdDb21wb25lbnQge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3RvcmUgPSBpbmplY3QoQnVpbGRlclN0b3JlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZpZWxkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zdG9yZS5zZWxlY3RlZEZpZWxkKCkpO1xuXG4gIHByb3RlY3RlZCBjb25uZWN0aW9uU291cmNlRW50aXR5KGZpZWxkOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiBmaWVsZC5jb25uZWN0aW9uU291cmNlPy5lbnRpdHkgPz8gJyc7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0Q29ubmVjdGlvblNvdXJjZUVudGl0eShmaWVsZDogYW55LCBlbnRpdHk6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHRyaW1tZWQgPSBlbnRpdHkudHJpbSgpO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gZmllbGQuY29ubmVjdGlvblNvdXJjZSA/PyB7fTtcbiAgICBpZiAoIXRyaW1tZWQgJiYgIWV4aXN0aW5nLnRhcmdldEZpZWxkKSB7XG4gICAgICB0aGlzLnN0b3JlLnVwZGF0ZUZpZWxkKGZpZWxkLmlkLCB7IGNvbm5lY3Rpb25Tb3VyY2U6IHVuZGVmaW5lZCB9IGFzIGFueSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RvcmUudXBkYXRlRmllbGQoZmllbGQuaWQsIHtcbiAgICAgICAgY29ubmVjdGlvblNvdXJjZTogeyAuLi5leGlzdGluZywgZW50aXR5OiB0cmltbWVkIH0sXG4gICAgICB9IGFzIGFueSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGNvbm5lY3Rpb25UYXJnZXRGaWVsZChmaWVsZDogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gZmllbGQuY29ubmVjdGlvblNvdXJjZT8udGFyZ2V0RmllbGQgPz8gJyc7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0Q29ubmVjdGlvblRhcmdldEZpZWxkKGZpZWxkOiBhbnksIHRhcmdldEZpZWxkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCB0cmltbWVkID0gdGFyZ2V0RmllbGQudHJpbSgpO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gZmllbGQuY29ubmVjdGlvblNvdXJjZSA/PyB7fTtcbiAgICBpZiAoIXRyaW1tZWQgJiYgIWV4aXN0aW5nLmVudGl0eSkge1xuICAgICAgdGhpcy5zdG9yZS51cGRhdGVGaWVsZChmaWVsZC5pZCwgeyBjb25uZWN0aW9uU291cmNlOiB1bmRlZmluZWQgfSBhcyBhbnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0b3JlLnVwZGF0ZUZpZWxkKGZpZWxkLmlkLCB7XG4gICAgICAgIGNvbm5lY3Rpb25Tb3VyY2U6IHsgLi4uZXhpc3RpbmcsIHRhcmdldEZpZWxkOiB0cmltbWVkIH0sXG4gICAgICB9IGFzIGFueSk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { BuilderStore } from '../builder-store.service';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
/**
|
|
4
|
-
* ConnectionSourceConfigComponent — allows configuring connection source settings
|
|
5
|
-
* for an entity or field (Phase 7.2).
|
|
6
|
-
*/
|
|
7
|
-
export declare class ConnectionSourceConfigComponent {
|
|
8
|
-
protected readonly store: BuilderStore;
|
|
9
|
-
protected readonly field: import("@angular/core").Signal<import("ngx-dynamic-entity").NestedFieldConfig>;
|
|
10
|
-
protected connectionSourceEntity(field: any): string;
|
|
11
|
-
protected setConnectionSourceEntity(field: any, entity: string): void;
|
|
12
|
-
protected connectionTargetField(field: any): string;
|
|
13
|
-
protected setConnectionTargetField(field: any, targetField: string): void;
|
|
14
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<ConnectionSourceConfigComponent, never>;
|
|
15
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ConnectionSourceConfigComponent, "ngx-connection-source-config", never, {}, {}, never, never, true, never>;
|
|
16
|
-
}
|