@sumaris-net/ngx-components 1.22.12 → 1.23.0-rc3
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 +536 -457
- 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 +108 -98
- package/esm2015/src/app/core/table/memory-table.class.js +3 -3
- package/esm2015/src/app/core/table/table.class.js +12 -8
- package/esm2015/src/app/core/table/testing/table.testing.js +16 -21
- package/esm2015/src/app/shared/file/images.utils.js +2 -2
- 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 +436 -375
- 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 +20 -25
- package/src/app/core/table/memory-table.class.d.ts +2 -2
- package/src/app/core/table/table.class.d.ts +2 -0
- 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,38 @@ 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
|
-
import { mergeMap as mergeMap$1 } from 'rxjs/internal/operators';
|
|
61
71
|
import { DragDropModule } from '@angular/cdk/drag-drop';
|
|
62
72
|
import { MarkdownModule } from 'ngx-markdown';
|
|
63
73
|
import { sign, box, hash, verify } from 'tweetnacl';
|
|
74
|
+
import * as i3$1 from '@ionic/storage';
|
|
64
75
|
import { Storage, IonicStorageModule } from '@ionic/storage';
|
|
65
76
|
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
|
|
77
|
+
import { SplashScreen } from '@ionic-native/splash-screen/ngx';
|
|
78
|
+
import { Connection, Network } from '@ionic-native/network/ngx';
|
|
79
|
+
import { CacheService, CacheModule } from 'ionic-cache';
|
|
80
|
+
import * as i6 from 'ionic-cache/dist/cache.service';
|
|
81
|
+
import * as i9 from '@ionic-native/network/ngx/index';
|
|
82
|
+
import * as i10 from '@ionic-native/splash-screen/ngx/index';
|
|
83
|
+
import { StatusBar } from '@ionic-native/status-bar/ngx';
|
|
84
|
+
import * as i2$4 from '@angular/cdk/platform';
|
|
73
85
|
import { Platform as Platform$1 } from '@angular/cdk/platform';
|
|
74
|
-
import { InAppBrowser
|
|
86
|
+
import { InAppBrowser } from '@ionic-native/in-app-browser/ngx';
|
|
75
87
|
import { ApolloLink, NetworkStatus, InMemoryCache, ApolloClient, gql } from '@apollo/client/core';
|
|
88
|
+
import * as i2$3 from 'apollo-angular';
|
|
76
89
|
import { Apollo } from 'apollo-angular';
|
|
77
90
|
import { WebSocketLink } from '@apollo/client/link/ws';
|
|
78
91
|
import { getMainDefinition } from '@apollo/client/utilities';
|
|
@@ -80,13 +93,14 @@ import { RetryLink } from '@apollo/client/link/retry';
|
|
|
80
93
|
import QueueLink from 'apollo-link-queue';
|
|
81
94
|
import SerializingLink from 'apollo-link-serialize';
|
|
82
95
|
import loggerLink from 'apollo-link-logger';
|
|
96
|
+
import * as i3$2 from 'apollo-angular/http';
|
|
83
97
|
import { HttpLink } from 'apollo-angular/http';
|
|
84
98
|
import { IonicStorageWrapper, persistCache } from 'apollo3-cache-persist';
|
|
85
|
-
import { NotificationVisibility, Downloader
|
|
86
|
-
import
|
|
87
|
-
import
|
|
88
|
-
import
|
|
89
|
-
import
|
|
99
|
+
import { NotificationVisibility, Downloader } from '@ionic-native/downloader/ngx';
|
|
100
|
+
import * as i14 from '@ionic-native/status-bar/ngx/index';
|
|
101
|
+
import * as i15 from '@ionic-native/keyboard/ngx/index';
|
|
102
|
+
import * as i17 from '@ionic-native/in-app-browser/ngx/index';
|
|
103
|
+
import * as i18 from '@ionic-native/downloader/ngx/index';
|
|
90
104
|
import { CdkTextareaAutosize } from '@angular/cdk/text-field';
|
|
91
105
|
import { ValidatorService, TableDataSource } from '@e-is/ngx-material-table';
|
|
92
106
|
import { SelectionModel } from '@angular/cdk/collections';
|
|
@@ -480,6 +494,7 @@ function equals(o1, o2) {
|
|
|
480
494
|
}
|
|
481
495
|
return false;
|
|
482
496
|
}
|
|
497
|
+
// @dynamic
|
|
483
498
|
class Beans {
|
|
484
499
|
/**
|
|
485
500
|
* Copy a source object, by including only properties of the given dataType.
|
|
@@ -513,6 +528,15 @@ class Beans {
|
|
|
513
528
|
return isNotNil(value);
|
|
514
529
|
}) === -1;
|
|
515
530
|
}
|
|
531
|
+
static collectById(array) {
|
|
532
|
+
return this.collectByProperty(array, 'id');
|
|
533
|
+
}
|
|
534
|
+
static collectByProperty(array, propertyName) {
|
|
535
|
+
return (array || []).reduce((res, item) => {
|
|
536
|
+
res['' + propertyName] = item;
|
|
537
|
+
return res;
|
|
538
|
+
}, {});
|
|
539
|
+
}
|
|
516
540
|
}
|
|
517
541
|
|
|
518
542
|
function isFocusableElement(object) {
|
|
@@ -1036,7 +1060,7 @@ const isIpad = (win) => {
|
|
|
1036
1060
|
}
|
|
1037
1061
|
return false;
|
|
1038
1062
|
};
|
|
1039
|
-
const ɵ0 = isIpad;
|
|
1063
|
+
const ɵ0$c = isIpad;
|
|
1040
1064
|
const isIOS = (win) => testUserAgent(win, /iPhone|iPod/i) || isIpad(win);
|
|
1041
1065
|
const isAndroid = (win) => testUserAgent(win, /android|sink/i);
|
|
1042
1066
|
const isCordova = (win) => {
|
|
@@ -1168,14 +1192,14 @@ class MatAutocompleteFieldUtils {
|
|
|
1168
1192
|
return isNotNil(o1 === null || o1 === void 0 ? void 0 : o1.id) && o1.id === (o2 === null || o2 === void 0 ? void 0 : o2.id);
|
|
1169
1193
|
}
|
|
1170
1194
|
}
|
|
1171
|
-
const noop = (_) => { };
|
|
1172
|
-
const ɵ0$
|
|
1195
|
+
const noop$8 = (_) => { };
|
|
1196
|
+
const ɵ0$b = noop$8;
|
|
1173
1197
|
class MatAutocompleteField {
|
|
1174
1198
|
constructor(cd, formGroupDir) {
|
|
1175
1199
|
this.cd = cd;
|
|
1176
1200
|
this.formGroupDir = formGroupDir;
|
|
1177
|
-
this._onChangeCallback = noop;
|
|
1178
|
-
this._onTouchedCallback = noop;
|
|
1201
|
+
this._onChangeCallback = noop$8;
|
|
1202
|
+
this._onTouchedCallback = noop$8;
|
|
1179
1203
|
this.logPrefix = '[mat-autocomplete] ';
|
|
1180
1204
|
this.formControlName = null;
|
|
1181
1205
|
this.required = false;
|
|
@@ -1948,7 +1972,7 @@ class DateFormatPipe {
|
|
|
1948
1972
|
return isMoment(value) ? value : this.dateAdapter.parse(value, parseFormat || DATE_ISO_PATTERN);
|
|
1949
1973
|
}
|
|
1950
1974
|
}
|
|
1951
|
-
DateFormatPipe.ɵprov =
|
|
1975
|
+
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
1976
|
DateFormatPipe.decorators = [
|
|
1953
1977
|
{ type: Pipe, args: [{
|
|
1954
1978
|
name: 'dateFormat'
|
|
@@ -1960,7 +1984,7 @@ DateFormatPipe.ctorParameters = () => [
|
|
|
1960
1984
|
{ type: TranslateService }
|
|
1961
1985
|
];
|
|
1962
1986
|
|
|
1963
|
-
const moment = momentImported;
|
|
1987
|
+
const moment$a = momentImported;
|
|
1964
1988
|
class DateDiffDurationPipe {
|
|
1965
1989
|
constructor(dateAdapter, translate) {
|
|
1966
1990
|
this.dateAdapter = dateAdapter;
|
|
@@ -1976,11 +2000,11 @@ class DateDiffDurationPipe {
|
|
|
1976
2000
|
return this.format(startDate, endDate, args);
|
|
1977
2001
|
}
|
|
1978
2002
|
format(startDate, endDate, args) {
|
|
1979
|
-
const duration = moment.duration(endDate.diff(startDate));
|
|
2003
|
+
const duration = moment$a.duration(endDate.diff(startDate));
|
|
1980
2004
|
if (duration.asMinutes() < 0)
|
|
1981
2005
|
return '';
|
|
1982
2006
|
const withSeconds = args === null || args === void 0 ? void 0 : args.seconds;
|
|
1983
|
-
const timeDuration = moment(0)
|
|
2007
|
+
const timeDuration = moment$a(0)
|
|
1984
2008
|
.hour(duration.hours())
|
|
1985
2009
|
.minute(duration.minutes());
|
|
1986
2010
|
if (withSeconds) {
|
|
@@ -1990,7 +2014,7 @@ class DateDiffDurationPipe {
|
|
|
1990
2014
|
return (days > 0 ? days.toString() + (this.dayUnit + ' ') : '') + timeDuration.format(withSeconds ? 'HH:mm:ss' : 'HH:mm');
|
|
1991
2015
|
}
|
|
1992
2016
|
}
|
|
1993
|
-
DateDiffDurationPipe.ɵprov =
|
|
2017
|
+
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
2018
|
DateDiffDurationPipe.decorators = [
|
|
1995
2019
|
{ type: Pipe, args: [{
|
|
1996
2020
|
name: 'dateDiffDuration'
|
|
@@ -2011,7 +2035,7 @@ class DateFromNowPipe {
|
|
|
2011
2035
|
return date ? date.fromNow(args && args.withoutSuffix) : '';
|
|
2012
2036
|
}
|
|
2013
2037
|
}
|
|
2014
|
-
DateFromNowPipe.ɵprov =
|
|
2038
|
+
DateFromNowPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DateFromNowPipe_Factory() { return new DateFromNowPipe(i0.ɵɵinject(i1.MomentDateAdapter)); }, token: DateFromNowPipe, providedIn: "root" });
|
|
2015
2039
|
DateFromNowPipe.decorators = [
|
|
2016
2040
|
{ type: Pipe, args: [{
|
|
2017
2041
|
name: 'dateFromNow'
|
|
@@ -2080,7 +2104,7 @@ function formatToDD(value, opts) {
|
|
|
2080
2104
|
value *= -1;
|
|
2081
2105
|
}
|
|
2082
2106
|
}
|
|
2083
|
-
let degrees = roundFloat(value, opts.maxDecimals).toString();
|
|
2107
|
+
let degrees = roundFloat$1(value, opts.maxDecimals).toString();
|
|
2084
2108
|
// Add sign
|
|
2085
2109
|
let sign = negative ? '-' : '+';
|
|
2086
2110
|
if (opts.placeholderChar) {
|
|
@@ -2131,7 +2155,7 @@ function formatToDDMMSS(value, opts) {
|
|
|
2131
2155
|
}
|
|
2132
2156
|
let degrees = Math.trunc(value);
|
|
2133
2157
|
let minutes = Math.trunc((value - degrees) * 60);
|
|
2134
|
-
let seconds = roundFloat(((value - degrees) * 60 - minutes) * 60, opts.maxDecimals);
|
|
2158
|
+
let seconds = roundFloat$1(((value - degrees) * 60 - minutes) * 60, opts.maxDecimals);
|
|
2135
2159
|
while (seconds >= 60) {
|
|
2136
2160
|
seconds -= 60;
|
|
2137
2161
|
minutes += 1;
|
|
@@ -2199,7 +2223,7 @@ function formatToDDMM(value, opts) {
|
|
|
2199
2223
|
}
|
|
2200
2224
|
}
|
|
2201
2225
|
let degrees = Math.trunc(value);
|
|
2202
|
-
let minutes = roundFloat((value - degrees) * 60, opts.maxDecimals);
|
|
2226
|
+
let minutes = roundFloat$1((value - degrees) * 60, opts.maxDecimals);
|
|
2203
2227
|
while (minutes >= 60) {
|
|
2204
2228
|
minutes -= 60;
|
|
2205
2229
|
degrees += 1;
|
|
@@ -2250,15 +2274,15 @@ function parseLatitudeOrLongitude(input, pattern, maxDecimals, placeholderChar)
|
|
|
2250
2274
|
return NaN;
|
|
2251
2275
|
}
|
|
2252
2276
|
if (pattern === 'DD')
|
|
2253
|
-
return roundFloat(degrees, maxDecimals);
|
|
2277
|
+
return roundFloat$1(degrees, maxDecimals);
|
|
2254
2278
|
const minutes = (pattern === 'DDMMSS' || pattern === 'DDMM') && parts[1] && parseFloat(parts[1].replace(/,/g, '.')) || 0;
|
|
2255
2279
|
const seconds = (pattern === 'DDMMSS') && parts[2] && parseFloat(parts[2].replace(/,/g, '.')) || 0;
|
|
2256
2280
|
const direction = ((pattern === 'DDMMSS') && parts[3]) || ((pattern === 'DDMM') && parts[2]) || undefined;
|
|
2257
2281
|
const sign = (direction && (direction === 's' || direction === 'S' || direction === 'w' || direction === 'W')) ? -1 : 1;
|
|
2258
2282
|
degrees = sign * (degrees + minutes / 60 + seconds / (60 * 60));
|
|
2259
|
-
return roundFloat(degrees, maxDecimals);
|
|
2283
|
+
return roundFloat$1(degrees, maxDecimals);
|
|
2260
2284
|
}
|
|
2261
|
-
function roundFloat(input, maxDecimals) {
|
|
2285
|
+
function roundFloat$1(input, maxDecimals) {
|
|
2262
2286
|
if (maxDecimals > 0) {
|
|
2263
2287
|
const powDecimal = Math.pow(10, maxDecimals);
|
|
2264
2288
|
return Math.trunc(input * powDecimal + 0.5) / powDecimal;
|
|
@@ -2319,7 +2343,7 @@ class NumberFormatPipe {
|
|
|
2319
2343
|
}
|
|
2320
2344
|
}
|
|
2321
2345
|
}
|
|
2322
|
-
NumberFormatPipe.ɵprov =
|
|
2346
|
+
NumberFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function NumberFormatPipe_Factory() { return new NumberFormatPipe(); }, token: NumberFormatPipe, providedIn: "root" });
|
|
2323
2347
|
NumberFormatPipe.decorators = [
|
|
2324
2348
|
{ type: Pipe, args: [{
|
|
2325
2349
|
name: 'numberFormat'
|
|
@@ -2359,7 +2383,7 @@ class HighlightPipe {
|
|
|
2359
2383
|
}
|
|
2360
2384
|
}
|
|
2361
2385
|
}
|
|
2362
|
-
HighlightPipe.ɵprov =
|
|
2386
|
+
HighlightPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function HighlightPipe_Factory() { return new HighlightPipe(); }, token: HighlightPipe, providedIn: "root" });
|
|
2363
2387
|
HighlightPipe.decorators = [
|
|
2364
2388
|
{ type: Pipe, args: [{
|
|
2365
2389
|
name: 'highlight'
|
|
@@ -2424,7 +2448,7 @@ FileSizePipe.decorators = [
|
|
|
2424
2448
|
{ type: Pipe, args: [{ name: 'fileSize' },] }
|
|
2425
2449
|
];
|
|
2426
2450
|
|
|
2427
|
-
const moment$
|
|
2451
|
+
const moment$9 = momentImported;
|
|
2428
2452
|
const DATE_UNIX_TIMESTAMP = 'X';
|
|
2429
2453
|
const DATE_UNIX_MS_TIMESTAMP = 'x';
|
|
2430
2454
|
const MOMENT_NO_TIME_PROPERTY = '_hasNoTime';
|
|
@@ -2513,37 +2537,37 @@ function fromDateISOString(value) {
|
|
|
2513
2537
|
return value;
|
|
2514
2538
|
if (typeof value === 'string' && value.length === 10) {
|
|
2515
2539
|
// Parse the input value, as a date only
|
|
2516
|
-
const dateOnly = moment$
|
|
2540
|
+
const dateOnly = moment$9(value, DATE_PATTERN);
|
|
2517
2541
|
if (dateOnly.isValid())
|
|
2518
2542
|
return DateUtils.markNoTime(dateOnly);
|
|
2519
2543
|
}
|
|
2520
2544
|
// Parse the input value, as a ISO date time
|
|
2521
|
-
const date = moment$
|
|
2545
|
+
const date = moment$9(value, DATE_ISO_PATTERN);
|
|
2522
2546
|
if (date.isValid())
|
|
2523
2547
|
return date;
|
|
2524
2548
|
// Not valid: trying to convert from unix timestamp
|
|
2525
2549
|
if (typeof value === 'string') {
|
|
2526
2550
|
console.warn('Wrong date format - Trying to convert from local time: ' + value);
|
|
2527
2551
|
if (value.length === 10) {
|
|
2528
|
-
return moment$
|
|
2552
|
+
return moment$9(value, DATE_UNIX_TIMESTAMP);
|
|
2529
2553
|
}
|
|
2530
2554
|
else if (value.length === 13) {
|
|
2531
|
-
return moment$
|
|
2555
|
+
return moment$9(value, DATE_UNIX_MS_TIMESTAMP);
|
|
2532
2556
|
}
|
|
2533
2557
|
}
|
|
2534
2558
|
console.warn('Unable to parse date: ' + value);
|
|
2535
2559
|
return undefined;
|
|
2536
2560
|
}
|
|
2537
2561
|
function fromUnixTimestamp(timeInSec) {
|
|
2538
|
-
return moment$
|
|
2562
|
+
return moment$9(timeInSec, DATE_UNIX_TIMESTAMP);
|
|
2539
2563
|
}
|
|
2540
2564
|
function fromUnixMsTimestamp(timeInMs) {
|
|
2541
|
-
return moment$
|
|
2565
|
+
return moment$9(timeInMs, DATE_UNIX_MS_TIMESTAMP);
|
|
2542
2566
|
}
|
|
2543
2567
|
function toDuration(value, unit) {
|
|
2544
2568
|
if (!value)
|
|
2545
2569
|
return undefined;
|
|
2546
|
-
const duration = moment$
|
|
2570
|
+
const duration = moment$9.duration(value, unit);
|
|
2547
2571
|
// fix 990+ ms
|
|
2548
2572
|
if (duration.milliseconds() >= 990) {
|
|
2549
2573
|
duration.add(1000 - duration.milliseconds(), 'ms');
|
|
@@ -2572,7 +2596,7 @@ class DurationPipe {
|
|
|
2572
2596
|
return (days > 0 ? days.toString() + (this.dayUnit + ' ') : '') + hour + ':' + minute;
|
|
2573
2597
|
}
|
|
2574
2598
|
}
|
|
2575
|
-
DurationPipe.ɵprov =
|
|
2599
|
+
DurationPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DurationPipe_Factory() { return new DurationPipe(i0.ɵɵinject(i1$1.TranslateService)); }, token: DurationPipe, providedIn: "root" });
|
|
2576
2600
|
DurationPipe.decorators = [
|
|
2577
2601
|
{ type: Pipe, args: [{
|
|
2578
2602
|
name: 'duration'
|
|
@@ -2593,7 +2617,7 @@ class MathAbsPipe {
|
|
|
2593
2617
|
}
|
|
2594
2618
|
}
|
|
2595
2619
|
}
|
|
2596
|
-
MathAbsPipe.ɵprov =
|
|
2620
|
+
MathAbsPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MathAbsPipe_Factory() { return new MathAbsPipe(); }, token: MathAbsPipe, providedIn: "root" });
|
|
2597
2621
|
MathAbsPipe.decorators = [
|
|
2598
2622
|
{ type: Pipe, args: [{
|
|
2599
2623
|
name: 'mathAbs'
|
|
@@ -2605,7 +2629,7 @@ class EvenPipe {
|
|
|
2605
2629
|
return val % 2 === 0;
|
|
2606
2630
|
}
|
|
2607
2631
|
}
|
|
2608
|
-
EvenPipe.ɵprov =
|
|
2632
|
+
EvenPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function EvenPipe_Factory() { return new EvenPipe(); }, token: EvenPipe, providedIn: "root" });
|
|
2609
2633
|
EvenPipe.decorators = [
|
|
2610
2634
|
{ type: Pipe, args: [{
|
|
2611
2635
|
name: 'even'
|
|
@@ -2617,7 +2641,7 @@ class OddPipe {
|
|
|
2617
2641
|
return val % 2 !== 0;
|
|
2618
2642
|
}
|
|
2619
2643
|
}
|
|
2620
|
-
OddPipe.ɵprov =
|
|
2644
|
+
OddPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function OddPipe_Factory() { return new OddPipe(); }, token: OddPipe, providedIn: "root" });
|
|
2621
2645
|
OddPipe.decorators = [
|
|
2622
2646
|
{ type: Pipe, args: [{
|
|
2623
2647
|
name: 'odd'
|
|
@@ -2725,7 +2749,7 @@ class MapGetPipe {
|
|
|
2725
2749
|
return val[key];
|
|
2726
2750
|
}
|
|
2727
2751
|
}
|
|
2728
|
-
MapGetPipe.ɵprov =
|
|
2752
|
+
MapGetPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MapGetPipe_Factory() { return new MapGetPipe(); }, token: MapGetPipe, providedIn: "root" });
|
|
2729
2753
|
MapGetPipe.decorators = [
|
|
2730
2754
|
{ type: Pipe, args: [{
|
|
2731
2755
|
name: 'mapGet'
|
|
@@ -2739,7 +2763,7 @@ class MapKeysPipe {
|
|
|
2739
2763
|
return Object.keys(map);
|
|
2740
2764
|
}
|
|
2741
2765
|
}
|
|
2742
|
-
MapKeysPipe.ɵprov =
|
|
2766
|
+
MapKeysPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MapKeysPipe_Factory() { return new MapKeysPipe(); }, token: MapKeysPipe, providedIn: "root" });
|
|
2743
2767
|
MapKeysPipe.decorators = [
|
|
2744
2768
|
{ type: Pipe, args: [{
|
|
2745
2769
|
name: 'mapKeys'
|
|
@@ -2753,7 +2777,7 @@ class MapValuesPipe {
|
|
|
2753
2777
|
return Object.values(map);
|
|
2754
2778
|
}
|
|
2755
2779
|
}
|
|
2756
|
-
MapValuesPipe.ɵprov =
|
|
2780
|
+
MapValuesPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MapValuesPipe_Factory() { return new MapValuesPipe(); }, token: MapValuesPipe, providedIn: "root" });
|
|
2757
2781
|
MapValuesPipe.decorators = [
|
|
2758
2782
|
{ type: Pipe, args: [{
|
|
2759
2783
|
name: 'mapValues'
|
|
@@ -2881,7 +2905,7 @@ class TranslateContextService {
|
|
|
2881
2905
|
return translations[keys[keys.length - 1]]; // Return the last keys translation
|
|
2882
2906
|
}
|
|
2883
2907
|
}
|
|
2884
|
-
TranslateContextService.ɵprov =
|
|
2908
|
+
TranslateContextService.ɵprov = i0.ɵɵdefineInjectable({ factory: function TranslateContextService_Factory() { return new TranslateContextService(i0.ɵɵinject(i1$1.TranslateService)); }, token: TranslateContextService, providedIn: "root" });
|
|
2885
2909
|
TranslateContextService.decorators = [
|
|
2886
2910
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
2887
2911
|
];
|
|
@@ -2939,7 +2963,7 @@ NgInitDirective.propDecorators = {
|
|
|
2939
2963
|
ngInit: [{ type: Output }]
|
|
2940
2964
|
};
|
|
2941
2965
|
|
|
2942
|
-
const moment$
|
|
2966
|
+
const moment$8 = momentImported;
|
|
2943
2967
|
// @dynamic
|
|
2944
2968
|
class SharedValidators {
|
|
2945
2969
|
static getDoubleRegexp(maxDecimals) {
|
|
@@ -3020,7 +3044,7 @@ class SharedValidators {
|
|
|
3020
3044
|
}
|
|
3021
3045
|
static validDate(control) {
|
|
3022
3046
|
const value = control.value;
|
|
3023
|
-
const date = !value || moment$
|
|
3047
|
+
const date = !value || moment$8.isMoment(value) ? value : moment$8(value, DATE_ISO_PATTERN);
|
|
3024
3048
|
if (date && (!date.isValid() || date.year() < 1970)) {
|
|
3025
3049
|
return { validDate: true };
|
|
3026
3050
|
}
|
|
@@ -4145,7 +4169,7 @@ class FormErrorTranslator {
|
|
|
4145
4169
|
return errorKey;
|
|
4146
4170
|
}
|
|
4147
4171
|
}
|
|
4148
|
-
FormErrorTranslator.ɵprov =
|
|
4172
|
+
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
4173
|
FormErrorTranslator.decorators = [
|
|
4150
4174
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
4151
4175
|
];
|
|
@@ -4407,7 +4431,7 @@ class PropertyFormatPipe {
|
|
|
4407
4431
|
return this._i18nNo;
|
|
4408
4432
|
}
|
|
4409
4433
|
}
|
|
4410
|
-
PropertyFormatPipe.ɵprov =
|
|
4434
|
+
PropertyFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function PropertyFormatPipe_Factory() { return new PropertyFormatPipe(i0.ɵɵinject(DateFormatPipe), i0.ɵɵinject(i1$1.TranslateService)); }, token: PropertyFormatPipe, providedIn: "root" });
|
|
4411
4435
|
PropertyFormatPipe.decorators = [
|
|
4412
4436
|
{ type: Pipe, args: [{
|
|
4413
4437
|
name: 'propertyFormat'
|
|
@@ -4773,9 +4797,9 @@ function parseDuration(input, maxDecimals, placeholderChar) {
|
|
|
4773
4797
|
const hour = parseInt(durationParts[0] || '0');
|
|
4774
4798
|
const minute = parseInt(durationParts[1] || '0');
|
|
4775
4799
|
const value = hour + (minute + 0.5) / 60;
|
|
4776
|
-
return roundFloat
|
|
4800
|
+
return roundFloat(value, maxDecimals);
|
|
4777
4801
|
}
|
|
4778
|
-
function roundFloat
|
|
4802
|
+
function roundFloat(input, maxDecimals) {
|
|
4779
4803
|
if (maxDecimals > 0) {
|
|
4780
4804
|
const powDecimal = Math.pow(10, maxDecimals);
|
|
4781
4805
|
return Math.trunc(input * powDecimal + 0.5) / powDecimal;
|
|
@@ -4799,16 +4823,16 @@ const MASKS = {
|
|
|
4799
4823
|
DD: [/[+-]/, /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, '°']
|
|
4800
4824
|
}
|
|
4801
4825
|
};
|
|
4802
|
-
const noop$
|
|
4826
|
+
const noop$7 = () => {
|
|
4803
4827
|
};
|
|
4804
|
-
const ɵ0$
|
|
4828
|
+
const ɵ0$a = noop$7;
|
|
4805
4829
|
class MatLatLongField {
|
|
4806
4830
|
constructor(formBuilder, cd, formGroupDir) {
|
|
4807
4831
|
this.formBuilder = formBuilder;
|
|
4808
4832
|
this.cd = cd;
|
|
4809
4833
|
this.formGroupDir = formGroupDir;
|
|
4810
|
-
this._onChangeCallback = noop$
|
|
4811
|
-
this._onTouchedCallback = noop$
|
|
4834
|
+
this._onChangeCallback = noop$7;
|
|
4835
|
+
this._onTouchedCallback = noop$7;
|
|
4812
4836
|
this._subscription = new Subscription();
|
|
4813
4837
|
this._disabling = false;
|
|
4814
4838
|
this._writing = false;
|
|
@@ -5153,14 +5177,14 @@ SharedMatLatLongModule.decorators = [
|
|
|
5153
5177
|
},] }
|
|
5154
5178
|
];
|
|
5155
5179
|
|
|
5156
|
-
const DEFAULT_VALUE_ACCESSOR = {
|
|
5180
|
+
const DEFAULT_VALUE_ACCESSOR$5 = {
|
|
5157
5181
|
provide: NG_VALUE_ACCESSOR,
|
|
5158
5182
|
useExisting: forwardRef(() => MatDate),
|
|
5159
5183
|
multi: true
|
|
5160
5184
|
};
|
|
5161
5185
|
const TEXT_MASK = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
|
|
5162
|
-
const noop$
|
|
5163
|
-
const ɵ0$
|
|
5186
|
+
const noop$6 = () => { };
|
|
5187
|
+
const ɵ0$9 = noop$6;
|
|
5164
5188
|
class MatDate {
|
|
5165
5189
|
constructor(dateAdapter, translate, formBuilder, cd, keyboard, formGroupDir) {
|
|
5166
5190
|
this.dateAdapter = dateAdapter;
|
|
@@ -5169,8 +5193,8 @@ class MatDate {
|
|
|
5169
5193
|
this.cd = cd;
|
|
5170
5194
|
this.keyboard = keyboard;
|
|
5171
5195
|
this.formGroupDir = formGroupDir;
|
|
5172
|
-
this._onChangeCallback = noop$
|
|
5173
|
-
this._onTouchedCallback = noop$
|
|
5196
|
+
this._onChangeCallback = noop$6;
|
|
5197
|
+
this._onTouchedCallback = noop$6;
|
|
5174
5198
|
this._subscription = new Subscription();
|
|
5175
5199
|
this._writing = true;
|
|
5176
5200
|
this._disabling = false;
|
|
@@ -5476,7 +5500,7 @@ MatDate.decorators = [
|
|
|
5476
5500
|
selector: 'mat-date-field',
|
|
5477
5501
|
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
5502
|
providers: [
|
|
5479
|
-
DEFAULT_VALUE_ACCESSOR,
|
|
5503
|
+
DEFAULT_VALUE_ACCESSOR$5,
|
|
5480
5504
|
],
|
|
5481
5505
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
5482
5506
|
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 +5535,16 @@ MatDate.propDecorators = {
|
|
|
5511
5535
|
matInputs: [{ type: ViewChildren, args: ['matInput',] }]
|
|
5512
5536
|
};
|
|
5513
5537
|
|
|
5514
|
-
const DEFAULT_VALUE_ACCESSOR$
|
|
5538
|
+
const DEFAULT_VALUE_ACCESSOR$4 = {
|
|
5515
5539
|
provide: NG_VALUE_ACCESSOR,
|
|
5516
5540
|
useExisting: forwardRef(() => MatDateTime),
|
|
5517
5541
|
multi: true
|
|
5518
5542
|
};
|
|
5519
|
-
const DAY_MASK = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
|
|
5543
|
+
const DAY_MASK$1 = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
|
|
5520
5544
|
const HOUR_REGEXP = /^[012][0-9][:][012345][0-9]$/;
|
|
5521
|
-
const HOUR_MASK = [/[012]/, /\d/, ':', /[012345]/, /\d/];
|
|
5522
|
-
const noop$
|
|
5523
|
-
const ɵ0$
|
|
5545
|
+
const HOUR_MASK$1 = [/[012]/, /\d/, ':', /[012345]/, /\d/];
|
|
5546
|
+
const noop$5 = () => { };
|
|
5547
|
+
const ɵ0$8 = noop$5;
|
|
5524
5548
|
class MatDateTime {
|
|
5525
5549
|
constructor(dateAdapter, translate, formBuilder, cd, keyboard, formGroupDir) {
|
|
5526
5550
|
this.dateAdapter = dateAdapter;
|
|
@@ -5529,14 +5553,14 @@ class MatDateTime {
|
|
|
5529
5553
|
this.cd = cd;
|
|
5530
5554
|
this.keyboard = keyboard;
|
|
5531
5555
|
this.formGroupDir = formGroupDir;
|
|
5532
|
-
this._onChangeCallback = noop$
|
|
5533
|
-
this._onTouchedCallback = noop$
|
|
5556
|
+
this._onChangeCallback = noop$5;
|
|
5557
|
+
this._onTouchedCallback = noop$5;
|
|
5534
5558
|
this._subscription = new Subscription();
|
|
5535
5559
|
this._writing = true;
|
|
5536
5560
|
this._disabling = false;
|
|
5537
5561
|
this._readonly = false;
|
|
5538
|
-
this.dayMask = DAY_MASK;
|
|
5539
|
-
this.hourMask = HOUR_MASK;
|
|
5562
|
+
this.dayMask = DAY_MASK$1;
|
|
5563
|
+
this.hourMask = HOUR_MASK$1;
|
|
5540
5564
|
this.floatLabel = 'auto';
|
|
5541
5565
|
this.compact = false;
|
|
5542
5566
|
this.placeholderChar = DEFAULT_PLACEHOLDER_CHAR;
|
|
@@ -5857,7 +5881,7 @@ MatDateTime.decorators = [
|
|
|
5857
5881
|
selector: 'mat-date-time-field',
|
|
5858
5882
|
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
5883
|
providers: [
|
|
5860
|
-
DEFAULT_VALUE_ACCESSOR$
|
|
5884
|
+
DEFAULT_VALUE_ACCESSOR$4,
|
|
5861
5885
|
],
|
|
5862
5886
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
5863
5887
|
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 +5916,15 @@ MatDateTime.propDecorators = {
|
|
|
5892
5916
|
matInputs: [{ type: ViewChildren, args: ['matInput',] }]
|
|
5893
5917
|
};
|
|
5894
5918
|
|
|
5895
|
-
const DEFAULT_VALUE_ACCESSOR$
|
|
5919
|
+
const DEFAULT_VALUE_ACCESSOR$3 = {
|
|
5896
5920
|
provide: NG_VALUE_ACCESSOR,
|
|
5897
5921
|
useExisting: forwardRef(() => MatDateShort),
|
|
5898
5922
|
multi: true
|
|
5899
5923
|
};
|
|
5900
|
-
const DAY_MASK
|
|
5924
|
+
const DAY_MASK = [/\d/, /\d/, /\d/, /\d/];
|
|
5901
5925
|
const noop$4 = () => {
|
|
5902
5926
|
};
|
|
5903
|
-
const ɵ0$
|
|
5927
|
+
const ɵ0$7 = noop$4;
|
|
5904
5928
|
class MatDateShort {
|
|
5905
5929
|
constructor(dateAdapter, translate, formBuilder, cd, keyboard, formGroupDir) {
|
|
5906
5930
|
this.dateAdapter = dateAdapter;
|
|
@@ -5913,7 +5937,7 @@ class MatDateShort {
|
|
|
5913
5937
|
this._onTouchedCallback = noop$4;
|
|
5914
5938
|
this.writing = true;
|
|
5915
5939
|
this.disabling = false;
|
|
5916
|
-
this.dayMask = DAY_MASK
|
|
5940
|
+
this.dayMask = DAY_MASK;
|
|
5917
5941
|
this.disabled = false;
|
|
5918
5942
|
this.floatLabel = 'auto';
|
|
5919
5943
|
this.readonly = false;
|
|
@@ -6158,7 +6182,7 @@ MatDateShort.decorators = [
|
|
|
6158
6182
|
selector: 'mat-date-short-field',
|
|
6159
6183
|
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
6184
|
providers: [
|
|
6161
|
-
DEFAULT_VALUE_ACCESSOR$
|
|
6185
|
+
DEFAULT_VALUE_ACCESSOR$3,
|
|
6162
6186
|
],
|
|
6163
6187
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
6164
6188
|
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 +6251,16 @@ SharedMatDateTimeModule.decorators = [
|
|
|
6227
6251
|
},] }
|
|
6228
6252
|
];
|
|
6229
6253
|
|
|
6230
|
-
const DEFAULT_VALUE_ACCESSOR$
|
|
6254
|
+
const DEFAULT_VALUE_ACCESSOR$2 = {
|
|
6231
6255
|
provide: NG_VALUE_ACCESSOR,
|
|
6232
6256
|
useExisting: forwardRef(() => MatDuration),
|
|
6233
6257
|
multi: true
|
|
6234
6258
|
};
|
|
6235
6259
|
const HOUR_TIME_PATTERN = /[0-9]\d\d:[0-5]\d/;
|
|
6236
|
-
const HOUR_MASK
|
|
6237
|
-
const noop$
|
|
6260
|
+
const HOUR_MASK = [/\d/, /\d/, /\d/, ':', /[0-5]/, /\d/];
|
|
6261
|
+
const noop$3 = () => {
|
|
6238
6262
|
};
|
|
6239
|
-
const ɵ0$6 = noop$
|
|
6263
|
+
const ɵ0$6 = noop$3;
|
|
6240
6264
|
class MatDuration {
|
|
6241
6265
|
constructor(platform, dateAdapter, translate, formBuilder, cd, formGroupDir) {
|
|
6242
6266
|
this.dateAdapter = dateAdapter;
|
|
@@ -6245,11 +6269,11 @@ class MatDuration {
|
|
|
6245
6269
|
this.cd = cd;
|
|
6246
6270
|
this.formGroupDir = formGroupDir;
|
|
6247
6271
|
this._subscription = new Subscription();
|
|
6248
|
-
this._onChangeCallback = noop$
|
|
6249
|
-
this._onTouchedCallback = noop$
|
|
6272
|
+
this._onChangeCallback = noop$3;
|
|
6273
|
+
this._onTouchedCallback = noop$3;
|
|
6250
6274
|
this.writing = true;
|
|
6251
6275
|
this.disabling = false;
|
|
6252
|
-
this.hourMask = HOUR_MASK
|
|
6276
|
+
this.hourMask = HOUR_MASK;
|
|
6253
6277
|
this.disabled = false;
|
|
6254
6278
|
this.floatLabel = 'auto';
|
|
6255
6279
|
this.readonly = false;
|
|
@@ -6429,7 +6453,7 @@ MatDuration.decorators = [
|
|
|
6429
6453
|
selector: 'mat-duration-field',
|
|
6430
6454
|
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
6455
|
providers: [
|
|
6432
|
-
DEFAULT_VALUE_ACCESSOR$
|
|
6456
|
+
DEFAULT_VALUE_ACCESSOR$2,
|
|
6433
6457
|
],
|
|
6434
6458
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
6435
6459
|
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 +6511,22 @@ SharedMatDurationModule.decorators = [
|
|
|
6487
6511
|
},] }
|
|
6488
6512
|
];
|
|
6489
6513
|
|
|
6490
|
-
const DEFAULT_VALUE_ACCESSOR$
|
|
6514
|
+
const DEFAULT_VALUE_ACCESSOR$1 = {
|
|
6491
6515
|
provide: NG_VALUE_ACCESSOR,
|
|
6492
6516
|
useExisting: forwardRef(() => MatBooleanField),
|
|
6493
6517
|
multi: true
|
|
6494
6518
|
};
|
|
6495
|
-
const noop$
|
|
6519
|
+
const noop$2 = () => {
|
|
6496
6520
|
};
|
|
6497
|
-
const ɵ0$
|
|
6521
|
+
const ɵ0$5 = noop$2;
|
|
6498
6522
|
class MatBooleanField {
|
|
6499
6523
|
constructor(translate, formBuilder, cd, formGroupDir) {
|
|
6500
6524
|
this.translate = translate;
|
|
6501
6525
|
this.formBuilder = formBuilder;
|
|
6502
6526
|
this.cd = cd;
|
|
6503
6527
|
this.formGroupDir = formGroupDir;
|
|
6504
|
-
this._onChangeCallback = noop$
|
|
6505
|
-
this._onTouchedCallback = noop$
|
|
6528
|
+
this._onChangeCallback = noop$2;
|
|
6529
|
+
this._onTouchedCallback = noop$2;
|
|
6506
6530
|
this._writing = false;
|
|
6507
6531
|
this.showRadio = false;
|
|
6508
6532
|
this.disabled = false;
|
|
@@ -6665,7 +6689,7 @@ MatBooleanField.decorators = [
|
|
|
6665
6689
|
selector: 'mat-boolean-field',
|
|
6666
6690
|
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
6691
|
providers: [
|
|
6668
|
-
DEFAULT_VALUE_ACCESSOR$
|
|
6692
|
+
DEFAULT_VALUE_ACCESSOR$1
|
|
6669
6693
|
],
|
|
6670
6694
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
6671
6695
|
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 +6936,7 @@ class MatNumpadDomService {
|
|
|
6912
6936
|
this.appRef.detachView(this.componentRef.hostView);
|
|
6913
6937
|
}
|
|
6914
6938
|
}
|
|
6915
|
-
MatNumpadDomService.ɵprov =
|
|
6939
|
+
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
6940
|
MatNumpadDomService.decorators = [
|
|
6917
6941
|
{ type: Injectable, args: [{
|
|
6918
6942
|
providedIn: 'root'
|
|
@@ -7276,7 +7300,7 @@ SharedMatNumpadModule.decorators = [
|
|
|
7276
7300
|
},] }
|
|
7277
7301
|
];
|
|
7278
7302
|
|
|
7279
|
-
const DEFAULT_VALUE_ACCESSOR
|
|
7303
|
+
const DEFAULT_VALUE_ACCESSOR = {
|
|
7280
7304
|
provide: NG_VALUE_ACCESSOR,
|
|
7281
7305
|
useExisting: forwardRef(() => MatSwipeField),
|
|
7282
7306
|
multi: true
|
|
@@ -7539,7 +7563,7 @@ MatSwipeField.decorators = [
|
|
|
7539
7563
|
{ type: Component, args: [{
|
|
7540
7564
|
selector: 'mat-swipe-field',
|
|
7541
7565
|
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
|
|
7566
|
+
providers: [DEFAULT_VALUE_ACCESSOR],
|
|
7543
7567
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
7544
7568
|
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
7569
|
},] }
|
|
@@ -7598,14 +7622,14 @@ SharedMatSwipeModule.decorators = [
|
|
|
7598
7622
|
},] }
|
|
7599
7623
|
];
|
|
7600
7624
|
|
|
7601
|
-
const noop$
|
|
7602
|
-
const ɵ0$
|
|
7625
|
+
const noop$1 = () => { };
|
|
7626
|
+
const ɵ0$4 = noop$1;
|
|
7603
7627
|
class MatChipsField {
|
|
7604
7628
|
constructor(cd, formGroupDir) {
|
|
7605
7629
|
this.cd = cd;
|
|
7606
7630
|
this.formGroupDir = formGroupDir;
|
|
7607
|
-
this._onChangeCallback = noop$
|
|
7608
|
-
this._onTouchedCallback = noop$
|
|
7631
|
+
this._onChangeCallback = noop$1;
|
|
7632
|
+
this._onTouchedCallback = noop$1;
|
|
7609
7633
|
this.logPrefix = '[mat-chips] ';
|
|
7610
7634
|
this.formControlName = null;
|
|
7611
7635
|
this.required = false;
|
|
@@ -8477,7 +8501,7 @@ class ProgressBarService {
|
|
|
8477
8501
|
}
|
|
8478
8502
|
}
|
|
8479
8503
|
}
|
|
8480
|
-
ProgressBarService.ɵprov =
|
|
8504
|
+
ProgressBarService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ProgressBarService_Factory() { return new ProgressBarService(); }, token: ProgressBarService, providedIn: "root" });
|
|
8481
8505
|
ProgressBarService.decorators = [
|
|
8482
8506
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
8483
8507
|
];
|
|
@@ -8521,7 +8545,7 @@ class AppGestureConfig extends HammerGestureConfig {
|
|
|
8521
8545
|
return mc;
|
|
8522
8546
|
}
|
|
8523
8547
|
}
|
|
8524
|
-
AppGestureConfig.ɵprov =
|
|
8548
|
+
AppGestureConfig.ɵprov = i0.ɵɵdefineInjectable({ factory: function AppGestureConfig_Factory() { return new AppGestureConfig(); }, token: AppGestureConfig, providedIn: "root" });
|
|
8525
8549
|
AppGestureConfig.decorators = [
|
|
8526
8550
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
8527
8551
|
];
|
|
@@ -8762,7 +8786,7 @@ class MatPaginatorI18n extends MatPaginatorIntl {
|
|
|
8762
8786
|
this.previousPageLabel = this.translate.instant('COMMON.PAGINATOR.PREVIOUS_PAGE');
|
|
8763
8787
|
}
|
|
8764
8788
|
}
|
|
8765
|
-
MatPaginatorI18n.ɵprov =
|
|
8789
|
+
MatPaginatorI18n.ɵprov = i0.ɵɵdefineInjectable({ factory: function MatPaginatorI18n_Factory() { return new MatPaginatorI18n(i0.ɵɵinject(i1$1.TranslateService)); }, token: MatPaginatorI18n, providedIn: "root" });
|
|
8766
8790
|
MatPaginatorI18n.decorators = [
|
|
8767
8791
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
8768
8792
|
];
|
|
@@ -8852,17 +8876,17 @@ function getColorContrast(color, bw) {
|
|
|
8852
8876
|
return rgbArrayToHex(rgb.map(v => 255 - v));
|
|
8853
8877
|
}
|
|
8854
8878
|
|
|
8855
|
-
const noop
|
|
8879
|
+
const noop = () => {
|
|
8856
8880
|
};
|
|
8857
|
-
const ɵ0$
|
|
8881
|
+
const ɵ0$3 = noop;
|
|
8858
8882
|
class AppFormField {
|
|
8859
8883
|
constructor(translate, cd, injector, formGroupDir) {
|
|
8860
8884
|
this.translate = translate;
|
|
8861
8885
|
this.cd = cd;
|
|
8862
8886
|
this.injector = injector;
|
|
8863
8887
|
this.formGroupDir = formGroupDir;
|
|
8864
|
-
this._onChangeCallback = noop
|
|
8865
|
-
this._onTouchedCallback = noop
|
|
8888
|
+
this._onChangeCallback = noop;
|
|
8889
|
+
this._onTouchedCallback = noop;
|
|
8866
8890
|
this.readonly = false;
|
|
8867
8891
|
this.compact = false;
|
|
8868
8892
|
this.floatLabel = 'auto';
|
|
@@ -9298,14 +9322,14 @@ class AudioProvider extends StartableService {
|
|
|
9298
9322
|
});
|
|
9299
9323
|
}
|
|
9300
9324
|
}
|
|
9301
|
-
AudioProvider.ɵprov =
|
|
9325
|
+
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
9326
|
AudioProvider.decorators = [
|
|
9303
9327
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
9304
9328
|
];
|
|
9305
9329
|
AudioProvider.ctorParameters = () => [
|
|
9306
9330
|
{ type: Platform },
|
|
9307
|
-
{ type: NativeAudio
|
|
9308
|
-
{ type: Vibration
|
|
9331
|
+
{ type: NativeAudio, decorators: [{ type: Optional }] },
|
|
9332
|
+
{ type: Vibration, decorators: [{ type: Optional }] },
|
|
9309
9333
|
{ type: AudioManagement, decorators: [{ type: Optional }] }
|
|
9310
9334
|
];
|
|
9311
9335
|
|
|
@@ -9390,7 +9414,7 @@ class Hotkeys {
|
|
|
9390
9414
|
});
|
|
9391
9415
|
}
|
|
9392
9416
|
}
|
|
9393
|
-
Hotkeys.ɵprov =
|
|
9417
|
+
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
9418
|
Hotkeys.decorators = [
|
|
9395
9419
|
{ type: Injectable, args: [{
|
|
9396
9420
|
providedIn: 'root'
|
|
@@ -9483,7 +9507,7 @@ class ImagesUtils {
|
|
|
9483
9507
|
reader.readAsDataURL(file);
|
|
9484
9508
|
// Resize image, if need
|
|
9485
9509
|
if (opts) {
|
|
9486
|
-
return $progress.pipe(mergeMap
|
|
9510
|
+
return $progress.pipe(mergeMap((event) => __awaiter(this, void 0, void 0, function* () {
|
|
9487
9511
|
if (event instanceof FileResponse) {
|
|
9488
9512
|
const body = yield ImagesUtils.resizeBase64(event.body, opts);
|
|
9489
9513
|
return new FileResponse({ body });
|
|
@@ -9604,7 +9628,7 @@ class ImagesUtils {
|
|
|
9604
9628
|
}
|
|
9605
9629
|
}
|
|
9606
9630
|
|
|
9607
|
-
const uuidv4 = uuidv4Imported;
|
|
9631
|
+
const uuidv4$1 = uuidv4Imported;
|
|
9608
9632
|
class FileService {
|
|
9609
9633
|
constructor(platform,
|
|
9610
9634
|
//private transfer: FileTransfer,
|
|
@@ -9641,7 +9665,7 @@ class FileService {
|
|
|
9641
9665
|
const lastSlashIndex = fileUrl.lastIndexOf('/');
|
|
9642
9666
|
if (lastSlashIndex === -1)
|
|
9643
9667
|
throw new Error('Invalid URL: ' + fileUrl);
|
|
9644
|
-
const fileName = lastSlashIndex < (fileUrl.length - 1) && fileUrl.substring(lastSlashIndex + 1) || uuidv4();
|
|
9668
|
+
const fileName = lastSlashIndex < (fileUrl.length - 1) && fileUrl.substring(lastSlashIndex + 1) || uuidv4$1();
|
|
9645
9669
|
// Download into the file system
|
|
9646
9670
|
if (outputType === 'fileUrl' && this.canUseFileSystem) {
|
|
9647
9671
|
console.warn(`WARN: [file] Downloading image {${fileUrl}} in local filesystem...`);
|
|
@@ -9697,7 +9721,7 @@ class FileService {
|
|
|
9697
9721
|
this._started = true;
|
|
9698
9722
|
}
|
|
9699
9723
|
}
|
|
9700
|
-
FileService.ɵprov =
|
|
9724
|
+
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
9725
|
FileService.decorators = [
|
|
9702
9726
|
{ type: Injectable, args: [{
|
|
9703
9727
|
providedIn: 'root',
|
|
@@ -9863,7 +9887,7 @@ class Base58 {
|
|
|
9863
9887
|
Base58.alphabet = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
|
|
9864
9888
|
|
|
9865
9889
|
const scrypt = require('scrypt-async');
|
|
9866
|
-
const sha256 = require('hash.js/lib/hash/sha/256');
|
|
9890
|
+
const sha256$1 = require('hash.js/lib/hash/sha/256');
|
|
9867
9891
|
const sha512 = require('hash.js/lib/hash/sha/512');
|
|
9868
9892
|
const nacl = {
|
|
9869
9893
|
sign,
|
|
@@ -9967,7 +9991,7 @@ class CryptoService {
|
|
|
9967
9991
|
* Hash (using SHA256) a message
|
|
9968
9992
|
*/
|
|
9969
9993
|
sha256(message) {
|
|
9970
|
-
return sha256().update(message).digest('hex');
|
|
9994
|
+
return sha256$1().update(message).digest('hex');
|
|
9971
9995
|
}
|
|
9972
9996
|
/**
|
|
9973
9997
|
* Hash (using SHA512) a message
|
|
@@ -9980,7 +10004,7 @@ class CryptoService {
|
|
|
9980
10004
|
return nacl.util.encodeBase64(m);
|
|
9981
10005
|
}
|
|
9982
10006
|
}
|
|
9983
|
-
CryptoService.ɵprov =
|
|
10007
|
+
CryptoService.ɵprov = i0.ɵɵdefineInjectable({ factory: function CryptoService_Factory() { return new CryptoService(); }, token: CryptoService, providedIn: "root" });
|
|
9984
10008
|
CryptoService.decorators = [
|
|
9985
10009
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
9986
10010
|
];
|
|
@@ -10742,7 +10766,7 @@ SelectPeerModal.propDecorators = {
|
|
|
10742
10766
|
onRefresh: [{ type: Input }]
|
|
10743
10767
|
};
|
|
10744
10768
|
|
|
10745
|
-
const moment$
|
|
10769
|
+
const moment$7 = momentImported;
|
|
10746
10770
|
const SETTINGS_STORAGE_KEY = 'settings';
|
|
10747
10771
|
const SETTINGS_TRANSIENT_PROPERTIES = ['mobile', 'touchUi' /*deprecated*/];
|
|
10748
10772
|
// fixme: this constant points to static environment
|
|
@@ -10791,7 +10815,7 @@ class LocalSettingsService extends StartableService {
|
|
|
10791
10815
|
var _a;
|
|
10792
10816
|
if (isNil((_a = this._data) === null || _a === void 0 ? void 0 : _a.mobile)) {
|
|
10793
10817
|
console.warn("[settings] Accessing to property 'mobile' BEFORE service started! Please use ready()");
|
|
10794
|
-
|
|
10818
|
+
this._data.mobile = isMobile(window);
|
|
10795
10819
|
}
|
|
10796
10820
|
return this._data.mobile;
|
|
10797
10821
|
}
|
|
@@ -10985,11 +11009,11 @@ class LocalSettingsService extends StartableService {
|
|
|
10985
11009
|
if (!feature) {
|
|
10986
11010
|
feature = {
|
|
10987
11011
|
name: featureName.toLowerCase(),
|
|
10988
|
-
lastSyncDate: moment$
|
|
11012
|
+
lastSyncDate: moment$7().toISOString()
|
|
10989
11013
|
};
|
|
10990
11014
|
}
|
|
10991
11015
|
else {
|
|
10992
|
-
feature.lastSyncDate = moment$
|
|
11016
|
+
feature.lastSyncDate = moment$7().toISOString();
|
|
10993
11017
|
}
|
|
10994
11018
|
this.saveOfflineFeature(feature);
|
|
10995
11019
|
}
|
|
@@ -11150,7 +11174,7 @@ class LocalSettingsService extends StartableService {
|
|
|
11150
11174
|
if (!page || !page.title || !page.path)
|
|
11151
11175
|
throw Error('Missing required argument \'page\', \'page.path\' or \'page.title\'');
|
|
11152
11176
|
// Set time
|
|
11153
|
-
page.time = page.time || moment$
|
|
11177
|
+
page.time = page.time || moment$7();
|
|
11154
11178
|
// Clean the title (remove <small> tags)
|
|
11155
11179
|
if (!opts || opts.removeTitleSmallTag !== false) {
|
|
11156
11180
|
const tagIndex = page.title.indexOf('</small>');
|
|
@@ -11166,7 +11190,7 @@ class LocalSettingsService extends StartableService {
|
|
|
11166
11190
|
return page;
|
|
11167
11191
|
}
|
|
11168
11192
|
}
|
|
11169
|
-
LocalSettingsService.ɵprov =
|
|
11193
|
+
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
11194
|
LocalSettingsService.decorators = [
|
|
11171
11195
|
{ type: Injectable, args: [{
|
|
11172
11196
|
providedIn: 'root'
|
|
@@ -11883,7 +11907,7 @@ class NetworkService extends StartableService {
|
|
|
11883
11907
|
});
|
|
11884
11908
|
}
|
|
11885
11909
|
}
|
|
11886
|
-
NetworkService.ɵprov =
|
|
11910
|
+
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
11911
|
NetworkService.decorators = [
|
|
11888
11912
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
11889
11913
|
];
|
|
@@ -11894,11 +11918,11 @@ NetworkService.ctorParameters = () => [
|
|
|
11894
11918
|
{ type: CryptoService },
|
|
11895
11919
|
{ type: Storage },
|
|
11896
11920
|
{ type: LocalSettingsService },
|
|
11897
|
-
{ type: CacheService
|
|
11921
|
+
{ type: CacheService },
|
|
11898
11922
|
{ type: HttpClient },
|
|
11899
11923
|
{ type: undefined, decorators: [{ type: Inject, args: [ENVIRONMENT,] }] },
|
|
11900
|
-
{ type: Network
|
|
11901
|
-
{ type: SplashScreen
|
|
11924
|
+
{ type: Network, decorators: [{ type: Optional }] },
|
|
11925
|
+
{ type: SplashScreen, decorators: [{ type: Optional }] },
|
|
11902
11926
|
{ type: TranslateService, decorators: [{ type: Optional }] },
|
|
11903
11927
|
{ type: ToastController, decorators: [{ type: Optional }] }
|
|
11904
11928
|
];
|
|
@@ -12829,7 +12853,7 @@ class EntitiesStorage extends StartableService {
|
|
|
12829
12853
|
}
|
|
12830
12854
|
EntitiesStorage.TRASH_PREFIX = 'Trash#';
|
|
12831
12855
|
EntitiesStorage.REMOTE_PREFIX = 'Remote#';
|
|
12832
|
-
EntitiesStorage.ɵprov =
|
|
12856
|
+
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
12857
|
EntitiesStorage.decorators = [
|
|
12834
12858
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
12835
12859
|
];
|
|
@@ -12966,10 +12990,10 @@ function referentialToString(obj, properties) {
|
|
|
12966
12990
|
function referentialsToString(values, properties, separator) {
|
|
12967
12991
|
return (values || []).map(v => referentialToString(v, properties)).join(separator || ', ');
|
|
12968
12992
|
}
|
|
12969
|
-
const ɵ0$
|
|
12993
|
+
const ɵ0$2 = StatusIds.ENABLE, ɵ1 = StatusIds.DISABLE, ɵ2 = StatusIds.TEMPORARY;
|
|
12970
12994
|
const StatusList = Object.freeze([
|
|
12971
12995
|
{
|
|
12972
|
-
id: ɵ0$
|
|
12996
|
+
id: ɵ0$2,
|
|
12973
12997
|
icon: 'checkmark',
|
|
12974
12998
|
label: 'REFERENTIAL.STATUS_ENUM.ENABLE'
|
|
12975
12999
|
},
|
|
@@ -13244,7 +13268,7 @@ function accountToString(data) {
|
|
|
13244
13268
|
(data.lastName || '')) || '';
|
|
13245
13269
|
}
|
|
13246
13270
|
|
|
13247
|
-
const uuidv4
|
|
13271
|
+
const uuidv4 = uuidv4Imported;
|
|
13248
13272
|
const _global = typeof global !== 'undefined' ? global : (typeof window !== 'undefined' ? window : {});
|
|
13249
13273
|
const NativeWebSocket = _global.WebSocket || _global.MozWebSocket;
|
|
13250
13274
|
/**
|
|
@@ -13288,7 +13312,7 @@ function createTrackerLink(opts) {
|
|
|
13288
13312
|
// Skip if not tracked
|
|
13289
13313
|
if (!context || !context.tracked)
|
|
13290
13314
|
return forward(operation);
|
|
13291
|
-
const id = context.serializationKey || uuidv4
|
|
13315
|
+
const id = context.serializationKey || uuidv4();
|
|
13292
13316
|
console.debug(`[apollo-tracker-link] Watching tracked query {${operation.operationName}#${id}}`);
|
|
13293
13317
|
// Clean context, before calling JSON.stringify (remove unused attributes)
|
|
13294
13318
|
const cleanContext = Object.assign(Object.assign({}, context), { optimisticResponse: null, cache: null });
|
|
@@ -14028,7 +14052,7 @@ class GraphqlService extends StartableService {
|
|
|
14028
14052
|
return undefined;
|
|
14029
14053
|
}
|
|
14030
14054
|
}
|
|
14031
|
-
GraphqlService.ɵprov =
|
|
14055
|
+
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
14056
|
GraphqlService.decorators = [
|
|
14033
14057
|
{ type: Injectable, args: [{
|
|
14034
14058
|
providedIn: 'root'
|
|
@@ -14045,7 +14069,7 @@ GraphqlService.ctorParameters = () => [
|
|
|
14045
14069
|
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [APP_GRAPHQL_TYPE_POLICIES,] }] }
|
|
14046
14070
|
];
|
|
14047
14071
|
|
|
14048
|
-
const sha256
|
|
14072
|
+
const sha256 = require('hash.js/lib/hash/sha/256');
|
|
14049
14073
|
class BaseGraphqlServiceOptions {
|
|
14050
14074
|
}
|
|
14051
14075
|
// eslint-disable-next-line @angular-eslint/directive-class-suffix
|
|
@@ -14196,8 +14220,8 @@ class BaseGraphqlService extends StartableService {
|
|
|
14196
14220
|
}
|
|
14197
14221
|
/* -- protected methods -- */
|
|
14198
14222
|
computeMutableWatchQueryId(opts) {
|
|
14199
|
-
const queryName = opts.queryName || sha256
|
|
14200
|
-
const variablesKey = opts.variables && sha256
|
|
14223
|
+
const queryName = opts.queryName || sha256().update(JSON.stringify(opts.query)).digest('hex').substring(0, 8);
|
|
14224
|
+
const variablesKey = opts.variables && sha256().update(JSON.stringify(opts.variables)).digest('hex').substring(0, 8) || '';
|
|
14201
14225
|
return [queryName, opts.arrayFieldName, variablesKey].join('|');
|
|
14202
14226
|
}
|
|
14203
14227
|
findMutableWatchQueries(opts) {
|
|
@@ -14267,7 +14291,7 @@ const DEFAULT_AVATAR_IMAGE = 'assets/img/person.png';
|
|
|
14267
14291
|
/* ------------------------------------
|
|
14268
14292
|
* GraphQL queries
|
|
14269
14293
|
* ------------------------------------*/
|
|
14270
|
-
const Fragments = {
|
|
14294
|
+
const Fragments$1 = {
|
|
14271
14295
|
account: gql `
|
|
14272
14296
|
fragment AccountFragment on AccountVO {
|
|
14273
14297
|
id
|
|
@@ -14302,14 +14326,14 @@ const Fragments = {
|
|
|
14302
14326
|
}`
|
|
14303
14327
|
};
|
|
14304
14328
|
// Load account query
|
|
14305
|
-
const LoadQuery = gql `
|
|
14329
|
+
const LoadQuery$1 = gql `
|
|
14306
14330
|
query Account {
|
|
14307
14331
|
data: account {
|
|
14308
14332
|
...AccountFragment
|
|
14309
14333
|
}
|
|
14310
14334
|
}
|
|
14311
|
-
${Fragments.account}
|
|
14312
|
-
${Fragments.settings}
|
|
14335
|
+
${Fragments$1.account}
|
|
14336
|
+
${Fragments$1.settings}
|
|
14313
14337
|
`;
|
|
14314
14338
|
// Check email query
|
|
14315
14339
|
const IsEmailExistsQuery = gql `
|
|
@@ -14324,21 +14348,21 @@ const AccountMutations = {
|
|
|
14324
14348
|
...AccountFragment
|
|
14325
14349
|
}
|
|
14326
14350
|
}
|
|
14327
|
-
${Fragments.account}
|
|
14328
|
-
${Fragments.settings}`,
|
|
14351
|
+
${Fragments$1.account}
|
|
14352
|
+
${Fragments$1.settings}`,
|
|
14329
14353
|
create: gql `mutation CreateAccount($data:AccountVOInput){
|
|
14330
14354
|
data: createAccount(account: $data){
|
|
14331
14355
|
...AccountFragment
|
|
14332
14356
|
}
|
|
14333
14357
|
}
|
|
14334
|
-
${Fragments.account}
|
|
14335
|
-
${Fragments.settings}`,
|
|
14358
|
+
${Fragments$1.account}
|
|
14359
|
+
${Fragments$1.settings}`,
|
|
14336
14360
|
saveSettings: gql `mutation SaveSettings($data:UserSettingsVOInput){
|
|
14337
14361
|
data: saveSettings(settings: $data){
|
|
14338
14362
|
...UserSettingsFragment
|
|
14339
14363
|
}
|
|
14340
14364
|
}
|
|
14341
|
-
${Fragments.settings}`
|
|
14365
|
+
${Fragments$1.settings}`
|
|
14342
14366
|
};
|
|
14343
14367
|
// Sent confirmation email
|
|
14344
14368
|
const SendConfirmEmailMutation = gql `
|
|
@@ -14849,7 +14873,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
14849
14873
|
// Load remotely
|
|
14850
14874
|
else {
|
|
14851
14875
|
const { data } = yield this.graphql.query({
|
|
14852
|
-
query: LoadQuery,
|
|
14876
|
+
query: LoadQuery$1,
|
|
14853
14877
|
error: { code: ErrorCodes.LOAD_ACCOUNT_ERROR, message: 'ERROR.LOAD_ACCOUNT_ERROR' },
|
|
14854
14878
|
fetchPolicy: opts && opts.fetchPolicy || 'no-cache' || undefined
|
|
14855
14879
|
});
|
|
@@ -15372,7 +15396,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
15372
15396
|
return Toasts.show(this.toastController, this.translate, opts);
|
|
15373
15397
|
}
|
|
15374
15398
|
}
|
|
15375
|
-
AccountService.ɵprov =
|
|
15399
|
+
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
15400
|
AccountService.decorators = [
|
|
15377
15401
|
{ type: Injectable, args: [{ providedIn: 'root', deps: [ENVIRONMENT] },] }
|
|
15378
15402
|
];
|
|
@@ -15640,7 +15664,7 @@ const CONFIGURATION_STORAGE_KEY = 'configuration';
|
|
|
15640
15664
|
/* ------------------------------------
|
|
15641
15665
|
* GraphQL queries
|
|
15642
15666
|
* ------------------------------------*/
|
|
15643
|
-
const Fragments
|
|
15667
|
+
const Fragments = {
|
|
15644
15668
|
config: gql `
|
|
15645
15669
|
fragment ConfigFragment on ConfigurationVO {
|
|
15646
15670
|
id
|
|
@@ -15667,13 +15691,13 @@ const Fragments$1 = {
|
|
|
15667
15691
|
}
|
|
15668
15692
|
`
|
|
15669
15693
|
};
|
|
15670
|
-
const LoadQuery
|
|
15694
|
+
const LoadQuery = gql `
|
|
15671
15695
|
query Configuration{
|
|
15672
15696
|
data: configuration{
|
|
15673
15697
|
...ConfigFragment
|
|
15674
15698
|
}
|
|
15675
15699
|
}
|
|
15676
|
-
${Fragments
|
|
15700
|
+
${Fragments.config}
|
|
15677
15701
|
`;
|
|
15678
15702
|
// Save (create or update) account mutation
|
|
15679
15703
|
const SaveMutation = gql `
|
|
@@ -15682,7 +15706,7 @@ const SaveMutation = gql `
|
|
|
15682
15706
|
...ConfigFragment
|
|
15683
15707
|
}
|
|
15684
15708
|
}
|
|
15685
|
-
${Fragments
|
|
15709
|
+
${Fragments.config}
|
|
15686
15710
|
`;
|
|
15687
15711
|
const ClearCache = gql `
|
|
15688
15712
|
query ClearCache($name: String) {
|
|
@@ -15733,7 +15757,7 @@ class ConfigService extends BaseGraphqlService {
|
|
|
15733
15757
|
return __awaiter(this, void 0, void 0, function* () {
|
|
15734
15758
|
const now = Date.now();
|
|
15735
15759
|
console.debug('[config] Loading Pod configuration...');
|
|
15736
|
-
const query = opts && opts.query || LoadQuery
|
|
15760
|
+
const query = opts && opts.query || LoadQuery;
|
|
15737
15761
|
const variables = opts && opts.variables || undefined;
|
|
15738
15762
|
const res = yield this.graphql.query({
|
|
15739
15763
|
query,
|
|
@@ -15972,7 +15996,7 @@ class ConfigService extends BaseGraphqlService {
|
|
|
15972
15996
|
});
|
|
15973
15997
|
}
|
|
15974
15998
|
}
|
|
15975
|
-
ConfigService.ɵprov =
|
|
15999
|
+
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
16000
|
ConfigService.decorators = [
|
|
15977
16001
|
{ type: Injectable, args: [{
|
|
15978
16002
|
providedIn: 'root',
|
|
@@ -16218,7 +16242,7 @@ class UriUtils {
|
|
|
16218
16242
|
}
|
|
16219
16243
|
}
|
|
16220
16244
|
|
|
16221
|
-
const moment$
|
|
16245
|
+
const moment$6 = momentImported;
|
|
16222
16246
|
const AndroidOsEnvironment = Object.freeze({
|
|
16223
16247
|
DIRECTORY_DOWNLOADS: 'Download',
|
|
16224
16248
|
DIRECTORY_DOWNLOADS_OLD: 'Downloads',
|
|
@@ -16253,6 +16277,8 @@ class PlatformService extends StartableService {
|
|
|
16253
16277
|
is(platformName) {
|
|
16254
16278
|
switch (platformName) {
|
|
16255
16279
|
case 'mobile':
|
|
16280
|
+
// Exclude Windows touch screens - see sumaris-app issues #323 and #346
|
|
16281
|
+
return isMobile(window);
|
|
16256
16282
|
case 'mobileweb':
|
|
16257
16283
|
// Exclude Windows touch screens - see sumaris-app issues #323 and #346
|
|
16258
16284
|
return this.platform.is(platformName) && !isWindows(window);
|
|
@@ -16479,16 +16505,16 @@ class PlatformService extends StartableService {
|
|
|
16479
16505
|
}
|
|
16480
16506
|
// config moment lib
|
|
16481
16507
|
try {
|
|
16482
|
-
moment$
|
|
16508
|
+
moment$6.locale(event.lang);
|
|
16483
16509
|
console.debug('[platform] Use locale {' + event.lang + '}');
|
|
16484
16510
|
}
|
|
16485
16511
|
// If error, fallback to en
|
|
16486
16512
|
catch (err) {
|
|
16487
|
-
moment$
|
|
16513
|
+
moment$6.locale('en');
|
|
16488
16514
|
console.warn('[platform] Unknown local for moment lib. Using default [en]');
|
|
16489
16515
|
}
|
|
16490
16516
|
// Config date adapter
|
|
16491
|
-
this.dateAdapter.setLocale(moment$
|
|
16517
|
+
this.dateAdapter.setLocale(moment$6.locale());
|
|
16492
16518
|
}
|
|
16493
16519
|
});
|
|
16494
16520
|
this.settings.onChange.subscribe(data => {
|
|
@@ -16688,7 +16714,7 @@ class PlatformService extends StartableService {
|
|
|
16688
16714
|
});
|
|
16689
16715
|
}
|
|
16690
16716
|
}
|
|
16691
|
-
PlatformService.ɵprov =
|
|
16717
|
+
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
16718
|
PlatformService.decorators = [
|
|
16693
16719
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
16694
16720
|
];
|
|
@@ -16703,15 +16729,15 @@ PlatformService.ctorParameters = () => [
|
|
|
16703
16729
|
{ type: NetworkService },
|
|
16704
16730
|
{ type: AccountService },
|
|
16705
16731
|
{ type: ConfigService },
|
|
16706
|
-
{ type: CacheService
|
|
16732
|
+
{ type: CacheService },
|
|
16707
16733
|
{ type: Storage },
|
|
16708
16734
|
{ type: AudioProvider },
|
|
16709
16735
|
{ type: undefined, decorators: [{ type: Inject, args: [ENVIRONMENT,] }] },
|
|
16710
|
-
{ type: StatusBar
|
|
16736
|
+
{ type: StatusBar, decorators: [{ type: Optional }] },
|
|
16711
16737
|
{ type: Keyboard, decorators: [{ type: Optional }] },
|
|
16712
|
-
{ type: SplashScreen
|
|
16713
|
-
{ type: InAppBrowser
|
|
16714
|
-
{ type: Downloader
|
|
16738
|
+
{ type: SplashScreen, decorators: [{ type: Optional }] },
|
|
16739
|
+
{ type: InAppBrowser, decorators: [{ type: Optional }] },
|
|
16740
|
+
{ type: Downloader, decorators: [{ type: Optional }] }
|
|
16715
16741
|
];
|
|
16716
16742
|
|
|
16717
16743
|
class AppHelpModal {
|
|
@@ -16776,7 +16802,7 @@ class MatStepperI18n extends MatStepperIntl {
|
|
|
16776
16802
|
this.optionalLabel = this.translate.instant('COMMON.OPTIONAL');
|
|
16777
16803
|
}
|
|
16778
16804
|
}
|
|
16779
|
-
MatStepperI18n.ɵprov =
|
|
16805
|
+
MatStepperI18n.ɵprov = i0.ɵɵdefineInjectable({ factory: function MatStepperI18n_Factory() { return new MatStepperI18n(i0.ɵɵinject(i1$1.TranslateService)); }, token: MatStepperI18n, providedIn: "root" });
|
|
16780
16806
|
MatStepperI18n.decorators = [
|
|
16781
16807
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
16782
16808
|
];
|
|
@@ -18179,28 +18205,30 @@ class InMemoryEntitiesService extends EntitiesService {
|
|
|
18179
18205
|
}
|
|
18180
18206
|
this.dirty = false;
|
|
18181
18207
|
}
|
|
18182
|
-
|
|
18183
|
-
|
|
18184
|
-
|
|
18185
|
-
|
|
18186
|
-
|
|
18187
|
-
|
|
18188
|
-
|
|
18189
|
-
|
|
18208
|
+
loadAll(offset, size, sortBy, sortDirection, filter, opts) {
|
|
18209
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
18210
|
+
offset = offset >= 0 ? offset : 0;
|
|
18211
|
+
size = size >= 0 ? size : -1;
|
|
18212
|
+
if (!this.data) {
|
|
18213
|
+
console.warn('[memory-data-service] Waiting value to be set...');
|
|
18214
|
+
yield firstNotNilPromise(this._onChange);
|
|
18215
|
+
}
|
|
18216
|
+
// Wait end of saving
|
|
18217
|
+
if (this._saving)
|
|
18218
|
+
yield waitFor(() => !this._saving);
|
|
18190
18219
|
const excludedDataByFilter = [];
|
|
18191
18220
|
let excludedDataByPagination;
|
|
18192
18221
|
try {
|
|
18193
|
-
if (
|
|
18222
|
+
if (!this.data.length) {
|
|
18194
18223
|
return { data: [], total: 0 };
|
|
18195
18224
|
}
|
|
18196
18225
|
// Apply sort
|
|
18197
18226
|
let data = this._sortFn(this.data || [], sortBy, sortDirection);
|
|
18198
18227
|
if (this._onLoad) {
|
|
18199
|
-
|
|
18200
|
-
data = ((promiseOrData instanceof Promise)) ? yield promiseOrData : promiseOrData;
|
|
18228
|
+
data = yield this._onLoad(data);
|
|
18201
18229
|
}
|
|
18202
18230
|
// Apply filter (will update hiddenData)
|
|
18203
|
-
data = this.filter(data,
|
|
18231
|
+
data = this.filter(data, filter, excludedDataByFilter);
|
|
18204
18232
|
// Compute the total length
|
|
18205
18233
|
const total = data.length;
|
|
18206
18234
|
// If page size=0 (e.g. only need total)
|
|
@@ -18242,13 +18270,37 @@ class InMemoryEntitiesService extends EntitiesService {
|
|
|
18242
18270
|
if (data === this.data) {
|
|
18243
18271
|
data = data.slice();
|
|
18244
18272
|
}
|
|
18245
|
-
|
|
18273
|
+
const res = { data, total };
|
|
18274
|
+
const nextOffset = (offset || 0) + size;
|
|
18275
|
+
if (nextOffset < total) {
|
|
18276
|
+
res.fetchMore = () => this.loadAll(nextOffset, size, sortBy, sortDirection, filter, opts)
|
|
18277
|
+
.then(res => {
|
|
18278
|
+
var _a;
|
|
18279
|
+
// Update hidden data (remove new fetched item)
|
|
18280
|
+
if ((_a = res.data) === null || _a === void 0 ? void 0 : _a.length) {
|
|
18281
|
+
this._hiddenData = this._hiddenData.filter(item => !res.data.includes(item));
|
|
18282
|
+
}
|
|
18283
|
+
return res;
|
|
18284
|
+
});
|
|
18285
|
+
}
|
|
18286
|
+
return res;
|
|
18246
18287
|
}
|
|
18247
18288
|
finally {
|
|
18248
18289
|
// Remember hidden data
|
|
18249
|
-
|
|
18290
|
+
if (offset === 0) {
|
|
18291
|
+
this._hiddenData = !excludedDataByPagination ? excludedDataByFilter : excludedDataByFilter.concat(...excludedDataByPagination);
|
|
18292
|
+
}
|
|
18250
18293
|
}
|
|
18251
|
-
})
|
|
18294
|
+
});
|
|
18295
|
+
}
|
|
18296
|
+
watchAll(offset, size, sortBy, sortDirection, filterData, options) {
|
|
18297
|
+
offset = offset >= 0 ? offset : 0;
|
|
18298
|
+
size = size >= 0 ? size : -1;
|
|
18299
|
+
if (!this.data) {
|
|
18300
|
+
console.warn('[memory-data-service] Waiting value to be set...');
|
|
18301
|
+
}
|
|
18302
|
+
return this._onChange
|
|
18303
|
+
.pipe(filter(isNotNil), mergeMap(_ => this.loadAll(offset, size, sortBy, sortDirection, filterData, options)));
|
|
18252
18304
|
}
|
|
18253
18305
|
saveAll(data, options) {
|
|
18254
18306
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -18670,7 +18722,7 @@ function state2side(state) {
|
|
|
18670
18722
|
return 1;
|
|
18671
18723
|
}
|
|
18672
18724
|
}
|
|
18673
|
-
const ɵ0$
|
|
18725
|
+
const ɵ0$1 = (defaultStateSize) => [
|
|
18674
18726
|
Math.round((rgbArrayMap.red[0] - 50) / defaultStateSize),
|
|
18675
18727
|
Math.round((255 - rgbArrayMap.red[1]) / defaultStateSize),
|
|
18676
18728
|
Math.round((255 - rgbArrayMap.red[2]) / defaultStateSize)
|
|
@@ -18678,7 +18730,7 @@ const ɵ0$b = (defaultStateSize) => [
|
|
|
18678
18730
|
const SCALE_OPTIONS_DEFAULT = {
|
|
18679
18731
|
startColor: rgbArrayMap.red,
|
|
18680
18732
|
startStates: [0, 2, 3],
|
|
18681
|
-
startStepsFn: ɵ0$
|
|
18733
|
+
startStepsFn: ɵ0$1
|
|
18682
18734
|
};
|
|
18683
18735
|
/**
|
|
18684
18736
|
* Internal function, that create a colors scale, using iteration
|
|
@@ -19485,7 +19537,7 @@ class UserSettingsValidatorService extends AppValidatorService {
|
|
|
19485
19537
|
});
|
|
19486
19538
|
}
|
|
19487
19539
|
}
|
|
19488
|
-
UserSettingsValidatorService.ɵprov =
|
|
19540
|
+
UserSettingsValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function UserSettingsValidatorService_Factory() { return new UserSettingsValidatorService(i0.ɵɵinject(i1$6.FormBuilder)); }, token: UserSettingsValidatorService, providedIn: "root" });
|
|
19489
19541
|
UserSettingsValidatorService.decorators = [
|
|
19490
19542
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
19491
19543
|
];
|
|
@@ -19529,7 +19581,7 @@ class AccountValidatorService extends AppValidatorService {
|
|
|
19529
19581
|
return validatorFns.length ? Validators.compose(validatorFns) : validatorFns.length === 1 ? validatorFns[0] : undefined;
|
|
19530
19582
|
}
|
|
19531
19583
|
}
|
|
19532
|
-
AccountValidatorService.ɵprov =
|
|
19584
|
+
AccountValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function AccountValidatorService_Factory() { return new AccountValidatorService(i0.ɵɵinject(i1$6.FormBuilder), i0.ɵɵinject(AccountService)); }, token: AccountValidatorService, providedIn: "root" });
|
|
19533
19585
|
AccountValidatorService.decorators = [
|
|
19534
19586
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
19535
19587
|
];
|
|
@@ -19823,7 +19875,7 @@ class MenuService {
|
|
|
19823
19875
|
this._$opened.next(false);
|
|
19824
19876
|
}
|
|
19825
19877
|
}
|
|
19826
|
-
MenuService.ɵprov =
|
|
19878
|
+
MenuService.ɵprov = i0.ɵɵdefineInjectable({ factory: function MenuService_Factory() { return new MenuService(); }, token: MenuService, providedIn: "root" });
|
|
19827
19879
|
MenuService.decorators = [
|
|
19828
19880
|
{ type: Injectable, args: [{
|
|
19829
19881
|
providedIn: 'root'
|
|
@@ -20159,7 +20211,7 @@ class LocalSettingsValidatorService extends AppValidatorService {
|
|
|
20159
20211
|
});
|
|
20160
20212
|
}
|
|
20161
20213
|
}
|
|
20162
|
-
LocalSettingsValidatorService.ɵprov =
|
|
20214
|
+
LocalSettingsValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function LocalSettingsValidatorService_Factory() { return new LocalSettingsValidatorService(i0.ɵɵinject(i1$6.FormBuilder), i0.ɵɵinject(NetworkService)); }, token: LocalSettingsValidatorService, providedIn: "root" });
|
|
20163
20215
|
LocalSettingsValidatorService.decorators = [
|
|
20164
20216
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
20165
20217
|
];
|
|
@@ -20778,7 +20830,7 @@ class IsOnFieldModePipe {
|
|
|
20778
20830
|
return value === 'FIELD';
|
|
20779
20831
|
}
|
|
20780
20832
|
}
|
|
20781
|
-
IsOnFieldModePipe.ɵprov =
|
|
20833
|
+
IsOnFieldModePipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsOnFieldModePipe_Factory() { return new IsOnFieldModePipe(); }, token: IsOnFieldModePipe, providedIn: "root" });
|
|
20782
20834
|
IsOnFieldModePipe.decorators = [
|
|
20783
20835
|
{ type: Pipe, args: [{
|
|
20784
20836
|
name: 'isOnField'
|
|
@@ -20790,7 +20842,7 @@ class IsNotOnFieldModePipe {
|
|
|
20790
20842
|
return value !== 'FIELD';
|
|
20791
20843
|
}
|
|
20792
20844
|
}
|
|
20793
|
-
IsNotOnFieldModePipe.ɵprov =
|
|
20845
|
+
IsNotOnFieldModePipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsNotOnFieldModePipe_Factory() { return new IsNotOnFieldModePipe(); }, token: IsNotOnFieldModePipe, providedIn: "root" });
|
|
20794
20846
|
IsNotOnFieldModePipe.decorators = [
|
|
20795
20847
|
{ type: Pipe, args: [{
|
|
20796
20848
|
name: 'isNotOnField'
|
|
@@ -20805,7 +20857,7 @@ class PersonToStringPipe {
|
|
|
20805
20857
|
return PersonUtils.personToString(value);
|
|
20806
20858
|
}
|
|
20807
20859
|
}
|
|
20808
|
-
PersonToStringPipe.ɵprov =
|
|
20860
|
+
PersonToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function PersonToStringPipe_Factory() { return new PersonToStringPipe(); }, token: PersonToStringPipe, providedIn: "root" });
|
|
20809
20861
|
PersonToStringPipe.decorators = [
|
|
20810
20862
|
{ type: Pipe, args: [{
|
|
20811
20863
|
name: 'personToString'
|
|
@@ -21158,7 +21210,7 @@ class IsLoginAccountPipe {
|
|
|
21158
21210
|
return value && value.pubkey && true;
|
|
21159
21211
|
}
|
|
21160
21212
|
}
|
|
21161
|
-
IsLoginAccountPipe.ɵprov =
|
|
21213
|
+
IsLoginAccountPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsLoginAccountPipe_Factory() { return new IsLoginAccountPipe(); }, token: IsLoginAccountPipe, providedIn: "root" });
|
|
21162
21214
|
IsLoginAccountPipe.decorators = [
|
|
21163
21215
|
{ type: Pipe, args: [{
|
|
21164
21216
|
name: 'isLogin'
|
|
@@ -21170,7 +21222,7 @@ class AccountToStringPipe {
|
|
|
21170
21222
|
return accountToString(value);
|
|
21171
21223
|
}
|
|
21172
21224
|
}
|
|
21173
|
-
AccountToStringPipe.ɵprov =
|
|
21225
|
+
AccountToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function AccountToStringPipe_Factory() { return new AccountToStringPipe(); }, token: AccountToStringPipe, providedIn: "root" });
|
|
21174
21226
|
AccountToStringPipe.decorators = [
|
|
21175
21227
|
{ type: Pipe, args: [{
|
|
21176
21228
|
name: 'accountToString'
|
|
@@ -21185,7 +21237,7 @@ class DepartmentToStringPipe {
|
|
|
21185
21237
|
return departmentToString(value);
|
|
21186
21238
|
}
|
|
21187
21239
|
}
|
|
21188
|
-
DepartmentToStringPipe.ɵprov =
|
|
21240
|
+
DepartmentToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DepartmentToStringPipe_Factory() { return new DepartmentToStringPipe(); }, token: DepartmentToStringPipe, providedIn: "root" });
|
|
21189
21241
|
DepartmentToStringPipe.decorators = [
|
|
21190
21242
|
{ type: Pipe, args: [{
|
|
21191
21243
|
name: 'departmentToString'
|
|
@@ -21820,7 +21872,7 @@ class AuthGuardService {
|
|
|
21820
21872
|
}));
|
|
21821
21873
|
}
|
|
21822
21874
|
}
|
|
21823
|
-
AuthGuardService.ɵprov =
|
|
21875
|
+
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
21876
|
AuthGuardService.decorators = [
|
|
21825
21877
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
21826
21878
|
];
|
|
@@ -22285,8 +22337,6 @@ class AppTableUtils {
|
|
|
22285
22337
|
}
|
|
22286
22338
|
}
|
|
22287
22339
|
|
|
22288
|
-
class AppTableDataSourceOptions {
|
|
22289
|
-
}
|
|
22290
22340
|
// @dynamic
|
|
22291
22341
|
// eslint-disable-next-line @angular-eslint/directive-class-suffix
|
|
22292
22342
|
class EntitiesTableDataSource extends TableDataSource {
|
|
@@ -22299,30 +22349,22 @@ class EntitiesTableDataSource extends TableDataSource {
|
|
|
22299
22349
|
* @param validatorService Service that create instances of the FormGroup used to validate row fields.
|
|
22300
22350
|
* @param config Additional configuration for table.
|
|
22301
22351
|
*/
|
|
22302
|
-
constructor(dataType, dataService, validatorService,
|
|
22303
|
-
super([], dataType, validatorService,
|
|
22352
|
+
constructor(dataType, dataService, validatorService, options) {
|
|
22353
|
+
super([], dataType, validatorService, Object.assign({ dataServiceOptions: {}, debug: (options === null || options === void 0 ? void 0 : options.suppressErrors) === false, keepOriginalDataAfterConfirm: false }, options));
|
|
22304
22354
|
this.dataService = dataService;
|
|
22305
22355
|
this._creating = false;
|
|
22306
22356
|
this._saving = false;
|
|
22307
|
-
this._useValidator = false;
|
|
22308
22357
|
this._stopWatching$ = new Subject();
|
|
22309
22358
|
this._editingRowCount = 0;
|
|
22310
22359
|
this._fetchMoreFn = null;
|
|
22311
22360
|
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;
|
|
22361
|
+
this._entityName = removeEnd((new dataType()).__typename || 'UnknownVO', 'VO');
|
|
22317
22362
|
}
|
|
22318
22363
|
get serviceOptions() {
|
|
22319
|
-
return this.
|
|
22364
|
+
return this.config.dataServiceOptions;
|
|
22320
22365
|
}
|
|
22321
22366
|
set serviceOptions(value) {
|
|
22322
|
-
this.
|
|
22323
|
-
}
|
|
22324
|
-
get options() {
|
|
22325
|
-
return this._options;
|
|
22367
|
+
this.config.dataServiceOptions = value;
|
|
22326
22368
|
}
|
|
22327
22369
|
get loaded() {
|
|
22328
22370
|
return this.loadingSubject.value === false; // Should be false when undefined (initial state)
|
|
@@ -22345,10 +22387,10 @@ class EntitiesTableDataSource extends TableDataSource {
|
|
|
22345
22387
|
return this.dataService.watchAll(offset, size, sortBy, sortDirection, filter, this.serviceOptions)
|
|
22346
22388
|
.pipe(catchError(err => this.handleError(err, 'ERROR.LOAD_DATA_ERROR')), map((res) => {
|
|
22347
22389
|
if (this._saving) {
|
|
22348
|
-
console.info(`[table-datasource] Received ${this.
|
|
22390
|
+
console.info(`[table-datasource] Received ${this._entityName} data (from service), but still saving: skip`);
|
|
22349
22391
|
}
|
|
22350
22392
|
else if (this._editingRowCount > 0) {
|
|
22351
|
-
console.warn(`[table-datasource] Received ${this.
|
|
22393
|
+
console.warn(`[table-datasource] Received ${this._entityName} data, while ${this._editingRowCount} rows still editing: skip; Please check save() implementation in the table!`);
|
|
22352
22394
|
}
|
|
22353
22395
|
else {
|
|
22354
22396
|
this.updateDatasource((res.data || []));
|
|
@@ -22361,6 +22403,18 @@ class EntitiesTableDataSource extends TableDataSource {
|
|
|
22361
22403
|
// ⚠ Notice: Don't put any operator after takeUntil to avoid potential subscription leaks
|
|
22362
22404
|
);
|
|
22363
22405
|
}
|
|
22406
|
+
updateDatasourceFromRows(rows) {
|
|
22407
|
+
var _a;
|
|
22408
|
+
// Avoid to update dataSourceSubject, when not need
|
|
22409
|
+
if ((_a = this.datasourceSubject.observers) === null || _a === void 0 ? void 0 : _a.length) {
|
|
22410
|
+
if (!this.config.suppressErrors)
|
|
22411
|
+
console.warn('[table-datasource] Update datasource subject. Please prefer using \'rowsSubject\' instead of \'datasourceSubject\'');
|
|
22412
|
+
super.updateDatasourceFromRows(rows);
|
|
22413
|
+
}
|
|
22414
|
+
else {
|
|
22415
|
+
console.debug('[table-datasource] Skipping datasourceSubject update (not used yet).');
|
|
22416
|
+
}
|
|
22417
|
+
}
|
|
22364
22418
|
save() {
|
|
22365
22419
|
return __awaiter(this, void 0, void 0, function* () {
|
|
22366
22420
|
if (toBoolean(this.serviceOptions.readOnly, false)) {
|
|
@@ -22369,31 +22423,31 @@ class EntitiesTableDataSource extends TableDataSource {
|
|
|
22369
22423
|
}
|
|
22370
22424
|
// Saving twice (should never occur)
|
|
22371
22425
|
if (this._saving) {
|
|
22372
|
-
console.warn(`[table-datasource] Trying to save ${this.
|
|
22426
|
+
console.warn(`[table-datasource] Trying to save ${this._entityName} rows twice. Skip`);
|
|
22373
22427
|
return false;
|
|
22374
22428
|
}
|
|
22375
22429
|
this._saving = true;
|
|
22376
22430
|
this.markAsLoading();
|
|
22377
22431
|
const onlyDirtyRows = toBoolean(this.serviceOptions.saveOnlyDirtyRows, false);
|
|
22378
22432
|
try {
|
|
22379
|
-
if (this.
|
|
22380
|
-
console.debug(`[table-datasource] Saving ${this.
|
|
22433
|
+
if (this.config.debug)
|
|
22434
|
+
console.debug(`[table-datasource] Saving ${this._entityName} rows... {onlyDirty: ${onlyDirtyRows}}`);
|
|
22381
22435
|
// Get all rows
|
|
22382
|
-
const rows =
|
|
22436
|
+
const rows = this.getRows();
|
|
22383
22437
|
// Finish editing all rows
|
|
22384
22438
|
const invalidRows = rows.filter(row => row.editing && !row.confirmEditCreate());
|
|
22385
22439
|
// Cannot finish some rows: error
|
|
22386
22440
|
if (invalidRows.length) {
|
|
22387
22441
|
// log errors
|
|
22388
|
-
if (this.
|
|
22389
|
-
invalidRows.forEach(row => AppTableUtils.logRowErrors(row, `[table-datasource] ${this.
|
|
22442
|
+
if (this.config.debug)
|
|
22443
|
+
invalidRows.forEach(row => AppTableUtils.logRowErrors(row, `[table-datasource] ${this._entityName} row #${row.id}`));
|
|
22390
22444
|
// Stop with an error
|
|
22391
22445
|
throw { code: ErrorCodes.TABLE_INVALID_ROW_ERROR, message: 'ERROR.TABLE_INVALID_ROW_ERROR' };
|
|
22392
22446
|
}
|
|
22393
22447
|
this._editingRowCount = 0;
|
|
22394
22448
|
let data;
|
|
22395
22449
|
let dataToSave;
|
|
22396
|
-
if (this.
|
|
22450
|
+
if (this.validatorService) {
|
|
22397
22451
|
dataToSave = [];
|
|
22398
22452
|
data = rows.map(row => {
|
|
22399
22453
|
const currentData = new this.dataConstructor();
|
|
@@ -22414,21 +22468,21 @@ class EntitiesTableDataSource extends TableDataSource {
|
|
|
22414
22468
|
}
|
|
22415
22469
|
// If no data to save: exit
|
|
22416
22470
|
if (onlyDirtyRows && !dataToSave.length) {
|
|
22417
|
-
if (this.
|
|
22418
|
-
console.debug(`[table-datasource] No ${this.
|
|
22471
|
+
if (this.config.debug)
|
|
22472
|
+
console.debug(`[table-datasource] No ${this._entityName} data to save. Skip`);
|
|
22419
22473
|
return false;
|
|
22420
22474
|
}
|
|
22421
|
-
if (this.
|
|
22422
|
-
console.debug(`[table-datasource] Asking service to save this ${this.
|
|
22475
|
+
if (this.config.debug)
|
|
22476
|
+
console.debug(`[table-datasource] Asking service to save this ${this._entityName} data:`, dataToSave);
|
|
22423
22477
|
yield this.dataService.saveAll(dataToSave, this.serviceOptions);
|
|
22424
|
-
if (this.
|
|
22425
|
-
console.debug(`[table-datasource] Saving ${this.
|
|
22478
|
+
if (this.config.debug)
|
|
22479
|
+
console.debug(`[table-datasource] Saving ${this._entityName} data [OK]`);
|
|
22426
22480
|
// 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
22481
|
this.updateDatasource(data, { emitEvent: false });
|
|
22428
22482
|
return true;
|
|
22429
22483
|
}
|
|
22430
22484
|
catch (error) {
|
|
22431
|
-
if (this.
|
|
22485
|
+
if (this.config.debug)
|
|
22432
22486
|
console.error('[table-datasource] Error while saving: ' + error && error.message || error);
|
|
22433
22487
|
throw error;
|
|
22434
22488
|
}
|
|
@@ -22439,17 +22493,13 @@ class EntitiesTableDataSource extends TableDataSource {
|
|
|
22439
22493
|
});
|
|
22440
22494
|
}
|
|
22441
22495
|
updateDatasource(data, opts) {
|
|
22442
|
-
if (this.
|
|
22496
|
+
if (this.config.debug)
|
|
22443
22497
|
console.debug(`[table-datasource] Updating datasource with data:`, data);
|
|
22444
22498
|
super.updateDatasource(data, opts);
|
|
22445
22499
|
if (!opts || opts.emitEvent !== false) {
|
|
22446
22500
|
this.markAsLoaded();
|
|
22447
22501
|
}
|
|
22448
22502
|
}
|
|
22449
|
-
// Overwrite default signature
|
|
22450
|
-
createNew(insertAt) {
|
|
22451
|
-
this.asyncCreateNew(insertAt);
|
|
22452
|
-
}
|
|
22453
22503
|
connect(collectionViewer) {
|
|
22454
22504
|
// DEBUG console.debug("[entities-datasource] connect");
|
|
22455
22505
|
return super.connect(collectionViewer);
|
|
@@ -22471,38 +22521,37 @@ class EntitiesTableDataSource extends TableDataSource {
|
|
|
22471
22521
|
console.warn('[table-datasource] Row still has {editing: true} after confirmCreate()! Force editing to false');
|
|
22472
22522
|
row.validator.disable({ onlySelf: true, emitEvent: false });
|
|
22473
22523
|
}
|
|
22524
|
+
this._editingRowCount--;
|
|
22474
22525
|
return true;
|
|
22475
22526
|
}
|
|
22476
22527
|
confirmEdit(row) {
|
|
22477
22528
|
if (!super.confirmEdit(row))
|
|
22478
22529
|
return false;
|
|
22479
22530
|
if (row.editing && row.validator) {
|
|
22480
|
-
console.warn('[table-datasource] Row still has {editing: true} after
|
|
22531
|
+
console.warn('[table-datasource] Row still has {editing: true} after confirmEdit()! Force editing to false');
|
|
22481
22532
|
row.validator.disable({ onlySelf: true, emitEvent: false });
|
|
22482
22533
|
}
|
|
22534
|
+
this._editingRowCount--;
|
|
22483
22535
|
return true;
|
|
22484
22536
|
}
|
|
22485
22537
|
startEdit(row) {
|
|
22486
|
-
if (
|
|
22487
|
-
|
|
22488
|
-
row.
|
|
22538
|
+
if (!super.startEdit(row))
|
|
22539
|
+
return false;
|
|
22540
|
+
if (!row.editing && row.validator) {
|
|
22541
|
+
console.warn('[table-datasource] Row still has {editing: false} after startEdit()! Force editing');
|
|
22542
|
+
row.validator.enable({ onlySelf: true, emitEvent: false });
|
|
22543
|
+
}
|
|
22489
22544
|
this._editingRowCount++;
|
|
22490
22545
|
}
|
|
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
22546
|
handleError(error, message) {
|
|
22498
22547
|
const errorMsg = error && error.message || error;
|
|
22499
|
-
console.error(`[table-datasource] Service ${this.
|
|
22548
|
+
console.error(`[table-datasource] Service ${this._entityName} sent error: ${errorMsg}`, error);
|
|
22500
22549
|
this.markAsLoaded();
|
|
22501
22550
|
throw new Error(message || errorMsg);
|
|
22502
22551
|
}
|
|
22503
|
-
|
|
22552
|
+
handleServiceError(error) {
|
|
22504
22553
|
const errorMsg = error && error.message || error;
|
|
22505
|
-
console.error(`[table-datasource] Service ${this.
|
|
22554
|
+
console.error(`[table-datasource] Service ${this._entityName} sent error: ${errorMsg}`, error);
|
|
22506
22555
|
this.markAsLoaded();
|
|
22507
22556
|
throw error;
|
|
22508
22557
|
}
|
|
@@ -22516,9 +22565,11 @@ class EntitiesTableDataSource extends TableDataSource {
|
|
|
22516
22565
|
console.error(`[table-datasource] Row to delete with id=${id} not found`);
|
|
22517
22566
|
return;
|
|
22518
22567
|
}
|
|
22568
|
+
if (row.editing)
|
|
22569
|
+
this._editingRowCount--;
|
|
22519
22570
|
this.loadingSubject.next(true);
|
|
22520
22571
|
this.dataService.deleteAll([row.currentData], this.serviceOptions)
|
|
22521
|
-
.catch(err => this.
|
|
22572
|
+
.catch(err => this.handleServiceError(err))
|
|
22522
22573
|
.then(() => {
|
|
22523
22574
|
setTimeout(() => {
|
|
22524
22575
|
// make sure row has been deleted (because GrapQHl cache remove can failed)
|
|
@@ -22530,66 +22581,77 @@ class EntitiesTableDataSource extends TableDataSource {
|
|
|
22530
22581
|
});
|
|
22531
22582
|
}
|
|
22532
22583
|
deleteAll(rows) {
|
|
22533
|
-
|
|
22534
|
-
|
|
22535
|
-
|
|
22536
|
-
|
|
22537
|
-
|
|
22538
|
-
|
|
22539
|
-
|
|
22540
|
-
|
|
22541
|
-
|
|
22542
|
-
|
|
22543
|
-
|
|
22544
|
-
|
|
22545
|
-
|
|
22546
|
-
|
|
22547
|
-
|
|
22548
|
-
|
|
22549
|
-
|
|
22550
|
-
|
|
22551
|
-
|
|
22552
|
-
|
|
22553
|
-
|
|
22554
|
-
|
|
22584
|
+
const _super = Object.create(null, {
|
|
22585
|
+
delete: { get: () => super.delete }
|
|
22586
|
+
});
|
|
22587
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
22588
|
+
this.markAsLoading();
|
|
22589
|
+
const data = this.getDataFromRows(rows);
|
|
22590
|
+
const rowsById = Beans.collectById(rows);
|
|
22591
|
+
try {
|
|
22592
|
+
// Call service deletion
|
|
22593
|
+
yield this.dataService.deleteAll(data, this.serviceOptions);
|
|
22594
|
+
// Workaround, to be sure all rows have been deleted
|
|
22595
|
+
// Sometimes, the service miss deletion, or GrapQHl cache remove failed
|
|
22596
|
+
const rowNotDeleted = this.getRows().map(row => rows.find(r => r === row));
|
|
22597
|
+
// Apply missing deletion
|
|
22598
|
+
if (isNotEmptyArray(rowNotDeleted)) {
|
|
22599
|
+
console.warn(`[table-datasource] Force deletion of ${rowNotDeleted.length} rows (Is service update the cache ?)`);
|
|
22600
|
+
rowNotDeleted
|
|
22601
|
+
// Start from the end
|
|
22602
|
+
.sort((a, b) => a.id > b.id ? -1 : 1)
|
|
22603
|
+
.forEach(r => _super.delete.call(this, r.id));
|
|
22604
|
+
}
|
|
22605
|
+
}
|
|
22606
|
+
catch (err) {
|
|
22607
|
+
// Handle sservice error
|
|
22608
|
+
this.handleServiceError(err);
|
|
22609
|
+
}
|
|
22610
|
+
finally {
|
|
22611
|
+
this.loadingSubject.next(false);
|
|
22555
22612
|
}
|
|
22556
|
-
this.loadingSubject.next(false);
|
|
22557
22613
|
});
|
|
22558
22614
|
}
|
|
22615
|
+
getRow(id) {
|
|
22616
|
+
return super.getRow(id);
|
|
22617
|
+
}
|
|
22559
22618
|
getRows() {
|
|
22560
|
-
return
|
|
22619
|
+
return this.rowsSubject.getValue();
|
|
22561
22620
|
}
|
|
22562
|
-
|
|
22621
|
+
createNew(insertAt, options = { editing: true }) {
|
|
22563
22622
|
const _super = Object.create(null, {
|
|
22564
22623
|
createNew: { get: () => super.createNew }
|
|
22565
22624
|
});
|
|
22625
|
+
var _a;
|
|
22566
22626
|
return __awaiter(this, void 0, void 0, function* () {
|
|
22567
22627
|
if (this._creating)
|
|
22568
22628
|
return; // Avoid multiple call (should never occur)
|
|
22569
22629
|
this._creating = true;
|
|
22570
|
-
|
|
22571
|
-
|
|
22572
|
-
|
|
22573
|
-
|
|
22574
|
-
|
|
22575
|
-
if (res instanceof Promise) {
|
|
22630
|
+
try {
|
|
22631
|
+
const row = yield _super.createNew.call(this, insertAt, options);
|
|
22632
|
+
if (!row)
|
|
22633
|
+
return;
|
|
22634
|
+
if ((_a = this.config) === null || _a === void 0 ? void 0 : _a.onRowCreated) {
|
|
22576
22635
|
try {
|
|
22577
|
-
yield
|
|
22636
|
+
yield this.config.onRowCreated(row);
|
|
22578
22637
|
}
|
|
22579
22638
|
catch (err) {
|
|
22639
|
+
// Log, then continue
|
|
22580
22640
|
console.error(err && err.message || err, err);
|
|
22581
22641
|
}
|
|
22582
22642
|
}
|
|
22643
|
+
if (row.editing)
|
|
22644
|
+
this._editingRowCount++;
|
|
22645
|
+
return row;
|
|
22646
|
+
}
|
|
22647
|
+
finally {
|
|
22648
|
+
this._creating = false;
|
|
22583
22649
|
}
|
|
22584
|
-
this._editingRowCount++;
|
|
22585
|
-
this._creating = false;
|
|
22586
22650
|
});
|
|
22587
22651
|
}
|
|
22588
22652
|
getData() {
|
|
22589
|
-
|
|
22590
|
-
|
|
22591
|
-
return this.getDataFromRows(rows);
|
|
22592
|
-
});
|
|
22653
|
+
const rows = this.getRows();
|
|
22654
|
+
return this.getDataFromRows(rows);
|
|
22593
22655
|
}
|
|
22594
22656
|
fetchMore(opts) {
|
|
22595
22657
|
const _super = Object.create(null, {
|
|
@@ -22599,20 +22661,20 @@ class EntitiesTableDataSource extends TableDataSource {
|
|
|
22599
22661
|
if (!this._fetchMoreFn)
|
|
22600
22662
|
return false; // Avoid multiple call
|
|
22601
22663
|
if (this._editingRowCount > 0) {
|
|
22602
|
-
console.warn(
|
|
22664
|
+
console.warn(`Cannot fetch more ${this._entityName} because ${this._editingRowCount} row(s) still editing`);
|
|
22603
22665
|
return;
|
|
22604
22666
|
}
|
|
22667
|
+
console.debug(`Will fetching more row(s) still...`);
|
|
22605
22668
|
// Forget the fetchMore function, to avoid multiple call
|
|
22606
22669
|
const fetchMoreFn = this._fetchMoreFn;
|
|
22607
22670
|
this._fetchMoreFn = null;
|
|
22608
22671
|
// Fetch next page
|
|
22609
22672
|
const res = yield fetchMoreFn();
|
|
22610
22673
|
// Skip if empty (no more data)
|
|
22611
|
-
if (
|
|
22674
|
+
if (isEmptyArray(res === null || res === void 0 ? void 0 : res.data))
|
|
22612
22675
|
return false;
|
|
22613
22676
|
// Update the data source
|
|
22614
|
-
|
|
22615
|
-
_super.updateDatasource.call(this, existingData.concat(...res.data), opts);
|
|
22677
|
+
_super.updateDatasource.call(this, (this.currentData || []).concat(...res.data), opts);
|
|
22616
22678
|
// Remember fetchMore
|
|
22617
22679
|
this._fetchMoreFn = res.fetchMore;
|
|
22618
22680
|
return true;
|
|
@@ -22636,8 +22698,8 @@ EntitiesTableDataSource.decorators = [
|
|
|
22636
22698
|
EntitiesTableDataSource.ctorParameters = () => [
|
|
22637
22699
|
{ type: Function },
|
|
22638
22700
|
{ type: undefined },
|
|
22639
|
-
{ type:
|
|
22640
|
-
{ type:
|
|
22701
|
+
{ type: undefined },
|
|
22702
|
+
{ type: undefined }
|
|
22641
22703
|
];
|
|
22642
22704
|
|
|
22643
22705
|
const SETTINGS_DISPLAY_COLUMNS = 'displayColumns';
|
|
@@ -23172,7 +23234,7 @@ class AppTable {
|
|
|
23172
23234
|
if (id < 0)
|
|
23173
23235
|
return;
|
|
23174
23236
|
if (id >= this.visibleRowCount) {
|
|
23175
|
-
this.addRow(event, undefined, opts);
|
|
23237
|
+
this.addRow(event, undefined, Object.assign(Object.assign({}, opts), { editing: true }));
|
|
23176
23238
|
}
|
|
23177
23239
|
else {
|
|
23178
23240
|
const row = yield this.dataSource.getRow(id);
|
|
@@ -23925,15 +23987,19 @@ class AppTable {
|
|
|
23925
23987
|
return __awaiter(this, void 0, void 0, function* () {
|
|
23926
23988
|
this.focusFirstColumn = true;
|
|
23927
23989
|
this.focusColumn = (opts === null || opts === void 0 ? void 0 : opts.focusColumn) || this.firstUserColumn;
|
|
23928
|
-
yield this._dataSource.
|
|
23929
|
-
|
|
23990
|
+
const row = yield this._dataSource.createNew(insertAt, Object.assign({ editing: true }, opts));
|
|
23991
|
+
if (!row)
|
|
23992
|
+
return undefined;
|
|
23930
23993
|
// Emit start editing event
|
|
23931
|
-
|
|
23994
|
+
if (row.editing) {
|
|
23995
|
+
this.editedRow = row;
|
|
23996
|
+
this.onStartEditingRow.emit(this.editedRow);
|
|
23997
|
+
}
|
|
23932
23998
|
this.totalRowCount++;
|
|
23933
23999
|
this.visibleRowCount++;
|
|
23934
24000
|
this.markAsDirty({ emitEvent: false /*markForCheck() is called just after*/ });
|
|
23935
24001
|
this.markForCheck();
|
|
23936
|
-
return
|
|
24002
|
+
return row;
|
|
23937
24003
|
});
|
|
23938
24004
|
}
|
|
23939
24005
|
registerCellValueChanges(name, formPath, emitInitialValue) {
|
|
@@ -24108,7 +24174,7 @@ class AppTable {
|
|
|
24108
24174
|
var _a, _b;
|
|
24109
24175
|
return __awaiter(this, void 0, void 0, function* () {
|
|
24110
24176
|
// Mark row as pristine
|
|
24111
|
-
const markRowAsPristine = ((_a = this.dataSource) === null || _a === void 0 ? void 0 : _a.
|
|
24177
|
+
const markRowAsPristine = ((_a = this.dataSource) === null || _a === void 0 ? void 0 : _a.config.restoreOriginalDataOnCancel) === true;
|
|
24112
24178
|
if (markRowAsPristine) {
|
|
24113
24179
|
(_b = row.validator) === null || _b === void 0 ? void 0 : _b.markAsPristine();
|
|
24114
24180
|
// Check if table is now pristine
|
|
@@ -24122,7 +24188,7 @@ class AppTable {
|
|
|
24122
24188
|
return __awaiter(this, void 0, void 0, function* () {
|
|
24123
24189
|
if (!this.dirty)
|
|
24124
24190
|
return; // Already pristine
|
|
24125
|
-
const rows =
|
|
24191
|
+
const rows = this._dataSource.getRows();
|
|
24126
24192
|
const pristine = (rows || []).findIndex(row => { var _a; return (_a = row.validator) === null || _a === void 0 ? void 0 : _a.dirty; }) === -1;
|
|
24127
24193
|
if (pristine)
|
|
24128
24194
|
this.markAsPristine(opts);
|
|
@@ -26000,7 +26066,7 @@ AppInMemoryTable.ctorParameters = () => [
|
|
|
26000
26066
|
{ type: Function },
|
|
26001
26067
|
{ type: InMemoryEntitiesService },
|
|
26002
26068
|
{ type: ValidatorService },
|
|
26003
|
-
{ type:
|
|
26069
|
+
{ type: undefined },
|
|
26004
26070
|
{ type: undefined }
|
|
26005
26071
|
];
|
|
26006
26072
|
AppInMemoryTable.propDecorators = {
|
|
@@ -26017,7 +26083,7 @@ const SocialErrorCodes = {
|
|
|
26017
26083
|
SUBSCRIBE_JOB_PROGRESSION_ERROR: 50010
|
|
26018
26084
|
};
|
|
26019
26085
|
|
|
26020
|
-
const moment$
|
|
26086
|
+
const moment$4 = momentImported;
|
|
26021
26087
|
const USER_EVENT_SERVICE = new InjectionToken('UserEventService');
|
|
26022
26088
|
class AbstractUserEventService extends BaseGraphqlService {
|
|
26023
26089
|
constructor(graphql, accountService, network, translate, options) {
|
|
@@ -26383,7 +26449,7 @@ class AbstractUserEventService extends BaseGraphqlService {
|
|
|
26383
26449
|
}
|
|
26384
26450
|
resetCount() {
|
|
26385
26451
|
this._countSubject.next(undefined);
|
|
26386
|
-
this.resetCountDate = moment$
|
|
26452
|
+
this.resetCountDate = moment$4();
|
|
26387
26453
|
// restart listening count changes
|
|
26388
26454
|
this.startListenCountChanges();
|
|
26389
26455
|
}
|
|
@@ -26443,7 +26509,7 @@ class AbstractUserEventService extends BaseGraphqlService {
|
|
|
26443
26509
|
if (!userEvents.length)
|
|
26444
26510
|
return;
|
|
26445
26511
|
// set read date
|
|
26446
|
-
userEvents.forEach(userEvent => userEvent.readDate = moment$
|
|
26512
|
+
userEvents.forEach(userEvent => userEvent.readDate = moment$4());
|
|
26447
26513
|
// split local/remote entities
|
|
26448
26514
|
const localEntities = userEvents.filter(userEvent => !userEvent.id || userEvent.id < 0);
|
|
26449
26515
|
const remoteEntities = userEvents.filter(userEvent => userEvent.id > 0);
|
|
@@ -27418,7 +27484,7 @@ class MessageService extends BaseGraphqlService {
|
|
|
27418
27484
|
});
|
|
27419
27485
|
}
|
|
27420
27486
|
}
|
|
27421
|
-
MessageService.ɵprov =
|
|
27487
|
+
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
27488
|
MessageService.decorators = [
|
|
27423
27489
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
27424
27490
|
];
|
|
@@ -27627,7 +27693,7 @@ class PersonService extends BaseEntityService {
|
|
|
27627
27693
|
return target;
|
|
27628
27694
|
}
|
|
27629
27695
|
}
|
|
27630
|
-
PersonService.ɵprov =
|
|
27696
|
+
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
27697
|
PersonService.decorators = [
|
|
27632
27698
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
27633
27699
|
];
|
|
@@ -27658,7 +27724,7 @@ class PersonValidatorService {
|
|
|
27658
27724
|
return this.formBuilder.group(formConfig);
|
|
27659
27725
|
}
|
|
27660
27726
|
}
|
|
27661
|
-
PersonValidatorService.ɵprov =
|
|
27727
|
+
PersonValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function PersonValidatorService_Factory() { return new PersonValidatorService(i0.ɵɵinject(i1$6.FormBuilder), i0.ɵɵinject(AccountValidatorService)); }, token: PersonValidatorService, providedIn: "root" });
|
|
27662
27728
|
PersonValidatorService.decorators = [
|
|
27663
27729
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
27664
27730
|
];
|
|
@@ -27887,17 +27953,17 @@ AdminModule.decorators = [
|
|
|
27887
27953
|
];
|
|
27888
27954
|
AdminModule.ctorParameters = () => [];
|
|
27889
27955
|
|
|
27890
|
-
const ɵ0
|
|
27956
|
+
const ɵ0 = {
|
|
27891
27957
|
profile: 'ADMIN'
|
|
27892
27958
|
};
|
|
27893
|
-
const routes = [
|
|
27959
|
+
const routes$6 = [
|
|
27894
27960
|
{
|
|
27895
27961
|
path: 'users',
|
|
27896
27962
|
pathMatch: 'full',
|
|
27897
27963
|
component: UsersPage,
|
|
27898
27964
|
canActivate: [AuthGuardService],
|
|
27899
27965
|
canDeactivate: [ComponentDirtyGuard],
|
|
27900
|
-
data: ɵ0
|
|
27966
|
+
data: ɵ0
|
|
27901
27967
|
}
|
|
27902
27968
|
];
|
|
27903
27969
|
class AdminRoutingModule {
|
|
@@ -27907,27 +27973,27 @@ AdminRoutingModule.decorators = [
|
|
|
27907
27973
|
imports: [
|
|
27908
27974
|
SharedRoutingModule,
|
|
27909
27975
|
AdminModule,
|
|
27910
|
-
RouterModule.forChild(routes)
|
|
27976
|
+
RouterModule.forChild(routes$6)
|
|
27911
27977
|
],
|
|
27912
27978
|
exports: [RouterModule]
|
|
27913
27979
|
},] }
|
|
27914
27980
|
];
|
|
27915
27981
|
|
|
27916
|
-
class EntityTestClass {
|
|
27982
|
+
class EntityTestClass$1 {
|
|
27917
27983
|
}
|
|
27918
|
-
const FAKE_ENTITIES = [
|
|
27984
|
+
const FAKE_ENTITIES$1 = [
|
|
27919
27985
|
{ id: 1, label: 'AAA', name: 'Item A', description: 'Very long description A', comments: 'Very very long comments... again for A' },
|
|
27920
27986
|
{ id: 2, label: 'BBB', name: 'Item B', description: 'Very long description B', comments: 'Very very long comments... again for B' },
|
|
27921
27987
|
{ id: 3, label: 'CCC', name: 'Item C', description: 'Very long description C', comments: 'Very very long comments... again for C' }
|
|
27922
27988
|
];
|
|
27923
|
-
function deepCopy(values, size) {
|
|
27989
|
+
function deepCopy$1(values, size) {
|
|
27924
27990
|
if (isNil(size)) {
|
|
27925
|
-
return (values || FAKE_ENTITIES).map(entity => Object.assign({}, entity));
|
|
27991
|
+
return (values || FAKE_ENTITIES$1).map(entity => Object.assign({}, entity));
|
|
27926
27992
|
}
|
|
27927
27993
|
let result = [];
|
|
27928
27994
|
let i = 1;
|
|
27929
27995
|
while (result.length < size) {
|
|
27930
|
-
result = result.concat((values || FAKE_ENTITIES).map(entity => {
|
|
27996
|
+
result = result.concat((values || FAKE_ENTITIES$1).map(entity => {
|
|
27931
27997
|
const name = entity.name + ' #' + i;
|
|
27932
27998
|
return Object.assign(Object.assign({}, entity), { id: i++, name });
|
|
27933
27999
|
}));
|
|
@@ -27937,7 +28003,7 @@ function deepCopy(values, size) {
|
|
|
27937
28003
|
class AutocompleteTestPage {
|
|
27938
28004
|
constructor(formBuilder) {
|
|
27939
28005
|
this.formBuilder = formBuilder;
|
|
27940
|
-
this._items = deepCopy(FAKE_ENTITIES, 100);
|
|
28006
|
+
this._items = deepCopy$1(FAKE_ENTITIES$1, 100);
|
|
27941
28007
|
this._$items = new BehaviorSubject(undefined);
|
|
27942
28008
|
this.autocompleteFields = new MatAutocompleteConfigHolder();
|
|
27943
28009
|
this.memoryHide = false;
|
|
@@ -27982,7 +28048,7 @@ class AutocompleteTestPage {
|
|
|
27982
28048
|
});
|
|
27983
28049
|
// From items
|
|
27984
28050
|
this.autocompleteFields.add('entity-items-large', {
|
|
27985
|
-
items: FAKE_ENTITIES.slice(),
|
|
28051
|
+
items: FAKE_ENTITIES$1.slice(),
|
|
27986
28052
|
attributes: ['label', 'name', 'description', 'comments'],
|
|
27987
28053
|
displayWith: this.entityToString
|
|
27988
28054
|
});
|
|
@@ -28014,14 +28080,14 @@ class AutocompleteTestPage {
|
|
|
28014
28080
|
loadData() {
|
|
28015
28081
|
return __awaiter(this, void 0, void 0, function* () {
|
|
28016
28082
|
const data = {
|
|
28017
|
-
entity: deepCopy(FAKE_ENTITIES)[0],
|
|
28018
|
-
farEntity: deepCopy(FAKE_ENTITIES)[2],
|
|
28083
|
+
entity: deepCopy$1(FAKE_ENTITIES$1)[0],
|
|
28084
|
+
farEntity: deepCopy$1(FAKE_ENTITIES$1)[2],
|
|
28019
28085
|
// This item is NOT in the items list => i should be displayed anyway
|
|
28020
28086
|
missingEntity: {
|
|
28021
28087
|
id: -1, label: '??', name: 'Missing item'
|
|
28022
28088
|
},
|
|
28023
|
-
disableEntity: deepCopy(FAKE_ENTITIES)[2],
|
|
28024
|
-
entities: deepCopy(FAKE_ENTITIES)
|
|
28089
|
+
disableEntity: deepCopy$1(FAKE_ENTITIES$1)[2],
|
|
28090
|
+
entities: deepCopy$1(FAKE_ENTITIES$1)
|
|
28025
28091
|
};
|
|
28026
28092
|
this.form.setValue(data);
|
|
28027
28093
|
// Load observables
|
|
@@ -28171,13 +28237,13 @@ LatLongTestPage.ctorParameters = () => [
|
|
|
28171
28237
|
{ type: FormBuilder }
|
|
28172
28238
|
];
|
|
28173
28239
|
|
|
28174
|
-
const moment$
|
|
28240
|
+
const moment$3 = momentImported;
|
|
28175
28241
|
class SwipeTestPage {
|
|
28176
28242
|
constructor(formBuilder, dateFormatPipe) {
|
|
28177
28243
|
this.formBuilder = formBuilder;
|
|
28178
28244
|
this.dateFormatPipe = dateFormatPipe;
|
|
28179
28245
|
this.$dates = new BehaviorSubject(undefined);
|
|
28180
|
-
this._today = moment$
|
|
28246
|
+
this._today = moment$3().startOf('day');
|
|
28181
28247
|
this.form = formBuilder.group({
|
|
28182
28248
|
empty: [null, Validators.required],
|
|
28183
28249
|
date: [null, Validators.compose([Validators.required, SharedValidators.validDate])],
|
|
@@ -28190,7 +28256,7 @@ class SwipeTestPage {
|
|
|
28190
28256
|
ngOnInit() {
|
|
28191
28257
|
const dates = [];
|
|
28192
28258
|
for (let d = 0; d < 7; d++) {
|
|
28193
|
-
dates[d] = moment$
|
|
28259
|
+
dates[d] = moment$3(this._today).add(d - 3, 'day');
|
|
28194
28260
|
}
|
|
28195
28261
|
this.$dates.next(dates);
|
|
28196
28262
|
this.loadData();
|
|
@@ -28231,7 +28297,7 @@ SwipeTestPage.ctorParameters = () => [
|
|
|
28231
28297
|
{ type: DateFormatPipe }
|
|
28232
28298
|
];
|
|
28233
28299
|
|
|
28234
|
-
const moment$
|
|
28300
|
+
const moment$2 = momentImported;
|
|
28235
28301
|
class DateTimeTestPage {
|
|
28236
28302
|
constructor(platform, formBuilder, cd) {
|
|
28237
28303
|
this.platform = platform;
|
|
@@ -28265,7 +28331,7 @@ class DateTimeTestPage {
|
|
|
28265
28331
|
// Load the form with data
|
|
28266
28332
|
loadData() {
|
|
28267
28333
|
return __awaiter(this, void 0, void 0, function* () {
|
|
28268
|
-
const now = moment$
|
|
28334
|
+
const now = moment$2();
|
|
28269
28335
|
const data = {
|
|
28270
28336
|
empty: null,
|
|
28271
28337
|
emptyRequired: null,
|
|
@@ -28331,9 +28397,9 @@ DateTimeTestPage.ctorParameters = () => [
|
|
|
28331
28397
|
{ type: ChangeDetectorRef }
|
|
28332
28398
|
];
|
|
28333
28399
|
|
|
28334
|
-
class EntityTestClass
|
|
28400
|
+
class EntityTestClass {
|
|
28335
28401
|
}
|
|
28336
|
-
const FAKE_ENTITIES
|
|
28402
|
+
const FAKE_ENTITIES = [
|
|
28337
28403
|
{ id: 1, label: 'AAA', name: 'Item A' },
|
|
28338
28404
|
{ id: 2, label: 'BBB', name: 'Item B' },
|
|
28339
28405
|
{ id: 3, label: 'CCC', name: 'Item C' },
|
|
@@ -28342,14 +28408,14 @@ const FAKE_ENTITIES$1 = [
|
|
|
28342
28408
|
{ id: 6, label: 'FFF', name: 'Item F' },
|
|
28343
28409
|
{ id: 7, label: 'GGG', name: 'Item G' }
|
|
28344
28410
|
];
|
|
28345
|
-
function deepCopy
|
|
28411
|
+
function deepCopy(values, size) {
|
|
28346
28412
|
if (isNil(size)) {
|
|
28347
|
-
return (values || FAKE_ENTITIES
|
|
28413
|
+
return (values || FAKE_ENTITIES).map(entity => Object.assign({}, entity));
|
|
28348
28414
|
}
|
|
28349
28415
|
let result = [];
|
|
28350
28416
|
let i = 1;
|
|
28351
28417
|
while (result.length < size) {
|
|
28352
|
-
result = result.concat((values || FAKE_ENTITIES
|
|
28418
|
+
result = result.concat((values || FAKE_ENTITIES).map(entity => {
|
|
28353
28419
|
const name = entity.name + ' #' + i;
|
|
28354
28420
|
return Object.assign(Object.assign({}, entity), { id: i++, name });
|
|
28355
28421
|
}));
|
|
@@ -28359,7 +28425,7 @@ function deepCopy$1(values, size) {
|
|
|
28359
28425
|
class ChipsTestPage {
|
|
28360
28426
|
constructor(formBuilder) {
|
|
28361
28427
|
this.formBuilder = formBuilder;
|
|
28362
|
-
this._items = deepCopy
|
|
28428
|
+
this._items = deepCopy(FAKE_ENTITIES, 100);
|
|
28363
28429
|
this._$items = new BehaviorSubject(undefined);
|
|
28364
28430
|
this.autocompleteFields = new MatAutocompleteConfigHolder();
|
|
28365
28431
|
this.appearance = 'legacy';
|
|
@@ -28399,7 +28465,7 @@ class ChipsTestPage {
|
|
|
28399
28465
|
// Load the form with data
|
|
28400
28466
|
loadData() {
|
|
28401
28467
|
return __awaiter(this, void 0, void 0, function* () {
|
|
28402
|
-
const items = deepCopy
|
|
28468
|
+
const items = deepCopy(FAKE_ENTITIES);
|
|
28403
28469
|
const data = {
|
|
28404
28470
|
entity: items.slice(0, 1),
|
|
28405
28471
|
entityInitial: items.slice(1, 2),
|
|
@@ -28515,7 +28581,7 @@ NumpadTestPage.ctorParameters = () => [
|
|
|
28515
28581
|
{ type: FormBuilder }
|
|
28516
28582
|
];
|
|
28517
28583
|
|
|
28518
|
-
const moment$
|
|
28584
|
+
const moment$1 = momentImported;
|
|
28519
28585
|
class DateTestPage {
|
|
28520
28586
|
constructor(formBuilder, cd) {
|
|
28521
28587
|
this.formBuilder = formBuilder;
|
|
@@ -28548,7 +28614,7 @@ class DateTestPage {
|
|
|
28548
28614
|
// Load the form with data
|
|
28549
28615
|
loadData() {
|
|
28550
28616
|
return __awaiter(this, void 0, void 0, function* () {
|
|
28551
|
-
const now = moment$
|
|
28617
|
+
const now = moment$1();
|
|
28552
28618
|
const nowAtMahe = now.clone().tz(this.timezone).startOf('day');
|
|
28553
28619
|
const data = {
|
|
28554
28620
|
empty: null,
|
|
@@ -28626,7 +28692,7 @@ const SHARED_MATERIAL_TESTING_PAGES = [
|
|
|
28626
28692
|
{ label: 'Shared directives', divider: true },
|
|
28627
28693
|
{ label: 'Badge icon directive', page: '/testing/shared/badge-icon' }
|
|
28628
28694
|
];
|
|
28629
|
-
const routes$
|
|
28695
|
+
const routes$5 = [
|
|
28630
28696
|
{
|
|
28631
28697
|
path: '',
|
|
28632
28698
|
pathMatch: 'full',
|
|
@@ -28683,7 +28749,7 @@ MaterialTestingModule.decorators = [
|
|
|
28683
28749
|
ReactiveFormsModule,
|
|
28684
28750
|
SharedMaterialModule,
|
|
28685
28751
|
TranslateModule.forChild(),
|
|
28686
|
-
RouterModule.forChild(routes$
|
|
28752
|
+
RouterModule.forChild(routes$5)
|
|
28687
28753
|
],
|
|
28688
28754
|
declarations: [
|
|
28689
28755
|
DateTimeTestPage,
|
|
@@ -28744,7 +28810,7 @@ ToastTestingPage.ctorParameters = () => [
|
|
|
28744
28810
|
{ type: TranslateService }
|
|
28745
28811
|
];
|
|
28746
28812
|
|
|
28747
|
-
const routes$
|
|
28813
|
+
const routes$4 = [
|
|
28748
28814
|
{
|
|
28749
28815
|
path: 'toast',
|
|
28750
28816
|
pathMatch: 'full',
|
|
@@ -28759,7 +28825,7 @@ ToastTestingModule.decorators = [
|
|
|
28759
28825
|
CommonModule,
|
|
28760
28826
|
IonicModule,
|
|
28761
28827
|
TranslateModule.forChild(),
|
|
28762
|
-
RouterModule.forChild(routes$
|
|
28828
|
+
RouterModule.forChild(routes$4)
|
|
28763
28829
|
],
|
|
28764
28830
|
declarations: [
|
|
28765
28831
|
ToastTestingPage
|
|
@@ -29046,33 +29112,28 @@ class TableTestPage extends AppTable {
|
|
|
29046
29112
|
console.debug('[test-table] Updating data...');
|
|
29047
29113
|
this.markAsLoading();
|
|
29048
29114
|
if (isNil(this.data)) {
|
|
29049
|
-
this.data = this.generateData(0,
|
|
29115
|
+
this.data = this.generateData(0, TableTestPage.maxRowCount);
|
|
29050
29116
|
}
|
|
29051
29117
|
this.dataService.setValue(this.data, { emitEvent: false });
|
|
29052
29118
|
this.onRefresh.emit();
|
|
29053
|
-
if (this.infiniteScroll) {
|
|
29054
|
-
this.infiniteScroll.disabled = !this.infiniteScroll || this.data.length >= TableTestPage.maxRowCount;
|
|
29055
|
-
}
|
|
29056
29119
|
}
|
|
29057
|
-
|
|
29058
|
-
|
|
29059
|
-
|
|
29060
|
-
|
|
29061
|
-
|
|
29062
|
-
|
|
29063
|
-
|
|
29064
|
-
|
|
29065
|
-
|
|
29066
|
-
|
|
29067
|
-
this.doRefresh(event);
|
|
29068
|
-
}, 500);
|
|
29120
|
+
fetchMore(event) {
|
|
29121
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
29122
|
+
console.debug('[table-test] Loading more...', event);
|
|
29123
|
+
const fetched = yield this._dataSource.fetchMore();
|
|
29124
|
+
// When target wait for a complete (e.g. IonRefresher)
|
|
29125
|
+
if (fetched && (event === null || event === void 0 ? void 0 : event.target) && event.target.complete) {
|
|
29126
|
+
yield this.waitIdle();
|
|
29127
|
+
event.target.complete();
|
|
29128
|
+
}
|
|
29129
|
+
});
|
|
29069
29130
|
}
|
|
29070
|
-
save() {
|
|
29131
|
+
save(opts) {
|
|
29071
29132
|
const _super = Object.create(null, {
|
|
29072
29133
|
save: { get: () => super.save }
|
|
29073
29134
|
});
|
|
29074
29135
|
return __awaiter(this, void 0, void 0, function* () {
|
|
29075
|
-
const saved = yield _super.save.call(this);
|
|
29136
|
+
const saved = yield _super.save.call(this, opts);
|
|
29076
29137
|
if (saved) {
|
|
29077
29138
|
// Update source data
|
|
29078
29139
|
this.data = this.dataService.value;
|
|
@@ -29138,7 +29199,7 @@ TableTestPage.maxRowCount = 100;
|
|
|
29138
29199
|
TableTestPage.decorators = [
|
|
29139
29200
|
{ type: Component, args: [{
|
|
29140
29201
|
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",
|
|
29202
|
+
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
29203
|
providers: [
|
|
29143
29204
|
{
|
|
29144
29205
|
provide: AppValidatorService,
|
|
@@ -29218,7 +29279,7 @@ TextPopoverTestingPage.ctorParameters = () => [
|
|
|
29218
29279
|
{ type: PopoverController }
|
|
29219
29280
|
];
|
|
29220
29281
|
|
|
29221
|
-
const routes$
|
|
29282
|
+
const routes$2 = [
|
|
29222
29283
|
{
|
|
29223
29284
|
path: 'text-popover',
|
|
29224
29285
|
pathMatch: 'full',
|
|
@@ -29233,7 +29294,7 @@ TextPopoverTestingModule.decorators = [
|
|
|
29233
29294
|
CommonModule,
|
|
29234
29295
|
IonicModule,
|
|
29235
29296
|
TranslateModule.forChild(),
|
|
29236
|
-
RouterModule.forChild(routes$
|
|
29297
|
+
RouterModule.forChild(routes$2)
|
|
29237
29298
|
],
|
|
29238
29299
|
declarations: [
|
|
29239
29300
|
TextPopoverTestingPage
|
|
@@ -29250,7 +29311,7 @@ const CORE_TESTING_PAGES = [
|
|
|
29250
29311
|
{ label: 'Table', page: '/testing/core/table' },
|
|
29251
29312
|
{ label: 'Text popover', page: '/testing/core/text-popover' }
|
|
29252
29313
|
];
|
|
29253
|
-
const routes$
|
|
29314
|
+
const routes$1 = [
|
|
29254
29315
|
{
|
|
29255
29316
|
path: '',
|
|
29256
29317
|
pathMatch: 'full',
|
|
@@ -29274,7 +29335,7 @@ CoreTestingModule.decorators = [
|
|
|
29274
29335
|
imports: [
|
|
29275
29336
|
CommonModule,
|
|
29276
29337
|
TranslateModule.forChild(),
|
|
29277
|
-
RouterModule.forChild(routes$
|
|
29338
|
+
RouterModule.forChild(routes$1),
|
|
29278
29339
|
// Sub modules
|
|
29279
29340
|
TableTestingModule,
|
|
29280
29341
|
TextPopoverTestingModule
|
|
@@ -29577,7 +29638,7 @@ UserEventTestService.ctorParameters = () => [
|
|
|
29577
29638
|
{ type: Environment, decorators: [{ type: Optional }, { type: Inject, args: [ENVIRONMENT,] }] }
|
|
29578
29639
|
];
|
|
29579
29640
|
|
|
29580
|
-
const moment
|
|
29641
|
+
const moment = momentImported;
|
|
29581
29642
|
class UserEventTestingPage {
|
|
29582
29643
|
constructor(userEventService, router, alertController, translateService) {
|
|
29583
29644
|
this.userEventService = userEventService;
|
|
@@ -29638,7 +29699,7 @@ class UserEventTestingPage {
|
|
|
29638
29699
|
type: 'message',
|
|
29639
29700
|
level: 'INFO',
|
|
29640
29701
|
message: 'message test message test message test message test message test message test message test message test',
|
|
29641
|
-
creationDate: moment
|
|
29702
|
+
creationDate: moment(),
|
|
29642
29703
|
}));
|
|
29643
29704
|
}
|
|
29644
29705
|
addError() {
|
|
@@ -29648,7 +29709,7 @@ class UserEventTestingPage {
|
|
|
29648
29709
|
type: 'upload',
|
|
29649
29710
|
level: 'ERROR',
|
|
29650
29711
|
message: 'message error',
|
|
29651
|
-
creationDate: moment
|
|
29712
|
+
creationDate: moment(),
|
|
29652
29713
|
}));
|
|
29653
29714
|
}
|
|
29654
29715
|
addWarning() {
|
|
@@ -29658,7 +29719,7 @@ class UserEventTestingPage {
|
|
|
29658
29719
|
type: 'download',
|
|
29659
29720
|
level: 'WARNING',
|
|
29660
29721
|
message: 'message warning',
|
|
29661
|
-
creationDate: moment
|
|
29722
|
+
creationDate: moment(),
|
|
29662
29723
|
}));
|
|
29663
29724
|
}
|
|
29664
29725
|
addDebug() {
|
|
@@ -29668,7 +29729,7 @@ class UserEventTestingPage {
|
|
|
29668
29729
|
type: 'debug',
|
|
29669
29730
|
level: 'DEBUG',
|
|
29670
29731
|
message: 'message DEBUG',
|
|
29671
|
-
creationDate: moment
|
|
29732
|
+
creationDate: moment(),
|
|
29672
29733
|
}));
|
|
29673
29734
|
}
|
|
29674
29735
|
addNotificationWithLink() {
|
|
@@ -29678,7 +29739,7 @@ class UserEventTestingPage {
|
|
|
29678
29739
|
type: 'message',
|
|
29679
29740
|
level: 'INFO',
|
|
29680
29741
|
message: 'message with link',
|
|
29681
|
-
creationDate: moment
|
|
29742
|
+
creationDate: moment(),
|
|
29682
29743
|
actions: [{
|
|
29683
29744
|
name: 'click here',
|
|
29684
29745
|
iconRef: {
|
|
@@ -29695,7 +29756,7 @@ class UserEventTestingPage {
|
|
|
29695
29756
|
type: 'message',
|
|
29696
29757
|
level: 'INFO',
|
|
29697
29758
|
message: 'message with action',
|
|
29698
|
-
creationDate: moment
|
|
29759
|
+
creationDate: moment(),
|
|
29699
29760
|
actions: [
|
|
29700
29761
|
{
|
|
29701
29762
|
name: 'click here',
|
|
@@ -29767,7 +29828,7 @@ class UserEventTestingPage {
|
|
|
29767
29828
|
type: 'message',
|
|
29768
29829
|
level: 'INFO',
|
|
29769
29830
|
message: 'message with action',
|
|
29770
|
-
creationDate: moment
|
|
29831
|
+
creationDate: moment(),
|
|
29771
29832
|
actions: [
|
|
29772
29833
|
{
|
|
29773
29834
|
default: true,
|
|
@@ -29821,7 +29882,7 @@ const SOCIAL_TESTING_PAGES = [
|
|
|
29821
29882
|
{ label: 'User event', page: '/testing/social/user-event' },
|
|
29822
29883
|
{ label: 'Job progression', page: '/testing/social/job-progression' }
|
|
29823
29884
|
];
|
|
29824
|
-
const routes
|
|
29885
|
+
const routes = [
|
|
29825
29886
|
{
|
|
29826
29887
|
path: 'job-progression',
|
|
29827
29888
|
pathMatch: 'full',
|
|
@@ -29840,7 +29901,7 @@ SocialTestingModule.decorators = [
|
|
|
29840
29901
|
imports: [
|
|
29841
29902
|
CommonModule,
|
|
29842
29903
|
TranslateModule.forChild(),
|
|
29843
|
-
RouterModule.forChild(routes
|
|
29904
|
+
RouterModule.forChild(routes),
|
|
29844
29905
|
JobTestingModule,
|
|
29845
29906
|
UserEventTestingModule
|
|
29846
29907
|
],
|
|
@@ -29853,5 +29914,5 @@ SocialTestingModule.decorators = [
|
|
|
29853
29914
|
* Generated bundle index. Do not edit.
|
|
29854
29915
|
*/
|
|
29855
29916
|
|
|
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,
|
|
29917
|
+
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
29918
|
//# sourceMappingURL=sumaris-net.ngx-components.js.map
|