@sumaris-net/ngx-components 1.22.12 → 1.23.0-rc1
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/bundles/sumaris-net.ngx-components.umd.js +510 -436
- package/bundles/sumaris-net.ngx-components.umd.js.map +1 -1
- package/bundles/sumaris-net.ngx-components.umd.min.js +2 -2
- package/bundles/sumaris-net.ngx-components.umd.min.js.map +1 -1
- package/esm2015/src/app/core/services/local-settings.service.js +2 -2
- package/esm2015/src/app/core/services/platform.service.js +4 -2
- package/esm2015/src/app/core/table/entities-table-datasource.class.js +104 -98
- package/esm2015/src/app/core/table/memory-table.class.js +3 -3
- package/esm2015/src/app/core/table/table.class.js +3 -3
- package/esm2015/src/app/core/table/testing/table.testing.js +16 -21
- package/esm2015/src/app/shared/functions.js +11 -1
- package/esm2015/src/app/shared/services/memory-entity-service.class.js +44 -18
- package/fesm2015/sumaris-net.ngx-components.js +422 -368
- package/fesm2015/sumaris-net.ngx-components.js.map +1 -1
- package/package.json +1 -1
- package/src/app/core/table/entities-table-datasource.class.d.ts +17 -25
- package/src/app/core/table/memory-table.class.d.ts +2 -2
- package/src/app/core/table/testing/table.testing.d.ts +5 -3
- package/src/app/shared/functions.d.ts +6 -0
- package/src/app/shared/services/memory-entity-service.class.d.ts +2 -1
- package/sumaris-net.ngx-components.metadata.json +1 -1
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { InjectionToken, EventEmitter, Component, forwardRef, ChangeDetectionStrategy, ChangeDetectorRef, Optional, Input, Output, ViewChild, Pipe, Injectable, Directive, Inject, NgModule, ElementRef, TemplateRef, ViewContainerRef, HostBinding, HostListener, ViewChildren, ComponentFactoryResolver, ApplicationRef, Injector, Renderer2, ViewEncapsulation } from '@angular/core';
|
|
3
|
+
import * as i1$3 from '@angular/common';
|
|
2
4
|
import { CommonModule, DOCUMENT, Location } from '@angular/common';
|
|
3
5
|
import { CdkTableModule } from '@angular/cdk/table';
|
|
4
6
|
import { A11yModule } from '@angular/cdk/a11y';
|
|
5
7
|
import { OverlayModule, OverlayContainer, FullscreenOverlayContainer, Overlay } from '@angular/cdk/overlay';
|
|
6
8
|
import { ScrollingModule } from '@angular/cdk/scrolling';
|
|
9
|
+
import * as i1$2 from '@angular/material/core';
|
|
7
10
|
import { DateAdapter, MatCommonModule, MatRippleModule } from '@angular/material/core';
|
|
8
11
|
import { MatTableModule, MatColumnDef, MatTable } from '@angular/material/table';
|
|
9
12
|
import { MatSortModule, MatSort } from '@angular/material/sort';
|
|
@@ -27,17 +30,22 @@ import { MatProgressBarModule } from '@angular/material/progress-bar';
|
|
|
27
30
|
import { MatRadioModule } from '@angular/material/radio';
|
|
28
31
|
import { MatBadgeModule } from '@angular/material/badge';
|
|
29
32
|
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
|
|
33
|
+
import * as i2$1 from '@angular/material/dialog';
|
|
30
34
|
import { MatDialogModule, MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';
|
|
31
35
|
import { MatAutocomplete, MatAutocompleteTrigger, MatAutocompleteModule, MAT_AUTOCOMPLETE_SCROLL_STRATEGY, MAT_AUTOCOMPLETE_DEFAULT_OPTIONS } from '@angular/material/autocomplete';
|
|
32
36
|
import { __awaiter, __decorate } from 'tslib';
|
|
37
|
+
import * as i1$6 from '@angular/forms';
|
|
33
38
|
import { Validators, NG_VALUE_ACCESSOR, FormGroupDirective, AbstractControl, FormGroup, FormArray, FormControl, ReactiveFormsModule, FormBuilder } from '@angular/forms';
|
|
34
39
|
import { timer, merge, fromEvent, BehaviorSubject, Subscription, Subject, isObservable, from, of, noop as noop$9, Observable, defer, forkJoin, interval, combineLatest, EMPTY } from 'rxjs';
|
|
35
40
|
import { filter, first, map, takeUntil, switchMap, tap, debounceTime, startWith, distinctUntilChanged, mergeMap, catchError, throttleTime, skip, bufferWhen, take } from 'rxjs/operators';
|
|
36
41
|
import { trigger, transition, style, animate, state } from '@angular/animations';
|
|
42
|
+
import * as i1$1 from '@ngx-translate/core';
|
|
37
43
|
import { TranslateService, TranslateModule } from '@ngx-translate/core';
|
|
44
|
+
import * as i1$4 from '@ionic/angular';
|
|
38
45
|
import { IonicModule, Platform, IonRouterOutlet, ModalController, PopoverController, IonicSafeString, createAnimation, ToastController, AlertController, IonicRouteStrategy, NavParams, MenuController, IonContent, IonItem, IonInfiniteScroll } from '@ionic/angular';
|
|
39
46
|
import * as momentImported from 'moment';
|
|
40
47
|
import { isMoment } from 'moment';
|
|
48
|
+
import * as i1 from '@angular/material-moment-adapter';
|
|
41
49
|
import { MomentDateAdapter, MatMomentDateModule } from '@angular/material-moment-adapter';
|
|
42
50
|
import { Keyboard } from '@ionic-native/keyboard/ngx';
|
|
43
51
|
import { TextMaskModule } from 'angular2-text-mask';
|
|
@@ -46,33 +54,39 @@ import { MatDatepickerModule } from '@angular/material/datepicker';
|
|
|
46
54
|
import { MatDividerModule } from '@angular/material/divider';
|
|
47
55
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
48
56
|
import { MatChipsModule } from '@angular/material/chips';
|
|
57
|
+
import * as i3$3 from '@angular/router';
|
|
49
58
|
import { ActivatedRoute, Router, RouterModule, RouteReuseStrategy } from '@angular/router';
|
|
59
|
+
import * as i1$5 from '@angular/platform-browser';
|
|
50
60
|
import { HammerGestureConfig, EventManager } from '@angular/platform-browser';
|
|
61
|
+
import * as i2$2 from '@angular/common/http';
|
|
51
62
|
import { HttpResponse, HttpEventType, HttpClient, HttpHeaders, HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';
|
|
52
63
|
import { ColorPickerModule } from 'ngx-color-picker';
|
|
53
|
-
import { NativeAudio
|
|
54
|
-
import { Vibration
|
|
64
|
+
import { NativeAudio } from '@ionic-native/native-audio/ngx';
|
|
65
|
+
import { Vibration } from '@ionic-native/vibration/ngx';
|
|
55
66
|
import { AudioManagement } from '@ionic-native/audio-management/ngx';
|
|
56
|
-
import
|
|
57
|
-
import
|
|
58
|
-
import
|
|
67
|
+
import * as i2 from '@ionic-native/native-audio/ngx/index';
|
|
68
|
+
import * as i3 from '@ionic-native/vibration/ngx/index';
|
|
69
|
+
import * as i4 from '@ionic-native/audio-management/ngx/index';
|
|
59
70
|
import * as uuidv4Imported from 'uuid/v4';
|
|
60
71
|
import { mergeMap as mergeMap$1 } from 'rxjs/internal/operators';
|
|
61
72
|
import { DragDropModule } from '@angular/cdk/drag-drop';
|
|
62
73
|
import { MarkdownModule } from 'ngx-markdown';
|
|
63
74
|
import { sign, box, hash, verify } from 'tweetnacl';
|
|
75
|
+
import * as i3$1 from '@ionic/storage';
|
|
64
76
|
import { Storage, IonicStorageModule } from '@ionic/storage';
|
|
65
77
|
import 'zone.js/dist/zone-error';
|
|
66
|
-
import { SplashScreen
|
|
67
|
-
import { Connection, Network
|
|
68
|
-
import { CacheService
|
|
69
|
-
import
|
|
70
|
-
import
|
|
71
|
-
import
|
|
72
|
-
import { StatusBar
|
|
78
|
+
import { SplashScreen } from '@ionic-native/splash-screen/ngx';
|
|
79
|
+
import { Connection, Network } from '@ionic-native/network/ngx';
|
|
80
|
+
import { CacheService, CacheModule } from 'ionic-cache';
|
|
81
|
+
import * as i6 from 'ionic-cache/dist/cache.service';
|
|
82
|
+
import * as i9 from '@ionic-native/network/ngx/index';
|
|
83
|
+
import * as i10 from '@ionic-native/splash-screen/ngx/index';
|
|
84
|
+
import { StatusBar } from '@ionic-native/status-bar/ngx';
|
|
85
|
+
import * as i2$4 from '@angular/cdk/platform';
|
|
73
86
|
import { Platform as Platform$1 } from '@angular/cdk/platform';
|
|
74
|
-
import { InAppBrowser
|
|
87
|
+
import { InAppBrowser } from '@ionic-native/in-app-browser/ngx';
|
|
75
88
|
import { ApolloLink, NetworkStatus, InMemoryCache, ApolloClient, gql } from '@apollo/client/core';
|
|
89
|
+
import * as i2$3 from 'apollo-angular';
|
|
76
90
|
import { Apollo } from 'apollo-angular';
|
|
77
91
|
import { WebSocketLink } from '@apollo/client/link/ws';
|
|
78
92
|
import { getMainDefinition } from '@apollo/client/utilities';
|
|
@@ -80,13 +94,14 @@ import { RetryLink } from '@apollo/client/link/retry';
|
|
|
80
94
|
import QueueLink from 'apollo-link-queue';
|
|
81
95
|
import SerializingLink from 'apollo-link-serialize';
|
|
82
96
|
import loggerLink from 'apollo-link-logger';
|
|
97
|
+
import * as i3$2 from 'apollo-angular/http';
|
|
83
98
|
import { HttpLink } from 'apollo-angular/http';
|
|
84
99
|
import { IonicStorageWrapper, persistCache } from 'apollo3-cache-persist';
|
|
85
|
-
import { NotificationVisibility, Downloader
|
|
86
|
-
import
|
|
87
|
-
import
|
|
88
|
-
import
|
|
89
|
-
import
|
|
100
|
+
import { NotificationVisibility, Downloader } from '@ionic-native/downloader/ngx';
|
|
101
|
+
import * as i14 from '@ionic-native/status-bar/ngx/index';
|
|
102
|
+
import * as i15 from '@ionic-native/keyboard/ngx/index';
|
|
103
|
+
import * as i17 from '@ionic-native/in-app-browser/ngx/index';
|
|
104
|
+
import * as i18 from '@ionic-native/downloader/ngx/index';
|
|
90
105
|
import { CdkTextareaAutosize } from '@angular/cdk/text-field';
|
|
91
106
|
import { ValidatorService, TableDataSource } from '@e-is/ngx-material-table';
|
|
92
107
|
import { SelectionModel } from '@angular/cdk/collections';
|
|
@@ -480,6 +495,7 @@ function equals(o1, o2) {
|
|
|
480
495
|
}
|
|
481
496
|
return false;
|
|
482
497
|
}
|
|
498
|
+
// @dynamic
|
|
483
499
|
class Beans {
|
|
484
500
|
/**
|
|
485
501
|
* Copy a source object, by including only properties of the given dataType.
|
|
@@ -513,6 +529,15 @@ class Beans {
|
|
|
513
529
|
return isNotNil(value);
|
|
514
530
|
}) === -1;
|
|
515
531
|
}
|
|
532
|
+
static collectById(array) {
|
|
533
|
+
return this.collectByProperty(array, 'id');
|
|
534
|
+
}
|
|
535
|
+
static collectByProperty(array, propertyName) {
|
|
536
|
+
return (array || []).reduce((res, item) => {
|
|
537
|
+
res['' + propertyName] = item;
|
|
538
|
+
return res;
|
|
539
|
+
}, {});
|
|
540
|
+
}
|
|
516
541
|
}
|
|
517
542
|
|
|
518
543
|
function isFocusableElement(object) {
|
|
@@ -1036,7 +1061,7 @@ const isIpad = (win) => {
|
|
|
1036
1061
|
}
|
|
1037
1062
|
return false;
|
|
1038
1063
|
};
|
|
1039
|
-
const ɵ0 = isIpad;
|
|
1064
|
+
const ɵ0$c = isIpad;
|
|
1040
1065
|
const isIOS = (win) => testUserAgent(win, /iPhone|iPod/i) || isIpad(win);
|
|
1041
1066
|
const isAndroid = (win) => testUserAgent(win, /android|sink/i);
|
|
1042
1067
|
const isCordova = (win) => {
|
|
@@ -1168,14 +1193,14 @@ class MatAutocompleteFieldUtils {
|
|
|
1168
1193
|
return isNotNil(o1 === null || o1 === void 0 ? void 0 : o1.id) && o1.id === (o2 === null || o2 === void 0 ? void 0 : o2.id);
|
|
1169
1194
|
}
|
|
1170
1195
|
}
|
|
1171
|
-
const noop = (_) => { };
|
|
1172
|
-
const ɵ0$
|
|
1196
|
+
const noop$8 = (_) => { };
|
|
1197
|
+
const ɵ0$b = noop$8;
|
|
1173
1198
|
class MatAutocompleteField {
|
|
1174
1199
|
constructor(cd, formGroupDir) {
|
|
1175
1200
|
this.cd = cd;
|
|
1176
1201
|
this.formGroupDir = formGroupDir;
|
|
1177
|
-
this._onChangeCallback = noop;
|
|
1178
|
-
this._onTouchedCallback = noop;
|
|
1202
|
+
this._onChangeCallback = noop$8;
|
|
1203
|
+
this._onTouchedCallback = noop$8;
|
|
1179
1204
|
this.logPrefix = '[mat-autocomplete] ';
|
|
1180
1205
|
this.formControlName = null;
|
|
1181
1206
|
this.required = false;
|
|
@@ -1948,7 +1973,7 @@ class DateFormatPipe {
|
|
|
1948
1973
|
return isMoment(value) ? value : this.dateAdapter.parse(value, parseFormat || DATE_ISO_PATTERN);
|
|
1949
1974
|
}
|
|
1950
1975
|
}
|
|
1951
|
-
DateFormatPipe.ɵprov =
|
|
1976
|
+
DateFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DateFormatPipe_Factory() { return new DateFormatPipe(i0.ɵɵinject(i1.MomentDateAdapter), i0.ɵɵinject(i1$1.TranslateService)); }, token: DateFormatPipe, providedIn: "root" });
|
|
1952
1977
|
DateFormatPipe.decorators = [
|
|
1953
1978
|
{ type: Pipe, args: [{
|
|
1954
1979
|
name: 'dateFormat'
|
|
@@ -1960,7 +1985,7 @@ DateFormatPipe.ctorParameters = () => [
|
|
|
1960
1985
|
{ type: TranslateService }
|
|
1961
1986
|
];
|
|
1962
1987
|
|
|
1963
|
-
const moment = momentImported;
|
|
1988
|
+
const moment$a = momentImported;
|
|
1964
1989
|
class DateDiffDurationPipe {
|
|
1965
1990
|
constructor(dateAdapter, translate) {
|
|
1966
1991
|
this.dateAdapter = dateAdapter;
|
|
@@ -1976,11 +2001,11 @@ class DateDiffDurationPipe {
|
|
|
1976
2001
|
return this.format(startDate, endDate, args);
|
|
1977
2002
|
}
|
|
1978
2003
|
format(startDate, endDate, args) {
|
|
1979
|
-
const duration = moment.duration(endDate.diff(startDate));
|
|
2004
|
+
const duration = moment$a.duration(endDate.diff(startDate));
|
|
1980
2005
|
if (duration.asMinutes() < 0)
|
|
1981
2006
|
return '';
|
|
1982
2007
|
const withSeconds = args === null || args === void 0 ? void 0 : args.seconds;
|
|
1983
|
-
const timeDuration = moment(0)
|
|
2008
|
+
const timeDuration = moment$a(0)
|
|
1984
2009
|
.hour(duration.hours())
|
|
1985
2010
|
.minute(duration.minutes());
|
|
1986
2011
|
if (withSeconds) {
|
|
@@ -1990,7 +2015,7 @@ class DateDiffDurationPipe {
|
|
|
1990
2015
|
return (days > 0 ? days.toString() + (this.dayUnit + ' ') : '') + timeDuration.format(withSeconds ? 'HH:mm:ss' : 'HH:mm');
|
|
1991
2016
|
}
|
|
1992
2017
|
}
|
|
1993
|
-
DateDiffDurationPipe.ɵprov =
|
|
2018
|
+
DateDiffDurationPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DateDiffDurationPipe_Factory() { return new DateDiffDurationPipe(i0.ɵɵinject(i1$2.DateAdapter), i0.ɵɵinject(i1$1.TranslateService)); }, token: DateDiffDurationPipe, providedIn: "root" });
|
|
1994
2019
|
DateDiffDurationPipe.decorators = [
|
|
1995
2020
|
{ type: Pipe, args: [{
|
|
1996
2021
|
name: 'dateDiffDuration'
|
|
@@ -2011,7 +2036,7 @@ class DateFromNowPipe {
|
|
|
2011
2036
|
return date ? date.fromNow(args && args.withoutSuffix) : '';
|
|
2012
2037
|
}
|
|
2013
2038
|
}
|
|
2014
|
-
DateFromNowPipe.ɵprov =
|
|
2039
|
+
DateFromNowPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DateFromNowPipe_Factory() { return new DateFromNowPipe(i0.ɵɵinject(i1.MomentDateAdapter)); }, token: DateFromNowPipe, providedIn: "root" });
|
|
2015
2040
|
DateFromNowPipe.decorators = [
|
|
2016
2041
|
{ type: Pipe, args: [{
|
|
2017
2042
|
name: 'dateFromNow'
|
|
@@ -2080,7 +2105,7 @@ function formatToDD(value, opts) {
|
|
|
2080
2105
|
value *= -1;
|
|
2081
2106
|
}
|
|
2082
2107
|
}
|
|
2083
|
-
let degrees = roundFloat(value, opts.maxDecimals).toString();
|
|
2108
|
+
let degrees = roundFloat$1(value, opts.maxDecimals).toString();
|
|
2084
2109
|
// Add sign
|
|
2085
2110
|
let sign = negative ? '-' : '+';
|
|
2086
2111
|
if (opts.placeholderChar) {
|
|
@@ -2131,7 +2156,7 @@ function formatToDDMMSS(value, opts) {
|
|
|
2131
2156
|
}
|
|
2132
2157
|
let degrees = Math.trunc(value);
|
|
2133
2158
|
let minutes = Math.trunc((value - degrees) * 60);
|
|
2134
|
-
let seconds = roundFloat(((value - degrees) * 60 - minutes) * 60, opts.maxDecimals);
|
|
2159
|
+
let seconds = roundFloat$1(((value - degrees) * 60 - minutes) * 60, opts.maxDecimals);
|
|
2135
2160
|
while (seconds >= 60) {
|
|
2136
2161
|
seconds -= 60;
|
|
2137
2162
|
minutes += 1;
|
|
@@ -2199,7 +2224,7 @@ function formatToDDMM(value, opts) {
|
|
|
2199
2224
|
}
|
|
2200
2225
|
}
|
|
2201
2226
|
let degrees = Math.trunc(value);
|
|
2202
|
-
let minutes = roundFloat((value - degrees) * 60, opts.maxDecimals);
|
|
2227
|
+
let minutes = roundFloat$1((value - degrees) * 60, opts.maxDecimals);
|
|
2203
2228
|
while (minutes >= 60) {
|
|
2204
2229
|
minutes -= 60;
|
|
2205
2230
|
degrees += 1;
|
|
@@ -2250,15 +2275,15 @@ function parseLatitudeOrLongitude(input, pattern, maxDecimals, placeholderChar)
|
|
|
2250
2275
|
return NaN;
|
|
2251
2276
|
}
|
|
2252
2277
|
if (pattern === 'DD')
|
|
2253
|
-
return roundFloat(degrees, maxDecimals);
|
|
2278
|
+
return roundFloat$1(degrees, maxDecimals);
|
|
2254
2279
|
const minutes = (pattern === 'DDMMSS' || pattern === 'DDMM') && parts[1] && parseFloat(parts[1].replace(/,/g, '.')) || 0;
|
|
2255
2280
|
const seconds = (pattern === 'DDMMSS') && parts[2] && parseFloat(parts[2].replace(/,/g, '.')) || 0;
|
|
2256
2281
|
const direction = ((pattern === 'DDMMSS') && parts[3]) || ((pattern === 'DDMM') && parts[2]) || undefined;
|
|
2257
2282
|
const sign = (direction && (direction === 's' || direction === 'S' || direction === 'w' || direction === 'W')) ? -1 : 1;
|
|
2258
2283
|
degrees = sign * (degrees + minutes / 60 + seconds / (60 * 60));
|
|
2259
|
-
return roundFloat(degrees, maxDecimals);
|
|
2284
|
+
return roundFloat$1(degrees, maxDecimals);
|
|
2260
2285
|
}
|
|
2261
|
-
function roundFloat(input, maxDecimals) {
|
|
2286
|
+
function roundFloat$1(input, maxDecimals) {
|
|
2262
2287
|
if (maxDecimals > 0) {
|
|
2263
2288
|
const powDecimal = Math.pow(10, maxDecimals);
|
|
2264
2289
|
return Math.trunc(input * powDecimal + 0.5) / powDecimal;
|
|
@@ -2319,7 +2344,7 @@ class NumberFormatPipe {
|
|
|
2319
2344
|
}
|
|
2320
2345
|
}
|
|
2321
2346
|
}
|
|
2322
|
-
NumberFormatPipe.ɵprov =
|
|
2347
|
+
NumberFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function NumberFormatPipe_Factory() { return new NumberFormatPipe(); }, token: NumberFormatPipe, providedIn: "root" });
|
|
2323
2348
|
NumberFormatPipe.decorators = [
|
|
2324
2349
|
{ type: Pipe, args: [{
|
|
2325
2350
|
name: 'numberFormat'
|
|
@@ -2359,7 +2384,7 @@ class HighlightPipe {
|
|
|
2359
2384
|
}
|
|
2360
2385
|
}
|
|
2361
2386
|
}
|
|
2362
|
-
HighlightPipe.ɵprov =
|
|
2387
|
+
HighlightPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function HighlightPipe_Factory() { return new HighlightPipe(); }, token: HighlightPipe, providedIn: "root" });
|
|
2363
2388
|
HighlightPipe.decorators = [
|
|
2364
2389
|
{ type: Pipe, args: [{
|
|
2365
2390
|
name: 'highlight'
|
|
@@ -2424,7 +2449,7 @@ FileSizePipe.decorators = [
|
|
|
2424
2449
|
{ type: Pipe, args: [{ name: 'fileSize' },] }
|
|
2425
2450
|
];
|
|
2426
2451
|
|
|
2427
|
-
const moment$
|
|
2452
|
+
const moment$9 = momentImported;
|
|
2428
2453
|
const DATE_UNIX_TIMESTAMP = 'X';
|
|
2429
2454
|
const DATE_UNIX_MS_TIMESTAMP = 'x';
|
|
2430
2455
|
const MOMENT_NO_TIME_PROPERTY = '_hasNoTime';
|
|
@@ -2513,37 +2538,37 @@ function fromDateISOString(value) {
|
|
|
2513
2538
|
return value;
|
|
2514
2539
|
if (typeof value === 'string' && value.length === 10) {
|
|
2515
2540
|
// Parse the input value, as a date only
|
|
2516
|
-
const dateOnly = moment$
|
|
2541
|
+
const dateOnly = moment$9(value, DATE_PATTERN);
|
|
2517
2542
|
if (dateOnly.isValid())
|
|
2518
2543
|
return DateUtils.markNoTime(dateOnly);
|
|
2519
2544
|
}
|
|
2520
2545
|
// Parse the input value, as a ISO date time
|
|
2521
|
-
const date = moment$
|
|
2546
|
+
const date = moment$9(value, DATE_ISO_PATTERN);
|
|
2522
2547
|
if (date.isValid())
|
|
2523
2548
|
return date;
|
|
2524
2549
|
// Not valid: trying to convert from unix timestamp
|
|
2525
2550
|
if (typeof value === 'string') {
|
|
2526
2551
|
console.warn('Wrong date format - Trying to convert from local time: ' + value);
|
|
2527
2552
|
if (value.length === 10) {
|
|
2528
|
-
return moment$
|
|
2553
|
+
return moment$9(value, DATE_UNIX_TIMESTAMP);
|
|
2529
2554
|
}
|
|
2530
2555
|
else if (value.length === 13) {
|
|
2531
|
-
return moment$
|
|
2556
|
+
return moment$9(value, DATE_UNIX_MS_TIMESTAMP);
|
|
2532
2557
|
}
|
|
2533
2558
|
}
|
|
2534
2559
|
console.warn('Unable to parse date: ' + value);
|
|
2535
2560
|
return undefined;
|
|
2536
2561
|
}
|
|
2537
2562
|
function fromUnixTimestamp(timeInSec) {
|
|
2538
|
-
return moment$
|
|
2563
|
+
return moment$9(timeInSec, DATE_UNIX_TIMESTAMP);
|
|
2539
2564
|
}
|
|
2540
2565
|
function fromUnixMsTimestamp(timeInMs) {
|
|
2541
|
-
return moment$
|
|
2566
|
+
return moment$9(timeInMs, DATE_UNIX_MS_TIMESTAMP);
|
|
2542
2567
|
}
|
|
2543
2568
|
function toDuration(value, unit) {
|
|
2544
2569
|
if (!value)
|
|
2545
2570
|
return undefined;
|
|
2546
|
-
const duration = moment$
|
|
2571
|
+
const duration = moment$9.duration(value, unit);
|
|
2547
2572
|
// fix 990+ ms
|
|
2548
2573
|
if (duration.milliseconds() >= 990) {
|
|
2549
2574
|
duration.add(1000 - duration.milliseconds(), 'ms');
|
|
@@ -2572,7 +2597,7 @@ class DurationPipe {
|
|
|
2572
2597
|
return (days > 0 ? days.toString() + (this.dayUnit + ' ') : '') + hour + ':' + minute;
|
|
2573
2598
|
}
|
|
2574
2599
|
}
|
|
2575
|
-
DurationPipe.ɵprov =
|
|
2600
|
+
DurationPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DurationPipe_Factory() { return new DurationPipe(i0.ɵɵinject(i1$1.TranslateService)); }, token: DurationPipe, providedIn: "root" });
|
|
2576
2601
|
DurationPipe.decorators = [
|
|
2577
2602
|
{ type: Pipe, args: [{
|
|
2578
2603
|
name: 'duration'
|
|
@@ -2593,7 +2618,7 @@ class MathAbsPipe {
|
|
|
2593
2618
|
}
|
|
2594
2619
|
}
|
|
2595
2620
|
}
|
|
2596
|
-
MathAbsPipe.ɵprov =
|
|
2621
|
+
MathAbsPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MathAbsPipe_Factory() { return new MathAbsPipe(); }, token: MathAbsPipe, providedIn: "root" });
|
|
2597
2622
|
MathAbsPipe.decorators = [
|
|
2598
2623
|
{ type: Pipe, args: [{
|
|
2599
2624
|
name: 'mathAbs'
|
|
@@ -2605,7 +2630,7 @@ class EvenPipe {
|
|
|
2605
2630
|
return val % 2 === 0;
|
|
2606
2631
|
}
|
|
2607
2632
|
}
|
|
2608
|
-
EvenPipe.ɵprov =
|
|
2633
|
+
EvenPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function EvenPipe_Factory() { return new EvenPipe(); }, token: EvenPipe, providedIn: "root" });
|
|
2609
2634
|
EvenPipe.decorators = [
|
|
2610
2635
|
{ type: Pipe, args: [{
|
|
2611
2636
|
name: 'even'
|
|
@@ -2617,7 +2642,7 @@ class OddPipe {
|
|
|
2617
2642
|
return val % 2 !== 0;
|
|
2618
2643
|
}
|
|
2619
2644
|
}
|
|
2620
|
-
OddPipe.ɵprov =
|
|
2645
|
+
OddPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function OddPipe_Factory() { return new OddPipe(); }, token: OddPipe, providedIn: "root" });
|
|
2621
2646
|
OddPipe.decorators = [
|
|
2622
2647
|
{ type: Pipe, args: [{
|
|
2623
2648
|
name: 'odd'
|
|
@@ -2725,7 +2750,7 @@ class MapGetPipe {
|
|
|
2725
2750
|
return val[key];
|
|
2726
2751
|
}
|
|
2727
2752
|
}
|
|
2728
|
-
MapGetPipe.ɵprov =
|
|
2753
|
+
MapGetPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MapGetPipe_Factory() { return new MapGetPipe(); }, token: MapGetPipe, providedIn: "root" });
|
|
2729
2754
|
MapGetPipe.decorators = [
|
|
2730
2755
|
{ type: Pipe, args: [{
|
|
2731
2756
|
name: 'mapGet'
|
|
@@ -2739,7 +2764,7 @@ class MapKeysPipe {
|
|
|
2739
2764
|
return Object.keys(map);
|
|
2740
2765
|
}
|
|
2741
2766
|
}
|
|
2742
|
-
MapKeysPipe.ɵprov =
|
|
2767
|
+
MapKeysPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MapKeysPipe_Factory() { return new MapKeysPipe(); }, token: MapKeysPipe, providedIn: "root" });
|
|
2743
2768
|
MapKeysPipe.decorators = [
|
|
2744
2769
|
{ type: Pipe, args: [{
|
|
2745
2770
|
name: 'mapKeys'
|
|
@@ -2753,7 +2778,7 @@ class MapValuesPipe {
|
|
|
2753
2778
|
return Object.values(map);
|
|
2754
2779
|
}
|
|
2755
2780
|
}
|
|
2756
|
-
MapValuesPipe.ɵprov =
|
|
2781
|
+
MapValuesPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MapValuesPipe_Factory() { return new MapValuesPipe(); }, token: MapValuesPipe, providedIn: "root" });
|
|
2757
2782
|
MapValuesPipe.decorators = [
|
|
2758
2783
|
{ type: Pipe, args: [{
|
|
2759
2784
|
name: 'mapValues'
|
|
@@ -2881,7 +2906,7 @@ class TranslateContextService {
|
|
|
2881
2906
|
return translations[keys[keys.length - 1]]; // Return the last keys translation
|
|
2882
2907
|
}
|
|
2883
2908
|
}
|
|
2884
|
-
TranslateContextService.ɵprov =
|
|
2909
|
+
TranslateContextService.ɵprov = i0.ɵɵdefineInjectable({ factory: function TranslateContextService_Factory() { return new TranslateContextService(i0.ɵɵinject(i1$1.TranslateService)); }, token: TranslateContextService, providedIn: "root" });
|
|
2885
2910
|
TranslateContextService.decorators = [
|
|
2886
2911
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
2887
2912
|
];
|
|
@@ -2939,7 +2964,7 @@ NgInitDirective.propDecorators = {
|
|
|
2939
2964
|
ngInit: [{ type: Output }]
|
|
2940
2965
|
};
|
|
2941
2966
|
|
|
2942
|
-
const moment$
|
|
2967
|
+
const moment$8 = momentImported;
|
|
2943
2968
|
// @dynamic
|
|
2944
2969
|
class SharedValidators {
|
|
2945
2970
|
static getDoubleRegexp(maxDecimals) {
|
|
@@ -3020,7 +3045,7 @@ class SharedValidators {
|
|
|
3020
3045
|
}
|
|
3021
3046
|
static validDate(control) {
|
|
3022
3047
|
const value = control.value;
|
|
3023
|
-
const date = !value || moment$
|
|
3048
|
+
const date = !value || moment$8.isMoment(value) ? value : moment$8(value, DATE_ISO_PATTERN);
|
|
3024
3049
|
if (date && (!date.isValid() || date.year() < 1970)) {
|
|
3025
3050
|
return { validDate: true };
|
|
3026
3051
|
}
|
|
@@ -4145,7 +4170,7 @@ class FormErrorTranslator {
|
|
|
4145
4170
|
return errorKey;
|
|
4146
4171
|
}
|
|
4147
4172
|
}
|
|
4148
|
-
FormErrorTranslator.ɵprov =
|
|
4173
|
+
FormErrorTranslator.ɵprov = i0.ɵɵdefineInjectable({ factory: function FormErrorTranslator_Factory() { return new FormErrorTranslator(i0.ɵɵinject(i1$1.TranslateService), i0.ɵɵinject(APP_FORM_ERROR_I18N_KEYS, 8)); }, token: FormErrorTranslator, providedIn: "root" });
|
|
4149
4174
|
FormErrorTranslator.decorators = [
|
|
4150
4175
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
4151
4176
|
];
|
|
@@ -4407,7 +4432,7 @@ class PropertyFormatPipe {
|
|
|
4407
4432
|
return this._i18nNo;
|
|
4408
4433
|
}
|
|
4409
4434
|
}
|
|
4410
|
-
PropertyFormatPipe.ɵprov =
|
|
4435
|
+
PropertyFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function PropertyFormatPipe_Factory() { return new PropertyFormatPipe(i0.ɵɵinject(DateFormatPipe), i0.ɵɵinject(i1$1.TranslateService)); }, token: PropertyFormatPipe, providedIn: "root" });
|
|
4411
4436
|
PropertyFormatPipe.decorators = [
|
|
4412
4437
|
{ type: Pipe, args: [{
|
|
4413
4438
|
name: 'propertyFormat'
|
|
@@ -4773,9 +4798,9 @@ function parseDuration(input, maxDecimals, placeholderChar) {
|
|
|
4773
4798
|
const hour = parseInt(durationParts[0] || '0');
|
|
4774
4799
|
const minute = parseInt(durationParts[1] || '0');
|
|
4775
4800
|
const value = hour + (minute + 0.5) / 60;
|
|
4776
|
-
return roundFloat
|
|
4801
|
+
return roundFloat(value, maxDecimals);
|
|
4777
4802
|
}
|
|
4778
|
-
function roundFloat
|
|
4803
|
+
function roundFloat(input, maxDecimals) {
|
|
4779
4804
|
if (maxDecimals > 0) {
|
|
4780
4805
|
const powDecimal = Math.pow(10, maxDecimals);
|
|
4781
4806
|
return Math.trunc(input * powDecimal + 0.5) / powDecimal;
|
|
@@ -4799,16 +4824,16 @@ const MASKS = {
|
|
|
4799
4824
|
DD: [/[+-]/, /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, '°']
|
|
4800
4825
|
}
|
|
4801
4826
|
};
|
|
4802
|
-
const noop$
|
|
4827
|
+
const noop$7 = () => {
|
|
4803
4828
|
};
|
|
4804
|
-
const ɵ0$
|
|
4829
|
+
const ɵ0$a = noop$7;
|
|
4805
4830
|
class MatLatLongField {
|
|
4806
4831
|
constructor(formBuilder, cd, formGroupDir) {
|
|
4807
4832
|
this.formBuilder = formBuilder;
|
|
4808
4833
|
this.cd = cd;
|
|
4809
4834
|
this.formGroupDir = formGroupDir;
|
|
4810
|
-
this._onChangeCallback = noop$
|
|
4811
|
-
this._onTouchedCallback = noop$
|
|
4835
|
+
this._onChangeCallback = noop$7;
|
|
4836
|
+
this._onTouchedCallback = noop$7;
|
|
4812
4837
|
this._subscription = new Subscription();
|
|
4813
4838
|
this._disabling = false;
|
|
4814
4839
|
this._writing = false;
|
|
@@ -5153,14 +5178,14 @@ SharedMatLatLongModule.decorators = [
|
|
|
5153
5178
|
},] }
|
|
5154
5179
|
];
|
|
5155
5180
|
|
|
5156
|
-
const DEFAULT_VALUE_ACCESSOR = {
|
|
5181
|
+
const DEFAULT_VALUE_ACCESSOR$5 = {
|
|
5157
5182
|
provide: NG_VALUE_ACCESSOR,
|
|
5158
5183
|
useExisting: forwardRef(() => MatDate),
|
|
5159
5184
|
multi: true
|
|
5160
5185
|
};
|
|
5161
5186
|
const TEXT_MASK = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
|
|
5162
|
-
const noop$
|
|
5163
|
-
const ɵ0$
|
|
5187
|
+
const noop$6 = () => { };
|
|
5188
|
+
const ɵ0$9 = noop$6;
|
|
5164
5189
|
class MatDate {
|
|
5165
5190
|
constructor(dateAdapter, translate, formBuilder, cd, keyboard, formGroupDir) {
|
|
5166
5191
|
this.dateAdapter = dateAdapter;
|
|
@@ -5169,8 +5194,8 @@ class MatDate {
|
|
|
5169
5194
|
this.cd = cd;
|
|
5170
5195
|
this.keyboard = keyboard;
|
|
5171
5196
|
this.formGroupDir = formGroupDir;
|
|
5172
|
-
this._onChangeCallback = noop$
|
|
5173
|
-
this._onTouchedCallback = noop$
|
|
5197
|
+
this._onChangeCallback = noop$6;
|
|
5198
|
+
this._onTouchedCallback = noop$6;
|
|
5174
5199
|
this._subscription = new Subscription();
|
|
5175
5200
|
this._writing = true;
|
|
5176
5201
|
this._disabling = false;
|
|
@@ -5476,7 +5501,7 @@ MatDate.decorators = [
|
|
|
5476
5501
|
selector: 'mat-date-field',
|
|
5477
5502
|
template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n class=\"mat-form-field-disabled\">\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput hidden type=\"text\"\n readonly\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\">\n <ion-text>{{formControl.value|dateFormat: {pattern: datePattern} }}</ion-text>\n</mat-form-field>\n\n<!-- writable -->\n<ng-template #writable>\n <mat-form-field [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\">\n\n <mat-label>{{placeholder}}</mat-label>\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"!mobile\"\n [formControl]=\"textControl\"\n [textMask]=\"{mask: mask, keepCharPositions: true, placeholderChar: placeholderChar}\"\n [placeholder]=\"'COMMON.DATE_PLACEHOLDER'|translate\"\n (blur)=\"checkIfTouched()\"\n (keyup.arrowdown)=\"openDatePicker($event, datePicker)\"\n (keyup.escape)=\"preventEvent($event)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n [appAutofocus]=\"autofocus\">\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"mobile\"\n [formControl]=\"textControl\"\n (click)=\"openDatePickerIfMobile($event, datePicker)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n readonly>\n\n <!-- Hide the final input -->\n <input matInput type=\"text\" [formControl]=\"formControl\"\n hidden\n [matDatepicker]=\"datePicker\"\n [matDatepickerFilter]=\"datePickerFilter\"\n (dateChange)=\"onDatePickerChange($event)\">\n\n <button type=\"button\" mat-icon-button tabindex=\"-1\" matSuffix\n (click)=\"openDatePicker($event, datePicker)\"\n [disabled]=\"formControl.disabled\">\n <div *ngIf=\"mobile; then iconDate; else iconDesktop\"></div>\n </button>\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"clear()\"\n [hidden]=\"formControl.disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n\n <!-- errors -->\n <mat-error *ngIf=\"formControl.touched && formControl.errors|mapKeys|arrayFirst; let errorKey\" [ngSwitch]=\"errorKey\">\n <span *ngSwitchCase=\"'required'\" translate>ERROR.FIELD_REQUIRED</span>\n <span *ngSwitchCase=\"'validDate'\" translate>ERROR.FIELD_NOT_VALID_DATE</span>\n <span *ngSwitchCase=\"'dateIsAfter'\">{{'ERROR.FIELD_NOT_VALID_DATE_AFTER' | translate: formControl.errors.dateIsAfter }}</span>\n <span *ngSwitchCase=\"'dateIsBefore'\">{{'ERROR.FIELD_NOT_VALID_DATE_BEFORE' | translate: formControl.errors.dateIsBefore }}</span>\n <span *ngSwitchCase=\"'dateRange'\" translate>ERROR.FIELD_NOT_VALID_DATE_RANGE</span>\n <span *ngSwitchCase=\"'dateMaxDuration'\" translate>ERROR.FIELD_NOT_VALID_DATE_MAX_DURATION</span>\n <span *ngSwitchCase=\"'dateMinDuration'\" translate>ERROR.FIELD_NOT_VALID_DATE_MIN_DURATION</span>\n <span *ngSwitchCase=\"'msg'\">{{(formControl.errors.msg?.key || formControl.errors.msg) | translate: formControl.errors.msg?.params}}</span>\n </mat-error>\n <ng-content select=\"mat-error\"></ng-content>\n\n <!-- mat hint -->\n <div class=\"mat-form-field-hint-wrapper\" [class.cdk-visually-hidden]=\"formControl.invalid\">\n <div class=\"mat-form-field-hint-spacer\"></div>\n <ng-content select=\"mat-hint\"></ng-content>\n </div>\n </mat-form-field>\n\n <mat-datepicker #datePicker\n [touchUi]=\"mobile\"\n [disabled]=\"formControl.disabled\"\n [startAt]=\"startDate\"\n ></mat-datepicker>\n\n\n\n</ng-template>\n\n<ng-template #iconDesktop>\n <mat-icon>keyboard_arrow_down</mat-icon>\n</ng-template>\n\n<ng-template #iconDate>\n <mat-icon>date_range</mat-icon>\n</ng-template>\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n",
|
|
5478
5503
|
providers: [
|
|
5479
|
-
DEFAULT_VALUE_ACCESSOR,
|
|
5504
|
+
DEFAULT_VALUE_ACCESSOR$5,
|
|
5480
5505
|
],
|
|
5481
5506
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
5482
5507
|
styles: [":host{display:inline-block;width:100%;position:relative}:host [no-padding]{--ion-grid-column-padding:0}:host [nowrap]{flex-wrap:nowrap}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}mat-form-field .datetime-md,mat-form-field ion-datetime{padding:0!important}ion-col.day{min-width:100px}ion-col.day .mat-form-field-subscript-wrapper{overflow:visible;right:-64px;width:calc(100% + 64px)}ion-col.day .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper{display:flex}ion-col.day .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper .mat-form-field-hint-spacer{flex:1 0 1em}ion-col.hour{min-width:55px;max-width:65px}ion-col.hour mat-form-field{width:100%}ion-col.hour mat-form-field input[type=text],ion-col.hour mat-form-field mat-label{text-align:left;min-width:50px}mat-form-field.mat-form-field-disabled ion-col.day{min-width:100px}.hour .mat-form-field-label{max-width:40px}.hour mat-form-field.mat-form-field-should-float .mat-form-field-placeholder{max-width:inherit}mat-error{text-align:right;width:100%}"]
|
|
@@ -5511,16 +5536,16 @@ MatDate.propDecorators = {
|
|
|
5511
5536
|
matInputs: [{ type: ViewChildren, args: ['matInput',] }]
|
|
5512
5537
|
};
|
|
5513
5538
|
|
|
5514
|
-
const DEFAULT_VALUE_ACCESSOR$
|
|
5539
|
+
const DEFAULT_VALUE_ACCESSOR$4 = {
|
|
5515
5540
|
provide: NG_VALUE_ACCESSOR,
|
|
5516
5541
|
useExisting: forwardRef(() => MatDateTime),
|
|
5517
5542
|
multi: true
|
|
5518
5543
|
};
|
|
5519
|
-
const DAY_MASK = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
|
|
5544
|
+
const DAY_MASK$1 = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
|
|
5520
5545
|
const HOUR_REGEXP = /^[012][0-9][:][012345][0-9]$/;
|
|
5521
|
-
const HOUR_MASK = [/[012]/, /\d/, ':', /[012345]/, /\d/];
|
|
5522
|
-
const noop$
|
|
5523
|
-
const ɵ0$
|
|
5546
|
+
const HOUR_MASK$1 = [/[012]/, /\d/, ':', /[012345]/, /\d/];
|
|
5547
|
+
const noop$5 = () => { };
|
|
5548
|
+
const ɵ0$8 = noop$5;
|
|
5524
5549
|
class MatDateTime {
|
|
5525
5550
|
constructor(dateAdapter, translate, formBuilder, cd, keyboard, formGroupDir) {
|
|
5526
5551
|
this.dateAdapter = dateAdapter;
|
|
@@ -5529,14 +5554,14 @@ class MatDateTime {
|
|
|
5529
5554
|
this.cd = cd;
|
|
5530
5555
|
this.keyboard = keyboard;
|
|
5531
5556
|
this.formGroupDir = formGroupDir;
|
|
5532
|
-
this._onChangeCallback = noop$
|
|
5533
|
-
this._onTouchedCallback = noop$
|
|
5557
|
+
this._onChangeCallback = noop$5;
|
|
5558
|
+
this._onTouchedCallback = noop$5;
|
|
5534
5559
|
this._subscription = new Subscription();
|
|
5535
5560
|
this._writing = true;
|
|
5536
5561
|
this._disabling = false;
|
|
5537
5562
|
this._readonly = false;
|
|
5538
|
-
this.dayMask = DAY_MASK;
|
|
5539
|
-
this.hourMask = HOUR_MASK;
|
|
5563
|
+
this.dayMask = DAY_MASK$1;
|
|
5564
|
+
this.hourMask = HOUR_MASK$1;
|
|
5540
5565
|
this.floatLabel = 'auto';
|
|
5541
5566
|
this.compact = false;
|
|
5542
5567
|
this.placeholderChar = DEFAULT_PLACEHOLDER_CHAR;
|
|
@@ -5857,7 +5882,7 @@ MatDateTime.decorators = [
|
|
|
5857
5882
|
selector: 'mat-date-time-field',
|
|
5858
5883
|
template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n class=\"mat-form-field-disabled\">\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput hidden type=\"text\"\n readonly\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\">\n <ion-text>{{formControl.value|dateFormat: {pattern: displayPattern} }}</ion-text>\n</mat-form-field>\n\n<!-- writable + time -->\n<ng-template #writable >\n <ion-grid class=\"ion-no-padding mat-form-field-{{appearance}}\">\n <ion-row class=\"ion-no-padding no-wrap\" nowrap>\n\n <!-- day -->\n <ion-col class=\"day ion-no-padding\">\n <mat-form-field [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n [class.mat-form-field-invalid]=\"formControl.touched && formControl.invalid\">\n\n <mat-label>{{placeholder}}</mat-label>\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"!mobile\"\n [formControl]=\"dayControl\"\n [textMask]=\"{mask: dayMask, keepCharPositions: true, placeholderChar: placeholderChar}\"\n [placeholder]=\"'COMMON.DATE_PLACEHOLDER'|translate\"\n (blur)=\"checkIfTouched()\"\n (keyup.arrowdown)=\"openDatePicker($event, datePicker)\"\n (keyup.escape)=\"preventEvent($event)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n [appAutofocus]=\"autofocus\">\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"mobile\"\n [formControl]=\"dayControl\"\n (click)=\"openDatePickerIfMobile($event, datePicker)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n readonly>\n\n <!-- Hide the final input -->\n <input matInput type=\"text\" [formControl]=\"formControl\"\n hidden\n [matDatepicker]=\"datePicker\"\n [matDatepickerFilter]=\"datePickerFilter\"\n (dateChange)=\"onDatePickerChange($event)\">\n\n <button type=\"button\" mat-icon-button tabindex=\"-1\" matSuffix\n (click)=\"openDatePicker($event, datePicker)\"\n [disabled]=\"formControl.disabled\">\n <div *ngIf=\"mobile; then iconDate; else iconDesktop\"></div>\n </button>\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"clear()\"\n [hidden]=\"formControl.disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n <mat-datepicker #datePicker\n [touchUi]=\"mobile\"\n [disabled]=\"formControl.disabled\"\n [startAt]=\"startDate\"></mat-datepicker>\n <div class=\"mat-form-field-subscript mat-form-field-subscript-wrapper\" >\n <!-- errors -->\n <ng-container [ngSwitch]=\"formControl.touched && formControl.errors|mapKeys|arrayFirst\">\n <mat-error *ngSwitchCase=\"'required'\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngSwitchCase=\"'validDate'\" translate>ERROR.FIELD_NOT_VALID_DATE_TIME</mat-error>\n <mat-error *ngSwitchCase=\"'dateIsAfter'\">{{'ERROR.FIELD_NOT_VALID_DATE_AFTER' | translate: formControl.errors.dateIsAfter }}</mat-error>\n <mat-error *ngSwitchCase=\"'dateIsBefore'\">{{'ERROR.FIELD_NOT_VALID_DATE_BEFORE' | translate: formControl.errors.dateIsBefore }}</mat-error>\n <mat-error *ngSwitchCase=\"'dateRange'\" translate>ERROR.FIELD_NOT_VALID_DATE_RANGE</mat-error>\n <mat-error *ngSwitchCase=\"'dateMaxDuration'\" translate>ERROR.FIELD_NOT_VALID_DATE_MAX_DURATION</mat-error>\n <mat-error *ngSwitchCase=\"'dateMinDuration'\" translate>ERROR.FIELD_NOT_VALID_DATE_MIN_DURATION</mat-error>\n <mat-error *ngSwitchCase=\"'msg'\">{{(formControl.errors.msg?.key || formControl.errors.msg) | translate: formControl.errors.msg?.params}}</mat-error>\n </ng-container>\n <ng-content select=\"mat-error\"></ng-content>\n\n <!-- mat hint -->\n <div class=\"mat-form-field-hint-wrapper\" [class.cdk-visually-hidden]=\"formControl.invalid\">\n <div class=\"mat-form-field-hint-spacer\"></div>\n <ng-content select=\"mat-hint\"></ng-content>\n </div>\n </div>\n\n </ion-col>\n\n <!-- hour -->\n <ion-col class=\"hour ion-no-padding\">\n <mat-form-field [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n [class.mat-form-field-invalid]=\"formControl.touched && (hourControl.invalid || formControl.invalid)\">\n <mat-label *ngIf=\"placeholder && floatLabel != 'never'\" translate>COMMON.TIME</mat-label>\n <input matInput #matInput type=\"text\"\n *ngIf=\"!mobile\"\n [formControl]=\"hourControl\"\n autocomplete=\"off\"\n min=\"0\" max=\"23\"\n [textMask]=\"{mask: hourMask, keepCharPositions: true, placeholderChar: placeholderChar, guide: true}\"\n [placeholder]=\"'COMMON.TIME_PLACEHOLDER'|translate\"\n [required]=\"required\"\n (keyup.arrowdown)=\"openTimePicker($event)\"\n (keyup.escape)=\"preventEvent($event)\"\n (blur)=\"checkIfTouched()\"\n [tabindex]=\"tabindex !== undefined ? tabindex+1 : undefined\">\n\n <input matInput #matInput type=\"text\"\n *ngIf=\"mobile\"\n [formControl]=\"hourControl\"\n (click)=\"openTimePickerIfMobile($event)\"\n readonly>\n\n <input matInput type=\"text\"\n [formControl]=\"hourControl\"\n hidden\n [ngxTimepicker]=\"timePicker\"\n [format]=\"24\">\n\n <button matSuffix type=\"button\" mat-icon-button\n tabindex=\"-1\"\n *ngIf=\"!compact && !mobile\"\n [disabled]=\"formControl.disabled\"\n (click)=\"openTimePicker($event)\" >\n <mat-icon>keyboard_arrow_down</mat-icon>\n </button>\n <button matSuffix type=\"button\" mat-icon-button\n tabindex=\"-1\"\n *ngIf=\"!compact && mobile\"\n [disabled]=\"formControl.disabled\"\n (click)=\"openTimePickerIfMobile($event)\">\n <mat-icon>access_time</mat-icon>\n </button>\n\n <ngx-material-timepicker #timePicker [@.disabled]=\"true\"\n (timeSet)=\"onTimePickerChange($event)\"\n [ESC]=\"!mobile\"\n [defaultTime]=\"'00:00'\"\n [cancelBtnTmpl]=\"timePickerCancelButton\"\n [confirmBtnTmpl]=\"timePickerOkButton\"\n [preventOverlayClick]=\"mobile\"\n [enableKeyboardInput]=\"false\"\n [disableAnimation]=\"true\">\n <!-- cancel button -->\n <ng-template #timePickerCancelButton>\n <ion-button fill=\"clear\" color=\"dark\">\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n </ng-template>\n\n <!-- confirm button -->\n <ng-template #timePickerOkButton>\n <ion-button fill=\"solid\" color=\"tertiary\">\n <ion-label translate>COMMON.BTN_VALIDATE</ion-label>\n </ion-button>\n </ng-template>\n\n </ngx-material-timepicker>\n </mat-form-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n\n</ng-template>\n\n<ng-template #iconDesktop>\n <mat-icon>keyboard_arrow_down</mat-icon>\n</ng-template>\n\n<ng-template #iconDate>\n <mat-icon>date_range</mat-icon>\n</ng-template>\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n",
|
|
5859
5884
|
providers: [
|
|
5860
|
-
DEFAULT_VALUE_ACCESSOR$
|
|
5885
|
+
DEFAULT_VALUE_ACCESSOR$4,
|
|
5861
5886
|
],
|
|
5862
5887
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
5863
5888
|
styles: [":host{display:inline-block;width:100%;position:relative;--ion-grid-column-padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}mat-form-field .datetime-md{padding:0!important}ion-row.no-wrap{flex-wrap:nowrap}ion-col.day{min-width:100px}ion-col.day .mat-form-field-subscript-wrapper{overflow:visible;right:-64px;width:calc(100% + 64px)}ion-col.day .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper{display:flex}ion-col.day .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper .mat-form-field-hint-spacer{flex:1 0 1em}ion-col.hour{min-width:55px;max-width:65px}ion-col.hour mat-form-field{width:100%}ion-col.hour mat-form-field input[type=text],ion-col.hour mat-form-field mat-label{text-align:left;min-width:50px}mat-form-field.mat-form-field-disabled ion-col.day{min-width:100px}.mat-form-field-outline ion-col.day{min-width:153px}.mat-form-field-outline ion-col.hour{min-width:100px;max-width:110px}.hour .mat-form-field-label{max-width:40px}.hour mat-form-field.mat-form-field-should-float .mat-form-field-placeholder{max-width:inherit}mat-error{text-align:right;width:100%}"]
|
|
@@ -5892,15 +5917,15 @@ MatDateTime.propDecorators = {
|
|
|
5892
5917
|
matInputs: [{ type: ViewChildren, args: ['matInput',] }]
|
|
5893
5918
|
};
|
|
5894
5919
|
|
|
5895
|
-
const DEFAULT_VALUE_ACCESSOR$
|
|
5920
|
+
const DEFAULT_VALUE_ACCESSOR$3 = {
|
|
5896
5921
|
provide: NG_VALUE_ACCESSOR,
|
|
5897
5922
|
useExisting: forwardRef(() => MatDateShort),
|
|
5898
5923
|
multi: true
|
|
5899
5924
|
};
|
|
5900
|
-
const DAY_MASK
|
|
5925
|
+
const DAY_MASK = [/\d/, /\d/, /\d/, /\d/];
|
|
5901
5926
|
const noop$4 = () => {
|
|
5902
5927
|
};
|
|
5903
|
-
const ɵ0$
|
|
5928
|
+
const ɵ0$7 = noop$4;
|
|
5904
5929
|
class MatDateShort {
|
|
5905
5930
|
constructor(dateAdapter, translate, formBuilder, cd, keyboard, formGroupDir) {
|
|
5906
5931
|
this.dateAdapter = dateAdapter;
|
|
@@ -5913,7 +5938,7 @@ class MatDateShort {
|
|
|
5913
5938
|
this._onTouchedCallback = noop$4;
|
|
5914
5939
|
this.writing = true;
|
|
5915
5940
|
this.disabling = false;
|
|
5916
|
-
this.dayMask = DAY_MASK
|
|
5941
|
+
this.dayMask = DAY_MASK;
|
|
5917
5942
|
this.disabled = false;
|
|
5918
5943
|
this.floatLabel = 'auto';
|
|
5919
5944
|
this.readonly = false;
|
|
@@ -6158,7 +6183,7 @@ MatDateShort.decorators = [
|
|
|
6158
6183
|
selector: 'mat-date-short-field',
|
|
6159
6184
|
template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly else writable\"\n [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n class=\"mat-form-field-disabled\">\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput hidden type=\"text\" readonly=\"true\" [formControl]=\"formControl\">\n <ion-text>{{formControl.value|dateFormat: {pattern: displayPattern} }}</ion-text>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n</mat-form-field>\n\n<ng-template #writable>\n <mat-form-field [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\">\n\n <mat-label>{{placeholder}}</mat-label>\n\n <div matPrefix><ng-content select=\"[matPrefix]\"></ng-content></div>\n\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"!mobile\"\n [formControl]=\"dayControl\"\n [textMask]=\"{mask: dayMask, keepCharPositions: true, placeholderChar: placeholderChar}\"\n [placeholder]=\"'COMMON.DATE_YEAR_PLACEHOLDER'|translate\"\n (blur)=\"checkIfTouched()\"\n (keyup.arrowdown)=\"openDatePicker($event, datePicker1)\"\n (keyup.escape)=\"preventEvent($event)\"\n (click)=\"matInput.select()\"\n [required]=\"required\"\n [tabindex]=\"tabindex\">\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"mobile\"\n [formControl]=\"dayControl\"\n (click)=\"openDatePickerIfMobile($event, datePicker1)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n readonly>\n\n <!-- Hide the final control -->\n <input matInput type=\"text\"\n [formControl]=\"formControl\"\n hidden\n [matDatepicker]=\"datePicker1\"\n (dateChange)=\"onDatePickerChange($event)\">\n\n\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n (click)=\"openDatePicker($event, datePicker1)\"\n [disabled]=\"formControl.disabled\">\n <div *ngIf=\"mobile; then iconDate; else iconDesktop\"></div>\n </button>\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"writeValue(null)\"\n [hidden]=\"formControl.disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n\n <mat-error *ngIf=\"formControl.touched && formControl.errors|mapKeys|arrayFirst; let errorKey\" [ngSwitch]=\"errorKey\">\n <span *ngSwitchCase=\"'required'\" translate>ERROR.FIELD_REQUIRED</span>\n <span *ngSwitchCase=\"'validDate'\" translate>ERROR.FIELD_NOT_VALID_DATE</span>\n <span *ngSwitchCase=\"'dateIsAfter'\">{{'ERROR.FIELD_NOT_VALID_DATE_AFTER' | translate: formControl.errors.dateIsAfter }}</span>\n <span *ngSwitchCase=\"'dateRange'\" translate>ERROR.FIELD_NOT_VALID_DATE_RANGE</span>\n <span *ngSwitchCase=\"'dateMaxDuration'\" translate>ERROR.FIELD_NOT_VALID_DATE_MAX_DURATION</span>\n <span *ngSwitchCase=\"'dateMinDuration'\" translate>ERROR.FIELD_NOT_VALID_DATE_MIN_DURATION</span>\n <span *ngSwitchCase=\"'msg'\">{{(formControl.errors.msg?.key || formControl.errors.msg) | translate: formControl.errors.msg?.params}}</span>\n </mat-error>\n <ng-content select=\"mat-error\"></ng-content>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n\n <mat-datepicker #datePicker1\n startView=\"multi-year\"\n [touchUi]=\"mobile\"\n [disabled]=\"formControl.disabled\"\n (yearSelected)=\"closeDatePicker($event, datePicker1)\"\n [startAt]=\"startDate\"></mat-datepicker>\n\n <ng-template #iconDesktop>\n <mat-icon>keyboard_arrow_down</mat-icon>\n </ng-template>\n\n <ng-template #iconDate>\n <mat-icon>date_range</mat-icon>\n </ng-template>\n\n</ng-template>\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n\n<ng-template #matSuffixTemplate>\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n",
|
|
6160
6185
|
providers: [
|
|
6161
|
-
DEFAULT_VALUE_ACCESSOR$
|
|
6186
|
+
DEFAULT_VALUE_ACCESSOR$3,
|
|
6162
6187
|
],
|
|
6163
6188
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
6164
6189
|
styles: [":host{display:inline-block;width:100%;position:relative}:host [no-padding]{--ion-grid-column-padding:0}:host [nowrap]{flex-wrap:nowrap}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}mat-form-field .datetime-md,mat-form-field ion-datetime{padding:0!important}ion-col.day{min-width:100px}ion-col.day .mat-form-field-subscript-wrapper{overflow:visible;right:-64px;width:calc(100% + 64px)}ion-col.day .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper{display:flex}ion-col.day .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper .mat-form-field-hint-spacer{flex:1 0 1em}ion-col.hour{min-width:55px;max-width:65px}ion-col.hour mat-form-field{width:100%}ion-col.hour mat-form-field input[type=text],ion-col.hour mat-form-field mat-label{text-align:left;min-width:50px}mat-form-field.mat-form-field-disabled ion-col.day{min-width:100px}.hour .mat-form-field-label{max-width:40px}.hour mat-form-field.mat-form-field-should-float .mat-form-field-placeholder{max-width:inherit}mat-error{text-align:right;width:100%}"]
|
|
@@ -6227,16 +6252,16 @@ SharedMatDateTimeModule.decorators = [
|
|
|
6227
6252
|
},] }
|
|
6228
6253
|
];
|
|
6229
6254
|
|
|
6230
|
-
const DEFAULT_VALUE_ACCESSOR$
|
|
6255
|
+
const DEFAULT_VALUE_ACCESSOR$2 = {
|
|
6231
6256
|
provide: NG_VALUE_ACCESSOR,
|
|
6232
6257
|
useExisting: forwardRef(() => MatDuration),
|
|
6233
6258
|
multi: true
|
|
6234
6259
|
};
|
|
6235
6260
|
const HOUR_TIME_PATTERN = /[0-9]\d\d:[0-5]\d/;
|
|
6236
|
-
const HOUR_MASK
|
|
6237
|
-
const noop$
|
|
6261
|
+
const HOUR_MASK = [/\d/, /\d/, /\d/, ':', /[0-5]/, /\d/];
|
|
6262
|
+
const noop$3 = () => {
|
|
6238
6263
|
};
|
|
6239
|
-
const ɵ0$6 = noop$
|
|
6264
|
+
const ɵ0$6 = noop$3;
|
|
6240
6265
|
class MatDuration {
|
|
6241
6266
|
constructor(platform, dateAdapter, translate, formBuilder, cd, formGroupDir) {
|
|
6242
6267
|
this.dateAdapter = dateAdapter;
|
|
@@ -6245,11 +6270,11 @@ class MatDuration {
|
|
|
6245
6270
|
this.cd = cd;
|
|
6246
6271
|
this.formGroupDir = formGroupDir;
|
|
6247
6272
|
this._subscription = new Subscription();
|
|
6248
|
-
this._onChangeCallback = noop$
|
|
6249
|
-
this._onTouchedCallback = noop$
|
|
6273
|
+
this._onChangeCallback = noop$3;
|
|
6274
|
+
this._onTouchedCallback = noop$3;
|
|
6250
6275
|
this.writing = true;
|
|
6251
6276
|
this.disabling = false;
|
|
6252
|
-
this.hourMask = HOUR_MASK
|
|
6277
|
+
this.hourMask = HOUR_MASK;
|
|
6253
6278
|
this.disabled = false;
|
|
6254
6279
|
this.floatLabel = 'auto';
|
|
6255
6280
|
this.readonly = false;
|
|
@@ -6429,7 +6454,7 @@ MatDuration.decorators = [
|
|
|
6429
6454
|
selector: 'mat-duration-field',
|
|
6430
6455
|
template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly else writable\"\n [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n class=\"mat-form-field-disabled\">\n <input matInput hidden type=\"text\" readonly=\"true\" [formControl]=\"formControl\">\n <ion-text>{{ formControl.value|duration }}</ion-text>\n</mat-form-field>\n\n<!-- writable -->\n<ng-template #writable>\n <mat-form-field [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n [class.mat-form-field-disabled]=\"formControl.disabled\"\n [class.mat-form-field-invalid]=\"formControl.touched && formControl.invalid\">\n <mat-label *ngIf=\"placeholder && floatLabel != 'never'\" translate>COMMON.TIME</mat-label>\n\n <div matPrefix><ng-content select=\"[matPrefix]\"></ng-content></div>\n\n <input matInput #matInput type=\"text\"\n autocomplete=\"off\"\n [formControl]=\"textControl\"\n [textMask]=\"{mask: hourMask, keepCharPositions: true, placeholderChar: placeholderChar, guide: true}\"\n [placeholder]=\"'COMMON.DURATION_PLACEHOLDER'|translate\"\n [required]=\"required\"\n (keydown.tab)=\"moveCaretToSeparator($event, true)\"\n (keydown.shift.tab)=\"moveCaretToSeparator($event, false)\"\n (keyup.escape)=\"preventEvent($event)\"\n (blur)=\"checkIfTouched()\"\n [tabindex]=\"tabindex !== undefined ? tabindex+1 : undefined\">\n\n\n <!-- errors -->\n <mat-error *ngIf=\"!formControl.hasError('required') && textControl.hasError('pattern')\" translate>ERROR.FIELD_NOT_VALID_PATTERN</mat-error>\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"formControl.hasError('min')\">\n {{(compact ? 'ERROR.FIELD_MIN_COMPACT' : 'ERROR.FIELD_MIN') | translate:formControl.errors.min }}</mat-error>\n <mat-error *ngIf=\"formControl.hasError('max')\">\n {{(compact ? 'ERROR.FIELD_MAX_COMPACT' : 'ERROR.FIELD_MAX') | translate:formControl.errors.max }}</mat-error>\n\n <ng-content select=\"mat-error\"></ng-content>\n </mat-form-field>\n</ng-template>\n\n",
|
|
6431
6456
|
providers: [
|
|
6432
|
-
DEFAULT_VALUE_ACCESSOR$
|
|
6457
|
+
DEFAULT_VALUE_ACCESSOR$2,
|
|
6433
6458
|
],
|
|
6434
6459
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
6435
6460
|
styles: [":host{display:inline-block;min-width:140px;position:relative;--ion-grid-column-padding:0}:host,mat-form-field{width:100%}mat-form-field .mat-form-field-subscript-wrapper{overflow:visible;top:100%}mat-form-field .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper{display:flex}mat-form-field .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper .mat-form-field-hint-spacer{flex:1 0 1em}mat-error{text-align:right;width:100%}"]
|
|
@@ -6487,22 +6512,22 @@ SharedMatDurationModule.decorators = [
|
|
|
6487
6512
|
},] }
|
|
6488
6513
|
];
|
|
6489
6514
|
|
|
6490
|
-
const DEFAULT_VALUE_ACCESSOR$
|
|
6515
|
+
const DEFAULT_VALUE_ACCESSOR$1 = {
|
|
6491
6516
|
provide: NG_VALUE_ACCESSOR,
|
|
6492
6517
|
useExisting: forwardRef(() => MatBooleanField),
|
|
6493
6518
|
multi: true
|
|
6494
6519
|
};
|
|
6495
|
-
const noop$
|
|
6520
|
+
const noop$2 = () => {
|
|
6496
6521
|
};
|
|
6497
|
-
const ɵ0$
|
|
6522
|
+
const ɵ0$5 = noop$2;
|
|
6498
6523
|
class MatBooleanField {
|
|
6499
6524
|
constructor(translate, formBuilder, cd, formGroupDir) {
|
|
6500
6525
|
this.translate = translate;
|
|
6501
6526
|
this.formBuilder = formBuilder;
|
|
6502
6527
|
this.cd = cd;
|
|
6503
6528
|
this.formGroupDir = formGroupDir;
|
|
6504
|
-
this._onChangeCallback = noop$
|
|
6505
|
-
this._onTouchedCallback = noop$
|
|
6529
|
+
this._onChangeCallback = noop$2;
|
|
6530
|
+
this._onTouchedCallback = noop$2;
|
|
6506
6531
|
this._writing = false;
|
|
6507
6532
|
this.showRadio = false;
|
|
6508
6533
|
this.disabled = false;
|
|
@@ -6665,7 +6690,7 @@ MatBooleanField.decorators = [
|
|
|
6665
6690
|
selector: 'mat-boolean-field',
|
|
6666
6691
|
template: "<mat-form-field *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n class=\"mat-form-field-disabled {{classList}}\">\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input matInput hidden type=\"text\" readonly\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\">\n <ion-text>{{(value == null ? 'COMMON.EMPTY_OPTION' : (value === true ? yesLabel : noLabel)) | translate }}</ion-text>\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n</mat-form-field>\n\n<ng-template #writable>\n <ng-container [ngSwitch]=\"style\">\n\n <!-- Radio -->\n <mat-form-field *ngSwitchCase=\"'radio'\"\n [floatLabel]=\"showRadio && (!floatLabel || floatLabel === 'auto') ? 'always': floatLabel\"\n [appearance]=\"appearance\"\n class=\"mat-boolean-field mat-boolean-field-radio {{classList}}\">\n <mat-label *ngIf=\"placeholder && floatLabel!=='never'\">\n {{placeholder}}\n <span [hidden]=\"showRadio\">({{yesLabel|translate}}/{{'COMMON.NO'|translate}})</span>\n </mat-label>\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input matInput #fakeInput type=\"text\" readonly=\"true\"\n [formControl]=\"formControl\"\n (focus)=\"_onFocusFakeInput($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showRadio\"\n [tabindex]=\"tabindex\">\n\n <!-- radio button -->\n <mat-radio-group [hidden]=\"!showRadio\"\n [formControl]=\"formControl\"\n (change)=\"onRadioValueChanged($event)\">\n <mat-radio-button #yesButton [value]=\"true\">\n <span>{{yesLabel|translate}}</span>\n </mat-radio-button> \n <mat-radio-button #noButton [value]=\"false\">\n <span>{{noLabel|translate}}</span>\n </mat-radio-button>\n </mat-radio-group>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n\n <!-- Checkbox -->\n <mat-form-field *ngSwitchCase=\"'checkbox'\"\n [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n class=\"mat-boolean-field mat-boolean-field-checkbox {{classList}}\">\n <mat-label *ngIf=\"placeholder && !showRadio\">\n {{placeholder}}\n </mat-label>\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input matInput #matInput\n [formControl]=\"formControl\"\n (focus)=\"_onFocusFakeInput($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showRadio\"\n [tabindex]=\"tabindex\">\n\n <ion-label> </ion-label>\n\n <!-- checkbox, when compact -->\n <mat-checkbox #checkboxButton\n [formControl]=\"formControl\"\n (change)=\"onCheckboxValueChanged($event)\"\n [indeterminate]=\"value===null\"\n [hidden]=\"!showRadio\"\n [tabindex]=\"tabindex\">\n </mat-checkbox>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n\n <!-- Buttons -->\n <mat-form-field *ngSwitchCase=\"'button'\"\n [floatLabel]=\"floatLabel === 'never' ? 'never' : 'always'\"\n [appearance]=\"appearance\"\n class=\"mat-boolean-field mat-boolean-field-button {{classList}}\">\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input matInput type=\"text\" hidden\n [formControl]=\"formControl\"\n [placeholder]=\"placeholder\"\n [required]=\"required\">\n <div class=\"mat-form-field-buttons\"\n [style.--buttons-col-count]=\"buttonsColCount\"\n *ngIf=\"!formControl.disabled; else disabledLabel\">\n <!-- yes -->\n <ion-button class=\"mat-form-field-button\"\n [tabindex]=\"_tabindex\"\n (click)=\"writeValue(true, $event)\"\n (keyup.enter)=\"writeValue(true, $event)\"\n [color]=\"_value == null ? 'tertiary' : (_value === true) ? 'accent' : 'light'\">\n <ion-icon *ngIf=\"showButtonIcons && yesIcon; let icon\" slot=\"start\" [name]=\"icon\"></ion-icon>\n {{yesLabel|translate}}\n </ion-button>\n\n <!-- No button -->\n <ion-button class=\"mat-form-field-button\"\n [tabindex]=\"_tabindex !== undefined ? (_tabindex + 1) : undefined\"\n (click)=\"writeValue(false, $event)\"\n (keyup.enter)=\"writeValue(false, $event)\"\n [color]=\"_value == null ? 'tertiary' : (_value === false) ? 'accent' : 'light'\">\n <ion-icon *ngIf=\"showButtonIcons && noIcon; let icon\" slot=\"start\" [name]=\"icon\"></ion-icon>\n {{noLabel|translate}}\n </ion-button>\n </div>\n <ng-template #disabledLabel>\n <ion-label><i translate>COMMON.EMPTY_OPTION</i></ion-label>\n </ng-template>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n\n </mat-form-field>\n </ng-container>\n\n</ng-template>\n\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n<ng-template #matSuffixTemplate>\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n",
|
|
6667
6692
|
providers: [
|
|
6668
|
-
DEFAULT_VALUE_ACCESSOR$
|
|
6693
|
+
DEFAULT_VALUE_ACCESSOR$1
|
|
6669
6694
|
],
|
|
6670
6695
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
6671
6696
|
styles: [":host{width:100%}.mat-form-field.mat-boolean-field-radio{margin-top:-2px}.mat-form-field.mat-boolean-field-button{margin-top:-4px}.mat-form-field .mat-form-field-buttons{width:100%;display:flex;flex-flow:row wrap;justify-content:flex-start;align-items:center}.mat-form-field .mat-form-field-buttons .mat-form-field-button{--flex-basis:calc(100% / var(--buttons-col-count, 2));flex:0 1 var(--flex-basis);max-width:min(var(--flex-basis),150px);white-space:normal;padding:0 2px;height:40px}"]
|
|
@@ -6912,7 +6937,7 @@ class MatNumpadDomService {
|
|
|
6912
6937
|
this.appRef.detachView(this.componentRef.hostView);
|
|
6913
6938
|
}
|
|
6914
6939
|
}
|
|
6915
|
-
MatNumpadDomService.ɵprov =
|
|
6940
|
+
MatNumpadDomService.ɵprov = i0.ɵɵdefineInjectable({ factory: function MatNumpadDomService_Factory() { return new MatNumpadDomService(i0.ɵɵinject(i0.ComponentFactoryResolver), i0.ɵɵinject(i0.ApplicationRef), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(i1$3.DOCUMENT, 8)); }, token: MatNumpadDomService, providedIn: "root" });
|
|
6916
6941
|
MatNumpadDomService.decorators = [
|
|
6917
6942
|
{ type: Injectable, args: [{
|
|
6918
6943
|
providedIn: 'root'
|
|
@@ -7276,7 +7301,7 @@ SharedMatNumpadModule.decorators = [
|
|
|
7276
7301
|
},] }
|
|
7277
7302
|
];
|
|
7278
7303
|
|
|
7279
|
-
const DEFAULT_VALUE_ACCESSOR
|
|
7304
|
+
const DEFAULT_VALUE_ACCESSOR = {
|
|
7280
7305
|
provide: NG_VALUE_ACCESSOR,
|
|
7281
7306
|
useExisting: forwardRef(() => MatSwipeField),
|
|
7282
7307
|
multi: true
|
|
@@ -7539,7 +7564,7 @@ MatSwipeField.decorators = [
|
|
|
7539
7564
|
{ type: Component, args: [{
|
|
7540
7565
|
selector: 'mat-swipe-field',
|
|
7541
7566
|
template: "<mat-form-field [floatLabel]=\"showSlides && (!floatLabel || floatLabel === 'auto') ? 'always': floatLabel\"\n [appearance]=\"appearance\"\n [class]=\"classList\"\n [class.mat-form-field-disabled]=\"disabled\">\n <mat-label *ngIf=\"placeholder && floatLabel!=='never'\">\n {{placeholder}}\n </mat-label>\n <input matInput #fakeInput type=\"text\"\n [formControl]=\"formControl\"\n [readonly]=\"true\"\n (focus)=\"_onFocusFakeInput($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showSlides\"\n [tabindex]=\"tabindex\">\n\n <div class=\"slides-container\" [class.hidden]=\"!showSlides\">\n <ion-slides #slides\n [options]=\"slidesOptions\"\n (ionSlidesDidLoad)=\"slidesLoaded()\"\n (ionSlideReachStart)=\"reachStart(true)\"\n (ionSlideReachEnd)=\"reachEnd(true)\"\n (ionSlideNextEnd)=\"reachStart(false)\"\n (ionSlidePrevEnd)=\"reachEnd(false)\"\n (ionSlideDidChange)=\"slideChanged()\"\n >\n <ion-slide *ngFor=\"let item of $items | async\">\n <ion-label>{{ displayWith(item) }}</ion-label>\n </ion-slide>\n\n </ion-slides>\n </div>\n\n <button #prevButton\n mat-icon-button\n type=\"button\"\n class=\"button-prev\"\n [hidden]=\"!showSlides\"\n [disabled]=\"previousDisabled\"\n (click)=\"previous()\">\n <mat-icon>chevron_left</mat-icon>\n </button>\n <button #nextButton\n mat-icon-button\n type=\"button\"\n class=\"button-next\"\n [hidden]=\"!showSlides\"\n [disabled]=\"nextDisabled\"\n (click)=\"next()\">\n <mat-icon>chevron_right</mat-icon>\n </button>\n\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"clearValue($event)\"\n [hidden]=\"disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"formControl.hasError('entity')\" translate>ERROR.FIELD_INVALID</mat-error>\n\n</mat-form-field>\n",
|
|
7542
|
-
providers: [DEFAULT_VALUE_ACCESSOR
|
|
7567
|
+
providers: [DEFAULT_VALUE_ACCESSOR],
|
|
7543
7568
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
7544
7569
|
styles: [":host{display:inline-block;width:100%;position:relative}input.hidden{display:none}.slides-container .swiper-slide{font-size:16px!important}.slides-container.hidden{visibility:hidden;height:0!important}.button-next,.button-prev{position:absolute;top:calc(50% - 20px);z-index:10}.button-prev{left:0;right:auto}.button-next{left:auto;right:0}"]
|
|
7545
7570
|
},] }
|
|
@@ -7598,14 +7623,14 @@ SharedMatSwipeModule.decorators = [
|
|
|
7598
7623
|
},] }
|
|
7599
7624
|
];
|
|
7600
7625
|
|
|
7601
|
-
const noop$
|
|
7602
|
-
const ɵ0$
|
|
7626
|
+
const noop$1 = () => { };
|
|
7627
|
+
const ɵ0$4 = noop$1;
|
|
7603
7628
|
class MatChipsField {
|
|
7604
7629
|
constructor(cd, formGroupDir) {
|
|
7605
7630
|
this.cd = cd;
|
|
7606
7631
|
this.formGroupDir = formGroupDir;
|
|
7607
|
-
this._onChangeCallback = noop$
|
|
7608
|
-
this._onTouchedCallback = noop$
|
|
7632
|
+
this._onChangeCallback = noop$1;
|
|
7633
|
+
this._onTouchedCallback = noop$1;
|
|
7609
7634
|
this.logPrefix = '[mat-chips] ';
|
|
7610
7635
|
this.formControlName = null;
|
|
7611
7636
|
this.required = false;
|
|
@@ -8477,7 +8502,7 @@ class ProgressBarService {
|
|
|
8477
8502
|
}
|
|
8478
8503
|
}
|
|
8479
8504
|
}
|
|
8480
|
-
ProgressBarService.ɵprov =
|
|
8505
|
+
ProgressBarService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ProgressBarService_Factory() { return new ProgressBarService(); }, token: ProgressBarService, providedIn: "root" });
|
|
8481
8506
|
ProgressBarService.decorators = [
|
|
8482
8507
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
8483
8508
|
];
|
|
@@ -8521,7 +8546,7 @@ class AppGestureConfig extends HammerGestureConfig {
|
|
|
8521
8546
|
return mc;
|
|
8522
8547
|
}
|
|
8523
8548
|
}
|
|
8524
|
-
AppGestureConfig.ɵprov =
|
|
8549
|
+
AppGestureConfig.ɵprov = i0.ɵɵdefineInjectable({ factory: function AppGestureConfig_Factory() { return new AppGestureConfig(); }, token: AppGestureConfig, providedIn: "root" });
|
|
8525
8550
|
AppGestureConfig.decorators = [
|
|
8526
8551
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
8527
8552
|
];
|
|
@@ -8762,7 +8787,7 @@ class MatPaginatorI18n extends MatPaginatorIntl {
|
|
|
8762
8787
|
this.previousPageLabel = this.translate.instant('COMMON.PAGINATOR.PREVIOUS_PAGE');
|
|
8763
8788
|
}
|
|
8764
8789
|
}
|
|
8765
|
-
MatPaginatorI18n.ɵprov =
|
|
8790
|
+
MatPaginatorI18n.ɵprov = i0.ɵɵdefineInjectable({ factory: function MatPaginatorI18n_Factory() { return new MatPaginatorI18n(i0.ɵɵinject(i1$1.TranslateService)); }, token: MatPaginatorI18n, providedIn: "root" });
|
|
8766
8791
|
MatPaginatorI18n.decorators = [
|
|
8767
8792
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
8768
8793
|
];
|
|
@@ -8852,17 +8877,17 @@ function getColorContrast(color, bw) {
|
|
|
8852
8877
|
return rgbArrayToHex(rgb.map(v => 255 - v));
|
|
8853
8878
|
}
|
|
8854
8879
|
|
|
8855
|
-
const noop
|
|
8880
|
+
const noop = () => {
|
|
8856
8881
|
};
|
|
8857
|
-
const ɵ0$
|
|
8882
|
+
const ɵ0$3 = noop;
|
|
8858
8883
|
class AppFormField {
|
|
8859
8884
|
constructor(translate, cd, injector, formGroupDir) {
|
|
8860
8885
|
this.translate = translate;
|
|
8861
8886
|
this.cd = cd;
|
|
8862
8887
|
this.injector = injector;
|
|
8863
8888
|
this.formGroupDir = formGroupDir;
|
|
8864
|
-
this._onChangeCallback = noop
|
|
8865
|
-
this._onTouchedCallback = noop
|
|
8889
|
+
this._onChangeCallback = noop;
|
|
8890
|
+
this._onTouchedCallback = noop;
|
|
8866
8891
|
this.readonly = false;
|
|
8867
8892
|
this.compact = false;
|
|
8868
8893
|
this.floatLabel = 'auto';
|
|
@@ -9298,14 +9323,14 @@ class AudioProvider extends StartableService {
|
|
|
9298
9323
|
});
|
|
9299
9324
|
}
|
|
9300
9325
|
}
|
|
9301
|
-
AudioProvider.ɵprov =
|
|
9326
|
+
AudioProvider.ɵprov = i0.ɵɵdefineInjectable({ factory: function AudioProvider_Factory() { return new AudioProvider(i0.ɵɵinject(i1$4.Platform), i0.ɵɵinject(i2.NativeAudio, 8), i0.ɵɵinject(i3.Vibration, 8), i0.ɵɵinject(i4.AudioManagement, 8)); }, token: AudioProvider, providedIn: "root" });
|
|
9302
9327
|
AudioProvider.decorators = [
|
|
9303
9328
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
9304
9329
|
];
|
|
9305
9330
|
AudioProvider.ctorParameters = () => [
|
|
9306
9331
|
{ type: Platform },
|
|
9307
|
-
{ type: NativeAudio
|
|
9308
|
-
{ type: Vibration
|
|
9332
|
+
{ type: NativeAudio, decorators: [{ type: Optional }] },
|
|
9333
|
+
{ type: Vibration, decorators: [{ type: Optional }] },
|
|
9309
9334
|
{ type: AudioManagement, decorators: [{ type: Optional }] }
|
|
9310
9335
|
];
|
|
9311
9336
|
|
|
@@ -9390,7 +9415,7 @@ class Hotkeys {
|
|
|
9390
9415
|
});
|
|
9391
9416
|
}
|
|
9392
9417
|
}
|
|
9393
|
-
Hotkeys.ɵprov =
|
|
9418
|
+
Hotkeys.ɵprov = i0.ɵɵdefineInjectable({ factory: function Hotkeys_Factory() { return new Hotkeys(i0.ɵɵinject(i1$5.EventManager), i0.ɵɵinject(i2$1.MatDialog), i0.ɵɵinject(i1$3.DOCUMENT), i0.ɵɵinject(i1$4.ModalController), i0.ɵɵinject(i1$4.PopoverController)); }, token: Hotkeys, providedIn: "root" });
|
|
9394
9419
|
Hotkeys.decorators = [
|
|
9395
9420
|
{ type: Injectable, args: [{
|
|
9396
9421
|
providedIn: 'root'
|
|
@@ -9604,7 +9629,7 @@ class ImagesUtils {
|
|
|
9604
9629
|
}
|
|
9605
9630
|
}
|
|
9606
9631
|
|
|
9607
|
-
const uuidv4 = uuidv4Imported;
|
|
9632
|
+
const uuidv4$1 = uuidv4Imported;
|
|
9608
9633
|
class FileService {
|
|
9609
9634
|
constructor(platform,
|
|
9610
9635
|
//private transfer: FileTransfer,
|
|
@@ -9641,7 +9666,7 @@ class FileService {
|
|
|
9641
9666
|
const lastSlashIndex = fileUrl.lastIndexOf('/');
|
|
9642
9667
|
if (lastSlashIndex === -1)
|
|
9643
9668
|
throw new Error('Invalid URL: ' + fileUrl);
|
|
9644
|
-
const fileName = lastSlashIndex < (fileUrl.length - 1) && fileUrl.substring(lastSlashIndex + 1) || uuidv4();
|
|
9669
|
+
const fileName = lastSlashIndex < (fileUrl.length - 1) && fileUrl.substring(lastSlashIndex + 1) || uuidv4$1();
|
|
9645
9670
|
// Download into the file system
|
|
9646
9671
|
if (outputType === 'fileUrl' && this.canUseFileSystem) {
|
|
9647
9672
|
console.warn(`WARN: [file] Downloading image {${fileUrl}} in local filesystem...`);
|
|
@@ -9697,7 +9722,7 @@ class FileService {
|
|
|
9697
9722
|
this._started = true;
|
|
9698
9723
|
}
|
|
9699
9724
|
}
|
|
9700
|
-
FileService.ɵprov =
|
|
9725
|
+
FileService.ɵprov = i0.ɵɵdefineInjectable({ factory: function FileService_Factory() { return new FileService(i0.ɵɵinject(i1$4.Platform), i0.ɵɵinject(i2$2.HttpClient), i0.ɵɵinject(ENVIRONMENT)); }, token: FileService, providedIn: "root" });
|
|
9701
9726
|
FileService.decorators = [
|
|
9702
9727
|
{ type: Injectable, args: [{
|
|
9703
9728
|
providedIn: 'root',
|
|
@@ -9863,7 +9888,7 @@ class Base58 {
|
|
|
9863
9888
|
Base58.alphabet = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
|
|
9864
9889
|
|
|
9865
9890
|
const scrypt = require('scrypt-async');
|
|
9866
|
-
const sha256 = require('hash.js/lib/hash/sha/256');
|
|
9891
|
+
const sha256$1 = require('hash.js/lib/hash/sha/256');
|
|
9867
9892
|
const sha512 = require('hash.js/lib/hash/sha/512');
|
|
9868
9893
|
const nacl = {
|
|
9869
9894
|
sign,
|
|
@@ -9967,7 +9992,7 @@ class CryptoService {
|
|
|
9967
9992
|
* Hash (using SHA256) a message
|
|
9968
9993
|
*/
|
|
9969
9994
|
sha256(message) {
|
|
9970
|
-
return sha256().update(message).digest('hex');
|
|
9995
|
+
return sha256$1().update(message).digest('hex');
|
|
9971
9996
|
}
|
|
9972
9997
|
/**
|
|
9973
9998
|
* Hash (using SHA512) a message
|
|
@@ -9980,7 +10005,7 @@ class CryptoService {
|
|
|
9980
10005
|
return nacl.util.encodeBase64(m);
|
|
9981
10006
|
}
|
|
9982
10007
|
}
|
|
9983
|
-
CryptoService.ɵprov =
|
|
10008
|
+
CryptoService.ɵprov = i0.ɵɵdefineInjectable({ factory: function CryptoService_Factory() { return new CryptoService(); }, token: CryptoService, providedIn: "root" });
|
|
9984
10009
|
CryptoService.decorators = [
|
|
9985
10010
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
9986
10011
|
];
|
|
@@ -10742,7 +10767,7 @@ SelectPeerModal.propDecorators = {
|
|
|
10742
10767
|
onRefresh: [{ type: Input }]
|
|
10743
10768
|
};
|
|
10744
10769
|
|
|
10745
|
-
const moment$
|
|
10770
|
+
const moment$7 = momentImported;
|
|
10746
10771
|
const SETTINGS_STORAGE_KEY = 'settings';
|
|
10747
10772
|
const SETTINGS_TRANSIENT_PROPERTIES = ['mobile', 'touchUi' /*deprecated*/];
|
|
10748
10773
|
// fixme: this constant points to static environment
|
|
@@ -10791,7 +10816,7 @@ class LocalSettingsService extends StartableService {
|
|
|
10791
10816
|
var _a;
|
|
10792
10817
|
if (isNil((_a = this._data) === null || _a === void 0 ? void 0 : _a.mobile)) {
|
|
10793
10818
|
console.warn("[settings] Accessing to property 'mobile' BEFORE service started! Please use ready()");
|
|
10794
|
-
|
|
10819
|
+
this._data.mobile = isMobile(window);
|
|
10795
10820
|
}
|
|
10796
10821
|
return this._data.mobile;
|
|
10797
10822
|
}
|
|
@@ -10985,11 +11010,11 @@ class LocalSettingsService extends StartableService {
|
|
|
10985
11010
|
if (!feature) {
|
|
10986
11011
|
feature = {
|
|
10987
11012
|
name: featureName.toLowerCase(),
|
|
10988
|
-
lastSyncDate: moment$
|
|
11013
|
+
lastSyncDate: moment$7().toISOString()
|
|
10989
11014
|
};
|
|
10990
11015
|
}
|
|
10991
11016
|
else {
|
|
10992
|
-
feature.lastSyncDate = moment$
|
|
11017
|
+
feature.lastSyncDate = moment$7().toISOString();
|
|
10993
11018
|
}
|
|
10994
11019
|
this.saveOfflineFeature(feature);
|
|
10995
11020
|
}
|
|
@@ -11150,7 +11175,7 @@ class LocalSettingsService extends StartableService {
|
|
|
11150
11175
|
if (!page || !page.title || !page.path)
|
|
11151
11176
|
throw Error('Missing required argument \'page\', \'page.path\' or \'page.title\'');
|
|
11152
11177
|
// Set time
|
|
11153
|
-
page.time = page.time || moment$
|
|
11178
|
+
page.time = page.time || moment$7();
|
|
11154
11179
|
// Clean the title (remove <small> tags)
|
|
11155
11180
|
if (!opts || opts.removeTitleSmallTag !== false) {
|
|
11156
11181
|
const tagIndex = page.title.indexOf('</small>');
|
|
@@ -11166,7 +11191,7 @@ class LocalSettingsService extends StartableService {
|
|
|
11166
11191
|
return page;
|
|
11167
11192
|
}
|
|
11168
11193
|
}
|
|
11169
|
-
LocalSettingsService.ɵprov =
|
|
11194
|
+
LocalSettingsService.ɵprov = i0.ɵɵdefineInjectable({ factory: function LocalSettingsService_Factory() { return new LocalSettingsService(i0.ɵɵinject(i1$1.TranslateService), i0.ɵɵinject(i1$4.Platform), i0.ɵɵinject(i3$1.Storage), i0.ɵɵinject(ENVIRONMENT), i0.ɵɵinject(APP_LOCAL_SETTINGS, 8), i0.ɵɵinject(APP_LOCAL_SETTINGS_OPTIONS, 8)); }, token: LocalSettingsService, providedIn: "root" });
|
|
11170
11195
|
LocalSettingsService.decorators = [
|
|
11171
11196
|
{ type: Injectable, args: [{
|
|
11172
11197
|
providedIn: 'root'
|
|
@@ -11883,7 +11908,7 @@ class NetworkService extends StartableService {
|
|
|
11883
11908
|
});
|
|
11884
11909
|
}
|
|
11885
11910
|
}
|
|
11886
|
-
NetworkService.ɵprov =
|
|
11911
|
+
NetworkService.ɵprov = i0.ɵɵdefineInjectable({ factory: function NetworkService_Factory() { return new NetworkService(i0.ɵɵinject(i1$3.DOCUMENT), i0.ɵɵinject(i1$4.Platform), i0.ɵɵinject(i1$4.ModalController), i0.ɵɵinject(CryptoService), i0.ɵɵinject(i3$1.Storage), i0.ɵɵinject(LocalSettingsService), i0.ɵɵinject(i6.CacheService), i0.ɵɵinject(i2$2.HttpClient), i0.ɵɵinject(ENVIRONMENT), i0.ɵɵinject(i9.Network, 8), i0.ɵɵinject(i10.SplashScreen, 8), i0.ɵɵinject(i1$1.TranslateService, 8), i0.ɵɵinject(i1$4.ToastController, 8)); }, token: NetworkService, providedIn: "root" });
|
|
11887
11912
|
NetworkService.decorators = [
|
|
11888
11913
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
11889
11914
|
];
|
|
@@ -11894,11 +11919,11 @@ NetworkService.ctorParameters = () => [
|
|
|
11894
11919
|
{ type: CryptoService },
|
|
11895
11920
|
{ type: Storage },
|
|
11896
11921
|
{ type: LocalSettingsService },
|
|
11897
|
-
{ type: CacheService
|
|
11922
|
+
{ type: CacheService },
|
|
11898
11923
|
{ type: HttpClient },
|
|
11899
11924
|
{ type: undefined, decorators: [{ type: Inject, args: [ENVIRONMENT,] }] },
|
|
11900
|
-
{ type: Network
|
|
11901
|
-
{ type: SplashScreen
|
|
11925
|
+
{ type: Network, decorators: [{ type: Optional }] },
|
|
11926
|
+
{ type: SplashScreen, decorators: [{ type: Optional }] },
|
|
11902
11927
|
{ type: TranslateService, decorators: [{ type: Optional }] },
|
|
11903
11928
|
{ type: ToastController, decorators: [{ type: Optional }] }
|
|
11904
11929
|
];
|
|
@@ -12829,7 +12854,7 @@ class EntitiesStorage extends StartableService {
|
|
|
12829
12854
|
}
|
|
12830
12855
|
EntitiesStorage.TRASH_PREFIX = 'Trash#';
|
|
12831
12856
|
EntitiesStorage.REMOTE_PREFIX = 'Remote#';
|
|
12832
|
-
EntitiesStorage.ɵprov =
|
|
12857
|
+
EntitiesStorage.ɵprov = i0.ɵɵdefineInjectable({ factory: function EntitiesStorage_Factory() { return new EntitiesStorage(i0.ɵɵinject(i1$4.Platform), i0.ɵɵinject(ProgressBarService), i0.ɵɵinject(i3$1.Storage), i0.ɵɵinject(ENVIRONMENT), i0.ɵɵinject(APP_LOCAL_STORAGE_TYPE_POLICIES, 8)); }, token: EntitiesStorage, providedIn: "root" });
|
|
12833
12858
|
EntitiesStorage.decorators = [
|
|
12834
12859
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
12835
12860
|
];
|
|
@@ -12966,10 +12991,10 @@ function referentialToString(obj, properties) {
|
|
|
12966
12991
|
function referentialsToString(values, properties, separator) {
|
|
12967
12992
|
return (values || []).map(v => referentialToString(v, properties)).join(separator || ', ');
|
|
12968
12993
|
}
|
|
12969
|
-
const ɵ0$
|
|
12994
|
+
const ɵ0$2 = StatusIds.ENABLE, ɵ1 = StatusIds.DISABLE, ɵ2 = StatusIds.TEMPORARY;
|
|
12970
12995
|
const StatusList = Object.freeze([
|
|
12971
12996
|
{
|
|
12972
|
-
id: ɵ0$
|
|
12997
|
+
id: ɵ0$2,
|
|
12973
12998
|
icon: 'checkmark',
|
|
12974
12999
|
label: 'REFERENTIAL.STATUS_ENUM.ENABLE'
|
|
12975
13000
|
},
|
|
@@ -13244,7 +13269,7 @@ function accountToString(data) {
|
|
|
13244
13269
|
(data.lastName || '')) || '';
|
|
13245
13270
|
}
|
|
13246
13271
|
|
|
13247
|
-
const uuidv4
|
|
13272
|
+
const uuidv4 = uuidv4Imported;
|
|
13248
13273
|
const _global = typeof global !== 'undefined' ? global : (typeof window !== 'undefined' ? window : {});
|
|
13249
13274
|
const NativeWebSocket = _global.WebSocket || _global.MozWebSocket;
|
|
13250
13275
|
/**
|
|
@@ -13288,7 +13313,7 @@ function createTrackerLink(opts) {
|
|
|
13288
13313
|
// Skip if not tracked
|
|
13289
13314
|
if (!context || !context.tracked)
|
|
13290
13315
|
return forward(operation);
|
|
13291
|
-
const id = context.serializationKey || uuidv4
|
|
13316
|
+
const id = context.serializationKey || uuidv4();
|
|
13292
13317
|
console.debug(`[apollo-tracker-link] Watching tracked query {${operation.operationName}#${id}}`);
|
|
13293
13318
|
// Clean context, before calling JSON.stringify (remove unused attributes)
|
|
13294
13319
|
const cleanContext = Object.assign(Object.assign({}, context), { optimisticResponse: null, cache: null });
|
|
@@ -14028,7 +14053,7 @@ class GraphqlService extends StartableService {
|
|
|
14028
14053
|
return undefined;
|
|
14029
14054
|
}
|
|
14030
14055
|
}
|
|
14031
|
-
GraphqlService.ɵprov =
|
|
14056
|
+
GraphqlService.ɵprov = i0.ɵɵdefineInjectable({ factory: function GraphqlService_Factory() { return new GraphqlService(i0.ɵɵinject(i1$4.Platform), i0.ɵɵinject(i2$3.Apollo), i0.ɵɵinject(i3$2.HttpLink), i0.ɵɵinject(NetworkService), i0.ɵɵinject(i3$1.Storage), i0.ɵɵinject(CryptoService), i0.ɵɵinject(ENVIRONMENT), i0.ɵɵinject(APP_GRAPHQL_TYPE_POLICIES, 8)); }, token: GraphqlService, providedIn: "root" });
|
|
14032
14057
|
GraphqlService.decorators = [
|
|
14033
14058
|
{ type: Injectable, args: [{
|
|
14034
14059
|
providedIn: 'root'
|
|
@@ -14045,7 +14070,7 @@ GraphqlService.ctorParameters = () => [
|
|
|
14045
14070
|
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [APP_GRAPHQL_TYPE_POLICIES,] }] }
|
|
14046
14071
|
];
|
|
14047
14072
|
|
|
14048
|
-
const sha256
|
|
14073
|
+
const sha256 = require('hash.js/lib/hash/sha/256');
|
|
14049
14074
|
class BaseGraphqlServiceOptions {
|
|
14050
14075
|
}
|
|
14051
14076
|
// eslint-disable-next-line @angular-eslint/directive-class-suffix
|
|
@@ -14196,8 +14221,8 @@ class BaseGraphqlService extends StartableService {
|
|
|
14196
14221
|
}
|
|
14197
14222
|
/* -- protected methods -- */
|
|
14198
14223
|
computeMutableWatchQueryId(opts) {
|
|
14199
|
-
const queryName = opts.queryName || sha256
|
|
14200
|
-
const variablesKey = opts.variables && sha256
|
|
14224
|
+
const queryName = opts.queryName || sha256().update(JSON.stringify(opts.query)).digest('hex').substring(0, 8);
|
|
14225
|
+
const variablesKey = opts.variables && sha256().update(JSON.stringify(opts.variables)).digest('hex').substring(0, 8) || '';
|
|
14201
14226
|
return [queryName, opts.arrayFieldName, variablesKey].join('|');
|
|
14202
14227
|
}
|
|
14203
14228
|
findMutableWatchQueries(opts) {
|
|
@@ -14267,7 +14292,7 @@ const DEFAULT_AVATAR_IMAGE = 'assets/img/person.png';
|
|
|
14267
14292
|
/* ------------------------------------
|
|
14268
14293
|
* GraphQL queries
|
|
14269
14294
|
* ------------------------------------*/
|
|
14270
|
-
const Fragments = {
|
|
14295
|
+
const Fragments$1 = {
|
|
14271
14296
|
account: gql `
|
|
14272
14297
|
fragment AccountFragment on AccountVO {
|
|
14273
14298
|
id
|
|
@@ -14302,14 +14327,14 @@ const Fragments = {
|
|
|
14302
14327
|
}`
|
|
14303
14328
|
};
|
|
14304
14329
|
// Load account query
|
|
14305
|
-
const LoadQuery = gql `
|
|
14330
|
+
const LoadQuery$1 = gql `
|
|
14306
14331
|
query Account {
|
|
14307
14332
|
data: account {
|
|
14308
14333
|
...AccountFragment
|
|
14309
14334
|
}
|
|
14310
14335
|
}
|
|
14311
|
-
${Fragments.account}
|
|
14312
|
-
${Fragments.settings}
|
|
14336
|
+
${Fragments$1.account}
|
|
14337
|
+
${Fragments$1.settings}
|
|
14313
14338
|
`;
|
|
14314
14339
|
// Check email query
|
|
14315
14340
|
const IsEmailExistsQuery = gql `
|
|
@@ -14324,21 +14349,21 @@ const AccountMutations = {
|
|
|
14324
14349
|
...AccountFragment
|
|
14325
14350
|
}
|
|
14326
14351
|
}
|
|
14327
|
-
${Fragments.account}
|
|
14328
|
-
${Fragments.settings}`,
|
|
14352
|
+
${Fragments$1.account}
|
|
14353
|
+
${Fragments$1.settings}`,
|
|
14329
14354
|
create: gql `mutation CreateAccount($data:AccountVOInput){
|
|
14330
14355
|
data: createAccount(account: $data){
|
|
14331
14356
|
...AccountFragment
|
|
14332
14357
|
}
|
|
14333
14358
|
}
|
|
14334
|
-
${Fragments.account}
|
|
14335
|
-
${Fragments.settings}`,
|
|
14359
|
+
${Fragments$1.account}
|
|
14360
|
+
${Fragments$1.settings}`,
|
|
14336
14361
|
saveSettings: gql `mutation SaveSettings($data:UserSettingsVOInput){
|
|
14337
14362
|
data: saveSettings(settings: $data){
|
|
14338
14363
|
...UserSettingsFragment
|
|
14339
14364
|
}
|
|
14340
14365
|
}
|
|
14341
|
-
${Fragments.settings}`
|
|
14366
|
+
${Fragments$1.settings}`
|
|
14342
14367
|
};
|
|
14343
14368
|
// Sent confirmation email
|
|
14344
14369
|
const SendConfirmEmailMutation = gql `
|
|
@@ -14849,7 +14874,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
14849
14874
|
// Load remotely
|
|
14850
14875
|
else {
|
|
14851
14876
|
const { data } = yield this.graphql.query({
|
|
14852
|
-
query: LoadQuery,
|
|
14877
|
+
query: LoadQuery$1,
|
|
14853
14878
|
error: { code: ErrorCodes.LOAD_ACCOUNT_ERROR, message: 'ERROR.LOAD_ACCOUNT_ERROR' },
|
|
14854
14879
|
fetchPolicy: opts && opts.fetchPolicy || 'no-cache' || undefined
|
|
14855
14880
|
});
|
|
@@ -15372,7 +15397,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
15372
15397
|
return Toasts.show(this.toastController, this.translate, opts);
|
|
15373
15398
|
}
|
|
15374
15399
|
}
|
|
15375
|
-
AccountService.ɵprov =
|
|
15400
|
+
AccountService.ɵprov = i0.ɵɵdefineInjectable({ factory: function AccountService_Factory() { return new AccountService(i0.ɵɵinject(CryptoService), i0.ɵɵinject(NetworkService), i0.ɵɵinject(GraphqlService), i0.ɵɵinject(LocalSettingsService), i0.ɵɵinject(i3$1.Storage), i0.ɵɵinject(FileService), i0.ɵɵinject(i1$1.TranslateService, 8), i0.ɵɵinject(i1$4.ToastController, 8), i0.ɵɵinject(ENVIRONMENT)); }, token: AccountService, providedIn: "root" });
|
|
15376
15401
|
AccountService.decorators = [
|
|
15377
15402
|
{ type: Injectable, args: [{ providedIn: 'root', deps: [ENVIRONMENT] },] }
|
|
15378
15403
|
];
|
|
@@ -15640,7 +15665,7 @@ const CONFIGURATION_STORAGE_KEY = 'configuration';
|
|
|
15640
15665
|
/* ------------------------------------
|
|
15641
15666
|
* GraphQL queries
|
|
15642
15667
|
* ------------------------------------*/
|
|
15643
|
-
const Fragments
|
|
15668
|
+
const Fragments = {
|
|
15644
15669
|
config: gql `
|
|
15645
15670
|
fragment ConfigFragment on ConfigurationVO {
|
|
15646
15671
|
id
|
|
@@ -15667,13 +15692,13 @@ const Fragments$1 = {
|
|
|
15667
15692
|
}
|
|
15668
15693
|
`
|
|
15669
15694
|
};
|
|
15670
|
-
const LoadQuery
|
|
15695
|
+
const LoadQuery = gql `
|
|
15671
15696
|
query Configuration{
|
|
15672
15697
|
data: configuration{
|
|
15673
15698
|
...ConfigFragment
|
|
15674
15699
|
}
|
|
15675
15700
|
}
|
|
15676
|
-
${Fragments
|
|
15701
|
+
${Fragments.config}
|
|
15677
15702
|
`;
|
|
15678
15703
|
// Save (create or update) account mutation
|
|
15679
15704
|
const SaveMutation = gql `
|
|
@@ -15682,7 +15707,7 @@ const SaveMutation = gql `
|
|
|
15682
15707
|
...ConfigFragment
|
|
15683
15708
|
}
|
|
15684
15709
|
}
|
|
15685
|
-
${Fragments
|
|
15710
|
+
${Fragments.config}
|
|
15686
15711
|
`;
|
|
15687
15712
|
const ClearCache = gql `
|
|
15688
15713
|
query ClearCache($name: String) {
|
|
@@ -15733,7 +15758,7 @@ class ConfigService extends BaseGraphqlService {
|
|
|
15733
15758
|
return __awaiter(this, void 0, void 0, function* () {
|
|
15734
15759
|
const now = Date.now();
|
|
15735
15760
|
console.debug('[config] Loading Pod configuration...');
|
|
15736
|
-
const query = opts && opts.query || LoadQuery
|
|
15761
|
+
const query = opts && opts.query || LoadQuery;
|
|
15737
15762
|
const variables = opts && opts.variables || undefined;
|
|
15738
15763
|
const res = yield this.graphql.query({
|
|
15739
15764
|
query,
|
|
@@ -15972,7 +15997,7 @@ class ConfigService extends BaseGraphqlService {
|
|
|
15972
15997
|
});
|
|
15973
15998
|
}
|
|
15974
15999
|
}
|
|
15975
|
-
ConfigService.ɵprov =
|
|
16000
|
+
ConfigService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ConfigService_Factory() { return new ConfigService(i0.ɵɵinject(i1$4.Platform), i0.ɵɵinject(GraphqlService), i0.ɵɵinject(i3$1.Storage), i0.ɵɵinject(NetworkService), i0.ɵɵinject(FileService), i0.ɵɵinject(i1$4.ToastController), i0.ɵɵinject(i1$1.TranslateService), i0.ɵɵinject(AccountService), i0.ɵɵinject(ENVIRONMENT), i0.ɵɵinject(APP_CONFIG_OPTIONS, 8)); }, token: ConfigService, providedIn: "root" });
|
|
15976
16001
|
ConfigService.decorators = [
|
|
15977
16002
|
{ type: Injectable, args: [{
|
|
15978
16003
|
providedIn: 'root',
|
|
@@ -16218,7 +16243,7 @@ class UriUtils {
|
|
|
16218
16243
|
}
|
|
16219
16244
|
}
|
|
16220
16245
|
|
|
16221
|
-
const moment$
|
|
16246
|
+
const moment$6 = momentImported;
|
|
16222
16247
|
const AndroidOsEnvironment = Object.freeze({
|
|
16223
16248
|
DIRECTORY_DOWNLOADS: 'Download',
|
|
16224
16249
|
DIRECTORY_DOWNLOADS_OLD: 'Downloads',
|
|
@@ -16253,6 +16278,8 @@ class PlatformService extends StartableService {
|
|
|
16253
16278
|
is(platformName) {
|
|
16254
16279
|
switch (platformName) {
|
|
16255
16280
|
case 'mobile':
|
|
16281
|
+
// Exclude Windows touch screens - see sumaris-app issues #323 and #346
|
|
16282
|
+
return isMobile(window);
|
|
16256
16283
|
case 'mobileweb':
|
|
16257
16284
|
// Exclude Windows touch screens - see sumaris-app issues #323 and #346
|
|
16258
16285
|
return this.platform.is(platformName) && !isWindows(window);
|
|
@@ -16479,16 +16506,16 @@ class PlatformService extends StartableService {
|
|
|
16479
16506
|
}
|
|
16480
16507
|
// config moment lib
|
|
16481
16508
|
try {
|
|
16482
|
-
moment$
|
|
16509
|
+
moment$6.locale(event.lang);
|
|
16483
16510
|
console.debug('[platform] Use locale {' + event.lang + '}');
|
|
16484
16511
|
}
|
|
16485
16512
|
// If error, fallback to en
|
|
16486
16513
|
catch (err) {
|
|
16487
|
-
moment$
|
|
16514
|
+
moment$6.locale('en');
|
|
16488
16515
|
console.warn('[platform] Unknown local for moment lib. Using default [en]');
|
|
16489
16516
|
}
|
|
16490
16517
|
// Config date adapter
|
|
16491
|
-
this.dateAdapter.setLocale(moment$
|
|
16518
|
+
this.dateAdapter.setLocale(moment$6.locale());
|
|
16492
16519
|
}
|
|
16493
16520
|
});
|
|
16494
16521
|
this.settings.onChange.subscribe(data => {
|
|
@@ -16688,7 +16715,7 @@ class PlatformService extends StartableService {
|
|
|
16688
16715
|
});
|
|
16689
16716
|
}
|
|
16690
16717
|
}
|
|
16691
|
-
PlatformService.ɵprov =
|
|
16718
|
+
PlatformService.ɵprov = i0.ɵɵdefineInjectable({ factory: function PlatformService_Factory() { return new PlatformService(i0.ɵɵinject(i1$4.Platform), i0.ɵɵinject(i2$4.Platform), i0.ɵɵinject(i1$4.ToastController), i0.ɵɵinject(i1$1.TranslateService), i0.ɵɵinject(i1.MomentDateAdapter), i0.ɵɵinject(EntitiesStorage), i0.ɵɵinject(LocalSettingsService), i0.ɵɵinject(NetworkService), i0.ɵɵinject(AccountService), i0.ɵɵinject(ConfigService), i0.ɵɵinject(i6.CacheService), i0.ɵɵinject(i3$1.Storage), i0.ɵɵinject(AudioProvider), i0.ɵɵinject(ENVIRONMENT), i0.ɵɵinject(i14.StatusBar, 8), i0.ɵɵinject(i15.Keyboard, 8), i0.ɵɵinject(i10.SplashScreen, 8), i0.ɵɵinject(i17.InAppBrowser, 8), i0.ɵɵinject(i18.Downloader, 8)); }, token: PlatformService, providedIn: "root" });
|
|
16692
16719
|
PlatformService.decorators = [
|
|
16693
16720
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
16694
16721
|
];
|
|
@@ -16703,15 +16730,15 @@ PlatformService.ctorParameters = () => [
|
|
|
16703
16730
|
{ type: NetworkService },
|
|
16704
16731
|
{ type: AccountService },
|
|
16705
16732
|
{ type: ConfigService },
|
|
16706
|
-
{ type: CacheService
|
|
16733
|
+
{ type: CacheService },
|
|
16707
16734
|
{ type: Storage },
|
|
16708
16735
|
{ type: AudioProvider },
|
|
16709
16736
|
{ type: undefined, decorators: [{ type: Inject, args: [ENVIRONMENT,] }] },
|
|
16710
|
-
{ type: StatusBar
|
|
16737
|
+
{ type: StatusBar, decorators: [{ type: Optional }] },
|
|
16711
16738
|
{ type: Keyboard, decorators: [{ type: Optional }] },
|
|
16712
|
-
{ type: SplashScreen
|
|
16713
|
-
{ type: InAppBrowser
|
|
16714
|
-
{ type: Downloader
|
|
16739
|
+
{ type: SplashScreen, decorators: [{ type: Optional }] },
|
|
16740
|
+
{ type: InAppBrowser, decorators: [{ type: Optional }] },
|
|
16741
|
+
{ type: Downloader, decorators: [{ type: Optional }] }
|
|
16715
16742
|
];
|
|
16716
16743
|
|
|
16717
16744
|
class AppHelpModal {
|
|
@@ -16776,7 +16803,7 @@ class MatStepperI18n extends MatStepperIntl {
|
|
|
16776
16803
|
this.optionalLabel = this.translate.instant('COMMON.OPTIONAL');
|
|
16777
16804
|
}
|
|
16778
16805
|
}
|
|
16779
|
-
MatStepperI18n.ɵprov =
|
|
16806
|
+
MatStepperI18n.ɵprov = i0.ɵɵdefineInjectable({ factory: function MatStepperI18n_Factory() { return new MatStepperI18n(i0.ɵɵinject(i1$1.TranslateService)); }, token: MatStepperI18n, providedIn: "root" });
|
|
16780
16807
|
MatStepperI18n.decorators = [
|
|
16781
16808
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
16782
16809
|
];
|
|
@@ -18179,28 +18206,30 @@ class InMemoryEntitiesService extends EntitiesService {
|
|
|
18179
18206
|
}
|
|
18180
18207
|
this.dirty = false;
|
|
18181
18208
|
}
|
|
18182
|
-
|
|
18183
|
-
|
|
18184
|
-
|
|
18185
|
-
|
|
18186
|
-
|
|
18187
|
-
|
|
18188
|
-
|
|
18189
|
-
|
|
18209
|
+
loadAll(offset, size, sortBy, sortDirection, filter, opts) {
|
|
18210
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
18211
|
+
offset = offset >= 0 ? offset : 0;
|
|
18212
|
+
size = size >= 0 ? size : -1;
|
|
18213
|
+
if (!this.data) {
|
|
18214
|
+
console.warn('[memory-data-service] Waiting value to be set...');
|
|
18215
|
+
yield firstNotNilPromise(this._onChange);
|
|
18216
|
+
}
|
|
18217
|
+
// Wait end of saving
|
|
18218
|
+
if (this._saving)
|
|
18219
|
+
yield waitFor(() => !this._saving);
|
|
18190
18220
|
const excludedDataByFilter = [];
|
|
18191
18221
|
let excludedDataByPagination;
|
|
18192
18222
|
try {
|
|
18193
|
-
if (
|
|
18223
|
+
if (!this.data.length) {
|
|
18194
18224
|
return { data: [], total: 0 };
|
|
18195
18225
|
}
|
|
18196
18226
|
// Apply sort
|
|
18197
18227
|
let data = this._sortFn(this.data || [], sortBy, sortDirection);
|
|
18198
18228
|
if (this._onLoad) {
|
|
18199
|
-
|
|
18200
|
-
data = ((promiseOrData instanceof Promise)) ? yield promiseOrData : promiseOrData;
|
|
18229
|
+
data = yield this._onLoad(data);
|
|
18201
18230
|
}
|
|
18202
18231
|
// Apply filter (will update hiddenData)
|
|
18203
|
-
data = this.filter(data,
|
|
18232
|
+
data = this.filter(data, filter, excludedDataByFilter);
|
|
18204
18233
|
// Compute the total length
|
|
18205
18234
|
const total = data.length;
|
|
18206
18235
|
// If page size=0 (e.g. only need total)
|
|
@@ -18242,13 +18271,37 @@ class InMemoryEntitiesService extends EntitiesService {
|
|
|
18242
18271
|
if (data === this.data) {
|
|
18243
18272
|
data = data.slice();
|
|
18244
18273
|
}
|
|
18245
|
-
|
|
18274
|
+
const res = { data, total };
|
|
18275
|
+
const nextOffset = (offset || 0) + size;
|
|
18276
|
+
if (nextOffset < total) {
|
|
18277
|
+
res.fetchMore = () => this.loadAll(nextOffset, size, sortBy, sortDirection, filter, opts)
|
|
18278
|
+
.then(res => {
|
|
18279
|
+
var _a;
|
|
18280
|
+
// Update hidden data (remove new fetched item)
|
|
18281
|
+
if ((_a = res.data) === null || _a === void 0 ? void 0 : _a.length) {
|
|
18282
|
+
this._hiddenData = this._hiddenData.filter(item => !res.data.includes(item));
|
|
18283
|
+
}
|
|
18284
|
+
return res;
|
|
18285
|
+
});
|
|
18286
|
+
}
|
|
18287
|
+
return res;
|
|
18246
18288
|
}
|
|
18247
18289
|
finally {
|
|
18248
18290
|
// Remember hidden data
|
|
18249
|
-
|
|
18291
|
+
if (offset === 0) {
|
|
18292
|
+
this._hiddenData = !excludedDataByPagination ? excludedDataByFilter : excludedDataByFilter.concat(...excludedDataByPagination);
|
|
18293
|
+
}
|
|
18250
18294
|
}
|
|
18251
|
-
})
|
|
18295
|
+
});
|
|
18296
|
+
}
|
|
18297
|
+
watchAll(offset, size, sortBy, sortDirection, filterData, options) {
|
|
18298
|
+
offset = offset >= 0 ? offset : 0;
|
|
18299
|
+
size = size >= 0 ? size : -1;
|
|
18300
|
+
if (!this.data) {
|
|
18301
|
+
console.warn('[memory-data-service] Waiting value to be set...');
|
|
18302
|
+
}
|
|
18303
|
+
return this._onChange
|
|
18304
|
+
.pipe(filter(isNotNil), mergeMap(_ => this.loadAll(offset, size, sortBy, sortDirection, filterData, options)));
|
|
18252
18305
|
}
|
|
18253
18306
|
saveAll(data, options) {
|
|
18254
18307
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -18670,7 +18723,7 @@ function state2side(state) {
|
|
|
18670
18723
|
return 1;
|
|
18671
18724
|
}
|
|
18672
18725
|
}
|
|
18673
|
-
const ɵ0$
|
|
18726
|
+
const ɵ0$1 = (defaultStateSize) => [
|
|
18674
18727
|
Math.round((rgbArrayMap.red[0] - 50) / defaultStateSize),
|
|
18675
18728
|
Math.round((255 - rgbArrayMap.red[1]) / defaultStateSize),
|
|
18676
18729
|
Math.round((255 - rgbArrayMap.red[2]) / defaultStateSize)
|
|
@@ -18678,7 +18731,7 @@ const ɵ0$b = (defaultStateSize) => [
|
|
|
18678
18731
|
const SCALE_OPTIONS_DEFAULT = {
|
|
18679
18732
|
startColor: rgbArrayMap.red,
|
|
18680
18733
|
startStates: [0, 2, 3],
|
|
18681
|
-
startStepsFn: ɵ0$
|
|
18734
|
+
startStepsFn: ɵ0$1
|
|
18682
18735
|
};
|
|
18683
18736
|
/**
|
|
18684
18737
|
* Internal function, that create a colors scale, using iteration
|
|
@@ -19485,7 +19538,7 @@ class UserSettingsValidatorService extends AppValidatorService {
|
|
|
19485
19538
|
});
|
|
19486
19539
|
}
|
|
19487
19540
|
}
|
|
19488
|
-
UserSettingsValidatorService.ɵprov =
|
|
19541
|
+
UserSettingsValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function UserSettingsValidatorService_Factory() { return new UserSettingsValidatorService(i0.ɵɵinject(i1$6.FormBuilder)); }, token: UserSettingsValidatorService, providedIn: "root" });
|
|
19489
19542
|
UserSettingsValidatorService.decorators = [
|
|
19490
19543
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
19491
19544
|
];
|
|
@@ -19529,7 +19582,7 @@ class AccountValidatorService extends AppValidatorService {
|
|
|
19529
19582
|
return validatorFns.length ? Validators.compose(validatorFns) : validatorFns.length === 1 ? validatorFns[0] : undefined;
|
|
19530
19583
|
}
|
|
19531
19584
|
}
|
|
19532
|
-
AccountValidatorService.ɵprov =
|
|
19585
|
+
AccountValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function AccountValidatorService_Factory() { return new AccountValidatorService(i0.ɵɵinject(i1$6.FormBuilder), i0.ɵɵinject(AccountService)); }, token: AccountValidatorService, providedIn: "root" });
|
|
19533
19586
|
AccountValidatorService.decorators = [
|
|
19534
19587
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
19535
19588
|
];
|
|
@@ -19823,7 +19876,7 @@ class MenuService {
|
|
|
19823
19876
|
this._$opened.next(false);
|
|
19824
19877
|
}
|
|
19825
19878
|
}
|
|
19826
|
-
MenuService.ɵprov =
|
|
19879
|
+
MenuService.ɵprov = i0.ɵɵdefineInjectable({ factory: function MenuService_Factory() { return new MenuService(); }, token: MenuService, providedIn: "root" });
|
|
19827
19880
|
MenuService.decorators = [
|
|
19828
19881
|
{ type: Injectable, args: [{
|
|
19829
19882
|
providedIn: 'root'
|
|
@@ -20159,7 +20212,7 @@ class LocalSettingsValidatorService extends AppValidatorService {
|
|
|
20159
20212
|
});
|
|
20160
20213
|
}
|
|
20161
20214
|
}
|
|
20162
|
-
LocalSettingsValidatorService.ɵprov =
|
|
20215
|
+
LocalSettingsValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function LocalSettingsValidatorService_Factory() { return new LocalSettingsValidatorService(i0.ɵɵinject(i1$6.FormBuilder), i0.ɵɵinject(NetworkService)); }, token: LocalSettingsValidatorService, providedIn: "root" });
|
|
20163
20216
|
LocalSettingsValidatorService.decorators = [
|
|
20164
20217
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
20165
20218
|
];
|
|
@@ -20778,7 +20831,7 @@ class IsOnFieldModePipe {
|
|
|
20778
20831
|
return value === 'FIELD';
|
|
20779
20832
|
}
|
|
20780
20833
|
}
|
|
20781
|
-
IsOnFieldModePipe.ɵprov =
|
|
20834
|
+
IsOnFieldModePipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsOnFieldModePipe_Factory() { return new IsOnFieldModePipe(); }, token: IsOnFieldModePipe, providedIn: "root" });
|
|
20782
20835
|
IsOnFieldModePipe.decorators = [
|
|
20783
20836
|
{ type: Pipe, args: [{
|
|
20784
20837
|
name: 'isOnField'
|
|
@@ -20790,7 +20843,7 @@ class IsNotOnFieldModePipe {
|
|
|
20790
20843
|
return value !== 'FIELD';
|
|
20791
20844
|
}
|
|
20792
20845
|
}
|
|
20793
|
-
IsNotOnFieldModePipe.ɵprov =
|
|
20846
|
+
IsNotOnFieldModePipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsNotOnFieldModePipe_Factory() { return new IsNotOnFieldModePipe(); }, token: IsNotOnFieldModePipe, providedIn: "root" });
|
|
20794
20847
|
IsNotOnFieldModePipe.decorators = [
|
|
20795
20848
|
{ type: Pipe, args: [{
|
|
20796
20849
|
name: 'isNotOnField'
|
|
@@ -20805,7 +20858,7 @@ class PersonToStringPipe {
|
|
|
20805
20858
|
return PersonUtils.personToString(value);
|
|
20806
20859
|
}
|
|
20807
20860
|
}
|
|
20808
|
-
PersonToStringPipe.ɵprov =
|
|
20861
|
+
PersonToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function PersonToStringPipe_Factory() { return new PersonToStringPipe(); }, token: PersonToStringPipe, providedIn: "root" });
|
|
20809
20862
|
PersonToStringPipe.decorators = [
|
|
20810
20863
|
{ type: Pipe, args: [{
|
|
20811
20864
|
name: 'personToString'
|
|
@@ -21158,7 +21211,7 @@ class IsLoginAccountPipe {
|
|
|
21158
21211
|
return value && value.pubkey && true;
|
|
21159
21212
|
}
|
|
21160
21213
|
}
|
|
21161
|
-
IsLoginAccountPipe.ɵprov =
|
|
21214
|
+
IsLoginAccountPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsLoginAccountPipe_Factory() { return new IsLoginAccountPipe(); }, token: IsLoginAccountPipe, providedIn: "root" });
|
|
21162
21215
|
IsLoginAccountPipe.decorators = [
|
|
21163
21216
|
{ type: Pipe, args: [{
|
|
21164
21217
|
name: 'isLogin'
|
|
@@ -21170,7 +21223,7 @@ class AccountToStringPipe {
|
|
|
21170
21223
|
return accountToString(value);
|
|
21171
21224
|
}
|
|
21172
21225
|
}
|
|
21173
|
-
AccountToStringPipe.ɵprov =
|
|
21226
|
+
AccountToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function AccountToStringPipe_Factory() { return new AccountToStringPipe(); }, token: AccountToStringPipe, providedIn: "root" });
|
|
21174
21227
|
AccountToStringPipe.decorators = [
|
|
21175
21228
|
{ type: Pipe, args: [{
|
|
21176
21229
|
name: 'accountToString'
|
|
@@ -21185,7 +21238,7 @@ class DepartmentToStringPipe {
|
|
|
21185
21238
|
return departmentToString(value);
|
|
21186
21239
|
}
|
|
21187
21240
|
}
|
|
21188
|
-
DepartmentToStringPipe.ɵprov =
|
|
21241
|
+
DepartmentToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DepartmentToStringPipe_Factory() { return new DepartmentToStringPipe(); }, token: DepartmentToStringPipe, providedIn: "root" });
|
|
21189
21242
|
DepartmentToStringPipe.decorators = [
|
|
21190
21243
|
{ type: Pipe, args: [{
|
|
21191
21244
|
name: 'departmentToString'
|
|
@@ -21820,7 +21873,7 @@ class AuthGuardService {
|
|
|
21820
21873
|
}));
|
|
21821
21874
|
}
|
|
21822
21875
|
}
|
|
21823
|
-
AuthGuardService.ɵprov =
|
|
21876
|
+
AuthGuardService.ɵprov = i0.ɵɵdefineInjectable({ factory: function AuthGuardService_Factory() { return new AuthGuardService(i0.ɵɵinject(AccountService), i0.ɵɵinject(i1$4.ModalController), i0.ɵɵinject(i3$3.Router), i0.ɵɵinject(ENVIRONMENT)); }, token: AuthGuardService, providedIn: "root" });
|
|
21824
21877
|
AuthGuardService.decorators = [
|
|
21825
21878
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
21826
21879
|
];
|
|
@@ -22285,8 +22338,6 @@ class AppTableUtils {
|
|
|
22285
22338
|
}
|
|
22286
22339
|
}
|
|
22287
22340
|
|
|
22288
|
-
class AppTableDataSourceOptions {
|
|
22289
|
-
}
|
|
22290
22341
|
// @dynamic
|
|
22291
22342
|
// eslint-disable-next-line @angular-eslint/directive-class-suffix
|
|
22292
22343
|
class EntitiesTableDataSource extends TableDataSource {
|
|
@@ -22299,30 +22350,22 @@ class EntitiesTableDataSource extends TableDataSource {
|
|
|
22299
22350
|
* @param validatorService Service that create instances of the FormGroup used to validate row fields.
|
|
22300
22351
|
* @param config Additional configuration for table.
|
|
22301
22352
|
*/
|
|
22302
|
-
constructor(dataType, dataService, validatorService,
|
|
22303
|
-
super([], dataType, validatorService,
|
|
22353
|
+
constructor(dataType, dataService, validatorService, options) {
|
|
22354
|
+
super([], dataType, validatorService, Object.assign({ dataServiceOptions: {}, debug: (options === null || options === void 0 ? void 0 : options.suppressErrors) === false, keepOriginalDataAfterConfirm: false }, options));
|
|
22304
22355
|
this.dataService = dataService;
|
|
22305
22356
|
this._creating = false;
|
|
22306
22357
|
this._saving = false;
|
|
22307
|
-
this._useValidator = false;
|
|
22308
22358
|
this._stopWatching$ = new Subject();
|
|
22309
22359
|
this._editingRowCount = 0;
|
|
22310
22360
|
this._fetchMoreFn = null;
|
|
22311
22361
|
this.loadingSubject = new BehaviorSubject(undefined);
|
|
22312
|
-
this.
|
|
22313
|
-
this._useValidator = isNotNil(validatorService);
|
|
22314
|
-
this._logTypeName = removeEnd((new dataType()).__typename || 'UnknownVO', 'VO');
|
|
22315
|
-
// For DEV ONLY
|
|
22316
|
-
this._debug = this._options.debug === true;
|
|
22362
|
+
this._entityName = removeEnd((new dataType()).__typename || 'UnknownVO', 'VO');
|
|
22317
22363
|
}
|
|
22318
22364
|
get serviceOptions() {
|
|
22319
|
-
return this.
|
|
22365
|
+
return this.config.dataServiceOptions;
|
|
22320
22366
|
}
|
|
22321
22367
|
set serviceOptions(value) {
|
|
22322
|
-
this.
|
|
22323
|
-
}
|
|
22324
|
-
get options() {
|
|
22325
|
-
return this._options;
|
|
22368
|
+
this.config.dataServiceOptions = value;
|
|
22326
22369
|
}
|
|
22327
22370
|
get loaded() {
|
|
22328
22371
|
return this.loadingSubject.value === false; // Should be false when undefined (initial state)
|
|
@@ -22345,10 +22388,10 @@ class EntitiesTableDataSource extends TableDataSource {
|
|
|
22345
22388
|
return this.dataService.watchAll(offset, size, sortBy, sortDirection, filter, this.serviceOptions)
|
|
22346
22389
|
.pipe(catchError(err => this.handleError(err, 'ERROR.LOAD_DATA_ERROR')), map((res) => {
|
|
22347
22390
|
if (this._saving) {
|
|
22348
|
-
console.info(`[table-datasource] Received ${this.
|
|
22391
|
+
console.info(`[table-datasource] Received ${this._entityName} data (from service), but still saving: skip`);
|
|
22349
22392
|
}
|
|
22350
22393
|
else if (this._editingRowCount > 0) {
|
|
22351
|
-
console.warn(`[table-datasource] Received ${this.
|
|
22394
|
+
console.warn(`[table-datasource] Received ${this._entityName} data, while ${this._editingRowCount} rows still editing: skip; Please check save() implementation in the table!`);
|
|
22352
22395
|
}
|
|
22353
22396
|
else {
|
|
22354
22397
|
this.updateDatasource((res.data || []));
|
|
@@ -22361,6 +22404,18 @@ class EntitiesTableDataSource extends TableDataSource {
|
|
|
22361
22404
|
// ⚠ Notice: Don't put any operator after takeUntil to avoid potential subscription leaks
|
|
22362
22405
|
);
|
|
22363
22406
|
}
|
|
22407
|
+
updateDatasourceFromRows(rows) {
|
|
22408
|
+
var _a;
|
|
22409
|
+
// Avoid to update dataSourceSubject, when not need
|
|
22410
|
+
if ((_a = this.datasourceSubject.observers) === null || _a === void 0 ? void 0 : _a.length) {
|
|
22411
|
+
if (!this.config.suppressErrors)
|
|
22412
|
+
console.warn('[table-datasource] Update datasource subject. Please prefer using \'rowsSubject\' instead of \'datasourceSubject\'');
|
|
22413
|
+
super.updateDatasourceFromRows(rows);
|
|
22414
|
+
}
|
|
22415
|
+
else {
|
|
22416
|
+
console.debug('[table-datasource] Skipping datasourceSubject update (not used yet).');
|
|
22417
|
+
}
|
|
22418
|
+
}
|
|
22364
22419
|
save() {
|
|
22365
22420
|
return __awaiter(this, void 0, void 0, function* () {
|
|
22366
22421
|
if (toBoolean(this.serviceOptions.readOnly, false)) {
|
|
@@ -22369,31 +22424,31 @@ class EntitiesTableDataSource extends TableDataSource {
|
|
|
22369
22424
|
}
|
|
22370
22425
|
// Saving twice (should never occur)
|
|
22371
22426
|
if (this._saving) {
|
|
22372
|
-
console.warn(`[table-datasource] Trying to save ${this.
|
|
22427
|
+
console.warn(`[table-datasource] Trying to save ${this._entityName} rows twice. Skip`);
|
|
22373
22428
|
return false;
|
|
22374
22429
|
}
|
|
22375
22430
|
this._saving = true;
|
|
22376
22431
|
this.markAsLoading();
|
|
22377
22432
|
const onlyDirtyRows = toBoolean(this.serviceOptions.saveOnlyDirtyRows, false);
|
|
22378
22433
|
try {
|
|
22379
|
-
if (this.
|
|
22380
|
-
console.debug(`[table-datasource] Saving ${this.
|
|
22434
|
+
if (this.config.debug)
|
|
22435
|
+
console.debug(`[table-datasource] Saving ${this._entityName} rows... {onlyDirty: ${onlyDirtyRows}}`);
|
|
22381
22436
|
// Get all rows
|
|
22382
|
-
const rows =
|
|
22437
|
+
const rows = this.getRows();
|
|
22383
22438
|
// Finish editing all rows
|
|
22384
22439
|
const invalidRows = rows.filter(row => row.editing && !row.confirmEditCreate());
|
|
22385
22440
|
// Cannot finish some rows: error
|
|
22386
22441
|
if (invalidRows.length) {
|
|
22387
22442
|
// log errors
|
|
22388
|
-
if (this.
|
|
22389
|
-
invalidRows.forEach(row => AppTableUtils.logRowErrors(row, `[table-datasource] ${this.
|
|
22443
|
+
if (this.config.debug)
|
|
22444
|
+
invalidRows.forEach(row => AppTableUtils.logRowErrors(row, `[table-datasource] ${this._entityName} row #${row.id}`));
|
|
22390
22445
|
// Stop with an error
|
|
22391
22446
|
throw { code: ErrorCodes.TABLE_INVALID_ROW_ERROR, message: 'ERROR.TABLE_INVALID_ROW_ERROR' };
|
|
22392
22447
|
}
|
|
22393
22448
|
this._editingRowCount = 0;
|
|
22394
22449
|
let data;
|
|
22395
22450
|
let dataToSave;
|
|
22396
|
-
if (this.
|
|
22451
|
+
if (this.validatorService) {
|
|
22397
22452
|
dataToSave = [];
|
|
22398
22453
|
data = rows.map(row => {
|
|
22399
22454
|
const currentData = new this.dataConstructor();
|
|
@@ -22414,21 +22469,21 @@ class EntitiesTableDataSource extends TableDataSource {
|
|
|
22414
22469
|
}
|
|
22415
22470
|
// If no data to save: exit
|
|
22416
22471
|
if (onlyDirtyRows && !dataToSave.length) {
|
|
22417
|
-
if (this.
|
|
22418
|
-
console.debug(`[table-datasource] No ${this.
|
|
22472
|
+
if (this.config.debug)
|
|
22473
|
+
console.debug(`[table-datasource] No ${this._entityName} data to save. Skip`);
|
|
22419
22474
|
return false;
|
|
22420
22475
|
}
|
|
22421
|
-
if (this.
|
|
22422
|
-
console.debug(`[table-datasource] Asking service to save this ${this.
|
|
22476
|
+
if (this.config.debug)
|
|
22477
|
+
console.debug(`[table-datasource] Asking service to save this ${this._entityName} data:`, dataToSave);
|
|
22423
22478
|
yield this.dataService.saveAll(dataToSave, this.serviceOptions);
|
|
22424
|
-
if (this.
|
|
22425
|
-
console.debug(`[table-datasource] Saving ${this.
|
|
22479
|
+
if (this.config.debug)
|
|
22480
|
+
console.debug(`[table-datasource] Saving ${this._entityName} data [OK]`);
|
|
22426
22481
|
// LP 23/03/2021: update datasource is necessary but can be changed to a refetch() on QueryRef (must be created and registered in GraphqlService.watchQuery)
|
|
22427
22482
|
this.updateDatasource(data, { emitEvent: false });
|
|
22428
22483
|
return true;
|
|
22429
22484
|
}
|
|
22430
22485
|
catch (error) {
|
|
22431
|
-
if (this.
|
|
22486
|
+
if (this.config.debug)
|
|
22432
22487
|
console.error('[table-datasource] Error while saving: ' + error && error.message || error);
|
|
22433
22488
|
throw error;
|
|
22434
22489
|
}
|
|
@@ -22439,17 +22494,13 @@ class EntitiesTableDataSource extends TableDataSource {
|
|
|
22439
22494
|
});
|
|
22440
22495
|
}
|
|
22441
22496
|
updateDatasource(data, opts) {
|
|
22442
|
-
if (this.
|
|
22497
|
+
if (this.config.debug)
|
|
22443
22498
|
console.debug(`[table-datasource] Updating datasource with data:`, data);
|
|
22444
22499
|
super.updateDatasource(data, opts);
|
|
22445
22500
|
if (!opts || opts.emitEvent !== false) {
|
|
22446
22501
|
this.markAsLoaded();
|
|
22447
22502
|
}
|
|
22448
22503
|
}
|
|
22449
|
-
// Overwrite default signature
|
|
22450
|
-
createNew(insertAt) {
|
|
22451
|
-
this.asyncCreateNew(insertAt);
|
|
22452
|
-
}
|
|
22453
22504
|
connect(collectionViewer) {
|
|
22454
22505
|
// DEBUG console.debug("[entities-datasource] connect");
|
|
22455
22506
|
return super.connect(collectionViewer);
|
|
@@ -22471,38 +22522,37 @@ class EntitiesTableDataSource extends TableDataSource {
|
|
|
22471
22522
|
console.warn('[table-datasource] Row still has {editing: true} after confirmCreate()! Force editing to false');
|
|
22472
22523
|
row.validator.disable({ onlySelf: true, emitEvent: false });
|
|
22473
22524
|
}
|
|
22525
|
+
this._editingRowCount--;
|
|
22474
22526
|
return true;
|
|
22475
22527
|
}
|
|
22476
22528
|
confirmEdit(row) {
|
|
22477
22529
|
if (!super.confirmEdit(row))
|
|
22478
22530
|
return false;
|
|
22479
22531
|
if (row.editing && row.validator) {
|
|
22480
|
-
console.warn('[table-datasource] Row still has {editing: true} after
|
|
22532
|
+
console.warn('[table-datasource] Row still has {editing: true} after confirmEdit()! Force editing to false');
|
|
22481
22533
|
row.validator.disable({ onlySelf: true, emitEvent: false });
|
|
22482
22534
|
}
|
|
22535
|
+
this._editingRowCount--;
|
|
22483
22536
|
return true;
|
|
22484
22537
|
}
|
|
22485
22538
|
startEdit(row) {
|
|
22486
|
-
if (
|
|
22487
|
-
|
|
22488
|
-
row.
|
|
22539
|
+
if (!super.startEdit(row))
|
|
22540
|
+
return false;
|
|
22541
|
+
if (!row.editing && row.validator) {
|
|
22542
|
+
console.warn('[table-datasource] Row still has {editing: false} after startEdit()! Force editing');
|
|
22543
|
+
row.validator.enable({ onlySelf: true, emitEvent: false });
|
|
22544
|
+
}
|
|
22489
22545
|
this._editingRowCount++;
|
|
22490
22546
|
}
|
|
22491
|
-
cancelOrDelete(row) {
|
|
22492
|
-
if (this._debug)
|
|
22493
|
-
console.debug('[table-datasource] Cancelling or deleting row', row);
|
|
22494
|
-
row.cancelOrDelete();
|
|
22495
|
-
this._editingRowCount--;
|
|
22496
|
-
}
|
|
22497
22547
|
handleError(error, message) {
|
|
22498
22548
|
const errorMsg = error && error.message || error;
|
|
22499
|
-
console.error(`[table-datasource] Service ${this.
|
|
22549
|
+
console.error(`[table-datasource] Service ${this._entityName} sent error: ${errorMsg}`, error);
|
|
22500
22550
|
this.markAsLoaded();
|
|
22501
22551
|
throw new Error(message || errorMsg);
|
|
22502
22552
|
}
|
|
22503
|
-
|
|
22553
|
+
handleServiceError(error) {
|
|
22504
22554
|
const errorMsg = error && error.message || error;
|
|
22505
|
-
console.error(`[table-datasource] Service ${this.
|
|
22555
|
+
console.error(`[table-datasource] Service ${this._entityName} sent error: ${errorMsg}`, error);
|
|
22506
22556
|
this.markAsLoaded();
|
|
22507
22557
|
throw error;
|
|
22508
22558
|
}
|
|
@@ -22516,9 +22566,11 @@ class EntitiesTableDataSource extends TableDataSource {
|
|
|
22516
22566
|
console.error(`[table-datasource] Row to delete with id=${id} not found`);
|
|
22517
22567
|
return;
|
|
22518
22568
|
}
|
|
22569
|
+
if (row.editing)
|
|
22570
|
+
this._editingRowCount--;
|
|
22519
22571
|
this.loadingSubject.next(true);
|
|
22520
22572
|
this.dataService.deleteAll([row.currentData], this.serviceOptions)
|
|
22521
|
-
.catch(err => this.
|
|
22573
|
+
.catch(err => this.handleServiceError(err))
|
|
22522
22574
|
.then(() => {
|
|
22523
22575
|
setTimeout(() => {
|
|
22524
22576
|
// make sure row has been deleted (because GrapQHl cache remove can failed)
|
|
@@ -22530,66 +22582,73 @@ class EntitiesTableDataSource extends TableDataSource {
|
|
|
22530
22582
|
});
|
|
22531
22583
|
}
|
|
22532
22584
|
deleteAll(rows) {
|
|
22533
|
-
|
|
22534
|
-
|
|
22535
|
-
|
|
22536
|
-
|
|
22537
|
-
|
|
22538
|
-
|
|
22539
|
-
|
|
22540
|
-
|
|
22541
|
-
|
|
22542
|
-
|
|
22543
|
-
|
|
22544
|
-
|
|
22545
|
-
|
|
22546
|
-
|
|
22547
|
-
|
|
22548
|
-
|
|
22549
|
-
|
|
22550
|
-
|
|
22551
|
-
|
|
22552
|
-
|
|
22553
|
-
|
|
22554
|
-
|
|
22585
|
+
const _super = Object.create(null, {
|
|
22586
|
+
delete: { get: () => super.delete }
|
|
22587
|
+
});
|
|
22588
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
22589
|
+
this.markAsLoading();
|
|
22590
|
+
const data = this.getDataFromRows(rows);
|
|
22591
|
+
const rowsById = Beans.collectById(rows);
|
|
22592
|
+
try {
|
|
22593
|
+
// Call service deletion
|
|
22594
|
+
yield this.dataService.deleteAll(data, this.serviceOptions);
|
|
22595
|
+
// Workaround, to be sure all rows have been deleted
|
|
22596
|
+
// Sometimes, the service miss deletion, or GrapQHl cache remove failed
|
|
22597
|
+
const rowNotDeleted = this.getRows().map(row => rows.find(r => r === row));
|
|
22598
|
+
// Apply missing deletion
|
|
22599
|
+
if (isNotEmptyArray(rowNotDeleted)) {
|
|
22600
|
+
console.warn(`[table-datasource] Force deletion of ${rowNotDeleted.length} rows (Is service update the cache ?)`);
|
|
22601
|
+
rowNotDeleted
|
|
22602
|
+
// Start from the end
|
|
22603
|
+
.sort((a, b) => a.id > b.id ? -1 : 1)
|
|
22604
|
+
.forEach(r => _super.delete.call(this, r.id));
|
|
22605
|
+
}
|
|
22606
|
+
}
|
|
22607
|
+
catch (err) {
|
|
22608
|
+
// Handle sservice error
|
|
22609
|
+
this.handleServiceError(err);
|
|
22610
|
+
}
|
|
22611
|
+
finally {
|
|
22612
|
+
this.loadingSubject.next(false);
|
|
22555
22613
|
}
|
|
22556
|
-
this.loadingSubject.next(false);
|
|
22557
22614
|
});
|
|
22558
22615
|
}
|
|
22559
22616
|
getRows() {
|
|
22560
|
-
return
|
|
22617
|
+
return this.rowsSubject.getValue();
|
|
22561
22618
|
}
|
|
22562
|
-
|
|
22619
|
+
createNew(insertAt) {
|
|
22563
22620
|
const _super = Object.create(null, {
|
|
22564
22621
|
createNew: { get: () => super.createNew }
|
|
22565
22622
|
});
|
|
22623
|
+
var _a;
|
|
22566
22624
|
return __awaiter(this, void 0, void 0, function* () {
|
|
22567
22625
|
if (this._creating)
|
|
22568
22626
|
return; // Avoid multiple call (should never occur)
|
|
22569
22627
|
this._creating = true;
|
|
22570
|
-
|
|
22571
|
-
|
|
22572
|
-
|
|
22573
|
-
|
|
22574
|
-
|
|
22575
|
-
if (res instanceof Promise) {
|
|
22628
|
+
try {
|
|
22629
|
+
const row = yield _super.createNew.call(this, insertAt);
|
|
22630
|
+
if (!row)
|
|
22631
|
+
return;
|
|
22632
|
+
if ((_a = this.config) === null || _a === void 0 ? void 0 : _a.onRowCreated) {
|
|
22576
22633
|
try {
|
|
22577
|
-
yield
|
|
22634
|
+
yield this.config.onRowCreated(row);
|
|
22578
22635
|
}
|
|
22579
22636
|
catch (err) {
|
|
22637
|
+
// Log, then continue
|
|
22580
22638
|
console.error(err && err.message || err, err);
|
|
22581
22639
|
}
|
|
22582
22640
|
}
|
|
22641
|
+
this._editingRowCount++;
|
|
22642
|
+
return row;
|
|
22643
|
+
}
|
|
22644
|
+
finally {
|
|
22645
|
+
this._creating = false;
|
|
22583
22646
|
}
|
|
22584
|
-
this._editingRowCount++;
|
|
22585
|
-
this._creating = false;
|
|
22586
22647
|
});
|
|
22587
22648
|
}
|
|
22588
22649
|
getData() {
|
|
22589
|
-
|
|
22590
|
-
|
|
22591
|
-
return this.getDataFromRows(rows);
|
|
22592
|
-
});
|
|
22650
|
+
const rows = this.getRows();
|
|
22651
|
+
return this.getDataFromRows(rows);
|
|
22593
22652
|
}
|
|
22594
22653
|
fetchMore(opts) {
|
|
22595
22654
|
const _super = Object.create(null, {
|
|
@@ -22599,20 +22658,20 @@ class EntitiesTableDataSource extends TableDataSource {
|
|
|
22599
22658
|
if (!this._fetchMoreFn)
|
|
22600
22659
|
return false; // Avoid multiple call
|
|
22601
22660
|
if (this._editingRowCount > 0) {
|
|
22602
|
-
console.warn(
|
|
22661
|
+
console.warn(`Cannot fetch more ${this._entityName} because ${this._editingRowCount} row(s) still editing`);
|
|
22603
22662
|
return;
|
|
22604
22663
|
}
|
|
22664
|
+
console.debug(`Will fetching more row(s) still...`);
|
|
22605
22665
|
// Forget the fetchMore function, to avoid multiple call
|
|
22606
22666
|
const fetchMoreFn = this._fetchMoreFn;
|
|
22607
22667
|
this._fetchMoreFn = null;
|
|
22608
22668
|
// Fetch next page
|
|
22609
22669
|
const res = yield fetchMoreFn();
|
|
22610
22670
|
// Skip if empty (no more data)
|
|
22611
|
-
if (
|
|
22671
|
+
if (isEmptyArray(res === null || res === void 0 ? void 0 : res.data))
|
|
22612
22672
|
return false;
|
|
22613
22673
|
// Update the data source
|
|
22614
|
-
|
|
22615
|
-
_super.updateDatasource.call(this, existingData.concat(...res.data), opts);
|
|
22674
|
+
_super.updateDatasource.call(this, (this.currentData || []).concat(...res.data), opts);
|
|
22616
22675
|
// Remember fetchMore
|
|
22617
22676
|
this._fetchMoreFn = res.fetchMore;
|
|
22618
22677
|
return true;
|
|
@@ -22636,8 +22695,8 @@ EntitiesTableDataSource.decorators = [
|
|
|
22636
22695
|
EntitiesTableDataSource.ctorParameters = () => [
|
|
22637
22696
|
{ type: Function },
|
|
22638
22697
|
{ type: undefined },
|
|
22639
|
-
{ type:
|
|
22640
|
-
{ type:
|
|
22698
|
+
{ type: undefined },
|
|
22699
|
+
{ type: undefined }
|
|
22641
22700
|
];
|
|
22642
22701
|
|
|
22643
22702
|
const SETTINGS_DISPLAY_COLUMNS = 'displayColumns';
|
|
@@ -23925,7 +23984,7 @@ class AppTable {
|
|
|
23925
23984
|
return __awaiter(this, void 0, void 0, function* () {
|
|
23926
23985
|
this.focusFirstColumn = true;
|
|
23927
23986
|
this.focusColumn = (opts === null || opts === void 0 ? void 0 : opts.focusColumn) || this.firstUserColumn;
|
|
23928
|
-
yield this._dataSource.
|
|
23987
|
+
yield this._dataSource.createNew(insertAt);
|
|
23929
23988
|
this.editedRow = this._dataSource.getRow(-1);
|
|
23930
23989
|
// Emit start editing event
|
|
23931
23990
|
this.onStartEditingRow.emit(this.editedRow);
|
|
@@ -24108,7 +24167,7 @@ class AppTable {
|
|
|
24108
24167
|
var _a, _b;
|
|
24109
24168
|
return __awaiter(this, void 0, void 0, function* () {
|
|
24110
24169
|
// Mark row as pristine
|
|
24111
|
-
const markRowAsPristine = ((_a = this.dataSource) === null || _a === void 0 ? void 0 : _a.
|
|
24170
|
+
const markRowAsPristine = ((_a = this.dataSource) === null || _a === void 0 ? void 0 : _a.config.restoreOriginalDataOnCancel) === true;
|
|
24112
24171
|
if (markRowAsPristine) {
|
|
24113
24172
|
(_b = row.validator) === null || _b === void 0 ? void 0 : _b.markAsPristine();
|
|
24114
24173
|
// Check if table is now pristine
|
|
@@ -26000,7 +26059,7 @@ AppInMemoryTable.ctorParameters = () => [
|
|
|
26000
26059
|
{ type: Function },
|
|
26001
26060
|
{ type: InMemoryEntitiesService },
|
|
26002
26061
|
{ type: ValidatorService },
|
|
26003
|
-
{ type:
|
|
26062
|
+
{ type: undefined },
|
|
26004
26063
|
{ type: undefined }
|
|
26005
26064
|
];
|
|
26006
26065
|
AppInMemoryTable.propDecorators = {
|
|
@@ -26017,7 +26076,7 @@ const SocialErrorCodes = {
|
|
|
26017
26076
|
SUBSCRIBE_JOB_PROGRESSION_ERROR: 50010
|
|
26018
26077
|
};
|
|
26019
26078
|
|
|
26020
|
-
const moment$
|
|
26079
|
+
const moment$4 = momentImported;
|
|
26021
26080
|
const USER_EVENT_SERVICE = new InjectionToken('UserEventService');
|
|
26022
26081
|
class AbstractUserEventService extends BaseGraphqlService {
|
|
26023
26082
|
constructor(graphql, accountService, network, translate, options) {
|
|
@@ -26383,7 +26442,7 @@ class AbstractUserEventService extends BaseGraphqlService {
|
|
|
26383
26442
|
}
|
|
26384
26443
|
resetCount() {
|
|
26385
26444
|
this._countSubject.next(undefined);
|
|
26386
|
-
this.resetCountDate = moment$
|
|
26445
|
+
this.resetCountDate = moment$4();
|
|
26387
26446
|
// restart listening count changes
|
|
26388
26447
|
this.startListenCountChanges();
|
|
26389
26448
|
}
|
|
@@ -26443,7 +26502,7 @@ class AbstractUserEventService extends BaseGraphqlService {
|
|
|
26443
26502
|
if (!userEvents.length)
|
|
26444
26503
|
return;
|
|
26445
26504
|
// set read date
|
|
26446
|
-
userEvents.forEach(userEvent => userEvent.readDate = moment$
|
|
26505
|
+
userEvents.forEach(userEvent => userEvent.readDate = moment$4());
|
|
26447
26506
|
// split local/remote entities
|
|
26448
26507
|
const localEntities = userEvents.filter(userEvent => !userEvent.id || userEvent.id < 0);
|
|
26449
26508
|
const remoteEntities = userEvents.filter(userEvent => userEvent.id > 0);
|
|
@@ -27418,7 +27477,7 @@ class MessageService extends BaseGraphqlService {
|
|
|
27418
27477
|
});
|
|
27419
27478
|
}
|
|
27420
27479
|
}
|
|
27421
|
-
MessageService.ɵprov =
|
|
27480
|
+
MessageService.ɵprov = i0.ɵɵdefineInjectable({ factory: function MessageService_Factory() { return new MessageService(i0.ɵɵinject(GraphqlService), i0.ɵɵinject(i1$1.TranslateService), i0.ɵɵinject(i1$4.ToastController), i0.ɵɵinject(ENVIRONMENT, 8)); }, token: MessageService, providedIn: "root" });
|
|
27422
27481
|
MessageService.decorators = [
|
|
27423
27482
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
27424
27483
|
];
|
|
@@ -27627,7 +27686,7 @@ class PersonService extends BaseEntityService {
|
|
|
27627
27686
|
return target;
|
|
27628
27687
|
}
|
|
27629
27688
|
}
|
|
27630
|
-
PersonService.ɵprov =
|
|
27689
|
+
PersonService.ɵprov = i0.ɵɵdefineInjectable({ factory: function PersonService_Factory() { return new PersonService(i0.ɵɵinject(GraphqlService), i0.ɵɵinject(PlatformService), i0.ɵɵinject(NetworkService), i0.ɵɵinject(EntitiesStorage)); }, token: PersonService, providedIn: "root" });
|
|
27631
27690
|
PersonService.decorators = [
|
|
27632
27691
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
27633
27692
|
];
|
|
@@ -27658,7 +27717,7 @@ class PersonValidatorService {
|
|
|
27658
27717
|
return this.formBuilder.group(formConfig);
|
|
27659
27718
|
}
|
|
27660
27719
|
}
|
|
27661
|
-
PersonValidatorService.ɵprov =
|
|
27720
|
+
PersonValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function PersonValidatorService_Factory() { return new PersonValidatorService(i0.ɵɵinject(i1$6.FormBuilder), i0.ɵɵinject(AccountValidatorService)); }, token: PersonValidatorService, providedIn: "root" });
|
|
27662
27721
|
PersonValidatorService.decorators = [
|
|
27663
27722
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
27664
27723
|
];
|
|
@@ -27887,17 +27946,17 @@ AdminModule.decorators = [
|
|
|
27887
27946
|
];
|
|
27888
27947
|
AdminModule.ctorParameters = () => [];
|
|
27889
27948
|
|
|
27890
|
-
const ɵ0
|
|
27949
|
+
const ɵ0 = {
|
|
27891
27950
|
profile: 'ADMIN'
|
|
27892
27951
|
};
|
|
27893
|
-
const routes = [
|
|
27952
|
+
const routes$6 = [
|
|
27894
27953
|
{
|
|
27895
27954
|
path: 'users',
|
|
27896
27955
|
pathMatch: 'full',
|
|
27897
27956
|
component: UsersPage,
|
|
27898
27957
|
canActivate: [AuthGuardService],
|
|
27899
27958
|
canDeactivate: [ComponentDirtyGuard],
|
|
27900
|
-
data: ɵ0
|
|
27959
|
+
data: ɵ0
|
|
27901
27960
|
}
|
|
27902
27961
|
];
|
|
27903
27962
|
class AdminRoutingModule {
|
|
@@ -27907,27 +27966,27 @@ AdminRoutingModule.decorators = [
|
|
|
27907
27966
|
imports: [
|
|
27908
27967
|
SharedRoutingModule,
|
|
27909
27968
|
AdminModule,
|
|
27910
|
-
RouterModule.forChild(routes)
|
|
27969
|
+
RouterModule.forChild(routes$6)
|
|
27911
27970
|
],
|
|
27912
27971
|
exports: [RouterModule]
|
|
27913
27972
|
},] }
|
|
27914
27973
|
];
|
|
27915
27974
|
|
|
27916
|
-
class EntityTestClass {
|
|
27975
|
+
class EntityTestClass$1 {
|
|
27917
27976
|
}
|
|
27918
|
-
const FAKE_ENTITIES = [
|
|
27977
|
+
const FAKE_ENTITIES$1 = [
|
|
27919
27978
|
{ id: 1, label: 'AAA', name: 'Item A', description: 'Very long description A', comments: 'Very very long comments... again for A' },
|
|
27920
27979
|
{ id: 2, label: 'BBB', name: 'Item B', description: 'Very long description B', comments: 'Very very long comments... again for B' },
|
|
27921
27980
|
{ id: 3, label: 'CCC', name: 'Item C', description: 'Very long description C', comments: 'Very very long comments... again for C' }
|
|
27922
27981
|
];
|
|
27923
|
-
function deepCopy(values, size) {
|
|
27982
|
+
function deepCopy$1(values, size) {
|
|
27924
27983
|
if (isNil(size)) {
|
|
27925
|
-
return (values || FAKE_ENTITIES).map(entity => Object.assign({}, entity));
|
|
27984
|
+
return (values || FAKE_ENTITIES$1).map(entity => Object.assign({}, entity));
|
|
27926
27985
|
}
|
|
27927
27986
|
let result = [];
|
|
27928
27987
|
let i = 1;
|
|
27929
27988
|
while (result.length < size) {
|
|
27930
|
-
result = result.concat((values || FAKE_ENTITIES).map(entity => {
|
|
27989
|
+
result = result.concat((values || FAKE_ENTITIES$1).map(entity => {
|
|
27931
27990
|
const name = entity.name + ' #' + i;
|
|
27932
27991
|
return Object.assign(Object.assign({}, entity), { id: i++, name });
|
|
27933
27992
|
}));
|
|
@@ -27937,7 +27996,7 @@ function deepCopy(values, size) {
|
|
|
27937
27996
|
class AutocompleteTestPage {
|
|
27938
27997
|
constructor(formBuilder) {
|
|
27939
27998
|
this.formBuilder = formBuilder;
|
|
27940
|
-
this._items = deepCopy(FAKE_ENTITIES, 100);
|
|
27999
|
+
this._items = deepCopy$1(FAKE_ENTITIES$1, 100);
|
|
27941
28000
|
this._$items = new BehaviorSubject(undefined);
|
|
27942
28001
|
this.autocompleteFields = new MatAutocompleteConfigHolder();
|
|
27943
28002
|
this.memoryHide = false;
|
|
@@ -27982,7 +28041,7 @@ class AutocompleteTestPage {
|
|
|
27982
28041
|
});
|
|
27983
28042
|
// From items
|
|
27984
28043
|
this.autocompleteFields.add('entity-items-large', {
|
|
27985
|
-
items: FAKE_ENTITIES.slice(),
|
|
28044
|
+
items: FAKE_ENTITIES$1.slice(),
|
|
27986
28045
|
attributes: ['label', 'name', 'description', 'comments'],
|
|
27987
28046
|
displayWith: this.entityToString
|
|
27988
28047
|
});
|
|
@@ -28014,14 +28073,14 @@ class AutocompleteTestPage {
|
|
|
28014
28073
|
loadData() {
|
|
28015
28074
|
return __awaiter(this, void 0, void 0, function* () {
|
|
28016
28075
|
const data = {
|
|
28017
|
-
entity: deepCopy(FAKE_ENTITIES)[0],
|
|
28018
|
-
farEntity: deepCopy(FAKE_ENTITIES)[2],
|
|
28076
|
+
entity: deepCopy$1(FAKE_ENTITIES$1)[0],
|
|
28077
|
+
farEntity: deepCopy$1(FAKE_ENTITIES$1)[2],
|
|
28019
28078
|
// This item is NOT in the items list => i should be displayed anyway
|
|
28020
28079
|
missingEntity: {
|
|
28021
28080
|
id: -1, label: '??', name: 'Missing item'
|
|
28022
28081
|
},
|
|
28023
|
-
disableEntity: deepCopy(FAKE_ENTITIES)[2],
|
|
28024
|
-
entities: deepCopy(FAKE_ENTITIES)
|
|
28082
|
+
disableEntity: deepCopy$1(FAKE_ENTITIES$1)[2],
|
|
28083
|
+
entities: deepCopy$1(FAKE_ENTITIES$1)
|
|
28025
28084
|
};
|
|
28026
28085
|
this.form.setValue(data);
|
|
28027
28086
|
// Load observables
|
|
@@ -28171,13 +28230,13 @@ LatLongTestPage.ctorParameters = () => [
|
|
|
28171
28230
|
{ type: FormBuilder }
|
|
28172
28231
|
];
|
|
28173
28232
|
|
|
28174
|
-
const moment$
|
|
28233
|
+
const moment$3 = momentImported;
|
|
28175
28234
|
class SwipeTestPage {
|
|
28176
28235
|
constructor(formBuilder, dateFormatPipe) {
|
|
28177
28236
|
this.formBuilder = formBuilder;
|
|
28178
28237
|
this.dateFormatPipe = dateFormatPipe;
|
|
28179
28238
|
this.$dates = new BehaviorSubject(undefined);
|
|
28180
|
-
this._today = moment$
|
|
28239
|
+
this._today = moment$3().startOf('day');
|
|
28181
28240
|
this.form = formBuilder.group({
|
|
28182
28241
|
empty: [null, Validators.required],
|
|
28183
28242
|
date: [null, Validators.compose([Validators.required, SharedValidators.validDate])],
|
|
@@ -28190,7 +28249,7 @@ class SwipeTestPage {
|
|
|
28190
28249
|
ngOnInit() {
|
|
28191
28250
|
const dates = [];
|
|
28192
28251
|
for (let d = 0; d < 7; d++) {
|
|
28193
|
-
dates[d] = moment$
|
|
28252
|
+
dates[d] = moment$3(this._today).add(d - 3, 'day');
|
|
28194
28253
|
}
|
|
28195
28254
|
this.$dates.next(dates);
|
|
28196
28255
|
this.loadData();
|
|
@@ -28231,7 +28290,7 @@ SwipeTestPage.ctorParameters = () => [
|
|
|
28231
28290
|
{ type: DateFormatPipe }
|
|
28232
28291
|
];
|
|
28233
28292
|
|
|
28234
|
-
const moment$
|
|
28293
|
+
const moment$2 = momentImported;
|
|
28235
28294
|
class DateTimeTestPage {
|
|
28236
28295
|
constructor(platform, formBuilder, cd) {
|
|
28237
28296
|
this.platform = platform;
|
|
@@ -28265,7 +28324,7 @@ class DateTimeTestPage {
|
|
|
28265
28324
|
// Load the form with data
|
|
28266
28325
|
loadData() {
|
|
28267
28326
|
return __awaiter(this, void 0, void 0, function* () {
|
|
28268
|
-
const now = moment$
|
|
28327
|
+
const now = moment$2();
|
|
28269
28328
|
const data = {
|
|
28270
28329
|
empty: null,
|
|
28271
28330
|
emptyRequired: null,
|
|
@@ -28331,9 +28390,9 @@ DateTimeTestPage.ctorParameters = () => [
|
|
|
28331
28390
|
{ type: ChangeDetectorRef }
|
|
28332
28391
|
];
|
|
28333
28392
|
|
|
28334
|
-
class EntityTestClass
|
|
28393
|
+
class EntityTestClass {
|
|
28335
28394
|
}
|
|
28336
|
-
const FAKE_ENTITIES
|
|
28395
|
+
const FAKE_ENTITIES = [
|
|
28337
28396
|
{ id: 1, label: 'AAA', name: 'Item A' },
|
|
28338
28397
|
{ id: 2, label: 'BBB', name: 'Item B' },
|
|
28339
28398
|
{ id: 3, label: 'CCC', name: 'Item C' },
|
|
@@ -28342,14 +28401,14 @@ const FAKE_ENTITIES$1 = [
|
|
|
28342
28401
|
{ id: 6, label: 'FFF', name: 'Item F' },
|
|
28343
28402
|
{ id: 7, label: 'GGG', name: 'Item G' }
|
|
28344
28403
|
];
|
|
28345
|
-
function deepCopy
|
|
28404
|
+
function deepCopy(values, size) {
|
|
28346
28405
|
if (isNil(size)) {
|
|
28347
|
-
return (values || FAKE_ENTITIES
|
|
28406
|
+
return (values || FAKE_ENTITIES).map(entity => Object.assign({}, entity));
|
|
28348
28407
|
}
|
|
28349
28408
|
let result = [];
|
|
28350
28409
|
let i = 1;
|
|
28351
28410
|
while (result.length < size) {
|
|
28352
|
-
result = result.concat((values || FAKE_ENTITIES
|
|
28411
|
+
result = result.concat((values || FAKE_ENTITIES).map(entity => {
|
|
28353
28412
|
const name = entity.name + ' #' + i;
|
|
28354
28413
|
return Object.assign(Object.assign({}, entity), { id: i++, name });
|
|
28355
28414
|
}));
|
|
@@ -28359,7 +28418,7 @@ function deepCopy$1(values, size) {
|
|
|
28359
28418
|
class ChipsTestPage {
|
|
28360
28419
|
constructor(formBuilder) {
|
|
28361
28420
|
this.formBuilder = formBuilder;
|
|
28362
|
-
this._items = deepCopy
|
|
28421
|
+
this._items = deepCopy(FAKE_ENTITIES, 100);
|
|
28363
28422
|
this._$items = new BehaviorSubject(undefined);
|
|
28364
28423
|
this.autocompleteFields = new MatAutocompleteConfigHolder();
|
|
28365
28424
|
this.appearance = 'legacy';
|
|
@@ -28399,7 +28458,7 @@ class ChipsTestPage {
|
|
|
28399
28458
|
// Load the form with data
|
|
28400
28459
|
loadData() {
|
|
28401
28460
|
return __awaiter(this, void 0, void 0, function* () {
|
|
28402
|
-
const items = deepCopy
|
|
28461
|
+
const items = deepCopy(FAKE_ENTITIES);
|
|
28403
28462
|
const data = {
|
|
28404
28463
|
entity: items.slice(0, 1),
|
|
28405
28464
|
entityInitial: items.slice(1, 2),
|
|
@@ -28515,7 +28574,7 @@ NumpadTestPage.ctorParameters = () => [
|
|
|
28515
28574
|
{ type: FormBuilder }
|
|
28516
28575
|
];
|
|
28517
28576
|
|
|
28518
|
-
const moment$
|
|
28577
|
+
const moment$1 = momentImported;
|
|
28519
28578
|
class DateTestPage {
|
|
28520
28579
|
constructor(formBuilder, cd) {
|
|
28521
28580
|
this.formBuilder = formBuilder;
|
|
@@ -28548,7 +28607,7 @@ class DateTestPage {
|
|
|
28548
28607
|
// Load the form with data
|
|
28549
28608
|
loadData() {
|
|
28550
28609
|
return __awaiter(this, void 0, void 0, function* () {
|
|
28551
|
-
const now = moment$
|
|
28610
|
+
const now = moment$1();
|
|
28552
28611
|
const nowAtMahe = now.clone().tz(this.timezone).startOf('day');
|
|
28553
28612
|
const data = {
|
|
28554
28613
|
empty: null,
|
|
@@ -28626,7 +28685,7 @@ const SHARED_MATERIAL_TESTING_PAGES = [
|
|
|
28626
28685
|
{ label: 'Shared directives', divider: true },
|
|
28627
28686
|
{ label: 'Badge icon directive', page: '/testing/shared/badge-icon' }
|
|
28628
28687
|
];
|
|
28629
|
-
const routes$
|
|
28688
|
+
const routes$5 = [
|
|
28630
28689
|
{
|
|
28631
28690
|
path: '',
|
|
28632
28691
|
pathMatch: 'full',
|
|
@@ -28683,7 +28742,7 @@ MaterialTestingModule.decorators = [
|
|
|
28683
28742
|
ReactiveFormsModule,
|
|
28684
28743
|
SharedMaterialModule,
|
|
28685
28744
|
TranslateModule.forChild(),
|
|
28686
|
-
RouterModule.forChild(routes$
|
|
28745
|
+
RouterModule.forChild(routes$5)
|
|
28687
28746
|
],
|
|
28688
28747
|
declarations: [
|
|
28689
28748
|
DateTimeTestPage,
|
|
@@ -28744,7 +28803,7 @@ ToastTestingPage.ctorParameters = () => [
|
|
|
28744
28803
|
{ type: TranslateService }
|
|
28745
28804
|
];
|
|
28746
28805
|
|
|
28747
|
-
const routes$
|
|
28806
|
+
const routes$4 = [
|
|
28748
28807
|
{
|
|
28749
28808
|
path: 'toast',
|
|
28750
28809
|
pathMatch: 'full',
|
|
@@ -28759,7 +28818,7 @@ ToastTestingModule.decorators = [
|
|
|
28759
28818
|
CommonModule,
|
|
28760
28819
|
IonicModule,
|
|
28761
28820
|
TranslateModule.forChild(),
|
|
28762
|
-
RouterModule.forChild(routes$
|
|
28821
|
+
RouterModule.forChild(routes$4)
|
|
28763
28822
|
],
|
|
28764
28823
|
declarations: [
|
|
28765
28824
|
ToastTestingPage
|
|
@@ -29046,33 +29105,28 @@ class TableTestPage extends AppTable {
|
|
|
29046
29105
|
console.debug('[test-table] Updating data...');
|
|
29047
29106
|
this.markAsLoading();
|
|
29048
29107
|
if (isNil(this.data)) {
|
|
29049
|
-
this.data = this.generateData(0,
|
|
29108
|
+
this.data = this.generateData(0, TableTestPage.maxRowCount);
|
|
29050
29109
|
}
|
|
29051
29110
|
this.dataService.setValue(this.data, { emitEvent: false });
|
|
29052
29111
|
this.onRefresh.emit();
|
|
29053
|
-
if (this.infiniteScroll) {
|
|
29054
|
-
this.infiniteScroll.disabled = !this.infiniteScroll || this.data.length >= TableTestPage.maxRowCount;
|
|
29055
|
-
}
|
|
29056
29112
|
}
|
|
29057
|
-
|
|
29058
|
-
|
|
29059
|
-
|
|
29060
|
-
|
|
29061
|
-
|
|
29062
|
-
|
|
29063
|
-
|
|
29064
|
-
|
|
29065
|
-
|
|
29066
|
-
|
|
29067
|
-
this.doRefresh(event);
|
|
29068
|
-
}, 500);
|
|
29113
|
+
fetchMore(event) {
|
|
29114
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
29115
|
+
console.debug('[table-test] Loading more...', event);
|
|
29116
|
+
const fetched = yield this._dataSource.fetchMore();
|
|
29117
|
+
// When target wait for a complete (e.g. IonRefresher)
|
|
29118
|
+
if (fetched && (event === null || event === void 0 ? void 0 : event.target) && event.target.complete) {
|
|
29119
|
+
yield this.waitIdle();
|
|
29120
|
+
event.target.complete();
|
|
29121
|
+
}
|
|
29122
|
+
});
|
|
29069
29123
|
}
|
|
29070
|
-
save() {
|
|
29124
|
+
save(opts) {
|
|
29071
29125
|
const _super = Object.create(null, {
|
|
29072
29126
|
save: { get: () => super.save }
|
|
29073
29127
|
});
|
|
29074
29128
|
return __awaiter(this, void 0, void 0, function* () {
|
|
29075
|
-
const saved = yield _super.save.call(this);
|
|
29129
|
+
const saved = yield _super.save.call(this, opts);
|
|
29076
29130
|
if (saved) {
|
|
29077
29131
|
// Update source data
|
|
29078
29132
|
this.data = this.dataService.value;
|
|
@@ -29138,7 +29192,7 @@ TableTestPage.maxRowCount = 100;
|
|
|
29138
29192
|
TableTestPage.decorators = [
|
|
29139
29193
|
{ type: Component, args: [{
|
|
29140
29194
|
selector: 'app-table-testing',
|
|
29141
|
-
template: "<app-toolbar color=\"primary\" [canGoBack]=\"true\" [backHref]=\"'/testing'\">\n <ion-buttons slot=\"end\">\n\n\n <ng-container *ngIf=\"!selection.hasValue(); else hasSelection\">\n <!-- Add -->\n <button mat-icon-button\n *ngIf=\"canEdit && !mobile\"\n [title]=\"'COMMON.BTN_ADD'|translate\"\n (click)=\"addRow()\">\n <mat-icon>add</mat-icon>\n </button>\n\n <!-- reset filter -->\n <button mat-icon-button (click)=\"resetFilter()\"\n *ngIf=\"filterCriteriaCount\">\n <mat-icon color=\"accent\">filter_list_alt</mat-icon>\n <mat-icon class=\"icon-secondary\" style=\"left: 16px; top: 5px; font-weight: bold;\">close</mat-icon>\n </button>\n\n <!-- show filter -->\n <button mat-icon-button (click)=\"filterExpansionPanel.toggle()\">\n <mat-icon *ngIf=\"filterCriteriaCount; else emptyFilter\"\n [matBadge]=\"filterCriteriaCount\"\n matBadgeColor=\"accent\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\">filter_list_alt\n </mat-icon>\n <ng-template #emptyFilter>\n <mat-icon>filter_list_alt</mat-icon>\n </ng-template>\n </button>\n\n <!-- start/stop timer to auto-load data -->\n <ion-button *ngIf=\"!timer\" (click)=\"startTimer()\">Start reload</ion-button>\n <ion-button *ngIf=\"timer\" (click)=\"stopTimer()\" color=\"accent\">Stop reload</ion-button>\n </ng-container>\n\n <!-- if row selection -->\n <ng-template #hasSelection>\n\n <!-- delete -->\n <button mat-icon-button\n *ngIf=\"canEdit\" [title]=\"'COMMON.BTN_DELETE'|translate\"\n (click)=\"deleteSelection($event)\">\n <mat-icon>delete</mat-icon>\n </button>\n\n <!-- duplicate -->\n <button mat-icon-button\n *ngIf=\"canEdit && selection.selected | isArrayLength: {equals: 1}\"\n [title]=\"'COMMON.BTN_DUPLICATE'|translate\"\n (click)=\"duplicateRow($event, selection.selected[0])\">\n <mat-icon>file_copy</mat-icon>\n </button>\n </ng-template>\n </ion-buttons>\n</app-toolbar>\n<ion-content class=\"ion-no-padding\">\n\n <ion-refresher slot=\"fixed\" *ngIf=\"mobile\" (ionRefresh)=\"doRefresh($event)\">\n <ion-refresher-content></ion-refresher-content>\n </ion-refresher>\n\n <!-- error -->\n <ion-item *ngIf=\"mobile && error\" lines=\"none\" @slideUpDownAnimation>\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error|translate\"></ion-label>\n </ion-item>\n\n <!-- search -->\n <mat-expansion-panel #filterExpansionPanel class=\"filter-panel filter-panel-floating\">\n <form class=\"form-container ion-padding-top\" [formGroup]=\"filterForm\" (ngSubmit)=\"applyFilterAndClosePanel($event)\">\n\n <ion-grid>\n <ion-row>\n <ion-col>\n <!-- search text -->\n <mat-form-field>\n <ion-icon matPrefix name=\"search\"></ion-icon>\n <input matInput\n formControlName=\"searchText\"\n autocomplete=\"off\"\n [placeholder]=\"'TABLE.TESTING.SEARCH_TEXT'|translate\">\n <button mat-icon-button matSuffix tabindex=\"-1\"\n type=\"button\"\n (click)=\"clearControlValue($event, filterForm.controls.searchText)\"\n [hidden]=\"filterForm.controls.searchText.disabled || !filterForm.controls.searchText.value\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </form>\n\n <mat-action-row>\n <!-- Counter -->\n <ion-label [hidden]=\"(loadingSubject|async) || filterForm.dirty\"\n [color]=\"empty && 'danger'\"\n class=\"ion-padding\">\n {{ (totalRowCount ? 'COMMON.RESULT_COUNT' : 'COMMON.NO_RESULT') | translate: {\n count: (totalRowCount |\n numberFormat)\n } }}\n </ion-label>\n\n <div class=\"toolbar-spacer\"></div>\n\n <!-- Close panel -->\n <ion-button mat-button fill=\"clear\" color=\"dark\"\n (click)=\"filterExpansionPanel.close()\"\n [disabled]=\"loadingSubject|async\">\n <ion-text translate>COMMON.BTN_CLOSE</ion-text>\n </ion-button>\n\n <!-- Search button -->\n <ion-button mat-button\n [color]=\"filterForm.dirty ? 'tertiary' : 'dark'\"\n [fill]=\"filterForm.dirty ? 'solid' : 'clear'\"\n (click)=\"applyFilterAndClosePanel($event)\">\n <ion-text translate>COMMON.BTN_APPLY</ion-text>\n </ion-button>\n </mat-action-row>\n </mat-expansion-panel>\n\n <!-- table -->\n <div [class.table-container]=\"!enableInfiniteScroll\">\n <table #table mat-table matSort matSortDisableClear\n [dataSource]=\"dataSource\"\n [matSortActive]=\"defaultSortBy\"\n [matSortDirection]=\"defaultSortDirection\"\n [trackBy]=\"trackByFn\">\n\n <!-- group header cells -->\n\n <ng-container matColumnDef=\"top-start\" [sticky]=\"useSticky\">\n <th mat-header-cell *matHeaderCellDef [class.cdk-visually-hidden]=\"!canEdit\" [attr.colspan]=\"2\">\n <!-- start spacer -->\n </th>\n </ng-container>\n\n <ng-container matColumnDef=\"group-1\">\n <th mat-header-cell *matHeaderCellDef [attr.colspan]=\"3\" style=\"background-color: whitesmoke; margin-bottom: -1px;\">\n <ion-label translate>{{i18nColumnPrefix + 'GROUP_1'}}</ion-label>\n </th>\n </ng-container>\n\n <ng-container matColumnDef=\"group-2\">\n <th mat-header-cell *matHeaderCellDef [attr.colspan]=\"3\">\n <ion-label translate>{{i18nColumnPrefix + 'GROUP_2'}}</ion-label>\n </th>\n </ng-container>\n\n <ng-container matColumnDef=\"top-end\" >\n <th mat-header-cell *matHeaderCellDef>\n <!-- end spacer -->\n </th>\n </ng-container>\n\n <ng-container matColumnDef=\"select\" [sticky]=\"useSticky\" [class.mat-column-sticky]=\"useSticky\">\n <th mat-header-cell *matHeaderCellDef [class.cdk-visually-hidden]=\"!canEdit\">\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [checked]=\"selection.hasValue() && isAllSelected()\"\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\n </mat-checkbox>\n </th>\n <td mat-cell *matCellDef=\"let row\" [class.cdk-visually-hidden]=\"!canEdit\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(row) : null\" [checked]=\"selection.isSelected(row)\">\n </mat-checkbox>\n </td>\n </ng-container>\n\n <!-- Id column -->\n <ng-container matColumnDef=\"id\" [sticky]=\"useSticky\" [class.mat-column-sticky]=\"useSticky\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <ion-label>#</ion-label>\n </th>\n <td mat-cell *matCellDef=\"let row\">{{ row.currentData?.id }}</td>\n </ng-container>\n\n <!-- Label column -->\n <ng-container matColumnDef=\"label\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <ion-label translate>TABLE.TESTING.LABEL</ion-label>\n </th>\n <td mat-cell *matCellDef=\"let row\">\n <mat-form-field floatLabel=\"never\">\n <input matInput\n [formControl]=\"row.validator.controls['label']\"\n [placeholder]=\"'TABLE.TESTING.LABEL'|translate\"\n [appAutofocus]=\"row.editing && focusColumn === 'label'\"\n [readonly]=\"!row.editing\">\n <mat-error *ngIf=\"row.validator.controls['label'].hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- Name column -->\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <ion-label translate>TABLE.TESTING.NAME</ion-label>\n </th>\n <td mat-cell *matCellDef=\"let row\" [class.mat-form-field-disabled]=\"!row.editing\">\n <mat-form-field floatLabel=\"never\">\n <input matInput [formControl]=\"row.validator?.controls.name\" [placeholder]=\"'TABLE.TESTING.NAME'|translate\"\n [readonly]=\"!row.editing\">\n <mat-error *ngIf=\"row.validator?.controls.name.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- Level column -->\n <ng-container matColumnDef=\"levelId\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <ion-label translate>TABLE.TESTING.LEVEL_ID</ion-label>\n </th>\n <td mat-cell *matCellDef=\"let row\" [class.mat-form-field-disabled]=\"!row.editing\">\n <mat-autocomplete-field floatLabel=\"never\"\n [formControl]=\"row.validator.controls.levelId\"\n [config]=\"autocompleteFields.level\"\n [readonly]=\"!row.editing\"\n required>\n </mat-autocomplete-field>\n </td>\n </ng-container>\n\n <!-- Status column -->\n <ng-container matColumnDef=\"statusId\">\n <th mat-header-cell *matHeaderCellDef>\n <span translate>USER.STATUS</span>\n </th>\n <td mat-cell *matCellDef=\"let row\" [class.mat-form-field-disabled]=\"!row.editing\">\n <mat-form-field floatLabel=\"never\">\n <ion-icon matPrefix *ngIf=\"row.validator.controls['statusId'].value >=0\" [name]=\"statusById[row.validator.controls['statusId'].value]?.icon\"></ion-icon>\n\n <mat-select [formControl]=\"row.validator.controls['statusId']\" [placeholder]=\"i18nColumnPrefix + 'STATUS_ID'|translate\">\n <mat-select-trigger>\n <span *ngIf=\"row.validator.controls['statusId'].value >=0\">\n {{ statusById[row.validator.controls['statusId'].value]?.label | translate}}</span>\n </mat-select-trigger>\n <mat-option *ngFor=\"let item of statusList\" [value]=\"item.id\">\n <ion-icon [name]=\"item.icon\"></ion-icon>\n {{ item.label |translate }}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"row.validator.controls['statusId'].hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n\n <!-- Creation date column -->\n <ng-container matColumnDef=\"updateDate\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <ion-label translate>TABLE.TESTING.UPDATE_DATE</ion-label>\n </th>\n <td mat-cell *matCellDef=\"let row\" class=\"mat-form-field-disabled\">\n <ion-text class=\"ion-text-end\" color=\"medium\" *ngIf=\"row.id!==-1\">\n <small [matTooltip]=\"'TABLE.TESTING.CREATION_DATE'|translate\" *ngIf=\"row.currentData.creationDate; let creationDate\">\n <ion-icon name=\"calendar\"></ion-icon>\n {{ creationDate | dateFormat: {time: true} }}\n </small><br/>\n <small [matTooltip]=\"'TABLE.TESTING.UPDATE_DATE'|translate\" *ngIf=\"row.currentData.updateDate; let updateDate\">\n <ion-icon name=\"time-outline\"></ion-icon>\n {{ updateDate | dateFormat: {time: true} }}\n </small>\n </ion-text>\n </td>\n </ng-container>\n\n <!-- Comment column -->\n <ng-container matColumnDef=\"comments\">\n <th mat-header-cell *matHeaderCellDef>\n <ion-label translate>TABLE.TESTING.COMMENTS</ion-label>\n </th>\n <td mat-cell *matCellDef=\"let row\">\n <mat-form-field floatLabel=\"never\" *ngIf=\"row.editing; else iconComment\">\n <!--<textarea matInput [formControl]=\"row.validator?.controls.comments\"\n [placeholder]=\"'TABLE.TESTING.COMMENTS'|translate\"\n [readonly]=\"!row.editing\"></textarea>-->\n\n <input type=\"text\" matInput [formControl]=\"row.validator?.controls.comments\"\n [placeholder]=\"'TABLE.TESTING.COMMENTS'|translate\"\n [readonly]=\"!row.editing\"\n [appAutofocus]=\"row.editing && focusColumn === 'comments'\">\n </mat-form-field>\n\n <ng-template #iconComment>\n <mat-icon class=\"comment\"\n *ngIf=\"row.validator?.controls.comments.value\"\n [title]=\"row.validator?.controls.comments.value\"></mat-icon>\n </ng-template>\n </td>\n </ng-container>\n\n <!-- Actions buttons column -->\n <app-actions-column [stickyEnd]=\"true\" [canCancel]=\"false\"\n (optionsClick)=\"openSelectColumnsModal($event)\"\n (cancelOrDeleteClick)=\"cancelOrDelete($event.event, $event.row)\"\n (confirmAndAddClick)=\"confirmAndAdd($event.event, $event.row)\"\n (backward)=\"confirmAndBackward($event.event, $event.row)\"\n (forward)=\"confirmAndForward($event.event, $event.row)\"\n [cellTemplate]=\"cellInjection\">\n\n <!-- cell injection-->\n <ng-template #cellInjection let-row>\n <span *ngIf=\"row.editing && !row.validator.dirty\">-</span>\n </ng-template>\n\n </app-actions-column>\n\n <tr mat-header-row *matHeaderRowDef=\"groupColumns;\" class=\"mat-toolbar\"></tr>\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"\n [class.mat-row-selected]=\"row.editing\"\n [class.mat-row-error]=\"row.validator?.invalid\"\n [class.mat-row-disabled]=\"!row.editing\"\n [class.mat-row-dirty]=\"row.validator?.dirty\"\n (click)=\"clickRow($event, row)\"\n (keydown.escape)=\"escapeEditingRow($event)\"\n [cdkTrapFocus]=\"row.validator?.invalid\"></tr>\n </table>\n\n <ng-container *ngIf=\"loadingSubject|async; else noResult\">\n <ion-item>\n <ion-skeleton-text animated></ion-skeleton-text>\n </ion-item>\n </ng-container>\n\n <ng-template #noResult>\n <ion-item *ngIf=\"totalRowCount === 0\">\n <ion-text color=\"danger\" class=\"text-italic\" translate>COMMON.NO_RESULT</ion-text>\n </ion-item>\n </ng-template>\n\n <ion-infinite-scroll *ngIf=\"enableInfiniteScroll\"\n [threshold]=\"mobile ? '10%' : '2%'\" position=\"bottom\"\n (ionInfinite)=\"loadMore($event)\">\n <ion-infinite-scroll-content\n loadingSpinner=\"circles\"\n [loadingText]=\"'COMMON.LOADING_DOTS'|translate\">\n </ion-infinite-scroll-content>\n </ion-infinite-scroll>\n </div>\n</ion-content>\n\n<ion-footer>\n <!-- Paginator -->\n <mat-paginator *ngIf=\"!enableInfiniteScroll\"\n [length]=\"totalRowCount\" [pageSize]=\"defaultPageSize\" [pageSizeOptions]=\"defaultPageSizeOptions\"\n class=\"mat-paginator-footer\"\n showFirstLastButtons>\n </mat-paginator>\n\n <app-form-buttons-bar *ngIf=\"canEdit && !mobile\"\n (onCancel)=\"load()\"\n (onSave)=\"save()\" [disabled]=\"(loadingSubject|async) || !dirty\">\n <!-- error -->\n <ion-item *ngIf=\"error$|async\" lines=\"none\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" [innerHTML]=\"error|translate\"></ion-label>\n </ion-item>\n </app-form-buttons-bar>\n</ion-footer>\n\n<ion-fab slot=\"fixed\" vertical=\"bottom\" horizontal=\"end\"\n *ngIf=\"canEdit && mobile\">\n <ion-fab-button color=\"tertiary\" (click)=\"addRow($event)\">\n <ion-icon name=\"add\"></ion-icon>\n </ion-fab-button>\n</ion-fab>\n",
|
|
29195
|
+
template: "<app-toolbar color=\"primary\" [canGoBack]=\"true\"\n [hasValidate]=\"!(loadingSubject|async) && dirty\"\n (onValidate)=\"save()\"\n [backHref]=\"'/testing'\">\n <ion-buttons slot=\"end\">\n\n\n <ng-container *ngIf=\"!selection.hasValue(); else hasSelection\">\n <!-- Add -->\n <button mat-icon-button\n *ngIf=\"canEdit && !mobile\"\n [title]=\"'COMMON.BTN_ADD'|translate\"\n (click)=\"addRow()\">\n <mat-icon>add</mat-icon>\n </button>\n\n <!-- reset filter -->\n <button mat-icon-button (click)=\"resetFilter()\"\n *ngIf=\"filterCriteriaCount\">\n <mat-icon color=\"accent\">filter_list_alt</mat-icon>\n <mat-icon class=\"icon-secondary\" style=\"left: 16px; top: 5px; font-weight: bold;\">close</mat-icon>\n </button>\n\n <!-- show filter -->\n <button mat-icon-button (click)=\"filterExpansionPanel.toggle()\">\n <mat-icon *ngIf=\"filterCriteriaCount; else emptyFilter\"\n [matBadge]=\"filterCriteriaCount\"\n matBadgeColor=\"accent\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\">filter_list_alt\n </mat-icon>\n <ng-template #emptyFilter>\n <mat-icon>filter_list_alt</mat-icon>\n </ng-template>\n </button>\n\n <!-- start/stop timer to auto-load data -->\n <ion-button *ngIf=\"!timer\" (click)=\"startTimer()\">Start reload</ion-button>\n <ion-button *ngIf=\"timer\" (click)=\"stopTimer()\" color=\"accent\">Stop reload</ion-button>\n </ng-container>\n\n <!-- if row selection -->\n <ng-template #hasSelection>\n\n <!-- delete -->\n <button mat-icon-button\n *ngIf=\"canEdit\" [title]=\"'COMMON.BTN_DELETE'|translate\"\n (click)=\"deleteSelection($event)\">\n <mat-icon>delete</mat-icon>\n </button>\n\n <!-- duplicate -->\n <button mat-icon-button\n *ngIf=\"canEdit && selection.selected | isArrayLength: {equals: 1}\"\n [title]=\"'COMMON.BTN_DUPLICATE'|translate\"\n (click)=\"duplicateRow($event, selection.selected[0])\">\n <mat-icon>file_copy</mat-icon>\n </button>\n </ng-template>\n </ion-buttons>\n</app-toolbar>\n<ion-content class=\"ion-no-padding\">\n\n <ion-refresher slot=\"fixed\" *ngIf=\"mobile\" (ionRefresh)=\"doRefresh($event)\">\n <ion-refresher-content></ion-refresher-content>\n </ion-refresher>\n\n <!-- error -->\n <ion-item *ngIf=\"mobile && error\" lines=\"none\" @slideUpDownAnimation>\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error|translate\"></ion-label>\n </ion-item>\n\n <!-- search -->\n <mat-expansion-panel #filterExpansionPanel class=\"filter-panel filter-panel-floating\">\n <form class=\"form-container ion-padding-top\" [formGroup]=\"filterForm\" (ngSubmit)=\"applyFilterAndClosePanel($event)\">\n\n <ion-grid>\n <ion-row>\n <ion-col>\n <!-- search text -->\n <mat-form-field>\n <ion-icon matPrefix name=\"search\"></ion-icon>\n <input matInput\n formControlName=\"searchText\"\n autocomplete=\"off\"\n [placeholder]=\"'TABLE.TESTING.SEARCH_TEXT'|translate\">\n <button mat-icon-button matSuffix tabindex=\"-1\"\n type=\"button\"\n (click)=\"clearControlValue($event, filterForm.controls.searchText)\"\n [hidden]=\"filterForm.controls.searchText.disabled || !filterForm.controls.searchText.value\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </form>\n\n <mat-action-row>\n <!-- Counter -->\n <ion-label [hidden]=\"(loadingSubject|async) || filterForm.dirty\"\n [color]=\"empty && 'danger'\"\n class=\"ion-padding\">\n {{ (totalRowCount ? 'COMMON.RESULT_COUNT' : 'COMMON.NO_RESULT') | translate: {\n count: (totalRowCount |\n numberFormat)\n } }}\n </ion-label>\n\n <div class=\"toolbar-spacer\"></div>\n\n <!-- Close panel -->\n <ion-button mat-button fill=\"clear\" color=\"dark\"\n (click)=\"filterExpansionPanel.close()\"\n [disabled]=\"loadingSubject|async\">\n <ion-text translate>COMMON.BTN_CLOSE</ion-text>\n </ion-button>\n\n <!-- Search button -->\n <ion-button mat-button\n [color]=\"filterForm.dirty ? 'tertiary' : 'dark'\"\n [fill]=\"filterForm.dirty ? 'solid' : 'clear'\"\n (click)=\"applyFilterAndClosePanel($event)\">\n <ion-text translate>COMMON.BTN_APPLY</ion-text>\n </ion-button>\n </mat-action-row>\n </mat-expansion-panel>\n\n <!-- table -->\n <div [class.table-container]=\"!enableInfiniteScroll\">\n <table #table mat-table matSort matSortDisableClear\n [dataSource]=\"dataSource\"\n [matSortActive]=\"defaultSortBy\"\n [matSortDirection]=\"defaultSortDirection\"\n [trackBy]=\"trackByFn\">\n\n <!-- group header cells -->\n\n <ng-container matColumnDef=\"top-start\" [sticky]=\"useSticky\">\n <th mat-header-cell *matHeaderCellDef [class.cdk-visually-hidden]=\"!canEdit\" [attr.colspan]=\"2\">\n <!-- start spacer -->\n </th>\n </ng-container>\n\n <ng-container matColumnDef=\"group-1\">\n <th mat-header-cell *matHeaderCellDef [attr.colspan]=\"3\" style=\"background-color: whitesmoke; margin-bottom: -1px;\">\n <ion-label translate>{{i18nColumnPrefix + 'GROUP_1'}}</ion-label>\n </th>\n </ng-container>\n\n <ng-container matColumnDef=\"group-2\">\n <th mat-header-cell *matHeaderCellDef [attr.colspan]=\"3\">\n <ion-label translate>{{i18nColumnPrefix + 'GROUP_2'}}</ion-label>\n </th>\n </ng-container>\n\n <ng-container matColumnDef=\"top-end\" >\n <th mat-header-cell *matHeaderCellDef>\n <!-- end spacer -->\n </th>\n </ng-container>\n\n <ng-container matColumnDef=\"select\" [sticky]=\"useSticky\" [class.mat-column-sticky]=\"useSticky\">\n <th mat-header-cell *matHeaderCellDef [class.cdk-visually-hidden]=\"!canEdit\">\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [checked]=\"selection.hasValue() && isAllSelected()\"\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\n </mat-checkbox>\n </th>\n <td mat-cell *matCellDef=\"let row\" [class.cdk-visually-hidden]=\"!canEdit\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(row) : null\" [checked]=\"selection.isSelected(row)\">\n </mat-checkbox>\n </td>\n </ng-container>\n\n <!-- Id column -->\n <ng-container matColumnDef=\"id\" [sticky]=\"useSticky\" [class.mat-column-sticky]=\"useSticky\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <ion-label>#</ion-label>\n </th>\n <td mat-cell *matCellDef=\"let row\">{{ row.currentData?.id }}</td>\n </ng-container>\n\n <!-- Label column -->\n <ng-container matColumnDef=\"label\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <ion-label translate>TABLE.TESTING.LABEL</ion-label>\n </th>\n <td mat-cell *matCellDef=\"let row\">\n <mat-form-field floatLabel=\"never\">\n <input matInput\n [formControl]=\"row.validator.controls['label']\"\n [placeholder]=\"'TABLE.TESTING.LABEL'|translate\"\n [appAutofocus]=\"row.editing && focusColumn === 'label'\"\n [readonly]=\"!row.editing\">\n <mat-error *ngIf=\"row.validator.controls['label'].hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- Name column -->\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <ion-label translate>TABLE.TESTING.NAME</ion-label>\n </th>\n <td mat-cell *matCellDef=\"let row\" [class.mat-form-field-disabled]=\"!row.editing\">\n <mat-form-field floatLabel=\"never\">\n <input matInput [formControl]=\"row.validator?.controls.name\" [placeholder]=\"'TABLE.TESTING.NAME'|translate\"\n [readonly]=\"!row.editing\">\n <mat-error *ngIf=\"row.validator?.controls.name.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- Level column -->\n <ng-container matColumnDef=\"levelId\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <ion-label translate>TABLE.TESTING.LEVEL_ID</ion-label>\n </th>\n <td mat-cell *matCellDef=\"let row\" [class.mat-form-field-disabled]=\"!row.editing\">\n <mat-autocomplete-field floatLabel=\"never\"\n [formControl]=\"row.validator.controls.levelId\"\n [config]=\"autocompleteFields.level\"\n [readonly]=\"!row.editing\"\n required>\n </mat-autocomplete-field>\n </td>\n </ng-container>\n\n <!-- Status column -->\n <ng-container matColumnDef=\"statusId\">\n <th mat-header-cell *matHeaderCellDef>\n <span translate>USER.STATUS</span>\n </th>\n <td mat-cell *matCellDef=\"let row\" [class.mat-form-field-disabled]=\"!row.editing\">\n <mat-form-field floatLabel=\"never\">\n <ion-icon matPrefix *ngIf=\"row.validator.controls['statusId'].value >=0\" [name]=\"statusById[row.validator.controls['statusId'].value]?.icon\"></ion-icon>\n\n <mat-select [formControl]=\"row.validator.controls['statusId']\" [placeholder]=\"i18nColumnPrefix + 'STATUS_ID'|translate\">\n <mat-select-trigger>\n <span *ngIf=\"row.validator.controls['statusId'].value >=0\">\n {{ statusById[row.validator.controls['statusId'].value]?.label | translate}}</span>\n </mat-select-trigger>\n <mat-option *ngFor=\"let item of statusList\" [value]=\"item.id\">\n <ion-icon [name]=\"item.icon\"></ion-icon>\n {{ item.label |translate }}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"row.validator.controls['statusId'].hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n\n <!-- Creation date column -->\n <ng-container matColumnDef=\"updateDate\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <ion-label translate>TABLE.TESTING.UPDATE_DATE</ion-label>\n </th>\n <td mat-cell *matCellDef=\"let row\" class=\"mat-form-field-disabled\">\n <ion-text class=\"ion-text-end\" color=\"medium\" *ngIf=\"row.id!==-1\">\n <small [matTooltip]=\"'TABLE.TESTING.CREATION_DATE'|translate\" *ngIf=\"row.currentData.creationDate; let creationDate\">\n <ion-icon name=\"calendar\"></ion-icon>\n {{ creationDate | dateFormat: {time: true} }}\n </small><br/>\n <small [matTooltip]=\"'TABLE.TESTING.UPDATE_DATE'|translate\" *ngIf=\"row.currentData.updateDate; let updateDate\">\n <ion-icon name=\"time-outline\"></ion-icon>\n {{ updateDate | dateFormat: {time: true} }}\n </small>\n </ion-text>\n </td>\n </ng-container>\n\n <!-- Comment column -->\n <ng-container matColumnDef=\"comments\">\n <th mat-header-cell *matHeaderCellDef>\n <ion-label translate>TABLE.TESTING.COMMENTS</ion-label>\n </th>\n <td mat-cell *matCellDef=\"let row\">\n <mat-form-field floatLabel=\"never\" *ngIf=\"row.editing; else iconComment\">\n <!--<textarea matInput [formControl]=\"row.validator?.controls.comments\"\n [placeholder]=\"'TABLE.TESTING.COMMENTS'|translate\"\n [readonly]=\"!row.editing\"></textarea>-->\n\n <input type=\"text\" matInput [formControl]=\"row.validator?.controls.comments\"\n [placeholder]=\"'TABLE.TESTING.COMMENTS'|translate\"\n [readonly]=\"!row.editing\"\n [appAutofocus]=\"row.editing && focusColumn === 'comments'\">\n </mat-form-field>\n\n <ng-template #iconComment>\n <mat-icon class=\"comment\"\n *ngIf=\"row.validator?.controls.comments.value\"\n [title]=\"row.validator?.controls.comments.value\"></mat-icon>\n </ng-template>\n </td>\n </ng-container>\n\n <!-- Actions buttons column -->\n <app-actions-column [stickyEnd]=\"true\" [canCancel]=\"false\"\n (optionsClick)=\"openSelectColumnsModal($event)\"\n (cancelOrDeleteClick)=\"cancelOrDelete($event.event, $event.row)\"\n (confirmAndAddClick)=\"confirmAndAdd($event.event, $event.row)\"\n (backward)=\"confirmAndBackward($event.event, $event.row)\"\n (forward)=\"confirmAndForward($event.event, $event.row)\"\n [cellTemplate]=\"cellInjection\">\n\n <!-- cell injection-->\n <ng-template #cellInjection let-row>\n <span *ngIf=\"row.editing && !row.validator.dirty\">-</span>\n </ng-template>\n\n </app-actions-column>\n\n <tr mat-header-row *matHeaderRowDef=\"groupColumns;\" class=\"mat-toolbar\"></tr>\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"\n [class.mat-row-selected]=\"row.editing\"\n [class.mat-row-error]=\"row.validator?.invalid\"\n [class.mat-row-disabled]=\"!row.editing\"\n [class.mat-row-dirty]=\"row.validator?.dirty\"\n (click)=\"clickRow($event, row)\"\n (keydown.escape)=\"escapeEditingRow($event)\"\n [cdkTrapFocus]=\"row.validator?.invalid\"></tr>\n </table>\n\n <ng-container *ngIf=\"loadingSubject|async; else noResult\">\n <ion-item>\n <ion-skeleton-text animated></ion-skeleton-text>\n </ion-item>\n </ng-container>\n\n <ng-template #noResult>\n <ion-item *ngIf=\"totalRowCount === 0\">\n <ion-text color=\"danger\" class=\"text-italic\" translate>COMMON.NO_RESULT</ion-text>\n </ion-item>\n </ng-template>\n\n <ion-infinite-scroll *ngIf=\"enableInfiniteScroll\"\n [threshold]=\"mobile ? '10%' : '2%'\" position=\"bottom\"\n (ionInfinite)=\"fetchMore($event)\">\n <ion-infinite-scroll-content\n loadingSpinner=\"circles\"\n [loadingText]=\"'COMMON.LOADING_DOTS'|translate\">\n </ion-infinite-scroll-content>\n </ion-infinite-scroll>\n </div>\n</ion-content>\n\n<ion-footer>\n <!-- Paginator -->\n <mat-paginator *ngIf=\"!enableInfiniteScroll\"\n [length]=\"totalRowCount\" [pageSize]=\"defaultPageSize\" [pageSizeOptions]=\"defaultPageSizeOptions\"\n class=\"mat-paginator-footer\"\n showFirstLastButtons>\n </mat-paginator>\n\n <app-form-buttons-bar *ngIf=\"canEdit && !mobile\"\n (onCancel)=\"load()\"\n (onSave)=\"save()\"\n [disabled]=\"(loadingSubject|async) || !dirty\">\n <!-- error -->\n <ion-item *ngIf=\"error$|async\" lines=\"none\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" [innerHTML]=\"error|translate\"></ion-label>\n </ion-item>\n </app-form-buttons-bar>\n</ion-footer>\n\n<ion-fab slot=\"fixed\" vertical=\"bottom\" horizontal=\"end\"\n *ngIf=\"canEdit && mobile\">\n <ion-fab-button color=\"tertiary\" (click)=\"addRow($event)\">\n <ion-icon name=\"add\"></ion-icon>\n </ion-fab-button>\n</ion-fab>\n",
|
|
29142
29196
|
providers: [
|
|
29143
29197
|
{
|
|
29144
29198
|
provide: AppValidatorService,
|
|
@@ -29218,7 +29272,7 @@ TextPopoverTestingPage.ctorParameters = () => [
|
|
|
29218
29272
|
{ type: PopoverController }
|
|
29219
29273
|
];
|
|
29220
29274
|
|
|
29221
|
-
const routes$
|
|
29275
|
+
const routes$2 = [
|
|
29222
29276
|
{
|
|
29223
29277
|
path: 'text-popover',
|
|
29224
29278
|
pathMatch: 'full',
|
|
@@ -29233,7 +29287,7 @@ TextPopoverTestingModule.decorators = [
|
|
|
29233
29287
|
CommonModule,
|
|
29234
29288
|
IonicModule,
|
|
29235
29289
|
TranslateModule.forChild(),
|
|
29236
|
-
RouterModule.forChild(routes$
|
|
29290
|
+
RouterModule.forChild(routes$2)
|
|
29237
29291
|
],
|
|
29238
29292
|
declarations: [
|
|
29239
29293
|
TextPopoverTestingPage
|
|
@@ -29250,7 +29304,7 @@ const CORE_TESTING_PAGES = [
|
|
|
29250
29304
|
{ label: 'Table', page: '/testing/core/table' },
|
|
29251
29305
|
{ label: 'Text popover', page: '/testing/core/text-popover' }
|
|
29252
29306
|
];
|
|
29253
|
-
const routes$
|
|
29307
|
+
const routes$1 = [
|
|
29254
29308
|
{
|
|
29255
29309
|
path: '',
|
|
29256
29310
|
pathMatch: 'full',
|
|
@@ -29274,7 +29328,7 @@ CoreTestingModule.decorators = [
|
|
|
29274
29328
|
imports: [
|
|
29275
29329
|
CommonModule,
|
|
29276
29330
|
TranslateModule.forChild(),
|
|
29277
|
-
RouterModule.forChild(routes$
|
|
29331
|
+
RouterModule.forChild(routes$1),
|
|
29278
29332
|
// Sub modules
|
|
29279
29333
|
TableTestingModule,
|
|
29280
29334
|
TextPopoverTestingModule
|
|
@@ -29577,7 +29631,7 @@ UserEventTestService.ctorParameters = () => [
|
|
|
29577
29631
|
{ type: Environment, decorators: [{ type: Optional }, { type: Inject, args: [ENVIRONMENT,] }] }
|
|
29578
29632
|
];
|
|
29579
29633
|
|
|
29580
|
-
const moment
|
|
29634
|
+
const moment = momentImported;
|
|
29581
29635
|
class UserEventTestingPage {
|
|
29582
29636
|
constructor(userEventService, router, alertController, translateService) {
|
|
29583
29637
|
this.userEventService = userEventService;
|
|
@@ -29638,7 +29692,7 @@ class UserEventTestingPage {
|
|
|
29638
29692
|
type: 'message',
|
|
29639
29693
|
level: 'INFO',
|
|
29640
29694
|
message: 'message test message test message test message test message test message test message test message test',
|
|
29641
|
-
creationDate: moment
|
|
29695
|
+
creationDate: moment(),
|
|
29642
29696
|
}));
|
|
29643
29697
|
}
|
|
29644
29698
|
addError() {
|
|
@@ -29648,7 +29702,7 @@ class UserEventTestingPage {
|
|
|
29648
29702
|
type: 'upload',
|
|
29649
29703
|
level: 'ERROR',
|
|
29650
29704
|
message: 'message error',
|
|
29651
|
-
creationDate: moment
|
|
29705
|
+
creationDate: moment(),
|
|
29652
29706
|
}));
|
|
29653
29707
|
}
|
|
29654
29708
|
addWarning() {
|
|
@@ -29658,7 +29712,7 @@ class UserEventTestingPage {
|
|
|
29658
29712
|
type: 'download',
|
|
29659
29713
|
level: 'WARNING',
|
|
29660
29714
|
message: 'message warning',
|
|
29661
|
-
creationDate: moment
|
|
29715
|
+
creationDate: moment(),
|
|
29662
29716
|
}));
|
|
29663
29717
|
}
|
|
29664
29718
|
addDebug() {
|
|
@@ -29668,7 +29722,7 @@ class UserEventTestingPage {
|
|
|
29668
29722
|
type: 'debug',
|
|
29669
29723
|
level: 'DEBUG',
|
|
29670
29724
|
message: 'message DEBUG',
|
|
29671
|
-
creationDate: moment
|
|
29725
|
+
creationDate: moment(),
|
|
29672
29726
|
}));
|
|
29673
29727
|
}
|
|
29674
29728
|
addNotificationWithLink() {
|
|
@@ -29678,7 +29732,7 @@ class UserEventTestingPage {
|
|
|
29678
29732
|
type: 'message',
|
|
29679
29733
|
level: 'INFO',
|
|
29680
29734
|
message: 'message with link',
|
|
29681
|
-
creationDate: moment
|
|
29735
|
+
creationDate: moment(),
|
|
29682
29736
|
actions: [{
|
|
29683
29737
|
name: 'click here',
|
|
29684
29738
|
iconRef: {
|
|
@@ -29695,7 +29749,7 @@ class UserEventTestingPage {
|
|
|
29695
29749
|
type: 'message',
|
|
29696
29750
|
level: 'INFO',
|
|
29697
29751
|
message: 'message with action',
|
|
29698
|
-
creationDate: moment
|
|
29752
|
+
creationDate: moment(),
|
|
29699
29753
|
actions: [
|
|
29700
29754
|
{
|
|
29701
29755
|
name: 'click here',
|
|
@@ -29767,7 +29821,7 @@ class UserEventTestingPage {
|
|
|
29767
29821
|
type: 'message',
|
|
29768
29822
|
level: 'INFO',
|
|
29769
29823
|
message: 'message with action',
|
|
29770
|
-
creationDate: moment
|
|
29824
|
+
creationDate: moment(),
|
|
29771
29825
|
actions: [
|
|
29772
29826
|
{
|
|
29773
29827
|
default: true,
|
|
@@ -29821,7 +29875,7 @@ const SOCIAL_TESTING_PAGES = [
|
|
|
29821
29875
|
{ label: 'User event', page: '/testing/social/user-event' },
|
|
29822
29876
|
{ label: 'Job progression', page: '/testing/social/job-progression' }
|
|
29823
29877
|
];
|
|
29824
|
-
const routes
|
|
29878
|
+
const routes = [
|
|
29825
29879
|
{
|
|
29826
29880
|
path: 'job-progression',
|
|
29827
29881
|
pathMatch: 'full',
|
|
@@ -29840,7 +29894,7 @@ SocialTestingModule.decorators = [
|
|
|
29840
29894
|
imports: [
|
|
29841
29895
|
CommonModule,
|
|
29842
29896
|
TranslateModule.forChild(),
|
|
29843
|
-
RouterModule.forChild(routes
|
|
29897
|
+
RouterModule.forChild(routes),
|
|
29844
29898
|
JobTestingModule,
|
|
29845
29899
|
UserEventTestingModule
|
|
29846
29900
|
],
|
|
@@ -29853,5 +29907,5 @@ SocialTestingModule.decorators = [
|
|
|
29853
29907
|
* Generated bundle index. Do not edit.
|
|
29854
29908
|
*/
|
|
29855
29909
|
|
|
29856
|
-
export { APP_ABOUT_DEVELOPERS, APP_ABOUT_PARTNERS, APP_CONFIG_OPTIONS, APP_FORM_ERROR_I18N_KEYS, APP_GRAPHQL_TYPE_POLICIES, APP_HOME_BUTTONS, APP_LOCALES, APP_LOCAL_SETTINGS, APP_LOCAL_SETTINGS_OPTIONS, APP_LOCAL_STORAGE_TYPE_POLICIES, APP_MENU_ITEMS, APP_MENU_OPTIONS, APP_TESTING_PAGES, AboutModal, AbstractUserEventService, Account, AccountPage, AccountService, AccountToStringPipe, ActionsColumnComponent, AdminModule, AdminRoutingModule, Alerts, AndroidOsEnvironment, AnimationState, AppEditor, AppEditorOptions, AppEntityEditor, AppEntityEditorModal, AppEntityEditorModalOptions, AppForm, AppFormField, AppFormProvider, AppFormUtils, AppGestureConfig, AppGraphQLModule, AppHelpModal, AppIconComponent, AppIconModule, AppInMemoryTable, AppInstallUpgradeCard, AppListForm, AppLoadingSpinner, AppMenuModule, AppNullForm, AppPropertiesForm, AppTabEditor, AppTabEditorOptions, AppTable,
|
|
29910
|
+
export { APP_ABOUT_DEVELOPERS, APP_ABOUT_PARTNERS, APP_CONFIG_OPTIONS, APP_FORM_ERROR_I18N_KEYS, APP_GRAPHQL_TYPE_POLICIES, APP_HOME_BUTTONS, APP_LOCALES, APP_LOCAL_SETTINGS, APP_LOCAL_SETTINGS_OPTIONS, APP_LOCAL_STORAGE_TYPE_POLICIES, APP_MENU_ITEMS, APP_MENU_OPTIONS, APP_TESTING_PAGES, AboutModal, AbstractUserEventService, Account, AccountPage, AccountService, AccountToStringPipe, ActionsColumnComponent, AdminModule, AdminRoutingModule, Alerts, AndroidOsEnvironment, AnimationState, AppEditor, AppEditorOptions, AppEntityEditor, AppEntityEditorModal, AppEntityEditorModalOptions, AppForm, AppFormField, AppFormProvider, AppFormUtils, AppGestureConfig, AppGraphQLModule, AppHelpModal, AppIconComponent, AppIconModule, AppInMemoryTable, AppInstallUpgradeCard, AppListForm, AppLoadingSpinner, AppMenuModule, AppNullForm, AppPropertiesForm, AppTabEditor, AppTabEditorOptions, AppTable, AppTableUtils, AppUserEventNotificationIcon, AppValidatorService, AppendToInputDirective, ArrayFilterPipe, ArrayFirstPipe, ArrayIncludesPipe, ArrayLengthPipe, ArrayPluckPipe, AudioProvider, AuthForm, AuthGuardService, AuthModal, AutoTitleDirective, AutocompleteTestPage, AutofocusDirective, Base58, BaseEntityService, BaseGraphqlService, BaseGraphqlServiceOptions, BaseReferential, Beans, CORE_CONFIG_OPTIONS, CORE_TESTING_PAGES, CellValueChangeListener, ChipsTestPage, Color, ColorScale, ComponentDirtyGuard, ConfigService, Configuration, CoreModule, CoreTestingModule, CryptoService, CsvUtils, DATE_ISO_PATTERN, DATE_PATTERN, DATE_UNIX_MS_TIMESTAMP, DATE_UNIX_TIMESTAMP, DEFAULT_MENU_SHOW_WHEN, DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLACEHOLDER_CHAR, DEFAULT_REQUIRED_COLUMNS, DateDiffDurationPipe, DateFormatPipe, DateFromNowPipe, DateTimeTestPage, DateUtils, Department, DepartmentToStringPipe, DragAndDropDirective, DurationPipe, ENTITIES_STORAGE_KEY_PREFIX, ENVIRONMENT, EmptyArrayPipe, EntitiesService, EntitiesStorage, EntitiesTableDataSource, Entity, EntityClass, EntityClasses, EntityFilter, EntityFilterUtils, EntityMetadataComponent, EntityStore, EntityUtils, Environment, ErrorCodes, EvenPipe, FileResponse, FileService, FileSizePipe, FilesUtils, FormArrayHelper, FormButtonsBarComponent, FormButtonsBarToken, FormErrorTranslatePipe, FormErrorTranslator, FormFieldValuesHolder, FormGetArrayPipe, FormGetControlPipe, FormGetGroupPipe, FormGetPipe, FormGetValuePipe, Fragments, GraphqlService, HAMMER_PRESS_TIME, HAMMER_TAP_TIME, HighlightPipe, HomePage, Hotkeys, HotkeysDialogComponent, IMAGE_DEFAULTS, ImagesUtils, InMemoryEntitiesService, IsLoginAccountPipe, IsNilOrBlankPipe, IsNotNilOrBlankPipe, IsNotOnFieldModePipe, IsOnFieldModePipe, Job, JobModule, JobProgression, JobProgressionComponent, JobProgressionService, JobProgressionServiceToken, JobProgressionTestService, JobProgressionTestingPage, JobTestingModule, JobUtils, KEYBOARD_HIDE_DELAY_MS, LAT_LONG_DEFAULT_MAX_DECIMALS, LAT_LONG_PATTERNS, LatLongFormatPipe, LatLongTestPage, LatitudeFormatPipe, LocalSettingsService, LongitudeFormatPipe, MINIFY_ENTITY_FOR_LOCAL_STORAGE, MINIFY_ENTITY_FOR_POD, MOMENT_NO_TIME_PROPERTY, MapGetPipe, MapKeysPipe, MapValuesPipe, MatAutocompleteConfigHolder, MatAutocompleteField, MatBadgeIconDirective, MatBooleanField, MatChipsField, MatDate, MatDateShort, MatDateTime, MatDuration, MatLatLongField, MatNumpadComponent, MatNumpadContainerComponent, MatNumpadContent, MatPaginatorI18n, MatStepperI18n, MatSwipeField, MaterialTestingModule, MathAbsPipe, MenuComponent, MenuItems, MenuOptions, MenuService, Message, MessageFilter, MessageForm, MessageModal, MessageModule, MessageService, MessageTypeList, MessageTypes, MimeTypes, ModalToolbarComponent, NetworkService, NgInitDirective, NgVarDirective, NotEmptyArrayPipe, NumberFormatPipe, NumpadDirective, OddPipe, PRIORITIZED_AUTHORITIES, PUBKEY_REGEXP, Peer, Person, PersonFilter, PersonFragments, PersonService, PersonToStringPipe, PersonUtils, PersonValidatorService, PlatformService, ProgressBarService, ProgressInterceptor, PropertyFormatPipe, PropertyGetPipe, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, Referential, ReferentialFilter, ReferentialRef, ReferentialUtils, ReferentialValidatorService, RegisterConfirmPage, ResizableComponent, ResizableDirective, ResizableModule, SETTINGS_DISPLAY_COLUMNS, SETTINGS_FILTER, SETTINGS_PAGE_SIZE, SETTINGS_SORTED_COLUMN, SETTINGS_STORAGE_KEY, SETTINGS_TRANSIENT_PROPERTIES, SHARED_MATERIAL_TESTING_PAGES, SHARED_TESTING_PAGES, SOCIAL_TESTING_PAGES, SPACE_PLACEHOLDER_CHAR, SelectPeerModal, ServerErrorCodes, SettingsPage, SharedAsyncValidators, SharedDirectivesModule, SharedFormArrayValidators, SharedFormGroupValidators, SharedHotkeysModule, SharedMatAutocompleteModule, SharedMatBadgeIconModule, SharedMatBooleanModule, SharedMatChipsModule, SharedMatDateTimeModule, SharedMatDurationModule, SharedMatLatLongModule, SharedMatNumpadModule, SharedMatSwipeModule, SharedMaterialModule, SharedModule, SharedPipesModule, SharedRoutingModule, SharedTestingModule, SharedTestsPage, SharedValidators, SocialErrorCodes, SocialModule, SocialModuleOptionsToken, SocialTestingModule, Software, StartableService, StatusById, StatusIds, StatusList, StrIncludesPipe, StrLengthPipe, SwipeTestPage, TableSelectColumnsComponent, TableTestPage, TableTestingModule, TextForm, TextPopover, TextPopoverTestingModule, TextPopoverTestingPage, ToStringPipe, Toasts, ToolbarComponent, ToolbarToken, TranslatablePipe, TranslateContextPipe, TranslateContextService, USER_EVENT_SERVICE, UploadFile, UploadFileComponent, UploadFilePopover, UploadFileTestingModule, UploadFileTestingPage, UriUtils, UserEventModule, UserEventTestService, UserEventTestingModule, UserEventTestingPage, UserSettings, UsersPage, accountToString, adaptValueToControl, addValueInArray, arrayDistinct, arrayGroupBy, arraySize, asInputElement, canHaveFocus, capitalizeFirstLetter, chainPromises, changeCaseToUnderscore, clearValueInArray, copyEntity2Form, createPromiseEvent, createPromiseEventEmitter, departmentToString, departmentsToString, disableControls, emitPromiseEvent, entityToString, equals, equalsOrNil, escapeRegExp, fadeInAnimation, fadeInOutAnimation, filterFalse, filterNotNil, filterNumberInput, filterTrue, firstArrayValue, firstFalse, firstFalsePromise, firstNotNil, firstNotNilPromise, firstTrue, firstTruePromise, focusInput, focusNextInput, focusPreviousInput, formatLatitude, formatLongitude, fromDateISOString, fromScrollEndEvent, fromUnixMsTimestamp, fromUnixTimestamp, getCaretPosition, getColorContrast, getColorShade, getColorTint, getConnectionType, getControlFromPath, getFocusableInputElements, getFormErrors, getFormValueFromEntity, getProperty, getPropertyByPath, getPropertyByPathAsString, getRandomImage, hexToRgb, hexToRgbArray, isAndroid, isBlankString, isControlHasInput, isCordova, isEmptyArray, isIOS, isInputElement, isInstanceOf, isInt, isMobile, isNil, isNilOrBlank, isNilOrNaN, isNotEmptyArray, isNotNil, isNotNilBoolean, isNotNilOrBlank, isNotNilOrNaN, isNotNilString, isNumber, isNumberRange, isProgressEvent, isResponseEvent, isTouchUi, isWindows, joinProperties, joinPropertiesPath, logFormErrors, markAllAsTouched, markAsUntouched, markControlAsTouched, markFormGroupAsTouched, matchMedia, matchUpperCase, mergeLoadResult, mixHex, moment$5 as moment, moveInputCaretToSeparator, noTrailingSlash, notNilOrDefault, nullIfUndefined, parseLatitudeOrLongitude, propertiesPathComparator, propertyComparator, propertyPathComparator, referentialToString, referentialsToString, remove, removeAll, removeDiacritics, removeDuplicatesFromArray, removeEnd, removeValueInArray, replaceAll, resetCalculatedValue, resizeArray, rgbArrayToHex, rgbToHex, round, scrollFactory, selectInputContent, selectInputRange, setCalculatedValue, setTabIndex, sleep, slideInOutAnimation, slideUpDownAnimation, sort, splitById, splitByProperty, startsWithUpperCase, suggestFromArray, suggestFromStringArray, tabindexComparator, testUserAgent, toBoolean, toDateISOString, toDuration, toFloat, toInt, toNotNil, toNumber, trimEmptyToNull, tz, uncapitalizeFirstLetter, updateValueAndValidity, waitFor, waitForFalse, waitForTrue, waitIdle, waitWhilePending, ɵ0$c as ɵ0, CustomReuseStrategy as ɵa, MatNumpadDomService as ɵb, isFocusableElement as ɵc, RegisterForm as ɵd, AccountValidatorService as ɵe, RegisterModal as ɵf, UserSettingsValidatorService as ɵg, LocalSettingsValidatorService as ɵh, AppUpdateOfflineModeCard as ɵi, UserEventNotificationList as ɵj, JobProgressionList as ɵk, DateTestPage as ɵl, NumpadTestPage as ɵm, MatBadgeIconTestPage as ɵn, ToastTestingModule as ɵo, ToastTestingPage as ɵp };
|
|
29857
29911
|
//# sourceMappingURL=sumaris-net.ngx-components.js.map
|