@vgip/meta-ui 2.1.8 → 2.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/fesm2022/vgip-meta-ui.mjs +38 -6
- package/fesm2022/vgip-meta-ui.mjs.map +1 -1
- package/index.d.ts +1 -0
- package/package.json +1 -1
|
@@ -9,7 +9,7 @@ import { HttpParams, HttpHeaders, provideHttpClient, withInterceptorsFromDi } fr
|
|
|
9
9
|
import * as i4 from 'ngx-quill';
|
|
10
10
|
import { QuillModule } from 'ngx-quill';
|
|
11
11
|
import { BehaviorSubject, Observable, Subject } from 'rxjs';
|
|
12
|
-
import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
|
|
12
|
+
import { debounceTime, distinctUntilChanged, finalize } from 'rxjs/operators';
|
|
13
13
|
import * as i1$1 from '@angular/router';
|
|
14
14
|
import * as i1$3 from '@angular/platform-browser';
|
|
15
15
|
|
|
@@ -2253,8 +2253,20 @@ class MetaResource {
|
|
|
2253
2253
|
if (!refresh && this.isPersistent && (!this.isEditable || this.editMode === false || this.meta.layout.children)) {
|
|
2254
2254
|
this.edit = false;
|
|
2255
2255
|
}
|
|
2256
|
-
|
|
2257
|
-
|
|
2256
|
+
if (this.isPersistent && meta.layout.isCustom && meta.layout.origLayoutId) { // VGIS-10996, enable for all integrations when there is room for testing
|
|
2257
|
+
this.service.getMetadata(meta.layout.origLayoutId, refresh).pipe(finalize(() => {
|
|
2258
|
+
delete this.busy;
|
|
2259
|
+
this.getDetails();
|
|
2260
|
+
})).subscribe({
|
|
2261
|
+
next: (parentMeta) => {
|
|
2262
|
+
this.extractFieldsToPreserve(metaNormalizer(parentMeta, this.integrationCode, this.resource.resourceType));
|
|
2263
|
+
}
|
|
2264
|
+
});
|
|
2265
|
+
}
|
|
2266
|
+
else {
|
|
2267
|
+
delete this.busy;
|
|
2268
|
+
this.getDetails();
|
|
2269
|
+
}
|
|
2258
2270
|
this.getFieldsMap();
|
|
2259
2271
|
},
|
|
2260
2272
|
error: (metaError) => {
|
|
@@ -2299,7 +2311,7 @@ class MetaResource {
|
|
|
2299
2311
|
if (resource._vgis.eventId) {
|
|
2300
2312
|
this.metaContext.vgipEventId = resource._vgis.eventId;
|
|
2301
2313
|
}
|
|
2302
|
-
this.lockedLayoutId = resource._vgis.layoutId || resource._vgis.recordTypeId
|
|
2314
|
+
// this.lockedLayoutId = resource._vgis.layoutId || resource._vgis.recordTypeId // not needed anymore, TBD: cleanup code
|
|
2303
2315
|
// sample orig layoutId: 012000000000000AAA, custom layoutId: 66ccbb3d1810985aa3a16202:012000000000000AAA
|
|
2304
2316
|
// so if the current layout is not inherited from the original one, reload the orig meta
|
|
2305
2317
|
// CCOMNI-155 - allow form layout change (*unless we are certain that the current and locked match)
|
|
@@ -2315,7 +2327,8 @@ class MetaResource {
|
|
|
2315
2327
|
}
|
|
2316
2328
|
/* eslint-enable no-underscore-dangle */
|
|
2317
2329
|
for (const p in resource) {
|
|
2318
|
-
if ((typeof (resource[p]) !== 'undefined') && (this.fieldNames.indexOf(p) !== -1 || p === '_vgis')
|
|
2330
|
+
if ((typeof (resource[p]) !== 'undefined') && (this.fieldNames.indexOf(p) !== -1 || p === '_vgis') ||
|
|
2331
|
+
(this.resource.preserveFieldsNames || []).indexOf(p) !== -1) {
|
|
2319
2332
|
this.model[p] = resource[p];
|
|
2320
2333
|
}
|
|
2321
2334
|
}
|
|
@@ -2617,6 +2630,22 @@ class MetaResource {
|
|
|
2617
2630
|
e.initEvent('click', true, false);
|
|
2618
2631
|
this.el.nativeElement.dispatchEvent(e);
|
|
2619
2632
|
}
|
|
2633
|
+
extractFieldsToPreserve(parentMeta) {
|
|
2634
|
+
const extractPreserveSectionFields = (s) => {
|
|
2635
|
+
for (const f of s.fields) {
|
|
2636
|
+
if (f.name && f.flags?.updatable !== false) {
|
|
2637
|
+
this.resource.preserveFieldsNames.push(f.name);
|
|
2638
|
+
}
|
|
2639
|
+
if (f.fields && f.fields.length) {
|
|
2640
|
+
extractPreserveSectionFields(f);
|
|
2641
|
+
}
|
|
2642
|
+
}
|
|
2643
|
+
};
|
|
2644
|
+
this.resource.preserveFieldsNames = [];
|
|
2645
|
+
for (const s of (parentMeta.layout?.sections || [])) {
|
|
2646
|
+
extractPreserveSectionFields(s);
|
|
2647
|
+
}
|
|
2648
|
+
}
|
|
2620
2649
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MetaResource, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: MetaResourceService }, { token: MetaContextService }, { token: MetaMsgService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2621
2650
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: MetaResource, isStandalone: false, selector: "vgip-meta-resource", inputs: { resource: "resource", model: "model", metaResourceServiceDelegated: "metaResourceServiceDelegated", theme: "theme", editMode: "editMode" }, outputs: { done: "done", resourceChange: "resourceChange" }, viewQueries: [{ propertyName: "resourceForm", first: true, predicate: ["resourceForm"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div *ngIf='generalError' class=\"Vlt-callout Vlt-callout--critical\" style='overflow: auto; margin: 20px;'>\n\t<i></i>\n\t<div class=\"Vlt-callout__content\">\n\t\t<p>{{generalError}}</p>\n\t</div>\n</div>\n<div *ngIf='!meta' class=\"Vlt-progress\">\n\t<div class=\"Vlt-progress__bar\" [ngClass]=\"{ loading: metaLoading }\" role=\"progressbar\" aria-valuemin=\"0\" aria-valuetext=\"Loading Metadata\" aria-valuemax=\"100\"></div>\n</div>\n<form [vgipMetaFormAutofocus]='!resource || !resource.externalId' *ngIf='meta && !generalError' #resourceForm=\"ngForm\" [name]='resource.resourceType' (ngSubmit)='submit(resourceForm)' (change)='onFormChange()' novalidate>\n\t<div class='form-content' style='overflow: hidden;'>\n\t\t<div [ngClass]=\"{ 'Vlt-callout--dismissed': !formErrors }\" class=\"Vlt-callout Vlt-callout--banner Vlt-callout--critical\">\n\t\t\t<i></i>\n\t\t\t<div class=\"Vlt-callout__content\" style=\"margin-top: auto;\">\n\t\t\t\t<p>There is a problem with one or more fields</p>\n\t\t\t\t<small style='font-weight: 600; font-size: 1.0em;' *ngIf='formErrors'>{{ formErrors.message || formErrors }}</small>\n\t\t\t</div>\n\t\t\t<button type='button' class=\"Vlt-callout__dismiss\" (click)='clearFormErrors()' aria-label=\"Dismiss\"></button>\n\t\t</div>\n\t\t<div class=\"Vlt-card__content\" style='min-height: 40px;'>\n\t\t\t<vgip-meta-layout *ngIf='edit' [meta]='meta.layout' [resource]='model' [preview]='false' [integration]='meta.integration' [type]='resource.resourceType' theme='inherit'></vgip-meta-layout>\n\t\t\t<vgip-meta-layout *ngIf='!edit' [meta]='meta.layout' [resource]='model' [preview]='true' [integration]='meta.integration' [type]='resource.resourceType' theme='inherit' [attr.data-vrn]='resourceVrn'></vgip-meta-layout>\n\t\t</div>\n\t</div>\n\t<div class=\"Vlt-card__footer\">\n\t\t<button class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--outline\" type='button' aria-label='Cancel' (click)='close()'>\n\t\t\t{{ edit ? 'Cancel' : 'Close' }}\n\t\t</button>\n\t\t<button *ngIf='edit' class=\"Vlt-btn Vlt-btn--app\" [ngClass]=\"{ 'Vlt-btn--primary': isPersistent, 'Vlt-btn--secondary': !isPersistent }\" type='submit'>\n\t\t\t{{ (resource && resource.externalId) ? 'Update' : 'Create' }}\n\t\t</button>\n\t\t<button (click)='setEditMode()' *ngIf='!edit && isEditable' [disabled]='!isEditable' class=\"Vlt-btn Vlt-btn--app Vlt-btn--primary\" type='button' aria-label='Edit'>\n\t\t\tEdit\n\t\t</button>\n\t\t<div style='margin-right: 8px; flex: 1;'>\n\t\t\t<div *ngIf='meta.availableLayouts && meta.availableLayouts.length' class=\"Vlt-form__element Vlt-form__element--big\" style='padding: 0; margin: -8px -18px -8px 0;'>\n\t\t\t\t<div class=\"Vlt-select\">\n\t\t\t\t\t<label style='all: inherit;'>\n\t\t\t\t\t\t<select style='border: 0; margin-top: 3px; background: transparent;' (change)='changeLayout()' [(ngModel)]='currentLayoutId' [ngModelOptions]='{ standalone: true }' [disabled]='lockedLayoutId === currentLayoutId'>\n\t\t\t\t\t\t\t<option selected disabled>Select layout</option>\n\t\t\t\t\t\t\t<option *ngFor='let layout of meta.availableLayouts' [ngValue]='layout.id'>{{layout.name}}</option>\n\t\t\t\t\t\t</select>\n\t\t\t\t\t\t<label>Layout</label> <!-- eslint-disable-line @angular-eslint/template/label-has-associated-control -->\n\t\t\t\t\t</label>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"Vlt-dropdown resource-menu\" [ngClass]=\"{ 'Vlt-dropdown--expanded': resourceMenuVisible }\" style='margin-left: 2px;'>\n\t\t\t<div class=\"Vlt-dropdown__panel\" style='bottom: 40px; right: -4px; top: initial;'>\n\t\t\t\t<div class=\"Vlt-dropdown__panel__content\">\n\t\t\t\t\t<a href='#' class=\"Vlt-dropdown__link\" (click)='loadMetadata(currentLayoutId, true, $event)'>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<svg class='Vlt-icon Vlt-icon--smaller'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-refresh\"/></svg> Refresh metadata\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"Vlt-dropdown__trigger\">\n\t\t\t\t<button type='button' (click)='openResourceMenu()' class=\"Vlt-btn Vlt-btn--link\" aria-label='Resource menu'>\n\t\t\t\t\t<svg class='Vlt-icon Vlt-icon--small' style='margin: 0;'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-more-v-negative\"/></svg>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</form>\n<div class='busy-mask' [ngClass]=\"{ active: busy }\">\n\t<div style='height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center;'>\n\t\t<div class=\"Vlt-spinner\"></div>\n\t</div>\n</div>\n", styles: [":host{flex:1;display:flex;flex-direction:column;min-height:0;color:var(--vgip-meta-resource-color)}.Vlt-callout--banner{-webkit-box-pack:initial;justify-content:initial;text-align:initial;overflow-y:auto}.Vlt-callout--banner.Vlt-callout--dismissed{padding:0}.Vlt-callout--banner:not(.Vlt-callout--dismissed){min-height:78px}.Vlt-spinner:before,.Vlt-spinner:after{border:6px solid #616266;border-color:#616266 transparent transparent}.Vlt-card__content{padding:8px 8px 8px 16px;display:flex;flex-direction:column;min-height:0;flex:1;overflow-y:scroll;overflow-x:hidden;background-color:var(--vgip-meta-resource-bg-color)}@media(hover:none){.Vlt-card__content{padding-right:16px}}.Vlt-card__content::-webkit-scrollbar{width:8px}.Vlt-card__content::-webkit-scrollbar-thumb{background-color:var(--vgip-meta-scrollbar-color);border:2px solid transparent;border-radius:6px;background-clip:content-box}.Vlt-card__footer{background:var(--vgip-meta-resource-bar-color);border-top:1px solid var(--vgip-meta-separator-color);display:flex;flex-direction:row;margin:16px -24px -24px;padding:8px 8px 8px 16px;box-shadow:0 0 4px #00000040;z-index:1}.Vlt-card__footer .Vlt-select select{color:var(--vgip-meta-input-color)}.Vlt-card__footer .Vlt-select select:disabled{background:initial;cursor:not-allowed}.Vlt-card__footer .Vlt-select:after{background-image:var(--vgip-meta-dropdown-icon)}.Vlt-card__footer .resource-menu .Vlt-icon:not(:hover){fill:var(--vgip-meta-input-label-color)}.Vlt-card__footer button.Vlt-btn--secondary{border:none}.Vlt-card__footer button.Vlt-btn--secondary:not([type=submit]){color:var(--vgip-meta-input-color)}.Vlt-card__footer button.Vlt-btn--secondary{box-shadow:inset 0 0 0 1px var(--vgip-meta-button-border-color)}.Vlt-card__footer button.Vlt-btn--secondary:hover[type=submit]{background-color:var(--vgip-meta-submit-hover-bg-color)}.Vlt-card__footer button.Vlt-btn--secondary:hover{box-shadow:inset 0 0 0 1px var(--vgip-meta-input-accent-color)}.Vlt-progress{margin:0;position:sticky}.Vlt-progress .Vlt-progress__bar{width:0;transition:width 5s}.Vlt-progress .Vlt-progress__bar.loading{width:100%}form{border-radius:6px;padding:24px;display:flex;flex-direction:column;min-height:0;flex:1}form .form-content{margin:-24px -24px -16px;padding-bottom:0;flex:1;display:flex;flex-direction:column}.busy-mask{position:absolute;inset:0;background:#00000052;opacity:1;z-index:898;display:none;border-bottom-left-radius:6px;border-bottom-right-radius:6px;margin:1px;cursor:progress}.busy-mask.active{display:block}\n"], dependencies: [{ kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MetaLayout, selector: "vgip-meta-layout", inputs: ["meta", "resource", "integration", "type", "preview", "theme", "delegate"] }, { kind: "directive", type: MetaAutofocusDirective, selector: "[vgipMetaFormAutofocus]", inputs: ["vgipMetaFormAutofocus"] }] }); }
|
|
2622
2651
|
}
|
|
@@ -3658,7 +3687,7 @@ class FieldSelect extends FieldAbstract {
|
|
|
3658
3687
|
if (typeof (this.meta.enabled) !== 'undefined') {
|
|
3659
3688
|
if (typeof (this.meta.enabled) === 'object') { // TODO move me up
|
|
3660
3689
|
for (const par of Object.keys(this.meta.enabled)) {
|
|
3661
|
-
console.log('this.meta.enabled', this.meta.enabled)
|
|
3690
|
+
// console.log('this.meta.enabled', this.meta.enabled)
|
|
3662
3691
|
const parValue = this.parent[par];
|
|
3663
3692
|
if (parValue) {
|
|
3664
3693
|
// logic for specific values, this works only for true
|
|
@@ -4896,6 +4925,9 @@ class FieldComposite extends FieldAbstract {
|
|
|
4896
4925
|
ngOnInit() {
|
|
4897
4926
|
// super.ngOnInit()
|
|
4898
4927
|
let nestedFieldsRegex;
|
|
4928
|
+
if (this.meta.name === `composite_${this.meta.label}`) {
|
|
4929
|
+
delete this.meta.name; // revisit VGIS-5059, there are composite containes without name on purpose
|
|
4930
|
+
}
|
|
4899
4931
|
if (this.meta.name) {
|
|
4900
4932
|
this.scope += `${this.meta.name}_`;
|
|
4901
4933
|
this.value = this.parent[this.meta.name] || {};
|