ngx-dynamic-entity-builder 1.0.0 → 1.1.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 +101 -22
- package/esm2022/lib/clone.mjs +1 -1
- package/esm2022/lib/components/entity-builder-tree-node.component.mjs +1 -1
- 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 +14 -3
- package/esm2022/public-api.mjs +1 -2
- package/fesm2022/ngx-dynamic-entity-builder.mjs +902 -913
- package/fesm2022/ngx-dynamic-entity-builder.mjs.map +1 -1
- package/lib/builder-store.service.d.ts +28 -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 +7 -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;
|
|
@@ -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
|
*/
|
|
@@ -14,6 +14,12 @@ export declare class EntityBuilderComponent implements OnChanges {
|
|
|
14
14
|
languages: string[];
|
|
15
15
|
/** Optional role list — enables multi-select role pickers for RBAC instead of free text. */
|
|
16
16
|
availableRoles: string[];
|
|
17
|
+
/**
|
|
18
|
+
* Roles of the person using the builder. Distinct from `availableRoles`, which is the
|
|
19
|
+
* vocabulary a schema may reference. Passed to the `SYSTEM_DEFAULT_CAN_EDIT` predicate so
|
|
20
|
+
* it can decide whether this user may edit system-default tabs.
|
|
21
|
+
*/
|
|
22
|
+
userRoles: string[];
|
|
17
23
|
/** Optional common-module definitions for module tabs; defaults to the built-in list from core. */
|
|
18
24
|
commonModules: readonly CommonModuleEntry[];
|
|
19
25
|
/** Emitted on every change to the working config. */
|
|
@@ -38,5 +44,5 @@ export declare class EntityBuilderComponent implements OnChanges {
|
|
|
38
44
|
/** Parse a comma-separated role string into a trimmed, de-duplicated array. */
|
|
39
45
|
protected setRolesFromText(action: keyof EntityPermissions, text: string): void;
|
|
40
46
|
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>;
|
|
47
|
+
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
48
|
}
|
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.1.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.1.0",
|
|
12
|
+
"ngx-dynamic-entity": "^1.1.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
|
-
}
|