@wertzui/ngx-restworld-client 16.4.0 → 17.0.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/wertzui-ngx-restworld-client.mjs +965 -562
- package/fesm2022/wertzui-ngx-restworld-client.mjs.map +1 -1
- package/index.d.ts +2258 -4
- package/index.d.ts.map +1 -0
- package/package.json +25 -23
- package/lib/components/rest-world-table-column-filter-element/rest-world-table-column-filter-element.component.d.ts +0 -39
- package/lib/components/rest-world-table-column-filter-element/rest-world-table-column-filter-element.component.d.ts.map +0 -1
- package/lib/components/restworld-avatar/restworld-avatar.component.d.ts +0 -27
- package/lib/components/restworld-avatar/restworld-avatar.component.d.ts.map +0 -1
- package/lib/components/restworld-displays/restworld-displays.d.ts +0 -247
- package/lib/components/restworld-displays/restworld-displays.d.ts.map +0 -1
- package/lib/components/restworld-file/restworld-file.component.d.ts +0 -40
- package/lib/components/restworld-file/restworld-file.component.d.ts.map +0 -1
- package/lib/components/restworld-form/restworld-form.component.d.ts +0 -126
- package/lib/components/restworld-form/restworld-form.component.d.ts.map +0 -1
- package/lib/components/restworld-id-navigation/restworld-id-navigation.component.d.ts +0 -33
- package/lib/components/restworld-id-navigation/restworld-id-navigation.component.d.ts.map +0 -1
- package/lib/components/restworld-image/restworld-image.component.d.ts +0 -64
- package/lib/components/restworld-image/restworld-image.component.d.ts.map +0 -1
- package/lib/components/restworld-inputs/restworld-inputs.d.ts +0 -235
- package/lib/components/restworld-inputs/restworld-inputs.d.ts.map +0 -1
- package/lib/components/restworld-label/restworld-label.component.d.ts +0 -20
- package/lib/components/restworld-label/restworld-label.component.d.ts.map +0 -1
- package/lib/components/restworld-menu-button/restworld-menu-button.component.d.ts +0 -21
- package/lib/components/restworld-menu-button/restworld-menu-button.component.d.ts.map +0 -1
- package/lib/components/restworld-table/restworld-table.component.d.ts +0 -231
- package/lib/components/restworld-table/restworld-table.component.d.ts.map +0 -1
- package/lib/components/restworld-tri-state-checkbox/restworld-tri-state-checkbox.component.d.ts +0 -160
- package/lib/components/restworld-tri-state-checkbox/restworld-tri-state-checkbox.component.d.ts.map +0 -1
- package/lib/components/restworld-validation-errors/restworld-validation-errors.component.d.ts +0 -31
- package/lib/components/restworld-validation-errors/restworld-validation-errors.component.d.ts.map +0 -1
- package/lib/constants/link-names.d.ts +0 -12
- package/lib/constants/link-names.d.ts.map +0 -1
- package/lib/directives/property.directives.d.ts +0 -117
- package/lib/directives/property.directives.d.ts.map +0 -1
- package/lib/models/api-url.d.ts +0 -18
- package/lib/models/api-url.d.ts.map +0 -1
- package/lib/models/client-settings.d.ts +0 -19
- package/lib/models/client-settings.d.ts.map +0 -1
- package/lib/models/events.d.ts +0 -40
- package/lib/models/events.d.ts.map +0 -1
- package/lib/models/o-data.d.ts +0 -23
- package/lib/models/o-data.d.ts.map +0 -1
- package/lib/models/restworld-image.d.ts +0 -28
- package/lib/models/restworld-image.d.ts.map +0 -1
- package/lib/models/restworld-options.d.ts +0 -6
- package/lib/models/restworld-options.d.ts.map +0 -1
- package/lib/models/special-properties.d.ts +0 -15
- package/lib/models/special-properties.d.ts.map +0 -1
- package/lib/models/templating.d.ts +0 -14
- package/lib/models/templating.d.ts.map +0 -1
- package/lib/pipes/as.pipe.d.ts +0 -21
- package/lib/pipes/as.pipe.d.ts.map +0 -1
- package/lib/pipes/clr-format.pipe.d.ts +0 -10
- package/lib/pipes/clr-format.pipe.d.ts.map +0 -1
- package/lib/pipes/property-type-format.pipe.d.ts +0 -15
- package/lib/pipes/property-type-format.pipe.d.ts.map +0 -1
- package/lib/pipes/safe-url.pipe.d.ts +0 -22
- package/lib/pipes/safe-url.pipe.d.ts.map +0 -1
- package/lib/provide-restworld.d.ts +0 -24
- package/lib/provide-restworld.d.ts.map +0 -1
- package/lib/services/avatar-generator.d.ts +0 -48
- package/lib/services/avatar-generator.d.ts.map +0 -1
- package/lib/services/odata-filter-parser.d.ts +0 -11
- package/lib/services/odata-filter-parser.d.ts.map +0 -1
- package/lib/services/odata-visitor.d.ts +0 -27
- package/lib/services/odata-visitor.d.ts.map +0 -1
- package/lib/services/odata.service.d.ts +0 -77
- package/lib/services/odata.service.d.ts.map +0 -1
- package/lib/services/opentelemetry.service.d.ts +0 -26
- package/lib/services/opentelemetry.service.d.ts.map +0 -1
- package/lib/services/options.service.d.ts +0 -77
- package/lib/services/options.service.d.ts.map +0 -1
- package/lib/services/problem.service.d.ts +0 -65
- package/lib/services/problem.service.d.ts.map +0 -1
- package/lib/services/restworld-client-collection.d.ts +0 -44
- package/lib/services/restworld-client-collection.d.ts.map +0 -1
- package/lib/services/restworld-client.d.ts +0 -231
- package/lib/services/restworld-client.d.ts.map +0 -1
- package/lib/services/settings.service.d.ts +0 -25
- package/lib/services/settings.service.d.ts.map +0 -1
- package/lib/util/debounce.d.ts +0 -9
- package/lib/util/debounce.d.ts.map +0 -1
- package/lib/views/restworld-edit-view/restworld-edit-view.component.d.ts +0 -58
- package/lib/views/restworld-edit-view/restworld-edit-view.component.d.ts.map +0 -1
- package/lib/views/restworld-list-view/restworld-list-view.component.d.ts +0 -89
- package/lib/views/restworld-list-view/restworld-list-view.component.d.ts.map +0 -1
- package/public-api.d.ts +0 -40
- package/public-api.d.ts.map +0 -1
- package/wertzui-ngx-restworld-client.d.ts.map +0 -1
|
@@ -15,10 +15,9 @@ import * as i2$1 from 'primeng/api';
|
|
|
15
15
|
import { PrimeTemplate, SharedModule, FilterMatchMode, TranslationKeys } from 'primeng/api';
|
|
16
16
|
import { BaseComponent } from 'primeng/basecomponent';
|
|
17
17
|
import { CheckboxStyle } from 'primeng/checkbox';
|
|
18
|
-
import {
|
|
19
|
-
import { HttpHeaders } from '@angular/common/http';
|
|
18
|
+
import { HttpHeaders, HttpEventType, HTTP_INTERCEPTORS } from '@angular/common/http';
|
|
20
19
|
import { NgHttpCachingHeaders, withNgHttpCachingLocalStorage, NgHttpCachingStrategy, provideNgHttpCaching } from 'ng-http-caching';
|
|
21
|
-
import { lastValueFrom, merge, map, mergeMap } from 'rxjs';
|
|
20
|
+
import { lastValueFrom, merge, map, mergeMap, tap, finalize } from 'rxjs';
|
|
22
21
|
import * as i1$3 from 'primeng/button';
|
|
23
22
|
import { ButtonModule, ButtonDirective } from 'primeng/button';
|
|
24
23
|
import * as i2$2 from 'primeng/fileupload';
|
|
@@ -44,12 +43,14 @@ import { Dialog, DialogModule } from 'primeng/dialog';
|
|
|
44
43
|
import * as i4 from 'primeng/colorpicker';
|
|
45
44
|
import { ColorPickerModule } from 'primeng/colorpicker';
|
|
46
45
|
import { InputText } from 'primeng/inputtext';
|
|
46
|
+
import { SIGNAL, signalSetFn } from '@angular/core/primitives/signals';
|
|
47
47
|
import { toSignal, toObservable } from '@angular/core/rxjs-interop';
|
|
48
48
|
import * as i6 from 'primeng/progressspinner';
|
|
49
49
|
import { ProgressSpinnerModule } from 'primeng/progressspinner';
|
|
50
50
|
import * as i8 from 'primeng/ripple';
|
|
51
51
|
import { RippleModule } from 'primeng/ripple';
|
|
52
52
|
import * as i3$4 from '@angular/router';
|
|
53
|
+
import { NavigationEnd } from '@angular/router';
|
|
53
54
|
import * as i4$1 from 'primeng/splitbutton';
|
|
54
55
|
import { SplitButtonModule } from 'primeng/splitbutton';
|
|
55
56
|
import { createTraverser, TokenType, defaultParser } from '@odata/parser';
|
|
@@ -59,11 +60,13 @@ import { ContextMenuModule } from 'primeng/contextmenu';
|
|
|
59
60
|
import * as i5 from 'primeng/table';
|
|
60
61
|
import { TableModule } from 'primeng/table';
|
|
61
62
|
import * as i4$2 from 'primeng/config';
|
|
62
|
-
import { registerInstrumentations } from '@opentelemetry/instrumentation';
|
|
63
63
|
import { WebTracerProvider, SimpleSpanProcessor, ConsoleSpanExporter, BatchSpanProcessor, AlwaysOnSampler, ParentBasedSampler, TraceIdRatioBasedSampler, AlwaysOffSampler } from '@opentelemetry/sdk-trace-web';
|
|
64
|
-
import { ZoneContextManager } from '@opentelemetry/context-zone';
|
|
65
|
-
import {
|
|
66
|
-
import {
|
|
64
|
+
import { ZoneContextManager } from '@opentelemetry/context-zone-peer-dep';
|
|
65
|
+
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto';
|
|
66
|
+
import { resourceFromAttributes } from '@opentelemetry/resources';
|
|
67
|
+
import { trace, context, SpanKind, propagation, SpanStatusCode } from '@opentelemetry/api';
|
|
68
|
+
import { filter } from 'rxjs/operators';
|
|
69
|
+
import { ATTR_SERVICE_NAME, ATTR_HTTP_REQUEST_HEADER, ATTR_CLIENT_PORT, ATTR_CLIENT_ADDRESS, ATTR_URL_SCHEME, ATTR_URL_QUERY, ATTR_URL_PATH, ATTR_URL_FULL, ATTR_HTTP_REQUEST_METHOD, ATTR_HTTP_RESPONSE_STATUS_CODE, ATTR_HTTP_RESPONSE_HEADER } from '@opentelemetry/semantic-conventions';
|
|
67
70
|
import * as i7$1 from 'primeng/confirmdialog';
|
|
68
71
|
import { ConfirmDialogModule } from 'primeng/confirmdialog';
|
|
69
72
|
import * as i5$1 from 'primeng/skeleton';
|
|
@@ -194,10 +197,10 @@ class AvatarGenerator {
|
|
|
194
197
|
};
|
|
195
198
|
return style;
|
|
196
199
|
}
|
|
197
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
198
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
200
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AvatarGenerator, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
201
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AvatarGenerator, providedIn: 'root' });
|
|
199
202
|
}
|
|
200
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
203
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AvatarGenerator, decorators: [{
|
|
201
204
|
type: Injectable,
|
|
202
205
|
args: [{
|
|
203
206
|
providedIn: 'root',
|
|
@@ -216,18 +219,18 @@ class RestWorldAvatarComponent {
|
|
|
216
219
|
/**
|
|
217
220
|
* The username of the user to display an avatar for.
|
|
218
221
|
*/
|
|
219
|
-
user = input.required();
|
|
220
|
-
image = computed(async () => await this._generator.getImageAsync(this.user()));
|
|
221
|
-
label = computed(async () => await this._generator.getLabelAsync(this.user()));
|
|
222
|
-
style = computed(async () => await this._generator.getStyleAsync(this.user()));
|
|
223
|
-
tooltip = computed(() => this.user() ?? '');
|
|
222
|
+
user = input.required(...(ngDevMode ? [{ debugName: "user" }] : []));
|
|
223
|
+
image = computed(async () => await this._generator.getImageAsync(this.user()), ...(ngDevMode ? [{ debugName: "image" }] : []));
|
|
224
|
+
label = computed(async () => await this._generator.getLabelAsync(this.user()), ...(ngDevMode ? [{ debugName: "label" }] : []));
|
|
225
|
+
style = computed(async () => await this._generator.getStyleAsync(this.user()), ...(ngDevMode ? [{ debugName: "style" }] : []));
|
|
226
|
+
tooltip = computed(() => this.user() ?? '', ...(ngDevMode ? [{ debugName: "tooltip" }] : []));
|
|
224
227
|
constructor(_generator) {
|
|
225
228
|
this._generator = _generator;
|
|
226
229
|
}
|
|
227
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
228
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "
|
|
230
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldAvatarComponent, deps: [{ token: AvatarGenerator }], target: i0.ɵɵFactoryTarget.Component });
|
|
231
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.1", type: RestWorldAvatarComponent, isStandalone: true, selector: "rw-avatar", inputs: { user: { classPropertyName: "user", publicName: "user", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<p-avatar \n [pTooltip]=\"tooltip()\" \n tooltipPosition=\"top\" \n [image]=\"$any(image() | async)\" \n [label]=\"$any(label() | async)\" \n [style]=\"style() | async\"\n shape=\"circle\">\n</p-avatar>", styles: [""], dependencies: [{ kind: "ngmodule", type: AvatarModule }, { kind: "component", type: i2.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i3.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo"] }, { kind: "pipe", type: AsyncPipe, name: "async" }] });
|
|
229
232
|
}
|
|
230
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
233
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldAvatarComponent, decorators: [{
|
|
231
234
|
type: Component,
|
|
232
235
|
args: [{ selector: 'rw-avatar', standalone: true, imports: [AvatarModule, TooltipModule, AsyncPipe], template: "<p-avatar \n [pTooltip]=\"tooltip()\" \n tooltipPosition=\"top\" \n [image]=\"$any(image() | async)\" \n [label]=\"$any(label() | async)\" \n [style]=\"style() | async\"\n shape=\"circle\">\n</p-avatar>" }]
|
|
233
236
|
}], ctorParameters: () => [{ type: AvatarGenerator }] });
|
|
@@ -257,14 +260,14 @@ class RestWorldLabelComponent {
|
|
|
257
260
|
* The property to be displayed.
|
|
258
261
|
* @required
|
|
259
262
|
**/
|
|
260
|
-
property = input.required();
|
|
263
|
+
property = input.required(...(ngDevMode ? [{ debugName: "property" }] : []));
|
|
261
264
|
get PropertyType() {
|
|
262
265
|
return PropertyType;
|
|
263
266
|
}
|
|
264
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
265
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
267
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldLabelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
268
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RestWorldLabelComponent, isStandalone: true, selector: "rw-label", inputs: { property: { classPropertyName: "property", publicName: "property", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@if (property().type !== PropertyType.Hidden) {\r\n <label \r\n [attr.for]=\"property().name\"\r\n [class.p-disabled]=\"property().readOnly\">\r\n {{property().prompt ?? property().name}}\r\n </label>\r\n}", styles: [".label-hidden{visibility:hidden}.label-collapsed{display:none}\n"], viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }] });
|
|
266
269
|
}
|
|
267
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
270
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldLabelComponent, decorators: [{
|
|
268
271
|
type: Component,
|
|
269
272
|
args: [{ selector: 'rw-label', standalone: true, viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }], template: "@if (property().type !== PropertyType.Hidden) {\r\n <label \r\n [attr.for]=\"property().name\"\r\n [class.p-disabled]=\"property().readOnly\">\r\n {{property().prompt ?? property().name}}\r\n </label>\r\n}", styles: [".label-hidden{visibility:hidden}.label-collapsed{display:none}\n"] }]
|
|
270
273
|
}] });
|
|
@@ -286,10 +289,10 @@ class ClrFormatPipe {
|
|
|
286
289
|
return value;
|
|
287
290
|
return format.includes("{0") ? ClrFormatPipe.formatFunction(format, value) : ClrFormatPipe.formatFunction("{0:" + format + "}", value);
|
|
288
291
|
}
|
|
289
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
290
|
-
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
292
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ClrFormatPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
293
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.1", ngImport: i0, type: ClrFormatPipe, isStandalone: true, name: "clrFormat" });
|
|
291
294
|
}
|
|
292
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
295
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ClrFormatPipe, decorators: [{
|
|
293
296
|
type: Pipe,
|
|
294
297
|
args: [{
|
|
295
298
|
name: 'clrFormat',
|
|
@@ -349,10 +352,10 @@ class PropertyTypeFormatPipe {
|
|
|
349
352
|
const format = type === undefined ? "{0}" : (PropertyTypeFormatPipe._typeToFormatMap.get(type) ?? "{0}");
|
|
350
353
|
return this._clrFormatPipe.transform(value, format);
|
|
351
354
|
}
|
|
352
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
353
|
-
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
355
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PropertyTypeFormatPipe, deps: [{ token: ClrFormatPipe }], target: i0.ɵɵFactoryTarget.Pipe });
|
|
356
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.1", ngImport: i0, type: PropertyTypeFormatPipe, isStandalone: true, name: "propertyTypeFormat" });
|
|
354
357
|
}
|
|
355
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
358
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PropertyTypeFormatPipe, decorators: [{
|
|
356
359
|
type: Pipe,
|
|
357
360
|
args: [{
|
|
358
361
|
name: 'propertyTypeFormat',
|
|
@@ -401,93 +404,93 @@ class TriStateCheckbox extends BaseComponent {
|
|
|
401
404
|
* Value of the checkbox.
|
|
402
405
|
* @group Props
|
|
403
406
|
*/
|
|
404
|
-
value = input();
|
|
407
|
+
value = input(...(ngDevMode ? [undefined, { debugName: "value" }] : []));
|
|
405
408
|
/**
|
|
406
409
|
* Name of the checkbox group.
|
|
407
410
|
* @group Props
|
|
408
411
|
*/
|
|
409
|
-
name = input();
|
|
412
|
+
name = input(...(ngDevMode ? [undefined, { debugName: "name" }] : []));
|
|
410
413
|
/**
|
|
411
414
|
* When present, it specifies that the element should be disabled.
|
|
412
415
|
* @group Props
|
|
413
416
|
*/
|
|
414
|
-
disabled = model(undefined);
|
|
417
|
+
disabled = model(undefined, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
|
|
415
418
|
/**
|
|
416
419
|
* Establishes relationships between the component and label(s) where its value should be one or more element IDs.
|
|
417
420
|
* @group Props
|
|
418
421
|
*/
|
|
419
|
-
ariaLabelledBy = input();
|
|
422
|
+
ariaLabelledBy = input(...(ngDevMode ? [undefined, { debugName: "ariaLabelledBy" }] : []));
|
|
420
423
|
/**
|
|
421
424
|
* Used to define a string that labels the input element.
|
|
422
425
|
* @group Props
|
|
423
426
|
*/
|
|
424
|
-
ariaLabel = input();
|
|
427
|
+
ariaLabel = input(...(ngDevMode ? [undefined, { debugName: "ariaLabel" }] : []));
|
|
425
428
|
/**
|
|
426
429
|
* Index of the element in tabbing order.
|
|
427
430
|
* @group Props
|
|
428
431
|
*/
|
|
429
|
-
tabindex = input(undefined, { transform: numberAttribute });
|
|
432
|
+
tabindex = input(undefined, ...(ngDevMode ? [{ debugName: "tabindex", transform: numberAttribute }] : [{ transform: numberAttribute }]));
|
|
430
433
|
/**
|
|
431
434
|
* Identifier of the focus input to match a label defined for the component.
|
|
432
435
|
* @group Props
|
|
433
436
|
*/
|
|
434
|
-
inputId = input();
|
|
437
|
+
inputId = input(...(ngDevMode ? [undefined, { debugName: "inputId" }] : []));
|
|
435
438
|
/**
|
|
436
439
|
* Inline style of the component.
|
|
437
440
|
* @group Props
|
|
438
441
|
*/
|
|
439
|
-
style = input();
|
|
442
|
+
style = input(...(ngDevMode ? [undefined, { debugName: "style" }] : []));
|
|
440
443
|
/**
|
|
441
444
|
* Inline style of the input element.
|
|
442
445
|
* @group Props
|
|
443
446
|
*/
|
|
444
|
-
inputStyle = input();
|
|
447
|
+
inputStyle = input(...(ngDevMode ? [undefined, { debugName: "inputStyle" }] : []));
|
|
445
448
|
/**
|
|
446
449
|
* Style class of the component.
|
|
447
450
|
* @group Props
|
|
448
451
|
*/
|
|
449
|
-
styleClass = input("");
|
|
452
|
+
styleClass = input("", ...(ngDevMode ? [{ debugName: "styleClass" }] : []));
|
|
450
453
|
/**
|
|
451
454
|
* Style class of the input element.
|
|
452
455
|
* @group Props
|
|
453
456
|
*/
|
|
454
|
-
inputClass = input("");
|
|
457
|
+
inputClass = input("", ...(ngDevMode ? [{ debugName: "inputClass" }] : []));
|
|
455
458
|
/**
|
|
456
459
|
* Defines the size of the component.
|
|
457
460
|
* @group Props
|
|
458
461
|
*/
|
|
459
|
-
size = input();
|
|
462
|
+
size = input(...(ngDevMode ? [undefined, { debugName: "size" }] : []));
|
|
460
463
|
/**
|
|
461
464
|
* Form control value.
|
|
462
465
|
* @group Props
|
|
463
466
|
*/
|
|
464
|
-
formControl = input();
|
|
467
|
+
formControl = input(...(ngDevMode ? [undefined, { debugName: "formControl" }] : []));
|
|
465
468
|
/**
|
|
466
469
|
* Icon class of the checkbox icon.
|
|
467
470
|
* @group Props
|
|
468
471
|
*/
|
|
469
|
-
checkboxIcon = input();
|
|
472
|
+
checkboxIcon = input(...(ngDevMode ? [undefined, { debugName: "checkboxIcon" }] : []));
|
|
470
473
|
/**
|
|
471
474
|
* When present, it specifies that the component cannot be edited.
|
|
472
475
|
* @group Props
|
|
473
476
|
*/
|
|
474
|
-
readonly = input(undefined, { transform: booleanAttribute });
|
|
477
|
+
readonly = input(undefined, ...(ngDevMode ? [{ debugName: "readonly", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
|
|
475
478
|
/**
|
|
476
479
|
* When present, it specifies that checkbox must be checked before submitting the form.
|
|
477
480
|
* @group Props
|
|
478
481
|
*/
|
|
479
|
-
required = input(undefined, { transform: booleanAttribute });
|
|
482
|
+
required = input(undefined, ...(ngDevMode ? [{ debugName: "required", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
|
|
480
483
|
/**
|
|
481
484
|
* When present, it specifies that the component should automatically get focus on load.
|
|
482
485
|
* @group Props
|
|
483
486
|
*/
|
|
484
|
-
autofocus = input(undefined, { transform: booleanAttribute });
|
|
485
|
-
model = model(null);
|
|
487
|
+
autofocus = input(undefined, ...(ngDevMode ? [{ debugName: "autofocus", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
|
|
488
|
+
model = model(null, ...(ngDevMode ? [{ debugName: "model" }] : []));
|
|
486
489
|
/**
|
|
487
490
|
* Specifies the input variant of the component.
|
|
488
491
|
* @group Props
|
|
489
492
|
*/
|
|
490
|
-
variant = input('outlined');
|
|
493
|
+
variant = input('outlined', ...(ngDevMode ? [{ debugName: "variant" }] : []));
|
|
491
494
|
/**
|
|
492
495
|
* Callback to invoke on value change.
|
|
493
496
|
* @param {CheckboxChangeEvent} event - Custom value change event.
|
|
@@ -516,13 +519,13 @@ class TriStateCheckbox extends BaseComponent {
|
|
|
516
519
|
this.config.inputVariant() === 'filled',
|
|
517
520
|
'p-checkbox-sm p-inputfield-sm': this.size() === 'small',
|
|
518
521
|
'p-checkbox-lg p-inputfield-lg': this.size() === 'large',
|
|
519
|
-
}));
|
|
522
|
+
}), ...(ngDevMode ? [{ debugName: "containerClass" }] : []));
|
|
520
523
|
/**
|
|
521
524
|
* The template of the checkbox icon.
|
|
522
525
|
* @group Templates
|
|
523
526
|
*/
|
|
524
|
-
checkboxIconTemplate = contentChild('checkboxicon', { descendants: false });
|
|
525
|
-
templates = contentChildren(PrimeTemplate);
|
|
527
|
+
checkboxIconTemplate = contentChild('checkboxicon', ...(ngDevMode ? [{ debugName: "checkboxIconTemplate", descendants: false }] : [{ descendants: false }]));
|
|
528
|
+
templates = contentChildren(PrimeTemplate, ...(ngDevMode ? [{ debugName: "templates" }] : []));
|
|
526
529
|
_checkboxIconTemplate;
|
|
527
530
|
onModelChange = () => { };
|
|
528
531
|
onModelTouched = () => { };
|
|
@@ -600,8 +603,8 @@ class TriStateCheckbox extends BaseComponent {
|
|
|
600
603
|
this.cd.markForCheck();
|
|
601
604
|
});
|
|
602
605
|
}
|
|
603
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
604
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
606
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: TriStateCheckbox, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
607
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: TriStateCheckbox, isStandalone: true, selector: "p-tri-state-checkbox, p-tri-state-checkBox, p-tri-state-check-box, rw-tri-state-checkbox, rw-tri-state-checkBox, rw-tri-state-check-box", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledBy: { classPropertyName: "ariaLabelledBy", publicName: "ariaLabelledBy", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, tabindex: { classPropertyName: "tabindex", publicName: "tabindex", isSignal: true, isRequired: false, transformFunction: null }, inputId: { classPropertyName: "inputId", publicName: "inputId", isSignal: true, isRequired: false, transformFunction: null }, style: { classPropertyName: "style", publicName: "style", isSignal: true, isRequired: false, transformFunction: null }, inputStyle: { classPropertyName: "inputStyle", publicName: "inputStyle", isSignal: true, isRequired: false, transformFunction: null }, styleClass: { classPropertyName: "styleClass", publicName: "styleClass", isSignal: true, isRequired: false, transformFunction: null }, inputClass: { classPropertyName: "inputClass", publicName: "inputClass", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, formControl: { classPropertyName: "formControl", publicName: "formControl", isSignal: true, isRequired: false, transformFunction: null }, checkboxIcon: { classPropertyName: "checkboxIcon", publicName: "checkboxIcon", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, autofocus: { classPropertyName: "autofocus", publicName: "autofocus", isSignal: true, isRequired: false, transformFunction: null }, model: { classPropertyName: "model", publicName: "model", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { disabled: "disabledChange", model: "modelChange", onChange: "onChange", onFocus: "onFocus", onBlur: "onBlur" }, providers: [TRI_STATE_CHECKBOX_VALUE_ACCESSOR, CheckboxStyle], queries: [{ propertyName: "checkboxIconTemplate", first: true, predicate: ["checkboxicon"], isSignal: true }, { propertyName: "templates", predicate: PrimeTemplate, isSignal: true }], viewQueries: [{ propertyName: "inputViewChild", first: true, predicate: ["input"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
|
|
605
608
|
<div [style]="style()" [class]="styleClass()" [ngClass]="containerClass()" [attr.data-p-highlight]="model() === true" [attr.data-p-checked]="model() === true" [attr.data-p-disabled]="disabled()" [title]="model()">
|
|
606
609
|
<input
|
|
607
610
|
#input
|
|
@@ -630,24 +633,24 @@ class TriStateCheckbox extends BaseComponent {
|
|
|
630
633
|
<span class="p-checkbox-icon" [ngClass]="checkboxIcon()" [attr.data-pc-section]="'icon'"></span>
|
|
631
634
|
}
|
|
632
635
|
@else {
|
|
633
|
-
<
|
|
636
|
+
<span class="p-checkbox-icon pi pi-check" [attr.data-pc-section]="'icon'"></span>
|
|
634
637
|
}
|
|
635
638
|
}
|
|
636
639
|
@else if (model() === null) {
|
|
637
|
-
<
|
|
640
|
+
<span class="p-checkbox-icon pi pi-minus" [attr.data-pc-section]="'icon'"></span>
|
|
638
641
|
}
|
|
639
642
|
}
|
|
640
643
|
<ng-template *ngTemplateOutlet="checkboxIconTemplate() ?? _checkboxIconTemplate ?? null; context: { model: model, class: 'p-checkbox-icon' }"></ng-template>
|
|
641
644
|
</div>
|
|
642
645
|
</div>
|
|
643
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "
|
|
646
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: SharedModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
644
647
|
}
|
|
645
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
648
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: TriStateCheckbox, decorators: [{
|
|
646
649
|
type: Component,
|
|
647
650
|
args: [{
|
|
648
651
|
selector: 'p-tri-state-checkbox, p-tri-state-checkBox, p-tri-state-check-box, rw-tri-state-checkbox, rw-tri-state-checkBox, rw-tri-state-check-box',
|
|
649
652
|
standalone: true,
|
|
650
|
-
imports: [CommonModule,
|
|
653
|
+
imports: [CommonModule, SharedModule],
|
|
651
654
|
template: `
|
|
652
655
|
<div [style]="style()" [class]="styleClass()" [ngClass]="containerClass()" [attr.data-p-highlight]="model() === true" [attr.data-p-checked]="model() === true" [attr.data-p-disabled]="disabled()" [title]="model()">
|
|
653
656
|
<input
|
|
@@ -677,11 +680,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImpor
|
|
|
677
680
|
<span class="p-checkbox-icon" [ngClass]="checkboxIcon()" [attr.data-pc-section]="'icon'"></span>
|
|
678
681
|
}
|
|
679
682
|
@else {
|
|
680
|
-
<
|
|
683
|
+
<span class="p-checkbox-icon pi pi-check" [attr.data-pc-section]="'icon'"></span>
|
|
681
684
|
}
|
|
682
685
|
}
|
|
683
686
|
@else if (model() === null) {
|
|
684
|
-
<
|
|
687
|
+
<span class="p-checkbox-icon pi pi-minus" [attr.data-pc-section]="'icon'"></span>
|
|
685
688
|
}
|
|
686
689
|
}
|
|
687
690
|
<ng-template *ngTemplateOutlet="checkboxIconTemplate() ?? _checkboxIconTemplate ?? null; context: { model: model, class: 'p-checkbox-icon' }"></ng-template>
|
|
@@ -710,6 +713,8 @@ class ProblemService {
|
|
|
710
713
|
const enclosingElement = nativeElement ?? document;
|
|
711
714
|
setTimeout(() => {
|
|
712
715
|
const validationErrorElements = enclosingElement.querySelectorAll('rw-validation-errors>val-errors>div');
|
|
716
|
+
if (validationErrorElements.length === 0)
|
|
717
|
+
return;
|
|
713
718
|
const firstError = validationErrorElements[0];
|
|
714
719
|
firstError.scrollIntoView({ behavior: 'smooth', block: 'center' });
|
|
715
720
|
}, 100);
|
|
@@ -726,6 +731,33 @@ class ProblemService {
|
|
|
726
731
|
}
|
|
727
732
|
return control;
|
|
728
733
|
}
|
|
734
|
+
/**
|
|
735
|
+
* Adds errors to a control's existing errors.
|
|
736
|
+
* @param control The control to add errors to.
|
|
737
|
+
* @param newErrors The new errors to add.
|
|
738
|
+
*/
|
|
739
|
+
addErrors(control, newErrors) {
|
|
740
|
+
if (!newErrors)
|
|
741
|
+
return;
|
|
742
|
+
// Get existing remote errors or initialize an empty array
|
|
743
|
+
const existingErrors = control.errors?.remote;
|
|
744
|
+
// Combine the errors
|
|
745
|
+
let combinedErrors;
|
|
746
|
+
if (!existingErrors) {
|
|
747
|
+
// No existing errors, just use the new ones
|
|
748
|
+
combinedErrors = [newErrors];
|
|
749
|
+
}
|
|
750
|
+
else if (Array.isArray(existingErrors)) {
|
|
751
|
+
// Existing errors are already an array, add to it
|
|
752
|
+
combinedErrors = [...existingErrors, newErrors];
|
|
753
|
+
}
|
|
754
|
+
else {
|
|
755
|
+
// Existing errors are not an array, combine with new errors
|
|
756
|
+
combinedErrors = [existingErrors, newErrors];
|
|
757
|
+
}
|
|
758
|
+
// Set the combined errors
|
|
759
|
+
control.setErrors({ ...control.errors, remote: combinedErrors });
|
|
760
|
+
}
|
|
729
761
|
/**
|
|
730
762
|
* Checks the response and displays errors if necessary.
|
|
731
763
|
* @param response The response to check.
|
|
@@ -800,6 +832,8 @@ class ProblemService {
|
|
|
800
832
|
displayValidationErrors(problemDetails, formGroup, nativeElement) {
|
|
801
833
|
// display validation errors
|
|
802
834
|
if (problemDetails["errors"]) {
|
|
835
|
+
// Add the problem detail to the form group errors
|
|
836
|
+
this.addErrors(formGroup, problemDetails.detail);
|
|
803
837
|
for (const [key, errorsForKey] of Object.entries(problemDetails["errors"])) {
|
|
804
838
|
const path = key.split(/\.|\[/).map(e => e.replace("]", ""));
|
|
805
839
|
// The path might start with a $, indicating the root.
|
|
@@ -807,17 +841,21 @@ class ProblemService {
|
|
|
807
841
|
path.shift();
|
|
808
842
|
const formControl = path.reduce(ProblemService.getSubControl, formGroup);
|
|
809
843
|
if (formControl) {
|
|
810
|
-
|
|
844
|
+
// Add the errors to the form control
|
|
845
|
+
this.addErrors(formControl, errorsForKey);
|
|
811
846
|
formControl.markAsTouched();
|
|
812
847
|
}
|
|
848
|
+
// Add the field-specific errors to the form group as well
|
|
849
|
+
this.addErrors(formGroup, errorsForKey);
|
|
813
850
|
}
|
|
851
|
+
formGroup.markAsTouched();
|
|
814
852
|
}
|
|
815
853
|
ProblemService.scrollToFirstValidationError(nativeElement);
|
|
816
854
|
}
|
|
817
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
818
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
855
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ProblemService, deps: [{ token: i2$1.MessageService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
856
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ProblemService, providedIn: "root" });
|
|
819
857
|
}
|
|
820
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
858
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ProblemService, decorators: [{
|
|
821
859
|
type: Injectable,
|
|
822
860
|
args: [{
|
|
823
861
|
providedIn: "root"
|
|
@@ -849,7 +887,7 @@ class RestWorldClient {
|
|
|
849
887
|
if (!originalHeaders)
|
|
850
888
|
return headersToAdd;
|
|
851
889
|
let combinedHeaders = originalHeaders;
|
|
852
|
-
for (const key
|
|
890
|
+
for (const key of headersToAdd.keys()) {
|
|
853
891
|
if (!combinedHeaders.has(key) || overwriteExisting) {
|
|
854
892
|
const headerValuesToAdd = headersToAdd.getAll(key);
|
|
855
893
|
if (headerValuesToAdd)
|
|
@@ -865,8 +903,8 @@ class RestWorldClient {
|
|
|
865
903
|
'Content-Type': `${contentType ?? 'application/json'}; v=${version}`
|
|
866
904
|
});
|
|
867
905
|
return new HttpHeaders({
|
|
868
|
-
'Accept': `${accept ?? 'application/hal+json'}
|
|
869
|
-
'Content-Type': `${contentType ?? 'application/json'}
|
|
906
|
+
'Accept': `${accept ?? 'application/hal+json'}`,
|
|
907
|
+
'Content-Type': `${contentType ?? 'application/json'}`
|
|
870
908
|
});
|
|
871
909
|
}
|
|
872
910
|
static createHeadersWithoutBody(version, accept) {
|
|
@@ -876,7 +914,7 @@ class RestWorldClient {
|
|
|
876
914
|
'Content-Type': `v=${version}`
|
|
877
915
|
});
|
|
878
916
|
return new HttpHeaders({
|
|
879
|
-
'Accept': `${accept ?? 'application/hal+json'}
|
|
917
|
+
'Accept': `${accept ?? 'application/hal+json'}`,
|
|
880
918
|
});
|
|
881
919
|
}
|
|
882
920
|
/**
|
|
@@ -888,12 +926,13 @@ class RestWorldClient {
|
|
|
888
926
|
*/
|
|
889
927
|
async delete(resource) {
|
|
890
928
|
const deleteLink = resource.findLink('delete');
|
|
891
|
-
if (!deleteLink)
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
929
|
+
if (!deleteLink) {
|
|
930
|
+
const selfLink = resource.findLink('self');
|
|
931
|
+
const resourceInfo = selfLink ? `Resource with self link: ${selfLink.href}` : 'Resource (no self link)';
|
|
932
|
+
throw new Error(`The resource does not have a delete link. ${resourceInfo}`);
|
|
933
|
+
}
|
|
934
|
+
const url = deleteLink.href;
|
|
935
|
+
return this.deleteByUrl(url, resource.timestamp);
|
|
897
936
|
}
|
|
898
937
|
/**
|
|
899
938
|
* Deletes a resource identified by the given template and timestamp supplied by the given form group.
|
|
@@ -914,13 +953,13 @@ class RestWorldClient {
|
|
|
914
953
|
* Deletes a resource at the specified URL.
|
|
915
954
|
*
|
|
916
955
|
* @param url - The URL of the resource to delete.
|
|
917
|
-
* @param timestamp - An optional
|
|
956
|
+
* @param timestamp - An optional If-Match value to include in the request headers.
|
|
918
957
|
* @returns A promise that resolves to an HttpResponse containing either void or ProblemDetails.
|
|
919
958
|
*/
|
|
920
959
|
async deleteByUrl(url, timestamp) {
|
|
921
960
|
let header = RestWorldClient.createHeadersWithoutBody(this._options.Version);
|
|
922
961
|
if (timestamp !== undefined)
|
|
923
|
-
header = header.append("
|
|
962
|
+
header = header.append("If-Match", timestamp);
|
|
924
963
|
const response = await this.halClient.delete(url, header);
|
|
925
964
|
return response;
|
|
926
965
|
}
|
|
@@ -1027,20 +1066,57 @@ class RestWorldClient {
|
|
|
1027
1066
|
* Retrieves all templates associated with a given resource.
|
|
1028
1067
|
*
|
|
1029
1068
|
* This method fetches all forms related to the provided {@link Resource} and extracts the templates from the responses.
|
|
1030
|
-
* If any of the form responses indicate a failure,
|
|
1069
|
+
* If any of the form responses indicate a failure, it creates a combined ProblemDetails object with information from all failures.
|
|
1031
1070
|
*
|
|
1032
1071
|
* @param resource - The {@link Resource} for which to retrieve templates.
|
|
1033
|
-
* @returns A promise that resolves to the {@link Templates} associated with the resource.
|
|
1034
|
-
* @throws An error if any of the form responses fail.
|
|
1072
|
+
* @returns A promise that resolves to the {@link Templates} associated with the resource or ProblemDetails if there's an error.
|
|
1035
1073
|
*/
|
|
1036
1074
|
async getAllTemplates(resource) {
|
|
1037
1075
|
const formResponses = await this.getAllForms(resource);
|
|
1038
1076
|
const failedResponses = formResponses.filter(response => !response.ok || ProblemDetails.isProblemDetails(response.body) || !response.body);
|
|
1039
1077
|
if (failedResponses.length !== 0) {
|
|
1040
|
-
|
|
1041
|
-
|
|
1078
|
+
// If we have multiple failed responses, create a combined problem details
|
|
1079
|
+
if (failedResponses.length > 1) {
|
|
1080
|
+
const failureDetails = failedResponses.map(response => {
|
|
1081
|
+
if (ProblemDetails.isProblemDetails(response.body)) {
|
|
1082
|
+
return response.body.detail || `Problem details from ${response.url}`;
|
|
1083
|
+
}
|
|
1084
|
+
return `Error ${response.status} (${response.statusText}) from ${response.url}`;
|
|
1085
|
+
}).join('; ');
|
|
1086
|
+
// Check if all failed responses have the same status code
|
|
1087
|
+
const allStatuses = failedResponses.map(response => {
|
|
1088
|
+
if (ProblemDetails.isProblemDetails(response.body)) {
|
|
1089
|
+
return response.body.status;
|
|
1090
|
+
}
|
|
1091
|
+
return response.status;
|
|
1092
|
+
});
|
|
1093
|
+
// Use the common status code if all are the same, otherwise use 500
|
|
1094
|
+
const uniqueStatuses = new Set(allStatuses);
|
|
1095
|
+
const status = uniqueStatuses.size === 1 ? allStatuses[0] : 500;
|
|
1096
|
+
const problemDetailsDto = {
|
|
1097
|
+
_links: { self: [{ href: resource.findLink('self')?.href || "" }] },
|
|
1098
|
+
detail: `Multiple errors occurred while loading form responses: ${failureDetails}`,
|
|
1099
|
+
status: status,
|
|
1100
|
+
title: "Multiple Form Loading Errors",
|
|
1101
|
+
type: "https://tools.ietf.org/html/rfc7231#section-6.5"
|
|
1102
|
+
};
|
|
1103
|
+
return new ProblemDetails(problemDetailsDto);
|
|
1104
|
+
}
|
|
1105
|
+
// Single failure case
|
|
1106
|
+
const firstFailedResponse = failedResponses[0];
|
|
1107
|
+
if (ProblemDetails.isProblemDetails(firstFailedResponse.body)) {
|
|
1108
|
+
return firstFailedResponse.body;
|
|
1042
1109
|
}
|
|
1043
|
-
|
|
1110
|
+
// If we don't have a ProblemDetails object but the response failed,
|
|
1111
|
+
// create a new ProblemDetails object with the error information
|
|
1112
|
+
const problemDetailsDto = {
|
|
1113
|
+
_links: { self: [{ href: firstFailedResponse.url || "" }] },
|
|
1114
|
+
detail: `Error while loading the response from ${firstFailedResponse.url}`,
|
|
1115
|
+
status: firstFailedResponse.status,
|
|
1116
|
+
title: firstFailedResponse.statusText,
|
|
1117
|
+
type: "https://tools.ietf.org/html/rfc7231#section-6.5.1"
|
|
1118
|
+
};
|
|
1119
|
+
return new ProblemDetails(problemDetailsDto);
|
|
1044
1120
|
}
|
|
1045
1121
|
const formTemplates = Object.assign({}, ...formResponses.map(response => response.body._templates));
|
|
1046
1122
|
return formTemplates;
|
|
@@ -1215,10 +1291,14 @@ class RestWorldClient {
|
|
|
1215
1291
|
*/
|
|
1216
1292
|
async save(resource) {
|
|
1217
1293
|
const saveLink = resource.findLink('save');
|
|
1218
|
-
if (!saveLink)
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
throw new Error(`The
|
|
1294
|
+
if (!saveLink) {
|
|
1295
|
+
const selfLink = resource.findLink('self');
|
|
1296
|
+
const resourceInfo = selfLink ? `Resource with self link: ${selfLink.href}` : 'Resource (no self link)';
|
|
1297
|
+
throw new Error(`The resource does not have a save link. ${resourceInfo}`);
|
|
1298
|
+
}
|
|
1299
|
+
if (!saveLink.name) {
|
|
1300
|
+
throw new Error(`The save link with href '${saveLink.href}' does not have a save name.`);
|
|
1301
|
+
}
|
|
1222
1302
|
const uri = saveLink.href;
|
|
1223
1303
|
const method = saveLink.name.toLowerCase();
|
|
1224
1304
|
const header = RestWorldClient.createHeadersWithBody(this._options.Version);
|
|
@@ -1282,6 +1362,127 @@ class RestWorldClient {
|
|
|
1282
1362
|
else
|
|
1283
1363
|
this._defaultCurie = curies[0].name;
|
|
1284
1364
|
}
|
|
1365
|
+
/**
|
|
1366
|
+
* Retrieves all forms associated with a resource fetched by its URI.
|
|
1367
|
+
*
|
|
1368
|
+
* This method first fetches the resource from the given URI and then retrieves all forms for that resource.
|
|
1369
|
+
* If the resource response contains a problem detail, it returns an array with a single HTTP response containing that problem detail.
|
|
1370
|
+
*
|
|
1371
|
+
* @param uri - The URI of the resource to fetch.
|
|
1372
|
+
* @param headers - Optional HTTP headers to include in the request.
|
|
1373
|
+
* @returns A promise that resolves to an array of HTTP responses, each containing either a `FormsResource` or `ProblemDetails`.
|
|
1374
|
+
*/
|
|
1375
|
+
async getAllFormsByUri(uri, headers) {
|
|
1376
|
+
const resourceResponse = await this.getSingleByUri(uri, headers);
|
|
1377
|
+
if (!resourceResponse.ok || ProblemDetails.isProblemDetails(resourceResponse.body)) {
|
|
1378
|
+
// Return the problem details as is, wrapped in an array
|
|
1379
|
+
if (ProblemDetails.isProblemDetails(resourceResponse.body)) {
|
|
1380
|
+
return [resourceResponse];
|
|
1381
|
+
}
|
|
1382
|
+
// If no body or problem details, create a proper ProblemDetails object
|
|
1383
|
+
const problemDetailsDto = {
|
|
1384
|
+
_links: { self: [{ href: uri }] },
|
|
1385
|
+
detail: `Error while loading the resource from ${uri}`,
|
|
1386
|
+
status: resourceResponse.status,
|
|
1387
|
+
title: resourceResponse.statusText,
|
|
1388
|
+
type: "https://tools.ietf.org/html/rfc7231#section-6.5"
|
|
1389
|
+
};
|
|
1390
|
+
const problemDetails = new ProblemDetails(problemDetailsDto);
|
|
1391
|
+
// Modify the response body to include our problem details
|
|
1392
|
+
const errorResponse = { ...resourceResponse, body: problemDetails };
|
|
1393
|
+
return [errorResponse];
|
|
1394
|
+
}
|
|
1395
|
+
if (!resourceResponse.body) {
|
|
1396
|
+
// Handle empty response with a proper ProblemDetails object
|
|
1397
|
+
const problemDetailsDto = {
|
|
1398
|
+
_links: { self: [{ href: uri }] },
|
|
1399
|
+
detail: `Resource from ${uri} was empty`,
|
|
1400
|
+
status: 404,
|
|
1401
|
+
title: "Resource Not Found",
|
|
1402
|
+
type: "https://tools.ietf.org/html/rfc7231#section-6.5.4"
|
|
1403
|
+
};
|
|
1404
|
+
const problemDetails = new ProblemDetails(problemDetailsDto);
|
|
1405
|
+
const errorResponse = { ...resourceResponse, body: problemDetails };
|
|
1406
|
+
return [errorResponse];
|
|
1407
|
+
}
|
|
1408
|
+
return this.getAllForms(resourceResponse.body);
|
|
1409
|
+
}
|
|
1410
|
+
/**
|
|
1411
|
+
* Retrieves all templates associated with a resource fetched by its URI.
|
|
1412
|
+
*
|
|
1413
|
+
* This method first fetches the resource from the given URI and then retrieves all templates for that resource.
|
|
1414
|
+
* It combines functionality from {@link getSingleByUri} and {@link getAllTemplates}.
|
|
1415
|
+
* If the resource response contains a problem detail or if any form responses fail,
|
|
1416
|
+
* the method returns the problem detail rather than throwing an error.
|
|
1417
|
+
*
|
|
1418
|
+
* @param uri - The URI of the resource to fetch.
|
|
1419
|
+
* @param headers - Optional HTTP headers to include in the request.
|
|
1420
|
+
* @returns A promise that resolves to the {@link Templates} associated with the resource or a ProblemDetails object if there was an error.
|
|
1421
|
+
*/
|
|
1422
|
+
async getAllTemplatesByUri(uri, headers) {
|
|
1423
|
+
const resourceResponse = await this.getSingleByUri(uri, headers);
|
|
1424
|
+
if (!resourceResponse.ok || ProblemDetails.isProblemDetails(resourceResponse.body)) {
|
|
1425
|
+
if (ProblemDetails.isProblemDetails(resourceResponse.body)) {
|
|
1426
|
+
return resourceResponse.body;
|
|
1427
|
+
}
|
|
1428
|
+
// If no problem details in body but response not OK, create a proper ProblemDetails object
|
|
1429
|
+
const problemDetailsDto = {
|
|
1430
|
+
_links: { self: [{ href: uri }] },
|
|
1431
|
+
detail: `Error while loading the resource from ${uri}`,
|
|
1432
|
+
status: resourceResponse.status,
|
|
1433
|
+
title: resourceResponse.statusText,
|
|
1434
|
+
type: "https://tools.ietf.org/html/rfc7231#section-6.5"
|
|
1435
|
+
};
|
|
1436
|
+
return new ProblemDetails(problemDetailsDto);
|
|
1437
|
+
}
|
|
1438
|
+
if (!resourceResponse.body) {
|
|
1439
|
+
// Handle empty response with a proper ProblemDetails object
|
|
1440
|
+
const problemDetailsDto = {
|
|
1441
|
+
_links: { self: [{ href: uri }] },
|
|
1442
|
+
detail: `Resource from ${uri} was empty`,
|
|
1443
|
+
status: 404,
|
|
1444
|
+
title: "Resource Not Found",
|
|
1445
|
+
type: "https://tools.ietf.org/html/rfc7231#section-6.5.4"
|
|
1446
|
+
};
|
|
1447
|
+
return new ProblemDetails(problemDetailsDto);
|
|
1448
|
+
}
|
|
1449
|
+
return this.getAllTemplates(resourceResponse.body);
|
|
1450
|
+
}
|
|
1451
|
+
/**
|
|
1452
|
+
* Retrieves a specific template by title from a resource fetched by its URI.
|
|
1453
|
+
*
|
|
1454
|
+
* This method first fetches all templates from the resource at the given URI and then
|
|
1455
|
+
* returns the template with the specified title. If the resource cannot be fetched,
|
|
1456
|
+
* if it contains a problem detail, or if any form responses fail, this method returns
|
|
1457
|
+
* the problem detail rather than throwing an error.
|
|
1458
|
+
*
|
|
1459
|
+
* @param uri - The URI of the resource to fetch.
|
|
1460
|
+
* @param templateTitle - The title of the template to retrieve.
|
|
1461
|
+
* @param headers - Optional HTTP headers to include in the request.
|
|
1462
|
+
* @returns A promise that resolves to the {@link Template} with the specified title or a ProblemDetails object if there was an error.
|
|
1463
|
+
*/
|
|
1464
|
+
async getTemplateByUri(uri, templateTitle, headers) {
|
|
1465
|
+
const templatesOrProblemDetails = await this.getAllTemplatesByUri(uri, headers);
|
|
1466
|
+
// If we got ProblemDetails instead of Templates, return it
|
|
1467
|
+
if (ProblemDetails.isProblemDetails(templatesOrProblemDetails)) {
|
|
1468
|
+
return templatesOrProblemDetails;
|
|
1469
|
+
}
|
|
1470
|
+
const templates = templatesOrProblemDetails;
|
|
1471
|
+
const template = templates[templateTitle];
|
|
1472
|
+
if (template === undefined) {
|
|
1473
|
+
const templateTitles = Object.keys(templates);
|
|
1474
|
+
// Instead of throwing an error, return a properly constructed ProblemDetails object
|
|
1475
|
+
const problemDetailsDto = {
|
|
1476
|
+
_links: { self: [{ href: uri }] },
|
|
1477
|
+
detail: `No template with title '${templateTitle}' found. Available templates are: ${templateTitles.join(', ')}`,
|
|
1478
|
+
status: 404,
|
|
1479
|
+
title: "Template Not Found",
|
|
1480
|
+
type: "https://tools.ietf.org/html/rfc7231#section-6.5.4"
|
|
1481
|
+
};
|
|
1482
|
+
return new ProblemDetails(problemDetailsDto);
|
|
1483
|
+
}
|
|
1484
|
+
return template;
|
|
1485
|
+
}
|
|
1285
1486
|
}
|
|
1286
1487
|
|
|
1287
1488
|
/**
|
|
@@ -1337,10 +1538,10 @@ class RestWorldClientCollection {
|
|
|
1337
1538
|
get all() {
|
|
1338
1539
|
return this._clients;
|
|
1339
1540
|
}
|
|
1340
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1341
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
1541
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldClientCollection, deps: [{ token: i1$1.HalClient }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1542
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldClientCollection, providedIn: 'root' });
|
|
1342
1543
|
}
|
|
1343
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1544
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldClientCollection, decorators: [{
|
|
1344
1545
|
type: Injectable,
|
|
1345
1546
|
args: [{
|
|
1346
1547
|
providedIn: 'root'
|
|
@@ -1361,15 +1562,15 @@ class OptionsManager {
|
|
|
1361
1562
|
selectedValues;
|
|
1362
1563
|
_getLabel;
|
|
1363
1564
|
_getTooltip;
|
|
1364
|
-
getLabel = computed(() => this._getLabel() ?? ((itemOrValue) => this.getDefaultLabel(itemOrValue)));
|
|
1365
|
-
getTooltip = computed(() => this._getTooltip() ?? ((itemOrValue) => this.getDefaultTooltip(itemOrValue)));
|
|
1565
|
+
getLabel = computed(() => this._getLabel() ?? ((itemOrValue) => this.getDefaultLabel(itemOrValue)), ...(ngDevMode ? [{ debugName: "getLabel" }] : []));
|
|
1566
|
+
getTooltip = computed(() => this._getTooltip() ?? ((itemOrValue) => this.getDefaultTooltip(itemOrValue)), ...(ngDevMode ? [{ debugName: "getTooltip" }] : []));
|
|
1366
1567
|
items = linkedSignal(() => this.options()?.inline ?? []);
|
|
1367
|
-
loading = signal(false);
|
|
1368
|
-
options = computed(() => this.property().options);
|
|
1369
|
-
promptField = computed(() => this.options()?.promptField ?? "prompt");
|
|
1370
|
-
valueField = computed(() => this.options()?.valueField ?? "value");
|
|
1371
|
-
_client = computed(() => this._clients.getClient(this.apiName()));
|
|
1372
|
-
selectedItems = computed(() => this.selectedValues()?.map(value => this.getItemByValue(this.items(), value) ?? []));
|
|
1568
|
+
loading = signal(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
|
|
1569
|
+
options = computed(() => this.property().options, ...(ngDevMode ? [{ debugName: "options" }] : []));
|
|
1570
|
+
promptField = computed(() => this.options()?.promptField ?? "prompt", ...(ngDevMode ? [{ debugName: "promptField" }] : []));
|
|
1571
|
+
valueField = computed(() => this.options()?.valueField ?? "value", ...(ngDevMode ? [{ debugName: "valueField" }] : []));
|
|
1572
|
+
_client = computed(() => this._clients.getClient(this.apiName()), ...(ngDevMode ? [{ debugName: "_client" }] : []));
|
|
1573
|
+
selectedItems = computed(() => this.selectedValues()?.map(value => this.getItemByValue(this.items(), value) ?? []), ...(ngDevMode ? [{ debugName: "selectedItems" }] : []));
|
|
1373
1574
|
constructor(_problemService, _clients, apiName, property, selectedValues, _getLabel, _getTooltip) {
|
|
1374
1575
|
this._problemService = _problemService;
|
|
1375
1576
|
this._clients = _clients;
|
|
@@ -1512,10 +1713,10 @@ class OptionsService {
|
|
|
1512
1713
|
getManager(apiName, property, selectValues, getLabel, getTooltip) {
|
|
1513
1714
|
return new OptionsManager(this._problemService, this._clients, apiName, property, selectValues, getLabel, getTooltip);
|
|
1514
1715
|
}
|
|
1515
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1516
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
1716
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: OptionsService, deps: [{ token: ProblemService }, { token: RestWorldClientCollection }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1717
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: OptionsService, providedIn: 'root' });
|
|
1517
1718
|
}
|
|
1518
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1719
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: OptionsService, decorators: [{
|
|
1519
1720
|
type: Injectable,
|
|
1520
1721
|
args: [{
|
|
1521
1722
|
providedIn: 'root'
|
|
@@ -1536,23 +1737,23 @@ class RestWorldDisplayCollectionComponent {
|
|
|
1536
1737
|
* @required
|
|
1537
1738
|
* @remarks This is the name of the API as defined in the `RestWorldClientCollection`.
|
|
1538
1739
|
*/
|
|
1539
|
-
apiName = input.required();
|
|
1740
|
+
apiName = input.required(...(ngDevMode ? [{ debugName: "apiName" }] : []));
|
|
1540
1741
|
/**
|
|
1541
1742
|
* The property to display.
|
|
1542
1743
|
* @required
|
|
1543
1744
|
*/
|
|
1544
|
-
property = input.required();
|
|
1745
|
+
property = input.required(...(ngDevMode ? [{ debugName: "property" }] : []));
|
|
1545
1746
|
templates = computed(() => {
|
|
1546
1747
|
const values = this.values();
|
|
1547
1748
|
const property = this.property();
|
|
1548
1749
|
return values ?
|
|
1549
1750
|
Array.from(RestWorldDisplayCollectionComponent.map(RestWorldDisplayCollectionComponent.toArray(values).entries(), (entry) => (new NumberTemplate({ ...property._templates.default, title: entry[0].toString() })))) :
|
|
1550
1751
|
RestWorldDisplayCollectionComponent.getCollectionEntryTemplates(property);
|
|
1551
|
-
});
|
|
1752
|
+
}, ...(ngDevMode ? [{ debugName: "templates" }] : []));
|
|
1552
1753
|
/**
|
|
1553
1754
|
* The value to display. If not set, the value of the property will be used.
|
|
1554
1755
|
*/
|
|
1555
|
-
values = input();
|
|
1756
|
+
values = input(...(ngDevMode ? [undefined, { debugName: "values" }] : []));
|
|
1556
1757
|
static getCollectionEntryTemplates(property) {
|
|
1557
1758
|
if (!property)
|
|
1558
1759
|
return [];
|
|
@@ -1572,10 +1773,10 @@ class RestWorldDisplayCollectionComponent {
|
|
|
1572
1773
|
return arrayOrDictionary;
|
|
1573
1774
|
return Object.entries(arrayOrDictionary).map(([key, value]) => ({ key, value: value }));
|
|
1574
1775
|
}
|
|
1575
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1576
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
1776
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldDisplayCollectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1777
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RestWorldDisplayCollectionComponent, isStandalone: true, selector: "rw-display-collection", inputs: { apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, property: { classPropertyName: "property", publicName: "property", isSignal: true, isRequired: true, transformFunction: null }, values: { classPropertyName: "values", publicName: "values", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"flex align-items-center\">\r\n <div class=\"brace\">\r\n </div>\r\n <div class=\"w-full\">\r\n @for (template of templates(); track template) {\r\n <div class=\"flex align-items-center\">\r\n <div class=\"brace\">\r\n </div>\r\n <div class=\"w-full flex justify-content-end\">\r\n <rw-display-template [template]=\"$any(template)\" [value]=\"values() ? $any(values())[template.title!] : undefined\" [apiName]=\"apiName()\" class=\"w-full\"></rw-display-template>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", styles: [".brace{align-self:stretch;margin:.2rem .5rem;border-left:1px solid rgb(206,212,218);border-top:1px solid rgb(206,212,218);border-bottom:1px solid rgb(206,212,218);width:1rem}\n"], dependencies: [{ kind: "component", type: i0.forwardRef(() => RestWorldDisplayTemplateComponent), selector: "rw-display-template", inputs: ["apiName", "template", "value"] }] });
|
|
1577
1778
|
}
|
|
1578
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1779
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldDisplayCollectionComponent, decorators: [{
|
|
1579
1780
|
type: Component,
|
|
1580
1781
|
args: [{ selector: 'rw-display-collection', standalone: true, imports: [forwardRef(() => RestWorldDisplayTemplateComponent)], template: "<div class=\"flex align-items-center\">\r\n <div class=\"brace\">\r\n </div>\r\n <div class=\"w-full\">\r\n @for (template of templates(); track template) {\r\n <div class=\"flex align-items-center\">\r\n <div class=\"brace\">\r\n </div>\r\n <div class=\"w-full flex justify-content-end\">\r\n <rw-display-template [template]=\"$any(template)\" [value]=\"values() ? $any(values())[template.title!] : undefined\" [apiName]=\"apiName()\" class=\"w-full\"></rw-display-template>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", styles: [".brace{align-self:stretch;margin:.2rem .5rem;border-left:1px solid rgb(206,212,218);border-top:1px solid rgb(206,212,218);border-bottom:1px solid rgb(206,212,218);width:1rem}\n"] }]
|
|
1581
1782
|
}] });
|
|
@@ -1594,30 +1795,30 @@ class RestWorldDisplayComponent {
|
|
|
1594
1795
|
* @required
|
|
1595
1796
|
* @remarks This is the name of the API as defined in the `RestWorldClientCollection`.
|
|
1596
1797
|
*/
|
|
1597
|
-
apiName = input.required();
|
|
1798
|
+
apiName = input.required(...(ngDevMode ? [{ debugName: "apiName" }] : []));
|
|
1598
1799
|
/**
|
|
1599
1800
|
* Either the value or the property.value if the value is not set.
|
|
1600
1801
|
*/
|
|
1601
|
-
computedValue = computed(() => this.value() ?? this.property().value);
|
|
1802
|
+
computedValue = computed(() => this.value() ?? this.property().value, ...(ngDevMode ? [{ debugName: "computedValue" }] : []));
|
|
1602
1803
|
/**
|
|
1603
1804
|
* The property to display.
|
|
1604
1805
|
* @required
|
|
1605
1806
|
*/
|
|
1606
|
-
property = input.required();
|
|
1807
|
+
property = input.required(...(ngDevMode ? [{ debugName: "property" }] : []));
|
|
1607
1808
|
/**
|
|
1608
1809
|
* The value to display. If not set, the value of the property will be used.
|
|
1609
1810
|
*/
|
|
1610
|
-
value = input();
|
|
1811
|
+
value = input(...(ngDevMode ? [undefined, { debugName: "value" }] : []));
|
|
1611
1812
|
get PropertyType() {
|
|
1612
1813
|
return PropertyType;
|
|
1613
1814
|
}
|
|
1614
1815
|
get PropertyWithOptions() {
|
|
1615
1816
|
return PropertyWithOptions;
|
|
1616
1817
|
}
|
|
1617
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1618
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
1818
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldDisplayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1819
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RestWorldDisplayComponent, isStandalone: true, selector: "rw-display", inputs: { apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, property: { classPropertyName: "property", publicName: "property", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (property().type !== PropertyType.Hidden) {\r\n @if (property().options) {\r\n <rw-display-dropdown [property]=\"$any(property())\" [selectedValues]=\"$any(computedValue())\" [apiName]=\"apiName()\"></rw-display-dropdown>\r\n }\r\n @else {\r\n @switch (property().type) {\r\n @case (PropertyType.Object) {\r\n <rw-display-object [property]=\"$any(property())\" [value]=\"$any(computedValue())\" [apiName]=\"apiName()\"></rw-display-object>\r\n }\r\n @case (PropertyType.Collection) {\r\n <rw-display-collection [property]=\"$any(property())\" [values]=\"$any(computedValue())\" [apiName]=\"apiName()\"></rw-display-collection>\r\n }\r\n @default {\r\n <rw-display-simple [property]=\"property()\" [value]=\"$any(computedValue())\" [apiName]=\"apiName()\"></rw-display-simple>\r\n }\r\n }\r\n }\r\n}\r\n", styles: [""], dependencies: [{ kind: "component", type: i0.forwardRef(() => RestWorldDisplayDropdownComponent), selector: "rw-display-dropdown", inputs: ["apiName", "getLabel", "getTooltip", "property", "selectedValues"] }, { kind: "component", type: i0.forwardRef(() => RestWorldDisplayObjectComponent), selector: "rw-display-object", inputs: ["apiName", "property", "value"] }, { kind: "component", type: i0.forwardRef(() => RestWorldDisplaySimpleComponent), selector: "rw-display-simple", inputs: ["apiName", "property", "value"] }, { kind: "component", type: i0.forwardRef(() => RestWorldDisplayCollectionComponent), selector: "rw-display-collection", inputs: ["apiName", "property", "values"] }] });
|
|
1619
1820
|
}
|
|
1620
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1821
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldDisplayComponent, decorators: [{
|
|
1621
1822
|
type: Component,
|
|
1622
1823
|
args: [{ selector: 'rw-display', standalone: true, imports: [forwardRef(() => RestWorldDisplayDropdownComponent), forwardRef(() => RestWorldDisplayObjectComponent), forwardRef(() => RestWorldDisplaySimpleComponent), RestWorldDisplayCollectionComponent], template: "@if (property().type !== PropertyType.Hidden) {\r\n @if (property().options) {\r\n <rw-display-dropdown [property]=\"$any(property())\" [selectedValues]=\"$any(computedValue())\" [apiName]=\"apiName()\"></rw-display-dropdown>\r\n }\r\n @else {\r\n @switch (property().type) {\r\n @case (PropertyType.Object) {\r\n <rw-display-object [property]=\"$any(property())\" [value]=\"$any(computedValue())\" [apiName]=\"apiName()\"></rw-display-object>\r\n }\r\n @case (PropertyType.Collection) {\r\n <rw-display-collection [property]=\"$any(property())\" [values]=\"$any(computedValue())\" [apiName]=\"apiName()\"></rw-display-collection>\r\n }\r\n @default {\r\n <rw-display-simple [property]=\"property()\" [value]=\"$any(computedValue())\" [apiName]=\"apiName()\"></rw-display-simple>\r\n }\r\n }\r\n }\r\n}\r\n" }]
|
|
1623
1824
|
}] });
|
|
@@ -1635,7 +1836,7 @@ class RestWorldDisplayDropdownComponent {
|
|
|
1635
1836
|
* @required
|
|
1636
1837
|
* @remarks This is the name of the API as defined in the `RestWorldClientCollection`.
|
|
1637
1838
|
*/
|
|
1638
|
-
apiName = input.required();
|
|
1839
|
+
apiName = input.required(...(ngDevMode ? [{ debugName: "apiName" }] : []));
|
|
1639
1840
|
/**
|
|
1640
1841
|
* A function that returns the label for the given item.
|
|
1641
1842
|
* The default returns the prompt and optionally the value in brackets.
|
|
@@ -1643,7 +1844,7 @@ class RestWorldDisplayDropdownComponent {
|
|
|
1643
1844
|
* Overwrite this function to change the label.
|
|
1644
1845
|
* @param item The item to get the label for.
|
|
1645
1846
|
*/
|
|
1646
|
-
getLabel = input();
|
|
1847
|
+
getLabel = input(...(ngDevMode ? [undefined, { debugName: "getLabel" }] : []));
|
|
1647
1848
|
/**
|
|
1648
1849
|
* A function that returns the tooltip for the given item.
|
|
1649
1850
|
* The default returns all properties of the item except the ones that start with an underscore or the ones that are in the list of default properties to exclude.
|
|
@@ -1651,14 +1852,14 @@ class RestWorldDisplayDropdownComponent {
|
|
|
1651
1852
|
* Overwrite this function to change the tooltip.
|
|
1652
1853
|
* @param item The item to get the label for.
|
|
1653
1854
|
*/
|
|
1654
|
-
getTooltip = input();
|
|
1655
|
-
options = computed(() => this.property().options);
|
|
1855
|
+
getTooltip = input(...(ngDevMode ? [undefined, { debugName: "getTooltip" }] : []));
|
|
1856
|
+
options = computed(() => this.property().options, ...(ngDevMode ? [{ debugName: "options" }] : []));
|
|
1656
1857
|
/**
|
|
1657
1858
|
* The property to display.
|
|
1658
1859
|
* @required
|
|
1659
1860
|
*/
|
|
1660
|
-
property = input.required();
|
|
1661
|
-
selectedValues = input([], { transform: (value) => (Array.isArray(value) ? value : [value]) });
|
|
1861
|
+
property = input.required(...(ngDevMode ? [{ debugName: "property" }] : []));
|
|
1862
|
+
selectedValues = input([], ...(ngDevMode ? [{ debugName: "selectedValues", transform: (value) => (Array.isArray(value) ? value : [value]) }] : [{ transform: (value) => (Array.isArray(value) ? value : [value]) }]));
|
|
1662
1863
|
optionsManager;
|
|
1663
1864
|
constructor(optionsService) {
|
|
1664
1865
|
this.optionsManager = optionsService.getManager(this.apiName, this.property, this.selectedValues, this.getLabel, this.getTooltip);
|
|
@@ -1666,10 +1867,10 @@ class RestWorldDisplayDropdownComponent {
|
|
|
1666
1867
|
async ngOnInit() {
|
|
1667
1868
|
await this.optionsManager.initialize();
|
|
1668
1869
|
}
|
|
1669
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1670
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
1870
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldDisplayDropdownComponent, deps: [{ token: OptionsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1871
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RestWorldDisplayDropdownComponent, isStandalone: true, selector: "rw-display-dropdown", inputs: { apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, getLabel: { classPropertyName: "getLabel", publicName: "getLabel", isSignal: true, isRequired: false, transformFunction: null }, getTooltip: { classPropertyName: "getTooltip", publicName: "getTooltip", isSignal: true, isRequired: false, transformFunction: null }, property: { classPropertyName: "property", publicName: "property", isSignal: true, isRequired: true, transformFunction: null }, selectedValues: { classPropertyName: "selectedValues", publicName: "selectedValues", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@for (item of optionsManager.selectedItems(); track item; let last = $last) {\r\n <span [pTooltip]=\"optionsManager.getTooltip()($any(item))\">{{optionsManager.getLabel()($any(item))}}</span>{{last ? \"\" : \", \"}}\r\n}\r\n", styles: [""], dependencies: [{ kind: "directive", type: Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo"] }] });
|
|
1671
1872
|
}
|
|
1672
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1873
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldDisplayDropdownComponent, decorators: [{
|
|
1673
1874
|
type: Component,
|
|
1674
1875
|
args: [{ selector: 'rw-display-dropdown', standalone: true, imports: [Tooltip], template: "@for (item of optionsManager.selectedItems(); track item; let last = $last) {\r\n <span [pTooltip]=\"optionsManager.getTooltip()($any(item))\">{{optionsManager.getLabel()($any(item))}}</span>{{last ? \"\" : \", \"}}\r\n}\r\n" }]
|
|
1675
1876
|
}], ctorParameters: () => [{ type: OptionsService }] });
|
|
@@ -1686,27 +1887,27 @@ class RestWorldDisplayElementComponent {
|
|
|
1686
1887
|
* @required
|
|
1687
1888
|
* @remarks This is the name of the API as defined in the `RestWorldClientCollection`.
|
|
1688
1889
|
*/
|
|
1689
|
-
apiName = input.required();
|
|
1890
|
+
apiName = input.required(...(ngDevMode ? [{ debugName: "apiName" }] : []));
|
|
1690
1891
|
/**
|
|
1691
1892
|
* Either the value or the property.value if the value is not set.
|
|
1692
1893
|
*/
|
|
1693
|
-
computedValue = computed(() => this.value() ?? this.property().value);
|
|
1894
|
+
computedValue = computed(() => this.value() ?? this.property().value, ...(ngDevMode ? [{ debugName: "computedValue" }] : []));
|
|
1694
1895
|
/**
|
|
1695
1896
|
* The property to display.
|
|
1696
1897
|
* @required
|
|
1697
1898
|
*/
|
|
1698
|
-
property = input.required();
|
|
1899
|
+
property = input.required(...(ngDevMode ? [{ debugName: "property" }] : []));
|
|
1699
1900
|
/**
|
|
1700
1901
|
* The value to display. If not set, the value of the property will be used.
|
|
1701
1902
|
*/
|
|
1702
|
-
value = input();
|
|
1903
|
+
value = input(...(ngDevMode ? [undefined, { debugName: "value" }] : []));
|
|
1703
1904
|
get PropertyType() {
|
|
1704
1905
|
return PropertyType;
|
|
1705
1906
|
}
|
|
1706
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1707
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
1907
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldDisplayElementComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1908
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RestWorldDisplayElementComponent, isStandalone: true, selector: "rw-display-element", inputs: { apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, property: { classPropertyName: "property", publicName: "property", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (property().type !== PropertyType.Hidden) {\r\n <div class=\"grid field\">\r\n <rw-label [property]=\"property()\" class=\"col-12 md:col-2 flex align-items-center\"></rw-label>\r\n <rw-display [property]=\"property()\" [value]=\"computedValue()\" [apiName]=\"apiName()\" class=\"col-12 md:col-10\"></rw-display>\r\n </div>\r\n}\r\n", styles: [""], dependencies: [{ kind: "component", type: RestWorldLabelComponent, selector: "rw-label", inputs: ["property"] }, { kind: "component", type: RestWorldDisplayComponent, selector: "rw-display", inputs: ["apiName", "property", "value"] }] });
|
|
1708
1909
|
}
|
|
1709
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1910
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldDisplayElementComponent, decorators: [{
|
|
1710
1911
|
type: Component,
|
|
1711
1912
|
args: [{ selector: 'rw-display-element', standalone: true, imports: [RestWorldLabelComponent, RestWorldDisplayComponent], template: "@if (property().type !== PropertyType.Hidden) {\r\n <div class=\"grid field\">\r\n <rw-label [property]=\"property()\" class=\"col-12 md:col-2 flex align-items-center\"></rw-label>\r\n <rw-display [property]=\"property()\" [value]=\"computedValue()\" [apiName]=\"apiName()\" class=\"col-12 md:col-10\"></rw-display>\r\n </div>\r\n}\r\n" }]
|
|
1712
1913
|
}] });
|
|
@@ -1724,20 +1925,20 @@ class RestWorldDisplayObjectComponent {
|
|
|
1724
1925
|
* @required
|
|
1725
1926
|
* @remarks This is the name of the API as defined in the `RestWorldClientCollection`.
|
|
1726
1927
|
*/
|
|
1727
|
-
apiName = input.required();
|
|
1928
|
+
apiName = input.required(...(ngDevMode ? [{ debugName: "apiName" }] : []));
|
|
1728
1929
|
/**
|
|
1729
1930
|
* The property to display.
|
|
1730
1931
|
* @required
|
|
1731
1932
|
*/
|
|
1732
|
-
property = input.required();
|
|
1933
|
+
property = input.required(...(ngDevMode ? [{ debugName: "property" }] : []));
|
|
1733
1934
|
/**
|
|
1734
1935
|
* The value to display. If not set, the value of the template properties will be used.
|
|
1735
1936
|
*/
|
|
1736
|
-
value = input();
|
|
1737
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1738
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "
|
|
1937
|
+
value = input(...(ngDevMode ? [undefined, { debugName: "value" }] : []));
|
|
1938
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldDisplayObjectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1939
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.1", type: RestWorldDisplayObjectComponent, isStandalone: true, selector: "rw-display-object", inputs: { apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, property: { classPropertyName: "property", publicName: "property", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"flex align-items-center\">\r\n <div class=\"brace\">\r\n </div>\r\n <div class=\"w-full\">\r\n <rw-display-template [template]=\"property()._templates.default\" [value]=\"value\" [apiName]=\"apiName()\"></rw-display-template>\r\n </div>\r\n</div>", styles: [".brace{align-self:stretch;margin:.2rem .5rem;border-left:1px solid rgb(206,212,218);border-top:1px solid rgb(206,212,218);border-bottom:1px solid rgb(206,212,218);width:1rem}\n"], dependencies: [{ kind: "component", type: i0.forwardRef(() => RestWorldDisplayTemplateComponent), selector: "rw-display-template", inputs: ["apiName", "template", "value"] }] });
|
|
1739
1940
|
}
|
|
1740
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1941
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldDisplayObjectComponent, decorators: [{
|
|
1741
1942
|
type: Component,
|
|
1742
1943
|
args: [{ selector: 'rw-display-object', standalone: true, imports: [forwardRef(() => RestWorldDisplayTemplateComponent)], template: "<div class=\"flex align-items-center\">\r\n <div class=\"brace\">\r\n </div>\r\n <div class=\"w-full\">\r\n <rw-display-template [template]=\"property()._templates.default\" [value]=\"value\" [apiName]=\"apiName()\"></rw-display-template>\r\n </div>\r\n</div>", styles: [".brace{align-self:stretch;margin:.2rem .5rem;border-left:1px solid rgb(206,212,218);border-top:1px solid rgb(206,212,218);border-bottom:1px solid rgb(206,212,218);width:1rem}\n"] }]
|
|
1743
1944
|
}] });
|
|
@@ -1765,20 +1966,20 @@ class RestWorldDisplaySimpleComponent {
|
|
|
1765
1966
|
* @required
|
|
1766
1967
|
* @remarks This is the name of the API as defined in the `RestWorldClientCollection`.
|
|
1767
1968
|
*/
|
|
1768
|
-
apiName = input.required();
|
|
1969
|
+
apiName = input.required(...(ngDevMode ? [{ debugName: "apiName" }] : []));
|
|
1769
1970
|
/**
|
|
1770
1971
|
* Either the value or the property.value if the value is not set.
|
|
1771
1972
|
*/
|
|
1772
|
-
computedValue = computed(() => this.value() ?? this.property().value ?? this._defaultValue());
|
|
1973
|
+
computedValue = computed(() => this.value() ?? this.property().value ?? this._defaultValue(), ...(ngDevMode ? [{ debugName: "computedValue" }] : []));
|
|
1773
1974
|
/**
|
|
1774
1975
|
* The property to display.
|
|
1775
1976
|
* @required
|
|
1776
1977
|
*/
|
|
1777
|
-
property = input.required();
|
|
1978
|
+
property = input.required(...(ngDevMode ? [{ debugName: "property" }] : []));
|
|
1778
1979
|
/**
|
|
1779
1980
|
* The value to display. If not set, the value of the property will be used.
|
|
1780
1981
|
*/
|
|
1781
|
-
value = input();
|
|
1982
|
+
value = input(...(ngDevMode ? [undefined, { debugName: "value" }] : []));
|
|
1782
1983
|
_defaultValue = computed(() => {
|
|
1783
1984
|
const property = this.property();
|
|
1784
1985
|
if (!property.required || property.options?.minItems === 0)
|
|
@@ -1786,7 +1987,7 @@ class RestWorldDisplaySimpleComponent {
|
|
|
1786
1987
|
if (property.type === PropertyType.Number)
|
|
1787
1988
|
return 0;
|
|
1788
1989
|
return undefined;
|
|
1789
|
-
});
|
|
1990
|
+
}, ...(ngDevMode ? [{ debugName: "_defaultValue" }] : []));
|
|
1790
1991
|
get PropertyType() {
|
|
1791
1992
|
return PropertyType;
|
|
1792
1993
|
}
|
|
@@ -1799,10 +2000,10 @@ class RestWorldDisplaySimpleComponent {
|
|
|
1799
2000
|
get timeFormat() {
|
|
1800
2001
|
return RestWorldDisplaySimpleComponent._timeFormat;
|
|
1801
2002
|
}
|
|
1802
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1803
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
2003
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldDisplaySimpleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2004
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RestWorldDisplaySimpleComponent, isStandalone: true, selector: "rw-display-simple", inputs: { apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, property: { classPropertyName: "property", publicName: "property", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@let prop = property();\r\n@let val = computedValue();\r\n@switch (prop.type) {\r\n\r\n @case (PropertyType.Text) {\r\n @if (prop.name === 'createdBy' || prop.name === 'lastChangedBy') {\r\n <rw-avatar [user]=\"$any(val)\"></rw-avatar>\r\n }\r\n @else {\r\n <span class=\"w-full\">{{val | propertyTypeFormat:prop.type}}</span>\r\n }\r\n }\r\n @case (PropertyType.Bool) {\r\n <rw-tri-state-checkbox [model]=\"$any(val)\" [readonly]=\"true\" [disabled]=\"true\"></rw-tri-state-checkbox>\r\n }\r\n @default {\r\n <span class=\"w-full\">{{val | propertyTypeFormat:prop.type}}</span>\r\n }\r\n}\r\n", styles: [""], dependencies: [{ kind: "component", type: RestWorldAvatarComponent, selector: "rw-avatar", inputs: ["user"] }, { kind: "component", type: TriStateCheckbox, selector: "p-tri-state-checkbox, p-tri-state-checkBox, p-tri-state-check-box, rw-tri-state-checkbox, rw-tri-state-checkBox, rw-tri-state-check-box", inputs: ["value", "name", "disabled", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "inputStyle", "styleClass", "inputClass", "size", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "model", "variant"], outputs: ["disabledChange", "modelChange", "onChange", "onFocus", "onBlur"] }, { kind: "ngmodule", type: FormsModule }, { kind: "pipe", type: PropertyTypeFormatPipe, name: "propertyTypeFormat" }] });
|
|
1804
2005
|
}
|
|
1805
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2006
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldDisplaySimpleComponent, decorators: [{
|
|
1806
2007
|
type: Component,
|
|
1807
2008
|
args: [{ selector: 'rw-display-simple', standalone: true, imports: [RestWorldAvatarComponent, PropertyTypeFormatPipe, TriStateCheckbox, FormsModule, TriStateCheckbox], template: "@let prop = property();\r\n@let val = computedValue();\r\n@switch (prop.type) {\r\n\r\n @case (PropertyType.Text) {\r\n @if (prop.name === 'createdBy' || prop.name === 'lastChangedBy') {\r\n <rw-avatar [user]=\"$any(val)\"></rw-avatar>\r\n }\r\n @else {\r\n <span class=\"w-full\">{{val | propertyTypeFormat:prop.type}}</span>\r\n }\r\n }\r\n @case (PropertyType.Bool) {\r\n <rw-tri-state-checkbox [model]=\"$any(val)\" [readonly]=\"true\" [disabled]=\"true\"></rw-tri-state-checkbox>\r\n }\r\n @default {\r\n <span class=\"w-full\">{{val | propertyTypeFormat:prop.type}}</span>\r\n }\r\n}\r\n" }]
|
|
1808
2009
|
}] });
|
|
@@ -1817,23 +2018,23 @@ class RestWorldDisplayTemplateComponent {
|
|
|
1817
2018
|
* @required
|
|
1818
2019
|
* @remarks This is the name of the API as defined in the `RestWorldClientCollection`.
|
|
1819
2020
|
*/
|
|
1820
|
-
apiName = input.required();
|
|
2021
|
+
apiName = input.required(...(ngDevMode ? [{ debugName: "apiName" }] : []));
|
|
1821
2022
|
/**
|
|
1822
2023
|
* The template to display.
|
|
1823
2024
|
* @required
|
|
1824
2025
|
* @remarks This is the template that defines the properties to display.
|
|
1825
2026
|
*/
|
|
1826
|
-
template = input.required();
|
|
2027
|
+
template = input.required(...(ngDevMode ? [{ debugName: "template" }] : []));
|
|
1827
2028
|
/**
|
|
1828
2029
|
* The value to display. If not set, the values of the template properties will be used.
|
|
1829
2030
|
*/
|
|
1830
|
-
value = input();
|
|
1831
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1832
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
2031
|
+
value = input(...(ngDevMode ? [undefined, { debugName: "value" }] : []));
|
|
2032
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldDisplayTemplateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2033
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RestWorldDisplayTemplateComponent, isStandalone: true, selector: "rw-display-template", inputs: { apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, template: { classPropertyName: "template", publicName: "template", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@for (property of template().properties; track property) {\r\n <rw-display-element [property]=\"property\" [value]=\"value()?.[property.name]\" [apiName]=\"apiName()\"></rw-display-element>\r\n}", styles: [""], dependencies: [{ kind: "component", type: RestWorldDisplayElementComponent, selector: "rw-display-element", inputs: ["apiName", "property", "value"] }] });
|
|
1833
2034
|
}
|
|
1834
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2035
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldDisplayTemplateComponent, decorators: [{
|
|
1835
2036
|
type: Component,
|
|
1836
|
-
args: [{ selector: 'rw-display-template', standalone: true, imports: [RestWorldDisplayElementComponent], template: "@for (property of template().properties; track property) {\n <rw-display-element [property]=\"property\" [value]=\"value()?.[property.name]\" [apiName]=\"apiName()\"></rw-display-element>\n}" }]
|
|
2037
|
+
args: [{ selector: 'rw-display-template', standalone: true, imports: [RestWorldDisplayElementComponent], template: "@for (property of template().properties; track property) {\r\n <rw-display-element [property]=\"property\" [value]=\"value()?.[property.name]\" [apiName]=\"apiName()\"></rw-display-element>\r\n}" }]
|
|
1837
2038
|
}] });
|
|
1838
2039
|
|
|
1839
2040
|
/**
|
|
@@ -1857,10 +2058,10 @@ class SafeUrlPipe {
|
|
|
1857
2058
|
throw new Error(`The given url '${url}' is not a string.`);
|
|
1858
2059
|
return this._domSanitizer.bypassSecurityTrustResourceUrl(url);
|
|
1859
2060
|
}
|
|
1860
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1861
|
-
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
2061
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: SafeUrlPipe, deps: [{ token: i1$2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe });
|
|
2062
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.1", ngImport: i0, type: SafeUrlPipe, isStandalone: true, name: "safeUrl" });
|
|
1862
2063
|
}
|
|
1863
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2064
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: SafeUrlPipe, decorators: [{
|
|
1864
2065
|
type: Pipe,
|
|
1865
2066
|
args: [{
|
|
1866
2067
|
name: 'safeUrl',
|
|
@@ -1884,16 +2085,16 @@ class RestWorldFileComponent {
|
|
|
1884
2085
|
* This is a comma-separated list of MIME types or file extensions.
|
|
1885
2086
|
* If not specified, all file types are accepted.
|
|
1886
2087
|
*/
|
|
1887
|
-
accept = input("", { transform: (v) => v ?? "" });
|
|
2088
|
+
accept = input("", ...(ngDevMode ? [{ debugName: "accept", transform: (v) => v ?? "" }] : [{ transform: (v) => v ?? "" }]));
|
|
1888
2089
|
/**
|
|
1889
2090
|
* The name of the file to be uploaded.
|
|
1890
2091
|
*/
|
|
1891
|
-
fileName = input("download", { transform: (v) => v ?? "download" });
|
|
1892
|
-
disabled = signal(false);
|
|
2092
|
+
fileName = input("download", ...(ngDevMode ? [{ debugName: "fileName", transform: (v) => v ?? "download" }] : [{ transform: (v) => v ?? "download" }]));
|
|
2093
|
+
disabled = signal(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
|
|
1893
2094
|
/**
|
|
1894
2095
|
* The URI of the file.
|
|
1895
2096
|
*/
|
|
1896
|
-
uri = signal(undefined);
|
|
2097
|
+
uri = signal(undefined, ...(ngDevMode ? [{ debugName: "uri" }] : []));
|
|
1897
2098
|
writeValue(obj) {
|
|
1898
2099
|
this.uri.set(obj);
|
|
1899
2100
|
}
|
|
@@ -1919,14 +2120,14 @@ class RestWorldFileComponent {
|
|
|
1919
2120
|
this.uri.set(undefined);
|
|
1920
2121
|
this.onChange?.(this.uri());
|
|
1921
2122
|
}
|
|
1922
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1923
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
2123
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldFileComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2124
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RestWorldFileComponent, isStandalone: true, selector: "rw-file", inputs: { accept: { classPropertyName: "accept", publicName: "accept", isSignal: true, isRequired: false, transformFunction: null }, fileName: { classPropertyName: "fileName", publicName: "fileName", isSignal: true, isRequired: false, transformFunction: null } }, providers: [{
|
|
1924
2125
|
provide: NG_VALUE_ACCESSOR,
|
|
1925
2126
|
useExisting: forwardRef(() => RestWorldFileComponent),
|
|
1926
2127
|
multi: true
|
|
1927
|
-
}], ngImport: i0, template: "<div class=\"flex align-items-center\">\r\n @if (uri()) {\r\n <a [href]=\"uri() | safeUrl\" [download]=\"fileName()\" class=\"mr-1\" pButton\r\n pTooltip=\"Download file\" icon=\"pi pi-download\"></a>\r\n }\r\n @else {\r\n <p-button [disabled]=\"true\" icon=\"pi pi-download\" class=\"mr-1\" pTooltip=\"No file present\"></p-button>\r\n }\r\n <p-fileUpload class=\"mr-1\" chooseIcon=\"pi-upload fas fa-upload\" [chooseButtonProps]=\"{ label: '' }\" pTooltip=\"Upload new file\" mode=\"basic\" [auto]=\"true\"\r\n [accept]=\"accept()\" [customUpload]=\"true\" (uploadHandler)=\"fileChanged($event)\"></p-fileUpload>\r\n @if (uri()) {\r\n <p-button icon=\"pi pi-times\" severity=\"danger\" [text]=\"true\" (onClick)=\"deleteFile()\"/>\r\n }\r\n</div>\r\n", styles: ["a{text-decoration:none}a.p-button-icon-only span.p-button-label{height:1rem!important}\n"], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1$3.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "fluid", "label", "icon", "buttonProps"] }, { kind: "component", type: i1$3.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "
|
|
2128
|
+
}], ngImport: i0, template: "<div class=\"flex align-items-center\">\r\n @if (uri()) {\r\n <a [href]=\"uri() | safeUrl\" [download]=\"fileName()\" class=\"mr-1\" pButton\r\n pTooltip=\"Download file\" icon=\"pi pi-download\"></a>\r\n }\r\n @else {\r\n <p-button [disabled]=\"true\" icon=\"pi pi-download\" class=\"mr-1\" pTooltip=\"No file present\"></p-button>\r\n }\r\n <p-fileUpload class=\"mr-1\" chooseIcon=\"pi-upload fas fa-upload\" [chooseButtonProps]=\"{ label: '' }\" pTooltip=\"Upload new file\" mode=\"basic\" [auto]=\"true\"\r\n [accept]=\"accept()\" [customUpload]=\"true\" (uploadHandler)=\"fileChanged($event)\"></p-fileUpload>\r\n @if (uri()) {\r\n <p-button icon=\"pi pi-times\" severity=\"danger\" [text]=\"true\" (onClick)=\"deleteFile()\"/>\r\n }\r\n</div>\r\n", styles: ["a{text-decoration:none}a.p-button-icon-only span.p-button-label{height:1rem!important}\n"], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1$3.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "fluid", "label", "icon", "buttonProps"] }, { kind: "component", type: i1$3.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "buttonProps", "autofocus", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: FileUploadModule }, { kind: "component", type: i2$2.FileUpload, selector: "p-fileupload, p-fileUpload", inputs: ["name", "url", "method", "multiple", "accept", "disabled", "auto", "withCredentials", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageDetail", "invalidFileLimitMessageSummary", "style", "styleClass", "previewWidth", "chooseLabel", "uploadLabel", "cancelLabel", "chooseIcon", "uploadIcon", "cancelIcon", "showUploadButton", "showCancelButton", "mode", "headers", "customUpload", "fileLimit", "uploadStyleClass", "cancelStyleClass", "removeStyleClass", "chooseStyleClass", "chooseButtonProps", "uploadButtonProps", "cancelButtonProps", "files"], outputs: ["onBeforeUpload", "onSend", "onUpload", "onError", "onClear", "onRemove", "onSelect", "onProgress", "uploadHandler", "onImageError", "onRemoveUploadedFile"] }, { kind: "pipe", type: SafeUrlPipe, name: "safeUrl" }] });
|
|
1928
2129
|
}
|
|
1929
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2130
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldFileComponent, decorators: [{
|
|
1930
2131
|
type: Component,
|
|
1931
2132
|
args: [{ selector: 'rw-file', standalone: true, providers: [{
|
|
1932
2133
|
provide: NG_VALUE_ACCESSOR,
|
|
@@ -1948,21 +2149,21 @@ class RestWorldValidationErrorsComponent {
|
|
|
1948
2149
|
* The form to display the validation errors for.
|
|
1949
2150
|
* Either set this or the property input.
|
|
1950
2151
|
*/
|
|
1951
|
-
form = input();
|
|
1952
|
-
name = computed(() => this.property()?.name ?? null);
|
|
1953
|
-
prompt = computed(() => this.property()?.prompt ?? this.name() ?? null);
|
|
2152
|
+
form = input(...(ngDevMode ? [undefined, { debugName: "form" }] : []));
|
|
2153
|
+
name = computed(() => this.property()?.name ?? null, ...(ngDevMode ? [{ debugName: "name" }] : []));
|
|
2154
|
+
prompt = computed(() => this.property()?.prompt ?? this.name() ?? null, ...(ngDevMode ? [{ debugName: "prompt" }] : []));
|
|
1954
2155
|
/**
|
|
1955
2156
|
* The property to display the validation errors for.
|
|
1956
2157
|
* Either set this or the form input.
|
|
1957
2158
|
*/
|
|
1958
|
-
property = input();
|
|
2159
|
+
property = input(...(ngDevMode ? [undefined, { debugName: "property" }] : []));
|
|
1959
2160
|
get PropertyType() {
|
|
1960
2161
|
return PropertyType;
|
|
1961
2162
|
}
|
|
1962
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1963
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
2163
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldValidationErrorsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2164
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RestWorldValidationErrorsComponent, isStandalone: true, selector: "rw-validation-errors", inputs: { form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: false, transformFunction: null }, property: { classPropertyName: "property", publicName: "property", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (property() && property()?.type !== PropertyType.Hidden) {\n <val-errors [controlName]=\"name()\">\n <ng-template valError=\"required\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">The field '{{prompt()}}' is required.</p-message></ng-template>\n <ng-template valError=\"email\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">'{{prompt()}}' must be a valid email address.</p-message></ng-template>\n <ng-template valError=\"min\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">'{{prompt()}}' must be equal or greater than or equal to {{ error.min }}.</p-message></ng-template>\n <ng-template valError=\"max\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">'{{prompt()}}' must be smaller than or equal to {{ error.max }}.</p-message></ng-template>\n <ng-template valError=\"minlength\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">The length of '{{prompt()}}' must be equal or greater than or equal to {{ error.requiredLength }}.</p-message></ng-template>\n <ng-template valError=\"maxlength\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">The length of '{{prompt()}}' must be shorter than or equal to {{ error.requiredLength }}.</p-message></ng-template>\n <ng-template valError=\"pattern\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">The value for '{{prompt()}}' does not match the pattern {{ error }}.</p-message></ng-template>\n <ng-template valError=\"remote\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">{{ error }}</p-message></ng-template>\n </val-errors>\n}\n@if (form()) {\n <val-errors [control]=\"form()!\">\n <ng-template valError=\"remote\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">{{ error }}</p-message></ng-template>\n </val-errors>\n}\n", styles: [""], dependencies: [{ kind: "component", type: ValidationErrorsComponent, selector: "val-errors", inputs: ["control", "controlName", "label"] }, { kind: "directive", type: ValidationErrorDirective, selector: "ng-template[valError]", inputs: ["valError"] }, { kind: "ngmodule", type: MessageModule }, { kind: "component", type: i1$4.Message, selector: "p-message", inputs: ["severity", "text", "escape", "style", "styleClass", "closable", "icon", "closeIcon", "life", "showTransitionOptions", "hideTransitionOptions", "size", "variant"], outputs: ["onClose"] }], viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }] });
|
|
1964
2165
|
}
|
|
1965
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2166
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldValidationErrorsComponent, decorators: [{
|
|
1966
2167
|
type: Component,
|
|
1967
2168
|
args: [{ selector: 'rw-validation-errors', standalone: true, viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }], imports: [ValidationErrorsComponent, ValidationErrorDirective, MessageModule], template: "@if (property() && property()?.type !== PropertyType.Hidden) {\n <val-errors [controlName]=\"name()\">\n <ng-template valError=\"required\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">The field '{{prompt()}}' is required.</p-message></ng-template>\n <ng-template valError=\"email\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">'{{prompt()}}' must be a valid email address.</p-message></ng-template>\n <ng-template valError=\"min\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">'{{prompt()}}' must be equal or greater than or equal to {{ error.min }}.</p-message></ng-template>\n <ng-template valError=\"max\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">'{{prompt()}}' must be smaller than or equal to {{ error.max }}.</p-message></ng-template>\n <ng-template valError=\"minlength\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">The length of '{{prompt()}}' must be equal or greater than or equal to {{ error.requiredLength }}.</p-message></ng-template>\n <ng-template valError=\"maxlength\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">The length of '{{prompt()}}' must be shorter than or equal to {{ error.requiredLength }}.</p-message></ng-template>\n <ng-template valError=\"pattern\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">The value for '{{prompt()}}' does not match the pattern {{ error }}.</p-message></ng-template>\n <ng-template valError=\"remote\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">{{ error }}</p-message></ng-template>\n </val-errors>\n}\n@if (form()) {\n <val-errors [control]=\"form()!\">\n <ng-template valError=\"remote\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">{{ error }}</p-message></ng-template>\n </val-errors>\n}\n" }]
|
|
1968
2169
|
}] });
|
|
@@ -1987,46 +2188,46 @@ const debounce = (fn, delayMilliseconds = 300) => {
|
|
|
1987
2188
|
* Implements ControlValueAccessor to work with Angular forms.
|
|
1988
2189
|
*/
|
|
1989
2190
|
class RestWorldImageComponent {
|
|
1990
|
-
property = input.required();
|
|
2191
|
+
property = input.required(...(ngDevMode ? [{ debugName: "property" }] : []));
|
|
1991
2192
|
accept = computed(() => {
|
|
1992
2193
|
const property = this.property();
|
|
1993
|
-
return
|
|
1994
|
-
});
|
|
1995
|
-
alignImage = computed(() => this.property().restWorldImage.alignImage ?? "center");
|
|
2194
|
+
return property.restWorldImage.accept ?? typeof property.placeholder === "string" ? property.placeholder : "image/*";
|
|
2195
|
+
}, ...(ngDevMode ? [{ debugName: "accept" }] : []));
|
|
2196
|
+
alignImage = computed(() => this.property().restWorldImage.alignImage ?? "center", ...(ngDevMode ? [{ debugName: "alignImage" }] : []));
|
|
1996
2197
|
alt = computed(() => {
|
|
1997
2198
|
const property = this.property();
|
|
1998
2199
|
return property.prompt ?? property.name;
|
|
1999
|
-
});
|
|
2000
|
-
aspectRatio = computed(() => this.property().restWorldImage.aspectRatio ?? 1);
|
|
2200
|
+
}, ...(ngDevMode ? [{ debugName: "alt" }] : []));
|
|
2201
|
+
aspectRatio = computed(() => this.property().restWorldImage.aspectRatio ?? 1, ...(ngDevMode ? [{ debugName: "aspectRatio" }] : []));
|
|
2001
2202
|
// If no background color is set, we set it to white.
|
|
2002
2203
|
// Otherwise the color picker would show red, the input would be empty and the image cropper would show transparent.
|
|
2003
|
-
backgroundColor = model("#ffffff");
|
|
2004
|
-
canvasRotation = computed(() => this.property().restWorldImage.canvasRotation);
|
|
2005
|
-
containWithinAspectRatio = computed(() => this.property().restWorldImage.containWithinAspectRatio);
|
|
2006
|
-
cropper = computed(() => this.property().restWorldImage.cropper);
|
|
2007
|
-
cropperMaxHeight = computed(() => this.property().restWorldImage.cropperMaxHeight);
|
|
2008
|
-
cropperMaxWidth = computed(() => this.property().restWorldImage.cropperMaxWidth);
|
|
2009
|
-
cropperMinHeight = computed(() => this.property().restWorldImage.cropperMinHeight);
|
|
2010
|
-
cropperMinWidth = computed(() => this.property().restWorldImage.cropperMinWidth);
|
|
2011
|
-
cropperStaticHeight = computed(() => this.property().restWorldImage.cropperStaticHeight);
|
|
2012
|
-
cropperStaticWidth = computed(() => this.property().restWorldImage.cropperStaticWidth);
|
|
2013
|
-
dialogs = viewChildren(Dialog);
|
|
2014
|
-
disabled = signal(false);
|
|
2015
|
-
fileUploads = viewChildren(FileUpload);
|
|
2016
|
-
filename = computed(() => this.property().name + "." + (this.property().restWorldImage.format ?? ".png"));
|
|
2017
|
-
format = computed(() => this.property().restWorldImage.format);
|
|
2018
|
-
imageCroppers = viewChildren(ImageCropperComponent);
|
|
2019
|
-
imageQuality = computed(() => this.property().restWorldImage.imageQuality);
|
|
2020
|
-
initialStepSize = computed(() => this.property().restWorldImage.initialStepSize);
|
|
2021
|
-
maintainAspectRatio = computed(() => this.property().restWorldImage.maintainAspectRatio);
|
|
2022
|
-
onlyScaleDown = computed(() => this.property().restWorldImage.onlyScaleDown);
|
|
2023
|
-
resizeToHeight = computed(() => this.property().restWorldImage.resizeToHeight);
|
|
2024
|
-
resizeToWidth = computed(() => this.property().restWorldImage.resizeToWidth);
|
|
2025
|
-
roundCropper = computed(() => this.property().restWorldImage.roundCropper);
|
|
2026
|
-
displayCropDialog = model(false);
|
|
2204
|
+
backgroundColor = model("#ffffff", ...(ngDevMode ? [{ debugName: "backgroundColor" }] : []));
|
|
2205
|
+
canvasRotation = computed(() => this.property().restWorldImage.canvasRotation, ...(ngDevMode ? [{ debugName: "canvasRotation" }] : []));
|
|
2206
|
+
containWithinAspectRatio = computed(() => this.property().restWorldImage.containWithinAspectRatio, ...(ngDevMode ? [{ debugName: "containWithinAspectRatio" }] : []));
|
|
2207
|
+
cropper = computed(() => this.property().restWorldImage.cropper, ...(ngDevMode ? [{ debugName: "cropper" }] : []));
|
|
2208
|
+
cropperMaxHeight = computed(() => this.property().restWorldImage.cropperMaxHeight, ...(ngDevMode ? [{ debugName: "cropperMaxHeight" }] : []));
|
|
2209
|
+
cropperMaxWidth = computed(() => this.property().restWorldImage.cropperMaxWidth, ...(ngDevMode ? [{ debugName: "cropperMaxWidth" }] : []));
|
|
2210
|
+
cropperMinHeight = computed(() => this.property().restWorldImage.cropperMinHeight, ...(ngDevMode ? [{ debugName: "cropperMinHeight" }] : []));
|
|
2211
|
+
cropperMinWidth = computed(() => this.property().restWorldImage.cropperMinWidth, ...(ngDevMode ? [{ debugName: "cropperMinWidth" }] : []));
|
|
2212
|
+
cropperStaticHeight = computed(() => this.property().restWorldImage.cropperStaticHeight, ...(ngDevMode ? [{ debugName: "cropperStaticHeight" }] : []));
|
|
2213
|
+
cropperStaticWidth = computed(() => this.property().restWorldImage.cropperStaticWidth, ...(ngDevMode ? [{ debugName: "cropperStaticWidth" }] : []));
|
|
2214
|
+
dialogs = viewChildren(Dialog, ...(ngDevMode ? [{ debugName: "dialogs" }] : []));
|
|
2215
|
+
disabled = signal(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
|
|
2216
|
+
fileUploads = viewChildren(FileUpload, ...(ngDevMode ? [{ debugName: "fileUploads" }] : []));
|
|
2217
|
+
filename = computed(() => this.property().name + "." + (this.property().restWorldImage.format ?? ".png"), ...(ngDevMode ? [{ debugName: "filename" }] : []));
|
|
2218
|
+
format = computed(() => this.property().restWorldImage.format, ...(ngDevMode ? [{ debugName: "format" }] : []));
|
|
2219
|
+
imageCroppers = viewChildren(ImageCropperComponent, ...(ngDevMode ? [{ debugName: "imageCroppers" }] : []));
|
|
2220
|
+
imageQuality = computed(() => this.property().restWorldImage.imageQuality, ...(ngDevMode ? [{ debugName: "imageQuality" }] : []));
|
|
2221
|
+
initialStepSize = computed(() => this.property().restWorldImage.initialStepSize, ...(ngDevMode ? [{ debugName: "initialStepSize" }] : []));
|
|
2222
|
+
maintainAspectRatio = computed(() => this.property().restWorldImage.maintainAspectRatio, ...(ngDevMode ? [{ debugName: "maintainAspectRatio" }] : []));
|
|
2223
|
+
onlyScaleDown = computed(() => this.property().restWorldImage.onlyScaleDown, ...(ngDevMode ? [{ debugName: "onlyScaleDown" }] : []));
|
|
2224
|
+
resizeToHeight = computed(() => this.property().restWorldImage.resizeToHeight, ...(ngDevMode ? [{ debugName: "resizeToHeight" }] : []));
|
|
2225
|
+
resizeToWidth = computed(() => this.property().restWorldImage.resizeToWidth, ...(ngDevMode ? [{ debugName: "resizeToWidth" }] : []));
|
|
2226
|
+
roundCropper = computed(() => this.property().restWorldImage.roundCropper, ...(ngDevMode ? [{ debugName: "roundCropper" }] : []));
|
|
2227
|
+
displayCropDialog = model(false, ...(ngDevMode ? [{ debugName: "displayCropDialog" }] : []));
|
|
2027
2228
|
tempCroppedUri;
|
|
2028
|
-
tempImageFile = signal(undefined);
|
|
2029
|
-
uri = signal(undefined);
|
|
2229
|
+
tempImageFile = signal(undefined, ...(ngDevMode ? [{ debugName: "tempImageFile" }] : []));
|
|
2230
|
+
uri = signal(undefined, ...(ngDevMode ? [{ debugName: "uri" }] : []));
|
|
2030
2231
|
onChange;
|
|
2031
2232
|
constructor() {
|
|
2032
2233
|
effect(() => this.property().restWorldImage.backgroundColor = this.backgroundColor());
|
|
@@ -2071,14 +2272,14 @@ class RestWorldImageComponent {
|
|
|
2071
2272
|
writeValue(obj) {
|
|
2072
2273
|
this.uri.set(obj);
|
|
2073
2274
|
}
|
|
2074
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2075
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
2275
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldImageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2276
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RestWorldImageComponent, isStandalone: true, selector: "rw-image", inputs: { property: { classPropertyName: "property", publicName: "property", isSignal: true, isRequired: true, transformFunction: null }, backgroundColor: { classPropertyName: "backgroundColor", publicName: "backgroundColor", isSignal: true, isRequired: false, transformFunction: null }, displayCropDialog: { classPropertyName: "displayCropDialog", publicName: "displayCropDialog", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { backgroundColor: "backgroundColorChange", displayCropDialog: "displayCropDialogChange" }, providers: [{
|
|
2076
2277
|
provide: NG_VALUE_ACCESSOR,
|
|
2077
2278
|
useExisting: forwardRef(() => RestWorldImageComponent),
|
|
2078
2279
|
multi: true
|
|
2079
|
-
}], viewQueries: [{ propertyName: "dialogs", predicate: Dialog, descendants: true, isSignal: true }, { propertyName: "fileUploads", predicate: FileUpload, descendants: true, isSignal: true }, { propertyName: "imageCroppers", predicate: ImageCropperComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"flex align-items-center\">\r\n @if (uri()) {\r\n <a [href]=\"uri() | safeUrl\" [download]=\"filename()\" class=\"mr-1\" pButton pTooltip=\"Download image\" icon=\"pi pi-download\"></a>\r\n }\r\n @else {\r\n <p-button [disabled]=\"true\" icon=\"pi pi-download\" class=\"mr-1\" pTooltip=\"No image present\"></p-button>\r\n }\r\n\r\n <p-fileUpload class=\"mr-1\" chooseIcon=\"pi-upload fas fa-upload\" [chooseButtonProps]=\"{ label: '' }\" mode=\"basic\" [auto]=\"true\" [accept]=\"accept()\" [customUpload]=\"true\" (uploadHandler)=\"imageChanged($event)\" pTooltip=\"Upload new image\"></p-fileUpload>\r\n\r\n @if (uri()) {\r\n <img class=\"thumbnail mr-1\" [src]=\"uri() | safeUrl\" [alt]=\"alt()\" (click)=\"showCropDialog()\" pTooltip=\"Zoom and crop\" />\r\n <p-button icon=\"pi pi-times\" severity=\"danger\" [text]=\"true\" (onClick)=\"deleteImage()\"/>\r\n }\r\n</div>\r\n\r\n<p-dialog [header]=\"alt()\" [(visible)]=\"displayCropDialog\">\r\n <image-cropper\r\n [autoCrop]=\"true\"\r\n (imageCropped)=\"croppedImageChanged($event)\"\r\n [alignImage]=\"alignImage()\"\r\n [aspectRatio]=\"aspectRatio()\"\r\n [backgroundColor]=\"backgroundColor()\"\r\n [canvasRotation]=\"canvasRotation()\"\r\n [containWithinAspectRatio]=\"containWithinAspectRatio()\"\r\n [cropper]=\"cropper()\"\r\n [cropperMaxHeight]=\"cropperMaxHeight()\"\r\n [cropperMaxWidth]=\"cropperMaxWidth()\"\r\n [cropperMinHeight]=\"cropperMinHeight()\"\r\n [cropperMinWidth]=\"cropperMinWidth()\"\r\n [cropperStaticHeight]=\"cropperStaticHeight()\"\r\n [cropperStaticWidth]=\"cropperStaticWidth()\"\r\n [format]=\"format()\"\r\n [imageQuality]=\"imageQuality()\"\r\n [initialStepSize]=\"initialStepSize()\"\r\n [maintainAspectRatio]=\"maintainAspectRatio()\"\r\n [onlyScaleDown]=\"onlyScaleDown()\"\r\n [resizeToWidth]=\"resizeToWidth()\"\r\n [resizeToHeight]=\"resizeToHeight()\"\r\n [roundCropper]=\"roundCropper()\"\r\n [imageFile]=\"tempImageFile()\"\r\n [imageURL]=\"uri()\"\r\n output=\"base64\"\r\n ></image-cropper>\r\n <div class=\"flex justify-content-end\">\r\n <div class=\"flex-auto align-items-center\">\r\n <span>Background color: </span>\r\n <p-colorPicker [(ngModel)]=\"backgroundColor\" appendTo=\"body\" class=\"ml-1 mr-1\"></p-colorPicker>\r\n <input pInputText [(ngModel)]=\"backgroundColor\" />\r\n </div>\r\n <button type=\"button\" pButton pRipple (click)=\"acceptCroppedImage()\" class=\"mr-2\">Ok</button>\r\n <button type=\"button\" pButton pRipple (click)=\"closeCropDialog()\">Cancel</button>\r\n </div>\r\n</p-dialog>\r\n", styles: ["img.thumbnail{height:calc(1rem + 18px);cursor:zoom-in;border-radius:3px}a{text-decoration:none}a.p-button-icon-only span.p-button-label{height:1rem!important}\n"], dependencies: [{ kind: "
|
|
2280
|
+
}], viewQueries: [{ propertyName: "dialogs", predicate: Dialog, descendants: true, isSignal: true }, { propertyName: "fileUploads", predicate: FileUpload, descendants: true, isSignal: true }, { propertyName: "imageCroppers", predicate: ImageCropperComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"flex align-items-center\">\r\n @if (uri()) {\r\n <a [href]=\"uri() | safeUrl\" [download]=\"filename()\" class=\"mr-1\" pButton pTooltip=\"Download image\" icon=\"pi pi-download\"></a>\r\n }\r\n @else {\r\n <p-button [disabled]=\"true\" icon=\"pi pi-download\" class=\"mr-1\" pTooltip=\"No image present\"></p-button>\r\n }\r\n\r\n <p-fileUpload class=\"mr-1\" chooseIcon=\"pi-upload fas fa-upload\" [chooseButtonProps]=\"{ label: '' }\" mode=\"basic\" [auto]=\"true\" [accept]=\"accept()\" [customUpload]=\"true\" (uploadHandler)=\"imageChanged($event)\" pTooltip=\"Upload new image\"></p-fileUpload>\r\n\r\n @if (uri()) {\r\n <img class=\"thumbnail mr-1\" [src]=\"uri() | safeUrl\" [alt]=\"alt()\" (click)=\"showCropDialog()\" pTooltip=\"Zoom and crop\" />\r\n <p-button icon=\"pi pi-times\" severity=\"danger\" [text]=\"true\" (onClick)=\"deleteImage()\"/>\r\n }\r\n</div>\r\n\r\n<p-dialog [header]=\"alt()\" [(visible)]=\"displayCropDialog\">\r\n <image-cropper\r\n [autoCrop]=\"true\"\r\n (imageCropped)=\"croppedImageChanged($event)\"\r\n [alignImage]=\"alignImage()\"\r\n [aspectRatio]=\"aspectRatio()\"\r\n [backgroundColor]=\"backgroundColor()\"\r\n [canvasRotation]=\"canvasRotation()\"\r\n [containWithinAspectRatio]=\"containWithinAspectRatio()\"\r\n [cropper]=\"cropper()\"\r\n [cropperMaxHeight]=\"cropperMaxHeight()\"\r\n [cropperMaxWidth]=\"cropperMaxWidth()\"\r\n [cropperMinHeight]=\"cropperMinHeight()\"\r\n [cropperMinWidth]=\"cropperMinWidth()\"\r\n [cropperStaticHeight]=\"cropperStaticHeight()\"\r\n [cropperStaticWidth]=\"cropperStaticWidth()\"\r\n [format]=\"format()\"\r\n [imageQuality]=\"imageQuality()\"\r\n [initialStepSize]=\"initialStepSize()\"\r\n [maintainAspectRatio]=\"maintainAspectRatio()\"\r\n [onlyScaleDown]=\"onlyScaleDown()\"\r\n [resizeToWidth]=\"resizeToWidth()\"\r\n [resizeToHeight]=\"resizeToHeight()\"\r\n [roundCropper]=\"roundCropper()\"\r\n [imageFile]=\"tempImageFile()\"\r\n [imageURL]=\"uri()\"\r\n output=\"base64\"\r\n ></image-cropper>\r\n <div class=\"flex justify-content-end\">\r\n <div class=\"flex-auto align-items-center\">\r\n <span>Background color: </span>\r\n <p-colorPicker [(ngModel)]=\"backgroundColor\" appendTo=\"body\" class=\"ml-1 mr-1\"></p-colorPicker>\r\n <input pInputText [(ngModel)]=\"backgroundColor\" />\r\n </div>\r\n <button type=\"button\" pButton pRipple (click)=\"acceptCroppedImage()\" class=\"mr-2\">Ok</button>\r\n <button type=\"button\" pButton pRipple (click)=\"closeCropDialog()\">Cancel</button>\r\n </div>\r\n</p-dialog>\r\n", styles: ["img.thumbnail{height:calc(1rem + 18px);cursor:zoom-in;border-radius:3px}a{text-decoration:none}a.p-button-icon-only span.p-button-label{height:1rem!important}\n"], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1$3.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "fluid", "label", "icon", "buttonProps"] }, { kind: "component", type: i1$3.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "buttonProps", "autofocus", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: ImageCropperComponent, selector: "image-cropper", inputs: ["imageChangedEvent", "imageURL", "imageBase64", "imageFile", "imageAltText", "options", "cropperFrameAriaLabel", "output", "format", "autoCrop", "cropper", "transform", "maintainAspectRatio", "aspectRatio", "resetCropOnAspectRatioChange", "resizeToWidth", "resizeToHeight", "cropperMinWidth", "cropperMinHeight", "cropperMaxHeight", "cropperMaxWidth", "cropperStaticWidth", "cropperStaticHeight", "canvasRotation", "initialStepSize", "roundCropper", "onlyScaleDown", "imageQuality", "backgroundColor", "containWithinAspectRatio", "hideResizeSquares", "allowMoveImage", "checkImageType", "alignImage", "disabled", "hidden"], outputs: ["imageCropped", "startCropImage", "imageLoaded", "cropperReady", "loadImageFailed", "transformChange", "cropperChange"] }, { kind: "ngmodule", type: FileUploadModule }, { kind: "component", type: i2$2.FileUpload, selector: "p-fileupload, p-fileUpload", inputs: ["name", "url", "method", "multiple", "accept", "disabled", "auto", "withCredentials", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageDetail", "invalidFileLimitMessageSummary", "style", "styleClass", "previewWidth", "chooseLabel", "uploadLabel", "cancelLabel", "chooseIcon", "uploadIcon", "cancelIcon", "showUploadButton", "showCancelButton", "mode", "headers", "customUpload", "fileLimit", "uploadStyleClass", "cancelStyleClass", "removeStyleClass", "chooseStyleClass", "chooseButtonProps", "uploadButtonProps", "cancelButtonProps", "files"], outputs: ["onBeforeUpload", "onSend", "onUpload", "onError", "onClear", "onRemove", "onSelect", "onProgress", "uploadHandler", "onImageError", "onRemoveUploadedFile"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i3$1.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "closeButtonProps", "maximizeButtonProps", "visible", "style", "position", "role", "appendTo", "content", "contentTemplate", "footerTemplate", "closeIconTemplate", "maximizeIconTemplate", "minimizeIconTemplate", "headlessTemplate"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "ngmodule", type: ColorPickerModule }, { kind: "component", type: i4.ColorPicker, selector: "p-colorPicker, p-colorpicker, p-color-picker", inputs: ["styleClass", "inline", "format", "tabindex", "inputId", "autoZIndex", "showTransitionOptions", "hideTransitionOptions", "autofocus", "defaultColor", "appendTo"], outputs: ["onChange", "onShow", "onHide"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$3.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: i2$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: SafeUrlPipe, name: "safeUrl" }] });
|
|
2080
2281
|
}
|
|
2081
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2282
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldImageComponent, decorators: [{
|
|
2082
2283
|
type: Component,
|
|
2083
2284
|
args: [{ selector: 'rw-image', standalone: true, providers: [{
|
|
2084
2285
|
provide: NG_VALUE_ACCESSOR,
|
|
@@ -2087,14 +2288,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImpor
|
|
|
2087
2288
|
}], imports: [SafeUrlPipe, ButtonModule, ImageCropperComponent, FileUploadModule, DialogModule, ColorPickerModule, FormsModule], template: "<div class=\"flex align-items-center\">\r\n @if (uri()) {\r\n <a [href]=\"uri() | safeUrl\" [download]=\"filename()\" class=\"mr-1\" pButton pTooltip=\"Download image\" icon=\"pi pi-download\"></a>\r\n }\r\n @else {\r\n <p-button [disabled]=\"true\" icon=\"pi pi-download\" class=\"mr-1\" pTooltip=\"No image present\"></p-button>\r\n }\r\n\r\n <p-fileUpload class=\"mr-1\" chooseIcon=\"pi-upload fas fa-upload\" [chooseButtonProps]=\"{ label: '' }\" mode=\"basic\" [auto]=\"true\" [accept]=\"accept()\" [customUpload]=\"true\" (uploadHandler)=\"imageChanged($event)\" pTooltip=\"Upload new image\"></p-fileUpload>\r\n\r\n @if (uri()) {\r\n <img class=\"thumbnail mr-1\" [src]=\"uri() | safeUrl\" [alt]=\"alt()\" (click)=\"showCropDialog()\" pTooltip=\"Zoom and crop\" />\r\n <p-button icon=\"pi pi-times\" severity=\"danger\" [text]=\"true\" (onClick)=\"deleteImage()\"/>\r\n }\r\n</div>\r\n\r\n<p-dialog [header]=\"alt()\" [(visible)]=\"displayCropDialog\">\r\n <image-cropper\r\n [autoCrop]=\"true\"\r\n (imageCropped)=\"croppedImageChanged($event)\"\r\n [alignImage]=\"alignImage()\"\r\n [aspectRatio]=\"aspectRatio()\"\r\n [backgroundColor]=\"backgroundColor()\"\r\n [canvasRotation]=\"canvasRotation()\"\r\n [containWithinAspectRatio]=\"containWithinAspectRatio()\"\r\n [cropper]=\"cropper()\"\r\n [cropperMaxHeight]=\"cropperMaxHeight()\"\r\n [cropperMaxWidth]=\"cropperMaxWidth()\"\r\n [cropperMinHeight]=\"cropperMinHeight()\"\r\n [cropperMinWidth]=\"cropperMinWidth()\"\r\n [cropperStaticHeight]=\"cropperStaticHeight()\"\r\n [cropperStaticWidth]=\"cropperStaticWidth()\"\r\n [format]=\"format()\"\r\n [imageQuality]=\"imageQuality()\"\r\n [initialStepSize]=\"initialStepSize()\"\r\n [maintainAspectRatio]=\"maintainAspectRatio()\"\r\n [onlyScaleDown]=\"onlyScaleDown()\"\r\n [resizeToWidth]=\"resizeToWidth()\"\r\n [resizeToHeight]=\"resizeToHeight()\"\r\n [roundCropper]=\"roundCropper()\"\r\n [imageFile]=\"tempImageFile()\"\r\n [imageURL]=\"uri()\"\r\n output=\"base64\"\r\n ></image-cropper>\r\n <div class=\"flex justify-content-end\">\r\n <div class=\"flex-auto align-items-center\">\r\n <span>Background color: </span>\r\n <p-colorPicker [(ngModel)]=\"backgroundColor\" appendTo=\"body\" class=\"ml-1 mr-1\"></p-colorPicker>\r\n <input pInputText [(ngModel)]=\"backgroundColor\" />\r\n </div>\r\n <button type=\"button\" pButton pRipple (click)=\"acceptCroppedImage()\" class=\"mr-2\">Ok</button>\r\n <button type=\"button\" pButton pRipple (click)=\"closeCropDialog()\">Cancel</button>\r\n </div>\r\n</p-dialog>\r\n", styles: ["img.thumbnail{height:calc(1rem + 18px);cursor:zoom-in;border-radius:3px}a{text-decoration:none}a.p-button-icon-only span.p-button-label{height:1rem!important}\n"] }]
|
|
2088
2289
|
}], ctorParameters: () => [] });
|
|
2089
2290
|
|
|
2291
|
+
function setValueOfInputSignal(signal, value) {
|
|
2292
|
+
const node = signal[SIGNAL];
|
|
2293
|
+
signalSetFn(node, value);
|
|
2294
|
+
// There is node.applyValueToInputSignal(node, value); too but it does not accept InputSignalWithTransform<T, TransformT>
|
|
2295
|
+
}
|
|
2090
2296
|
/**
|
|
2091
2297
|
* This directive sets the attributes of a p-inputNumber element based on the property.
|
|
2092
2298
|
* It sets the mode, minFractionDigits and maxFractionDigits attributes.
|
|
2093
2299
|
* Thses are based on the properties step value.
|
|
2094
2300
|
*/
|
|
2095
2301
|
class PropertyInputNumberAttributes {
|
|
2096
|
-
formControlProperty = input();
|
|
2097
|
-
propertyAttributes = input();
|
|
2302
|
+
formControlProperty = input(...(ngDevMode ? [undefined, { debugName: "formControlProperty" }] : []));
|
|
2303
|
+
propertyAttributes = input(...(ngDevMode ? [undefined, { debugName: "propertyAttributes" }] : []));
|
|
2098
2304
|
constructor(inputNumber) {
|
|
2099
2305
|
// We need to set it to the maximum value in the constructor, because for some reason lowering it in the effect works, but raising it does not.
|
|
2100
2306
|
inputNumber.maxFractionDigits = 100;
|
|
@@ -2112,7 +2318,7 @@ class PropertyInputNumberAttributes {
|
|
|
2112
2318
|
element.showButtons = !property.readOnly;
|
|
2113
2319
|
element.minFractionDigits = 0;
|
|
2114
2320
|
if (property.step)
|
|
2115
|
-
element.step
|
|
2321
|
+
setValueOfInputSignal(element.step, property.step);
|
|
2116
2322
|
if (!property.step || property.step < 0) {
|
|
2117
2323
|
element.mode = "decimal";
|
|
2118
2324
|
}
|
|
@@ -2131,10 +2337,10 @@ class PropertyInputNumberAttributes {
|
|
|
2131
2337
|
}
|
|
2132
2338
|
return count;
|
|
2133
2339
|
}
|
|
2134
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2135
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "
|
|
2340
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PropertyInputNumberAttributes, deps: [{ token: i1$5.InputNumber, self: true }], target: i0.ɵɵFactoryTarget.Directive });
|
|
2341
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.1", type: PropertyInputNumberAttributes, isStandalone: true, selector: "p-inputNumber[formControlProperty], p-inputNumber[propertyAttributes]", inputs: { formControlProperty: { classPropertyName: "formControlProperty", publicName: "formControlProperty", isSignal: true, isRequired: false, transformFunction: null }, propertyAttributes: { classPropertyName: "propertyAttributes", publicName: "propertyAttributes", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
|
|
2136
2342
|
}
|
|
2137
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2343
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PropertyInputNumberAttributes, decorators: [{
|
|
2138
2344
|
type: Directive,
|
|
2139
2345
|
args: [{
|
|
2140
2346
|
selector: "p-inputNumber[formControlProperty], p-inputNumber[propertyAttributes]",
|
|
@@ -2158,8 +2364,8 @@ class PropertySelectAttributes {
|
|
|
2158
2364
|
/**
|
|
2159
2365
|
* The property to display.
|
|
2160
2366
|
*/
|
|
2161
|
-
formControlProperty = input();
|
|
2162
|
-
propertyAttributes = input();
|
|
2367
|
+
formControlProperty = input(...(ngDevMode ? [undefined, { debugName: "formControlProperty" }] : []));
|
|
2368
|
+
propertyAttributes = input(...(ngDevMode ? [undefined, { debugName: "propertyAttributes" }] : []));
|
|
2163
2369
|
constructor(select, multiSelect) {
|
|
2164
2370
|
effect(() => {
|
|
2165
2371
|
const property = this.formControlProperty() ?? this.propertyAttributes();
|
|
@@ -2185,9 +2391,11 @@ class PropertySelectAttributes {
|
|
|
2185
2391
|
element.filterBy = promptField + "," + valueField;
|
|
2186
2392
|
element.filter = true;
|
|
2187
2393
|
element.showClear = !property.required || (options.minItems ?? 0) <= 0;
|
|
2188
|
-
element.appendTo = "body";
|
|
2394
|
+
// element.appendTo = "body";
|
|
2395
|
+
setValueOfInputSignal(element.appendTo, "body");
|
|
2189
2396
|
if (element instanceof Select) {
|
|
2190
|
-
element.required = property.required || (options.minItems ?? 0) > 0;
|
|
2397
|
+
// element.required = property.required || (options.minItems ?? 0) > 0;
|
|
2398
|
+
setValueOfInputSignal(element.required, property.required || (options.minItems ?? 0) > 0);
|
|
2191
2399
|
element.filterPlaceholder = options.link?.href ? "search for more results" : "";
|
|
2192
2400
|
}
|
|
2193
2401
|
else if (element instanceof MultiSelect) {
|
|
@@ -2199,10 +2407,10 @@ class PropertySelectAttributes {
|
|
|
2199
2407
|
}
|
|
2200
2408
|
});
|
|
2201
2409
|
}
|
|
2202
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2203
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "
|
|
2410
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PropertySelectAttributes, deps: [{ token: i2$4.Select, optional: true, self: true }, { token: i3$2.MultiSelect, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive });
|
|
2411
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.1", type: PropertySelectAttributes, isStandalone: true, selector: "p-select[formControlProperty], p-select[propertyAttributes], p-multiSelect[formControlProperty], p-multiSelect[propertyAttributes]", inputs: { formControlProperty: { classPropertyName: "formControlProperty", publicName: "formControlProperty", isSignal: true, isRequired: false, transformFunction: null }, propertyAttributes: { classPropertyName: "propertyAttributes", publicName: "propertyAttributes", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
|
|
2204
2412
|
}
|
|
2205
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2413
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PropertySelectAttributes, decorators: [{
|
|
2206
2414
|
type: Directive,
|
|
2207
2415
|
args: [{
|
|
2208
2416
|
selector: "p-select[formControlProperty], p-select[propertyAttributes], p-multiSelect[formControlProperty], p-multiSelect[propertyAttributes]",
|
|
@@ -2230,8 +2438,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImpor
|
|
|
2230
2438
|
class PropertyAttributes {
|
|
2231
2439
|
elementRef;
|
|
2232
2440
|
renderer;
|
|
2233
|
-
formControlProperty = input();
|
|
2234
|
-
propertyAttributes = input();
|
|
2441
|
+
formControlProperty = input(...(ngDevMode ? [undefined, { debugName: "formControlProperty" }] : []));
|
|
2442
|
+
propertyAttributes = input(...(ngDevMode ? [undefined, { debugName: "propertyAttributes" }] : []));
|
|
2235
2443
|
constructor(elementRef, renderer) {
|
|
2236
2444
|
this.elementRef = elementRef;
|
|
2237
2445
|
this.renderer = renderer;
|
|
@@ -2275,10 +2483,10 @@ class PropertyAttributes {
|
|
|
2275
2483
|
this.renderer.setAttribute(nativeElement, "minlength", property.minLength.toString());
|
|
2276
2484
|
});
|
|
2277
2485
|
}
|
|
2278
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2279
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "
|
|
2486
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PropertyAttributes, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
|
|
2487
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.1", type: PropertyAttributes, isStandalone: true, selector: "[formControlProperty],[propertyAttributes]", inputs: { formControlProperty: { classPropertyName: "formControlProperty", publicName: "formControlProperty", isSignal: true, isRequired: false, transformFunction: null }, propertyAttributes: { classPropertyName: "propertyAttributes", publicName: "propertyAttributes", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
|
|
2280
2488
|
}
|
|
2281
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2489
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PropertyAttributes, decorators: [{
|
|
2282
2490
|
type: Directive,
|
|
2283
2491
|
args: [{
|
|
2284
2492
|
selector: "[formControlProperty],[propertyAttributes]",
|
|
@@ -2291,7 +2499,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImpor
|
|
|
2291
2499
|
* <input [formControlProperty]="property" />
|
|
2292
2500
|
*/
|
|
2293
2501
|
class FormControlProperty extends FormControlName {
|
|
2294
|
-
formControlProperty = input.required();
|
|
2502
|
+
formControlProperty = input.required(...(ngDevMode ? [{ debugName: "formControlProperty" }] : []));
|
|
2295
2503
|
_propertyAdded = false;
|
|
2296
2504
|
constructor(parent, validators, asyncValidators, valueAccessors) {
|
|
2297
2505
|
super(parent, validators, asyncValidators, valueAccessors, null);
|
|
@@ -2312,15 +2520,15 @@ class FormControlProperty extends FormControlName {
|
|
|
2312
2520
|
}
|
|
2313
2521
|
super.ngOnChanges(changes);
|
|
2314
2522
|
}
|
|
2315
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2316
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "
|
|
2523
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: FormControlProperty, deps: [{ token: i2$3.ControlContainer, host: true, optional: true, skipSelf: true }, { token: NG_VALIDATORS, optional: true, self: true }, { token: NG_ASYNC_VALIDATORS, optional: true, self: true }, { token: NG_VALUE_ACCESSOR, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive });
|
|
2524
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.1", type: FormControlProperty, isStandalone: true, selector: "[formControlProperty]:not([useTemplateDrivenForms=true])", inputs: { formControlProperty: { classPropertyName: "formControlProperty", publicName: "formControlProperty", isSignal: true, isRequired: true, transformFunction: null } }, providers: [
|
|
2317
2525
|
{
|
|
2318
2526
|
provide: NgControl,
|
|
2319
2527
|
useExisting: forwardRef(() => FormControlProperty),
|
|
2320
2528
|
},
|
|
2321
2529
|
], usesInheritance: true, usesOnChanges: true, ngImport: i0 });
|
|
2322
2530
|
}
|
|
2323
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2531
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: FormControlProperty, decorators: [{
|
|
2324
2532
|
type: Directive,
|
|
2325
2533
|
args: [{
|
|
2326
2534
|
selector: "[formControlProperty]:not([useTemplateDrivenForms=true])",
|
|
@@ -2360,8 +2568,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImpor
|
|
|
2360
2568
|
args: [NG_VALUE_ACCESSOR]
|
|
2361
2569
|
}] }] });
|
|
2362
2570
|
class DefaultPropertyValueAccessor extends DefaultValueAccessor {
|
|
2363
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2364
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
2571
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: DefaultPropertyValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
2572
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.1", type: DefaultPropertyValueAccessor, isStandalone: true, selector: "input:not([type=checkbox])[formControlProperty], textarea[formControlProperty], select[formControlProperty]", providers: [
|
|
2365
2573
|
{
|
|
2366
2574
|
provide: NG_VALUE_ACCESSOR,
|
|
2367
2575
|
useExisting: forwardRef(() => DefaultPropertyValueAccessor),
|
|
@@ -2369,7 +2577,7 @@ class DefaultPropertyValueAccessor extends DefaultValueAccessor {
|
|
|
2369
2577
|
},
|
|
2370
2578
|
], usesInheritance: true, ngImport: i0 });
|
|
2371
2579
|
}
|
|
2372
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2580
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: DefaultPropertyValueAccessor, decorators: [{
|
|
2373
2581
|
type: Directive,
|
|
2374
2582
|
args: [{
|
|
2375
2583
|
selector: "input:not([type=checkbox])[formControlProperty], textarea[formControlProperty], select[formControlProperty]",
|
|
@@ -2383,8 +2591,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImpor
|
|
|
2383
2591
|
}]
|
|
2384
2592
|
}] });
|
|
2385
2593
|
class CheckboxPropertyValueAccessor extends CheckboxControlValueAccessor {
|
|
2386
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2387
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
2594
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: CheckboxPropertyValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
2595
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.1", type: CheckboxPropertyValueAccessor, isStandalone: true, selector: "input[type=checkbox][formControlProperty]", providers: [
|
|
2388
2596
|
{
|
|
2389
2597
|
provide: NG_VALUE_ACCESSOR,
|
|
2390
2598
|
useExisting: forwardRef(() => CheckboxPropertyValueAccessor),
|
|
@@ -2392,7 +2600,7 @@ class CheckboxPropertyValueAccessor extends CheckboxControlValueAccessor {
|
|
|
2392
2600
|
},
|
|
2393
2601
|
], usesInheritance: true, ngImport: i0 });
|
|
2394
2602
|
}
|
|
2395
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2603
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: CheckboxPropertyValueAccessor, decorators: [{
|
|
2396
2604
|
type: Directive,
|
|
2397
2605
|
args: [{
|
|
2398
2606
|
selector: "input[type=checkbox][formControlProperty]",
|
|
@@ -2406,8 +2614,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImpor
|
|
|
2406
2614
|
}]
|
|
2407
2615
|
}] });
|
|
2408
2616
|
class SelectPropertyValueAccessor extends SelectControlValueAccessor {
|
|
2409
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2410
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
2617
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: SelectPropertyValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
2618
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.1", type: SelectPropertyValueAccessor, isStandalone: true, selector: "select:not([multiple])[formControlProperty]", providers: [
|
|
2411
2619
|
{
|
|
2412
2620
|
provide: NG_VALUE_ACCESSOR,
|
|
2413
2621
|
useExisting: forwardRef(() => SelectPropertyValueAccessor),
|
|
@@ -2415,7 +2623,7 @@ class SelectPropertyValueAccessor extends SelectControlValueAccessor {
|
|
|
2415
2623
|
},
|
|
2416
2624
|
], usesInheritance: true, ngImport: i0 });
|
|
2417
2625
|
}
|
|
2418
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2626
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: SelectPropertyValueAccessor, decorators: [{
|
|
2419
2627
|
type: Directive,
|
|
2420
2628
|
args: [{
|
|
2421
2629
|
selector: "select:not([multiple])[formControlProperty]",
|
|
@@ -2429,8 +2637,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImpor
|
|
|
2429
2637
|
}]
|
|
2430
2638
|
}] });
|
|
2431
2639
|
class RangePropertyValueAccessor extends RangeValueAccessor {
|
|
2432
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2433
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
2640
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RangePropertyValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
2641
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.1", type: RangePropertyValueAccessor, isStandalone: true, selector: "input[type=range][formControlProperty]", providers: [
|
|
2434
2642
|
{
|
|
2435
2643
|
provide: NG_VALUE_ACCESSOR,
|
|
2436
2644
|
useExisting: forwardRef(() => RangePropertyValueAccessor),
|
|
@@ -2438,7 +2646,7 @@ class RangePropertyValueAccessor extends RangeValueAccessor {
|
|
|
2438
2646
|
},
|
|
2439
2647
|
], usesInheritance: true, ngImport: i0 });
|
|
2440
2648
|
}
|
|
2441
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2649
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RangePropertyValueAccessor, decorators: [{
|
|
2442
2650
|
type: Directive,
|
|
2443
2651
|
args: [{
|
|
2444
2652
|
selector: "input[type=range][formControlProperty]",
|
|
@@ -2452,8 +2660,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImpor
|
|
|
2452
2660
|
}]
|
|
2453
2661
|
}] });
|
|
2454
2662
|
class NumberPropertyValueAccessor extends NumberValueAccessor {
|
|
2455
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2456
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
2663
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: NumberPropertyValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
2664
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.1", type: NumberPropertyValueAccessor, isStandalone: true, selector: "input[type=number][formControlProperty]", providers: [
|
|
2457
2665
|
{
|
|
2458
2666
|
provide: NG_VALUE_ACCESSOR,
|
|
2459
2667
|
useExisting: forwardRef(() => NumberPropertyValueAccessor),
|
|
@@ -2461,7 +2669,7 @@ class NumberPropertyValueAccessor extends NumberValueAccessor {
|
|
|
2461
2669
|
},
|
|
2462
2670
|
], usesInheritance: true, ngImport: i0 });
|
|
2463
2671
|
}
|
|
2464
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2672
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: NumberPropertyValueAccessor, decorators: [{
|
|
2465
2673
|
type: Directive,
|
|
2466
2674
|
args: [{
|
|
2467
2675
|
selector: "input[type=number][formControlProperty]",
|
|
@@ -2487,10 +2695,10 @@ class PropertyControlStatus extends NgControlStatus {
|
|
|
2487
2695
|
constructor(cd) {
|
|
2488
2696
|
super(cd);
|
|
2489
2697
|
}
|
|
2490
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2491
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
2698
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PropertyControlStatus, deps: [{ token: i2$3.NgControl, self: true }], target: i0.ɵɵFactoryTarget.Directive });
|
|
2699
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.1", type: PropertyControlStatus, isStandalone: true, selector: "[formControlProperty]", host: { properties: { "class.ng-untouched": "isUntouched", "class.ng-touched": "isTouched", "class.ng-pristine": "isPristine", "class.ng-dirty": "isDirty", "class.ng-valid": "isValid", "class.ng-invalid": "isInvalid", "class.ng-pending": "isPending" } }, usesInheritance: true, ngImport: i0 });
|
|
2492
2700
|
}
|
|
2493
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2701
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PropertyControlStatus, decorators: [{
|
|
2494
2702
|
type: Directive,
|
|
2495
2703
|
args: [{
|
|
2496
2704
|
selector: "[formControlProperty]",
|
|
@@ -2500,11 +2708,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImpor
|
|
|
2500
2708
|
type: Self
|
|
2501
2709
|
}] }] });
|
|
2502
2710
|
class HalFormsModule {
|
|
2503
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2504
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
2505
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
2711
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: HalFormsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
2712
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.1", ngImport: i0, type: HalFormsModule, imports: [FormControlProperty, DefaultPropertyValueAccessor, CheckboxPropertyValueAccessor, SelectPropertyValueAccessor, RangePropertyValueAccessor, NumberPropertyValueAccessor, PropertyControlStatus, PropertySelectAttributes, PropertyAttributes, PropertyInputNumberAttributes, ReactiveFormsModule], exports: [FormControlProperty, DefaultPropertyValueAccessor, CheckboxPropertyValueAccessor, SelectPropertyValueAccessor, RangePropertyValueAccessor, NumberPropertyValueAccessor, PropertyControlStatus, PropertySelectAttributes, PropertyAttributes, PropertyInputNumberAttributes, ReactiveFormsModule] });
|
|
2713
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: HalFormsModule, imports: [ReactiveFormsModule, ReactiveFormsModule] });
|
|
2506
2714
|
}
|
|
2507
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2715
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: HalFormsModule, decorators: [{
|
|
2508
2716
|
type: NgModule,
|
|
2509
2717
|
args: [{
|
|
2510
2718
|
imports: [FormControlProperty, DefaultPropertyValueAccessor, CheckboxPropertyValueAccessor, SelectPropertyValueAccessor, RangePropertyValueAccessor, NumberPropertyValueAccessor, PropertyControlStatus, PropertySelectAttributes, PropertyAttributes, PropertyInputNumberAttributes, ReactiveFormsModule],
|
|
@@ -2520,16 +2728,16 @@ class RestWorldInputBaseComponent {
|
|
|
2520
2728
|
* The property to display.
|
|
2521
2729
|
* @required
|
|
2522
2730
|
*/
|
|
2523
|
-
property = model.required();
|
|
2731
|
+
property = model.required(...(ngDevMode ? [{ debugName: "property" }] : []));
|
|
2524
2732
|
/**
|
|
2525
2733
|
* Set this to true if the input should use template driven forms instead of the default reactive forms.
|
|
2526
2734
|
*/
|
|
2527
|
-
useTemplateDrivenForms = input(false);
|
|
2528
|
-
model = model();
|
|
2529
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2530
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "
|
|
2735
|
+
useTemplateDrivenForms = input(false, ...(ngDevMode ? [{ debugName: "useTemplateDrivenForms" }] : []));
|
|
2736
|
+
model = model(...(ngDevMode ? [undefined, { debugName: "model" }] : []));
|
|
2737
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldInputBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
2738
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.1", type: RestWorldInputBaseComponent, isStandalone: true, inputs: { property: { classPropertyName: "property", publicName: "property", isSignal: true, isRequired: true, transformFunction: null }, useTemplateDrivenForms: { classPropertyName: "useTemplateDrivenForms", publicName: "useTemplateDrivenForms", isSignal: true, isRequired: false, transformFunction: null }, model: { classPropertyName: "model", publicName: "model", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { property: "propertyChange", model: "modelChange" }, ngImport: i0 });
|
|
2531
2739
|
}
|
|
2532
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2740
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldInputBaseComponent, decorators: [{
|
|
2533
2741
|
type: Directive
|
|
2534
2742
|
}] });
|
|
2535
2743
|
/**
|
|
@@ -2541,11 +2749,11 @@ class RestWorldInputLazyLoadBaseComponent extends RestWorldInputBaseComponent {
|
|
|
2541
2749
|
* @required
|
|
2542
2750
|
* @remarks This is the name of the API as defined in the `RestWorldClientCollection`.
|
|
2543
2751
|
*/
|
|
2544
|
-
apiName = input.required();
|
|
2545
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2546
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "
|
|
2752
|
+
apiName = input.required(...(ngDevMode ? [{ debugName: "apiName" }] : []));
|
|
2753
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldInputLazyLoadBaseComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
2754
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.1", type: RestWorldInputLazyLoadBaseComponent, isStandalone: true, inputs: { apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null } }, usesInheritance: true, ngImport: i0 });
|
|
2547
2755
|
}
|
|
2548
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2756
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldInputLazyLoadBaseComponent, decorators: [{
|
|
2549
2757
|
type: Directive
|
|
2550
2758
|
}] });
|
|
2551
2759
|
/**
|
|
@@ -2556,10 +2764,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImpor
|
|
|
2556
2764
|
* <rw-form-element [property]="property" [apiName]="apiName"></rw-form-element>
|
|
2557
2765
|
*/
|
|
2558
2766
|
class RestWorldFormElementComponent extends RestWorldInputLazyLoadBaseComponent {
|
|
2559
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2560
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
2767
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldFormElementComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
2768
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.1", type: RestWorldFormElementComponent, isStandalone: true, selector: "rw-form-element", usesInheritance: true, ngImport: i0, template: "<div class=\"grid field\">\r\n <rw-label [property]=\"property()\" class=\"col-12 md:col-2 flex align-items-center\"></rw-label>\r\n <rw-input [apiName]=\"apiName()\" [property]=\"property()\" class=\"col-12 md:col-10\"></rw-input>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "component", type: i0.forwardRef(() => RestWorldInputComponent), selector: "rw-input" }, { kind: "component", type: i0.forwardRef(() => RestWorldLabelComponent), selector: "rw-label", inputs: ["property"] }], viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }] });
|
|
2561
2769
|
}
|
|
2562
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2770
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldFormElementComponent, decorators: [{
|
|
2563
2771
|
type: Component,
|
|
2564
2772
|
args: [{ selector: 'rw-form-element', viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }], imports: [forwardRef(() => RestWorldInputComponent), RestWorldLabelComponent], template: "<div class=\"grid field\">\r\n <rw-label [property]=\"property()\" class=\"col-12 md:col-2 flex align-items-center\"></rw-label>\r\n <rw-input [apiName]=\"apiName()\" [property]=\"property()\" class=\"col-12 md:col-10\"></rw-input>\r\n</div>\r\n" }]
|
|
2565
2773
|
}] });
|
|
@@ -2574,9 +2782,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImpor
|
|
|
2574
2782
|
class RestWorldInputCollectionComponent extends RestWorldInputLazyLoadBaseComponent {
|
|
2575
2783
|
_formService;
|
|
2576
2784
|
_controlContainer;
|
|
2577
|
-
defaultTemplate = computed(() => this.property()._templates.default);
|
|
2578
|
-
innerFormArray = computed(() => this._controlContainer.control?.controls[this.property().name]);
|
|
2579
|
-
templates = computed(() => this.getCollectionEntryTemplates(this.property()));
|
|
2785
|
+
defaultTemplate = computed(() => this.property()._templates.default, ...(ngDevMode ? [{ debugName: "defaultTemplate" }] : []));
|
|
2786
|
+
innerFormArray = computed(() => this._controlContainer.control?.controls[this.property().name], ...(ngDevMode ? [{ debugName: "innerFormArray" }] : []));
|
|
2787
|
+
templates = computed(() => this.getCollectionEntryTemplates(this.property()), ...(ngDevMode ? [{ debugName: "templates" }] : []));
|
|
2580
2788
|
inputCollectionRef;
|
|
2581
2789
|
constructor(_formService, _controlContainer) {
|
|
2582
2790
|
super();
|
|
@@ -2623,10 +2831,10 @@ class RestWorldInputCollectionComponent extends RestWorldInputLazyLoadBaseCompon
|
|
|
2623
2831
|
this.property.update((property) => { delete property._templates[title]; return { ...property }; });
|
|
2624
2832
|
this.innerFormArray().removeAt(title);
|
|
2625
2833
|
}
|
|
2626
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2627
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
2834
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldInputCollectionComponent, deps: [{ token: i1$1.FormService }, { token: i2$3.ControlContainer }], target: i0.ɵɵFactoryTarget.Component });
|
|
2835
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RestWorldInputCollectionComponent, isStandalone: true, selector: "rw-input-collection", queries: [{ propertyName: "inputCollectionRef", first: true, predicate: ["inputCollection"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"flex align-items-center\">\n <div class=\"brace\">\n </div>\n <div class=\"w-full\" cdkDropList (cdkDropListDropped)=\"collectionItemDropped($event)\">\n @for (template of templates(); track template) {\n <div class=\"flex align-items-center\" cdkDrag>\n <i class=\"fas fa-grip-lines\" cdkDragHandle></i>\n <div class=\"brace\">\n </div>\n <div class=\"w-full flex justify-content-end\">\n <rw-input-template [formGroup]=\"innerFormArray().controls[template.title!]\" [template]=\"defaultTemplate()\" [apiName]=\"apiName()\" class=\"w-full\"></rw-input-template>\n <button pButton pRipple type=\"button\" icon=\"fas fa-trash\" class=\"p-button-outlined p-button-danger ml-2 mb-3\" (click)=\"deleteItemFromCollection(template)\"></button>\n </div>\n </div>\n }\n <div class=\"flex justify-content-end w-full\">\n <button pButton pRipple type=\"button\" icon=\"fas fa-plus\" class=\"p-button-outlined p-button-info\" (click)=\"addNewItemToCollection()\"></button>\n </div>\n </div>\n</div>", styles: [".cdk-drag-handle{cursor:move}.cdk-drag-preview{background-color:#ffffffd0;border:2px dashed rgb(206,212,218);cursor:move}.cdk-drag-placeholder{border:2px dashed rgb(206,212,218);margin:-2px}.brace{align-self:stretch;margin:.2rem .5rem;border-left:1px solid rgb(206,212,218);border-top:1px solid rgb(206,212,218);border-bottom:1px solid rgb(206,212,218);width:1rem}\n"], dependencies: [{ kind: "component", type: i0.forwardRef(() => RestWorldInputTemplateComponent), selector: "rw-input-template", inputs: ["apiName", "template"] }, { kind: "ngmodule", type: i0.forwardRef(() => DragDropModule) }, { kind: "directive", type: i0.forwardRef(() => i3$3.CdkDropList), selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i0.forwardRef(() => i3$3.CdkDrag), selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i0.forwardRef(() => i3$3.CdkDragHandle), selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: i0.forwardRef(() => ButtonDirective), selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "fluid", "label", "icon", "buttonProps"] }, { kind: "ngmodule", type: i0.forwardRef(() => ReactiveFormsModule) }, { kind: "directive", type: i0.forwardRef(() => i2$3.NgControlStatusGroup), selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i0.forwardRef(() => i2$3.FormGroupDirective), selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }], viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }] });
|
|
2628
2836
|
}
|
|
2629
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2837
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldInputCollectionComponent, decorators: [{
|
|
2630
2838
|
type: Component,
|
|
2631
2839
|
args: [{ selector: 'rw-input-collection', viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }], imports: [forwardRef(() => RestWorldInputTemplateComponent), DragDropModule, ButtonDirective, ReactiveFormsModule], template: "<div class=\"flex align-items-center\">\n <div class=\"brace\">\n </div>\n <div class=\"w-full\" cdkDropList (cdkDropListDropped)=\"collectionItemDropped($event)\">\n @for (template of templates(); track template) {\n <div class=\"flex align-items-center\" cdkDrag>\n <i class=\"fas fa-grip-lines\" cdkDragHandle></i>\n <div class=\"brace\">\n </div>\n <div class=\"w-full flex justify-content-end\">\n <rw-input-template [formGroup]=\"innerFormArray().controls[template.title!]\" [template]=\"defaultTemplate()\" [apiName]=\"apiName()\" class=\"w-full\"></rw-input-template>\n <button pButton pRipple type=\"button\" icon=\"fas fa-trash\" class=\"p-button-outlined p-button-danger ml-2 mb-3\" (click)=\"deleteItemFromCollection(template)\"></button>\n </div>\n </div>\n }\n <div class=\"flex justify-content-end w-full\">\n <button pButton pRipple type=\"button\" icon=\"fas fa-plus\" class=\"p-button-outlined p-button-info\" (click)=\"addNewItemToCollection()\"></button>\n </div>\n </div>\n</div>", styles: [".cdk-drag-handle{cursor:move}.cdk-drag-preview{background-color:#ffffffd0;border:2px dashed rgb(206,212,218);cursor:move}.cdk-drag-placeholder{border:2px dashed rgb(206,212,218);margin:-2px}.brace{align-self:stretch;margin:.2rem .5rem;border-left:1px solid rgb(206,212,218);border-top:1px solid rgb(206,212,218);border-bottom:1px solid rgb(206,212,218);width:1rem}\n"] }]
|
|
2632
2840
|
}], ctorParameters: () => [{ type: i1$1.FormService }, { type: i2$3.ControlContainer }], propDecorators: { inputCollectionRef: [{
|
|
@@ -2649,10 +2857,10 @@ class RestWorldInputComponent extends RestWorldInputLazyLoadBaseComponent {
|
|
|
2649
2857
|
get PropertyWithOptions() {
|
|
2650
2858
|
return PropertyWithOptions;
|
|
2651
2859
|
}
|
|
2652
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2653
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
2860
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
2861
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RestWorldInputComponent, isStandalone: true, selector: "rw-input", usesInheritance: true, ngImport: i0, template: "@if (property()) {\r\n @if (property().options) {\r\n <rw-input-dropdown [apiName]=\"apiName()\" [property]=\"$any(property())\" [useTemplateDrivenForms]=\"useTemplateDrivenForms()\"></rw-input-dropdown>\r\n }\r\n @else {\r\n @switch (property().type) {\r\n @case (PropertyType.Object) {\r\n <rw-input-object [apiName]=\"apiName()\" [property]=\"$any(property())\" [useTemplateDrivenForms]=\"useTemplateDrivenForms()\"></rw-input-object>\r\n }\r\n @case (PropertyType.Collection) {\r\n <rw-input-collection [apiName]=\"apiName()\" [property]=\"$any(property())\" [useTemplateDrivenForms]=\"useTemplateDrivenForms()\"></rw-input-collection>\r\n }\r\n @default {\r\n <rw-input-simple [property]=\"property()\" [useTemplateDrivenForms]=\"useTemplateDrivenForms()\"></rw-input-simple>\r\n }\r\n }\r\n }\r\n\r\n <rw-validation-errors [property]=\"property()\"></rw-validation-errors>\r\n}\r\n", styles: [""], dependencies: [{ kind: "component", type: i0.forwardRef(() => RestWorldInputDropdownComponent), selector: "rw-input-dropdown", inputs: ["caseSensitive", "getLabel", "getTooltip"], outputs: ["onChange"] }, { kind: "component", type: i0.forwardRef(() => RestWorldInputObjectComponent), selector: "rw-input-object" }, { kind: "component", type: i0.forwardRef(() => RestWorldInputSimpleComponent), selector: "rw-input-simple" }, { kind: "component", type: i0.forwardRef(() => RestWorldInputCollectionComponent), selector: "rw-input-collection" }, { kind: "component", type: i0.forwardRef(() => RestWorldValidationErrorsComponent), selector: "rw-validation-errors", inputs: ["form", "property"] }, { kind: "ngmodule", type: i0.forwardRef(() => FormsModule) }], viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }] });
|
|
2654
2862
|
}
|
|
2655
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2863
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldInputComponent, decorators: [{
|
|
2656
2864
|
type: Component,
|
|
2657
2865
|
args: [{ selector: 'rw-input', standalone: true, viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }], imports: [forwardRef(() => RestWorldInputDropdownComponent), forwardRef(() => RestWorldInputObjectComponent), forwardRef(() => RestWorldInputSimpleComponent), RestWorldInputCollectionComponent, RestWorldValidationErrorsComponent, FormsModule], template: "@if (property()) {\r\n @if (property().options) {\r\n <rw-input-dropdown [apiName]=\"apiName()\" [property]=\"$any(property())\" [useTemplateDrivenForms]=\"useTemplateDrivenForms()\"></rw-input-dropdown>\r\n }\r\n @else {\r\n @switch (property().type) {\r\n @case (PropertyType.Object) {\r\n <rw-input-object [apiName]=\"apiName()\" [property]=\"$any(property())\" [useTemplateDrivenForms]=\"useTemplateDrivenForms()\"></rw-input-object>\r\n }\r\n @case (PropertyType.Collection) {\r\n <rw-input-collection [apiName]=\"apiName()\" [property]=\"$any(property())\" [useTemplateDrivenForms]=\"useTemplateDrivenForms()\"></rw-input-collection>\r\n }\r\n @default {\r\n <rw-input-simple [property]=\"property()\" [useTemplateDrivenForms]=\"useTemplateDrivenForms()\"></rw-input-simple>\r\n }\r\n }\r\n }\r\n\r\n <rw-validation-errors [property]=\"property()\"></rw-validation-errors>\r\n}\r\n" }]
|
|
2658
2866
|
}] });
|
|
@@ -2671,7 +2879,7 @@ class RestWorldInputDropdownComponent extends RestWorldInputLazyLoadBaseComponen
|
|
|
2671
2879
|
* A flag that indicates if the search should be case sensitive.
|
|
2672
2880
|
* The default is false.
|
|
2673
2881
|
*/
|
|
2674
|
-
caseSensitive = input(false);
|
|
2882
|
+
caseSensitive = input(false, ...(ngDevMode ? [{ debugName: "caseSensitive" }] : []));
|
|
2675
2883
|
/**
|
|
2676
2884
|
* A function that returns the label for the given item.
|
|
2677
2885
|
* The default returns the prompt and optionally the value in brackets.
|
|
@@ -2679,7 +2887,7 @@ class RestWorldInputDropdownComponent extends RestWorldInputLazyLoadBaseComponen
|
|
|
2679
2887
|
* Overwrite this function to change the label.
|
|
2680
2888
|
* @param item The item to get the label for.
|
|
2681
2889
|
*/
|
|
2682
|
-
getLabel = input();
|
|
2890
|
+
getLabel = input(...(ngDevMode ? [undefined, { debugName: "getLabel" }] : []));
|
|
2683
2891
|
/**
|
|
2684
2892
|
* A function that returns the tooltip for the given item.
|
|
2685
2893
|
* The default returns all properties of the item except the ones that start with an underscore or the ones that are in the list of default properties to exclude.
|
|
@@ -2687,10 +2895,10 @@ class RestWorldInputDropdownComponent extends RestWorldInputLazyLoadBaseComponen
|
|
|
2687
2895
|
* Overwrite this function to change the tooltip.
|
|
2688
2896
|
* @param item The item to get the label for.
|
|
2689
2897
|
*/
|
|
2690
|
-
getTooltip = input();
|
|
2691
|
-
inputOptionsMultipleRef = contentChild("inputOptionsMultiple");
|
|
2692
|
-
inputOptionsSingleRef = contentChild("inputOptionsSingle");
|
|
2693
|
-
multiSelect = viewChild(MultiSelect);
|
|
2898
|
+
getTooltip = input(...(ngDevMode ? [undefined, { debugName: "getTooltip" }] : []));
|
|
2899
|
+
inputOptionsMultipleRef = contentChild("inputOptionsMultiple", ...(ngDevMode ? [{ debugName: "inputOptionsMultipleRef" }] : []));
|
|
2900
|
+
inputOptionsSingleRef = contentChild("inputOptionsSingle", ...(ngDevMode ? [{ debugName: "inputOptionsSingleRef" }] : []));
|
|
2901
|
+
multiSelect = viewChild(MultiSelect, ...(ngDevMode ? [{ debugName: "multiSelect" }] : []));
|
|
2694
2902
|
/**
|
|
2695
2903
|
* An event that is emitted when the selected value changes.
|
|
2696
2904
|
*/
|
|
@@ -2700,7 +2908,7 @@ class RestWorldInputDropdownComponent extends RestWorldInputLazyLoadBaseComponen
|
|
|
2700
2908
|
_formControl = computed(() => {
|
|
2701
2909
|
const formGroup = this._controlContainer.control;
|
|
2702
2910
|
return formGroup.controls[this.property().name];
|
|
2703
|
-
});
|
|
2911
|
+
}, ...(ngDevMode ? [{ debugName: "_formControl" }] : []));
|
|
2704
2912
|
_valueChangesSignal = toSignal(merge(
|
|
2705
2913
|
// Get the initial value when 'control' changes
|
|
2706
2914
|
toObservable(this._formControl).pipe(map((ctl) => ctl.value)),
|
|
@@ -2768,10 +2976,10 @@ class RestWorldInputDropdownComponent extends RestWorldInputLazyLoadBaseComponen
|
|
|
2768
2976
|
return `toupper(${filter})`;
|
|
2769
2977
|
return filter.toUpperCase();
|
|
2770
2978
|
}
|
|
2771
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2772
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.6", type: RestWorldInputDropdownComponent, isStandalone: true, selector: "rw-input-dropdown", inputs: { caseSensitive: { classPropertyName: "caseSensitive", publicName: "caseSensitive", isSignal: true, isRequired: false, transformFunction: null }, getLabel: { classPropertyName: "getLabel", publicName: "getLabel", isSignal: true, isRequired: false, transformFunction: null }, getTooltip: { classPropertyName: "getTooltip", publicName: "getTooltip", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onChange: "onChange" }, queries: [{ propertyName: "inputOptionsMultipleRef", first: true, predicate: ["inputOptionsMultiple"], descendants: true, isSignal: true }, { propertyName: "inputOptionsSingleRef", first: true, predicate: ["inputOptionsSingle"], descendants: true, isSignal: true }], viewQueries: [{ propertyName: "multiSelect", first: true, predicate: MultiSelect, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #defaultInputOptionsSingle let-property=\"property\" let-template=\"template\" let-items=\"items\" let-useTemplateDrivenForms=\"useTemplateDrivenForms\">\n @if (useTemplateDrivenForms()) {\n <p-select\n [propertyAttributes]=\"property()\"\n [(ngModel)]=\"model\"\n [options]=\"optionsManager.items()\"\n (onFilter)=\"onOptionsFiltered($event)\"\n (onChange)=\"onOptionsChanged($event)\"\n styleClass=\"w-full\"\n [panelStyleClass]=\"optionsManager.loading() ? 'loading' : ''\"\n [emptyFilterMessage]=\"optionsManager.loading() ? 'Loading...' : ''\"\n [loading]=\"optionsManager.loading()\"\n >\n <ng-template #selectedItem let-selectedItem>\n <span [pTooltip]=\"optionsManager.getTooltip()(selectedItem)\">{{optionsManager.getLabel()(selectedItem)}}</span>\n </ng-template>\n <ng-template #item let-item>\n <span [pTooltip]=\"optionsManager.getTooltip()(item)\">{{optionsManager.getLabel()(item)}}</span>\n </ng-template>\n </p-select>\n }\n @else {\n <p-select\n [formControlProperty]=\"property()\"\n [options]=\"optionsManager.items()\"\n (onFilter)=\"onOptionsFiltered($event)\"\n (onChange)=\"onOptionsChanged($event)\"\n styleClass=\"w-full\"\n [panelStyleClass]=\"optionsManager.loading() ? 'loading' : ''\"\n [emptyFilterMessage]=\"optionsManager.loading() ? 'Loading...' : ''\"\n [loading]=\"optionsManager.loading()\"\n >\n <ng-template #selectedItem let-selectedItem>\n <span [pTooltip]=\"optionsManager.getTooltip()(selectedItem)\">{{optionsManager.getLabel()(selectedItem)}}</span>\n </ng-template>\n <ng-template #item let-item>\n <span [pTooltip]=\"optionsManager.getTooltip()(item)\">{{optionsManager.getLabel()(item)}}</span>\n </ng-template>\n </p-select>\n }\n</ng-template>\n\n<ng-template #defaultInputOptionsMultiple let-property=\"property\" let-template=\"template\" let-items=\"items\" let-useTemplateDrivenForms=\"useTemplateDrivenForms\">\n @if (useTemplateDrivenForms()) {\n <p-multiSelect\n [propertyAttributes]=\"property()\"\n [(ngModel)]=\"model\"\n [options]=\"optionsManager.items()\"\n (onFilter)=\"onOptionsFiltered($event)\"\n (onChange)=\"onOptionsChanged($event)\"\n styleClass=\"w-full\"\n [panelStyleClass]=\"optionsManager.loading() ? 'loading' : ''\"\n [emptyFilterMessage]=\"optionsManager.loading() ? 'Loading...' : ''\"\n [loading]=\"optionsManager.loading()\"\n >\n <ng-template #selecteditems let-items let-removeChip=\"removeChip\">\n @for (item of items; track item; let i = $index) {\n <p-chip\n [pTooltip]=\"optionsManager.getTooltip()(item)\"\n [label]=\"optionsManager.getLabel()(item)\"\n [removable]=\"true\"\n (onRemove)=\"removeChip(optionsManager.getValue(item), $event)\"\n >\n </p-chip>\n }\n </ng-template>\n <ng-template #item let-item>\n <span [pTooltip]=\"optionsManager.getTooltip()(item)\">{{optionsManager.getLabel()(item)}}</span>\n </ng-template>\n </p-multiSelect>\n }\n @else {\n <p-multiSelect\n [formControlProperty]=\"property()\"\n [options]=\"optionsManager.items()\"\n (onFilter)=\"onOptionsFiltered($event)\"\n (onChange)=\"onOptionsChanged($event)\"\n styleClass=\"w-full\"\n [panelStyleClass]=\"optionsManager.loading() ? 'loading' : ''\"\n [emptyFilterMessage]=\"optionsManager.loading() ? 'Loading...' : ''\"\n [loading]=\"optionsManager.loading()\"\n >\n <ng-template #selecteditems let-items let-removeChip=\"removeChip\">\n @for (item of items; track item; let i = $index) {\n <p-chip\n [pTooltip]=\"optionsManager.getTooltip()(item)\"\n [label]=\"optionsManager.getLabel()(item)\"\n [removable]=\"true\"\n (onRemove)=\"removeChip(optionsManager.getValue(item), $event)\"\n >\n </p-chip>\n }\n </ng-template>\n <ng-template #item let-item>\n <span [pTooltip]=\"optionsManager.getTooltip()(item)\">{{optionsManager.getLabel()(item)}}</span>\n </ng-template>\n </p-multiSelect>\n }\n</ng-template>\n\n@if(!optionsManager.options().maxItems || optionsManager.options().maxItems == 1) {\n <ng-container *ngTemplateOutlet=\"inputOptionsSingleRef() ?? defaultInputOptionsSingle; context: { property: property, apiName: apiName, items: optionsManager.items, useTemplateDrivenForms: useTemplateDrivenForms, model: model }\"></ng-container>\n}\n@else {\n <ng-container *ngTemplateOutlet=\"inputOptionsMultipleRef() ?? defaultInputOptionsMultiple; context: { property: property, apiName: apiName, items: optionsManager.items, useTemplateDrivenForms: useTemplateDrivenForms, model: model }\"></ng-container>\n}\n", styles: ["::ng-deep .p-multiselect-label{display:inline-flex!important}::ng-deep .p-multiselect-label-empty{height:36px}::ng-deep .p-chip{background-color:#eff6ff;color:#1d4ed8}::ng-deep .pi-chip-remove-icon:hover{filter:brightness(.6)}\n"], dependencies: [{ kind: "component", type: Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "size", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "fluid", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: MultiSelect, selector: "p-multiSelect, p-multiselect, p-multi-select", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "fluid", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "chipIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "size", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "directive", type: Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: Chip, selector: "p-chip", inputs: ["label", "icon", "image", "alt", "style", "styleClass", "removable", "removeIcon", "chipProps"], outputs: ["onRemove", "onImageError"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: HalFormsModule }, { kind: "directive", type: FormControlProperty, selector: "[formControlProperty]:not([useTemplateDrivenForms=true])", inputs: ["formControlProperty"] }, { kind: "directive", type: PropertyControlStatus, selector: "[formControlProperty]" }, { kind: "directive", type: PropertySelectAttributes, selector: "p-select[formControlProperty], p-select[propertyAttributes], p-multiSelect[formControlProperty], p-multiSelect[propertyAttributes]", inputs: ["formControlProperty", "propertyAttributes"] }, { kind: "directive", type: PropertyAttributes, selector: "[formControlProperty],[propertyAttributes]", inputs: ["formControlProperty", "propertyAttributes"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }] });
|
|
2979
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldInputDropdownComponent, deps: [{ token: i2$3.ControlContainer }, { token: OptionsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
2980
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RestWorldInputDropdownComponent, isStandalone: true, selector: "rw-input-dropdown", inputs: { caseSensitive: { classPropertyName: "caseSensitive", publicName: "caseSensitive", isSignal: true, isRequired: false, transformFunction: null }, getLabel: { classPropertyName: "getLabel", publicName: "getLabel", isSignal: true, isRequired: false, transformFunction: null }, getTooltip: { classPropertyName: "getTooltip", publicName: "getTooltip", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onChange: "onChange" }, queries: [{ propertyName: "inputOptionsMultipleRef", first: true, predicate: ["inputOptionsMultiple"], descendants: true, isSignal: true }, { propertyName: "inputOptionsSingleRef", first: true, predicate: ["inputOptionsSingle"], descendants: true, isSignal: true }], viewQueries: [{ propertyName: "multiSelect", first: true, predicate: MultiSelect, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #defaultInputOptionsSingle let-property=\"property\" let-template=\"template\" let-items=\"items\" let-useTemplateDrivenForms=\"useTemplateDrivenForms\">\n @if (useTemplateDrivenForms()) {\n <p-select\n [propertyAttributes]=\"property()\"\n [(ngModel)]=\"model\"\n [options]=\"optionsManager.items()\"\n (onFilter)=\"onOptionsFiltered($event)\"\n (onChange)=\"onOptionsChanged($event)\"\n styleClass=\"w-full\"\n [panelStyleClass]=\"optionsManager.loading() ? 'loading' : ''\"\n [emptyFilterMessage]=\"optionsManager.loading() ? 'Loading...' : ''\"\n [loading]=\"optionsManager.loading()\"\n >\n <ng-template #selectedItem let-selectedItem>\n <span [pTooltip]=\"optionsManager.getTooltip()(selectedItem)\">{{optionsManager.getLabel()(selectedItem)}}</span>\n </ng-template>\n <ng-template #item let-item>\n <span [pTooltip]=\"optionsManager.getTooltip()(item)\">{{optionsManager.getLabel()(item)}}</span>\n </ng-template>\n </p-select>\n }\n @else {\n <p-select\n [formControlProperty]=\"property()\"\n [options]=\"optionsManager.items()\"\n (onFilter)=\"onOptionsFiltered($event)\"\n (onChange)=\"onOptionsChanged($event)\"\n styleClass=\"w-full\"\n [panelStyleClass]=\"optionsManager.loading() ? 'loading' : ''\"\n [emptyFilterMessage]=\"optionsManager.loading() ? 'Loading...' : ''\"\n [loading]=\"optionsManager.loading()\"\n >\n <ng-template #selectedItem let-selectedItem>\n <span [pTooltip]=\"optionsManager.getTooltip()(selectedItem)\">{{optionsManager.getLabel()(selectedItem)}}</span>\n </ng-template>\n <ng-template #item let-item>\n <span [pTooltip]=\"optionsManager.getTooltip()(item)\">{{optionsManager.getLabel()(item)}}</span>\n </ng-template>\n </p-select>\n }\n</ng-template>\n\n<ng-template #defaultInputOptionsMultiple let-property=\"property\" let-template=\"template\" let-items=\"items\" let-useTemplateDrivenForms=\"useTemplateDrivenForms\">\n @if (useTemplateDrivenForms()) {\n <p-multiSelect\n [propertyAttributes]=\"property()\"\n [(ngModel)]=\"model\"\n [options]=\"optionsManager.items()\"\n (onFilter)=\"onOptionsFiltered($event)\"\n (onChange)=\"onOptionsChanged($event)\"\n styleClass=\"w-full\"\n [panelStyleClass]=\"optionsManager.loading() ? 'loading' : ''\"\n [emptyFilterMessage]=\"optionsManager.loading() ? 'Loading...' : ''\"\n [loading]=\"optionsManager.loading()\"\n >\n <ng-template #selecteditems let-items let-removeChip=\"removeChip\">\n @for (item of items; track item; let i = $index) {\n <p-chip\n [pTooltip]=\"optionsManager.getTooltip()(item)\"\n [label]=\"optionsManager.getLabel()(item)\"\n [removable]=\"true\"\n (onRemove)=\"removeChip(optionsManager.getValue(item), $event)\"\n >\n </p-chip>\n }\n </ng-template>\n <ng-template #item let-item>\n <span [pTooltip]=\"optionsManager.getTooltip()(item)\">{{optionsManager.getLabel()(item)}}</span>\n </ng-template>\n </p-multiSelect>\n }\n @else {\n <p-multiSelect\n [formControlProperty]=\"property()\"\n [options]=\"optionsManager.items()\"\n (onFilter)=\"onOptionsFiltered($event)\"\n (onChange)=\"onOptionsChanged($event)\"\n styleClass=\"w-full\"\n [panelStyleClass]=\"optionsManager.loading() ? 'loading' : ''\"\n [emptyFilterMessage]=\"optionsManager.loading() ? 'Loading...' : ''\"\n [loading]=\"optionsManager.loading()\"\n >\n <ng-template #selecteditems let-items let-removeChip=\"removeChip\">\n @for (item of items; track item; let i = $index) {\n <p-chip\n [pTooltip]=\"optionsManager.getTooltip()(item)\"\n [label]=\"optionsManager.getLabel()(item)\"\n [removable]=\"true\"\n (onRemove)=\"removeChip(optionsManager.getValue(item), $event)\"\n >\n </p-chip>\n }\n </ng-template>\n <ng-template #item let-item>\n <span [pTooltip]=\"optionsManager.getTooltip()(item)\">{{optionsManager.getLabel()(item)}}</span>\n </ng-template>\n </p-multiSelect>\n }\n</ng-template>\n\n@if(!optionsManager.options().maxItems || optionsManager.options().maxItems == 1) {\n <ng-container *ngTemplateOutlet=\"inputOptionsSingleRef() ?? defaultInputOptionsSingle; context: { property: property, apiName: apiName, items: optionsManager.items, useTemplateDrivenForms: useTemplateDrivenForms, model: model }\"></ng-container>\n}\n@else {\n <ng-container *ngTemplateOutlet=\"inputOptionsMultipleRef() ?? defaultInputOptionsMultiple; context: { property: property, apiName: apiName, items: optionsManager.items, useTemplateDrivenForms: useTemplateDrivenForms, model: model }\"></ng-container>\n}\n", styles: ["::ng-deep .p-multiselect-label{display:inline-flex!important}::ng-deep .p-multiselect-label-empty{height:36px}::ng-deep .p-chip{background-color:#eff6ff;color:#1d4ed8}::ng-deep .pi-chip-remove-icon:hover{filter:brightness(.6)}\n"], dependencies: [{ kind: "component", type: Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "panelStyle", "styleClass", "panelStyleClass", "readonly", "editable", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "filterValue", "options", "appendTo"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: MultiSelect, selector: "p-multiSelect, p-multiselect, p-multi-select", inputs: ["id", "ariaLabel", "styleClass", "panelStyle", "panelStyleClass", "inputId", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "dataKey", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "chipIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autofocus", "placeholder", "options", "filterValue", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus", "highlightOnSelect", "size", "variant", "fluid", "appendTo"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "directive", type: Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo"] }, { kind: "component", type: Chip, selector: "p-chip", inputs: ["label", "icon", "image", "alt", "styleClass", "removable", "removeIcon", "chipProps"], outputs: ["onRemove", "onImageError"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: HalFormsModule }, { kind: "directive", type: FormControlProperty, selector: "[formControlProperty]:not([useTemplateDrivenForms=true])", inputs: ["formControlProperty"] }, { kind: "directive", type: PropertyControlStatus, selector: "[formControlProperty]" }, { kind: "directive", type: PropertySelectAttributes, selector: "p-select[formControlProperty], p-select[propertyAttributes], p-multiSelect[formControlProperty], p-multiSelect[propertyAttributes]", inputs: ["formControlProperty", "propertyAttributes"] }, { kind: "directive", type: PropertyAttributes, selector: "[formControlProperty],[propertyAttributes]", inputs: ["formControlProperty", "propertyAttributes"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }] });
|
|
2773
2981
|
}
|
|
2774
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2982
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldInputDropdownComponent, decorators: [{
|
|
2775
2983
|
type: Component,
|
|
2776
2984
|
args: [{ selector: 'rw-input-dropdown', standalone: true, viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }], imports: [Select, ReactiveFormsModule, MultiSelect, Tooltip, Chip, NgTemplateOutlet, HalFormsModule, FormsModule], template: "<ng-template #defaultInputOptionsSingle let-property=\"property\" let-template=\"template\" let-items=\"items\" let-useTemplateDrivenForms=\"useTemplateDrivenForms\">\n @if (useTemplateDrivenForms()) {\n <p-select\n [propertyAttributes]=\"property()\"\n [(ngModel)]=\"model\"\n [options]=\"optionsManager.items()\"\n (onFilter)=\"onOptionsFiltered($event)\"\n (onChange)=\"onOptionsChanged($event)\"\n styleClass=\"w-full\"\n [panelStyleClass]=\"optionsManager.loading() ? 'loading' : ''\"\n [emptyFilterMessage]=\"optionsManager.loading() ? 'Loading...' : ''\"\n [loading]=\"optionsManager.loading()\"\n >\n <ng-template #selectedItem let-selectedItem>\n <span [pTooltip]=\"optionsManager.getTooltip()(selectedItem)\">{{optionsManager.getLabel()(selectedItem)}}</span>\n </ng-template>\n <ng-template #item let-item>\n <span [pTooltip]=\"optionsManager.getTooltip()(item)\">{{optionsManager.getLabel()(item)}}</span>\n </ng-template>\n </p-select>\n }\n @else {\n <p-select\n [formControlProperty]=\"property()\"\n [options]=\"optionsManager.items()\"\n (onFilter)=\"onOptionsFiltered($event)\"\n (onChange)=\"onOptionsChanged($event)\"\n styleClass=\"w-full\"\n [panelStyleClass]=\"optionsManager.loading() ? 'loading' : ''\"\n [emptyFilterMessage]=\"optionsManager.loading() ? 'Loading...' : ''\"\n [loading]=\"optionsManager.loading()\"\n >\n <ng-template #selectedItem let-selectedItem>\n <span [pTooltip]=\"optionsManager.getTooltip()(selectedItem)\">{{optionsManager.getLabel()(selectedItem)}}</span>\n </ng-template>\n <ng-template #item let-item>\n <span [pTooltip]=\"optionsManager.getTooltip()(item)\">{{optionsManager.getLabel()(item)}}</span>\n </ng-template>\n </p-select>\n }\n</ng-template>\n\n<ng-template #defaultInputOptionsMultiple let-property=\"property\" let-template=\"template\" let-items=\"items\" let-useTemplateDrivenForms=\"useTemplateDrivenForms\">\n @if (useTemplateDrivenForms()) {\n <p-multiSelect\n [propertyAttributes]=\"property()\"\n [(ngModel)]=\"model\"\n [options]=\"optionsManager.items()\"\n (onFilter)=\"onOptionsFiltered($event)\"\n (onChange)=\"onOptionsChanged($event)\"\n styleClass=\"w-full\"\n [panelStyleClass]=\"optionsManager.loading() ? 'loading' : ''\"\n [emptyFilterMessage]=\"optionsManager.loading() ? 'Loading...' : ''\"\n [loading]=\"optionsManager.loading()\"\n >\n <ng-template #selecteditems let-items let-removeChip=\"removeChip\">\n @for (item of items; track item; let i = $index) {\n <p-chip\n [pTooltip]=\"optionsManager.getTooltip()(item)\"\n [label]=\"optionsManager.getLabel()(item)\"\n [removable]=\"true\"\n (onRemove)=\"removeChip(optionsManager.getValue(item), $event)\"\n >\n </p-chip>\n }\n </ng-template>\n <ng-template #item let-item>\n <span [pTooltip]=\"optionsManager.getTooltip()(item)\">{{optionsManager.getLabel()(item)}}</span>\n </ng-template>\n </p-multiSelect>\n }\n @else {\n <p-multiSelect\n [formControlProperty]=\"property()\"\n [options]=\"optionsManager.items()\"\n (onFilter)=\"onOptionsFiltered($event)\"\n (onChange)=\"onOptionsChanged($event)\"\n styleClass=\"w-full\"\n [panelStyleClass]=\"optionsManager.loading() ? 'loading' : ''\"\n [emptyFilterMessage]=\"optionsManager.loading() ? 'Loading...' : ''\"\n [loading]=\"optionsManager.loading()\"\n >\n <ng-template #selecteditems let-items let-removeChip=\"removeChip\">\n @for (item of items; track item; let i = $index) {\n <p-chip\n [pTooltip]=\"optionsManager.getTooltip()(item)\"\n [label]=\"optionsManager.getLabel()(item)\"\n [removable]=\"true\"\n (onRemove)=\"removeChip(optionsManager.getValue(item), $event)\"\n >\n </p-chip>\n }\n </ng-template>\n <ng-template #item let-item>\n <span [pTooltip]=\"optionsManager.getTooltip()(item)\">{{optionsManager.getLabel()(item)}}</span>\n </ng-template>\n </p-multiSelect>\n }\n</ng-template>\n\n@if(!optionsManager.options().maxItems || optionsManager.options().maxItems == 1) {\n <ng-container *ngTemplateOutlet=\"inputOptionsSingleRef() ?? defaultInputOptionsSingle; context: { property: property, apiName: apiName, items: optionsManager.items, useTemplateDrivenForms: useTemplateDrivenForms, model: model }\"></ng-container>\n}\n@else {\n <ng-container *ngTemplateOutlet=\"inputOptionsMultipleRef() ?? defaultInputOptionsMultiple; context: { property: property, apiName: apiName, items: optionsManager.items, useTemplateDrivenForms: useTemplateDrivenForms, model: model }\"></ng-container>\n}\n", styles: ["::ng-deep .p-multiselect-label{display:inline-flex!important}::ng-deep .p-multiselect-label-empty{height:36px}::ng-deep .p-chip{background-color:#eff6ff;color:#1d4ed8}::ng-deep .pi-chip-remove-icon:hover{filter:brightness(.6)}\n"] }]
|
|
2777
2985
|
}], ctorParameters: () => [{ type: i2$3.ControlContainer }, { type: OptionsService }] });
|
|
@@ -2785,7 +2993,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImpor
|
|
|
2785
2993
|
*/
|
|
2786
2994
|
class RestWorldInputObjectComponent extends RestWorldInputLazyLoadBaseComponent {
|
|
2787
2995
|
_controlContainer;
|
|
2788
|
-
inputObjectRef = contentChild("inputObject");
|
|
2996
|
+
inputObjectRef = contentChild("inputObject", ...(ngDevMode ? [{ debugName: "inputObjectRef" }] : []));
|
|
2789
2997
|
constructor(_controlContainer) {
|
|
2790
2998
|
super();
|
|
2791
2999
|
this._controlContainer = _controlContainer;
|
|
@@ -2793,11 +3001,11 @@ class RestWorldInputObjectComponent extends RestWorldInputLazyLoadBaseComponent
|
|
|
2793
3001
|
innerFormGroup = computed(() => {
|
|
2794
3002
|
const formGroup = this._controlContainer.control;
|
|
2795
3003
|
return formGroup.controls[this.property().name];
|
|
2796
|
-
});
|
|
2797
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2798
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "
|
|
3004
|
+
}, ...(ngDevMode ? [{ debugName: "innerFormGroup" }] : []));
|
|
3005
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldInputObjectComponent, deps: [{ token: i2$3.ControlContainer }], target: i0.ɵɵFactoryTarget.Component });
|
|
3006
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.1", type: RestWorldInputObjectComponent, isStandalone: true, selector: "rw-input-object", queries: [{ propertyName: "inputObjectRef", first: true, predicate: ["inputObject"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #defaultInputObject let-property=\"property\" let-innerFormGroup=\"innerFormGroup\", let-apiName=\"apiName\">\n <div class=\"flex align-items-center\">\n <div class=\"brace\">\n </div>\n <div class=\"w-full\">\n <rw-input-template [formGroup]=\"innerFormGroup()\" [template]=\"property()._templates.default\" [apiName]=\"apiName()\"></rw-input-template>\n </div>\n </div>\n</ng-template>\n\n<ng-container>\n <ng-container *ngTemplateOutlet=\"inputObjectRef() || defaultInputObject; context: { property: property, innerFormGroup: innerFormGroup, apiName: apiName }\"></ng-container>\n</ng-container>\n", styles: [".brace{align-self:stretch;margin:.2rem .5rem;border-left:1px solid rgb(206,212,218);border-top:1px solid rgb(206,212,218);border-bottom:1px solid rgb(206,212,218);width:1rem}\n"], dependencies: [{ kind: "component", type: i0.forwardRef(() => RestWorldInputTemplateComponent), selector: "rw-input-template", inputs: ["apiName", "template"] }, { kind: "ngmodule", type: i0.forwardRef(() => ReactiveFormsModule) }, { kind: "directive", type: i0.forwardRef(() => i2$3.NgControlStatusGroup), selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i0.forwardRef(() => i2$3.FormGroupDirective), selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i0.forwardRef(() => NgTemplateOutlet), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }] });
|
|
2799
3007
|
}
|
|
2800
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
3008
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldInputObjectComponent, decorators: [{
|
|
2801
3009
|
type: Component,
|
|
2802
3010
|
args: [{ selector: 'rw-input-object', standalone: true, viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }], imports: [forwardRef(() => RestWorldInputTemplateComponent), ReactiveFormsModule, NgTemplateOutlet], template: "<ng-template #defaultInputObject let-property=\"property\" let-innerFormGroup=\"innerFormGroup\", let-apiName=\"apiName\">\n <div class=\"flex align-items-center\">\n <div class=\"brace\">\n </div>\n <div class=\"w-full\">\n <rw-input-template [formGroup]=\"innerFormGroup()\" [template]=\"property()._templates.default\" [apiName]=\"apiName()\"></rw-input-template>\n </div>\n </div>\n</ng-template>\n\n<ng-container>\n <ng-container *ngTemplateOutlet=\"inputObjectRef() || defaultInputObject; context: { property: property, innerFormGroup: innerFormGroup, apiName: apiName }\"></ng-container>\n</ng-container>\n", styles: [".brace{align-self:stretch;margin:.2rem .5rem;border-left:1px solid rgb(206,212,218);border-top:1px solid rgb(206,212,218);border-bottom:1px solid rgb(206,212,218);width:1rem}\n"] }]
|
|
2803
3011
|
}], ctorParameters: () => [{ type: i2$3.ControlContainer }] });
|
|
@@ -2820,8 +3028,8 @@ class RestWorldInputSimpleComponent extends RestWorldInputBaseComponent {
|
|
|
2820
3028
|
.replace("22", "hh")
|
|
2821
3029
|
.replace("33", "mm")
|
|
2822
3030
|
.replace("44", "ss");
|
|
2823
|
-
_inputChild = viewChild("inputElement");
|
|
2824
|
-
_controlChild = viewChild(NG_VALUE_ACCESSOR);
|
|
3031
|
+
_inputChild = viewChild("inputElement", ...(ngDevMode ? [{ debugName: "_inputChild" }] : []));
|
|
3032
|
+
_controlChild = viewChild(NG_VALUE_ACCESSOR, ...(ngDevMode ? [{ debugName: "_controlChild" }] : []));
|
|
2825
3033
|
constructor() {
|
|
2826
3034
|
super();
|
|
2827
3035
|
}
|
|
@@ -2877,20 +3085,20 @@ class RestWorldInputSimpleComponent extends RestWorldInputBaseComponent {
|
|
|
2877
3085
|
get timeFormat() {
|
|
2878
3086
|
return RestWorldInputSimpleComponent._timeFormat;
|
|
2879
3087
|
}
|
|
2880
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2881
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
3088
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldInputSimpleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3089
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RestWorldInputSimpleComponent, isStandalone: true, selector: "rw-input-simple", providers: [{
|
|
2882
3090
|
provide: NG_VALUE_ACCESSOR,
|
|
2883
3091
|
useExisting: forwardRef(() => RestWorldInputSimpleComponent),
|
|
2884
3092
|
multi: true
|
|
2885
|
-
}], viewQueries: [{ propertyName: "_inputChild", first: true, predicate: ["inputElement"], descendants: true, isSignal: true }, { propertyName: "_controlChild", first: true, predicate: NG_VALUE_ACCESSOR, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@switch(property().type) {\n @case (PropertyType.Textarea) {\n @if (useTemplateDrivenForms()){\n <textarea #inputElement [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" pInputTextarea class=\"w-full p-inputtextarea p-inputtext p-component p-element\"></textarea>\n }\n @else {\n <textarea #inputElement [formControlProperty]=\"property()\" pInputTextarea class=\"w-full p-inputtextarea p-inputtext p-component p-element\"></textarea>\n }\n }\n @case (PropertyType.Date) {\n @if (useTemplateDrivenForms()) {\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showWeek]=\"true\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n @else {\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showWeek]=\"true\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n }\n @case (PropertyType.Month) {\n @if (useTemplateDrivenForms()) {\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showWeek]=\"false\" view=\"month\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n @else {\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showWeek]=\"false\" view=\"month\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n }\n @case (PropertyType.Time) {\n @if (useTemplateDrivenForms()) {\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n @else {\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n }\n @case (PropertyType.DatetimeLocal) {\n @if (useTemplateDrivenForms()) {\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n @else {\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n }\n @case (PropertyType.Number) {\n @if (useTemplateDrivenForms()) {\n <p-inputNumber [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" class=\"w-full\" styleClass=\"w-full\"></p-inputNumber>\n }\n @else {\n <p-inputNumber inputMode=\"decimal\" [formControlProperty]=\"property()\" class=\"w-full\" styleClass=\"w-full\"></p-inputNumber>\n }\n }\n @case (PropertyType.Bool) {\n @if (useTemplateDrivenForms()) {\n <rw-tri-state-checkbox [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [required]=\"property().required ?? false\"></rw-tri-state-checkbox>\n }\n @else {\n <rw-tri-state-checkbox [formControlProperty]=\"property()\" [required]=\"property().required\"></rw-tri-state-checkbox>\n }\n }\n @case (PropertyType.DatetimeOffset) {\n @if (useTemplateDrivenForms()) {\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n @else {\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n }\n @case (PropertyType.Duration) {\n @if (useTemplateDrivenForms()) {\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n @else {\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n }\n @case (PropertyType.Image) {\n @if (useTemplateDrivenForms()) {\n <rw-image [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [formControlName]=\"property().name\" [property]=\"$any(property())\"></rw-image>\n }\n @else {\n <rw-image [formControlName]=\"property().name\" [property]=\"$any(property())\"></rw-image>\n }\n }\n @case (PropertyType.File) {\n @if (useTemplateDrivenForms()) {\n <rw-file [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [formControlName]=\"property().name\" [fileName]=\"property().name\" [accept]=\"$any(property().placeholder)\"></rw-file>\n }\n @else {\n <rw-file [formControlName]=\"property().name\" [fileName]=\"property().name\" [accept]=\"$any(property().placeholder)\"></rw-file>\n }\n }\n @default {\n <!-- <input [formControlName]=\"property().name\" [id]=\"property().name\" type=\"text\" pInputText class=\"w-full\" [class.p-disabled]=\"property().readOnly\" /> -->\n @if (useTemplateDrivenForms()) {\n <input #inputElement [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" pInputText class=\"w-full\" />\n }\n @else {\n <input #inputElement [formControlProperty]=\"property()\" pInputText class=\"w-full\" />\n }\n }\n}\n", styles: [".p-inputtext.ng-touched.ng-invalid{border-color:#e24c4c}\n"], dependencies: [{ kind: "component", type: DatePicker, selector: "p-datePicker, p-datepicker, p-date-picker", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "fluid", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "size", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "component", type: InputNumber, selector: "p-inputNumber, p-inputnumber, p-input-number", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "style", "placeholder", "size", "maxlength", "tabindex", "title", "ariaLabelledBy", "ariaLabel", "ariaRequired", "name", "required", "autocomplete", "min", "max", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "step", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "variant", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "autofocus", "disabled", "fluid"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }, { kind: "component", type: TriStateCheckbox, selector: "p-tri-state-checkbox, p-tri-state-checkBox, p-tri-state-check-box, rw-tri-state-checkbox, rw-tri-state-checkBox, rw-tri-state-check-box", inputs: ["value", "name", "disabled", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "inputStyle", "styleClass", "inputClass", "size", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "model", "variant"], outputs: ["disabledChange", "modelChange", "onChange", "onFocus", "onBlur"] }, { kind: "component", type: RestWorldImageComponent, selector: "rw-image", inputs: ["property", "backgroundColor", "displayCropDialog"], outputs: ["backgroundColorChange", "displayCropDialogChange"] }, { kind: "component", type: RestWorldFileComponent, selector: "rw-file", inputs: ["accept", "fileName"] }, { kind: "directive", type: InputText, selector: "[pInputText]", inputs: ["variant", "fluid", "pSize"] }, { kind: "ngmodule", type: HalFormsModule }, { kind: "directive", type: FormControlProperty, selector: "[formControlProperty]:not([useTemplateDrivenForms=true])", inputs: ["formControlProperty"] }, { kind: "directive", type: DefaultPropertyValueAccessor, selector: "input:not([type=checkbox])[formControlProperty], textarea[formControlProperty], select[formControlProperty]" }, { kind: "directive", type: PropertyControlStatus, selector: "[formControlProperty]" }, { kind: "directive", type: PropertyAttributes, selector: "[formControlProperty],[propertyAttributes]", inputs: ["formControlProperty", "propertyAttributes"] }, { kind: "directive", type: PropertyInputNumberAttributes, selector: "p-inputNumber[formControlProperty], p-inputNumber[propertyAttributes]", inputs: ["formControlProperty", "propertyAttributes"] }, { kind: "directive", type: i2$3.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: i2$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }] });
|
|
3093
|
+
}], viewQueries: [{ propertyName: "_inputChild", first: true, predicate: ["inputElement"], descendants: true, isSignal: true }, { propertyName: "_controlChild", first: true, predicate: NG_VALUE_ACCESSOR, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@switch(property().type) {\r\n @case (PropertyType.Textarea) {\r\n @if (useTemplateDrivenForms()){\r\n <textarea #inputElement [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" pInputTextarea class=\"w-full p-inputtextarea p-inputtext p-component p-element\"></textarea>\r\n }\r\n @else {\r\n <textarea #inputElement [formControlProperty]=\"property()\" pInputTextarea class=\"w-full p-inputtextarea p-inputtext p-component p-element\"></textarea>\r\n }\r\n }\r\n @case (PropertyType.Date) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showWeek]=\"true\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n @else {\r\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showWeek]=\"true\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n }\r\n @case (PropertyType.Month) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showWeek]=\"false\" view=\"month\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n @else {\r\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showWeek]=\"false\" view=\"month\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n }\r\n @case (PropertyType.Time) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n @else {\r\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n }\r\n @case (PropertyType.DatetimeLocal) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n @else {\r\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n }\r\n @case (PropertyType.Number) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-inputNumber [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" class=\"w-full\" styleClass=\"w-full\"></p-inputNumber>\r\n }\r\n @else {\r\n <p-inputNumber inputMode=\"decimal\" [formControlProperty]=\"property()\" class=\"w-full\" styleClass=\"w-full\"></p-inputNumber>\r\n }\r\n }\r\n @case (PropertyType.Bool) {\r\n @if (useTemplateDrivenForms()) {\r\n <rw-tri-state-checkbox [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [required]=\"property().required ?? false\"></rw-tri-state-checkbox>\r\n }\r\n @else {\r\n <rw-tri-state-checkbox [formControlProperty]=\"property()\" [required]=\"property().required\"></rw-tri-state-checkbox>\r\n }\r\n }\r\n @case (PropertyType.DatetimeOffset) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n @else {\r\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n }\r\n @case (PropertyType.Duration) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n @else {\r\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n }\r\n @case (PropertyType.Image) {\r\n @if (useTemplateDrivenForms()) {\r\n <rw-image [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [formControlName]=\"property().name\" [property]=\"$any(property())\"></rw-image>\r\n }\r\n @else {\r\n <rw-image [formControlName]=\"property().name\" [property]=\"$any(property())\"></rw-image>\r\n }\r\n }\r\n @case (PropertyType.File) {\r\n @if (useTemplateDrivenForms()) {\r\n <rw-file [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [formControlName]=\"property().name\" [fileName]=\"property().name\" [accept]=\"$any(property().placeholder)\"></rw-file>\r\n }\r\n @else {\r\n <rw-file [formControlName]=\"property().name\" [fileName]=\"property().name\" [accept]=\"$any(property().placeholder)\"></rw-file>\r\n }\r\n }\r\n @default {\r\n <!-- <input [formControlName]=\"property().name\" [id]=\"property().name\" type=\"text\" pInputText class=\"w-full\" [class.p-disabled]=\"property().readOnly\" /> -->\r\n @if (useTemplateDrivenForms()) {\r\n <input #inputElement [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" pInputText class=\"w-full\" />\r\n }\r\n @else {\r\n <input #inputElement [formControlProperty]=\"property()\" pInputText class=\"w-full\" />\r\n }\r\n }\r\n}\r\n", styles: [".p-inputtext.ng-touched.ng-invalid{border-color:#e24c4c}\n"], dependencies: [{ kind: "component", type: DatePicker, selector: "p-datePicker, p-datepicker, p-date-picker", inputs: ["iconDisplay", "styleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "readonlyInput", "shortYearCutoff", "hourFormat", "timeOnly", "stepHour", "stepMinute", "stepSecond", "showSeconds", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "minDate", "maxDate", "disabledDates", "disabledDays", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "view", "defaultDate", "appendTo"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "component", type: InputNumber, selector: "p-inputNumber, p-inputnumber, p-input-number", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "placeholder", "tabindex", "title", "ariaLabelledBy", "ariaDescribedBy", "ariaLabel", "ariaRequired", "autocomplete", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "autofocus"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }, { kind: "component", type: TriStateCheckbox, selector: "p-tri-state-checkbox, p-tri-state-checkBox, p-tri-state-check-box, rw-tri-state-checkbox, rw-tri-state-checkBox, rw-tri-state-check-box", inputs: ["value", "name", "disabled", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "inputStyle", "styleClass", "inputClass", "size", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "model", "variant"], outputs: ["disabledChange", "modelChange", "onChange", "onFocus", "onBlur"] }, { kind: "component", type: RestWorldImageComponent, selector: "rw-image", inputs: ["property", "backgroundColor", "displayCropDialog"], outputs: ["backgroundColorChange", "displayCropDialogChange"] }, { kind: "component", type: RestWorldFileComponent, selector: "rw-file", inputs: ["accept", "fileName"] }, { kind: "directive", type: InputText, selector: "[pInputText]", inputs: ["pSize", "variant", "fluid", "invalid"] }, { kind: "ngmodule", type: HalFormsModule }, { kind: "directive", type: FormControlProperty, selector: "[formControlProperty]:not([useTemplateDrivenForms=true])", inputs: ["formControlProperty"] }, { kind: "directive", type: DefaultPropertyValueAccessor, selector: "input:not([type=checkbox])[formControlProperty], textarea[formControlProperty], select[formControlProperty]" }, { kind: "directive", type: PropertyControlStatus, selector: "[formControlProperty]" }, { kind: "directive", type: PropertyAttributes, selector: "[formControlProperty],[propertyAttributes]", inputs: ["formControlProperty", "propertyAttributes"] }, { kind: "directive", type: PropertyInputNumberAttributes, selector: "p-inputNumber[formControlProperty], p-inputNumber[propertyAttributes]", inputs: ["formControlProperty", "propertyAttributes"] }, { kind: "directive", type: i2$3.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: i2$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }] });
|
|
2886
3094
|
}
|
|
2887
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
3095
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldInputSimpleComponent, decorators: [{
|
|
2888
3096
|
type: Component,
|
|
2889
3097
|
args: [{ selector: 'rw-input-simple', standalone: true, providers: [{
|
|
2890
3098
|
provide: NG_VALUE_ACCESSOR,
|
|
2891
3099
|
useExisting: forwardRef(() => RestWorldInputSimpleComponent),
|
|
2892
3100
|
multi: true
|
|
2893
|
-
}], viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }], imports: [DatePicker, InputNumber, TriStateCheckbox, RestWorldImageComponent, RestWorldFileComponent, InputText, HalFormsModule, FormsModule], template: "@switch(property().type) {\n @case (PropertyType.Textarea) {\n @if (useTemplateDrivenForms()){\n <textarea #inputElement [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" pInputTextarea class=\"w-full p-inputtextarea p-inputtext p-component p-element\"></textarea>\n }\n @else {\n <textarea #inputElement [formControlProperty]=\"property()\" pInputTextarea class=\"w-full p-inputtextarea p-inputtext p-component p-element\"></textarea>\n }\n }\n @case (PropertyType.Date) {\n @if (useTemplateDrivenForms()) {\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showWeek]=\"true\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n @else {\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showWeek]=\"true\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n }\n @case (PropertyType.Month) {\n @if (useTemplateDrivenForms()) {\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showWeek]=\"false\" view=\"month\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n @else {\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showWeek]=\"false\" view=\"month\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n }\n @case (PropertyType.Time) {\n @if (useTemplateDrivenForms()) {\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n @else {\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n }\n @case (PropertyType.DatetimeLocal) {\n @if (useTemplateDrivenForms()) {\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n @else {\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n }\n @case (PropertyType.Number) {\n @if (useTemplateDrivenForms()) {\n <p-inputNumber [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" class=\"w-full\" styleClass=\"w-full\"></p-inputNumber>\n }\n @else {\n <p-inputNumber inputMode=\"decimal\" [formControlProperty]=\"property()\" class=\"w-full\" styleClass=\"w-full\"></p-inputNumber>\n }\n }\n @case (PropertyType.Bool) {\n @if (useTemplateDrivenForms()) {\n <rw-tri-state-checkbox [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [required]=\"property().required ?? false\"></rw-tri-state-checkbox>\n }\n @else {\n <rw-tri-state-checkbox [formControlProperty]=\"property()\" [required]=\"property().required\"></rw-tri-state-checkbox>\n }\n }\n @case (PropertyType.DatetimeOffset) {\n @if (useTemplateDrivenForms()) {\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n @else {\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n }\n @case (PropertyType.Duration) {\n @if (useTemplateDrivenForms()) {\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n @else {\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\n }\n }\n @case (PropertyType.Image) {\n @if (useTemplateDrivenForms()) {\n <rw-image [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [formControlName]=\"property().name\" [property]=\"$any(property())\"></rw-image>\n }\n @else {\n <rw-image [formControlName]=\"property().name\" [property]=\"$any(property())\"></rw-image>\n }\n }\n @case (PropertyType.File) {\n @if (useTemplateDrivenForms()) {\n <rw-file [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [formControlName]=\"property().name\" [fileName]=\"property().name\" [accept]=\"$any(property().placeholder)\"></rw-file>\n }\n @else {\n <rw-file [formControlName]=\"property().name\" [fileName]=\"property().name\" [accept]=\"$any(property().placeholder)\"></rw-file>\n }\n }\n @default {\n <!-- <input [formControlName]=\"property().name\" [id]=\"property().name\" type=\"text\" pInputText class=\"w-full\" [class.p-disabled]=\"property().readOnly\" /> -->\n @if (useTemplateDrivenForms()) {\n <input #inputElement [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" pInputText class=\"w-full\" />\n }\n @else {\n <input #inputElement [formControlProperty]=\"property()\" pInputText class=\"w-full\" />\n }\n }\n}\n", styles: [".p-inputtext.ng-touched.ng-invalid{border-color:#e24c4c}\n"] }]
|
|
3101
|
+
}], viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }], imports: [DatePicker, InputNumber, TriStateCheckbox, RestWorldImageComponent, RestWorldFileComponent, InputText, HalFormsModule, FormsModule], template: "@switch(property().type) {\r\n @case (PropertyType.Textarea) {\r\n @if (useTemplateDrivenForms()){\r\n <textarea #inputElement [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" pInputTextarea class=\"w-full p-inputtextarea p-inputtext p-component p-element\"></textarea>\r\n }\r\n @else {\r\n <textarea #inputElement [formControlProperty]=\"property()\" pInputTextarea class=\"w-full p-inputtextarea p-inputtext p-component p-element\"></textarea>\r\n }\r\n }\r\n @case (PropertyType.Date) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showWeek]=\"true\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n @else {\r\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showWeek]=\"true\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n }\r\n @case (PropertyType.Month) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showWeek]=\"false\" view=\"month\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n @else {\r\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showWeek]=\"false\" view=\"month\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n }\r\n @case (PropertyType.Time) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n @else {\r\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n }\r\n @case (PropertyType.DatetimeLocal) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n @else {\r\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n }\r\n @case (PropertyType.Number) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-inputNumber [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" class=\"w-full\" styleClass=\"w-full\"></p-inputNumber>\r\n }\r\n @else {\r\n <p-inputNumber inputMode=\"decimal\" [formControlProperty]=\"property()\" class=\"w-full\" styleClass=\"w-full\"></p-inputNumber>\r\n }\r\n }\r\n @case (PropertyType.Bool) {\r\n @if (useTemplateDrivenForms()) {\r\n <rw-tri-state-checkbox [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [required]=\"property().required ?? false\"></rw-tri-state-checkbox>\r\n }\r\n @else {\r\n <rw-tri-state-checkbox [formControlProperty]=\"property()\" [required]=\"property().required\"></rw-tri-state-checkbox>\r\n }\r\n }\r\n @case (PropertyType.DatetimeOffset) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n @else {\r\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n }\r\n @case (PropertyType.Duration) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n @else {\r\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n }\r\n @case (PropertyType.Image) {\r\n @if (useTemplateDrivenForms()) {\r\n <rw-image [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [formControlName]=\"property().name\" [property]=\"$any(property())\"></rw-image>\r\n }\r\n @else {\r\n <rw-image [formControlName]=\"property().name\" [property]=\"$any(property())\"></rw-image>\r\n }\r\n }\r\n @case (PropertyType.File) {\r\n @if (useTemplateDrivenForms()) {\r\n <rw-file [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [formControlName]=\"property().name\" [fileName]=\"property().name\" [accept]=\"$any(property().placeholder)\"></rw-file>\r\n }\r\n @else {\r\n <rw-file [formControlName]=\"property().name\" [fileName]=\"property().name\" [accept]=\"$any(property().placeholder)\"></rw-file>\r\n }\r\n }\r\n @default {\r\n <!-- <input [formControlName]=\"property().name\" [id]=\"property().name\" type=\"text\" pInputText class=\"w-full\" [class.p-disabled]=\"property().readOnly\" /> -->\r\n @if (useTemplateDrivenForms()) {\r\n <input #inputElement [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" pInputText class=\"w-full\" />\r\n }\r\n @else {\r\n <input #inputElement [formControlProperty]=\"property()\" pInputText class=\"w-full\" />\r\n }\r\n }\r\n}\r\n", styles: [".p-inputtext.ng-touched.ng-invalid{border-color:#e24c4c}\n"] }]
|
|
2894
3102
|
}], ctorParameters: () => [] });
|
|
2895
3103
|
/**
|
|
2896
3104
|
* A collection of `<rw-form>` elements automatically created from a template.
|
|
@@ -2905,19 +3113,19 @@ class RestWorldInputTemplateComponent {
|
|
|
2905
3113
|
* @required
|
|
2906
3114
|
* @remarks This is the name of the API as defined in the `RestWorldClientCollection`.
|
|
2907
3115
|
*/
|
|
2908
|
-
apiName = input.required();
|
|
3116
|
+
apiName = input.required(...(ngDevMode ? [{ debugName: "apiName" }] : []));
|
|
2909
3117
|
/**
|
|
2910
3118
|
* The template to display.
|
|
2911
3119
|
* @required
|
|
2912
3120
|
* @remarks This is the template that defines the properties to display.
|
|
2913
3121
|
*/
|
|
2914
|
-
template = input.required();
|
|
2915
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2916
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
3122
|
+
template = input.required(...(ngDevMode ? [{ debugName: "template" }] : []));
|
|
3123
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldInputTemplateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3124
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RestWorldInputTemplateComponent, isStandalone: true, selector: "rw-input-template", inputs: { apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, template: { classPropertyName: "template", publicName: "template", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@for (property of template().properties; track property) {\r\n <rw-form-element [property]=\"property\" [apiName]=\"apiName()\"></rw-form-element>\r\n}\r\n", styles: [""], dependencies: [{ kind: "component", type: RestWorldFormElementComponent, selector: "rw-form-element" }], viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }] });
|
|
2917
3125
|
}
|
|
2918
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
3126
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldInputTemplateComponent, decorators: [{
|
|
2919
3127
|
type: Component,
|
|
2920
|
-
args: [{ selector: 'rw-input-template', standalone: true, viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }], imports: [RestWorldFormElementComponent], template: "@for (property of template().properties; track property) {\n <rw-form-element [property]=\"property\" [apiName]=\"apiName()\"></rw-form-element>\n}\n" }]
|
|
3128
|
+
args: [{ selector: 'rw-input-template', standalone: true, viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }], imports: [RestWorldFormElementComponent], template: "@for (property of template().properties; track property) {\r\n <rw-form-element [property]=\"property\" [apiName]=\"apiName()\"></rw-form-element>\r\n}\r\n" }]
|
|
2921
3129
|
}] });
|
|
2922
3130
|
|
|
2923
3131
|
/**
|
|
@@ -2963,19 +3171,19 @@ class RestWorldFormComponent {
|
|
|
2963
3171
|
/**
|
|
2964
3172
|
* Determines whether to enable the delete button.
|
|
2965
3173
|
*/
|
|
2966
|
-
allowDelete = input(true);
|
|
3174
|
+
allowDelete = input(true, ...(ngDevMode ? [{ debugName: "allowDelete" }] : []));
|
|
2967
3175
|
/**
|
|
2968
3176
|
* Determines whether to enable the reload button.
|
|
2969
3177
|
*/
|
|
2970
|
-
allowReload = input(true);
|
|
3178
|
+
allowReload = input(true, ...(ngDevMode ? [{ debugName: "allowReload" }] : []));
|
|
2971
3179
|
/**
|
|
2972
3180
|
* Determines whether to enable the submit button.
|
|
2973
3181
|
*/
|
|
2974
|
-
allowSubmit = input(true);
|
|
3182
|
+
allowSubmit = input(true, ...(ngDevMode ? [{ debugName: "allowSubmit" }] : []));
|
|
2975
3183
|
/**
|
|
2976
3184
|
* The name of the API to use.
|
|
2977
3185
|
*/
|
|
2978
|
-
apiName = input.required();
|
|
3186
|
+
apiName = input.required(...(ngDevMode ? [{ debugName: "apiName" }] : []));
|
|
2979
3187
|
/**
|
|
2980
3188
|
* Determines whether the resource can be deleted.
|
|
2981
3189
|
*/
|
|
@@ -2986,7 +3194,7 @@ class RestWorldFormComponent {
|
|
|
2986
3194
|
this.formGroup() !== undefined &&
|
|
2987
3195
|
this.formGroup()?.value.id !== undefined &&
|
|
2988
3196
|
this.formGroup()?.value.timestamp !== undefined &&
|
|
2989
|
-
!this.isLoading());
|
|
3197
|
+
!this.isLoading(), ...(ngDevMode ? [{ debugName: "canDelete" }] : []));
|
|
2990
3198
|
/**
|
|
2991
3199
|
* Determines whether the form can be reloaded.
|
|
2992
3200
|
*/
|
|
@@ -2995,7 +3203,7 @@ class RestWorldFormComponent {
|
|
|
2995
3203
|
this.template().target !== undefined &&
|
|
2996
3204
|
this.template().title !== undefined &&
|
|
2997
3205
|
this.template().properties.some(p => p.name === "id" && p.value !== undefined && p.value !== null && p.value !== 0) &&
|
|
2998
|
-
!this.isLoading());
|
|
3206
|
+
!this.isLoading(), ...(ngDevMode ? [{ debugName: "canReload" }] : []));
|
|
2999
3207
|
/**
|
|
3000
3208
|
* Determines whether the form can be submitted.
|
|
3001
3209
|
*/
|
|
@@ -3003,33 +3211,32 @@ class RestWorldFormComponent {
|
|
|
3003
3211
|
this.template() !== undefined &&
|
|
3004
3212
|
this.template().target !== undefined &&
|
|
3005
3213
|
!this.isLoading() &&
|
|
3006
|
-
this.formGroup() !== undefined
|
|
3007
|
-
this.formGroup()?.valid);
|
|
3214
|
+
this.formGroup() !== undefined, ...(ngDevMode ? [{ debugName: "canSubmit" }] : []));
|
|
3008
3215
|
/**
|
|
3009
3216
|
* The form group that represents the form.
|
|
3010
3217
|
*/
|
|
3011
|
-
formGroup = computed(() => this._formService.createFormGroupFromTemplate(this.template()));
|
|
3012
|
-
isLoading = signal(false);
|
|
3218
|
+
formGroup = computed(() => this._formService.createFormGroupFromTemplate(this.template()), ...(ngDevMode ? [{ debugName: "formGroup" }] : []));
|
|
3219
|
+
isLoading = signal(false, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
|
|
3013
3220
|
/**
|
|
3014
3221
|
* The rel of the form.
|
|
3015
3222
|
*/
|
|
3016
|
-
rel = input.required();
|
|
3223
|
+
rel = input.required(...(ngDevMode ? [{ debugName: "rel" }] : []));
|
|
3017
3224
|
/**
|
|
3018
3225
|
* Determines whether to show the delete button.
|
|
3019
3226
|
*/
|
|
3020
|
-
showDelete = input(true);
|
|
3227
|
+
showDelete = input(true, ...(ngDevMode ? [{ debugName: "showDelete" }] : []));
|
|
3021
3228
|
/**
|
|
3022
3229
|
* Determines whether to show the reload button.
|
|
3023
3230
|
*/
|
|
3024
|
-
showReload = input(true);
|
|
3231
|
+
showReload = input(true, ...(ngDevMode ? [{ debugName: "showReload" }] : []));
|
|
3025
3232
|
/**
|
|
3026
3233
|
* Determines whether to show the submit button.
|
|
3027
3234
|
*/
|
|
3028
|
-
showSubmit = input(true);
|
|
3235
|
+
showSubmit = input(true, ...(ngDevMode ? [{ debugName: "showSubmit" }] : []));
|
|
3029
3236
|
/**
|
|
3030
3237
|
* The template used to render the form.
|
|
3031
3238
|
*/
|
|
3032
|
-
template = model.required();
|
|
3239
|
+
template = model.required(...(ngDevMode ? [{ debugName: "template" }] : []));
|
|
3033
3240
|
/**
|
|
3034
3241
|
* Emitted when the form value changes.
|
|
3035
3242
|
*/
|
|
@@ -3037,12 +3244,12 @@ class RestWorldFormComponent {
|
|
|
3037
3244
|
/**
|
|
3038
3245
|
* A reference to a template that can be used to render custom buttons for the form.
|
|
3039
3246
|
*/
|
|
3040
|
-
buttonsRef = contentChild('buttons');
|
|
3247
|
+
buttonsRef = contentChild('buttons', ...(ngDevMode ? [{ debugName: "buttonsRef" }] : []));
|
|
3041
3248
|
/**
|
|
3042
3249
|
* A reference to a template that can be used to render custom content inside the <form> element instead of the default form.
|
|
3043
3250
|
*/
|
|
3044
|
-
contentRef = contentChild('content');
|
|
3045
|
-
_client = computed(() => this._clients.getClient(this.apiName()));
|
|
3251
|
+
contentRef = contentChild('content', ...(ngDevMode ? [{ debugName: "contentRef" }] : []));
|
|
3252
|
+
_client = computed(() => this._clients.getClient(this.apiName()), ...(ngDevMode ? [{ debugName: "_client" }] : []));
|
|
3046
3253
|
_formValueChangesSubscription;
|
|
3047
3254
|
constructor(_clients, _confirmationService, _messageService, _formService, _elementRef, _problemService) {
|
|
3048
3255
|
this._clients = _clients;
|
|
@@ -3104,7 +3311,6 @@ class RestWorldFormComponent {
|
|
|
3104
3311
|
async submit() {
|
|
3105
3312
|
const formGroup = this.formGroup();
|
|
3106
3313
|
const template = this.template();
|
|
3107
|
-
const canSubmit = this.canSubmit();
|
|
3108
3314
|
if (formGroup !== undefined) {
|
|
3109
3315
|
formGroup.markAllAsTouched();
|
|
3110
3316
|
if (!formGroup.valid) {
|
|
@@ -3114,9 +3320,10 @@ class RestWorldFormComponent {
|
|
|
3114
3320
|
detail: 'Please correct the errors before submitting.',
|
|
3115
3321
|
});
|
|
3116
3322
|
ProblemService.scrollToFirstValidationError(this._elementRef.nativeElement);
|
|
3323
|
+
return;
|
|
3117
3324
|
}
|
|
3118
3325
|
}
|
|
3119
|
-
if (!canSubmit || formGroup === undefined || template === undefined)
|
|
3326
|
+
if (!this.canSubmit() || formGroup === undefined || template === undefined)
|
|
3120
3327
|
return;
|
|
3121
3328
|
this.isLoading.set(true);
|
|
3122
3329
|
try {
|
|
@@ -3146,10 +3353,10 @@ class RestWorldFormComponent {
|
|
|
3146
3353
|
}
|
|
3147
3354
|
this.isLoading.set(false);
|
|
3148
3355
|
}
|
|
3149
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
3150
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
3356
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldFormComponent, deps: [{ token: RestWorldClientCollection }, { token: i2$1.ConfirmationService }, { token: i2$1.MessageService }, { token: i1$1.FormService }, { token: i0.ElementRef }, { token: ProblemService }], target: i0.ɵɵFactoryTarget.Component });
|
|
3357
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RestWorldFormComponent, isStandalone: true, selector: "rw-form", inputs: { allowDelete: { classPropertyName: "allowDelete", publicName: "allowDelete", isSignal: true, isRequired: false, transformFunction: null }, allowReload: { classPropertyName: "allowReload", publicName: "allowReload", isSignal: true, isRequired: false, transformFunction: null }, allowSubmit: { classPropertyName: "allowSubmit", publicName: "allowSubmit", isSignal: true, isRequired: false, transformFunction: null }, apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, rel: { classPropertyName: "rel", publicName: "rel", isSignal: true, isRequired: true, transformFunction: null }, showDelete: { classPropertyName: "showDelete", publicName: "showDelete", isSignal: true, isRequired: false, transformFunction: null }, showReload: { classPropertyName: "showReload", publicName: "showReload", isSignal: true, isRequired: false, transformFunction: null }, showSubmit: { classPropertyName: "showSubmit", publicName: "showSubmit", isSignal: true, isRequired: false, transformFunction: null }, template: { classPropertyName: "template", publicName: "template", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { afterDelete: "afterDelete", afterSubmit: "afterSubmit", template: "templateChange", valueChanges: "valueChanges" }, queries: [{ propertyName: "buttonsRef", first: true, predicate: ["buttons"], descendants: true, isSignal: true }, { propertyName: "contentRef", first: true, predicate: ["content"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (formGroup() !== undefined && template() !== undefined) {\n <form [formGroup]=\"formGroup()\" (ngSubmit)=\"submit()\">\n <div class=\"blockable-container\">\n <div class=\"blockable-element\">\n <div class=\"grid field\">\n <div class=\"col-12 md:col-10 md:col-offset-2\">\n <rw-validation-errors [form]=\"formGroup()\"></rw-validation-errors>\n </div>\n </div>\n <ng-template #defaultContent>\n <rw-input-template [template]=\"template()\" [apiName]=\"apiName()\"></rw-input-template>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"contentRef() ?? defaultContent; context: { form: formGroup, template: template, apiName: apiName() }\"></ng-container>\n </div>\n @if (isLoading()) {\n <div class=\"blockable-overlay\">\n <p-progressSpinner></p-progressSpinner>\n </div>\n }\n </div>\n\n <div class=\"grid\">\n <div class=\"col\">\n <div class=\"flex justify-content-end w-full\">\n <ng-template #defaultButtons>\n <button pButton pRipple type=\"submit\" label=\"Save\" icon=\"far fa-save\" class=\"mx-2 p-button-success\"\n [disabled]=\"!allowSubmit()\"></button>\n <button pButton pRipple type=\"button\" label=\"Reload\" icon=\"fas fa-redo\" class=\"mx-2 p-button-info\"\n (click)=\"reload()\" [disabled]=\"!canReload()\"></button>\n <button pButton pRipple type=\"button\" label=\"Delete\" icon=\"far fa-trash-alt\"\n class=\"ml-2 p-button-danger\" (click)=\"showDeleteConfirmatioModal()\"\n [disabled]=\"!canDelete()\"></button>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"buttonsRef() ?? defaultButtons; context: { form: formGroup, template: template, apiName: apiName() }\"></ng-container>\n </div>\n </div>\n </div>\n </form>\n}\n", styles: [".blockable-container{display:grid;place-items:center;grid-template-areas:\"inner\"}.blockable-element{grid-area:inner;width:100%}.blockable-overlay{grid-area:inner;height:100%;width:100%;background-color:#0006;display:flex;align-items:center;justify-content:center;z-index:1}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: RestWorldValidationErrorsComponent, selector: "rw-validation-errors", inputs: ["form", "property"] }, { kind: "component", type: RestWorldInputTemplateComponent, selector: "rw-input-template", inputs: ["apiName", "template"] }, { kind: "ngmodule", type: ProgressSpinnerModule }, { kind: "component", type: i6.ProgressSpinner, selector: "p-progressSpinner, p-progress-spinner, p-progressspinner", inputs: ["styleClass", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1$3.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "fluid", "label", "icon", "buttonProps"] }, { kind: "ngmodule", type: RippleModule }, { kind: "directive", type: i8.Ripple, selector: "[pRipple]" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
|
|
3151
3358
|
}
|
|
3152
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
3359
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldFormComponent, decorators: [{
|
|
3153
3360
|
type: Component,
|
|
3154
3361
|
args: [{ selector: 'rw-form', standalone: true, imports: [ReactiveFormsModule, RestWorldValidationErrorsComponent, RestWorldInputTemplateComponent, ProgressSpinnerModule, ButtonModule, RippleModule, NgTemplateOutlet], template: "@if (formGroup() !== undefined && template() !== undefined) {\n <form [formGroup]=\"formGroup()\" (ngSubmit)=\"submit()\">\n <div class=\"blockable-container\">\n <div class=\"blockable-element\">\n <div class=\"grid field\">\n <div class=\"col-12 md:col-10 md:col-offset-2\">\n <rw-validation-errors [form]=\"formGroup()\"></rw-validation-errors>\n </div>\n </div>\n <ng-template #defaultContent>\n <rw-input-template [template]=\"template()\" [apiName]=\"apiName()\"></rw-input-template>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"contentRef() ?? defaultContent; context: { form: formGroup, template: template, apiName: apiName() }\"></ng-container>\n </div>\n @if (isLoading()) {\n <div class=\"blockable-overlay\">\n <p-progressSpinner></p-progressSpinner>\n </div>\n }\n </div>\n\n <div class=\"grid\">\n <div class=\"col\">\n <div class=\"flex justify-content-end w-full\">\n <ng-template #defaultButtons>\n <button pButton pRipple type=\"submit\" label=\"Save\" icon=\"far fa-save\" class=\"mx-2 p-button-success\"\n [disabled]=\"!allowSubmit()\"></button>\n <button pButton pRipple type=\"button\" label=\"Reload\" icon=\"fas fa-redo\" class=\"mx-2 p-button-info\"\n (click)=\"reload()\" [disabled]=\"!canReload()\"></button>\n <button pButton pRipple type=\"button\" label=\"Delete\" icon=\"far fa-trash-alt\"\n class=\"ml-2 p-button-danger\" (click)=\"showDeleteConfirmatioModal()\"\n [disabled]=\"!canDelete()\"></button>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"buttonsRef() ?? defaultButtons; context: { form: formGroup, template: template, apiName: apiName() }\"></ng-container>\n </div>\n </div>\n </div>\n </form>\n}\n", styles: [".blockable-container{display:grid;place-items:center;grid-template-areas:\"inner\"}.blockable-element{grid-area:inner;width:100%}.blockable-overlay{grid-area:inner;height:100%;width:100%;background-color:#0006;display:flex;align-items:center;justify-content:center;z-index:1}\n"] }]
|
|
3155
3362
|
}], ctorParameters: () => [{ type: RestWorldClientCollection }, { type: i2$1.ConfirmationService }, { type: i2$1.MessageService }, { type: i1$1.FormService }, { type: i0.ElementRef }, { type: ProblemService }] });
|
|
@@ -3165,17 +3372,17 @@ class RestWorldIdNavigationComponent {
|
|
|
3165
3372
|
_messageService;
|
|
3166
3373
|
_router;
|
|
3167
3374
|
_route;
|
|
3168
|
-
apiName = input.required();
|
|
3169
|
-
rel = input.required();
|
|
3375
|
+
apiName = input.required(...(ngDevMode ? [{ debugName: "apiName" }] : []));
|
|
3376
|
+
rel = input.required(...(ngDevMode ? [{ debugName: "rel" }] : []));
|
|
3170
3377
|
/**
|
|
3171
3378
|
* A prefix to use for the URL that is returned from the backend.
|
|
3172
3379
|
* If none is provided, a relative navigation will be performed which means that the last part of the current URL is replaced with the one from the backend.
|
|
3173
3380
|
*/
|
|
3174
|
-
urlPrefix = input();
|
|
3381
|
+
urlPrefix = input(...(ngDevMode ? [undefined, { debugName: "urlPrefix" }] : []));
|
|
3175
3382
|
idNavigationForm = new FormGroup({
|
|
3176
3383
|
id: new FormControl(null, Validators.compose([Validators.min(1), Validators.max(Number.MAX_SAFE_INTEGER)]))
|
|
3177
3384
|
});
|
|
3178
|
-
_client = computed(() => this._clients.getClient(this.apiName()));
|
|
3385
|
+
_client = computed(() => this._clients.getClient(this.apiName()), ...(ngDevMode ? [{ debugName: "_client" }] : []));
|
|
3179
3386
|
constructor(_clients, _messageService, _router, _route) {
|
|
3180
3387
|
this._clients = _clients;
|
|
3181
3388
|
this._messageService = _messageService;
|
|
@@ -3209,10 +3416,10 @@ class RestWorldIdNavigationComponent {
|
|
|
3209
3416
|
await this._router.navigate(["..", resource._links.self[0].href], { relativeTo: this._route });
|
|
3210
3417
|
this.idNavigationForm.reset();
|
|
3211
3418
|
}
|
|
3212
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
3213
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "
|
|
3419
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldIdNavigationComponent, deps: [{ token: RestWorldClientCollection }, { token: i2$1.MessageService }, { token: i3$4.Router }, { token: i3$4.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
|
|
3420
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.1", type: RestWorldIdNavigationComponent, isStandalone: true, selector: "rw-id-navigation", inputs: { apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, rel: { classPropertyName: "rel", publicName: "rel", isSignal: true, isRequired: true, transformFunction: null }, urlPrefix: { classPropertyName: "urlPrefix", publicName: "urlPrefix", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<form [formGroup]=\"idNavigationForm\" (ngSubmit)=\"navigateById()\" class=\"mr-3\">\n <div class=\"p-inputgroup\">\n <p-inputNumber formControlName=\"id\" placeholder=\"Navigate by ID\"></p-inputNumber>\n <button type=\"submit\" pButton pRipple icon=\"fa-solid fa-arrow-right\"></button>\n </div>\n</form>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: InputNumberModule }, { kind: "component", type: i1$5.InputNumber, selector: "p-inputNumber, p-inputnumber, p-input-number", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "placeholder", "tabindex", "title", "ariaLabelledBy", "ariaDescribedBy", "ariaLabel", "ariaRequired", "autocomplete", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "autofocus"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1$3.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "fluid", "label", "icon", "buttonProps"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
|
|
3214
3421
|
}
|
|
3215
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
3422
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldIdNavigationComponent, decorators: [{
|
|
3216
3423
|
type: Component,
|
|
3217
3424
|
args: [{ selector: 'rw-id-navigation', standalone: true, imports: [InputNumberModule, ButtonModule, ReactiveFormsModule], template: "<form [formGroup]=\"idNavigationForm\" (ngSubmit)=\"navigateById()\" class=\"mr-3\">\n <div class=\"p-inputgroup\">\n <p-inputNumber formControlName=\"id\" placeholder=\"Navigate by ID\"></p-inputNumber>\n <button type=\"submit\" pButton pRipple icon=\"fa-solid fa-arrow-right\"></button>\n </div>\n</form>\n" }]
|
|
3218
3425
|
}], ctorParameters: () => [{ type: RestWorldClientCollection }, { type: i2$1.MessageService }, { type: i3$4.Router }, { type: i3$4.ActivatedRoute }] });
|
|
@@ -3228,7 +3435,7 @@ class RestWorldMenuButtonComponent {
|
|
|
3228
3435
|
/**
|
|
3229
3436
|
* An array of menu items to be displayed.
|
|
3230
3437
|
*/
|
|
3231
|
-
items = input.required();
|
|
3438
|
+
items = input.required(...(ngDevMode ? [{ debugName: "items" }] : []));
|
|
3232
3439
|
constructor(_router) {
|
|
3233
3440
|
this._router = _router;
|
|
3234
3441
|
}
|
|
@@ -3263,10 +3470,10 @@ class RestWorldMenuButtonComponent {
|
|
|
3263
3470
|
item.command({ item: item });
|
|
3264
3471
|
}
|
|
3265
3472
|
}
|
|
3266
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
3267
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
3473
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldMenuButtonComponent, deps: [{ token: i3$4.Router }], target: i0.ɵɵFactoryTarget.Component });
|
|
3474
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RestWorldMenuButtonComponent, isStandalone: true, selector: "rw-menu-button", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@for (item of items(); track item; let i = $index) {\n @if (!item.items) {\n <p-button\n [label]=\"item.label!\"\n [icon]=\"item.icon!\"\n [disabled]=\"item.disabled!\"\n [style]=\"item.style\"\n [styleClass]=\"item.styleClass!\"\n [pTooltip]=\"item.tooltip!\"\n [tooltipPosition]=\"item.tooltipPosition!\"\n (onClick)=\"onClick($event, item)\"\n [class.ml-2]=\"i > 0\">\n </p-button>\n } \n @else {\n <p-splitButton\n [label]=\"item.label!\"\n [icon]=\"item.icon!\"\n [model]=\"item.items\"\n appendTo=\"body\"\n [disabled]=\"item.disabled!\"\n [style]=\"item.style\"\n [styleClass]=\"item.styleClass!\"\n [pTooltip]=\"item.tooltip!\"\n [tooltipPosition]=\"item.tooltipPosition!\"\n (onClick)=\"onClick($event, item)\"\n [class.ml-2]=\"i > 0\">\n </p-splitButton>\n }\n}\n", styles: [":host{display:flex;justify-content:flex-end}\n"], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$3.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "buttonProps", "autofocus", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i3.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo"] }, { kind: "ngmodule", type: SplitButtonModule }, { kind: "component", type: i4$1.SplitButton, selector: "p-splitbutton, p-splitButton, p-split-button", inputs: ["model", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "icon", "iconPos", "label", "tooltip", "tooltipOptions", "styleClass", "menuStyle", "menuStyleClass", "dropdownIcon", "appendTo", "dir", "expandAriaLabel", "showTransitionOptions", "hideTransitionOptions", "buttonProps", "menuButtonProps", "autofocus", "disabled", "tabindex", "menuButtonDisabled", "buttonDisabled"], outputs: ["onClick", "onMenuHide", "onMenuShow", "onDropdownClick"] }] });
|
|
3268
3475
|
}
|
|
3269
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
3476
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldMenuButtonComponent, decorators: [{
|
|
3270
3477
|
type: Component,
|
|
3271
3478
|
args: [{ selector: 'rw-menu-button', standalone: true, imports: [ButtonModule, TooltipModule, SplitButtonModule], template: "@for (item of items(); track item; let i = $index) {\n @if (!item.items) {\n <p-button\n [label]=\"item.label!\"\n [icon]=\"item.icon!\"\n [disabled]=\"item.disabled!\"\n [style]=\"item.style\"\n [styleClass]=\"item.styleClass!\"\n [pTooltip]=\"item.tooltip!\"\n [tooltipPosition]=\"item.tooltipPosition!\"\n (onClick)=\"onClick($event, item)\"\n [class.ml-2]=\"i > 0\">\n </p-button>\n } \n @else {\n <p-splitButton\n [label]=\"item.label!\"\n [icon]=\"item.icon!\"\n [model]=\"item.items\"\n appendTo=\"body\"\n [disabled]=\"item.disabled!\"\n [style]=\"item.style\"\n [styleClass]=\"item.styleClass!\"\n [pTooltip]=\"item.tooltip!\"\n [tooltipPosition]=\"item.tooltipPosition!\"\n (onClick)=\"onClick($event, item)\"\n [class.ml-2]=\"i > 0\">\n </p-splitButton>\n }\n}\n", styles: [":host{display:flex;justify-content:flex-end}\n"] }]
|
|
3272
3479
|
}], ctorParameters: () => [{ type: i3$4.Router }] });
|
|
@@ -3700,10 +3907,10 @@ class ODataService {
|
|
|
3700
3907
|
}
|
|
3701
3908
|
return property.type;
|
|
3702
3909
|
}
|
|
3703
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
3704
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
3910
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ODataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
3911
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ODataService, providedIn: 'root' });
|
|
3705
3912
|
}
|
|
3706
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
3913
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ODataService, decorators: [{
|
|
3707
3914
|
type: Injectable,
|
|
3708
3915
|
args: [{
|
|
3709
3916
|
providedIn: 'root',
|
|
@@ -3720,24 +3927,24 @@ class RestWorldTableColumnFilterElementComponent {
|
|
|
3720
3927
|
* The filter constraint to update when the value changes.
|
|
3721
3928
|
* This is coming from the $context of the #filter template
|
|
3722
3929
|
*/
|
|
3723
|
-
filterConstraint = input.required();
|
|
3930
|
+
filterConstraint = input.required(...(ngDevMode ? [{ debugName: "filterConstraint" }] : []));
|
|
3724
3931
|
/**
|
|
3725
3932
|
* The HAL-Forms property to filter by.
|
|
3726
3933
|
* This is normally the column.
|
|
3727
3934
|
*/
|
|
3728
|
-
property = input.required();
|
|
3935
|
+
property = input.required(...(ngDevMode ? [{ debugName: "property" }] : []));
|
|
3729
3936
|
/**
|
|
3730
3937
|
* The name of the API to use when generating dropdowns.
|
|
3731
3938
|
*/
|
|
3732
|
-
apiName = input.required();
|
|
3939
|
+
apiName = input.required(...(ngDevMode ? [{ debugName: "apiName" }] : []));
|
|
3733
3940
|
/**
|
|
3734
3941
|
* The initial value of the filter.
|
|
3735
3942
|
*/
|
|
3736
|
-
value = input.required();
|
|
3737
|
-
form = computed(() => this._formService.createFormGroupFromTemplate(this.template()));
|
|
3943
|
+
value = input.required(...(ngDevMode ? [{ debugName: "value" }] : []));
|
|
3944
|
+
form = computed(() => this._formService.createFormGroupFromTemplate(this.template()), ...(ngDevMode ? [{ debugName: "form" }] : []));
|
|
3738
3945
|
template = computed(() => new Template({
|
|
3739
3946
|
properties: [this.property()],
|
|
3740
|
-
}));
|
|
3947
|
+
}), ...(ngDevMode ? [{ debugName: "template" }] : []));
|
|
3741
3948
|
_formValueChangesSubscription;
|
|
3742
3949
|
constructor(_formService) {
|
|
3743
3950
|
this._formService = _formService;
|
|
@@ -3757,12 +3964,12 @@ class RestWorldTableColumnFilterElementComponent {
|
|
|
3757
3964
|
ngOnDestroy() {
|
|
3758
3965
|
this._formValueChangesSubscription?.unsubscribe();
|
|
3759
3966
|
}
|
|
3760
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
3761
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "
|
|
3967
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldTableColumnFilterElementComponent, deps: [{ token: i1$1.FormService }], target: i0.ɵɵFactoryTarget.Component });
|
|
3968
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.1", type: RestWorldTableColumnFilterElementComponent, isStandalone: true, selector: "rw-table-column-filter-element", inputs: { filterConstraint: { classPropertyName: "filterConstraint", publicName: "filterConstraint", isSignal: true, isRequired: true, transformFunction: null }, property: { classPropertyName: "property", publicName: "property", isSignal: true, isRequired: true, transformFunction: null }, apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<form [formGroup]=\"form()\">\r\n <rw-input [property]=\"property()\" [apiName]=\"apiName()\"></rw-input>\r\n</form>\r\n", styles: [""], dependencies: [{ kind: "component", type: RestWorldInputComponent, selector: "rw-input" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] });
|
|
3762
3969
|
}
|
|
3763
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
3970
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldTableColumnFilterElementComponent, decorators: [{
|
|
3764
3971
|
type: Component,
|
|
3765
|
-
args: [{ selector: 'rw-table-column-filter-element', imports: [RestWorldInputComponent, ReactiveFormsModule], template: "<form [formGroup]=\"form()\">\n <rw-input [property]=\"property()\" [apiName]=\"apiName()\"></rw-input>\n</form>\n" }]
|
|
3972
|
+
args: [{ selector: 'rw-table-column-filter-element', imports: [RestWorldInputComponent, ReactiveFormsModule], template: "<form [formGroup]=\"form()\">\r\n <rw-input [property]=\"property()\" [apiName]=\"apiName()\"></rw-input>\r\n</form>\r\n" }]
|
|
3766
3973
|
}], ctorParameters: () => [{ type: i1$1.FormService }] });
|
|
3767
3974
|
|
|
3768
3975
|
/**
|
|
@@ -3807,7 +4014,7 @@ class RestWorldTableComponent {
|
|
|
3807
4014
|
* The name of the api.
|
|
3808
4015
|
* For the editing capability, you must also set the editTemplate and the formArray.
|
|
3809
4016
|
*/
|
|
3810
|
-
apiName = input.required();
|
|
4017
|
+
apiName = input.required(...(ngDevMode ? [{ debugName: "apiName" }] : []));
|
|
3811
4018
|
/**
|
|
3812
4019
|
* A function that returns the style class for a cell.
|
|
3813
4020
|
* @param row The row for which to return the style class.
|
|
@@ -3816,50 +4023,50 @@ class RestWorldTableComponent {
|
|
|
3816
4023
|
* @param columnIndex The index of the column.
|
|
3817
4024
|
* @returns The style class for the cell.
|
|
3818
4025
|
*/
|
|
3819
|
-
cellStyleClass = input(() => "");
|
|
3820
|
-
cellStyleClasses = computed(() => this.rows().map((r, ri) => Object.fromEntries(this.columns().map((c, ci) => [c.name, this.cellStyleClass()(r, c, ri, ci)]))));
|
|
3821
|
-
columns = computed(() => this.searchTemplate()?.properties.filter(p => p.type !== PropertyType.Hidden) ?? []);
|
|
3822
|
-
contextMenu = viewChild("contextMenu");
|
|
3823
|
-
contextMenuItems = signal([]);
|
|
4026
|
+
cellStyleClass = input(() => "", ...(ngDevMode ? [{ debugName: "cellStyleClass" }] : []));
|
|
4027
|
+
cellStyleClasses = computed(() => this.rows().map((r, ri) => Object.fromEntries(this.columns().map((c, ci) => [c.name, this.cellStyleClass()(r, c, ri, ci)]))), ...(ngDevMode ? [{ debugName: "cellStyleClasses" }] : []));
|
|
4028
|
+
columns = computed(() => this.searchTemplate()?.properties.filter(p => p.type !== PropertyType.Hidden) ?? [], ...(ngDevMode ? [{ debugName: "columns" }] : []));
|
|
4029
|
+
contextMenu = viewChild("contextMenu", ...(ngDevMode ? [{ debugName: "contextMenu" }] : []));
|
|
4030
|
+
contextMenuItems = signal([], ...(ngDevMode ? [{ debugName: "contextMenuItems" }] : []));
|
|
3824
4031
|
dateFormat = new Date(3333, 10, 22) // months start at 0 in JS
|
|
3825
4032
|
.toLocaleDateString()
|
|
3826
4033
|
.replace("22", "dd")
|
|
3827
4034
|
.replace("11", "MM")
|
|
3828
4035
|
.replace("3333", "yy")
|
|
3829
4036
|
.replace("33", "y");
|
|
3830
|
-
editProperties = computed(() => this.editTemplate()?.propertiesRecord ?? {});
|
|
4037
|
+
editProperties = computed(() => this.editTemplate()?.propertiesRecord ?? {}, ...(ngDevMode ? [{ debugName: "editProperties" }] : []));
|
|
3831
4038
|
/**
|
|
3832
4039
|
* The template that is used to edit the items.
|
|
3833
4040
|
* Bind this to the template that is used to edit the items.
|
|
3834
4041
|
* Normally this is returned from the backend as part of the hal-forms resource from a list endpoint.
|
|
3835
4042
|
* For the editing capability, you must also set the apiName and the formArray.
|
|
3836
4043
|
*/
|
|
3837
|
-
editTemplate = input();
|
|
4044
|
+
editTemplate = input(...(ngDevMode ? [undefined, { debugName: "editTemplate" }] : []));
|
|
3838
4045
|
filters = computed(() => {
|
|
3839
4046
|
const filter = this.oDataParameters().$filter;
|
|
3840
4047
|
const properties = this.searchTemplate()?.propertiesRecord;
|
|
3841
4048
|
if (filter === null || filter === undefined || typeof filter !== "string" || properties === undefined)
|
|
3842
4049
|
return {};
|
|
3843
4050
|
return ODataService.createFilterMetadataFromODataFilter(filter, properties);
|
|
3844
|
-
});
|
|
4051
|
+
}, ...(ngDevMode ? [{ debugName: "filters" }] : []));
|
|
3845
4052
|
/**
|
|
3846
4053
|
* The form array that contains the form groups for the items.
|
|
3847
4054
|
* Bind this to the form array that contains the form groups for the items.
|
|
3848
4055
|
* Each entry in the array represents one row in the currently displayed page of the table.
|
|
3849
4056
|
* For the editing capability, you must also set the apiName and the editTemplate.
|
|
3850
4057
|
*/
|
|
3851
|
-
formArray = computed(() => this._controlContainer?.control);
|
|
4058
|
+
formArray = computed(() => this._controlContainer?.control, ...(ngDevMode ? [{ debugName: "formArray" }] : []));
|
|
3852
4059
|
/**
|
|
3853
4060
|
* An optional menu that is displayed at the top right of the table.
|
|
3854
4061
|
* @see RestWorldMenuButtonComponent
|
|
3855
4062
|
*/
|
|
3856
|
-
headerMenu = input([]);
|
|
3857
|
-
isEditable = computed(() => this.editTemplate() !== undefined && this.formArray() !== undefined && this.apiName() !== undefined);
|
|
4063
|
+
headerMenu = input([], ...(ngDevMode ? [{ debugName: "headerMenu" }] : []));
|
|
4064
|
+
isEditable = computed(() => this.editTemplate() !== undefined && this.formArray() !== undefined && this.apiName() !== undefined, ...(ngDevMode ? [{ debugName: "isEditable" }] : []));
|
|
3858
4065
|
/**
|
|
3859
4066
|
* Indicates whether the table is currently loading.
|
|
3860
4067
|
* Set this to true while loading new items from the backend when reacting to the `onFilterOrSortChanged` event.
|
|
3861
4068
|
*/
|
|
3862
|
-
isLoading = input(false);
|
|
4069
|
+
isLoading = input(false, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
|
|
3863
4070
|
/**
|
|
3864
4071
|
* Indicates whether the table is lazy loaded.
|
|
3865
4072
|
* If set to true, sorting and filtering needs to be handled by the `load` event.
|
|
@@ -3867,7 +4074,7 @@ class RestWorldTableComponent {
|
|
|
3867
4074
|
* The default is `true`.
|
|
3868
4075
|
* @see load
|
|
3869
4076
|
*/
|
|
3870
|
-
lazy = input(true);
|
|
4077
|
+
lazy = input(true, ...(ngDevMode ? [{ debugName: "lazy" }] : []));
|
|
3871
4078
|
/**
|
|
3872
4079
|
* Indicates whether the table has a paginator.
|
|
3873
4080
|
* If set to true, the table will display a paginator at the bottom.
|
|
@@ -3876,7 +4083,7 @@ class RestWorldTableComponent {
|
|
|
3876
4083
|
* In order to customize the number of rows per page, you can set the `rowsPerPageOptions` property.
|
|
3877
4084
|
* @see rowsPerPageOptions
|
|
3878
4085
|
*/
|
|
3879
|
-
paginator = input(true);
|
|
4086
|
+
paginator = input(true, ...(ngDevMode ? [{ debugName: "paginator" }] : []));
|
|
3880
4087
|
multiSortMeta = computed(() => {
|
|
3881
4088
|
const orderBy = this.oDataParameters().$orderby;
|
|
3882
4089
|
if (orderBy === null || orderBy === undefined || typeof orderBy !== "string")
|
|
@@ -3890,13 +4097,13 @@ class RestWorldTableComponent {
|
|
|
3890
4097
|
const orderAsNumber = order?.toLowerCase() === "desc" ? -1 : 1;
|
|
3891
4098
|
return { field: field, order: orderAsNumber };
|
|
3892
4099
|
});
|
|
3893
|
-
});
|
|
3894
|
-
oDataParameters = model({});
|
|
3895
|
-
reflectParametersInUrl = input(true);
|
|
4100
|
+
}, ...(ngDevMode ? [{ debugName: "multiSortMeta" }] : []));
|
|
4101
|
+
oDataParameters = model({}, ...(ngDevMode ? [{ debugName: "oDataParameters" }] : []));
|
|
4102
|
+
reflectParametersInUrl = input(true, ...(ngDevMode ? [{ debugName: "reflectParametersInUrl" }] : []));
|
|
3896
4103
|
/**
|
|
3897
4104
|
* Indicates whether the table rows are highlighted when the mouse hovers over them.
|
|
3898
4105
|
*/
|
|
3899
|
-
rowHover = input(false);
|
|
4106
|
+
rowHover = input(false, ...(ngDevMode ? [{ debugName: "rowHover" }] : []));
|
|
3900
4107
|
/**
|
|
3901
4108
|
* A function that returns the menu for a row.
|
|
3902
4109
|
* Based on the openedByRightClick parameter, the function can return different menus.
|
|
@@ -3908,80 +4115,80 @@ class RestWorldTableComponent {
|
|
|
3908
4115
|
* @see showRowMenuAsColumn
|
|
3909
4116
|
* @see showRowMenuOnRightClick
|
|
3910
4117
|
*/
|
|
3911
|
-
rowMenu = input(() => []);
|
|
4118
|
+
rowMenu = input(() => [], ...(ngDevMode ? [{ debugName: "rowMenu" }] : []));
|
|
3912
4119
|
rowMenus = computed(() => {
|
|
3913
4120
|
return this.showRowMenuAsColumn() ? this.rows().map(r => this.rowMenu()(r, false)) : [];
|
|
3914
|
-
});
|
|
4121
|
+
}, ...(ngDevMode ? [{ debugName: "rowMenus" }] : []));
|
|
3915
4122
|
/**
|
|
3916
4123
|
* A function that returns the style class for a row.
|
|
3917
4124
|
* @param row The row for which to return the style class.
|
|
3918
4125
|
* @param rowIndex The index of the row on the currently displayed page.
|
|
3919
4126
|
* @returns The style class for the row.
|
|
3920
4127
|
*/
|
|
3921
|
-
rowStyleClass = input(() => "");
|
|
3922
|
-
rowStyleClasses = computed(() => this.rows().map((r, i) => this.rowStyleClass()(r, i)));
|
|
4128
|
+
rowStyleClass = input(() => "", ...(ngDevMode ? [{ debugName: "rowStyleClass" }] : []));
|
|
4129
|
+
rowStyleClasses = computed(() => this.rows().map((r, i) => this.rowStyleClass()(r, i)), ...(ngDevMode ? [{ debugName: "rowStyleClasses" }] : []));
|
|
3923
4130
|
/**
|
|
3924
4131
|
* The items that are displayed as table rows.
|
|
3925
4132
|
* Bind this to the items that are displayed as table rows.
|
|
3926
4133
|
* Normally this is returned from the backend as part of the hal-forms resource from a list endpoint.
|
|
3927
4134
|
*/
|
|
3928
|
-
rows = input.required();
|
|
3929
|
-
rowsBeforeCurrentPage = computed(() => this.oDataParameters().$skip ?? 0);
|
|
4135
|
+
rows = input.required(...(ngDevMode ? [{ debugName: "rows" }] : []));
|
|
4136
|
+
rowsBeforeCurrentPage = computed(() => this.oDataParameters().$skip ?? 0, ...(ngDevMode ? [{ debugName: "rowsBeforeCurrentPage" }] : []));
|
|
3930
4137
|
/**
|
|
3931
4138
|
* The number of rows per page.
|
|
3932
4139
|
* The default is the first element of rowsPerPageOptions.
|
|
3933
4140
|
*/
|
|
3934
|
-
rowsPerPage = computed(() => this.oDataParameters().$top ?? this.rowsPerPageOptions()[0]);
|
|
4141
|
+
rowsPerPage = computed(() => this.oDataParameters().$top ?? this.rowsPerPageOptions()[0], ...(ngDevMode ? [{ debugName: "rowsPerPage" }] : []));
|
|
3935
4142
|
/**
|
|
3936
4143
|
* The possible values for the number of rows per page.
|
|
3937
4144
|
* The default is [10, 25, 50].
|
|
3938
4145
|
*/
|
|
3939
|
-
rowsPerPageOptions = input([10, 25, 50]);
|
|
4146
|
+
rowsPerPageOptions = input([10, 25, 50], ...(ngDevMode ? [{ debugName: "rowsPerPageOptions" }] : []));
|
|
3940
4147
|
/**
|
|
3941
4148
|
* The height of the scrollable table.
|
|
3942
4149
|
* The default is "flex".
|
|
3943
4150
|
*/
|
|
3944
|
-
scrollHeight = input("flex");
|
|
4151
|
+
scrollHeight = input("flex", ...(ngDevMode ? [{ debugName: "scrollHeight" }] : []));
|
|
3945
4152
|
/**
|
|
3946
4153
|
* Indicates whether the table is scrollable.
|
|
3947
4154
|
* The default is `true`.
|
|
3948
4155
|
*/
|
|
3949
|
-
scrollable = input(true);
|
|
4156
|
+
scrollable = input(true, ...(ngDevMode ? [{ debugName: "scrollable" }] : []));
|
|
3950
4157
|
/**
|
|
3951
4158
|
* The template that is used to display the table columns and to filter and sort the items.
|
|
3952
4159
|
* Bind this to the template that is used to display the table columns and to filter and sort the items.
|
|
3953
4160
|
* Normally this is returned from the backend as part of the hal-forms resource from a list endpoint.
|
|
3954
4161
|
*/
|
|
3955
|
-
searchTemplate = input.required();
|
|
4162
|
+
searchTemplate = input.required(...(ngDevMode ? [{ debugName: "searchTemplate" }] : []));
|
|
3956
4163
|
/**
|
|
3957
4164
|
* The currently selected rows.
|
|
3958
4165
|
*/
|
|
3959
|
-
selectedRows = model([]);
|
|
4166
|
+
selectedRows = model([], ...(ngDevMode ? [{ debugName: "selectedRows" }] : []));
|
|
3960
4167
|
/**
|
|
3961
4168
|
* The mode how rows can be selected.
|
|
3962
4169
|
* The default is `null` which means rows cannot be selected.
|
|
3963
4170
|
*/
|
|
3964
|
-
selectionMode = input(null);
|
|
3965
|
-
showMenuColumn = computed(() => this.headerMenu().length > 0 || (this.showRowMenuAsColumn() && this.rowMenus().some(m => m.length > 0)));
|
|
4171
|
+
selectionMode = input(null, ...(ngDevMode ? [{ debugName: "selectionMode" }] : []));
|
|
4172
|
+
showMenuColumn = computed(() => this.headerMenu().length > 0 || (this.showRowMenuAsColumn() && this.rowMenus().some(m => m.length > 0)), ...(ngDevMode ? [{ debugName: "showMenuColumn" }] : []));
|
|
3966
4173
|
/**
|
|
3967
4174
|
* Indicates whether the row menu is displayed as a column to the right of the table.
|
|
3968
4175
|
*/
|
|
3969
|
-
showRowMenuAsColumn = input(true);
|
|
4176
|
+
showRowMenuAsColumn = input(true, ...(ngDevMode ? [{ debugName: "showRowMenuAsColumn" }] : []));
|
|
3970
4177
|
/**
|
|
3971
4178
|
* Indicates whether the row menu is displayed as a context menu when the user right clicks on a row.
|
|
3972
4179
|
*/
|
|
3973
|
-
showRowMenuOnRightClick = input(true);
|
|
4180
|
+
showRowMenuOnRightClick = input(true, ...(ngDevMode ? [{ debugName: "showRowMenuOnRightClick" }] : []));
|
|
3974
4181
|
/**
|
|
3975
4182
|
* The style class for the table.
|
|
3976
4183
|
* The default is "".
|
|
3977
4184
|
*/
|
|
3978
|
-
styleClass = input("");
|
|
4185
|
+
styleClass = input("", ...(ngDevMode ? [{ debugName: "styleClass" }] : []));
|
|
3979
4186
|
/**
|
|
3980
4187
|
* The inline style for the table.
|
|
3981
4188
|
*/
|
|
3982
|
-
tableStyle = input();
|
|
3983
|
-
totalRecords = input(0);
|
|
3984
|
-
urlParameterPrefix = input("");
|
|
4189
|
+
tableStyle = input(...(ngDevMode ? [undefined, { debugName: "tableStyle" }] : []));
|
|
4190
|
+
totalRecords = input(0, ...(ngDevMode ? [{ debugName: "totalRecords" }] : []));
|
|
4191
|
+
urlParameterPrefix = input("", ...(ngDevMode ? [{ debugName: "urlParameterPrefix" }] : []));
|
|
3985
4192
|
// private _formArray?: FormArray<FormGroup<{ [K in keyof TListItem]: AbstractControl<unknown> }>>;
|
|
3986
4193
|
_filterMatchModeOptions;
|
|
3987
4194
|
timeFormat = new Date(1, 1, 1, 22, 33, 44)
|
|
@@ -4134,20 +4341,20 @@ class RestWorldTableComponent {
|
|
|
4134
4341
|
prefixObjectProperties(obj, prefix) {
|
|
4135
4342
|
return Object.fromEntries(Object.entries(obj).map(([key, value]) => [`${prefix}${key}`, value]));
|
|
4136
4343
|
}
|
|
4137
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
4138
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.6", type: RestWorldTableComponent, isStandalone: true, selector: "rw-table", inputs: { apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, cellStyleClass: { classPropertyName: "cellStyleClass", publicName: "cellStyleClass", isSignal: true, isRequired: false, transformFunction: null }, editTemplate: { classPropertyName: "editTemplate", publicName: "editTemplate", isSignal: true, isRequired: false, transformFunction: null }, headerMenu: { classPropertyName: "headerMenu", publicName: "headerMenu", isSignal: true, isRequired: false, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null }, lazy: { classPropertyName: "lazy", publicName: "lazy", isSignal: true, isRequired: false, transformFunction: null }, paginator: { classPropertyName: "paginator", publicName: "paginator", isSignal: true, isRequired: false, transformFunction: null }, oDataParameters: { classPropertyName: "oDataParameters", publicName: "oDataParameters", isSignal: true, isRequired: false, transformFunction: null }, reflectParametersInUrl: { classPropertyName: "reflectParametersInUrl", publicName: "reflectParametersInUrl", isSignal: true, isRequired: false, transformFunction: null }, rowHover: { classPropertyName: "rowHover", publicName: "rowHover", isSignal: true, isRequired: false, transformFunction: null }, rowMenu: { classPropertyName: "rowMenu", publicName: "rowMenu", isSignal: true, isRequired: false, transformFunction: null }, rowStyleClass: { classPropertyName: "rowStyleClass", publicName: "rowStyleClass", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: true, transformFunction: null }, rowsPerPageOptions: { classPropertyName: "rowsPerPageOptions", publicName: "rowsPerPageOptions", isSignal: true, isRequired: false, transformFunction: null }, scrollHeight: { classPropertyName: "scrollHeight", publicName: "scrollHeight", isSignal: true, isRequired: false, transformFunction: null }, scrollable: { classPropertyName: "scrollable", publicName: "scrollable", isSignal: true, isRequired: false, transformFunction: null }, searchTemplate: { classPropertyName: "searchTemplate", publicName: "searchTemplate", isSignal: true, isRequired: true, transformFunction: null }, selectedRows: { classPropertyName: "selectedRows", publicName: "selectedRows", isSignal: true, isRequired: false, transformFunction: null }, selectionMode: { classPropertyName: "selectionMode", publicName: "selectionMode", isSignal: true, isRequired: false, transformFunction: null }, showRowMenuAsColumn: { classPropertyName: "showRowMenuAsColumn", publicName: "showRowMenuAsColumn", isSignal: true, isRequired: false, transformFunction: null }, showRowMenuOnRightClick: { classPropertyName: "showRowMenuOnRightClick", publicName: "showRowMenuOnRightClick", isSignal: true, isRequired: false, transformFunction: null }, styleClass: { classPropertyName: "styleClass", publicName: "styleClass", isSignal: true, isRequired: false, transformFunction: null }, tableStyle: { classPropertyName: "tableStyle", publicName: "tableStyle", isSignal: true, isRequired: false, transformFunction: null }, totalRecords: { classPropertyName: "totalRecords", publicName: "totalRecords", isSignal: true, isRequired: false, transformFunction: null }, urlParameterPrefix: { classPropertyName: "urlParameterPrefix", publicName: "urlParameterPrefix", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { oDataParameters: "oDataParametersChange", selectedRows: "selectedRowsChange" }, viewQueries: [{ propertyName: "contextMenu", first: true, predicate: ["contextMenu"], descendants: true, isSignal: true }], ngImport: i0, template: "<p-table\n #table\n [value]=\"rows()\"\n [columns]=\"columns()\"\n [lazy]=\"lazy()\"\n [lazyLoadOnInit]=\"false\"\n (onLazyLoad)=\"load($event)\"\n responsiveLayout=\"scroll\"\n [paginator]=\"paginator()\"\n [rowsPerPageOptions]=\"rowsPerPageOptions()\"\n [rows]=\"rowsPerPage()\"\n [totalRecords]=\"totalRecords()\"\n [loading]=\"isLoading()\"\n sortMode=\"multiple\"\n [multiSortMeta]=\"multiSortMeta()\"\n [styleClass]=\"styleClass()\"\n [tableStyle]=\"tableStyle()\"\n [scrollable]=\"scrollable()\"\n [scrollHeight]=\"scrollHeight()\"\n [selectionMode]=\"selectionMode()\"\n [rowHover]=\"rowHover()\"\n [(selection)]=\"selectedRows\"\n [filters]=\"$any(filters())\"\n [first]=\"rowsBeforeCurrentPage()\"\n >\n\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n @for (col of columns; track col) {\n <th [pSortableColumn]=\"col.name\">\n <div class=\"p-d-flex p-jc-between p-ai-center gap-1\">\n {{col.prompt}}\n @if(!col.readOnly) {\n <p-sortIcon [field]=\"col.name\"></p-sortIcon>\n <p-columnFilter #f\n [type]=\"toColumnFilterType(col.type)\"\n [maxFractionDigits]=\"toMaxFractionDigits(col)\"\n matchMode=\"noFilter\"\n [matchModeOptions]=\"toMatchModeOptions(col)\"\n [showMatchModes]=\"true\"\n [field]=\"col.name\"\n display=\"menu\"\n [maxConstraints]=\"100\"\n [class.has-filter]=\"f.hasFilter\">\n <ng-template #filter let-value let-filterConstraint=\"filterConstraint\" let-field=\"field\">\n <rw-table-column-filter-element [property]=\"col\" [value]=\"value\" [apiName]=\"apiName()\" [filterConstraint]=\"filterConstraint\"></rw-table-column-filter-element>\n </ng-template>\n </p-columnFilter>\n }\n </div>\n </th>\n }\n @if (showMenuColumn()) {\n <th>\n <rw-menu-button [items]=\"headerMenu()\"></rw-menu-button>\n </th>\n }\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"body\" let-entity let-columns=\"columns\" let-rowIndex=\"rowIndex\">\n <tr (contextmenu)=\"openContextMenu($event, entity)\" [pSelectableRow]=\"entity\" [pSelectableRowDisabled]=\"selectionMode() === null\" [className]=\"rowStyleClasses()[rowIndex - (table.first ?? 0)]\">\n @for (col of columns; track col) {\n <td [className]=\"cellStyleClasses()[rowIndex - (table.first ?? 0)][col.name]\">\n @let fomrArray = formArray();\n @if (showInputField(col) && fomrArray) {\n <ng-container [formGroup]=\"fomrArray.controls[rowIndex - (table.first ?? 0)]\" >\n <rw-input [apiName]=\"apiName()\" [property]=\"editProperties()[col.name]!\"></rw-input>\n </ng-container>\n }\n @else {\n <rw-display [property]=\"col\" [value]=\"entity[col.name]\" [apiName]=\"apiName()!\"></rw-display>\n }\n </td>\n }\n @if (showMenuColumn()) {\n <td>\n @if (showRowMenuAsColumn()) {\n <rw-menu-button [items]=\"rowMenus()[rowIndex - (table.first ?? 0)]\"></rw-menu-button>\n }\n </td>\n }\n </tr>\n </ng-template>\n</p-table>\n\n<p-contextMenu #contextMenu appendTo=\"body\" [model]=\"contextMenuItems()\"></p-contextMenu>\n", styles: [".p-tooltip{max-width:fit-content}a.p-button{text-decoration:none}::ng-deep rw-table rw-label.md\\:col-2{width:100%;font-weight:600}::ng-deep rw-table .p-d-flex{display:flex}::ng-deep rw-table .p-ai-center{align-items:center}::ng-deep rw-table .has-filter filtericon{color:var(--p-datatable-header-cell-selected-color)}::ng-deep rw-table p-columnfilter .p-datatable-column-filter-button{width:unset;height:23px!important;padding-block-end:0;padding-block-start:0}\n"], dependencies: [{ kind: "ngmodule", type: TableModule }, { kind: "component", type: i5.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "size", "showGridlines", "stripedRows", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "virtualRowHeight", "selectAll"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i2$1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i5.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "directive", type: i5.SelectableRow, selector: "[pSelectableRow]", inputs: ["pSelectableRow", "pSelectableRowIndex", "pSelectableRowDisabled"] }, { kind: "component", type: i5.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i5.ColumnFilter, selector: "p-columnFilter", inputs: ["field", "type", "display", "showMenu", "matchMode", "operator", "showOperator", "showClearButton", "showApplyButton", "showMatchModes", "showAddButton", "hideOnClear", "placeholder", "matchModeOptions", "maxConstraints", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "locale", "localeMatcher", "currency", "currencyDisplay", "useGrouping", "showButtons", "ariaLabel", "filterButtonProps"], outputs: ["onShow", "onHide"] }, { kind: "component", type: RestWorldMenuButtonComponent, selector: "rw-menu-button", inputs: ["items"] }, { kind: "component", type: RestWorldInputComponent, selector: "rw-input" }, { kind: "component", type: RestWorldDisplayComponent, selector: "rw-display", inputs: ["apiName", "property", "value"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: ContextMenuModule }, { kind: "component", type: i7.ContextMenu, selector: "p-contextMenu, p-contextmenu, p-context-menu", inputs: ["model", "triggerEvent", "target", "global", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "id", "breakpoint", "ariaLabel", "ariaLabelledBy", "pressDelay"], outputs: ["onShow", "onHide"] }, { kind: "component", type: RestWorldTableColumnFilterElementComponent, selector: "rw-table-column-filter-element", inputs: ["filterConstraint", "property", "apiName", "value"] }], viewProviders: [{
|
|
4344
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldTableComponent, deps: [{ token: i2$3.ControlContainer }, { token: i1$1.FormService }, { token: i3$4.Router }, { token: i3$4.ActivatedRoute }, { token: i4$2.PrimeNG }], target: i0.ɵɵFactoryTarget.Component });
|
|
4345
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RestWorldTableComponent, isStandalone: true, selector: "rw-table", inputs: { apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, cellStyleClass: { classPropertyName: "cellStyleClass", publicName: "cellStyleClass", isSignal: true, isRequired: false, transformFunction: null }, editTemplate: { classPropertyName: "editTemplate", publicName: "editTemplate", isSignal: true, isRequired: false, transformFunction: null }, headerMenu: { classPropertyName: "headerMenu", publicName: "headerMenu", isSignal: true, isRequired: false, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null }, lazy: { classPropertyName: "lazy", publicName: "lazy", isSignal: true, isRequired: false, transformFunction: null }, paginator: { classPropertyName: "paginator", publicName: "paginator", isSignal: true, isRequired: false, transformFunction: null }, oDataParameters: { classPropertyName: "oDataParameters", publicName: "oDataParameters", isSignal: true, isRequired: false, transformFunction: null }, reflectParametersInUrl: { classPropertyName: "reflectParametersInUrl", publicName: "reflectParametersInUrl", isSignal: true, isRequired: false, transformFunction: null }, rowHover: { classPropertyName: "rowHover", publicName: "rowHover", isSignal: true, isRequired: false, transformFunction: null }, rowMenu: { classPropertyName: "rowMenu", publicName: "rowMenu", isSignal: true, isRequired: false, transformFunction: null }, rowStyleClass: { classPropertyName: "rowStyleClass", publicName: "rowStyleClass", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: true, transformFunction: null }, rowsPerPageOptions: { classPropertyName: "rowsPerPageOptions", publicName: "rowsPerPageOptions", isSignal: true, isRequired: false, transformFunction: null }, scrollHeight: { classPropertyName: "scrollHeight", publicName: "scrollHeight", isSignal: true, isRequired: false, transformFunction: null }, scrollable: { classPropertyName: "scrollable", publicName: "scrollable", isSignal: true, isRequired: false, transformFunction: null }, searchTemplate: { classPropertyName: "searchTemplate", publicName: "searchTemplate", isSignal: true, isRequired: true, transformFunction: null }, selectedRows: { classPropertyName: "selectedRows", publicName: "selectedRows", isSignal: true, isRequired: false, transformFunction: null }, selectionMode: { classPropertyName: "selectionMode", publicName: "selectionMode", isSignal: true, isRequired: false, transformFunction: null }, showRowMenuAsColumn: { classPropertyName: "showRowMenuAsColumn", publicName: "showRowMenuAsColumn", isSignal: true, isRequired: false, transformFunction: null }, showRowMenuOnRightClick: { classPropertyName: "showRowMenuOnRightClick", publicName: "showRowMenuOnRightClick", isSignal: true, isRequired: false, transformFunction: null }, styleClass: { classPropertyName: "styleClass", publicName: "styleClass", isSignal: true, isRequired: false, transformFunction: null }, tableStyle: { classPropertyName: "tableStyle", publicName: "tableStyle", isSignal: true, isRequired: false, transformFunction: null }, totalRecords: { classPropertyName: "totalRecords", publicName: "totalRecords", isSignal: true, isRequired: false, transformFunction: null }, urlParameterPrefix: { classPropertyName: "urlParameterPrefix", publicName: "urlParameterPrefix", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { oDataParameters: "oDataParametersChange", selectedRows: "selectedRowsChange" }, viewQueries: [{ propertyName: "contextMenu", first: true, predicate: ["contextMenu"], descendants: true, isSignal: true }], ngImport: i0, template: "<p-table\r\n #table\r\n [value]=\"rows()\"\r\n [columns]=\"columns()\"\r\n [lazy]=\"lazy()\"\r\n [lazyLoadOnInit]=\"false\"\r\n (onLazyLoad)=\"load($event)\"\r\n responsiveLayout=\"scroll\"\r\n [paginator]=\"paginator()\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions()\"\r\n [rows]=\"rowsPerPage()\"\r\n [totalRecords]=\"totalRecords()\"\r\n [loading]=\"isLoading()\"\r\n sortMode=\"multiple\"\r\n [multiSortMeta]=\"multiSortMeta()\"\r\n [styleClass]=\"styleClass()\"\r\n [tableStyle]=\"tableStyle()\"\r\n [scrollable]=\"scrollable()\"\r\n [scrollHeight]=\"scrollHeight()\"\r\n [selectionMode]=\"selectionMode()\"\r\n [rowHover]=\"rowHover()\"\r\n [(selection)]=\"selectedRows\"\r\n [filters]=\"$any(filters())\"\r\n [first]=\"rowsBeforeCurrentPage()\"\r\n >\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n @for (col of columns; track col) {\r\n <th [pSortableColumn]=\"col.name\">\r\n <div class=\"p-d-flex p-jc-between p-ai-center gap-1\">\r\n {{col.prompt}}\r\n @if(!col.readOnly) {\r\n <p-sortIcon [field]=\"col.name\"></p-sortIcon>\r\n <p-columnFilter #f\r\n [type]=\"toColumnFilterType(col.type)\"\r\n [maxFractionDigits]=\"toMaxFractionDigits(col)\"\r\n matchMode=\"noFilter\"\r\n [matchModeOptions]=\"toMatchModeOptions(col)\"\r\n [showMatchModes]=\"true\"\r\n [field]=\"col.name\"\r\n display=\"menu\"\r\n [maxConstraints]=\"100\"\r\n [class.has-filter]=\"f.hasFilter\">\r\n <ng-template #filter let-value let-filterConstraint=\"filterConstraint\" let-field=\"field\">\r\n <rw-table-column-filter-element [property]=\"col\" [value]=\"value\" [apiName]=\"apiName()\" [filterConstraint]=\"filterConstraint\"></rw-table-column-filter-element>\r\n </ng-template>\r\n </p-columnFilter>\r\n }\r\n </div>\r\n </th>\r\n }\r\n @if (showMenuColumn()) {\r\n <th>\r\n <rw-menu-button [items]=\"headerMenu()\"></rw-menu-button>\r\n </th>\r\n }\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"body\" let-entity let-columns=\"columns\" let-rowIndex=\"rowIndex\">\r\n <tr (contextmenu)=\"openContextMenu($event, entity)\" [pSelectableRow]=\"entity\" [pSelectableRowDisabled]=\"selectionMode() === null\" [className]=\"rowStyleClasses()[rowIndex - (table.first ?? 0)]\">\r\n @for (col of columns; track col) {\r\n <td [className]=\"cellStyleClasses()[rowIndex - (table.first ?? 0)][col.name]\">\r\n @let fomrArray = formArray();\r\n @if (showInputField(col) && fomrArray) {\r\n <ng-container [formGroup]=\"fomrArray.controls[rowIndex - (table.first ?? 0)]\" >\r\n <rw-input [apiName]=\"apiName()\" [property]=\"editProperties()[col.name]!\"></rw-input>\r\n </ng-container>\r\n }\r\n @else {\r\n <rw-display [property]=\"col\" [value]=\"entity[col.name]\" [apiName]=\"apiName()!\"></rw-display>\r\n }\r\n </td>\r\n }\r\n @if (showMenuColumn()) {\r\n <td>\r\n @if (showRowMenuAsColumn()) {\r\n <rw-menu-button [items]=\"rowMenus()[rowIndex - (table.first ?? 0)]\"></rw-menu-button>\r\n }\r\n </td>\r\n }\r\n </tr>\r\n </ng-template>\r\n</p-table>\r\n\r\n<p-contextMenu #contextMenu appendTo=\"body\" [model]=\"contextMenuItems()\"></p-contextMenu>\r\n", styles: [".p-tooltip{max-width:fit-content}a.p-button{text-decoration:none}::ng-deep rw-table rw-label.md\\:col-2{width:100%;font-weight:600}::ng-deep rw-table .p-d-flex{display:flex}::ng-deep rw-table .p-ai-center{align-items:center}::ng-deep rw-table .has-filter filtericon{color:var(--p-datatable-header-cell-selected-color)}::ng-deep rw-table p-columnfilter .p-datatable-column-filter-button{width:unset;height:23px!important;padding-block-end:0;padding-block-start:0}\n"], dependencies: [{ kind: "ngmodule", type: TableModule }, { kind: "component", type: i5.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "size", "showGridlines", "stripedRows", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i2$1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i5.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "directive", type: i5.SelectableRow, selector: "[pSelectableRow]", inputs: ["pSelectableRow", "pSelectableRowIndex", "pSelectableRowDisabled"] }, { kind: "component", type: i5.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i5.ColumnFilter, selector: "p-columnFilter, p-column-filter, p-columnfilter", inputs: ["field", "type", "display", "showMenu", "matchMode", "operator", "showOperator", "showClearButton", "showApplyButton", "showMatchModes", "showAddButton", "hideOnClear", "placeholder", "matchModeOptions", "maxConstraints", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "locale", "localeMatcher", "currency", "currencyDisplay", "filterOn", "useGrouping", "showButtons", "ariaLabel", "filterButtonProps"], outputs: ["onShow", "onHide"] }, { kind: "component", type: RestWorldMenuButtonComponent, selector: "rw-menu-button", inputs: ["items"] }, { kind: "component", type: RestWorldInputComponent, selector: "rw-input" }, { kind: "component", type: RestWorldDisplayComponent, selector: "rw-display", inputs: ["apiName", "property", "value"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: ContextMenuModule }, { kind: "component", type: i7.ContextMenu, selector: "p-contextMenu, p-contextmenu, p-context-menu", inputs: ["model", "triggerEvent", "target", "global", "style", "styleClass", "autoZIndex", "baseZIndex", "id", "breakpoint", "ariaLabel", "ariaLabelledBy", "pressDelay", "appendTo"], outputs: ["onShow", "onHide"] }, { kind: "component", type: RestWorldTableColumnFilterElementComponent, selector: "rw-table-column-filter-element", inputs: ["filterConstraint", "property", "apiName", "value"] }], viewProviders: [{
|
|
4139
4346
|
provide: ControlContainer,
|
|
4140
4347
|
deps: [[Optional, FormArrayName]],
|
|
4141
4348
|
useFactory: (arrayName) => arrayName,
|
|
4142
4349
|
}] });
|
|
4143
4350
|
}
|
|
4144
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
4351
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RestWorldTableComponent, decorators: [{
|
|
4145
4352
|
type: Component,
|
|
4146
4353
|
args: [{ selector: 'rw-table', standalone: true, viewProviders: [{
|
|
4147
4354
|
provide: ControlContainer,
|
|
4148
4355
|
deps: [[Optional, FormArrayName]],
|
|
4149
4356
|
useFactory: (arrayName) => arrayName,
|
|
4150
|
-
}], imports: [TableModule, RestWorldMenuButtonComponent, RestWorldInputComponent, RestWorldDisplayComponent, ReactiveFormsModule, ContextMenuModule, RestWorldTableColumnFilterElementComponent, RestWorldTableColumnFilterElementComponent], template: "<p-table\n #table\n [value]=\"rows()\"\n [columns]=\"columns()\"\n [lazy]=\"lazy()\"\n [lazyLoadOnInit]=\"false\"\n (onLazyLoad)=\"load($event)\"\n responsiveLayout=\"scroll\"\n [paginator]=\"paginator()\"\n [rowsPerPageOptions]=\"rowsPerPageOptions()\"\n [rows]=\"rowsPerPage()\"\n [totalRecords]=\"totalRecords()\"\n [loading]=\"isLoading()\"\n sortMode=\"multiple\"\n [multiSortMeta]=\"multiSortMeta()\"\n [styleClass]=\"styleClass()\"\n [tableStyle]=\"tableStyle()\"\n [scrollable]=\"scrollable()\"\n [scrollHeight]=\"scrollHeight()\"\n [selectionMode]=\"selectionMode()\"\n [rowHover]=\"rowHover()\"\n [(selection)]=\"selectedRows\"\n [filters]=\"$any(filters())\"\n [first]=\"rowsBeforeCurrentPage()\"\n >\n\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n @for (col of columns; track col) {\n <th [pSortableColumn]=\"col.name\">\n <div class=\"p-d-flex p-jc-between p-ai-center gap-1\">\n {{col.prompt}}\n @if(!col.readOnly) {\n <p-sortIcon [field]=\"col.name\"></p-sortIcon>\n <p-columnFilter #f\n [type]=\"toColumnFilterType(col.type)\"\n [maxFractionDigits]=\"toMaxFractionDigits(col)\"\n matchMode=\"noFilter\"\n [matchModeOptions]=\"toMatchModeOptions(col)\"\n [showMatchModes]=\"true\"\n [field]=\"col.name\"\n display=\"menu\"\n [maxConstraints]=\"100\"\n [class.has-filter]=\"f.hasFilter\">\n <ng-template #filter let-value let-filterConstraint=\"filterConstraint\" let-field=\"field\">\n <rw-table-column-filter-element [property]=\"col\" [value]=\"value\" [apiName]=\"apiName()\" [filterConstraint]=\"filterConstraint\"></rw-table-column-filter-element>\n </ng-template>\n </p-columnFilter>\n }\n </div>\n </th>\n }\n @if (showMenuColumn()) {\n <th>\n <rw-menu-button [items]=\"headerMenu()\"></rw-menu-button>\n </th>\n }\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"body\" let-entity let-columns=\"columns\" let-rowIndex=\"rowIndex\">\n <tr (contextmenu)=\"openContextMenu($event, entity)\" [pSelectableRow]=\"entity\" [pSelectableRowDisabled]=\"selectionMode() === null\" [className]=\"rowStyleClasses()[rowIndex - (table.first ?? 0)]\">\n @for (col of columns; track col) {\n <td [className]=\"cellStyleClasses()[rowIndex - (table.first ?? 0)][col.name]\">\n @let fomrArray = formArray();\n @if (showInputField(col) && fomrArray) {\n <ng-container [formGroup]=\"fomrArray.controls[rowIndex - (table.first ?? 0)]\" >\n <rw-input [apiName]=\"apiName()\" [property]=\"editProperties()[col.name]!\"></rw-input>\n </ng-container>\n }\n @else {\n <rw-display [property]=\"col\" [value]=\"entity[col.name]\" [apiName]=\"apiName()!\"></rw-display>\n }\n </td>\n }\n @if (showMenuColumn()) {\n <td>\n @if (showRowMenuAsColumn()) {\n <rw-menu-button [items]=\"rowMenus()[rowIndex - (table.first ?? 0)]\"></rw-menu-button>\n }\n </td>\n }\n </tr>\n </ng-template>\n</p-table>\n\n<p-contextMenu #contextMenu appendTo=\"body\" [model]=\"contextMenuItems()\"></p-contextMenu>\n", styles: [".p-tooltip{max-width:fit-content}a.p-button{text-decoration:none}::ng-deep rw-table rw-label.md\\:col-2{width:100%;font-weight:600}::ng-deep rw-table .p-d-flex{display:flex}::ng-deep rw-table .p-ai-center{align-items:center}::ng-deep rw-table .has-filter filtericon{color:var(--p-datatable-header-cell-selected-color)}::ng-deep rw-table p-columnfilter .p-datatable-column-filter-button{width:unset;height:23px!important;padding-block-end:0;padding-block-start:0}\n"] }]
|
|
4357
|
+
}], imports: [TableModule, RestWorldMenuButtonComponent, RestWorldInputComponent, RestWorldDisplayComponent, ReactiveFormsModule, ContextMenuModule, RestWorldTableColumnFilterElementComponent, RestWorldTableColumnFilterElementComponent], template: "<p-table\r\n #table\r\n [value]=\"rows()\"\r\n [columns]=\"columns()\"\r\n [lazy]=\"lazy()\"\r\n [lazyLoadOnInit]=\"false\"\r\n (onLazyLoad)=\"load($event)\"\r\n responsiveLayout=\"scroll\"\r\n [paginator]=\"paginator()\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions()\"\r\n [rows]=\"rowsPerPage()\"\r\n [totalRecords]=\"totalRecords()\"\r\n [loading]=\"isLoading()\"\r\n sortMode=\"multiple\"\r\n [multiSortMeta]=\"multiSortMeta()\"\r\n [styleClass]=\"styleClass()\"\r\n [tableStyle]=\"tableStyle()\"\r\n [scrollable]=\"scrollable()\"\r\n [scrollHeight]=\"scrollHeight()\"\r\n [selectionMode]=\"selectionMode()\"\r\n [rowHover]=\"rowHover()\"\r\n [(selection)]=\"selectedRows\"\r\n [filters]=\"$any(filters())\"\r\n [first]=\"rowsBeforeCurrentPage()\"\r\n >\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n @for (col of columns; track col) {\r\n <th [pSortableColumn]=\"col.name\">\r\n <div class=\"p-d-flex p-jc-between p-ai-center gap-1\">\r\n {{col.prompt}}\r\n @if(!col.readOnly) {\r\n <p-sortIcon [field]=\"col.name\"></p-sortIcon>\r\n <p-columnFilter #f\r\n [type]=\"toColumnFilterType(col.type)\"\r\n [maxFractionDigits]=\"toMaxFractionDigits(col)\"\r\n matchMode=\"noFilter\"\r\n [matchModeOptions]=\"toMatchModeOptions(col)\"\r\n [showMatchModes]=\"true\"\r\n [field]=\"col.name\"\r\n display=\"menu\"\r\n [maxConstraints]=\"100\"\r\n [class.has-filter]=\"f.hasFilter\">\r\n <ng-template #filter let-value let-filterConstraint=\"filterConstraint\" let-field=\"field\">\r\n <rw-table-column-filter-element [property]=\"col\" [value]=\"value\" [apiName]=\"apiName()\" [filterConstraint]=\"filterConstraint\"></rw-table-column-filter-element>\r\n </ng-template>\r\n </p-columnFilter>\r\n }\r\n </div>\r\n </th>\r\n }\r\n @if (showMenuColumn()) {\r\n <th>\r\n <rw-menu-button [items]=\"headerMenu()\"></rw-menu-button>\r\n </th>\r\n }\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"body\" let-entity let-columns=\"columns\" let-rowIndex=\"rowIndex\">\r\n <tr (contextmenu)=\"openContextMenu($event, entity)\" [pSelectableRow]=\"entity\" [pSelectableRowDisabled]=\"selectionMode() === null\" [className]=\"rowStyleClasses()[rowIndex - (table.first ?? 0)]\">\r\n @for (col of columns; track col) {\r\n <td [className]=\"cellStyleClasses()[rowIndex - (table.first ?? 0)][col.name]\">\r\n @let fomrArray = formArray();\r\n @if (showInputField(col) && fomrArray) {\r\n <ng-container [formGroup]=\"fomrArray.controls[rowIndex - (table.first ?? 0)]\" >\r\n <rw-input [apiName]=\"apiName()\" [property]=\"editProperties()[col.name]!\"></rw-input>\r\n </ng-container>\r\n }\r\n @else {\r\n <rw-display [property]=\"col\" [value]=\"entity[col.name]\" [apiName]=\"apiName()!\"></rw-display>\r\n }\r\n </td>\r\n }\r\n @if (showMenuColumn()) {\r\n <td>\r\n @if (showRowMenuAsColumn()) {\r\n <rw-menu-button [items]=\"rowMenus()[rowIndex - (table.first ?? 0)]\"></rw-menu-button>\r\n }\r\n </td>\r\n }\r\n </tr>\r\n </ng-template>\r\n</p-table>\r\n\r\n<p-contextMenu #contextMenu appendTo=\"body\" [model]=\"contextMenuItems()\"></p-contextMenu>\r\n", styles: [".p-tooltip{max-width:fit-content}a.p-button{text-decoration:none}::ng-deep rw-table rw-label.md\\:col-2{width:100%;font-weight:600}::ng-deep rw-table .p-d-flex{display:flex}::ng-deep rw-table .p-ai-center{align-items:center}::ng-deep rw-table .has-filter filtericon{color:var(--p-datatable-header-cell-selected-color)}::ng-deep rw-table p-columnfilter .p-datatable-column-filter-button{width:unset;height:23px!important;padding-block-end:0;padding-block-start:0}\n"] }]
|
|
4151
4358
|
}], ctorParameters: () => [{ type: i2$3.ControlContainer }, { type: i1$1.FormService }, { type: i3$4.Router }, { type: i3$4.ActivatedRoute }, { type: i4$2.PrimeNG }] });
|
|
4152
4359
|
var ColumnFilterType;
|
|
4153
4360
|
(function (ColumnFilterType) {
|
|
@@ -4186,10 +4393,10 @@ class AsPipe {
|
|
|
4186
4393
|
transform(value, type) {
|
|
4187
4394
|
return value;
|
|
4188
4395
|
}
|
|
4189
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
4190
|
-
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
4396
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AsPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
4397
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.1", ngImport: i0, type: AsPipe, isStandalone: true, name: "as" });
|
|
4191
4398
|
}
|
|
4192
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
4399
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AsPipe, decorators: [{
|
|
4193
4400
|
type: Pipe,
|
|
4194
4401
|
args: [{
|
|
4195
4402
|
name: 'as',
|
|
@@ -4238,10 +4445,10 @@ class SettingsService {
|
|
|
4238
4445
|
await Promise.all(this.settings.apiUrls
|
|
4239
4446
|
.map(api => this._clients.addOrGetExistingClient(api.name, new RestWorldOptions(api.url, api.version))));
|
|
4240
4447
|
}
|
|
4241
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
4242
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
4448
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: SettingsService, deps: [{ token: RestWorldClientCollection }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
4449
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: SettingsService, providedIn: 'root' });
|
|
4243
4450
|
}
|
|
4244
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
4451
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: SettingsService, decorators: [{
|
|
4245
4452
|
type: Injectable,
|
|
4246
4453
|
args: [{
|
|
4247
4454
|
providedIn: 'root'
|
|
@@ -4260,86 +4467,147 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImpor
|
|
|
4260
4467
|
*/
|
|
4261
4468
|
class OpenTelemetryService {
|
|
4262
4469
|
_settingsService;
|
|
4263
|
-
|
|
4264
|
-
|
|
4265
|
-
|
|
4266
|
-
|
|
4267
|
-
|
|
4268
|
-
span.setAttribute("client.port", window.location.port);
|
|
4269
|
-
span.setAttribute("browser.language", navigator.language);
|
|
4270
|
-
if (URL.canParse(xhr.responseURL)) {
|
|
4271
|
-
const url = new URL(xhr.responseURL);
|
|
4272
|
-
span.setAttribute("url.domain", url.hostname);
|
|
4273
|
-
span.setAttribute("url.full", url.href);
|
|
4274
|
-
span.setAttribute("url.path", url.pathname);
|
|
4275
|
-
span.setAttribute("url.port", url.port);
|
|
4276
|
-
span.setAttribute("url.scheme", url.protocol.replace(":", ""));
|
|
4277
|
-
if (url.search)
|
|
4278
|
-
span.setAttribute("url.query", url.search.replace("?", ""));
|
|
4279
|
-
if ("name" in span && typeof span.name === "string") {
|
|
4280
|
-
span.updateName(span.name + " " + (url.pathname.startsWith("/") ? url.pathname.substring(1) : url.pathname));
|
|
4281
|
-
}
|
|
4282
|
-
}
|
|
4283
|
-
}
|
|
4284
|
-
},
|
|
4285
|
-
"@opentelemetry/instrumentation-fetch": {
|
|
4286
|
-
propagateTraceHeaderCorsUrls: /.*/,
|
|
4287
|
-
applyCustomAttributesOnSpan: (span, request) => {
|
|
4288
|
-
span.setAttribute("client.address", window.location.href);
|
|
4289
|
-
span.setAttribute("client.port", window.location.port);
|
|
4290
|
-
span.setAttribute("browser.language", navigator.language);
|
|
4291
|
-
if ("url" in request && typeof request.url === "string" && URL.canParse(request.url)) {
|
|
4292
|
-
const url = new URL(request.url);
|
|
4293
|
-
span.setAttribute("url.domain", url.hostname);
|
|
4294
|
-
span.setAttribute("url.full", url.href);
|
|
4295
|
-
span.setAttribute("url.path", url.pathname);
|
|
4296
|
-
span.setAttribute("url.port", url.port);
|
|
4297
|
-
span.setAttribute("url.scheme", url.protocol.replace(":", ""));
|
|
4298
|
-
if (url.search)
|
|
4299
|
-
span.setAttribute("url.query", url.search.replace("?", ""));
|
|
4300
|
-
if ("name" in span && typeof span.name === "string") {
|
|
4301
|
-
span.updateName(span.name + " " + (url.pathname.startsWith("/") ? url.pathname.substring(1) : url.pathname));
|
|
4302
|
-
}
|
|
4303
|
-
}
|
|
4304
|
-
}
|
|
4305
|
-
},
|
|
4306
|
-
"@opentelemetry/instrumentation-user-interaction": {
|
|
4307
|
-
enabled: false,
|
|
4308
|
-
shouldPreventSpanCreation: (eventType, element, span) => {
|
|
4309
|
-
const shouldCreate = this._lastLocation !== window.location.href ||
|
|
4310
|
-
Date.now() - this._lastTime > 1000 ||
|
|
4311
|
-
this._lastElement !== element ||
|
|
4312
|
-
//(eventType === "click" && (element.tagName === "A" || element.tagName === "Button")) ||
|
|
4313
|
-
(eventType === "submit");
|
|
4314
|
-
if (shouldCreate) {
|
|
4315
|
-
this._lastLocation = window.location.href;
|
|
4316
|
-
this._lastTime = Date.now();
|
|
4317
|
-
this._lastElement = element;
|
|
4318
|
-
}
|
|
4319
|
-
return !shouldCreate;
|
|
4320
|
-
}
|
|
4321
|
-
}
|
|
4322
|
-
};
|
|
4323
|
-
_lastElement = null;
|
|
4324
|
-
_lastTime = 0;
|
|
4325
|
-
_lastLocation = null;
|
|
4326
|
-
constructor(_settingsService) {
|
|
4470
|
+
_router;
|
|
4471
|
+
_tracer;
|
|
4472
|
+
_activeNavigationSpan = null;
|
|
4473
|
+
_lastNavigationPath = null;
|
|
4474
|
+
constructor(_settingsService, _router) {
|
|
4327
4475
|
this._settingsService = _settingsService;
|
|
4476
|
+
this._router = _router;
|
|
4477
|
+
// Listen for navigation events to create parent spans
|
|
4478
|
+
this._router.events
|
|
4479
|
+
.pipe(filter(event => event instanceof NavigationEnd))
|
|
4480
|
+
.subscribe((event) => {
|
|
4481
|
+
this.createNavigationSpan(event.urlAfterRedirects);
|
|
4482
|
+
});
|
|
4483
|
+
// Listen for beforeunload event to end the span when user leaves the application
|
|
4484
|
+
window.addEventListener('beforeunload', () => {
|
|
4485
|
+
this.endCurrentNavigationSpan();
|
|
4486
|
+
});
|
|
4328
4487
|
}
|
|
4329
|
-
|
|
4488
|
+
/**
|
|
4489
|
+
* Sets the current span as active in the global context
|
|
4490
|
+
* This ensures that new spans created after this will automatically
|
|
4491
|
+
* become child spans of this active span
|
|
4492
|
+
*/
|
|
4493
|
+
activateNavigationContext() {
|
|
4494
|
+
if (this._activeNavigationSpan) {
|
|
4495
|
+
// Make this span the active span in the current context
|
|
4496
|
+
const activeContext = trace.setSpan(context.active(), this._activeNavigationSpan);
|
|
4497
|
+
// Use ZoneContextManager to persist this context across async operations
|
|
4498
|
+
// This is important for Angular applications that use zones
|
|
4499
|
+
context.with(activeContext, () => {
|
|
4500
|
+
// The context remains active for all operations within this callback
|
|
4501
|
+
// and for all asynchronous operations started within this zone
|
|
4502
|
+
// Set the context as a property in the window for access by other parts of the application
|
|
4503
|
+
// This helps ensure the context is available for all operations
|
|
4504
|
+
window.__navigationContext = activeContext;
|
|
4505
|
+
});
|
|
4506
|
+
}
|
|
4507
|
+
}
|
|
4508
|
+
/**
|
|
4509
|
+
* Creates a new span to track a navigation event.
|
|
4510
|
+
* This will be the parent span for any HTTP requests made during this navigation.
|
|
4511
|
+
* Only creates a new span if the path has changed from the last navigation.
|
|
4512
|
+
* @param url The URL being navigated to
|
|
4513
|
+
*/
|
|
4514
|
+
createNavigationSpan(url) {
|
|
4515
|
+
// Parse the URL to extract route information
|
|
4516
|
+
let routePath = 'unknown';
|
|
4517
|
+
try {
|
|
4518
|
+
const urlObj = new URL(url, window.location.origin);
|
|
4519
|
+
routePath = urlObj.pathname;
|
|
4520
|
+
}
|
|
4521
|
+
catch (e) {
|
|
4522
|
+
routePath = url; // Use the raw URL if parsing fails
|
|
4523
|
+
}
|
|
4524
|
+
// If the path hasn't changed, don't create a new span
|
|
4525
|
+
if (this._lastNavigationPath === routePath) {
|
|
4526
|
+
return;
|
|
4527
|
+
}
|
|
4528
|
+
// Update the last navigation path
|
|
4529
|
+
this._lastNavigationPath = routePath;
|
|
4530
|
+
// End the previous span if it exists
|
|
4531
|
+
if (this._activeNavigationSpan) {
|
|
4532
|
+
this._activeNavigationSpan.end();
|
|
4533
|
+
this._activeNavigationSpan = null;
|
|
4534
|
+
}
|
|
4535
|
+
if (!this._tracer) {
|
|
4536
|
+
return; // Not initialized yet
|
|
4537
|
+
}
|
|
4538
|
+
// Create a new span for this navigation
|
|
4539
|
+
this._activeNavigationSpan = this._tracer.startSpan(`Navigation to ${routePath}`, {
|
|
4540
|
+
kind: SpanKind.INTERNAL,
|
|
4541
|
+
attributes: {
|
|
4542
|
+
'component': 'router',
|
|
4543
|
+
'route.path': routePath,
|
|
4544
|
+
'client.address': window.location.href,
|
|
4545
|
+
'client.port': window.location.port,
|
|
4546
|
+
'browser.language': navigator.language
|
|
4547
|
+
}
|
|
4548
|
+
});
|
|
4549
|
+
// Activate this navigation span as the current context
|
|
4550
|
+
this.activateNavigationContext();
|
|
4551
|
+
}
|
|
4552
|
+
async initialize() {
|
|
4330
4553
|
await this._settingsService.ensureInitialized();
|
|
4331
4554
|
const clientSettings = this._settingsService.settings;
|
|
4332
4555
|
if (!clientSettings)
|
|
4333
|
-
throw new Error('Settings are not loaded yet.');
|
|
4334
|
-
|
|
4335
|
-
|
|
4556
|
+
throw new Error('Client Settings are not loaded yet.');
|
|
4557
|
+
if (!clientSettings.extensions)
|
|
4558
|
+
throw new Error('Client Settings do not contain extensions.');
|
|
4559
|
+
const sampler = OpenTelemetryService.GetSampler(clientSettings);
|
|
4560
|
+
const spanProcessors = OpenTelemetryService.GetSpanProcessors(clientSettings);
|
|
4561
|
+
const resource = OpenTelemetryService.GetResource(clientSettings);
|
|
4562
|
+
const provider = new WebTracerProvider({
|
|
4563
|
+
sampler: sampler,
|
|
4564
|
+
spanProcessors: spanProcessors,
|
|
4565
|
+
resource: resource,
|
|
4566
|
+
});
|
|
4567
|
+
provider.register({
|
|
4568
|
+
// Changing default contextManager to use ZoneContextManager - supports asynchronous operations - optional
|
|
4569
|
+
contextManager: new ZoneContextManager(),
|
|
4570
|
+
});
|
|
4571
|
+
// Get a tracer from the provider
|
|
4572
|
+
this._tracer = provider.getTracer('angular-navigation-tracer');
|
|
4573
|
+
// Create the initial navigation span based on the current URL
|
|
4574
|
+
if (this._router && this._router.url) {
|
|
4575
|
+
this.createNavigationSpan(this._router.url);
|
|
4576
|
+
}
|
|
4577
|
+
}
|
|
4578
|
+
/**
|
|
4579
|
+
* Ends the current navigation span if one exists.
|
|
4580
|
+
* This can be called when the user is leaving the application or when
|
|
4581
|
+
* special navigation events happen that should terminate the current span.
|
|
4582
|
+
*/
|
|
4583
|
+
endCurrentNavigationSpan() {
|
|
4584
|
+
if (this._activeNavigationSpan) {
|
|
4585
|
+
this._activeNavigationSpan.end();
|
|
4586
|
+
this._activeNavigationSpan = null;
|
|
4587
|
+
this._lastNavigationPath = null; // Reset the last navigation path when ending the span manually
|
|
4588
|
+
}
|
|
4589
|
+
}
|
|
4590
|
+
static GetResource(clientSettings) {
|
|
4336
4591
|
const serviceName = clientSettings.extensions["OTEL_SERVICE_NAME"];
|
|
4337
4592
|
const resourceAttributes = clientSettings.extensions["OTEL_RESOURCE_ATTRIBUTES"];
|
|
4338
|
-
const
|
|
4339
|
-
|
|
4340
|
-
|
|
4593
|
+
const resource = resourceFromAttributes({});
|
|
4594
|
+
if (resourceAttributes) {
|
|
4595
|
+
resourceAttributes
|
|
4596
|
+
.split(",")
|
|
4597
|
+
.map((attribute) => {
|
|
4598
|
+
const [key, value] = attribute.split("=");
|
|
4599
|
+
resource.attributes[key] = value;
|
|
4600
|
+
});
|
|
4601
|
+
}
|
|
4602
|
+
if (serviceName)
|
|
4603
|
+
resource.attributes[ATTR_SERVICE_NAME] = serviceName;
|
|
4604
|
+
return resource;
|
|
4605
|
+
}
|
|
4606
|
+
static GetSpanProcessors(clientSettings) {
|
|
4607
|
+
const exporterEndpoint = clientSettings.extensions["OTEL_EXPORTER_OTLP_ENDPOINT"];
|
|
4608
|
+
const exporterHeaders = clientSettings.extensions["OTEL_EXPORTER_OTLP_HEADERS"];
|
|
4341
4609
|
if (!exporterEndpoint)
|
|
4342
|
-
|
|
4610
|
+
return [new SimpleSpanProcessor(new ConsoleSpanExporter())];
|
|
4343
4611
|
else {
|
|
4344
4612
|
let headersObj = {};
|
|
4345
4613
|
if (exporterHeaders) {
|
|
@@ -4356,41 +4624,12 @@ class OpenTelemetryService {
|
|
|
4356
4624
|
headers: headersObj,
|
|
4357
4625
|
compression: "gzip",
|
|
4358
4626
|
};
|
|
4359
|
-
|
|
4360
|
-
}
|
|
4361
|
-
provider.register({
|
|
4362
|
-
// Changing default contextManager to use ZoneContextManager - supports asynchronous operations - optional
|
|
4363
|
-
contextManager: new ZoneContextManager(),
|
|
4364
|
-
});
|
|
4365
|
-
if (resourceAttributes) {
|
|
4366
|
-
resourceAttributes
|
|
4367
|
-
.split(",")
|
|
4368
|
-
.map((attribute) => {
|
|
4369
|
-
const [key, value] = attribute.split("=");
|
|
4370
|
-
provider.resource.attributes[key] = value;
|
|
4371
|
-
});
|
|
4372
|
-
}
|
|
4373
|
-
if (serviceName)
|
|
4374
|
-
provider.resource.attributes['service.name'] = serviceName;
|
|
4375
|
-
// apply given options
|
|
4376
|
-
let config;
|
|
4377
|
-
if (typeof configureOptions === 'function') {
|
|
4378
|
-
config = configureOptions(this._defaultInputConfigs);
|
|
4379
|
-
}
|
|
4380
|
-
else if (typeof configureOptions === 'object') {
|
|
4381
|
-
config = configureOptions;
|
|
4382
|
-
}
|
|
4383
|
-
else {
|
|
4384
|
-
config = this._defaultInputConfigs;
|
|
4627
|
+
return [new BatchSpanProcessor(new OTLPTraceExporter(otlpExporterConfiguration))];
|
|
4385
4628
|
}
|
|
4386
|
-
// Registering instrumentations
|
|
4387
|
-
registerInstrumentations({
|
|
4388
|
-
instrumentations: [
|
|
4389
|
-
getWebAutoInstrumentations(config),
|
|
4390
|
-
]
|
|
4391
|
-
});
|
|
4392
4629
|
}
|
|
4393
|
-
static GetSampler(
|
|
4630
|
+
static GetSampler(clientSettings) {
|
|
4631
|
+
const tracesSampler = clientSettings.extensions["OTEL_TRACES_SAMPLER"];
|
|
4632
|
+
const tracesSamplerArg = clientSettings.extensions["OTEL_TRACES_SAMPLER_ARG"];
|
|
4394
4633
|
switch (tracesSampler) {
|
|
4395
4634
|
case "always_on":
|
|
4396
4635
|
return new AlwaysOnSampler();
|
|
@@ -4410,15 +4649,35 @@ class OpenTelemetryService {
|
|
|
4410
4649
|
return new AlwaysOnSampler();
|
|
4411
4650
|
}
|
|
4412
4651
|
}
|
|
4413
|
-
|
|
4414
|
-
|
|
4652
|
+
/**
|
|
4653
|
+
* Gets the active context that contains the current navigation span.
|
|
4654
|
+
* This is used by the HttpInterceptor to ensure HttpClient requests are
|
|
4655
|
+
* properly associated with the current navigation span.
|
|
4656
|
+
* @returns The active context, or null if no navigation span exists
|
|
4657
|
+
*/
|
|
4658
|
+
getActiveContext() {
|
|
4659
|
+
if (this._activeNavigationSpan) {
|
|
4660
|
+
// Create a context with the active navigation span
|
|
4661
|
+
return trace.setSpan(context.active(), this._activeNavigationSpan);
|
|
4662
|
+
}
|
|
4663
|
+
return null;
|
|
4664
|
+
}
|
|
4665
|
+
/**
|
|
4666
|
+
* Gets the OpenTelemetry tracer instance for creating spans
|
|
4667
|
+
* @returns The tracer instance or undefined if not initialized
|
|
4668
|
+
*/
|
|
4669
|
+
getTracer() {
|
|
4670
|
+
return this._tracer;
|
|
4671
|
+
}
|
|
4672
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: OpenTelemetryService, deps: [{ token: SettingsService }, { token: i3$4.Router }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
4673
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: OpenTelemetryService, providedIn: "root" });
|
|
4415
4674
|
}
|
|
4416
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
4675
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: OpenTelemetryService, decorators: [{
|
|
4417
4676
|
type: Injectable,
|
|
4418
4677
|
args: [{
|
|
4419
4678
|
providedIn: "root"
|
|
4420
4679
|
}]
|
|
4421
|
-
}], ctorParameters: () => [{ type: SettingsService }] });
|
|
4680
|
+
}], ctorParameters: () => [{ type: SettingsService }, { type: i3$4.Router }] });
|
|
4422
4681
|
|
|
4423
4682
|
/**
|
|
4424
4683
|
* Component for editing a resource in the RESTworld application.
|
|
@@ -4457,20 +4716,20 @@ class RESTworldEditViewComponent {
|
|
|
4457
4716
|
/**
|
|
4458
4717
|
* The relation to load the resource from.
|
|
4459
4718
|
*/
|
|
4460
|
-
rel = input.required();
|
|
4719
|
+
rel = input.required(...(ngDevMode ? [{ debugName: "rel" }] : []));
|
|
4461
4720
|
/**
|
|
4462
4721
|
* The URI of the resource to load.
|
|
4463
4722
|
*/
|
|
4464
|
-
uri = input.required();
|
|
4723
|
+
uri = input.required(...(ngDevMode ? [{ debugName: "uri" }] : []));
|
|
4465
4724
|
/**
|
|
4466
4725
|
* The name of the API to load the resource from.
|
|
4467
4726
|
*/
|
|
4468
|
-
apiName = input.required();
|
|
4727
|
+
apiName = input.required(...(ngDevMode ? [{ debugName: "apiName" }] : []));
|
|
4469
4728
|
templates = resource({
|
|
4470
|
-
|
|
4471
|
-
loader: ({
|
|
4729
|
+
params: () => ({ apiName: this.apiName(), uri: this.uri() }),
|
|
4730
|
+
loader: ({ params }) => this.loadInternal(params.apiName, params.uri)
|
|
4472
4731
|
});
|
|
4473
|
-
displayTab = model("Loading");
|
|
4732
|
+
displayTab = model("Loading", ...(ngDevMode ? [{ debugName: "displayTab" }] : []));
|
|
4474
4733
|
async afterSubmit($event) {
|
|
4475
4734
|
if ($event.status == 201) {
|
|
4476
4735
|
await this._router.navigate(["edit", this.apiName(), this.rel(), $event.location]);
|
|
@@ -4482,40 +4741,41 @@ class RESTworldEditViewComponent {
|
|
|
4482
4741
|
async loadInternal(apiName, uri) {
|
|
4483
4742
|
if (!apiName || !uri)
|
|
4484
4743
|
return [];
|
|
4485
|
-
|
|
4486
|
-
|
|
4487
|
-
|
|
4488
|
-
if
|
|
4489
|
-
|
|
4490
|
-
|
|
4491
|
-
|
|
4492
|
-
|
|
4493
|
-
|
|
4494
|
-
|
|
4744
|
+
try {
|
|
4745
|
+
const client = this._clients.getClient(apiName);
|
|
4746
|
+
const templatesOrProblemDetails = await client.getAllTemplatesByUri(uri);
|
|
4747
|
+
// Check if we got ProblemDetails instead of Templates
|
|
4748
|
+
if (ProblemDetails.isProblemDetails(templatesOrProblemDetails)) {
|
|
4749
|
+
this._messageService.add({
|
|
4750
|
+
severity: "error",
|
|
4751
|
+
summary: "Error",
|
|
4752
|
+
detail: `Error from API: ${templatesOrProblemDetails.title} - ${templatesOrProblemDetails.detail}`,
|
|
4753
|
+
data: templatesOrProblemDetails,
|
|
4754
|
+
sticky: true
|
|
4755
|
+
});
|
|
4756
|
+
return [];
|
|
4757
|
+
}
|
|
4758
|
+
// Process the templates
|
|
4759
|
+
const templates = templatesOrProblemDetails;
|
|
4495
4760
|
const templateArray = Object.values(templates).filter((t) => t !== undefined);
|
|
4496
4761
|
if (templateArray.length > 0)
|
|
4497
4762
|
this.displayTab.set(templateArray[0].title);
|
|
4498
4763
|
return templateArray;
|
|
4499
4764
|
}
|
|
4500
|
-
return [];
|
|
4501
|
-
}
|
|
4502
|
-
async getAllTemplates(resource, apiName) {
|
|
4503
|
-
try {
|
|
4504
|
-
const client = this._clients.getClient(apiName);
|
|
4505
|
-
const templates = await client.getAllTemplates(resource);
|
|
4506
|
-
return templates;
|
|
4507
|
-
}
|
|
4508
4765
|
catch (e) {
|
|
4509
|
-
|
|
4510
|
-
|
|
4766
|
+
if (e instanceof Error)
|
|
4767
|
+
this._messageService.add({ severity: "error", summary: "Error", detail: "Error while loading the templates from the API. " + e.message, data: e, sticky: true });
|
|
4768
|
+
else
|
|
4769
|
+
this._messageService.add({ severity: "error", summary: "Error", detail: "Error while loading the templates from the API. " + e, data: e, sticky: true });
|
|
4770
|
+
return [];
|
|
4511
4771
|
}
|
|
4512
4772
|
}
|
|
4513
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
4514
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
4773
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RESTworldEditViewComponent, deps: [{ token: RestWorldClientCollection }, { token: i2$1.MessageService }, { token: i3$4.Router }, { token: i4$3.ValdemortConfig }], target: i0.ɵɵFactoryTarget.Component });
|
|
4774
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RESTworldEditViewComponent, isStandalone: true, selector: "rw-edit", inputs: { rel: { classPropertyName: "rel", publicName: "rel", isSignal: true, isRequired: true, transformFunction: null }, uri: { classPropertyName: "uri", publicName: "uri", isSignal: true, isRequired: true, transformFunction: null }, apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: true, transformFunction: null }, displayTab: { classPropertyName: "displayTab", publicName: "displayTab", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { displayTab: "displayTabChange" }, queries: [{ propertyName: "extraTabsRef", first: true, predicate: ["extraTabs"], descendants: true }], ngImport: i0, template: "<div class=\"grid\">\r\n <div class=\"col-12 md:col-10\">\r\n <h1>Edit resource</h1>\r\n </div>\r\n <div class=\"col-12 md:col-2 align-items-center justify-content-end flex\">\r\n <rw-id-navigation [apiName]=\"apiName()\" [rel]=\"rel()\"></rw-id-navigation>\r\n </div>\r\n</div>\r\n\r\n<p-tabs [(value)]=\"displayTab\">\r\n <p-tablist>\r\n @if (templates.isLoading()) {\r\n <p-tab value=\"Loading\">Loading</p-tab>\r\n }\r\n @else {\r\n @for (template of templates.value(); track template; let i = $index) {\r\n <p-tab [value]=\"template.title ?? i\">{{template.title}}</p-tab>\r\n }\r\n @if (extraTabsRef) {\r\n <p-tab value=\"Extra\">Extra</p-tab>\r\n }\r\n }\r\n </p-tablist>\r\n <p-tabpanels>\r\n @if (templates.isLoading()) {\r\n <p-tabpanel value=\"Loading\">\r\n @for(i of [1, 2, 3, 4, 5]; track i) {\r\n <div class=\"grid field\">\r\n <p-skeleton class=\"col-12 mb-2 md:col-2 md:mb-0\" height=\"39px\"></p-skeleton>\r\n <div class=\"col-12 md:col-10\">\r\n <p-skeleton class=\"w-full\" height=\"39px\"></p-skeleton>\r\n </div>\r\n </div>\r\n }\r\n <div class=\"grid\">\r\n <div class=\"col\">\r\n <div class=\"flex justify-content-end w-full\">\r\n <p-skeleton width=\"120px\" height=\"39px\" class=\"mx-2\"></p-skeleton>\r\n <p-skeleton width=\"120px\" height=\"39px\" class=\"mx-2\"></p-skeleton>\r\n <p-skeleton width=\"120px\" height=\"39px\" class=\"mx-2\"></p-skeleton>\r\n </div>\r\n </div>\r\n </div>\r\n </p-tabpanel>\r\n }\r\n @else {\r\n @for (template of templates.value(); track template; let i = $index) {\r\n <p-tabpanel [value]=\"template.title ?? i\">\r\n <rw-form\r\n [template]=\"template\"\r\n [apiName]=\"apiName()\"\r\n [rel]=\"rel()\"\r\n (afterDelete)=\"afterDelete()\"\r\n (afterSubmit)=\"afterSubmit($event)\"\r\n ></rw-form>\r\n </p-tabpanel>\r\n }\r\n @if (extraTabsRef) {\r\n <p-tabpanel value=\"Extra\">\r\n <ng-container *ngTemplateOutlet=\"extraTabsRef\"></ng-container>\r\n </p-tabpanel>\r\n }\r\n }\r\n </p-tabpanels>\r\n</p-tabs>\r\n\r\n<p-confirmDialog></p-confirmDialog>\r\n", styles: ["::ng-deep .p-tooltip{max-width:fit-content!important}.field.grid>label.hasChildren{border-right:1px solid rgba(0,0,0,.1)}\n"], dependencies: [{ kind: "component", type: RestWorldIdNavigationComponent, selector: "rw-id-navigation", inputs: ["apiName", "rel", "urlPrefix"] }, { kind: "ngmodule", type: SkeletonModule }, { kind: "component", type: i5$1.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "ngmodule", type: TabsModule }, { kind: "component", type: i6$1.Tabs, selector: "p-tabs", inputs: ["value", "scrollable", "lazy", "selectOnFocus", "showNavigators", "tabindex"], outputs: ["valueChange"] }, { kind: "component", type: i6$1.TabPanels, selector: "p-tabpanels" }, { kind: "component", type: i6$1.TabPanel, selector: "p-tabpanel", inputs: ["value"], outputs: ["valueChange"] }, { kind: "component", type: i6$1.TabList, selector: "p-tablist" }, { kind: "component", type: i6$1.Tab, selector: "p-tab", inputs: ["value", "disabled"], outputs: ["valueChange"] }, { kind: "component", type: RestWorldFormComponent, selector: "rw-form", inputs: ["allowDelete", "allowReload", "allowSubmit", "apiName", "rel", "showDelete", "showReload", "showSubmit", "template"], outputs: ["afterDelete", "afterSubmit", "templateChange", "valueChanges"] }, { kind: "ngmodule", type: ConfirmDialogModule }, { kind: "component", type: i7$1.ConfirmDialog, selector: "p-confirmDialog, p-confirmdialog, p-confirm-dialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "closeAriaLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position", "draggable"], outputs: ["onHide"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
|
|
4515
4775
|
}
|
|
4516
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
4776
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RESTworldEditViewComponent, decorators: [{
|
|
4517
4777
|
type: Component,
|
|
4518
|
-
args: [{ selector: "rw-edit", standalone: true, imports: [RestWorldIdNavigationComponent, SkeletonModule, TabsModule, RestWorldFormComponent, ConfirmDialogModule], template: "<div class=\"grid\">\r\n <div class=\"col-12 md:col-10\">\r\n <h1>Edit resource</h1>\r\n </div>\r\n <div class=\"col-12 md:col-2 align-items-center justify-content-end flex\">\r\n <rw-id-navigation [apiName]=\"apiName()\" [rel]=\"rel()\"></rw-id-navigation>\r\n </div>\r\n</div>\r\n\r\n<p-tabs [(value)]=\"displayTab\">\r\n <p-tablist>\r\n @if (templates.isLoading()) {\r\n <p-tab value=\"Loading\">Loading</p-tab>\r\n }\r\n @else {\r\n @for (template of templates.value(); track template; let i = $index) {\r\n <p-tab [value]=\"template.title ?? i\">{{template.title}}</p-tab>\r\n }\r\n @if (extraTabsRef) {\r\n <p-tab value=\"Extra\">Extra</p-tab>\r\n }\r\n }\r\n </p-tablist>\r\n <p-tabpanels>\r\n @if (templates.isLoading()) {\r\n <p-tabpanel value=\"Loading\">\r\n @for(i of [1, 2, 3, 4, 5]; track i) {\r\n <div class=\"grid field\">\r\n <p-skeleton class=\"col-12 mb-2 md:col-2 md:mb-0\" height=\"39px\"></p-skeleton>\r\n <div class=\"col-12 md:col-10\">\r\n <p-skeleton class=\"w-full\" height=\"39px\"></p-skeleton>\r\n </div>\r\n </div>\r\n }\r\n <div class=\"grid\">\r\n <div class=\"col\">\r\n <div class=\"flex justify-content-end w-full\">\r\n <p-skeleton width=\"120px\" height=\"39px\" class=\"mx-2\"></p-skeleton>\r\n <p-skeleton width=\"120px\" height=\"39px\" class=\"mx-2\"></p-skeleton>\r\n <p-skeleton width=\"120px\" height=\"39px\" class=\"mx-2\"></p-skeleton>\r\n </div>\r\n </div>\r\n </div>\r\n </p-tabpanel>\r\n }\r\n @else {\r\n @for (template of templates.value(); track template; let i = $index) {\r\n <p-tabpanel [value]=\"template.title ?? i\">\r\n <rw-form\r\n [template]=\"template\"\r\n [apiName]=\"apiName()\"\r\n [rel]=\"rel()\"\r\n (afterDelete)=\"afterDelete()\"\r\n (afterSubmit)=\"afterSubmit($event)\"\r\n ></rw-form>\r\n </p-tabpanel>\r\n }\r\n @if (extraTabsRef) {\r\n <p-tabpanel value=\"Extra\">\r\n <ng-container *ngTemplateOutlet=\"extraTabsRef\"></ng-container>\r\n </p-tabpanel>\r\n }\r\n }\r\n </p-tabpanels>\r\n</p-tabs>\r\n\r\n<p-confirmDialog></p-confirmDialog>\r\n", styles: ["::ng-deep .p-tooltip{max-width:fit-content!important}.field.grid>label.hasChildren{border-right:1px solid rgba(0,0,0,.1)}\n"] }]
|
|
4778
|
+
args: [{ selector: "rw-edit", standalone: true, imports: [RestWorldIdNavigationComponent, SkeletonModule, TabsModule, RestWorldFormComponent, ConfirmDialogModule, NgTemplateOutlet], template: "<div class=\"grid\">\r\n <div class=\"col-12 md:col-10\">\r\n <h1>Edit resource</h1>\r\n </div>\r\n <div class=\"col-12 md:col-2 align-items-center justify-content-end flex\">\r\n <rw-id-navigation [apiName]=\"apiName()\" [rel]=\"rel()\"></rw-id-navigation>\r\n </div>\r\n</div>\r\n\r\n<p-tabs [(value)]=\"displayTab\">\r\n <p-tablist>\r\n @if (templates.isLoading()) {\r\n <p-tab value=\"Loading\">Loading</p-tab>\r\n }\r\n @else {\r\n @for (template of templates.value(); track template; let i = $index) {\r\n <p-tab [value]=\"template.title ?? i\">{{template.title}}</p-tab>\r\n }\r\n @if (extraTabsRef) {\r\n <p-tab value=\"Extra\">Extra</p-tab>\r\n }\r\n }\r\n </p-tablist>\r\n <p-tabpanels>\r\n @if (templates.isLoading()) {\r\n <p-tabpanel value=\"Loading\">\r\n @for(i of [1, 2, 3, 4, 5]; track i) {\r\n <div class=\"grid field\">\r\n <p-skeleton class=\"col-12 mb-2 md:col-2 md:mb-0\" height=\"39px\"></p-skeleton>\r\n <div class=\"col-12 md:col-10\">\r\n <p-skeleton class=\"w-full\" height=\"39px\"></p-skeleton>\r\n </div>\r\n </div>\r\n }\r\n <div class=\"grid\">\r\n <div class=\"col\">\r\n <div class=\"flex justify-content-end w-full\">\r\n <p-skeleton width=\"120px\" height=\"39px\" class=\"mx-2\"></p-skeleton>\r\n <p-skeleton width=\"120px\" height=\"39px\" class=\"mx-2\"></p-skeleton>\r\n <p-skeleton width=\"120px\" height=\"39px\" class=\"mx-2\"></p-skeleton>\r\n </div>\r\n </div>\r\n </div>\r\n </p-tabpanel>\r\n }\r\n @else {\r\n @for (template of templates.value(); track template; let i = $index) {\r\n <p-tabpanel [value]=\"template.title ?? i\">\r\n <rw-form\r\n [template]=\"template\"\r\n [apiName]=\"apiName()\"\r\n [rel]=\"rel()\"\r\n (afterDelete)=\"afterDelete()\"\r\n (afterSubmit)=\"afterSubmit($event)\"\r\n ></rw-form>\r\n </p-tabpanel>\r\n }\r\n @if (extraTabsRef) {\r\n <p-tabpanel value=\"Extra\">\r\n <ng-container *ngTemplateOutlet=\"extraTabsRef\"></ng-container>\r\n </p-tabpanel>\r\n }\r\n }\r\n </p-tabpanels>\r\n</p-tabs>\r\n\r\n<p-confirmDialog></p-confirmDialog>\r\n", styles: ["::ng-deep .p-tooltip{max-width:fit-content!important}.field.grid>label.hasChildren{border-right:1px solid rgba(0,0,0,.1)}\n"] }]
|
|
4519
4779
|
}], ctorParameters: () => [{ type: RestWorldClientCollection }, { type: i2$1.MessageService }, { type: i3$4.Router }, { type: i4$3.ValdemortConfig }], propDecorators: { extraTabsRef: [{
|
|
4520
4780
|
type: ContentChild,
|
|
4521
4781
|
args: ["extraTabs", { static: false }]
|
|
@@ -4556,12 +4816,12 @@ class RESTworldListViewComponent {
|
|
|
4556
4816
|
* An array of menu items to be displayed in the create button dropdown menu.
|
|
4557
4817
|
* That is the menu at the top right of the list.
|
|
4558
4818
|
*/
|
|
4559
|
-
createButtonMenu = input();
|
|
4560
|
-
isLoading = computed(() => this.listResource.isLoading() || this.searchTemplate.isLoading());
|
|
4561
|
-
filter = model(undefined, { alias: "$filter" });
|
|
4562
|
-
orderby = model(undefined, { alias: "$orderby" });
|
|
4563
|
-
skip = model(undefined, { alias: "$skip" });
|
|
4564
|
-
top = model(undefined, { alias: "$top" });
|
|
4819
|
+
createButtonMenu = input(...(ngDevMode ? [undefined, { debugName: "createButtonMenu" }] : []));
|
|
4820
|
+
isLoading = computed(() => this.listResource.isLoading() || this.searchTemplate.isLoading(), ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
|
|
4821
|
+
filter = model(undefined, ...(ngDevMode ? [{ debugName: "filter", alias: "$filter" }] : [{ alias: "$filter" }]));
|
|
4822
|
+
orderby = model(undefined, ...(ngDevMode ? [{ debugName: "orderby", alias: "$orderby" }] : [{ alias: "$orderby" }]));
|
|
4823
|
+
skip = model(undefined, ...(ngDevMode ? [{ debugName: "skip", alias: "$skip" }] : [{ alias: "$skip" }]));
|
|
4824
|
+
top = model(undefined, ...(ngDevMode ? [{ debugName: "top", alias: "$top" }] : [{ alias: "$top" }]));
|
|
4565
4825
|
oDataParameters = linkedSignal(() => {
|
|
4566
4826
|
const parameters = {
|
|
4567
4827
|
$filter: this.filter(),
|
|
@@ -4576,7 +4836,7 @@ class RESTworldListViewComponent {
|
|
|
4576
4836
|
* Use it if you want to use a custom edit view instead of the default `RESTworldEditViewComponent`.
|
|
4577
4837
|
* @param value The new value for the edit link URL.
|
|
4578
4838
|
*/
|
|
4579
|
-
editLink = input("/edit", { transform: (value) => value ?? "/edit" });
|
|
4839
|
+
editLink = input("/edit", ...(ngDevMode ? [{ debugName: "editLink", transform: (value) => value ?? "/edit" }] : [{ transform: (value) => value ?? "/edit" }]));
|
|
4580
4840
|
headerMenu = computed(() => [
|
|
4581
4841
|
{
|
|
4582
4842
|
icon: "fas fa-plus",
|
|
@@ -4584,7 +4844,7 @@ class RESTworldListViewComponent {
|
|
|
4584
4844
|
routerLink: [this.editLink(), this.apiName(), this.rel(), this.newHref()],
|
|
4585
4845
|
items: this.createButtonMenu()
|
|
4586
4846
|
}
|
|
4587
|
-
]);
|
|
4847
|
+
], ...(ngDevMode ? [{ debugName: "headerMenu" }] : []));
|
|
4588
4848
|
rowMenu = computed(() => (row, openedByRightClick) => {
|
|
4589
4849
|
return [
|
|
4590
4850
|
{
|
|
@@ -4602,7 +4862,7 @@ class RESTworldListViewComponent {
|
|
|
4602
4862
|
command: () => this.showDeleteConfirmatioModal(row)
|
|
4603
4863
|
}
|
|
4604
4864
|
];
|
|
4605
|
-
});
|
|
4865
|
+
}, ...(ngDevMode ? [{ debugName: "rowMenu" }] : []));
|
|
4606
4866
|
static _emptylistResource = new PagedListResource({ _embedded: { items: [] }, _links: { self: [] } });
|
|
4607
4867
|
static _emptySearchTemplate = new Template({ properties: [] });
|
|
4608
4868
|
constructor(_clients, _confirmationService, _messageService, avatarGenerator, _router, _problemService) {
|
|
@@ -4620,14 +4880,14 @@ class RESTworldListViewComponent {
|
|
|
4620
4880
|
* Sets the name of the API to load and triggers a reload of the data.
|
|
4621
4881
|
* @param value The name of the API to load.
|
|
4622
4882
|
*/
|
|
4623
|
-
apiName = input();
|
|
4883
|
+
apiName = input(...(ngDevMode ? [undefined, { debugName: "apiName" }] : []));
|
|
4624
4884
|
/**
|
|
4625
4885
|
* Sets the rel value for the RESTWorld list view component.
|
|
4626
4886
|
* @param value The new rel value to set.
|
|
4627
4887
|
*/
|
|
4628
|
-
rel = input();
|
|
4629
|
-
newHref = computed(() => this.listResource.value()?.findLink('new')?.href);
|
|
4630
|
-
items = computed(() => this.listResource.value()?._embedded.items || []);
|
|
4888
|
+
rel = input(...(ngDevMode ? [undefined, { debugName: "rel" }] : []));
|
|
4889
|
+
newHref = computed(() => this.listResource.value()?.findLink('new')?.href, ...(ngDevMode ? [{ debugName: "newHref" }] : []));
|
|
4890
|
+
items = computed(() => this.listResource.value()?._embedded.items || [], ...(ngDevMode ? [{ debugName: "items" }] : []));
|
|
4631
4891
|
createNew() {
|
|
4632
4892
|
return this._router.navigate([this.editLink, this.apiName, this.rel, this.newHref]);
|
|
4633
4893
|
}
|
|
@@ -4644,12 +4904,12 @@ class RESTworldListViewComponent {
|
|
|
4644
4904
|
}
|
|
4645
4905
|
}
|
|
4646
4906
|
listResource = resource({
|
|
4647
|
-
|
|
4648
|
-
loader: async ({
|
|
4907
|
+
params: () => ({ oDataParameters: this.oDataParameters(), rel: this.rel() }),
|
|
4908
|
+
loader: async ({ params }) => {
|
|
4649
4909
|
const client = this._client();
|
|
4650
|
-
if (
|
|
4910
|
+
if (params.rel === undefined || client === undefined)
|
|
4651
4911
|
return RESTworldListViewComponent._emptylistResource;
|
|
4652
|
-
const response = await client.getList(
|
|
4912
|
+
const response = await client.getList(params.rel, params.oDataParameters);
|
|
4653
4913
|
if (this._problemService.checkResponseAndDisplayErrors(response, undefined, "Error while loading the resources from the API.", "Error")) {
|
|
4654
4914
|
return response.body;
|
|
4655
4915
|
}
|
|
@@ -4663,22 +4923,29 @@ class RESTworldListViewComponent {
|
|
|
4663
4923
|
const totalPages = listResource?.totalPages ?? 1;
|
|
4664
4924
|
const totalRecords = totalPages * rowsPerPage;
|
|
4665
4925
|
return totalRecords;
|
|
4666
|
-
});
|
|
4926
|
+
}, ...(ngDevMode ? [{ debugName: "totalRecords" }] : []));
|
|
4667
4927
|
searchTemplate = resource({
|
|
4668
|
-
|
|
4669
|
-
loader: async ({
|
|
4928
|
+
params: () => ({ resource: this.listResource.value() }),
|
|
4929
|
+
loader: async ({ params }) => {
|
|
4670
4930
|
const client = this._client();
|
|
4671
|
-
if (
|
|
4931
|
+
if (params.resource === undefined || client === undefined)
|
|
4672
4932
|
return RESTworldListViewComponent._emptySearchTemplate;
|
|
4673
4933
|
// We only want to load the template once
|
|
4674
4934
|
const currentSearchTemplate = this.searchTemplate.value();
|
|
4675
4935
|
if (currentSearchTemplate !== undefined && currentSearchTemplate !== RESTworldListViewComponent._emptySearchTemplate)
|
|
4676
4936
|
return currentSearchTemplate;
|
|
4937
|
+
// return RESTworldListViewComponent._emptySearchTemplate;
|
|
4677
4938
|
try {
|
|
4678
|
-
const templates = await client.getAllTemplates(
|
|
4939
|
+
const templates = await client.getAllTemplates(params.resource);
|
|
4940
|
+
if (ProblemDetails.isProblemDetails(templates)) {
|
|
4941
|
+
this._messageService.add({ severity: 'error', summary: 'Error', detail: `No templates found in the API response.`, data: templates });
|
|
4942
|
+
return RESTworldListViewComponent._emptySearchTemplate;
|
|
4943
|
+
}
|
|
4679
4944
|
const searchTemplate = templates["Search"];
|
|
4680
|
-
if (searchTemplate === undefined)
|
|
4681
|
-
|
|
4945
|
+
if (searchTemplate === undefined) {
|
|
4946
|
+
this._messageService.add({ severity: 'error', summary: 'Error', detail: `No "Search" template found in the API response.`, data: templates });
|
|
4947
|
+
return RESTworldListViewComponent._emptySearchTemplate;
|
|
4948
|
+
}
|
|
4682
4949
|
return searchTemplate;
|
|
4683
4950
|
}
|
|
4684
4951
|
catch (e) {
|
|
@@ -4700,15 +4967,147 @@ class RESTworldListViewComponent {
|
|
|
4700
4967
|
if (apiName === undefined)
|
|
4701
4968
|
return undefined;
|
|
4702
4969
|
return this._clients.getClient(apiName);
|
|
4703
|
-
});
|
|
4704
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
4705
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
4970
|
+
}, ...(ngDevMode ? [{ debugName: "_client" }] : []));
|
|
4971
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RESTworldListViewComponent, deps: [{ token: RestWorldClientCollection }, { token: i2$1.ConfirmationService }, { token: i2$1.MessageService }, { token: AvatarGenerator }, { token: i3$4.Router }, { token: ProblemService }], target: i0.ɵɵFactoryTarget.Component });
|
|
4972
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: RESTworldListViewComponent, isStandalone: true, selector: "rw-list", inputs: { createButtonMenu: { classPropertyName: "createButtonMenu", publicName: "createButtonMenu", isSignal: true, isRequired: false, transformFunction: null }, filter: { classPropertyName: "filter", publicName: "$filter", isSignal: true, isRequired: false, transformFunction: null }, orderby: { classPropertyName: "orderby", publicName: "$orderby", isSignal: true, isRequired: false, transformFunction: null }, skip: { classPropertyName: "skip", publicName: "$skip", isSignal: true, isRequired: false, transformFunction: null }, top: { classPropertyName: "top", publicName: "$top", isSignal: true, isRequired: false, transformFunction: null }, editLink: { classPropertyName: "editLink", publicName: "editLink", isSignal: true, isRequired: false, transformFunction: null }, apiName: { classPropertyName: "apiName", publicName: "apiName", isSignal: true, isRequired: false, transformFunction: null }, rel: { classPropertyName: "rel", publicName: "rel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { filter: "$filterChange", orderby: "$orderbyChange", skip: "$skipChange", top: "$topChange" }, ngImport: i0, template: "@let search = searchTemplate.value();\r\n@let api = apiName();\r\n@if (search && api) {\r\n <rw-table\r\n [apiName]=\"api\"\r\n [searchTemplate]=\"search\"\r\n [rows]=\"items()\"\r\n [headerMenu]=\"headerMenu()\"\r\n [rowMenu]=\"rowMenu()\"\r\n [totalRecords]=\"totalRecords()\"\r\n [isLoading]=\"isLoading()\"\r\n >\r\n </rw-table>\r\n}\r\n<p-confirmDialog></p-confirmDialog>\r\n", styles: [".p-tooltip{max-width:fit-content}a.p-button{text-decoration:none}\n"], dependencies: [{ kind: "component", type: RestWorldTableComponent, selector: "rw-table", inputs: ["apiName", "cellStyleClass", "editTemplate", "headerMenu", "isLoading", "lazy", "paginator", "oDataParameters", "reflectParametersInUrl", "rowHover", "rowMenu", "rowStyleClass", "rows", "rowsPerPageOptions", "scrollHeight", "scrollable", "searchTemplate", "selectedRows", "selectionMode", "showRowMenuAsColumn", "showRowMenuOnRightClick", "styleClass", "tableStyle", "totalRecords", "urlParameterPrefix"], outputs: ["oDataParametersChange", "selectedRowsChange"] }, { kind: "ngmodule", type: ConfirmDialogModule }, { kind: "component", type: i7$1.ConfirmDialog, selector: "p-confirmDialog, p-confirmdialog, p-confirm-dialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "closeAriaLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position", "draggable"], outputs: ["onHide"] }] });
|
|
4706
4973
|
}
|
|
4707
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
4974
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RESTworldListViewComponent, decorators: [{
|
|
4708
4975
|
type: Component,
|
|
4709
4976
|
args: [{ selector: 'rw-list', standalone: true, imports: [RestWorldTableComponent, ConfirmDialogModule], template: "@let search = searchTemplate.value();\r\n@let api = apiName();\r\n@if (search && api) {\r\n <rw-table\r\n [apiName]=\"api\"\r\n [searchTemplate]=\"search\"\r\n [rows]=\"items()\"\r\n [headerMenu]=\"headerMenu()\"\r\n [rowMenu]=\"rowMenu()\"\r\n [totalRecords]=\"totalRecords()\"\r\n [isLoading]=\"isLoading()\"\r\n >\r\n </rw-table>\r\n}\r\n<p-confirmDialog></p-confirmDialog>\r\n", styles: [".p-tooltip{max-width:fit-content}a.p-button{text-decoration:none}\n"] }]
|
|
4710
4977
|
}], ctorParameters: () => [{ type: RestWorldClientCollection }, { type: i2$1.ConfirmationService }, { type: i2$1.MessageService }, { type: AvatarGenerator }, { type: i3$4.Router }, { type: ProblemService }] });
|
|
4711
4978
|
|
|
4979
|
+
/**
|
|
4980
|
+
* This is an HttpInterceptor that ensures all HttpClient requests
|
|
4981
|
+
* are properly associated with the current navigation span.
|
|
4982
|
+
*/
|
|
4983
|
+
class OpenTelemetryHttpInterceptor {
|
|
4984
|
+
_telemetryService;
|
|
4985
|
+
constructor(_telemetryService) {
|
|
4986
|
+
this._telemetryService = _telemetryService;
|
|
4987
|
+
}
|
|
4988
|
+
intercept(request, next) {
|
|
4989
|
+
// Get the active context from the OpenTelemetryService
|
|
4990
|
+
const activeContext = this._telemetryService.getActiveContext();
|
|
4991
|
+
// If we have an active navigation context, create a child span for this HTTP request
|
|
4992
|
+
if (activeContext && this._telemetryService.getTracer()) {
|
|
4993
|
+
// Execute within the active context to ensure proper parenting
|
|
4994
|
+
return context.with(activeContext, () => {
|
|
4995
|
+
// Extract span information from the request
|
|
4996
|
+
const url = new URL(request.url, window.location.origin);
|
|
4997
|
+
const method = request.method;
|
|
4998
|
+
const spanName = `${method} ${url.pathname}`;
|
|
4999
|
+
// Get tracer from the telemetry service to create a span
|
|
5000
|
+
const tracer = this._telemetryService.getTracer();
|
|
5001
|
+
// Create attributes for the span, handling null values from headers
|
|
5002
|
+
const contentLength = request.headers.get('Content-Length');
|
|
5003
|
+
const contentType = request.headers.get('Content-Type');
|
|
5004
|
+
const attributes = {
|
|
5005
|
+
[ATTR_HTTP_REQUEST_METHOD]: method,
|
|
5006
|
+
[ATTR_URL_FULL]: request.url,
|
|
5007
|
+
[ATTR_URL_PATH]: url.pathname,
|
|
5008
|
+
[ATTR_URL_QUERY]: url.search.replace('?', ''),
|
|
5009
|
+
[ATTR_URL_SCHEME]: url.protocol.replace(':', ''),
|
|
5010
|
+
"url.host": url.host,
|
|
5011
|
+
"http.user_agent": navigator.userAgent,
|
|
5012
|
+
[ATTR_CLIENT_ADDRESS]: window.location.href,
|
|
5013
|
+
[ATTR_CLIENT_PORT]: window.location.port,
|
|
5014
|
+
[ATTR_HTTP_REQUEST_HEADER("accept")]: request.headers.get('Accept') ?? undefined,
|
|
5015
|
+
[ATTR_HTTP_REQUEST_HEADER("accept-language")]: request.headers.get('Accept-Language') ?? undefined,
|
|
5016
|
+
"http.request.body.size": contentLength ?? undefined,
|
|
5017
|
+
[ATTR_HTTP_REQUEST_HEADER("content-type")]: contentType ?? undefined,
|
|
5018
|
+
[ATTR_SERVICE_NAME]: 'ngx-restworld-client'
|
|
5019
|
+
};
|
|
5020
|
+
// Start a new span for this HTTP request
|
|
5021
|
+
const span = tracer.startSpan(spanName, {
|
|
5022
|
+
kind: SpanKind.CLIENT,
|
|
5023
|
+
attributes
|
|
5024
|
+
});
|
|
5025
|
+
// Create a context with the current span
|
|
5026
|
+
const spanContext = trace.setSpan(context.active(), span);
|
|
5027
|
+
// Create a carrier object for W3C trace context headers
|
|
5028
|
+
const carrier = {};
|
|
5029
|
+
// Inject trace context headers into the carrier
|
|
5030
|
+
propagation.inject(spanContext, carrier);
|
|
5031
|
+
// Clone the request with the added W3C trace context headers
|
|
5032
|
+
let headers = request.headers;
|
|
5033
|
+
Object.entries(carrier).forEach(([key, value]) => {
|
|
5034
|
+
headers = headers.set(key, value);
|
|
5035
|
+
});
|
|
5036
|
+
// Create the traced request with the W3C headers
|
|
5037
|
+
const tracedRequest = request.clone({ headers });
|
|
5038
|
+
// Use with() to make this span active during request execution
|
|
5039
|
+
return context.with(spanContext, () => {
|
|
5040
|
+
// Handle the request and observe the response
|
|
5041
|
+
return next.handle(tracedRequest).pipe(
|
|
5042
|
+
// Use operators to capture response or error before completing the span
|
|
5043
|
+
tap({
|
|
5044
|
+
next: (event) => {
|
|
5045
|
+
if (event.type === HttpEventType.Response) {
|
|
5046
|
+
const response = event;
|
|
5047
|
+
const responseAttrs = {
|
|
5048
|
+
[ATTR_HTTP_RESPONSE_STATUS_CODE]: response.status
|
|
5049
|
+
};
|
|
5050
|
+
// Only add response header values if they exist
|
|
5051
|
+
const respContentLength = response.headers.get('Content-Length');
|
|
5052
|
+
const respContentType = response.headers.get('Content-Type');
|
|
5053
|
+
if (respContentLength)
|
|
5054
|
+
responseAttrs["http.response.body.size"] = respContentLength;
|
|
5055
|
+
if (respContentType)
|
|
5056
|
+
responseAttrs[ATTR_HTTP_RESPONSE_HEADER("content-type")] = respContentType;
|
|
5057
|
+
// Add response attributes to the span
|
|
5058
|
+
span.setAttributes(responseAttrs);
|
|
5059
|
+
span.setStatus({
|
|
5060
|
+
code: response.ok ? SpanStatusCode.OK : SpanStatusCode.ERROR
|
|
5061
|
+
});
|
|
5062
|
+
// End the span when we get the full response
|
|
5063
|
+
span.end();
|
|
5064
|
+
}
|
|
5065
|
+
},
|
|
5066
|
+
error: (error) => {
|
|
5067
|
+
// Record the error and end the span
|
|
5068
|
+
span.setStatus({
|
|
5069
|
+
code: SpanStatusCode.ERROR,
|
|
5070
|
+
message: error.message || 'Http request failed'
|
|
5071
|
+
});
|
|
5072
|
+
span.recordException(error);
|
|
5073
|
+
span.end();
|
|
5074
|
+
}
|
|
5075
|
+
}),
|
|
5076
|
+
// Make sure the span ends even if the observable completes without going through our tap handlers
|
|
5077
|
+
finalize(() => {
|
|
5078
|
+
if (span) {
|
|
5079
|
+
// Only end if not already ended in the tap handlers
|
|
5080
|
+
try {
|
|
5081
|
+
span.end();
|
|
5082
|
+
}
|
|
5083
|
+
catch (e) {
|
|
5084
|
+
// Ignore errors from ending an already-ended span
|
|
5085
|
+
}
|
|
5086
|
+
}
|
|
5087
|
+
}));
|
|
5088
|
+
});
|
|
5089
|
+
});
|
|
5090
|
+
}
|
|
5091
|
+
// No active context, just proceed with the request without tracing
|
|
5092
|
+
return next.handle(request);
|
|
5093
|
+
}
|
|
5094
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: OpenTelemetryHttpInterceptor, deps: [{ token: OpenTelemetryService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
5095
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: OpenTelemetryHttpInterceptor });
|
|
5096
|
+
}
|
|
5097
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: OpenTelemetryHttpInterceptor, decorators: [{
|
|
5098
|
+
type: Injectable
|
|
5099
|
+
}], ctorParameters: () => [{ type: OpenTelemetryService }] });
|
|
5100
|
+
/**
|
|
5101
|
+
* Provider for the OpenTelemetry HTTP interceptor.
|
|
5102
|
+
* This interceptor ensures that HttpClient requests are properly
|
|
5103
|
+
* associated with the current navigation span.
|
|
5104
|
+
*/
|
|
5105
|
+
const OPENTELEMETRY_HTTP_INTERCEPTOR_PROVIDER = {
|
|
5106
|
+
provide: HTTP_INTERCEPTORS,
|
|
5107
|
+
useClass: OpenTelemetryHttpInterceptor,
|
|
5108
|
+
multi: true
|
|
5109
|
+
};
|
|
5110
|
+
|
|
4712
5111
|
/**
|
|
4713
5112
|
* Povides the RESTworld functionality to the application.
|
|
4714
5113
|
* This includes the RestWorldClientCollection, the SettingsService and the OpenTelemetryService.
|
|
@@ -4739,7 +5138,11 @@ function provideRestWorld(ngHttpCachingConfig) {
|
|
|
4739
5138
|
await opentelemetryService.initialize();
|
|
4740
5139
|
});
|
|
4741
5140
|
const cachingProviders = provideNgHttpCaching(mergedCachingConfig);
|
|
4742
|
-
const allProviders = [
|
|
5141
|
+
const allProviders = [
|
|
5142
|
+
restWorldInitializer,
|
|
5143
|
+
cachingProviders,
|
|
5144
|
+
OPENTELEMETRY_HTTP_INTERCEPTOR_PROVIDER
|
|
5145
|
+
];
|
|
4743
5146
|
return allProviders;
|
|
4744
5147
|
}
|
|
4745
5148
|
/**
|