@sumaris-net/ngx-components 0.23.2 → 0.24.3
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/{ngx-sumaris-components.umd.js → sumaris-net.ngx-components.umd.js} +347 -296
- package/bundles/sumaris-net.ngx-components.umd.js.map +1 -0
- package/bundles/sumaris-net.ngx-components.umd.min.js +25 -0
- package/bundles/sumaris-net.ngx-components.umd.min.js.map +1 -0
- package/esm2015/src/app/admin/services/filter/person.filter.js +4 -2
- package/esm2015/src/app/admin/services/person.service.js +4 -3
- package/esm2015/src/app/core/graphql/graphql.service.js +3 -2
- package/esm2015/src/app/core/graphql/graphql.utils.js +1 -1
- package/esm2015/src/app/core/install/install-upgrade-card.component.js +20 -14
- package/esm2015/src/app/core/services/network.service.js +3 -3
- package/esm2015/src/app/core/services/platform.service.js +28 -8
- package/esm2015/src/app/shared/functions.js +6 -7
- package/esm2015/src/app/shared/material/autocomplete/testing/autocomplete.test.js +2 -2
- package/esm2015/sumaris-net.ngx-components.js +13 -0
- package/fesm2015/{ngx-sumaris-components.js → sumaris-net.ngx-components.js} +329 -285
- package/fesm2015/sumaris-net.ngx-components.js.map +1 -0
- package/package.json +13 -9
- package/src/app/admin/services/filter/person.filter.d.ts +1 -0
- package/src/app/admin/services/person.service.d.ts +1 -1
- package/src/app/core/graphql/graphql.utils.d.ts +2 -1
- package/src/app/core/install/install-upgrade-card.component.d.ts +8 -5
- package/src/app/core/services/platform.service.d.ts +10 -1
- package/src/app/shared/functions.d.ts +1 -1
- package/{ngx-sumaris-components.d.ts → sumaris-net.ngx-components.d.ts} +0 -0
- package/sumaris-net.ngx-components.metadata.json +1 -0
- package/bundles/ngx-sumaris-components.umd.js.map +0 -1
- package/bundles/ngx-sumaris-components.umd.min.js +0 -25
- package/bundles/ngx-sumaris-components.umd.min.js.map +0 -1
- package/esm2015/ngx-sumaris-components.js +0 -13
- package/fesm2015/ngx-sumaris-components.js.map +0 -1
- package/ngx-sumaris-components.metadata.json +0 -1
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { InjectionToken, EventEmitter, forwardRef, Component, ChangeDetectionStrategy, ChangeDetectorRef, Optional, Input, HostBinding, Output, ViewChild, Pipe, Injectable, Directive, NgModule, ElementRef, ViewChildren, HostListener, ComponentFactoryResolver, ApplicationRef, Injector, Inject, Renderer2 } 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, MatTable, MatColumnDef } from '@angular/material/table';
|
|
9
12
|
import { MatSortModule, MatSort } from '@angular/material/sort';
|
|
@@ -27,16 +30,21 @@ 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 { NG_VALUE_ACCESSOR, FormGroupDirective, ReactiveFormsModule, AbstractControl, Validators, FormBuilder, FormControl, FormGroup, FormArray } from '@angular/forms';
|
|
34
39
|
import { timer, merge, fromEvent, Subscription, BehaviorSubject, Subject, isObservable, of, noop as noop$8, Observable, defer, concat, combineLatest, EMPTY } from 'rxjs';
|
|
35
40
|
import { filter, first, map, takeUntil, startWith, debounceTime, takeWhile, switchMap, tap, distinctUntilChanged, mergeMap, catchError, throttleTime } from 'rxjs/operators';
|
|
41
|
+
import * as i1$1 from '@ngx-translate/core';
|
|
36
42
|
import { TranslateService, TranslateModule } from '@ngx-translate/core';
|
|
43
|
+
import * as i1$4 from '@ionic/angular';
|
|
37
44
|
import { IonicModule, Platform, IonRouterOutlet, ModalController, IonicSafeString, createAnimation, ToastController, AlertController, IonicRouteStrategy, NavParams, MenuController, IonContent } from '@ionic/angular';
|
|
38
45
|
import * as momentImported from 'moment';
|
|
39
46
|
import { isMoment } from 'moment';
|
|
47
|
+
import * as i1 from '@angular/material-moment-adapter';
|
|
40
48
|
import { MomentDateAdapter, MatMomentDateModule } from '@angular/material-moment-adapter';
|
|
41
49
|
import { Keyboard } from '@ionic-native/keyboard/ngx';
|
|
42
50
|
import { TextMaskModule } from 'angular2-text-mask';
|
|
@@ -46,32 +54,38 @@ import { trigger, state, style, transition, animate } from '@angular/animations'
|
|
|
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 { Router, RouterModule, RouteReuseStrategy, ActivatedRoute } 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, HttpClient, HttpHeaders, HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';
|
|
52
63
|
import { ColorPickerModule } from 'ngx-color-picker';
|
|
53
|
-
import { NativeAudio
|
|
54
|
-
import { Vibration
|
|
64
|
+
import { NativeAudio } from '@ionic-native/native-audio/ngx';
|
|
65
|
+
import { Vibration } from '@ionic-native/vibration/ngx';
|
|
55
66
|
import { AudioManagement } from '@ionic-native/audio-management/ngx';
|
|
56
|
-
import
|
|
57
|
-
import
|
|
58
|
-
import
|
|
67
|
+
import * as i2 from '@ionic-native/native-audio/ngx/index';
|
|
68
|
+
import * as i3 from '@ionic-native/vibration/ngx/index';
|
|
69
|
+
import * as i4 from '@ionic-native/audio-management/ngx/index';
|
|
59
70
|
import * as uuidv4Imported from 'uuid/v4';
|
|
60
71
|
import { DragDropModule } from '@angular/cdk/drag-drop';
|
|
61
72
|
import { MarkdownModule } from 'ngx-markdown';
|
|
62
73
|
import { sign, box, hash, verify } from 'tweetnacl';
|
|
74
|
+
import * as i3$1 from '@ionic/storage';
|
|
63
75
|
import { Storage, IonicStorageModule } from '@ionic/storage';
|
|
64
76
|
import 'zone.js/dist/zone-error';
|
|
65
|
-
import { SplashScreen
|
|
66
|
-
import { Connection, Network
|
|
67
|
-
import { CacheService
|
|
68
|
-
import
|
|
69
|
-
import
|
|
70
|
-
import
|
|
71
|
-
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';
|
|
72
85
|
import { Platform as Platform$1 } from '@angular/cdk/platform';
|
|
73
|
-
import { InAppBrowser
|
|
86
|
+
import { InAppBrowser } from '@ionic-native/in-app-browser/ngx';
|
|
74
87
|
import { ApolloLink, NetworkStatus, InMemoryCache, ApolloClient, gql } from '@apollo/client/core';
|
|
88
|
+
import * as i2$3 from 'apollo-angular';
|
|
75
89
|
import { Apollo } from 'apollo-angular';
|
|
76
90
|
import { WebSocketLink } from '@apollo/client/link/ws';
|
|
77
91
|
import { getMainDefinition } from '@apollo/client/utilities';
|
|
@@ -79,11 +93,14 @@ import { RetryLink } from '@apollo/client/link/retry';
|
|
|
79
93
|
import QueueLink from 'apollo-link-queue';
|
|
80
94
|
import SerializingLink from 'apollo-link-serialize';
|
|
81
95
|
import loggerLink from 'apollo-link-logger';
|
|
96
|
+
import * as i3$2 from 'apollo-angular/http';
|
|
82
97
|
import { HttpLink } from 'apollo-angular/http';
|
|
83
98
|
import { IonicStorageWrapper, persistCache } from 'apollo3-cache-persist';
|
|
84
|
-
import {
|
|
85
|
-
import
|
|
86
|
-
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';
|
|
87
104
|
import { ValidatorService, TableDataSource } from '@e-is/ngx-material-table';
|
|
88
105
|
import { SelectionModel } from '@angular/cdk/collections';
|
|
89
106
|
import { NgxJdenticonModule } from 'ngx-jdenticon';
|
|
@@ -320,16 +337,15 @@ function propertiesPathComparator(keys, defaultValues) {
|
|
|
320
337
|
// Stop if not equals, otherwise continue with the next key
|
|
321
338
|
.find(res => res !== 0) || 0;
|
|
322
339
|
}
|
|
323
|
-
function sort(array, attribute) {
|
|
340
|
+
function sort(array, attribute, opts) {
|
|
324
341
|
if (isEmptyArray(array))
|
|
325
342
|
return array;
|
|
343
|
+
const compareFn = opts
|
|
344
|
+
? new Intl.Collator(undefined, opts).compare
|
|
345
|
+
: (v1, v2) => v1 === v2 ? 0 : v1 > v2 ? 1 : -1;
|
|
326
346
|
return array
|
|
327
347
|
.slice() // copy
|
|
328
|
-
.sort((a, b) =>
|
|
329
|
-
const valueA = a[attribute];
|
|
330
|
-
const valueB = b[attribute];
|
|
331
|
-
return valueA === valueB ? 0 : (valueA > valueB ? 1 : -1);
|
|
332
|
-
});
|
|
348
|
+
.sort((a, b) => compareFn(a[attribute], b[attribute]));
|
|
333
349
|
}
|
|
334
350
|
const INTEGER_REGEXP = /^[-]?\d+$/;
|
|
335
351
|
function isInt(value) {
|
|
@@ -869,19 +885,19 @@ class MatAutocompleteConfigHolder {
|
|
|
869
885
|
return this.fields[fieldName] || this.add(fieldName);
|
|
870
886
|
}
|
|
871
887
|
}
|
|
872
|
-
const DEFAULT_VALUE_ACCESSOR = {
|
|
888
|
+
const DEFAULT_VALUE_ACCESSOR$6 = {
|
|
873
889
|
provide: NG_VALUE_ACCESSOR,
|
|
874
890
|
useExisting: forwardRef(() => MatAutocompleteField),
|
|
875
891
|
multi: true
|
|
876
892
|
};
|
|
877
|
-
const noop = () => { };
|
|
878
|
-
const ɵ0 = noop;
|
|
893
|
+
const noop$7 = () => { };
|
|
894
|
+
const ɵ0$a = noop$7;
|
|
879
895
|
class MatAutocompleteField {
|
|
880
896
|
constructor(cd, formGroupDir) {
|
|
881
897
|
this.cd = cd;
|
|
882
898
|
this.formGroupDir = formGroupDir;
|
|
883
|
-
this._onChangeCallback = noop;
|
|
884
|
-
this._onTouchedCallback = noop;
|
|
899
|
+
this._onChangeCallback = noop$7;
|
|
900
|
+
this._onTouchedCallback = noop$7;
|
|
885
901
|
this._subscription = new Subscription();
|
|
886
902
|
this._filter$ = new BehaviorSubject(undefined);
|
|
887
903
|
this._reload$ = new Subject();
|
|
@@ -1468,7 +1484,7 @@ MatAutocompleteField.decorators = [
|
|
|
1468
1484
|
// eslint-disable-next-line @angular-eslint/component-selector
|
|
1469
1485
|
selector: 'mat-autocomplete-field',
|
|
1470
1486
|
template: "<ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col class=\"ion-no-padding\">\n <mat-form-field [floatLabel]=\"floatLabel\"\n [class.mat-form-field-disabled]=\"disabled\"\n [title]=\"displayValue\">\n\n <div matPrefix><ng-content select=\"[matPrefix]\"></ng-content></div>\n\n <!-- readonly -->\n <ng-container *ngIf=\"_readonly; else writable\">\n <input matInput hidden type=\"text\"\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\" readonly>\n <ion-text>{{displayWith(value)}}</ion-text>\n </ng-container>\n\n <ng-template #writable>\n\n <!-- Basic select -->\n <mat-select #matSelect\n *ngIf=\"!searchable; else searchableTemplate\"\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\"\n [tabindex]=\"_tabindex\"\n [panelClass]=\"classList\"\n [style.width]=\"panelWidth\"\n (focus)=\"filterMatSelectFocusEvent($event)\"\n (blur)=\"filterMatSelectBlurEvent($event)\"\n (keydown.escape)=\"onKeydownEscape.emit($event)\"\n [compareWith]=\"compareWith\"\n [multiple]=\"multiple\"\n [required]=\"required\">\n <mat-select-trigger>{{ displayWith(value) }}</mat-select-trigger>\n\n <!-- header -->\n <ion-row class=\"mat-autocomplete-header ion-no-padding\">\n <ion-col *ngFor=\"let attr of displayAttributes; index as i; last as isLast\" [size]=\"displayColumnSizes[i]\" >\n <ion-label [innerHTML]=\"displayColumnNames[i] | translate\"></ion-label>\n </ion-col>\n </ion-row>\n\n <!-- None option -->\n <mat-option *ngIf=\"!required\" class=\"ion-no-padding\">\n <ion-row class=\"ion-no-padding\">\n <ion-col class=\"ion-no-padding\">\n <ion-label><i translate>COMMON.EMPTY_OPTION</i></ion-label>\n </ion-col>\n </ion-row>\n </mat-option>\n\n <ng-container *ngIf=\"$filteredItems | async; let items\">\n <!-- No item option -->\n <mat-option *ngIf=\"items | isEmptyArray\" class=\"ion-padding text-italic\" disabled>\n <ion-label>{{noResultMessage | translate}}</ion-label>\n </mat-option>\n\n <!-- options -->\n <mat-option *ngFor=\"let item of items\" [value]=\"item\" class=\"ion-no-padding\">\n <ion-row [classList]=\"item.classList\">\n <ion-col *ngFor=\"let path of displayAttributes; index as i;\"\n [size]=\"displayColumnSizes[i]\">\n <ion-text>{{item | propertyGet: path }}</ion-text>\n </ion-col>\n </ion-row>\n </mat-option>\n\n <!-- More item -->\n <mat-option *ngIf=\"_moreItemsCount\" (ngInit)=\"_initMatSelectInfiniteScroll()\"\n class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n </ng-container>\n </mat-select>\n </ng-template>\n\n <!--\n NOTE :\n - \"selectInputContent($event) || onFocus.emit($event)\" : call onFocus only when to the input is empty (nothing to select)\n -->\n <ng-template #searchableTemplate>\n <input matInput #matInputText type=\"text\"\n [matAutocomplete]=\"autocomplete\"\n [matAutocompletePosition]=\"matAutocompletePosition\"\n [formControl]=\"formControl\"\n [placeholder]=\"placeholder\"\n [appAutofocus]=\"autofocus\"\n [tabindex]=\"_tabindex\"\n [required]=\"required\"\n (click)=\"onClick.emit($event)\"\n (focus)=\"filterInputTextFocusInEvent($event)\"\n (blur)=\"filterInputTextBlurEvent($event)\"\n (keydown.escape)=\"onKeydownEscape.emit($event)\"\n (keyup.enter)=\"onKeyupEnter.emit($event)\"\n (keyup.arrowdown)=\"!autocomplete.opened && onDropButtonClick.emit($event)\">\n\n <!-- autocomplete -->\n <mat-autocomplete #autocomplete=\"matAutocomplete\"\n autoActiveFirstOption\n [displayWith]=\"displayWith\"\n [class]=\"classList\"\n [class.cdk-visually-hidden]=\"!searchable\"\n [panelWidth]=\"panelWidth\">\n\n <ion-row class=\"mat-autocomplete-header ion-no-padding\">\n <ion-col *ngFor=\"let attr of displayAttributes; index as i; last as last\" [size]=\"displayColumnSizes[i]\" >\n <ion-label [innerHTML]=\"displayColumnNames[i] | translate\"></ion-label>\n <ion-text color=\"light\" *ngIf=\"last && itemCount; let count \" class=\"ion-float-end ion-padding-end\"><i>{{'COMMON.RESULT_COUNT'|translate: {count: count} }}</i></ion-text>\n </ion-col>\n </ion-row>\n\n <ng-container *ngIf=\"$filteredItems | async; else loadingTemplate; let items\">\n <!-- No item option -->\n <mat-option *ngIf=\"items | isEmptyArray\" class=\"ion-padding text-italic\" disabled>\n <ion-label>{{noResultMessage | translate}}</ion-label>\n </mat-option>\n\n <mat-option *ngFor=\"let item of items\" [value]=\"item\" class=\"ion-no-padding\" >\n <ion-row [classList]=\"item.classList\">\n <ion-col *ngFor=\"let path of displayAttributes; index as i;\"\n [size]=\"displayColumnSizes[i]\">\n <ion-text [innerHTML]=\"item | propertyGet: path | highlight: { search: formControl.value, withAccent: highlightAccent }\"></ion-text>\n </ion-col>\n </ion-row>\n </mat-option>\n\n <!-- More item -->\n <mat-option *ngIf=\"_moreItemsCount\" (ngInit)=\"_initAutocompleteInfiniteScroll()\"\n class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n </ng-container>\n\n <!-- Loading spinner -->\n <ng-template #loadingTemplate>\n <mat-option *ngIf=\"(matInputText.value | strLength) >= suggestLengthThreshold; else waitMoreCharacterTemplate\"\n class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n </ng-template>\n\n <!-- Need more characters -->\n <ng-template #waitMoreCharacterTemplate>\n <mat-option class=\"ion-padding text-italic\" disabled>\n <ion-label>\n {{'INFO.PLEASE_TYPE_MORE_CHARACTERS'|translate:{minLength: suggestLengthThreshold} }}\n </ion-label>\n </mat-option>\n </ng-template>\n </mat-autocomplete>\n\n </ng-template>\n\n\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"searchable\"\n (click)=\"onDropButtonClick.emit($event)\"\n [hidden]=\"disabled\">\n <mat-icon class=\"large select-arrow\">arrow_drop_down</mat-icon>\n </button>\n <button matSuffix type=\"button\" mat-icon-button tabindex=\"-1\"\n *ngIf=\"enabled && mobile && !searchable && !multiple\"\n [title]=\"'COMMON.BTN_SEARCH'|translate\"\n (click)=\"toggleSearch($event)\">\n <mat-icon>search</mat-icon>\n </button>\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 <ng-content matSuffix select=\"[matSuffix]\"></ng-content>\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 <ng-content select=\"[matError]\"></ng-content>\n\n </mat-form-field>\n </ion-col>\n <ion-col size=\"auto\" class=\"ion-align-self-center\">\n <ng-content select=\"[matAfter]\"></ng-content>\n </ion-col>\n </ion-row>\n\n</ion-grid>\n",
|
|
1471
|
-
providers: [DEFAULT_VALUE_ACCESSOR],
|
|
1487
|
+
providers: [DEFAULT_VALUE_ACCESSOR$6],
|
|
1472
1488
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1473
1489
|
styles: [":host{display:inline-block;position:relative}:host.ion-text-wrap ion-label{white-space:normal!important}button[hidden]{display:none}mat-icon.select-arrow{color:rgba(0,0,0,.47);font-size:150%}.fact-scroll-viewport{height:100%;width:100%}.fact-item{height:54px;display:flex}.fact-item .fact-date{min-width:100px;text-align:center;font-size:24pt}.fact-item .fact-date,.fact-item .fact-text{height:100%;align-items:center;justify-content:center;display:flex}.fact-item .fact-text{border-radius:10px}cdk-virtual-scroll-viewport{border:1px solid #000}cdk-virtual-scroll-viewport li{list-style:none}"]
|
|
1474
1490
|
},] }
|
|
@@ -1545,7 +1561,7 @@ class DateFormatPipe {
|
|
|
1545
1561
|
return this.dateAdapter.format(date, displayFormat);
|
|
1546
1562
|
}
|
|
1547
1563
|
}
|
|
1548
|
-
DateFormatPipe.ɵprov =
|
|
1564
|
+
DateFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DateFormatPipe_Factory() { return new DateFormatPipe(i0.ɵɵinject(i1.MomentDateAdapter), i0.ɵɵinject(i1$1.TranslateService)); }, token: DateFormatPipe, providedIn: "root" });
|
|
1549
1565
|
DateFormatPipe.decorators = [
|
|
1550
1566
|
{ type: Pipe, args: [{
|
|
1551
1567
|
name: 'dateFormat'
|
|
@@ -1557,7 +1573,7 @@ DateFormatPipe.ctorParameters = () => [
|
|
|
1557
1573
|
{ type: TranslateService }
|
|
1558
1574
|
];
|
|
1559
1575
|
|
|
1560
|
-
const moment = momentImported;
|
|
1576
|
+
const moment$6 = momentImported;
|
|
1561
1577
|
class DateDiffDurationPipe {
|
|
1562
1578
|
constructor(dateAdapter, translate) {
|
|
1563
1579
|
this.dateAdapter = dateAdapter;
|
|
@@ -1573,17 +1589,17 @@ class DateDiffDurationPipe {
|
|
|
1573
1589
|
return this.format(startDate, endDate);
|
|
1574
1590
|
}
|
|
1575
1591
|
format(startDate, endDate) {
|
|
1576
|
-
const duration = moment.duration(endDate.diff(startDate));
|
|
1592
|
+
const duration = moment$6.duration(endDate.diff(startDate));
|
|
1577
1593
|
if (duration.asMinutes() < 0)
|
|
1578
1594
|
return '';
|
|
1579
|
-
const timeDuration = moment(0)
|
|
1595
|
+
const timeDuration = moment$6(0)
|
|
1580
1596
|
.hour(duration.hours())
|
|
1581
1597
|
.minute(duration.minutes());
|
|
1582
1598
|
const days = Math.floor(duration.asDays());
|
|
1583
1599
|
return (days > 0 ? days.toString() + (this.dayUnit + ' ') : '') + timeDuration.format('HH:mm');
|
|
1584
1600
|
}
|
|
1585
1601
|
}
|
|
1586
|
-
DateDiffDurationPipe.ɵprov =
|
|
1602
|
+
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" });
|
|
1587
1603
|
DateDiffDurationPipe.decorators = [
|
|
1588
1604
|
{ type: Pipe, args: [{
|
|
1589
1605
|
name: 'dateDiffDuration'
|
|
@@ -1604,7 +1620,7 @@ class DateFromNowPipe {
|
|
|
1604
1620
|
return date ? date.fromNow(args && args.withoutSuffix) : '';
|
|
1605
1621
|
}
|
|
1606
1622
|
}
|
|
1607
|
-
DateFromNowPipe.ɵprov =
|
|
1623
|
+
DateFromNowPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DateFromNowPipe_Factory() { return new DateFromNowPipe(i0.ɵɵinject(i1.MomentDateAdapter)); }, token: DateFromNowPipe, providedIn: "root" });
|
|
1608
1624
|
DateFromNowPipe.decorators = [
|
|
1609
1625
|
{ type: Pipe, args: [{
|
|
1610
1626
|
name: 'dateFromNow'
|
|
@@ -1673,7 +1689,7 @@ function formatToDD(value, opts) {
|
|
|
1673
1689
|
value *= -1;
|
|
1674
1690
|
}
|
|
1675
1691
|
}
|
|
1676
|
-
let degrees = roundFloat(value, opts.maxDecimals).toString();
|
|
1692
|
+
let degrees = roundFloat$1(value, opts.maxDecimals).toString();
|
|
1677
1693
|
// Add sign
|
|
1678
1694
|
let sign = negative ? '-' : '+';
|
|
1679
1695
|
if (opts.placeholderChar) {
|
|
@@ -1724,7 +1740,7 @@ function formatToDDMMSS(value, opts) {
|
|
|
1724
1740
|
}
|
|
1725
1741
|
let degrees = Math.trunc(value);
|
|
1726
1742
|
let minutes = Math.trunc((value - degrees) * 60);
|
|
1727
|
-
let seconds = roundFloat(((value - degrees) * 60 - minutes) * 60, opts.maxDecimals);
|
|
1743
|
+
let seconds = roundFloat$1(((value - degrees) * 60 - minutes) * 60, opts.maxDecimals);
|
|
1728
1744
|
while (seconds >= 60) {
|
|
1729
1745
|
seconds -= 60;
|
|
1730
1746
|
minutes += 1;
|
|
@@ -1792,7 +1808,7 @@ function formatToDDMM(value, opts) {
|
|
|
1792
1808
|
}
|
|
1793
1809
|
}
|
|
1794
1810
|
let degrees = Math.trunc(value);
|
|
1795
|
-
let minutes = roundFloat((value - degrees) * 60, opts.maxDecimals);
|
|
1811
|
+
let minutes = roundFloat$1((value - degrees) * 60, opts.maxDecimals);
|
|
1796
1812
|
while (minutes >= 60) {
|
|
1797
1813
|
minutes -= 60;
|
|
1798
1814
|
degrees += 1;
|
|
@@ -1843,15 +1859,15 @@ function parseLatitudeOrLongitude(input, pattern, maxDecimals, placeholderChar)
|
|
|
1843
1859
|
return NaN;
|
|
1844
1860
|
}
|
|
1845
1861
|
if (pattern === 'DD')
|
|
1846
|
-
return roundFloat(degrees, maxDecimals);
|
|
1862
|
+
return roundFloat$1(degrees, maxDecimals);
|
|
1847
1863
|
const minutes = (pattern === 'DDMMSS' || pattern === 'DDMM') && parts[1] && parseFloat(parts[1].replace(/,/g, '.')) || 0;
|
|
1848
1864
|
const seconds = (pattern === 'DDMMSS') && parts[2] && parseFloat(parts[2].replace(/,/g, '.')) || 0;
|
|
1849
1865
|
const direction = ((pattern === 'DDMMSS') && parts[3]) || ((pattern === 'DDMM') && parts[2]) || undefined;
|
|
1850
1866
|
const sign = (direction && (direction === 's' || direction === 'S' || direction === 'w' || direction === 'W')) ? -1 : 1;
|
|
1851
1867
|
degrees = sign * (degrees + minutes / 60 + seconds / (60 * 60));
|
|
1852
|
-
return roundFloat(degrees, maxDecimals);
|
|
1868
|
+
return roundFloat$1(degrees, maxDecimals);
|
|
1853
1869
|
}
|
|
1854
|
-
function roundFloat(input, maxDecimals) {
|
|
1870
|
+
function roundFloat$1(input, maxDecimals) {
|
|
1855
1871
|
if (maxDecimals > 0) {
|
|
1856
1872
|
const powDecimal = Math.pow(10, maxDecimals);
|
|
1857
1873
|
return Math.trunc(input * powDecimal + 0.5) / powDecimal;
|
|
@@ -1871,7 +1887,7 @@ class LatLongFormatPipe {
|
|
|
1871
1887
|
return ((!args.type || args.type !== 'latitude') ? formatLongitude : formatLatitude)(value, args);
|
|
1872
1888
|
}
|
|
1873
1889
|
}
|
|
1874
|
-
LatLongFormatPipe.ɵprov =
|
|
1890
|
+
LatLongFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function LatLongFormatPipe_Factory() { return new LatLongFormatPipe(); }, token: LatLongFormatPipe, providedIn: "root" });
|
|
1875
1891
|
LatLongFormatPipe.decorators = [
|
|
1876
1892
|
{ type: Pipe, args: [{
|
|
1877
1893
|
name: 'latLongFormat'
|
|
@@ -1883,7 +1899,7 @@ class LatitudeFormatPipe {
|
|
|
1883
1899
|
this.transform = formatLatitude;
|
|
1884
1900
|
}
|
|
1885
1901
|
}
|
|
1886
|
-
LatitudeFormatPipe.ɵprov =
|
|
1902
|
+
LatitudeFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function LatitudeFormatPipe_Factory() { return new LatitudeFormatPipe(); }, token: LatitudeFormatPipe, providedIn: "root" });
|
|
1887
1903
|
LatitudeFormatPipe.decorators = [
|
|
1888
1904
|
{ type: Pipe, args: [{
|
|
1889
1905
|
name: 'latitudeFormat'
|
|
@@ -1895,7 +1911,7 @@ class LongitudeFormatPipe {
|
|
|
1895
1911
|
this.transform = formatLongitude;
|
|
1896
1912
|
}
|
|
1897
1913
|
}
|
|
1898
|
-
LongitudeFormatPipe.ɵprov =
|
|
1914
|
+
LongitudeFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function LongitudeFormatPipe_Factory() { return new LongitudeFormatPipe(); }, token: LongitudeFormatPipe, providedIn: "root" });
|
|
1899
1915
|
LongitudeFormatPipe.decorators = [
|
|
1900
1916
|
{ type: Pipe, args: [{
|
|
1901
1917
|
name: 'longitudeFormat'
|
|
@@ -1915,7 +1931,7 @@ class NumberFormatPipe {
|
|
|
1915
1931
|
}
|
|
1916
1932
|
}
|
|
1917
1933
|
}
|
|
1918
|
-
NumberFormatPipe.ɵprov =
|
|
1934
|
+
NumberFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function NumberFormatPipe_Factory() { return new NumberFormatPipe(); }, token: NumberFormatPipe, providedIn: "root" });
|
|
1919
1935
|
NumberFormatPipe.decorators = [
|
|
1920
1936
|
{ type: Pipe, args: [{
|
|
1921
1937
|
name: 'numberFormat'
|
|
@@ -1955,7 +1971,7 @@ class HighlightPipe {
|
|
|
1955
1971
|
}
|
|
1956
1972
|
}
|
|
1957
1973
|
}
|
|
1958
|
-
HighlightPipe.ɵprov =
|
|
1974
|
+
HighlightPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function HighlightPipe_Factory() { return new HighlightPipe(); }, token: HighlightPipe, providedIn: "root" });
|
|
1959
1975
|
HighlightPipe.decorators = [
|
|
1960
1976
|
{ type: Pipe, args: [{
|
|
1961
1977
|
name: 'highlight'
|
|
@@ -2020,7 +2036,7 @@ FileSizePipe.decorators = [
|
|
|
2020
2036
|
{ type: Pipe, args: [{ name: 'fileSize' },] }
|
|
2021
2037
|
];
|
|
2022
2038
|
|
|
2023
|
-
const moment$
|
|
2039
|
+
const moment$5 = momentImported;
|
|
2024
2040
|
const DATE_UNIX_TIMESTAMP = 'X';
|
|
2025
2041
|
const DATE_UNIX_MS_TIMESTAMP = 'x';
|
|
2026
2042
|
class DateUtils {
|
|
@@ -2054,32 +2070,32 @@ function fromDateISOString(value) {
|
|
|
2054
2070
|
if (!value || isMoment(value))
|
|
2055
2071
|
return value;
|
|
2056
2072
|
// Parse the input value, as a ISO date time
|
|
2057
|
-
const date = moment$
|
|
2073
|
+
const date = moment$5(value, DATE_ISO_PATTERN);
|
|
2058
2074
|
if (date.isValid())
|
|
2059
2075
|
return date;
|
|
2060
2076
|
// Not valid: trying to convert from unix timestamp
|
|
2061
2077
|
if (typeof value === 'string') {
|
|
2062
2078
|
console.warn('Wrong date format - Trying to convert from local time: ' + value);
|
|
2063
2079
|
if (value.length === 10) {
|
|
2064
|
-
return moment$
|
|
2080
|
+
return moment$5(value, DATE_UNIX_TIMESTAMP);
|
|
2065
2081
|
}
|
|
2066
2082
|
else if (value.length === 13) {
|
|
2067
|
-
return moment$
|
|
2083
|
+
return moment$5(value, DATE_UNIX_MS_TIMESTAMP);
|
|
2068
2084
|
}
|
|
2069
2085
|
}
|
|
2070
2086
|
console.warn('Unable to parse date: ' + value);
|
|
2071
2087
|
return undefined;
|
|
2072
2088
|
}
|
|
2073
2089
|
function fromUnixTimestamp(timeInSec) {
|
|
2074
|
-
return moment$
|
|
2090
|
+
return moment$5(timeInSec, DATE_UNIX_TIMESTAMP);
|
|
2075
2091
|
}
|
|
2076
2092
|
function fromUnixMsTimestamp(timeInMs) {
|
|
2077
|
-
return moment$
|
|
2093
|
+
return moment$5(timeInMs, DATE_UNIX_MS_TIMESTAMP);
|
|
2078
2094
|
}
|
|
2079
2095
|
function toDuration(value, unit) {
|
|
2080
2096
|
if (!value)
|
|
2081
2097
|
return undefined;
|
|
2082
|
-
const duration = moment$
|
|
2098
|
+
const duration = moment$5.duration(value, unit);
|
|
2083
2099
|
// fix 990+ ms
|
|
2084
2100
|
if (duration.milliseconds() >= 990) {
|
|
2085
2101
|
duration.add(1000 - duration.milliseconds(), 'ms');
|
|
@@ -2108,7 +2124,7 @@ class DurationPipe {
|
|
|
2108
2124
|
return (days > 0 ? days.toString() + (this.dayUnit + ' ') : '') + hour + ':' + minute;
|
|
2109
2125
|
}
|
|
2110
2126
|
}
|
|
2111
|
-
DurationPipe.ɵprov =
|
|
2127
|
+
DurationPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DurationPipe_Factory() { return new DurationPipe(i0.ɵɵinject(i1$1.TranslateService)); }, token: DurationPipe, providedIn: "root" });
|
|
2112
2128
|
DurationPipe.decorators = [
|
|
2113
2129
|
{ type: Pipe, args: [{
|
|
2114
2130
|
name: 'duration'
|
|
@@ -2129,7 +2145,7 @@ class MathAbsPipe {
|
|
|
2129
2145
|
}
|
|
2130
2146
|
}
|
|
2131
2147
|
}
|
|
2132
|
-
MathAbsPipe.ɵprov =
|
|
2148
|
+
MathAbsPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MathAbsPipe_Factory() { return new MathAbsPipe(); }, token: MathAbsPipe, providedIn: "root" });
|
|
2133
2149
|
MathAbsPipe.decorators = [
|
|
2134
2150
|
{ type: Pipe, args: [{
|
|
2135
2151
|
name: 'mathAbs'
|
|
@@ -2141,7 +2157,7 @@ class EvenPipe {
|
|
|
2141
2157
|
return val % 2 === 0;
|
|
2142
2158
|
}
|
|
2143
2159
|
}
|
|
2144
|
-
EvenPipe.ɵprov =
|
|
2160
|
+
EvenPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function EvenPipe_Factory() { return new EvenPipe(); }, token: EvenPipe, providedIn: "root" });
|
|
2145
2161
|
EvenPipe.decorators = [
|
|
2146
2162
|
{ type: Pipe, args: [{
|
|
2147
2163
|
name: 'even'
|
|
@@ -2153,7 +2169,7 @@ class OddPipe {
|
|
|
2153
2169
|
return val % 2 !== 0;
|
|
2154
2170
|
}
|
|
2155
2171
|
}
|
|
2156
|
-
OddPipe.ɵprov =
|
|
2172
|
+
OddPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function OddPipe_Factory() { return new OddPipe(); }, token: OddPipe, providedIn: "root" });
|
|
2157
2173
|
OddPipe.decorators = [
|
|
2158
2174
|
{ type: Pipe, args: [{
|
|
2159
2175
|
name: 'odd'
|
|
@@ -2261,7 +2277,7 @@ class MapGetPipe {
|
|
|
2261
2277
|
return val[key];
|
|
2262
2278
|
}
|
|
2263
2279
|
}
|
|
2264
|
-
MapGetPipe.ɵprov =
|
|
2280
|
+
MapGetPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MapGetPipe_Factory() { return new MapGetPipe(); }, token: MapGetPipe, providedIn: "root" });
|
|
2265
2281
|
MapGetPipe.decorators = [
|
|
2266
2282
|
{ type: Pipe, args: [{
|
|
2267
2283
|
name: 'mapGet'
|
|
@@ -2275,7 +2291,7 @@ class MapKeysPipe {
|
|
|
2275
2291
|
return Object.keys(map);
|
|
2276
2292
|
}
|
|
2277
2293
|
}
|
|
2278
|
-
MapKeysPipe.ɵprov =
|
|
2294
|
+
MapKeysPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MapKeysPipe_Factory() { return new MapKeysPipe(); }, token: MapKeysPipe, providedIn: "root" });
|
|
2279
2295
|
MapKeysPipe.decorators = [
|
|
2280
2296
|
{ type: Pipe, args: [{
|
|
2281
2297
|
name: 'mapKeys'
|
|
@@ -2289,7 +2305,7 @@ class MapValuesPipe {
|
|
|
2289
2305
|
return Object.values(map);
|
|
2290
2306
|
}
|
|
2291
2307
|
}
|
|
2292
|
-
MapValuesPipe.ɵprov =
|
|
2308
|
+
MapValuesPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MapValuesPipe_Factory() { return new MapValuesPipe(); }, token: MapValuesPipe, providedIn: "root" });
|
|
2293
2309
|
MapValuesPipe.decorators = [
|
|
2294
2310
|
{ type: Pipe, args: [{
|
|
2295
2311
|
name: 'mapValues'
|
|
@@ -2302,7 +2318,7 @@ class IsNotNilOrBlankPipe {
|
|
|
2302
2318
|
return isNotNilOrBlank(value);
|
|
2303
2319
|
}
|
|
2304
2320
|
}
|
|
2305
|
-
IsNotNilOrBlankPipe.ɵprov =
|
|
2321
|
+
IsNotNilOrBlankPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsNotNilOrBlankPipe_Factory() { return new IsNotNilOrBlankPipe(); }, token: IsNotNilOrBlankPipe, providedIn: "root" });
|
|
2306
2322
|
IsNotNilOrBlankPipe.decorators = [
|
|
2307
2323
|
{ type: Pipe, args: [{
|
|
2308
2324
|
name: 'isNotNilOrBlank'
|
|
@@ -2314,7 +2330,7 @@ class IsNilOrBlankPipe {
|
|
|
2314
2330
|
return isNilOrBlank(value);
|
|
2315
2331
|
}
|
|
2316
2332
|
}
|
|
2317
|
-
IsNilOrBlankPipe.ɵprov =
|
|
2333
|
+
IsNilOrBlankPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsNilOrBlankPipe_Factory() { return new IsNilOrBlankPipe(); }, token: IsNilOrBlankPipe, providedIn: "root" });
|
|
2318
2334
|
IsNilOrBlankPipe.decorators = [
|
|
2319
2335
|
{ type: Pipe, args: [{
|
|
2320
2336
|
name: 'isNilOrBlank'
|
|
@@ -2326,7 +2342,7 @@ class ToStringPipe {
|
|
|
2326
2342
|
return (value !== null && value !== undefined) ? value.toString() : '';
|
|
2327
2343
|
}
|
|
2328
2344
|
}
|
|
2329
|
-
ToStringPipe.ɵprov =
|
|
2345
|
+
ToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function ToStringPipe_Factory() { return new ToStringPipe(); }, token: ToStringPipe, providedIn: "root" });
|
|
2330
2346
|
ToStringPipe.decorators = [
|
|
2331
2347
|
{ type: Pipe, args: [{
|
|
2332
2348
|
name: 'toString'
|
|
@@ -2338,7 +2354,7 @@ class StrLengthPipe {
|
|
|
2338
2354
|
return value && value.length || 0;
|
|
2339
2355
|
}
|
|
2340
2356
|
}
|
|
2341
|
-
StrLengthPipe.ɵprov =
|
|
2357
|
+
StrLengthPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function StrLengthPipe_Factory() { return new StrLengthPipe(); }, token: StrLengthPipe, providedIn: "root" });
|
|
2342
2358
|
StrLengthPipe.decorators = [
|
|
2343
2359
|
{ type: Pipe, args: [{
|
|
2344
2360
|
name: 'strLength'
|
|
@@ -2389,7 +2405,7 @@ class TranslateContextService {
|
|
|
2389
2405
|
: parts.slice(0, parts.length - 1).concat(context + parts[parts.length - 1]).join('.');
|
|
2390
2406
|
}
|
|
2391
2407
|
}
|
|
2392
|
-
TranslateContextService.ɵprov =
|
|
2408
|
+
TranslateContextService.ɵprov = i0.ɵɵdefineInjectable({ factory: function TranslateContextService_Factory() { return new TranslateContextService(i0.ɵɵinject(i1$1.TranslateService)); }, token: TranslateContextService, providedIn: "root" });
|
|
2393
2409
|
TranslateContextService.decorators = [
|
|
2394
2410
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
2395
2411
|
];
|
|
@@ -2405,7 +2421,7 @@ class TranslateContextPipe {
|
|
|
2405
2421
|
return this.translateContext.instant(key, context);
|
|
2406
2422
|
}
|
|
2407
2423
|
}
|
|
2408
|
-
TranslateContextPipe.ɵprov =
|
|
2424
|
+
TranslateContextPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function TranslateContextPipe_Factory() { return new TranslateContextPipe(i0.ɵɵinject(TranslateContextService)); }, token: TranslateContextPipe, providedIn: "root" });
|
|
2409
2425
|
TranslateContextPipe.decorators = [
|
|
2410
2426
|
{ type: Pipe, args: [{
|
|
2411
2427
|
name: 'translateContext'
|
|
@@ -2422,7 +2438,7 @@ class TranslatablePipe {
|
|
|
2422
2438
|
return (_a = changeCaseToUnderscore(value)) === null || _a === void 0 ? void 0 : _a.toUpperCase();
|
|
2423
2439
|
}
|
|
2424
2440
|
}
|
|
2425
|
-
TranslatablePipe.ɵprov =
|
|
2441
|
+
TranslatablePipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function TranslatablePipe_Factory() { return new TranslatablePipe(); }, token: TranslatablePipe, providedIn: "root" });
|
|
2426
2442
|
TranslatablePipe.decorators = [
|
|
2427
2443
|
{ type: Pipe, args: [{
|
|
2428
2444
|
name: 'translatable'
|
|
@@ -2439,7 +2455,7 @@ class PropertyGetPipe {
|
|
|
2439
2455
|
args && args.defaultValue);
|
|
2440
2456
|
}
|
|
2441
2457
|
}
|
|
2442
|
-
PropertyGetPipe.ɵprov =
|
|
2458
|
+
PropertyGetPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function PropertyGetPipe_Factory() { return new PropertyGetPipe(); }, token: PropertyGetPipe, providedIn: "root" });
|
|
2443
2459
|
PropertyGetPipe.decorators = [
|
|
2444
2460
|
{ type: Pipe, args: [{
|
|
2445
2461
|
name: 'propertyGet'
|
|
@@ -2683,12 +2699,12 @@ SharedMatAutocompleteModule.decorators = [
|
|
|
2683
2699
|
},] }
|
|
2684
2700
|
];
|
|
2685
2701
|
|
|
2686
|
-
const moment$
|
|
2702
|
+
const moment$4 = momentImported;
|
|
2687
2703
|
// @dynamic
|
|
2688
2704
|
class SharedValidators {
|
|
2689
2705
|
static validDate(control) {
|
|
2690
2706
|
const value = control.value;
|
|
2691
|
-
const date = !value || moment$
|
|
2707
|
+
const date = !value || moment$4.isMoment(value) ? value : moment$4(control.value, DATE_ISO_PATTERN);
|
|
2692
2708
|
if (date && (!date.isValid() || date.year() < 1970)) {
|
|
2693
2709
|
return { validDate: true };
|
|
2694
2710
|
}
|
|
@@ -3130,9 +3146,9 @@ function parseDuration(input, maxDecimals, placeholderChar) {
|
|
|
3130
3146
|
const hour = parseInt(durationParts[0] || '0');
|
|
3131
3147
|
const minute = parseInt(durationParts[1] || '0');
|
|
3132
3148
|
const value = hour + (minute + 0.5) / 60;
|
|
3133
|
-
return roundFloat
|
|
3149
|
+
return roundFloat(value, maxDecimals);
|
|
3134
3150
|
}
|
|
3135
|
-
function roundFloat
|
|
3151
|
+
function roundFloat(input, maxDecimals) {
|
|
3136
3152
|
if (maxDecimals > 0) {
|
|
3137
3153
|
const powDecimal = Math.pow(10, maxDecimals);
|
|
3138
3154
|
return Math.trunc(input * powDecimal + 0.5) / powDecimal;
|
|
@@ -3156,9 +3172,9 @@ const MASKS = {
|
|
|
3156
3172
|
DD: [/[+-]/, /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, '°']
|
|
3157
3173
|
}
|
|
3158
3174
|
};
|
|
3159
|
-
const noop$
|
|
3175
|
+
const noop$6 = () => {
|
|
3160
3176
|
};
|
|
3161
|
-
const ɵ0$
|
|
3177
|
+
const ɵ0$9 = noop$6;
|
|
3162
3178
|
class MatLatLongField {
|
|
3163
3179
|
constructor(platform, translate, formBuilder, cd, formGroupDir) {
|
|
3164
3180
|
this.platform = platform;
|
|
@@ -3166,8 +3182,8 @@ class MatLatLongField {
|
|
|
3166
3182
|
this.formBuilder = formBuilder;
|
|
3167
3183
|
this.cd = cd;
|
|
3168
3184
|
this.formGroupDir = formGroupDir;
|
|
3169
|
-
this._onChangeCallback = noop$
|
|
3170
|
-
this._onTouchedCallback = noop$
|
|
3185
|
+
this._onChangeCallback = noop$6;
|
|
3186
|
+
this._onTouchedCallback = noop$6;
|
|
3171
3187
|
this._subscription = new Subscription();
|
|
3172
3188
|
this.disabling = false;
|
|
3173
3189
|
this.writing = false;
|
|
@@ -3508,14 +3524,14 @@ SharedMatLatLongModule.decorators = [
|
|
|
3508
3524
|
},] }
|
|
3509
3525
|
];
|
|
3510
3526
|
|
|
3511
|
-
const DEFAULT_VALUE_ACCESSOR$
|
|
3527
|
+
const DEFAULT_VALUE_ACCESSOR$5 = {
|
|
3512
3528
|
provide: NG_VALUE_ACCESSOR,
|
|
3513
3529
|
useExisting: forwardRef(() => MatDate),
|
|
3514
3530
|
multi: true
|
|
3515
3531
|
};
|
|
3516
|
-
const DAY_MASK = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
|
|
3517
|
-
const noop$
|
|
3518
|
-
const ɵ0$
|
|
3532
|
+
const DAY_MASK$2 = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
|
|
3533
|
+
const noop$5 = () => { };
|
|
3534
|
+
const ɵ0$8 = noop$5;
|
|
3519
3535
|
class MatDate {
|
|
3520
3536
|
constructor(platform, dateAdapter, translate, formBuilder, cd, keyboard, formGroupDir) {
|
|
3521
3537
|
this.dateAdapter = dateAdapter;
|
|
@@ -3524,12 +3540,12 @@ class MatDate {
|
|
|
3524
3540
|
this.cd = cd;
|
|
3525
3541
|
this.keyboard = keyboard;
|
|
3526
3542
|
this.formGroupDir = formGroupDir;
|
|
3527
|
-
this._onChangeCallback = noop$
|
|
3528
|
-
this._onTouchedCallback = noop$
|
|
3543
|
+
this._onChangeCallback = noop$5;
|
|
3544
|
+
this._onTouchedCallback = noop$5;
|
|
3529
3545
|
this._subscription = new Subscription();
|
|
3530
3546
|
this.writing = true;
|
|
3531
3547
|
this.disabling = false;
|
|
3532
|
-
this.dayMask = DAY_MASK;
|
|
3548
|
+
this.dayMask = DAY_MASK$2;
|
|
3533
3549
|
this.disabled = false;
|
|
3534
3550
|
this.floatLabel = 'auto';
|
|
3535
3551
|
this.readonly = false;
|
|
@@ -3766,7 +3782,7 @@ MatDate.decorators = [
|
|
|
3766
3782
|
selector: 'mat-date-field',
|
|
3767
3783
|
template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly else writable\">\n <input matInput hidden type=\"text\" readonly=\"true\" [formControl]=\"formControl\">\n <ion-text>{{formControl.value|dateFormat: {pattern: displayPattern} }}</ion-text>\n</mat-form-field>\n\n<ng-template #writable>\n <mat-form-field [floatLabel]=\"floatLabel\">\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_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 control -->\n <input matInput type=\"text\"\n [formControl]=\"formControl\"\n hidden\n [matDatepicker]=\"datePicker\"\n (dateChange)=\"onDatePickerChange($event)\">\n\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\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)=\"writeValue(null)\"\n [hidden]=\"formControl.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('validDate')\" translate>ERROR.FIELD_NOT_VALID_DATE</mat-error>\n <mat-error *ngIf=\"formControl.hasError('dateIsAfter')\">{{'ERROR.FIELD_NOT_VALID_DATE_AFTER' | translate: formControl.errors.dateIsAfter }}</mat-error>\n <mat-error *ngIf=\"formControl.hasError('dateRange')\" translate>ERROR.FIELD_NOT_VALID_DATE_RANGE</mat-error>\n <mat-error *ngIf=\"!formControl.hasError('dateRange') && formControl.hasError('dateMaxDuration')\" translate>ERROR.FIELD_NOT_VALID_DATE_MAX_DURATION</mat-error>\n <mat-error *ngIf=\"!formControl.hasError('dateRange') && formControl.hasError('dateMinDuration')\" translate>ERROR.FIELD_NOT_VALID_DATE_MIN_DURATION</mat-error>\n <mat-error *ngIf=\"formControl.hasError('msg')\">{{formControl.errors.msg}}</mat-error>\n </mat-form-field>\n\n <mat-datepicker #datePicker\n [touchUi]=\"mobile\"\n [disabled]=\"formControl.disabled\"\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",
|
|
3768
3784
|
providers: [
|
|
3769
|
-
DEFAULT_VALUE_ACCESSOR$
|
|
3785
|
+
DEFAULT_VALUE_ACCESSOR$5,
|
|
3770
3786
|
],
|
|
3771
3787
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
3772
3788
|
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%}"]
|
|
@@ -3799,17 +3815,17 @@ MatDate.propDecorators = {
|
|
|
3799
3815
|
matInputs: [{ type: ViewChildren, args: ['matInput',] }]
|
|
3800
3816
|
};
|
|
3801
3817
|
|
|
3802
|
-
const DEFAULT_VALUE_ACCESSOR$
|
|
3818
|
+
const DEFAULT_VALUE_ACCESSOR$4 = {
|
|
3803
3819
|
provide: NG_VALUE_ACCESSOR,
|
|
3804
3820
|
useExisting: forwardRef(() => MatDateTime),
|
|
3805
3821
|
multi: true
|
|
3806
3822
|
};
|
|
3807
3823
|
const DAY_MASK$1 = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
|
|
3808
3824
|
const HOUR_REGEXP = /^[012][0-9][:][012345][0-9]$/;
|
|
3809
|
-
const HOUR_MASK = [/[012]/, /\d/, ':', /[012345]/, /\d/];
|
|
3810
|
-
const noop$
|
|
3825
|
+
const HOUR_MASK$1 = [/[012]/, /\d/, ':', /[012345]/, /\d/];
|
|
3826
|
+
const noop$4 = () => {
|
|
3811
3827
|
};
|
|
3812
|
-
const ɵ0$
|
|
3828
|
+
const ɵ0$7 = noop$4;
|
|
3813
3829
|
class MatDateTime {
|
|
3814
3830
|
constructor(platform, dateAdapter, translate, formBuilder, keyboard, cd, formGroupDir) {
|
|
3815
3831
|
this.platform = platform;
|
|
@@ -3819,14 +3835,14 @@ class MatDateTime {
|
|
|
3819
3835
|
this.keyboard = keyboard;
|
|
3820
3836
|
this.cd = cd;
|
|
3821
3837
|
this.formGroupDir = formGroupDir;
|
|
3822
|
-
this._onChangeCallback = noop$
|
|
3823
|
-
this._onTouchedCallback = noop$
|
|
3838
|
+
this._onChangeCallback = noop$4;
|
|
3839
|
+
this._onTouchedCallback = noop$4;
|
|
3824
3840
|
this._subscription = new Subscription();
|
|
3825
3841
|
this.writing = true;
|
|
3826
3842
|
this.disabling = false;
|
|
3827
3843
|
this._onDestroy = new EventEmitter();
|
|
3828
3844
|
this.dayMask = DAY_MASK$1;
|
|
3829
|
-
this.hourMask = HOUR_MASK;
|
|
3845
|
+
this.hourMask = HOUR_MASK$1;
|
|
3830
3846
|
this.floatLabel = 'auto';
|
|
3831
3847
|
this.readonly = false;
|
|
3832
3848
|
this.compact = false;
|
|
@@ -4132,7 +4148,7 @@ MatDateTime.decorators = [
|
|
|
4132
4148
|
selector: 'mat-date-time-field',
|
|
4133
4149
|
template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n class=\"mat-form-field-disabled\">\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\">\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 [class.mat-form-field-invalid]=\"formControl.touched && formControl.invalid\">\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]=\"dateFormControl\"\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]=\"dateFormControl\"\n (click)=\"openDatePickerIfMobile($event, datePicker)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n readonly>\n <input matInput type=\"text\" [formControl]=\"formControl\"\n hidden\n [matDatepicker]=\"datePicker\"\n (dateChange)=\"onDatePickerChange($event)\">\n\n <button type=\"button\" mat-icon-button tabindex=\"-1\" matSuffix #datePickerButton2 (click)=\"openDatePicker($event, datePicker)\" [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=\"'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 [class.mat-form-field-invalid]=\"formControl.touched && (timeFormControl.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]=\"timeFormControl\"\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]=\"timeFormControl\"\n (click)=\"openTimePickerIfMobile($event)\"\n readonly>\n\n <input matInput type=\"text\"\n [formControl]=\"timeFormControl\"\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",
|
|
4134
4150
|
providers: [
|
|
4135
|
-
DEFAULT_VALUE_ACCESSOR$
|
|
4151
|
+
DEFAULT_VALUE_ACCESSOR$4,
|
|
4136
4152
|
],
|
|
4137
4153
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
4138
4154
|
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}.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%}"]
|
|
@@ -4171,10 +4187,10 @@ const DEFAULT_VALUE_ACCESSOR$3 = {
|
|
|
4171
4187
|
useExisting: forwardRef(() => MatDateShort),
|
|
4172
4188
|
multi: true
|
|
4173
4189
|
};
|
|
4174
|
-
const DAY_MASK
|
|
4175
|
-
const noop$
|
|
4190
|
+
const DAY_MASK = [/\d/, /\d/, /\d/, /\d/];
|
|
4191
|
+
const noop$3 = () => {
|
|
4176
4192
|
};
|
|
4177
|
-
const ɵ0$
|
|
4193
|
+
const ɵ0$6 = noop$3;
|
|
4178
4194
|
class MatDateShort {
|
|
4179
4195
|
constructor(platform, dateAdapter, translate, formBuilder, cd, keyboard, formGroupDir) {
|
|
4180
4196
|
this.dateAdapter = dateAdapter;
|
|
@@ -4183,11 +4199,11 @@ class MatDateShort {
|
|
|
4183
4199
|
this.cd = cd;
|
|
4184
4200
|
this.keyboard = keyboard;
|
|
4185
4201
|
this.formGroupDir = formGroupDir;
|
|
4186
|
-
this._onChangeCallback = noop$
|
|
4187
|
-
this._onTouchedCallback = noop$
|
|
4202
|
+
this._onChangeCallback = noop$3;
|
|
4203
|
+
this._onTouchedCallback = noop$3;
|
|
4188
4204
|
this.writing = true;
|
|
4189
4205
|
this.disabling = false;
|
|
4190
|
-
this.dayMask = DAY_MASK
|
|
4206
|
+
this.dayMask = DAY_MASK;
|
|
4191
4207
|
this.disabled = false;
|
|
4192
4208
|
this.floatLabel = 'auto';
|
|
4193
4209
|
this.readonly = false;
|
|
@@ -4500,16 +4516,16 @@ SharedMatDateTimeModule.decorators = [
|
|
|
4500
4516
|
},] }
|
|
4501
4517
|
];
|
|
4502
4518
|
|
|
4503
|
-
const DEFAULT_VALUE_ACCESSOR$
|
|
4519
|
+
const DEFAULT_VALUE_ACCESSOR$2 = {
|
|
4504
4520
|
provide: NG_VALUE_ACCESSOR,
|
|
4505
4521
|
useExisting: forwardRef(() => MatDuration),
|
|
4506
4522
|
multi: true
|
|
4507
4523
|
};
|
|
4508
4524
|
const HOUR_TIME_PATTERN = /[0-9]\d\d:[0-5]\d/;
|
|
4509
|
-
const HOUR_MASK
|
|
4510
|
-
const noop$
|
|
4525
|
+
const HOUR_MASK = [/\d/, /\d/, /\d/, ':', /[0-5]/, /\d/];
|
|
4526
|
+
const noop$2 = () => {
|
|
4511
4527
|
};
|
|
4512
|
-
const ɵ0$5 = noop$
|
|
4528
|
+
const ɵ0$5 = noop$2;
|
|
4513
4529
|
class MatDuration {
|
|
4514
4530
|
constructor(platform, dateAdapter, translate, formBuilder, cd, formGroupDir) {
|
|
4515
4531
|
this.dateAdapter = dateAdapter;
|
|
@@ -4518,11 +4534,11 @@ class MatDuration {
|
|
|
4518
4534
|
this.cd = cd;
|
|
4519
4535
|
this.formGroupDir = formGroupDir;
|
|
4520
4536
|
this._subscription = new Subscription();
|
|
4521
|
-
this._onChangeCallback = noop$
|
|
4522
|
-
this._onTouchedCallback = noop$
|
|
4537
|
+
this._onChangeCallback = noop$2;
|
|
4538
|
+
this._onTouchedCallback = noop$2;
|
|
4523
4539
|
this.writing = true;
|
|
4524
4540
|
this.disabling = false;
|
|
4525
|
-
this.hourMask = HOUR_MASK
|
|
4541
|
+
this.hourMask = HOUR_MASK;
|
|
4526
4542
|
this.disabled = false;
|
|
4527
4543
|
this.floatLabel = 'auto';
|
|
4528
4544
|
this.readonly = false;
|
|
@@ -4702,7 +4718,7 @@ MatDuration.decorators = [
|
|
|
4702
4718
|
selector: 'mat-duration-field',
|
|
4703
4719
|
template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly else writable\">\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 [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",
|
|
4704
4720
|
providers: [
|
|
4705
|
-
DEFAULT_VALUE_ACCESSOR$
|
|
4721
|
+
DEFAULT_VALUE_ACCESSOR$2,
|
|
4706
4722
|
],
|
|
4707
4723
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
4708
4724
|
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%}"]
|
|
@@ -4759,22 +4775,22 @@ SharedMatDurationModule.decorators = [
|
|
|
4759
4775
|
},] }
|
|
4760
4776
|
];
|
|
4761
4777
|
|
|
4762
|
-
const DEFAULT_VALUE_ACCESSOR$
|
|
4778
|
+
const DEFAULT_VALUE_ACCESSOR$1 = {
|
|
4763
4779
|
provide: NG_VALUE_ACCESSOR,
|
|
4764
4780
|
useExisting: forwardRef(() => MatBooleanField),
|
|
4765
4781
|
multi: true
|
|
4766
4782
|
};
|
|
4767
|
-
const noop$
|
|
4783
|
+
const noop$1 = () => {
|
|
4768
4784
|
};
|
|
4769
|
-
const ɵ0$
|
|
4785
|
+
const ɵ0$4 = noop$1;
|
|
4770
4786
|
class MatBooleanField {
|
|
4771
4787
|
constructor(translate, formBuilder, cd, formGroupDir) {
|
|
4772
4788
|
this.translate = translate;
|
|
4773
4789
|
this.formBuilder = formBuilder;
|
|
4774
4790
|
this.cd = cd;
|
|
4775
4791
|
this.formGroupDir = formGroupDir;
|
|
4776
|
-
this._onChangeCallback = noop$
|
|
4777
|
-
this._onTouchedCallback = noop$
|
|
4792
|
+
this._onChangeCallback = noop$1;
|
|
4793
|
+
this._onTouchedCallback = noop$1;
|
|
4778
4794
|
this._writing = false;
|
|
4779
4795
|
this.showRadio = false;
|
|
4780
4796
|
this.disabled = false;
|
|
@@ -4947,7 +4963,7 @@ MatBooleanField.decorators = [
|
|
|
4947
4963
|
selector: 'mat-boolean-field',
|
|
4948
4964
|
template: "<mat-form-field *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n class=\"mat-form-field-disabled {{classList}}\">\n <input matInput hidden type=\"text\" readonly\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\">\n <ion-text>{{(formControl.value == null && 'COMMON.EMPTY_OPTION' || (formControl.value === true && yesLabel) || noLabel) | translate }}</ion-text>\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 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\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 <div matSuffix #injectMatSuffix></div>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n\n <!-- Checkbox -->\n <mat-form-field *ngSwitchCase=\"'checkbox'\"\n [floatLabel]=\"floatLabel\"\n class=\"mat-boolean-field mat-boolean-field-checkbox {{classList}}\">\n <mat-label *ngIf=\"placeholder && !showRadio\">\n {{placeholder}}\n </mat-label>\n\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===undefined\"\n [hidden]=\"!showRadio\"\n [tabindex]=\"tabindex\">\n </mat-checkbox>\n\n <div matSuffix #injectMatSuffix></div>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n\n <!-- Buttons -->\n <mat-form-field *ngSwitchCase=\"'button'\"\n [floatLabel]=\"floatLabel === 'never' ? 'never' : 'always'\"\n class=\"mat-boolean-field mat-boolean-field-button {{classList}}\">\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 <div matSuffix #injectMatSuffix></div>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n </ng-container>\n\n <div class=\"cdk-visually-hidden\">\n <div #suffix><ng-content select=\"[matSuffix]\"></ng-content></div>\n </div>\n\n</ng-template>\n\n\n",
|
|
4949
4965
|
providers: [
|
|
4950
|
-
DEFAULT_VALUE_ACCESSOR$
|
|
4966
|
+
DEFAULT_VALUE_ACCESSOR$1
|
|
4951
4967
|
],
|
|
4952
4968
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
4953
4969
|
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}"]
|
|
@@ -5195,7 +5211,7 @@ class MatNumpadDomService {
|
|
|
5195
5211
|
this.appRef.detachView(this.componentRef.hostView);
|
|
5196
5212
|
}
|
|
5197
5213
|
}
|
|
5198
|
-
MatNumpadDomService.ɵprov =
|
|
5214
|
+
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" });
|
|
5199
5215
|
MatNumpadDomService.decorators = [
|
|
5200
5216
|
{ type: Injectable, args: [{
|
|
5201
5217
|
providedIn: 'root'
|
|
@@ -5559,7 +5575,7 @@ SharedMatNumpadModule.decorators = [
|
|
|
5559
5575
|
},] }
|
|
5560
5576
|
];
|
|
5561
5577
|
|
|
5562
|
-
const DEFAULT_VALUE_ACCESSOR
|
|
5578
|
+
const DEFAULT_VALUE_ACCESSOR = {
|
|
5563
5579
|
provide: NG_VALUE_ACCESSOR,
|
|
5564
5580
|
useExisting: forwardRef(() => MatSwipeField),
|
|
5565
5581
|
multi: true
|
|
@@ -5822,7 +5838,7 @@ MatSwipeField.decorators = [
|
|
|
5822
5838
|
{ type: Component, args: [{
|
|
5823
5839
|
selector: 'mat-swipe-field',
|
|
5824
5840
|
template: "<mat-form-field [floatLabel]=\"showSlides && (!floatLabel || floatLabel === 'auto') ? 'always': floatLabel\"\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",
|
|
5825
|
-
providers: [DEFAULT_VALUE_ACCESSOR
|
|
5841
|
+
providers: [DEFAULT_VALUE_ACCESSOR],
|
|
5826
5842
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
5827
5843
|
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}"]
|
|
5828
5844
|
},] }
|
|
@@ -6317,7 +6333,7 @@ class ProgressBarService {
|
|
|
6317
6333
|
}
|
|
6318
6334
|
}
|
|
6319
6335
|
}
|
|
6320
|
-
ProgressBarService.ɵprov =
|
|
6336
|
+
ProgressBarService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ProgressBarService_Factory() { return new ProgressBarService(); }, token: ProgressBarService, providedIn: "root" });
|
|
6321
6337
|
ProgressBarService.decorators = [
|
|
6322
6338
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
6323
6339
|
];
|
|
@@ -6361,7 +6377,7 @@ class AppGestureConfig extends HammerGestureConfig {
|
|
|
6361
6377
|
return mc;
|
|
6362
6378
|
}
|
|
6363
6379
|
}
|
|
6364
|
-
AppGestureConfig.ɵprov =
|
|
6380
|
+
AppGestureConfig.ɵprov = i0.ɵɵdefineInjectable({ factory: function AppGestureConfig_Factory() { return new AppGestureConfig(); }, token: AppGestureConfig, providedIn: "root" });
|
|
6365
6381
|
AppGestureConfig.decorators = [
|
|
6366
6382
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
6367
6383
|
];
|
|
@@ -6584,7 +6600,7 @@ class MatPaginatorI18n extends MatPaginatorIntl {
|
|
|
6584
6600
|
this.previousPageLabel = this.translate.instant('COMMON.PAGINATOR.PREVIOUS_PAGE');
|
|
6585
6601
|
}
|
|
6586
6602
|
}
|
|
6587
|
-
MatPaginatorI18n.ɵprov =
|
|
6603
|
+
MatPaginatorI18n.ɵprov = i0.ɵɵdefineInjectable({ factory: function MatPaginatorI18n_Factory() { return new MatPaginatorI18n(i0.ɵɵinject(i1$1.TranslateService)); }, token: MatPaginatorI18n, providedIn: "root" });
|
|
6588
6604
|
MatPaginatorI18n.decorators = [
|
|
6589
6605
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
6590
6606
|
];
|
|
@@ -6674,17 +6690,17 @@ function getColorContrast(color, bw) {
|
|
|
6674
6690
|
return rgbArrayToHex(rgb.map(v => 255 - v));
|
|
6675
6691
|
}
|
|
6676
6692
|
|
|
6677
|
-
const noop
|
|
6693
|
+
const noop = () => {
|
|
6678
6694
|
};
|
|
6679
|
-
const ɵ0$
|
|
6695
|
+
const ɵ0$3 = noop;
|
|
6680
6696
|
class AppFormField {
|
|
6681
6697
|
constructor(translate, cd, injector, formGroupDir) {
|
|
6682
6698
|
this.translate = translate;
|
|
6683
6699
|
this.cd = cd;
|
|
6684
6700
|
this.injector = injector;
|
|
6685
6701
|
this.formGroupDir = formGroupDir;
|
|
6686
|
-
this._onChangeCallback = noop
|
|
6687
|
-
this._onTouchedCallback = noop
|
|
6702
|
+
this._onChangeCallback = noop;
|
|
6703
|
+
this._onTouchedCallback = noop;
|
|
6688
6704
|
this.readonly = false;
|
|
6689
6705
|
this.compact = false;
|
|
6690
6706
|
this.floatLabel = 'auto';
|
|
@@ -7055,14 +7071,14 @@ class AudioProvider {
|
|
|
7055
7071
|
});
|
|
7056
7072
|
}
|
|
7057
7073
|
}
|
|
7058
|
-
AudioProvider.ɵprov =
|
|
7074
|
+
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" });
|
|
7059
7075
|
AudioProvider.decorators = [
|
|
7060
7076
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
7061
7077
|
];
|
|
7062
7078
|
AudioProvider.ctorParameters = () => [
|
|
7063
7079
|
{ type: Platform },
|
|
7064
|
-
{ type: NativeAudio
|
|
7065
|
-
{ type: Vibration
|
|
7080
|
+
{ type: NativeAudio, decorators: [{ type: Optional }] },
|
|
7081
|
+
{ type: Vibration, decorators: [{ type: Optional }] },
|
|
7066
7082
|
{ type: AudioManagement, decorators: [{ type: Optional }] }
|
|
7067
7083
|
];
|
|
7068
7084
|
|
|
@@ -7144,7 +7160,7 @@ class Hotkeys {
|
|
|
7144
7160
|
});
|
|
7145
7161
|
}
|
|
7146
7162
|
}
|
|
7147
|
-
Hotkeys.ɵprov =
|
|
7163
|
+
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)); }, token: Hotkeys, providedIn: "root" });
|
|
7148
7164
|
Hotkeys.decorators = [
|
|
7149
7165
|
{ type: Injectable, args: [{
|
|
7150
7166
|
providedIn: 'root'
|
|
@@ -7318,7 +7334,7 @@ class Base64ImageReader {
|
|
|
7318
7334
|
}
|
|
7319
7335
|
}
|
|
7320
7336
|
|
|
7321
|
-
const uuidv4 = uuidv4Imported;
|
|
7337
|
+
const uuidv4$1 = uuidv4Imported;
|
|
7322
7338
|
class FileService {
|
|
7323
7339
|
constructor(platform,
|
|
7324
7340
|
//private transfer: FileTransfer,
|
|
@@ -7355,7 +7371,7 @@ class FileService {
|
|
|
7355
7371
|
const lastSlashIndex = source.lastIndexOf('/');
|
|
7356
7372
|
if (lastSlashIndex === -1)
|
|
7357
7373
|
throw new Error('Invalid URL: ' + source);
|
|
7358
|
-
const fileName = lastSlashIndex < (source.length - 1) && source.substring(lastSlashIndex + 1) || uuidv4();
|
|
7374
|
+
const fileName = lastSlashIndex < (source.length - 1) && source.substring(lastSlashIndex + 1) || uuidv4$1();
|
|
7359
7375
|
// Download into the file system
|
|
7360
7376
|
if (responseType === 'file' && this.canUseFileSystem) {
|
|
7361
7377
|
console.warn(`WARN: [file] Fetching image {${source}} in local file...`);
|
|
@@ -7411,7 +7427,7 @@ class FileService {
|
|
|
7411
7427
|
this._started = true;
|
|
7412
7428
|
}
|
|
7413
7429
|
}
|
|
7414
|
-
FileService.ɵprov =
|
|
7430
|
+
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" });
|
|
7415
7431
|
FileService.decorators = [
|
|
7416
7432
|
{ type: Injectable, args: [{
|
|
7417
7433
|
providedIn: 'root',
|
|
@@ -7573,7 +7589,7 @@ class Base58 {
|
|
|
7573
7589
|
Base58.alphabet = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
|
|
7574
7590
|
|
|
7575
7591
|
const scrypt = require('scrypt-async');
|
|
7576
|
-
const sha256 = require('hash.js/lib/hash/sha/256');
|
|
7592
|
+
const sha256$1 = require('hash.js/lib/hash/sha/256');
|
|
7577
7593
|
const sha512 = require('hash.js/lib/hash/sha/512');
|
|
7578
7594
|
const nacl = {
|
|
7579
7595
|
sign,
|
|
@@ -7677,7 +7693,7 @@ class CryptoService {
|
|
|
7677
7693
|
* Hash (using SHA256) a message
|
|
7678
7694
|
*/
|
|
7679
7695
|
sha256(message) {
|
|
7680
|
-
return sha256().update(message).digest('hex');
|
|
7696
|
+
return sha256$1().update(message).digest('hex');
|
|
7681
7697
|
}
|
|
7682
7698
|
/**
|
|
7683
7699
|
* Hash (using SHA512) a message
|
|
@@ -7690,7 +7706,7 @@ class CryptoService {
|
|
|
7690
7706
|
return nacl.util.encodeBase64(m);
|
|
7691
7707
|
}
|
|
7692
7708
|
}
|
|
7693
|
-
CryptoService.ɵprov =
|
|
7709
|
+
CryptoService.ɵprov = i0.ɵɵdefineInjectable({ factory: function CryptoService_Factory() { return new CryptoService(); }, token: CryptoService, providedIn: "root" });
|
|
7694
7710
|
CryptoService.decorators = [
|
|
7695
7711
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
7696
7712
|
];
|
|
@@ -8910,7 +8926,7 @@ class LocalSettingsService {
|
|
|
8910
8926
|
return page;
|
|
8911
8927
|
}
|
|
8912
8928
|
}
|
|
8913
|
-
LocalSettingsService.ɵprov =
|
|
8929
|
+
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" });
|
|
8914
8930
|
LocalSettingsService.decorators = [
|
|
8915
8931
|
{ type: Injectable, args: [{
|
|
8916
8932
|
providedIn: 'root',
|
|
@@ -9046,6 +9062,8 @@ function getConnectionType(type) {
|
|
|
9046
9062
|
switch (type) {
|
|
9047
9063
|
case Connection.NONE:
|
|
9048
9064
|
return 'none';
|
|
9065
|
+
case Connection.ETHERNET:
|
|
9066
|
+
return 'ethernet';
|
|
9049
9067
|
case Connection.WIFI:
|
|
9050
9068
|
return 'wifi';
|
|
9051
9069
|
case Connection.CELL:
|
|
@@ -9053,8 +9071,6 @@ function getConnectionType(type) {
|
|
|
9053
9071
|
case Connection.CELL_3G:
|
|
9054
9072
|
case Connection.CELL_4G:
|
|
9055
9073
|
return 'cell';
|
|
9056
|
-
case Connection.ETHERNET:
|
|
9057
|
-
return 'ethernet';
|
|
9058
9074
|
case Connection.UNKNOWN:
|
|
9059
9075
|
return 'unknown';
|
|
9060
9076
|
default:
|
|
@@ -9606,7 +9622,7 @@ class NetworkService {
|
|
|
9606
9622
|
});
|
|
9607
9623
|
}
|
|
9608
9624
|
}
|
|
9609
|
-
NetworkService.ɵprov =
|
|
9625
|
+
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" });
|
|
9610
9626
|
NetworkService.decorators = [
|
|
9611
9627
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
9612
9628
|
];
|
|
@@ -9617,16 +9633,16 @@ NetworkService.ctorParameters = () => [
|
|
|
9617
9633
|
{ type: CryptoService },
|
|
9618
9634
|
{ type: Storage },
|
|
9619
9635
|
{ type: LocalSettingsService },
|
|
9620
|
-
{ type: CacheService
|
|
9636
|
+
{ type: CacheService },
|
|
9621
9637
|
{ type: HttpClient },
|
|
9622
9638
|
{ type: undefined, decorators: [{ type: Inject, args: [ENVIRONMENT,] }] },
|
|
9623
|
-
{ type: Network
|
|
9624
|
-
{ type: SplashScreen
|
|
9639
|
+
{ type: Network, decorators: [{ type: Optional }] },
|
|
9640
|
+
{ type: SplashScreen, decorators: [{ type: Optional }] },
|
|
9625
9641
|
{ type: TranslateService, decorators: [{ type: Optional }] },
|
|
9626
9642
|
{ type: ToastController, decorators: [{ type: Optional }] }
|
|
9627
9643
|
];
|
|
9628
9644
|
|
|
9629
|
-
const ErrorCodes = {
|
|
9645
|
+
const ErrorCodes$2 = {
|
|
9630
9646
|
UNKNOWN_ERROR: 0,
|
|
9631
9647
|
LOAD_ACCOUNT_ERROR: 1,
|
|
9632
9648
|
BAD_PASSWORD: 2,
|
|
@@ -9973,7 +9989,7 @@ class EntityStore {
|
|
|
9973
9989
|
}
|
|
9974
9990
|
catch (err) {
|
|
9975
9991
|
console.error(err);
|
|
9976
|
-
throw { code: ErrorCodes.ENTITY_STORAGE_MIGRATION_FAILED, message: 'ERROR.ENTITY_STORAGE_MIGRATION_FAILED', details: err };
|
|
9992
|
+
throw { code: ErrorCodes$2.ENTITY_STORAGE_MIGRATION_FAILED, message: 'ERROR.ENTITY_STORAGE_MIGRATION_FAILED', details: err };
|
|
9977
9993
|
}
|
|
9978
9994
|
}
|
|
9979
9995
|
// Emit update event
|
|
@@ -10550,7 +10566,7 @@ class EntitiesStorage {
|
|
|
10550
10566
|
}
|
|
10551
10567
|
EntitiesStorage.TRASH_PREFIX = 'Trash#';
|
|
10552
10568
|
EntitiesStorage.REMOTE_PREFIX = 'Remote#';
|
|
10553
|
-
EntitiesStorage.ɵprov =
|
|
10569
|
+
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" });
|
|
10554
10570
|
EntitiesStorage.decorators = [
|
|
10555
10571
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
10556
10572
|
];
|
|
@@ -10650,10 +10666,10 @@ function referentialToString(obj, properties) {
|
|
|
10650
10666
|
function referentialsToString(values, properties, separator) {
|
|
10651
10667
|
return (values || []).map(v => referentialToString(v, properties)).join(separator || ', ');
|
|
10652
10668
|
}
|
|
10653
|
-
const ɵ0$
|
|
10669
|
+
const ɵ0$2 = StatusIds.ENABLE, ɵ1 = StatusIds.DISABLE, ɵ2 = StatusIds.TEMPORARY;
|
|
10654
10670
|
const StatusList = Object.freeze([
|
|
10655
10671
|
{
|
|
10656
|
-
id: ɵ0$
|
|
10672
|
+
id: ɵ0$2,
|
|
10657
10673
|
icon: 'checkmark',
|
|
10658
10674
|
label: 'REFERENTIAL.STATUS_ENUM.ENABLE'
|
|
10659
10675
|
},
|
|
@@ -10928,7 +10944,7 @@ function accountToString(data) {
|
|
|
10928
10944
|
(data.lastName || '')) || '';
|
|
10929
10945
|
}
|
|
10930
10946
|
|
|
10931
|
-
const uuidv4
|
|
10947
|
+
const uuidv4 = uuidv4Imported;
|
|
10932
10948
|
const _global = typeof global !== 'undefined' ? global : (typeof window !== 'undefined' ? window : {});
|
|
10933
10949
|
const NativeWebSocket = _global.WebSocket || _global.MozWebSocket;
|
|
10934
10950
|
/**
|
|
@@ -10972,7 +10988,7 @@ function createTrackerLink(opts) {
|
|
|
10972
10988
|
// Skip if not tracked
|
|
10973
10989
|
if (!context || !context.tracked)
|
|
10974
10990
|
return forward(operation);
|
|
10975
|
-
const id = context.serializationKey || uuidv4
|
|
10991
|
+
const id = context.serializationKey || uuidv4();
|
|
10976
10992
|
console.debug(`[apollo-tracker-link] Watching tracked query {${operation.operationName}#${id}}`);
|
|
10977
10993
|
// Clean context, before calling JSON.stringify (remove unused attributes)
|
|
10978
10994
|
const cleanContext = Object.assign(Object.assign({}, context), { optimisticResponse: null, cache: null });
|
|
@@ -11578,8 +11594,9 @@ class GraphqlService {
|
|
|
11578
11594
|
const queueLink = new QueueLink();
|
|
11579
11595
|
this._subscription.add(this._networkStatusChanged$
|
|
11580
11596
|
.subscribe(type => {
|
|
11597
|
+
const offline = type === 'none';
|
|
11581
11598
|
// Network is offline: start buffering into queue
|
|
11582
|
-
if (
|
|
11599
|
+
if (offline) {
|
|
11583
11600
|
console.info('[graphql] offline mode: enable mutations buffer');
|
|
11584
11601
|
queueLink.close();
|
|
11585
11602
|
}
|
|
@@ -11680,7 +11697,7 @@ class GraphqlService {
|
|
|
11680
11697
|
(err.networkError && ((err.networkError.error && this.toAppError(err.networkError.error))
|
|
11681
11698
|
|| this.toAppError(err.networkError)
|
|
11682
11699
|
|| (err.networkError.error && this.createAppErrorByCode(err.networkError.error.status))
|
|
11683
|
-
|| this.createAppErrorByCode(ErrorCodes.UNKNOWN_NETWORK_ERROR)))
|
|
11700
|
+
|| this.createAppErrorByCode(ErrorCodes$2.UNKNOWN_NETWORK_ERROR)))
|
|
11684
11701
|
// If graphQL: try to convert the first error found
|
|
11685
11702
|
|| (err.graphQLErrors && err.graphQLErrors.length && this.toAppError(err.graphQLErrors[0]))
|
|
11686
11703
|
|| this.toAppError(err)
|
|
@@ -11688,7 +11705,7 @@ class GraphqlService {
|
|
|
11688
11705
|
|| (err.graphQLErrors && err.graphQLErrors[0])
|
|
11689
11706
|
|| err;
|
|
11690
11707
|
console.error('[graphql] ' + (error && error.message || error), error.stack || '');
|
|
11691
|
-
if (error && error.code === ErrorCodes.UNKNOWN_NETWORK_ERROR && err.networkError && err.networkError.message) {
|
|
11708
|
+
if (error && error.code === ErrorCodes$2.UNKNOWN_NETWORK_ERROR && err.networkError && err.networkError.message) {
|
|
11692
11709
|
console.error('[graphql] original error: ' + err.networkError.message);
|
|
11693
11710
|
this.onNetworkError.next(error);
|
|
11694
11711
|
}
|
|
@@ -11724,7 +11741,7 @@ class GraphqlService {
|
|
|
11724
11741
|
return 'ERROR.UNAUTHORIZED';
|
|
11725
11742
|
case ServerErrorCodes.FORBIDDEN:
|
|
11726
11743
|
return 'ERROR.FORBIDDEN';
|
|
11727
|
-
case ErrorCodes.UNKNOWN_NETWORK_ERROR:
|
|
11744
|
+
case ErrorCodes$2.UNKNOWN_NETWORK_ERROR:
|
|
11728
11745
|
return 'ERROR.UNKNOWN_NETWORK_ERROR';
|
|
11729
11746
|
case ServerErrorCodes.BAD_UPDATE_DATE:
|
|
11730
11747
|
return 'ERROR.BAD_UPDATE_DATE';
|
|
@@ -11761,7 +11778,7 @@ class GraphqlService {
|
|
|
11761
11778
|
});
|
|
11762
11779
|
}
|
|
11763
11780
|
}
|
|
11764
|
-
GraphqlService.ɵprov =
|
|
11781
|
+
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" });
|
|
11765
11782
|
GraphqlService.decorators = [
|
|
11766
11783
|
{ type: Injectable, args: [{
|
|
11767
11784
|
providedIn: 'root'
|
|
@@ -11778,7 +11795,7 @@ GraphqlService.ctorParameters = () => [
|
|
|
11778
11795
|
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [APP_GRAPHQL_TYPE_POLICIES,] }] }
|
|
11779
11796
|
];
|
|
11780
11797
|
|
|
11781
|
-
const sha256
|
|
11798
|
+
const sha256 = require('hash.js/lib/hash/sha/256');
|
|
11782
11799
|
class BaseGraphqlServiceOptions {
|
|
11783
11800
|
}
|
|
11784
11801
|
// eslint-disable-next-line @angular-eslint/directive-class-suffix
|
|
@@ -11928,8 +11945,8 @@ class BaseGraphqlService {
|
|
|
11928
11945
|
}
|
|
11929
11946
|
/* -- protected methods -- */
|
|
11930
11947
|
computeMutableWatchQueryId(opts) {
|
|
11931
|
-
const queryName = opts.queryName || sha256
|
|
11932
|
-
const variablesKey = opts.variables && sha256
|
|
11948
|
+
const queryName = opts.queryName || sha256().update(JSON.stringify(opts.query)).digest('hex').substring(0, 8);
|
|
11949
|
+
const variablesKey = opts.variables && sha256().update(JSON.stringify(opts.variables)).digest('hex').substring(0, 8) || '';
|
|
11933
11950
|
return [queryName, opts.arrayFieldName, variablesKey].join('|');
|
|
11934
11951
|
}
|
|
11935
11952
|
findMutableWatchQueries(opts) {
|
|
@@ -11992,7 +12009,7 @@ const DEFAULT_AVATAR_IMAGE = 'assets/img/person.png';
|
|
|
11992
12009
|
/* ------------------------------------
|
|
11993
12010
|
* GraphQL queries
|
|
11994
12011
|
* ------------------------------------*/
|
|
11995
|
-
const Fragments = {
|
|
12012
|
+
const Fragments$1 = {
|
|
11996
12013
|
account: gql `
|
|
11997
12014
|
fragment AccountFragment on AccountVO {
|
|
11998
12015
|
id
|
|
@@ -12025,13 +12042,13 @@ const Fragments = {
|
|
|
12025
12042
|
`
|
|
12026
12043
|
};
|
|
12027
12044
|
// Load account query
|
|
12028
|
-
const LoadQuery = gql `
|
|
12045
|
+
const LoadQuery$1 = gql `
|
|
12029
12046
|
query Account {
|
|
12030
12047
|
data: account {
|
|
12031
12048
|
...AccountFragment
|
|
12032
12049
|
}
|
|
12033
12050
|
}
|
|
12034
|
-
${Fragments.account}
|
|
12051
|
+
${Fragments$1.account}
|
|
12035
12052
|
`;
|
|
12036
12053
|
// Check email query
|
|
12037
12054
|
const IsEmailExistsQuery = gql `
|
|
@@ -12040,13 +12057,13 @@ const IsEmailExistsQuery = gql `
|
|
|
12040
12057
|
}
|
|
12041
12058
|
`;
|
|
12042
12059
|
// Save (create or update) account mutation
|
|
12043
|
-
const SaveMutation = gql `
|
|
12060
|
+
const SaveMutation$1 = gql `
|
|
12044
12061
|
mutation SaveAccount($data:AccountVOInput){
|
|
12045
12062
|
data: saveAccount(account: $data){
|
|
12046
12063
|
...AccountFragment
|
|
12047
12064
|
}
|
|
12048
12065
|
}
|
|
12049
|
-
${Fragments.account}
|
|
12066
|
+
${Fragments$1.account}
|
|
12050
12067
|
`;
|
|
12051
12068
|
// Create account mutation
|
|
12052
12069
|
const CreateMutation = gql `
|
|
@@ -12055,7 +12072,7 @@ const CreateMutation = gql `
|
|
|
12055
12072
|
...AccountFragment
|
|
12056
12073
|
}
|
|
12057
12074
|
}
|
|
12058
|
-
${Fragments.account}
|
|
12075
|
+
${Fragments$1.account}
|
|
12059
12076
|
`;
|
|
12060
12077
|
// Sent confirmation email
|
|
12061
12078
|
const SendConfirmEmailMutation = gql `
|
|
@@ -12403,7 +12420,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
12403
12420
|
catch (error) {
|
|
12404
12421
|
console.error(error);
|
|
12405
12422
|
this.resetData();
|
|
12406
|
-
throw { code: ErrorCodes.UNKNOWN_ERROR, message: 'ERROR.SCRYPT_ERROR' };
|
|
12423
|
+
throw { code: ErrorCodes$2.UNKNOWN_ERROR, message: 'ERROR.SCRYPT_ERROR' };
|
|
12407
12424
|
}
|
|
12408
12425
|
// Store pubkey+keypair
|
|
12409
12426
|
this.data.pubkey = Base58.encode(keypair.publicKey);
|
|
@@ -12437,7 +12454,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
12437
12454
|
}
|
|
12438
12455
|
catch (err) {
|
|
12439
12456
|
// If account not found, check if email is valid
|
|
12440
|
-
if (err && +(err.code) === ErrorCodes.LOAD_ACCOUNT_ERROR) {
|
|
12457
|
+
if (err && +(err.code) === ErrorCodes$2.LOAD_ACCOUNT_ERROR) {
|
|
12441
12458
|
// Check email exists
|
|
12442
12459
|
if (data.username.indexOf('@') !== -1) {
|
|
12443
12460
|
let isEmailExists;
|
|
@@ -12449,11 +12466,11 @@ class AccountService extends BaseGraphqlService {
|
|
|
12449
12466
|
}
|
|
12450
12467
|
// Email not exists (no account)
|
|
12451
12468
|
if (!isEmailExists) {
|
|
12452
|
-
throw { code: ErrorCodes.UNKNOWN_ACCOUNT_EMAIL, message: 'ERROR.UNKNOWN_ACCOUNT_EMAIL' };
|
|
12469
|
+
throw { code: ErrorCodes$2.UNKNOWN_ACCOUNT_EMAIL, message: 'ERROR.UNKNOWN_ACCOUNT_EMAIL' };
|
|
12453
12470
|
}
|
|
12454
12471
|
}
|
|
12455
12472
|
// Email exists, so error = 'bad password'
|
|
12456
|
-
throw { code: ErrorCodes.BAD_PASSWORD, message: 'ERROR.BAD_PASSWORD' };
|
|
12473
|
+
throw { code: ErrorCodes$2.BAD_PASSWORD, message: 'ERROR.BAD_PASSWORD' };
|
|
12457
12474
|
}
|
|
12458
12475
|
throw err; // resend the first error
|
|
12459
12476
|
}
|
|
@@ -12578,8 +12595,8 @@ class AccountService extends BaseGraphqlService {
|
|
|
12578
12595
|
// Load remotely
|
|
12579
12596
|
else {
|
|
12580
12597
|
const { data } = yield this.graphql.query({
|
|
12581
|
-
query: LoadQuery,
|
|
12582
|
-
error: { code: ErrorCodes.LOAD_ACCOUNT_ERROR, message: 'ERROR.LOAD_ACCOUNT_ERROR' },
|
|
12598
|
+
query: LoadQuery$1,
|
|
12599
|
+
error: { code: ErrorCodes$2.LOAD_ACCOUNT_ERROR, message: 'ERROR.LOAD_ACCOUNT_ERROR' },
|
|
12583
12600
|
fetchPolicy: opts && opts.fetchPolicy || 'no-cache' || undefined
|
|
12584
12601
|
});
|
|
12585
12602
|
json = data;
|
|
@@ -12606,7 +12623,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
12606
12623
|
return __awaiter(this, void 0, void 0, function* () {
|
|
12607
12624
|
const isEmailExists = yield this.isEmailExists(email);
|
|
12608
12625
|
if (isEmailExists) {
|
|
12609
|
-
throw { code: ErrorCodes.EMAIL_ALREADY_REGISTERED, message: 'ERROR.EMAIL_ALREADY_REGISTERED' };
|
|
12626
|
+
throw { code: ErrorCodes$2.EMAIL_ALREADY_REGISTERED, message: 'ERROR.EMAIL_ALREADY_REGISTERED' };
|
|
12610
12627
|
}
|
|
12611
12628
|
});
|
|
12612
12629
|
}
|
|
@@ -12642,7 +12659,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
12642
12659
|
locale
|
|
12643
12660
|
},
|
|
12644
12661
|
error: {
|
|
12645
|
-
code: ErrorCodes.SENT_CONFIRMATION_EMAIL_FAILED,
|
|
12662
|
+
code: ErrorCodes$2.SENT_CONFIRMATION_EMAIL_FAILED,
|
|
12646
12663
|
message: 'ERROR.SENT_ACCOUNT_CONFIRMATION_EMAIL_FAILED'
|
|
12647
12664
|
}
|
|
12648
12665
|
});
|
|
@@ -12658,7 +12675,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
12658
12675
|
code
|
|
12659
12676
|
},
|
|
12660
12677
|
error: {
|
|
12661
|
-
code: ErrorCodes.CONFIRM_EMAIL_FAILED,
|
|
12678
|
+
code: ErrorCodes$2.CONFIRM_EMAIL_FAILED,
|
|
12662
12679
|
message: 'ERROR.CONFIRM_ACCOUNT_EMAIL_FAILED'
|
|
12663
12680
|
}
|
|
12664
12681
|
});
|
|
@@ -12676,7 +12693,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
12676
12693
|
interval: 10
|
|
12677
12694
|
},
|
|
12678
12695
|
error: {
|
|
12679
|
-
code: ErrorCodes.SUBSCRIBE_ACCOUNT_ERROR,
|
|
12696
|
+
code: ErrorCodes$2.SUBSCRIBE_ACCOUNT_ERROR,
|
|
12680
12697
|
message: 'ERROR.ACCOUNT.SUBSCRIBE_ACCOUNT_ERROR'
|
|
12681
12698
|
}
|
|
12682
12699
|
}).subscribe({
|
|
@@ -12778,7 +12795,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
12778
12795
|
throw error;
|
|
12779
12796
|
console.error(error);
|
|
12780
12797
|
throw {
|
|
12781
|
-
code: ErrorCodes.LOAD_ACCOUNT_ERROR,
|
|
12798
|
+
code: ErrorCodes$2.LOAD_ACCOUNT_ERROR,
|
|
12782
12799
|
message: 'ERROR.LOAD_ACCOUNT_ERROR'
|
|
12783
12800
|
};
|
|
12784
12801
|
}
|
|
@@ -12923,7 +12940,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
12923
12940
|
if (!isNew) {
|
|
12924
12941
|
const existingAccount = yield this.load({ fetchPolicy: 'network-only' });
|
|
12925
12942
|
if (!existingAccount || !existingAccount.updateDate) {
|
|
12926
|
-
throw { code: ErrorCodes.ACCOUNT_NOT_EXISTS, message: 'ERROR.ACCOUNT_NOT_EXISTS' };
|
|
12943
|
+
throw { code: ErrorCodes$2.ACCOUNT_NOT_EXISTS, message: 'ERROR.ACCOUNT_NOT_EXISTS' };
|
|
12927
12944
|
}
|
|
12928
12945
|
this.copyIdAndUpdateDate(existingAccount, account);
|
|
12929
12946
|
}
|
|
@@ -12932,10 +12949,10 @@ class AccountService extends BaseGraphqlService {
|
|
|
12932
12949
|
delete json.profiles;
|
|
12933
12950
|
// Execute mutation
|
|
12934
12951
|
const { data } = yield this.graphql.mutate({
|
|
12935
|
-
mutation: isNew ? CreateMutation : SaveMutation,
|
|
12952
|
+
mutation: isNew ? CreateMutation : SaveMutation$1,
|
|
12936
12953
|
variables: { data: json },
|
|
12937
12954
|
error: {
|
|
12938
|
-
code: ErrorCodes.SAVE_ACCOUNT_ERROR,
|
|
12955
|
+
code: ErrorCodes$2.SAVE_ACCOUNT_ERROR,
|
|
12939
12956
|
message: 'ERROR.SAVE_ACCOUNT_ERROR'
|
|
12940
12957
|
}
|
|
12941
12958
|
});
|
|
@@ -12955,7 +12972,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
12955
12972
|
if (counter > 4) {
|
|
12956
12973
|
if (this._debug)
|
|
12957
12974
|
console.debug(`[account] Failed to authentication on pod (after ${counter} attempts)`);
|
|
12958
|
-
throw { code: ErrorCodes.AUTH_SERVER_ERROR, message: 'ERROR.AUTH_SERVER_ERROR' };
|
|
12975
|
+
throw { code: ErrorCodes$2.AUTH_SERVER_ERROR, message: 'ERROR.AUTH_SERVER_ERROR' };
|
|
12959
12976
|
}
|
|
12960
12977
|
// Check if valid
|
|
12961
12978
|
if (token) {
|
|
@@ -12965,7 +12982,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
12965
12982
|
token
|
|
12966
12983
|
},
|
|
12967
12984
|
error: {
|
|
12968
|
-
code: ErrorCodes.UNAUTHORIZED,
|
|
12985
|
+
code: ErrorCodes$2.UNAUTHORIZED,
|
|
12969
12986
|
message: 'ERROR.UNAUTHORIZED'
|
|
12970
12987
|
},
|
|
12971
12988
|
fetchPolicy: 'no-cache'
|
|
@@ -12981,7 +12998,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
12981
12998
|
}
|
|
12982
12999
|
// Generate a new token
|
|
12983
13000
|
const challengeError = {
|
|
12984
|
-
code: ErrorCodes.AUTH_CHALLENGE_ERROR,
|
|
13001
|
+
code: ErrorCodes$2.AUTH_CHALLENGE_ERROR,
|
|
12985
13002
|
message: 'ERROR.AUTH_CHALLENGE_ERROR'
|
|
12986
13003
|
};
|
|
12987
13004
|
const data = yield this.graphql.query({
|
|
@@ -13015,7 +13032,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
13015
13032
|
target.settings.updateDate = source.settings && source.settings.updateDate || target.settings.updateDate;
|
|
13016
13033
|
}
|
|
13017
13034
|
}
|
|
13018
|
-
AccountService.ɵprov =
|
|
13035
|
+
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(ENVIRONMENT)); }, token: AccountService, providedIn: "root" });
|
|
13019
13036
|
AccountService.decorators = [
|
|
13020
13037
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
13021
13038
|
];
|
|
@@ -13275,7 +13292,7 @@ const CONFIGURATION_STORAGE_KEY = 'configuration';
|
|
|
13275
13292
|
/* ------------------------------------
|
|
13276
13293
|
* GraphQL queries
|
|
13277
13294
|
* ------------------------------------*/
|
|
13278
|
-
const Fragments
|
|
13295
|
+
const Fragments = {
|
|
13279
13296
|
config: gql `
|
|
13280
13297
|
fragment ConfigFragment on ConfigurationVO {
|
|
13281
13298
|
id
|
|
@@ -13302,22 +13319,22 @@ const Fragments$1 = {
|
|
|
13302
13319
|
}
|
|
13303
13320
|
`
|
|
13304
13321
|
};
|
|
13305
|
-
const LoadQuery
|
|
13322
|
+
const LoadQuery = gql `
|
|
13306
13323
|
query Configuration{
|
|
13307
13324
|
data: configuration{
|
|
13308
13325
|
...ConfigFragment
|
|
13309
13326
|
}
|
|
13310
13327
|
}
|
|
13311
|
-
${Fragments
|
|
13328
|
+
${Fragments.config}
|
|
13312
13329
|
`;
|
|
13313
13330
|
// Save (create or update) account mutation
|
|
13314
|
-
const SaveMutation
|
|
13331
|
+
const SaveMutation = gql `
|
|
13315
13332
|
mutation SaveConfiguration($data: ConfigurationVOInput){
|
|
13316
13333
|
data: saveConfiguration(config: $data){
|
|
13317
13334
|
...ConfigFragment
|
|
13318
13335
|
}
|
|
13319
13336
|
}
|
|
13320
|
-
${Fragments
|
|
13337
|
+
${Fragments.config}
|
|
13321
13338
|
`;
|
|
13322
13339
|
const ClearCache = gql `
|
|
13323
13340
|
query ClearCache($name: String) {
|
|
@@ -13405,12 +13422,12 @@ class ConfigService extends BaseGraphqlService {
|
|
|
13405
13422
|
return __awaiter(this, void 0, void 0, function* () {
|
|
13406
13423
|
const now = Date.now();
|
|
13407
13424
|
console.debug('[config] Loading Pod configuration...');
|
|
13408
|
-
const query = opts && opts.query || LoadQuery
|
|
13425
|
+
const query = opts && opts.query || LoadQuery;
|
|
13409
13426
|
const variables = opts && opts.variables || undefined;
|
|
13410
13427
|
const res = yield this.graphql.query({
|
|
13411
13428
|
query,
|
|
13412
13429
|
variables,
|
|
13413
|
-
error: { code: ErrorCodes.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
|
|
13430
|
+
error: { code: ErrorCodes$2.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
|
|
13414
13431
|
fetchPolicy: opts && opts.fetchPolicy || undefined /*default*/
|
|
13415
13432
|
});
|
|
13416
13433
|
const data = res && res.data ? Configuration.fromObject(res.data) : undefined;
|
|
@@ -13435,12 +13452,12 @@ class ConfigService extends BaseGraphqlService {
|
|
|
13435
13452
|
const json = config.asObject();
|
|
13436
13453
|
// Execute mutation
|
|
13437
13454
|
const res = yield this.graphql.mutate({
|
|
13438
|
-
mutation: SaveMutation
|
|
13455
|
+
mutation: SaveMutation,
|
|
13439
13456
|
variables: {
|
|
13440
13457
|
data: json
|
|
13441
13458
|
},
|
|
13442
13459
|
error: {
|
|
13443
|
-
code: ErrorCodes.SAVE_CONFIG_ERROR,
|
|
13460
|
+
code: ErrorCodes$2.SAVE_CONFIG_ERROR,
|
|
13444
13461
|
message: 'ERROR.SAVE_CONFIG_ERROR'
|
|
13445
13462
|
}
|
|
13446
13463
|
});
|
|
@@ -13466,7 +13483,7 @@ class ConfigService extends BaseGraphqlService {
|
|
|
13466
13483
|
const res = yield this.graphql.query({
|
|
13467
13484
|
query: CacheStatistics,
|
|
13468
13485
|
variables: null,
|
|
13469
|
-
error: { code: ErrorCodes.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
|
|
13486
|
+
error: { code: ErrorCodes$2.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
|
|
13470
13487
|
fetchPolicy: 'network-only'
|
|
13471
13488
|
});
|
|
13472
13489
|
const data = res && res.cacheStatistics || undefined;
|
|
@@ -13482,7 +13499,7 @@ class ConfigService extends BaseGraphqlService {
|
|
|
13482
13499
|
const res = yield this.graphql.query({
|
|
13483
13500
|
query: ClearCache,
|
|
13484
13501
|
variables,
|
|
13485
|
-
error: { code: ErrorCodes.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
|
|
13502
|
+
error: { code: ErrorCodes$2.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
|
|
13486
13503
|
fetchPolicy: 'network-only'
|
|
13487
13504
|
});
|
|
13488
13505
|
const data = res && res.clearCache || undefined;
|
|
@@ -13641,7 +13658,7 @@ class ConfigService extends BaseGraphqlService {
|
|
|
13641
13658
|
});
|
|
13642
13659
|
}
|
|
13643
13660
|
}
|
|
13644
|
-
ConfigService.ɵprov =
|
|
13661
|
+
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(ENVIRONMENT), i0.ɵɵinject(APP_CONFIG_OPTIONS, 8)); }, token: ConfigService, providedIn: "root" });
|
|
13645
13662
|
ConfigService.decorators = [
|
|
13646
13663
|
{ type: Injectable, args: [{
|
|
13647
13664
|
providedIn: 'root',
|
|
@@ -13660,9 +13677,9 @@ ConfigService.ctorParameters = () => [
|
|
|
13660
13677
|
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [APP_CONFIG_OPTIONS,] }] }
|
|
13661
13678
|
];
|
|
13662
13679
|
|
|
13663
|
-
const moment$
|
|
13680
|
+
const moment$2 = momentImported;
|
|
13664
13681
|
class PlatformService {
|
|
13665
|
-
constructor(platform, cdkPlatform, toastController, translate, dateAdapter, entitiesStorage, settings, networkService, accountService, configService, cache, storage, audioProvider, environment, statusBar, keyboard, splashScreen, browser) {
|
|
13682
|
+
constructor(platform, cdkPlatform, toastController, translate, dateAdapter, entitiesStorage, settings, networkService, accountService, configService, cache, storage, audioProvider, environment, statusBar, keyboard, splashScreen, browser, downloader) {
|
|
13666
13683
|
this.platform = platform;
|
|
13667
13684
|
this.cdkPlatform = cdkPlatform;
|
|
13668
13685
|
this.toastController = toastController;
|
|
@@ -13681,6 +13698,7 @@ class PlatformService {
|
|
|
13681
13698
|
this.keyboard = keyboard;
|
|
13682
13699
|
this.splashScreen = splashScreen;
|
|
13683
13700
|
this.browser = browser;
|
|
13701
|
+
this.downloader = downloader;
|
|
13684
13702
|
this._started = false;
|
|
13685
13703
|
this._debug = !environment.production;
|
|
13686
13704
|
if (this._debug)
|
|
@@ -13703,6 +13721,9 @@ class PlatformService {
|
|
|
13703
13721
|
isWebOrDesktop() {
|
|
13704
13722
|
return !this.platform.is('mobile') || this.platform.is('mobileweb');
|
|
13705
13723
|
}
|
|
13724
|
+
isAndroidCordova() {
|
|
13725
|
+
return this._android && this._cordova;
|
|
13726
|
+
}
|
|
13706
13727
|
width() {
|
|
13707
13728
|
return this.platform.width();
|
|
13708
13729
|
}
|
|
@@ -13721,6 +13742,8 @@ class PlatformService {
|
|
|
13721
13742
|
this._startPromise = this.platform.ready()
|
|
13722
13743
|
.then(() => {
|
|
13723
13744
|
this._mobile = this.platform.is('mobile');
|
|
13745
|
+
this._cordova = this.platform.is('cordova');
|
|
13746
|
+
this._android = this.platform.is('android');
|
|
13724
13747
|
this.configureCordovaPlugins(this._mobile);
|
|
13725
13748
|
this.touchUi = this._mobile || this.platform.is('tablet') || this.platform.is('phablet');
|
|
13726
13749
|
// Force mobile in settings
|
|
@@ -13781,6 +13804,7 @@ class PlatformService {
|
|
|
13781
13804
|
filter(() => this._started), first()).toPromise();
|
|
13782
13805
|
}
|
|
13783
13806
|
open(url, target, features, replace) {
|
|
13807
|
+
console.info(`[platform] Opening link: ${url}`);
|
|
13784
13808
|
if (this.browser && this._mobile) {
|
|
13785
13809
|
this.browser.create(url, target, features).show();
|
|
13786
13810
|
}
|
|
@@ -13788,10 +13812,20 @@ class PlatformService {
|
|
|
13788
13812
|
window.open(url, target, features, replace);
|
|
13789
13813
|
}
|
|
13790
13814
|
}
|
|
13791
|
-
|
|
13792
|
-
|
|
13793
|
-
|
|
13794
|
-
|
|
13815
|
+
download(request) {
|
|
13816
|
+
if (!request || !request.uri)
|
|
13817
|
+
throw new Error('Missing argument \'request\' or \'request.uri\'');
|
|
13818
|
+
if (this._android && this._cordova) {
|
|
13819
|
+
request = Object.assign(Object.assign({ visibleInDownloadsUi: true, notificationVisibility: NotificationVisibility.VisibleNotifyCompleted, title: request.filename || '' }, request), { destinationInExternalFilesDir: Object.assign({ dirType: 'Downloads', subPath: request.filename || request.title || '' }, request.destinationInExternalFilesDir) });
|
|
13820
|
+
this.downloader.download(request)
|
|
13821
|
+
.then((location) => console.info('[platform] File successfully downloaded at:' + location))
|
|
13822
|
+
.catch((error) => console.error(error));
|
|
13823
|
+
}
|
|
13824
|
+
// Web mode: open URI using the browser
|
|
13825
|
+
else {
|
|
13826
|
+
this.open(request.uri, '_system', 'location=yes');
|
|
13827
|
+
}
|
|
13828
|
+
}
|
|
13795
13829
|
/* -- protected methods -- */
|
|
13796
13830
|
configureCordovaPlugins(mobile) {
|
|
13797
13831
|
console.info('[platform] Configuring Cordova plugins...');
|
|
@@ -13825,16 +13859,16 @@ class PlatformService {
|
|
|
13825
13859
|
}
|
|
13826
13860
|
// config moment lib
|
|
13827
13861
|
try {
|
|
13828
|
-
moment$
|
|
13862
|
+
moment$2.locale(event.lang);
|
|
13829
13863
|
console.debug('[platform] Use locale {' + event.lang + '}');
|
|
13830
13864
|
}
|
|
13831
13865
|
// If error, fallback to en
|
|
13832
13866
|
catch (err) {
|
|
13833
|
-
moment$
|
|
13867
|
+
moment$2.locale('en');
|
|
13834
13868
|
console.warn('[platform] Unknown local for moment lib. Using default [en]');
|
|
13835
13869
|
}
|
|
13836
13870
|
// Config date adapter
|
|
13837
|
-
this.dateAdapter.setLocale(moment$
|
|
13871
|
+
this.dateAdapter.setLocale(moment$2.locale());
|
|
13838
13872
|
}
|
|
13839
13873
|
});
|
|
13840
13874
|
this.settings.onChange.subscribe(data => {
|
|
@@ -13971,7 +14005,7 @@ class PlatformService {
|
|
|
13971
14005
|
});
|
|
13972
14006
|
}
|
|
13973
14007
|
}
|
|
13974
|
-
PlatformService.ɵprov =
|
|
14008
|
+
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" });
|
|
13975
14009
|
PlatformService.decorators = [
|
|
13976
14010
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
13977
14011
|
];
|
|
@@ -13986,14 +14020,15 @@ PlatformService.ctorParameters = () => [
|
|
|
13986
14020
|
{ type: NetworkService },
|
|
13987
14021
|
{ type: AccountService },
|
|
13988
14022
|
{ type: ConfigService },
|
|
13989
|
-
{ type: CacheService
|
|
14023
|
+
{ type: CacheService },
|
|
13990
14024
|
{ type: Storage },
|
|
13991
14025
|
{ type: AudioProvider },
|
|
13992
14026
|
{ type: undefined, decorators: [{ type: Inject, args: [ENVIRONMENT,] }] },
|
|
13993
|
-
{ type: StatusBar
|
|
14027
|
+
{ type: StatusBar, decorators: [{ type: Optional }] },
|
|
13994
14028
|
{ type: Keyboard, decorators: [{ type: Optional }] },
|
|
13995
|
-
{ type: SplashScreen
|
|
13996
|
-
{ type: InAppBrowser
|
|
14029
|
+
{ type: SplashScreen, decorators: [{ type: Optional }] },
|
|
14030
|
+
{ type: InAppBrowser, decorators: [{ type: Optional }] },
|
|
14031
|
+
{ type: Downloader, decorators: [{ type: Optional }] }
|
|
13997
14032
|
];
|
|
13998
14033
|
|
|
13999
14034
|
class AppHelpModal {
|
|
@@ -14057,7 +14092,7 @@ class MatStepperI18n extends MatStepperIntl {
|
|
|
14057
14092
|
this.optionalLabel = this.translate.instant('COMMON.OPTIONAL');
|
|
14058
14093
|
}
|
|
14059
14094
|
}
|
|
14060
|
-
MatStepperI18n.ɵprov =
|
|
14095
|
+
MatStepperI18n.ɵprov = i0.ɵɵdefineInjectable({ factory: function MatStepperI18n_Factory() { return new MatStepperI18n(i0.ɵɵinject(i1$1.TranslateService)); }, token: MatStepperI18n, providedIn: "root" });
|
|
14061
14096
|
MatStepperI18n.decorators = [
|
|
14062
14097
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
14063
14098
|
];
|
|
@@ -15049,7 +15084,7 @@ function state2side(state) {
|
|
|
15049
15084
|
return 1;
|
|
15050
15085
|
}
|
|
15051
15086
|
}
|
|
15052
|
-
const ɵ0$
|
|
15087
|
+
const ɵ0$1 = (defaultStateSize) => [
|
|
15053
15088
|
Math.round((rgbArrayMap.red[0] - 50) / defaultStateSize),
|
|
15054
15089
|
Math.round((255 - rgbArrayMap.red[1]) / defaultStateSize),
|
|
15055
15090
|
Math.round((255 - rgbArrayMap.red[2]) / defaultStateSize)
|
|
@@ -15057,7 +15092,7 @@ const ɵ0$9 = (defaultStateSize) => [
|
|
|
15057
15092
|
const SCALE_OPTIONS_DEFAULT = {
|
|
15058
15093
|
startColor: rgbArrayMap.red,
|
|
15059
15094
|
startStates: [0, 2, 3],
|
|
15060
|
-
startStepsFn: ɵ0$
|
|
15095
|
+
startStepsFn: ɵ0$1
|
|
15061
15096
|
};
|
|
15062
15097
|
/**
|
|
15063
15098
|
* Internal function, that create a colors scale, using iteration
|
|
@@ -15149,21 +15184,21 @@ function linearColorGradient(count, options) {
|
|
|
15149
15184
|
return result;
|
|
15150
15185
|
}
|
|
15151
15186
|
|
|
15152
|
-
class EntityTestClass {
|
|
15187
|
+
class EntityTestClass$1 {
|
|
15153
15188
|
}
|
|
15154
|
-
const FAKE_ENTITIES = [
|
|
15189
|
+
const FAKE_ENTITIES$1 = [
|
|
15155
15190
|
{ id: 1, label: 'AAA', name: 'Item A', description: 'Very long description A', comments: 'Very very long comments... again for A' },
|
|
15156
15191
|
{ id: 2, label: 'BBB', name: 'Item B', description: 'Very long description B', comments: 'Very very long comments... again for B' },
|
|
15157
15192
|
{ id: 3, label: 'CCC', name: 'Item C', description: 'Very long description C', comments: 'Very very long comments... again for C' }
|
|
15158
15193
|
];
|
|
15159
|
-
function deepCopy(values, size) {
|
|
15194
|
+
function deepCopy$1(values, size) {
|
|
15160
15195
|
if (isNil(size)) {
|
|
15161
|
-
return (values || FAKE_ENTITIES).map(entity => Object.assign({}, entity));
|
|
15196
|
+
return (values || FAKE_ENTITIES$1).map(entity => Object.assign({}, entity));
|
|
15162
15197
|
}
|
|
15163
15198
|
let result = [];
|
|
15164
15199
|
let i = 1;
|
|
15165
15200
|
while (result.length < size) {
|
|
15166
|
-
result = result.concat((values || FAKE_ENTITIES).map(entity => {
|
|
15201
|
+
result = result.concat((values || FAKE_ENTITIES$1).map(entity => {
|
|
15167
15202
|
const name = entity.name + ' #' + i;
|
|
15168
15203
|
return Object.assign(Object.assign({}, entity), { id: i++, name });
|
|
15169
15204
|
}));
|
|
@@ -15173,7 +15208,7 @@ function deepCopy(values, size) {
|
|
|
15173
15208
|
class AutocompleteTestPage {
|
|
15174
15209
|
constructor(formBuilder) {
|
|
15175
15210
|
this.formBuilder = formBuilder;
|
|
15176
|
-
this._items = deepCopy(FAKE_ENTITIES, 100);
|
|
15211
|
+
this._items = deepCopy$1(FAKE_ENTITIES$1, 100);
|
|
15177
15212
|
this.$items = new BehaviorSubject(undefined);
|
|
15178
15213
|
this.autocompleteFields = new MatAutocompleteConfigHolder();
|
|
15179
15214
|
this.memoryHide = false;
|
|
@@ -15217,7 +15252,7 @@ class AutocompleteTestPage {
|
|
|
15217
15252
|
});
|
|
15218
15253
|
// From items
|
|
15219
15254
|
this.autocompleteFields.add('entity-items-large', {
|
|
15220
|
-
items: FAKE_ENTITIES.slice(),
|
|
15255
|
+
items: FAKE_ENTITIES$1.slice(),
|
|
15221
15256
|
attributes: ['label', 'name', 'description', 'comments'],
|
|
15222
15257
|
displayWith: this.entityToString
|
|
15223
15258
|
});
|
|
@@ -15227,12 +15262,12 @@ class AutocompleteTestPage {
|
|
|
15227
15262
|
loadData() {
|
|
15228
15263
|
return __awaiter(this, void 0, void 0, function* () {
|
|
15229
15264
|
const data = {
|
|
15230
|
-
entity: deepCopy(FAKE_ENTITIES)[0],
|
|
15265
|
+
entity: deepCopy$1(FAKE_ENTITIES$1)[0],
|
|
15231
15266
|
// This item is NOT in the items list => i should be displayed anyway
|
|
15232
15267
|
missingEntity: {
|
|
15233
15268
|
id: -1, label: '??', name: 'Missing item'
|
|
15234
15269
|
},
|
|
15235
|
-
disableEntity: deepCopy(FAKE_ENTITIES)[2]
|
|
15270
|
+
disableEntity: deepCopy$1(FAKE_ENTITIES$1)[2]
|
|
15236
15271
|
};
|
|
15237
15272
|
this.form.setValue(data);
|
|
15238
15273
|
// Load observables
|
|
@@ -15302,7 +15337,7 @@ class AutocompleteTestPage {
|
|
|
15302
15337
|
AutocompleteTestPage.decorators = [
|
|
15303
15338
|
{ type: Component, args: [{
|
|
15304
15339
|
selector: 'app-autocomplete-test',
|
|
15305
|
-
template: "<ion-header>\n <ion-toolbar color=\"primary\">\n\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Autocomplete field test page</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\">\n\n <!-- Tab nav - mobile/desktop mode -->\n <nav mat-tab-nav-bar>\n <a mat-tab-link\n [active]=\"mode==='mobile'\"\n (click)=\"toggleMode('mobile')\">\n <mat-label>Mobile</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode==='desktop'\"\n (click)=\"toggleMode('desktop')\">\n <mat-label>Desktop</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode==='memory'\"\n (click)=\"toggleMode('memory')\">\n <mat-label>Memory leak debug</mat-label>\n </a>\n <a mat-tab-link\n [active]=\"mode==='temp'\"\n (click)=\"toggleMode('temp')\">\n <mat-label>Temporary</mat-label>\n </a>\n </nav>\n\n <form class=\"form-container\" [formGroup]=\"form\" (ngSubmit)=\"doSubmit($event)\">\n\n <!--<ion-grid *ngIf=\"mode === 'temp'\">\n <ion-row>\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n Items is an Observable\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>items: Observable<any[]></pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [logPrefix]=\"'[combo-desktop-2]'\"\n [compareWith]=\"compareWithFn\"\n [mobile]=\"false\"\n ></mat-autocomplete-field>\n </ion-card-content>\n\n </ion-card>\n </ion-col>\n </ion-row>\n\n\n </ion-grid>-->\n\n\n <ion-grid *ngIf=\"mode === 'memory'\">\n\n <!-- debugging memory leak -->\n <ion-row><ion-col><ion-text><h4>Debug memory leak</h4></ion-text></ion-col></ion-row>\n <ion-row>\n <ion-col size=\"2\">\n <mat-form-field floatLabel=\"always\">\n <input matInput type=\"text\" hidden placeholder=\"Items type\">\n <mat-select (selectionChange)=\"memoryAutocompleteFieldName=$event.value\" [value]=\"memoryAutocompleteFieldName\">\n <mat-option value=\"entity-$items\">Observable</mat-option>\n <mat-option value=\"entity-suggestFn\">Suggest function</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n <ion-col size=\"1\" class=\"ion-no-padding\">\n <mat-form-field floatLabel=\"always\" >\n <input matInput type=\"text\" hidden placeholder=\"Mobile ?\">\n <mat-checkbox (change)=\"memoryMobile=$event.checked\" [checked]=\"memoryMobile\">\n </mat-checkbox>\n </mat-form-field>\n </ion-col>\n\n <ion-col size=\"2\">\n <ion-button *ngIf=\"!memoryTimer\" (click)=\"startMemoryTimer()\" color=\"tertiary\">Start</ion-button>\n <ion-button *ngIf=\"memoryTimer\" (click)=\"stopMemoryTimer()\" color=\"tertiary\">Stop</ion-button>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col>\n <mat-autocomplete-field formControlName=\"entity\"\n *ngIf=\"!memoryHide && memoryAutocompleteFieldName\"\n [config]=\"autocompleteFields.get(memoryAutocompleteFieldName)\"\n [mobile]=\"memoryMobile\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-memory-leak]'\">\n </mat-autocomplete-field>\n </ion-col>\n </ion-row>\n\n </ion-grid>\n\n <!-- Mobile mode -->\n <ion-grid *ngIf=\"mode === 'mobile'\">\n\n <ion-row>\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Suggest() function\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>mobile: true, suggestFn: (searchText, filter) => any[]</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-suggestFn')\"\n [mobile]=\"true\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-mobile-1]'\"\n [required]=\"true\"\n placeholder=\"Suggest field\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Items is an Observable\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>mobile: true, items: Observable<any[]></pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"true\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-mobile-observable]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Control value if missing in items\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>mobile: true, items: Observable<any[]></pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"missingEntity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"true\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-mobile-2]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Disabled control\n </ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"disableEntity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"true\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-mobile-2]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n </ion-row>\n\n <ion-row>\n <ion-col size=\"9\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Change filter\n </ion-label>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre></pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <ion-button (click)=\"updateFilter('entity-items-filter')\">Filter on: {{autocompleteFields.get('entity-items-filter').filter?.searchAttribute }}</ion-button>\n </ion-col>\n <ion-col>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-filter')\"\n [mobile]=\"true\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-mobile-filter]'\"\n ></mat-autocomplete-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"3\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Large combo\n </ion-label>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>class=\"min-width-large\"</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-large')\"\n [mobile]=\"true\"\n class=\"min-width-large\"\n panelWidth=\"400px\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-mobile-large]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n <!-- Desktop mode -->\n <ion-grid *ngIf=\"mode === 'desktop'\">\n <ion-row>\n <ion-col><ion-text><h4>Desktop mode</h4></ion-text></ion-col>\n </ion-row>\n <ion-row>\n\n\n <ion-col size=\"6\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n items from suggest function\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>suggest: (value, filter) => LoadResult<any>\nsuggestLengthThreshold: '3'</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-filter')\"\n [mobile]=\"false\"\n [compareWith]=\"compareWithFn\"\n suggestLengthThreshold=\"3\"\n [logPrefix]=\"'[combo-desktop-suggest]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"6\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n Items is an array\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>items: [], value: {{stringify(form.controls.entity.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items')\"\n [logPrefix]=\"'[combo-desktop-array-1]'\"\n [compareWith]=\"compareWithFn\"\n [mobile]=\"false\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n Items is an Observable\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>items: Observable<any[]></pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [logPrefix]=\"'[combo-desktop-2]'\"\n [compareWith]=\"compareWithFn\"\n [mobile]=\"false\"\n ></mat-autocomplete-field>\n </ion-card-content>\n\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Control value if missing in items\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>items: Observable<any[]></pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"missingEntity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-desktop-missing]'\"\n [mobile]=\"false\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Full size panel\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>class: 'mat-autocomplete-panel-full-size'</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"false\"\n [class]=\"'mat-autocomplete-panel-full-size'\"\n [compareWith]=\"compareWithFn\"\n [matAutocompletePosition]=\"'above'\"\n [logPrefix]=\"'[combo-desktop-full-size]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Disabled control\n </ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"disableEntity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"false\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-desktop-disable]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Readonly control\n </ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"false\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-desktop-readonly]'\"\n [readonly]=\"true\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size=\"9\" >\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Full size combo\n </ion-label>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>class=\"mat-autocomplete-panel-full-size\"</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-large')\"\n [mobile]=\"false\"\n class=\"mat-autocomplete-panel-full-size\"\n panelWidth=\"100vw\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-desktop-full-size]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"3\" >\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Large combo\n </ion-label>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>panelWidth: string</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-large')\"\n [mobile]=\"false\"\n panelWidth=\"400px\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-desktop-large]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n\n\n\n\n </ion-grid>\n\n </form>\n\n</ion-content>\n"
|
|
15340
|
+
template: "<ion-header>\n <ion-toolbar color=\"primary\">\n\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Autocomplete field test page</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content>\n\n <!-- Tab nav - mobile/desktop mode -->\n <nav mat-tab-nav-bar>\n <a mat-tab-link\n [active]=\"mode==='mobile'\"\n (click)=\"toggleMode('mobile')\">\n <mat-label>Mobile</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode==='desktop'\"\n (click)=\"toggleMode('desktop')\">\n <mat-label>Desktop</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode==='memory'\"\n (click)=\"toggleMode('memory')\">\n <mat-label>Memory leak debug</mat-label>\n </a>\n <a mat-tab-link\n [active]=\"mode==='temp'\"\n (click)=\"toggleMode('temp')\">\n <mat-label>Temporary</mat-label>\n </a>\n </nav>\n\n <form class=\"form-container\" [formGroup]=\"form\" (ngSubmit)=\"doSubmit($event)\">\n\n <!--<ion-grid *ngIf=\"mode === 'temp'\">\n <ion-row>\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n Items is an Observable\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>items: Observable<any[]></pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [logPrefix]=\"'[combo-desktop-2]'\"\n [compareWith]=\"compareWithFn\"\n [mobile]=\"false\"\n ></mat-autocomplete-field>\n </ion-card-content>\n\n </ion-card>\n </ion-col>\n </ion-row>\n\n\n </ion-grid>-->\n\n\n <ion-grid *ngIf=\"mode === 'memory'\">\n\n <!-- debugging memory leak -->\n <ion-row><ion-col><ion-text><h4>Debug memory leak</h4></ion-text></ion-col></ion-row>\n <ion-row>\n <ion-col size=\"2\">\n <mat-form-field floatLabel=\"always\">\n <input matInput type=\"text\" hidden placeholder=\"Items type\">\n <mat-select (selectionChange)=\"memoryAutocompleteFieldName=$event.value\" [value]=\"memoryAutocompleteFieldName\">\n <mat-option value=\"entity-$items\">Observable</mat-option>\n <mat-option value=\"entity-suggestFn\">Suggest function</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n <ion-col size=\"1\" class=\"ion-no-padding\">\n <mat-form-field floatLabel=\"always\" >\n <input matInput type=\"text\" hidden placeholder=\"Mobile ?\">\n <mat-checkbox (change)=\"memoryMobile=$event.checked\" [checked]=\"memoryMobile\">\n </mat-checkbox>\n </mat-form-field>\n </ion-col>\n\n <ion-col size=\"2\">\n <ion-button *ngIf=\"!memoryTimer\" (click)=\"startMemoryTimer()\" color=\"tertiary\">Start</ion-button>\n <ion-button *ngIf=\"memoryTimer\" (click)=\"stopMemoryTimer()\" color=\"tertiary\">Stop</ion-button>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col>\n <mat-autocomplete-field formControlName=\"entity\"\n *ngIf=\"!memoryHide && memoryAutocompleteFieldName\"\n [config]=\"autocompleteFields.get(memoryAutocompleteFieldName)\"\n [mobile]=\"memoryMobile\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-memory-leak]'\">\n </mat-autocomplete-field>\n </ion-col>\n </ion-row>\n\n </ion-grid>\n\n <!-- Mobile mode -->\n <ion-grid *ngIf=\"mode === 'mobile'\">\n\n <ion-row>\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Suggest() function\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>mobile: true, suggestFn: (searchText, filter) => any[]</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-suggestFn')\"\n [mobile]=\"true\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-mobile-1]'\"\n [required]=\"true\"\n placeholder=\"Suggest field\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Items is an Observable\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>mobile: true, items: Observable<any[]></pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"true\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-mobile-observable]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Control value if missing in items\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>mobile: true, items: Observable<any[]></pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"missingEntity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"true\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-mobile-2]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Disabled control\n </ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"disableEntity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"true\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-mobile-2]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n </ion-row>\n\n <ion-row>\n <ion-col size=\"9\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Change filter\n </ion-label>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre></pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <ion-button (click)=\"updateFilter('entity-items-filter')\">Filter on: {{autocompleteFields.get('entity-items-filter').filter?.searchAttribute }}</ion-button>\n </ion-col>\n <ion-col>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-filter')\"\n [mobile]=\"true\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-mobile-filter]'\"\n ></mat-autocomplete-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"3\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Large combo\n </ion-label>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>class=\"min-width-large\"</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-large')\"\n [mobile]=\"true\"\n class=\"min-width-large\"\n panelWidth=\"400px\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-mobile-large]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n <!-- Desktop mode -->\n <ion-grid *ngIf=\"mode === 'desktop'\">\n <ion-row>\n <ion-col><ion-text><h4>Desktop mode</h4></ion-text></ion-col>\n </ion-row>\n <ion-row>\n\n\n <ion-col size=\"6\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n items from suggest function\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>suggest: (value, filter) => LoadResult<any>\nsuggestLengthThreshold: '3'</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-filter')\"\n [placeholder]=\"'Entity'\"\n [mobile]=\"false\"\n [compareWith]=\"compareWithFn\"\n suggestLengthThreshold=\"3\"\n [logPrefix]=\"'[combo-desktop-suggest]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"6\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n Items is an array\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>items: [], value: {{stringify(form.controls.entity.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items')\"\n [logPrefix]=\"'[combo-desktop-array-1]'\"\n [compareWith]=\"compareWithFn\"\n [mobile]=\"false\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n Items is an Observable\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>items: Observable<any[]></pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [logPrefix]=\"'[combo-desktop-2]'\"\n [compareWith]=\"compareWithFn\"\n [mobile]=\"false\"\n ></mat-autocomplete-field>\n </ion-card-content>\n\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Control value if missing in items\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>items: Observable<any[]></pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"missingEntity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-desktop-missing]'\"\n [mobile]=\"false\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Full size panel\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>class: 'mat-autocomplete-panel-full-size'</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"false\"\n [class]=\"'mat-autocomplete-panel-full-size'\"\n [compareWith]=\"compareWithFn\"\n [matAutocompletePosition]=\"'above'\"\n [logPrefix]=\"'[combo-desktop-full-size]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Disabled control\n </ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"disableEntity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"false\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-desktop-disable]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Readonly control\n </ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"false\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-desktop-readonly]'\"\n [readonly]=\"true\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size=\"9\" >\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Full size combo\n </ion-label>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>class=\"mat-autocomplete-panel-full-size\"</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-large')\"\n [mobile]=\"false\"\n class=\"mat-autocomplete-panel-full-size\"\n panelWidth=\"100vw\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-desktop-full-size]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"3\" >\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Large combo\n </ion-label>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>panelWidth: string</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-large')\"\n [mobile]=\"false\"\n panelWidth=\"400px\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-desktop-large]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n\n <ion-col size=\"6\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n Readonly toggle\n </ion-text>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-checkbox (change)=\"readonlyField.readonly=$event.checked\" [checked]=\"readonlyField.readonly\">\n </mat-checkbox>\n\n <mat-autocomplete-field #readonlyField formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-filter')\"\n [placeholder]=\"'Entity'\"\n [mobile]=\"false\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-desktop-readonly]'\"\n [readonly]=\"true\">\n </mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n\n </ion-grid>\n\n </form>\n\n</ion-content>\n"
|
|
15306
15341
|
},] }
|
|
15307
15342
|
];
|
|
15308
15343
|
AutocompleteTestPage.ctorParameters = () => [
|
|
@@ -15405,13 +15440,13 @@ MaterialTestingPage.ctorParameters = () => [
|
|
|
15405
15440
|
{ type: Array, decorators: [{ type: Optional }, { type: Inject, args: [APP_TESTING_PAGES,] }] }
|
|
15406
15441
|
];
|
|
15407
15442
|
|
|
15408
|
-
const moment$
|
|
15443
|
+
const moment$1 = momentImported;
|
|
15409
15444
|
class SwipeTestPage {
|
|
15410
15445
|
constructor(formBuilder, dateFormatPipe) {
|
|
15411
15446
|
this.formBuilder = formBuilder;
|
|
15412
15447
|
this.dateFormatPipe = dateFormatPipe;
|
|
15413
15448
|
this.$dates = new BehaviorSubject(undefined);
|
|
15414
|
-
this._today = moment$
|
|
15449
|
+
this._today = moment$1().startOf('day');
|
|
15415
15450
|
this.form = formBuilder.group({
|
|
15416
15451
|
empty: [null, Validators.required],
|
|
15417
15452
|
date: [null, Validators.compose([Validators.required, SharedValidators.validDate])],
|
|
@@ -15424,7 +15459,7 @@ class SwipeTestPage {
|
|
|
15424
15459
|
ngOnInit() {
|
|
15425
15460
|
const dates = [];
|
|
15426
15461
|
for (let d = 0; d < 7; d++) {
|
|
15427
|
-
dates[d] = moment$
|
|
15462
|
+
dates[d] = moment$1(this._today).add(d - 3, 'day');
|
|
15428
15463
|
}
|
|
15429
15464
|
this.$dates.next(dates);
|
|
15430
15465
|
this.loadData();
|
|
@@ -16041,7 +16076,7 @@ class FormArrayHelper {
|
|
|
16041
16076
|
}
|
|
16042
16077
|
}
|
|
16043
16078
|
|
|
16044
|
-
const moment
|
|
16079
|
+
const moment = momentImported;
|
|
16045
16080
|
class DateTimeTestPage {
|
|
16046
16081
|
constructor(platform, formBuilder, cd) {
|
|
16047
16082
|
this.platform = platform;
|
|
@@ -16072,7 +16107,7 @@ class DateTimeTestPage {
|
|
|
16072
16107
|
// Load the form with data
|
|
16073
16108
|
loadData() {
|
|
16074
16109
|
return __awaiter(this, void 0, void 0, function* () {
|
|
16075
|
-
const now = moment
|
|
16110
|
+
const now = moment();
|
|
16076
16111
|
const data = {
|
|
16077
16112
|
empty: toDateISOString(now.clone().add(2, 'hours')),
|
|
16078
16113
|
enable: toDateISOString(now),
|
|
@@ -16132,20 +16167,20 @@ DateTimeTestPage.ctorParameters = () => [
|
|
|
16132
16167
|
{ type: ChangeDetectorRef }
|
|
16133
16168
|
];
|
|
16134
16169
|
|
|
16135
|
-
class EntityTestClass
|
|
16170
|
+
class EntityTestClass {
|
|
16136
16171
|
}
|
|
16137
|
-
const FAKE_ENTITIES
|
|
16172
|
+
const FAKE_ENTITIES = [
|
|
16138
16173
|
{ id: 1, label: 'AAA', name: 'Item A' },
|
|
16139
16174
|
{ id: 2, label: 'BBB', name: 'Item B' },
|
|
16140
16175
|
{ id: 3, label: 'CCC', name: 'Item C' }
|
|
16141
16176
|
];
|
|
16142
|
-
function deepCopy
|
|
16143
|
-
return (values || FAKE_ENTITIES
|
|
16177
|
+
function deepCopy(values) {
|
|
16178
|
+
return (values || FAKE_ENTITIES).map(entity => Object.assign({}, entity));
|
|
16144
16179
|
}
|
|
16145
16180
|
class ChipsTestPage {
|
|
16146
16181
|
constructor(formBuilder) {
|
|
16147
16182
|
this.formBuilder = formBuilder;
|
|
16148
|
-
this._items = deepCopy
|
|
16183
|
+
this._items = deepCopy(FAKE_ENTITIES);
|
|
16149
16184
|
this._$items = new BehaviorSubject(undefined);
|
|
16150
16185
|
this.autocompleteFields = new MatAutocompleteConfigHolder();
|
|
16151
16186
|
this.form = formBuilder.group({
|
|
@@ -16164,7 +16199,7 @@ class ChipsTestPage {
|
|
|
16164
16199
|
});
|
|
16165
16200
|
// From items
|
|
16166
16201
|
this.autocompleteFields.add('entity-items', {
|
|
16167
|
-
items: FAKE_ENTITIES
|
|
16202
|
+
items: FAKE_ENTITIES.slice(),
|
|
16168
16203
|
attributes: ['label', 'name'],
|
|
16169
16204
|
displayWith: this.entityToString
|
|
16170
16205
|
});
|
|
@@ -16185,15 +16220,15 @@ class ChipsTestPage {
|
|
|
16185
16220
|
const data = {
|
|
16186
16221
|
entity: [],
|
|
16187
16222
|
// THis item is NOT in the items list => i should be displayed anyway
|
|
16188
|
-
entityInitial: FAKE_ENTITIES
|
|
16189
|
-
disableEntity: FAKE_ENTITIES
|
|
16223
|
+
entityInitial: FAKE_ENTITIES.slice(1, 2),
|
|
16224
|
+
disableEntity: FAKE_ENTITIES.slice(1, 2)
|
|
16190
16225
|
};
|
|
16191
16226
|
this.form.setValue(data);
|
|
16192
16227
|
});
|
|
16193
16228
|
}
|
|
16194
16229
|
loadItems() {
|
|
16195
16230
|
return __awaiter(this, void 0, void 0, function* () {
|
|
16196
|
-
this._$items.next(deepCopy
|
|
16231
|
+
this._$items.next(deepCopy(FAKE_ENTITIES));
|
|
16197
16232
|
});
|
|
16198
16233
|
}
|
|
16199
16234
|
entityToString(item) {
|
|
@@ -16225,7 +16260,7 @@ ChipsTestPage.ctorParameters = () => [
|
|
|
16225
16260
|
{ type: FormBuilder }
|
|
16226
16261
|
];
|
|
16227
16262
|
|
|
16228
|
-
const routes = [
|
|
16263
|
+
const routes$1 = [
|
|
16229
16264
|
{
|
|
16230
16265
|
path: '',
|
|
16231
16266
|
pathMatch: 'full',
|
|
@@ -16272,7 +16307,7 @@ MaterialTestingModule.decorators = [
|
|
|
16272
16307
|
ReactiveFormsModule,
|
|
16273
16308
|
SharedMaterialModule,
|
|
16274
16309
|
TranslateModule.forChild(),
|
|
16275
|
-
RouterModule.forChild(routes)
|
|
16310
|
+
RouterModule.forChild(routes$1)
|
|
16276
16311
|
],
|
|
16277
16312
|
declarations: [
|
|
16278
16313
|
MaterialTestingPage,
|
|
@@ -17215,7 +17250,7 @@ class UserSettingsValidatorService extends AppValidatorService {
|
|
|
17215
17250
|
});
|
|
17216
17251
|
}
|
|
17217
17252
|
}
|
|
17218
|
-
UserSettingsValidatorService.ɵprov =
|
|
17253
|
+
UserSettingsValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function UserSettingsValidatorService_Factory() { return new UserSettingsValidatorService(i0.ɵɵinject(i1$6.FormBuilder)); }, token: UserSettingsValidatorService, providedIn: "root" });
|
|
17219
17254
|
UserSettingsValidatorService.decorators = [
|
|
17220
17255
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
17221
17256
|
];
|
|
@@ -17259,7 +17294,7 @@ class AccountValidatorService extends AppValidatorService {
|
|
|
17259
17294
|
return validatorFns.length ? Validators.compose(validatorFns) : validatorFns.length === 1 ? validatorFns[0] : undefined;
|
|
17260
17295
|
}
|
|
17261
17296
|
}
|
|
17262
|
-
AccountValidatorService.ɵprov =
|
|
17297
|
+
AccountValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function AccountValidatorService_Factory() { return new AccountValidatorService(i0.ɵɵinject(i1$6.FormBuilder), i0.ɵɵinject(AccountService)); }, token: AccountValidatorService, providedIn: "root" });
|
|
17263
17298
|
AccountValidatorService.decorators = [
|
|
17264
17299
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
17265
17300
|
];
|
|
@@ -17793,7 +17828,7 @@ class LocalSettingsValidatorService extends AppValidatorService {
|
|
|
17793
17828
|
});
|
|
17794
17829
|
}
|
|
17795
17830
|
}
|
|
17796
|
-
LocalSettingsValidatorService.ɵprov =
|
|
17831
|
+
LocalSettingsValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function LocalSettingsValidatorService_Factory() { return new LocalSettingsValidatorService(i0.ɵɵinject(i1$6.FormBuilder), i0.ɵɵinject(NetworkService)); }, token: LocalSettingsValidatorService, providedIn: "root" });
|
|
17797
17832
|
LocalSettingsValidatorService.decorators = [
|
|
17798
17833
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
17799
17834
|
];
|
|
@@ -18413,7 +18448,7 @@ class IsOnFieldModePipe {
|
|
|
18413
18448
|
return value === 'FIELD';
|
|
18414
18449
|
}
|
|
18415
18450
|
}
|
|
18416
|
-
IsOnFieldModePipe.ɵprov =
|
|
18451
|
+
IsOnFieldModePipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsOnFieldModePipe_Factory() { return new IsOnFieldModePipe(); }, token: IsOnFieldModePipe, providedIn: "root" });
|
|
18417
18452
|
IsOnFieldModePipe.decorators = [
|
|
18418
18453
|
{ type: Pipe, args: [{
|
|
18419
18454
|
name: 'isOnField'
|
|
@@ -18425,7 +18460,7 @@ class IsNotOnFieldModePipe {
|
|
|
18425
18460
|
return value !== 'FIELD';
|
|
18426
18461
|
}
|
|
18427
18462
|
}
|
|
18428
|
-
IsNotOnFieldModePipe.ɵprov =
|
|
18463
|
+
IsNotOnFieldModePipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsNotOnFieldModePipe_Factory() { return new IsNotOnFieldModePipe(); }, token: IsNotOnFieldModePipe, providedIn: "root" });
|
|
18429
18464
|
IsNotOnFieldModePipe.decorators = [
|
|
18430
18465
|
{ type: Pipe, args: [{
|
|
18431
18466
|
name: 'isNotOnField'
|
|
@@ -18440,7 +18475,7 @@ class PersonToStringPipe {
|
|
|
18440
18475
|
return PersonUtils.personToString(value);
|
|
18441
18476
|
}
|
|
18442
18477
|
}
|
|
18443
|
-
PersonToStringPipe.ɵprov =
|
|
18478
|
+
PersonToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function PersonToStringPipe_Factory() { return new PersonToStringPipe(); }, token: PersonToStringPipe, providedIn: "root" });
|
|
18444
18479
|
PersonToStringPipe.decorators = [
|
|
18445
18480
|
{ type: Pipe, args: [{
|
|
18446
18481
|
name: 'personToString'
|
|
@@ -18448,6 +18483,9 @@ PersonToStringPipe.decorators = [
|
|
|
18448
18483
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
18449
18484
|
];
|
|
18450
18485
|
|
|
18486
|
+
const MimeTypes = Object.freeze({
|
|
18487
|
+
ANDROID_APK: 'application/vnd.android.package-archive'
|
|
18488
|
+
});
|
|
18451
18489
|
class AppInstallUpgradeCard {
|
|
18452
18490
|
constructor(modalCtrl, configService, platform, cd, network, environment) {
|
|
18453
18491
|
this.modalCtrl = modalCtrl;
|
|
@@ -18464,6 +18502,7 @@ class AppInstallUpgradeCard {
|
|
|
18464
18502
|
this.showOfflineWarning = true;
|
|
18465
18503
|
this.showInstallButton = false;
|
|
18466
18504
|
this.onUpdateOfflineModeClick = new EventEmitter();
|
|
18505
|
+
this.isAndroidCordova = platform.isAndroidCordova();
|
|
18467
18506
|
}
|
|
18468
18507
|
set showUpdateOfflineFeature(value) {
|
|
18469
18508
|
if (value === this._showUpdateOfflineFeature)
|
|
@@ -18507,15 +18546,14 @@ class AppInstallUpgradeCard {
|
|
|
18507
18546
|
ngOnDestroy() {
|
|
18508
18547
|
this._subscription.unsubscribe();
|
|
18509
18548
|
}
|
|
18510
|
-
|
|
18511
|
-
if (!url)
|
|
18549
|
+
downloadLink(event, link) {
|
|
18550
|
+
if (!link || !link.url)
|
|
18512
18551
|
return; // Skip
|
|
18513
|
-
|
|
18514
|
-
|
|
18515
|
-
|
|
18516
|
-
|
|
18517
|
-
|
|
18518
|
-
return false;
|
|
18552
|
+
this.platform.download({
|
|
18553
|
+
uri: link.url,
|
|
18554
|
+
filename: link.downloadFilename,
|
|
18555
|
+
mimeType: link.mimeType
|
|
18556
|
+
});
|
|
18519
18557
|
}
|
|
18520
18558
|
tryOnline() {
|
|
18521
18559
|
this.waitingNetwork = true;
|
|
@@ -18540,10 +18578,10 @@ class AppInstallUpgradeCard {
|
|
|
18540
18578
|
return '';
|
|
18541
18579
|
}
|
|
18542
18580
|
}
|
|
18543
|
-
|
|
18544
|
-
return;
|
|
18581
|
+
asLink(value) {
|
|
18582
|
+
return value;
|
|
18545
18583
|
}
|
|
18546
|
-
/* --
|
|
18584
|
+
/* -- private method -- */
|
|
18547
18585
|
getCompatibleInstallLinks(installLinks) {
|
|
18548
18586
|
// Cordova already running: not need to install
|
|
18549
18587
|
if (this.platform.is('cordova'))
|
|
@@ -18580,11 +18618,14 @@ class AppInstallUpgradeCard {
|
|
|
18580
18618
|
if (url) {
|
|
18581
18619
|
let downloadFilename;
|
|
18582
18620
|
let version;
|
|
18621
|
+
let mimeType;
|
|
18583
18622
|
// Get file name
|
|
18584
18623
|
const filename = this.getFilename(url);
|
|
18585
18624
|
version = config.getProperty(CORE_CONFIG_OPTIONS.APP_MIN_VERSION);
|
|
18586
18625
|
// OK, this is a downloadable APK file (e.g. NOT a link to a playstore)
|
|
18587
18626
|
if (filename === null || filename === void 0 ? void 0 : filename.endsWith('.apk')) {
|
|
18627
|
+
// Define mime type
|
|
18628
|
+
mimeType = MimeTypes.ANDROID_APK;
|
|
18588
18629
|
// Get the file version (if any)
|
|
18589
18630
|
const versionMatches = /-v([1-9][0-9]*\.[0-9]+\.(:?(:?alpha|beta|rc)?[0-9]*))/i.exec(filename);
|
|
18590
18631
|
version = versionMatches && versionMatches[1] || version;
|
|
@@ -18601,7 +18642,7 @@ class AppInstallUpgradeCard {
|
|
|
18601
18642
|
}
|
|
18602
18643
|
}
|
|
18603
18644
|
}
|
|
18604
|
-
result.push({ name, url, platform: 'android', version, downloadFilename });
|
|
18645
|
+
result.push({ name, url, platform: 'android', version, downloadFilename, mimeType });
|
|
18605
18646
|
}
|
|
18606
18647
|
}
|
|
18607
18648
|
// iOS - TODO
|
|
@@ -18629,7 +18670,7 @@ class AppInstallUpgradeCard {
|
|
|
18629
18670
|
AppInstallUpgradeCard.decorators = [
|
|
18630
18671
|
{ type: Component, args: [{
|
|
18631
18672
|
selector: 'app-install-upgrade-card',
|
|
18632
|
-
template: "\n\n<!-- Offline mode card-->\n<ion-card *ngIf=\"showOfflineWarning && (!loading && offline || waitingNetwork)\"\n color=\"accent\"\n class=\"main ion-no-margin\"\n @slideUpDownAnimation>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row>\n <ion-col>\n <ion-text class=\"ion-text-wrap\" *ngIf=\"!waitingNetwork; else waitingNetworkText\">\n <h4>\n <b *ngIf=\"isLogin; else notLogin\" [innerHTML]=\"'NETWORK.INFO.OFFLINE_OR_UNAUTHORIZED'| translate\"></b>\n <ng-template #notLogin>\n <b [innerHTML]=\"'NETWORK.INFO.OFFLINE'| translate\"></b>\n </ng-template>\n </h4>\n <h3>\n <small [innerHTML]=\"'NETWORK.INFO.OFFLINE_HELP'|translate\"></small>\n </h3>\n </ion-text>\n <ng-template #waitingNetworkText>\n <ion-text class=\"ion-text-wrap\" [innerHTML]=\"'NETWORK.INFO.RETRY_TO_CONNECT'| translate\"></ion-text>\n </ng-template>\n </ion-col>\n <ion-col size=\"auto\">\n\n <!-- Retry button -->\n <ion-button *ngIf=\"!waitingNetwork; else waitingSpinner\" color=\"tertiary\" class=\"ion-float-end\"\n (click)=\"tryOnline()\">\n <span translate>NETWORK.BTN_CHECK_ALIVE</span>\n </ion-button>\n\n <!-- Waiting spinner -->\n <ng-template #waitingSpinner>\n <ion-spinner *ngIf=\"waitingNetwork\" color=\"light\"></ion-spinner>\n </ng-template>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n </ion-card-content>\n</ion-card>\n\n<!-- Upgrade links -->\n<ion-card *ngIf=\"showUpgradeWarning && !loading && !offline && updateLinks\"\n color=\"accent\"\n class=\"ion-no-margin\"\n @slideUpDownAnimation>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row *ngFor=\"let link of updateLinks; last as last\">\n <ion-col>\n <ion-text class=\"ion-text-wrap\">\n <h3>\n <span *ngIf=\"link.version\" [innerHTML]=\"'INFO.UPDATE_APP_TO_VERSION'| translate: link\"></span>\n <span *ngIf=\"!link.version\" [innerHTML]=\"'INFO.UPDATE_APP'| translate: link\"></span>\n </h3>\n <h4>\n <small *ngIf=\"last\" [innerHTML]=\"'INFO.UPDATE_APP_HELP'|translate\"></small>\n </h4>\n </ion-text>\n </ion-col>\n\n <ion-col size=\"auto\">\n\n <!-- Download button -->\n <ion-button *ngIf=\"link.downloadFilename; else redirectButton\"\n [download]=\"link.downloadFilename\"\n [href]=\"link.url\"\n color=\"tertiary\" class=\"ion-float-end\" >\n <ion-label translate>COMMON.BTN_DOWNLOAD</ion-label>\n </ion-button>\n\n <!-- Redirect button -->\n <ng-template #redirectButton>\n <ion-button [href]=\"link.url\" rel=\"external\" color=\"tertiary\" class=\"ion-float-end\" target=\"_blank\">\n <ion-label translate>COMMON.BTN_SHOW_MORE</ion-label>\n </ion-button>\n </ng-template>\n\n </ion-col>\n </ion-row>\n\n </ion-grid>\n\n </ion-card-content>\n</ion-card>\n\n<!-- Install links -->\n<ion-card *ngIf=\"showInstallButton && !loading && !offline && installLinks\"\n color=\"secondary\"\n class=\"ion-no-margin\"\n @slideUpDownAnimation>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row *ngFor=\"let link of installLinks; last as last\">\n <ion-col>\n <ion-text class=\"ion-text-wrap\">\n <h3 [innerHTML]=\"'INFO.DOWNLOAD_APP_TITLE'| translate: {name: link.name, platform: getPlatformName(link.platform) }\"></h3>\n <h4><small *ngIf=\"last\" [innerHTML]=\"'INFO.DOWNLOAD_APP_HELP'|translate\"></small></h4>\n </ion-text>\n </ion-col>\n <ion-col size=\"auto\">\n
|
|
18673
|
+
template: "\n\n<!-- Offline mode card-->\n<ion-card *ngIf=\"showOfflineWarning && (!loading && offline || waitingNetwork)\"\n color=\"accent\"\n class=\"main ion-no-margin\"\n @slideUpDownAnimation>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row>\n <ion-col>\n <ion-text class=\"ion-text-wrap\" *ngIf=\"!waitingNetwork; else waitingNetworkText\">\n <h4>\n <b *ngIf=\"isLogin; else notLogin\" [innerHTML]=\"'NETWORK.INFO.OFFLINE_OR_UNAUTHORIZED'| translate\"></b>\n <ng-template #notLogin>\n <b [innerHTML]=\"'NETWORK.INFO.OFFLINE'| translate\"></b>\n </ng-template>\n </h4>\n <h3>\n <small [innerHTML]=\"'NETWORK.INFO.OFFLINE_HELP'|translate\"></small>\n </h3>\n </ion-text>\n <ng-template #waitingNetworkText>\n <ion-text class=\"ion-text-wrap\" [innerHTML]=\"'NETWORK.INFO.RETRY_TO_CONNECT'| translate\"></ion-text>\n </ng-template>\n </ion-col>\n <ion-col size=\"auto\">\n\n <!-- Retry button -->\n <ion-button *ngIf=\"!waitingNetwork; else waitingSpinner\" color=\"tertiary\" class=\"ion-float-end\"\n (click)=\"tryOnline()\">\n <span translate>NETWORK.BTN_CHECK_ALIVE</span>\n </ion-button>\n\n <!-- Waiting spinner -->\n <ng-template #waitingSpinner>\n <ion-spinner *ngIf=\"waitingNetwork\" color=\"light\"></ion-spinner>\n </ng-template>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n </ion-card-content>\n</ion-card>\n\n<!-- Upgrade links -->\n<ion-card *ngIf=\"showUpgradeWarning && !loading && !offline && updateLinks\"\n color=\"accent\"\n class=\"ion-no-margin\"\n @slideUpDownAnimation>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row *ngFor=\"let link of updateLinks; last as last\">\n <ion-col>\n <ion-text class=\"ion-text-wrap\">\n <h3>\n <span *ngIf=\"link.version\" [innerHTML]=\"'INFO.UPDATE_APP_TO_VERSION'| translate: link\"></span>\n <span *ngIf=\"!link.version\" [innerHTML]=\"'INFO.UPDATE_APP'| translate: link\"></span>\n </h3>\n <h4>\n <small *ngIf=\"last\" [innerHTML]=\"'INFO.UPDATE_APP_HELP'|translate\"></small>\n </h4>\n </ion-text>\n </ion-col>\n\n <ion-col size=\"auto\">\n\n <!-- Download button -->\n <ion-button *ngIf=\"link.downloadFilename; else redirectButton\"\n [download]=\"link.downloadFilename\"\n [href]=\"link.url\"\n color=\"tertiary\" class=\"ion-float-end\" >\n <ion-label translate>COMMON.BTN_DOWNLOAD</ion-label>\n </ion-button>\n\n <!-- Redirect button -->\n <ng-template #redirectButton>\n <ion-button [href]=\"link.url\" rel=\"external\" color=\"tertiary\" class=\"ion-float-end\" target=\"_blank\">\n <ion-label translate>COMMON.BTN_SHOW_MORE</ion-label>\n </ion-button>\n </ng-template>\n\n </ion-col>\n </ion-row>\n\n </ion-grid>\n\n </ion-card-content>\n</ion-card>\n\n<!-- Install links -->\n<ion-card *ngIf=\"showInstallButton && !loading && !offline && installLinks\"\n color=\"secondary\"\n class=\"ion-no-margin\"\n @slideUpDownAnimation>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row *ngFor=\"let link of installLinks; last as last\">\n <ion-col>\n <ion-text class=\"ion-text-wrap\">\n <h3 [innerHTML]=\"'INFO.DOWNLOAD_APP_TITLE'| translate: {name: link.name, platform: getPlatformName(link.platform) }\"></h3>\n <h4><small *ngIf=\"last\" [innerHTML]=\"'INFO.DOWNLOAD_APP_HELP'|translate\"></small></h4>\n </ion-text>\n </ion-col>\n <ion-col size=\"auto\">\n <ng-container *ngTemplateOutlet=\"downloadButton; context: { $implicit: link }\"></ng-container>\n </ion-col>\n </ion-row>\n\n </ion-grid>\n\n </ion-card-content>\n</ion-card>\n\n<!-- Update offline feature card-->\n<ion-card *ngIf=\"showUpdateOfflineFeature && !loading && !offline\"\n color=\"accent\"\n class=\"main ion-no-margin\"\n @slideUpDownAnimation>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row>\n <ion-col>\n <ion-text class=\"ion-text-wrap\">\n <h4>\n <b [innerHTML]=\"'NETWORK.INFO.UPDATE_OFFLINE_MODE'| translate\"></b>\n </h4>\n <h3>\n <small [innerHTML]=\"'NETWORK.INFO.UPDATE_OFFLINE_MODE_HELP'|translate\"></small>\n </h3>\n </ion-text>\n </ion-col>\n <ion-col size=\"auto\">\n\n <!-- Retry button -->\n <ion-button color=\"tertiary\" class=\"ion-float-end\"\n (click)=\"onUpdateOfflineModeClick.emit($event)\">\n <span translate>NETWORK.BTN_UPDATE</span>\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n </ion-card-content>\n</ion-card>\n\n<!-- Display a download button, depending on the link URL, and the device platform -->\n<ng-template #downloadButton let-link>\n\n <ng-container *ngIf=\"link.downloadFilename; else redirectButton\">\n\n <!-- Cordova download button -->\n <ion-button *ngIf=\"isAndroidCordova; else webDownloadButton\"\n (click)=\"downloadLink($event, asLink(link))\"\n color=\"tertiary\" class=\"ion-float-end\" >\n <ion-label translate>COMMON.BTN_DOWNLOAD</ion-label>\n </ion-button>\n\n <!-- Web download button -->\n <ng-template #webDownloadButton>\n <ion-button [download]=\"link.downloadFilename\"\n [href]=\"link.url\"\n color=\"tertiary\" class=\"ion-float-end\" >\n <ion-label translate>COMMON.BTN_DOWNLOAD</ion-label>\n </ion-button>\n </ng-template>\n </ng-container>\n\n <!-- Web redirect button -->\n <ng-template #redirectButton>\n <ion-button [href]=\"link.url\" rel=\"external\" color=\"tertiary\" class=\"ion-float-end\" target=\"_blank\">\n <ion-label translate>COMMON.BTN_SHOW_MORE</ion-label>\n </ion-button>\n </ng-template>\n</ng-template>\n",
|
|
18633
18674
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
18634
18675
|
animations: [slideUpDownAnimation],
|
|
18635
18676
|
styles: ["ion-text small{font-size:85%}"]
|
|
@@ -18657,7 +18698,7 @@ class IsLoginAccountPipe {
|
|
|
18657
18698
|
return value && value.pubkey && true;
|
|
18658
18699
|
}
|
|
18659
18700
|
}
|
|
18660
|
-
IsLoginAccountPipe.ɵprov =
|
|
18701
|
+
IsLoginAccountPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsLoginAccountPipe_Factory() { return new IsLoginAccountPipe(); }, token: IsLoginAccountPipe, providedIn: "root" });
|
|
18661
18702
|
IsLoginAccountPipe.decorators = [
|
|
18662
18703
|
{ type: Pipe, args: [{
|
|
18663
18704
|
name: 'isLogin'
|
|
@@ -18669,7 +18710,7 @@ class AccountToStringPipe {
|
|
|
18669
18710
|
return accountToString(value);
|
|
18670
18711
|
}
|
|
18671
18712
|
}
|
|
18672
|
-
AccountToStringPipe.ɵprov =
|
|
18713
|
+
AccountToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function AccountToStringPipe_Factory() { return new AccountToStringPipe(); }, token: AccountToStringPipe, providedIn: "root" });
|
|
18673
18714
|
AccountToStringPipe.decorators = [
|
|
18674
18715
|
{ type: Pipe, args: [{
|
|
18675
18716
|
name: 'accountToString'
|
|
@@ -18684,7 +18725,7 @@ class DepartmentToStringPipe {
|
|
|
18684
18725
|
return departmentToString(value);
|
|
18685
18726
|
}
|
|
18686
18727
|
}
|
|
18687
|
-
DepartmentToStringPipe.ɵprov =
|
|
18728
|
+
DepartmentToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DepartmentToStringPipe_Factory() { return new DepartmentToStringPipe(); }, token: DepartmentToStringPipe, providedIn: "root" });
|
|
18688
18729
|
DepartmentToStringPipe.decorators = [
|
|
18689
18730
|
{ type: Pipe, args: [{
|
|
18690
18731
|
name: 'departmentToString'
|
|
@@ -18710,7 +18751,7 @@ class MenuService {
|
|
|
18710
18751
|
this._visibleSubject.next(value);
|
|
18711
18752
|
}
|
|
18712
18753
|
}
|
|
18713
|
-
MenuService.ɵprov =
|
|
18754
|
+
MenuService.ɵprov = i0.ɵɵdefineInjectable({ factory: function MenuService_Factory() { return new MenuService(); }, token: MenuService, providedIn: "root" });
|
|
18714
18755
|
MenuService.decorators = [
|
|
18715
18756
|
{ type: Injectable, args: [{
|
|
18716
18757
|
providedIn: 'root'
|
|
@@ -19204,7 +19245,7 @@ class AuthGuardService {
|
|
|
19204
19245
|
}));
|
|
19205
19246
|
}
|
|
19206
19247
|
}
|
|
19207
|
-
AuthGuardService.ɵprov =
|
|
19248
|
+
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" });
|
|
19208
19249
|
AuthGuardService.decorators = [
|
|
19209
19250
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
19210
19251
|
];
|
|
@@ -19252,7 +19293,7 @@ class BaseEntityService extends BaseGraphqlService {
|
|
|
19252
19293
|
query,
|
|
19253
19294
|
variables: { id },
|
|
19254
19295
|
fetchPolicy: opts && opts.fetchPolicy || undefined,
|
|
19255
|
-
error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' }
|
|
19296
|
+
error: { code: ErrorCodes$2.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' }
|
|
19256
19297
|
})
|
|
19257
19298
|
.pipe(map(({ data }) => (!opts || opts.toEntity !== false)
|
|
19258
19299
|
? (data && this.fromObject(data))
|
|
@@ -19267,7 +19308,7 @@ class BaseEntityService extends BaseGraphqlService {
|
|
|
19267
19308
|
query,
|
|
19268
19309
|
variables: { id },
|
|
19269
19310
|
fetchPolicy: opts && opts.fetchPolicy || undefined,
|
|
19270
|
-
error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' }
|
|
19311
|
+
error: { code: ErrorCodes$2.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' }
|
|
19271
19312
|
});
|
|
19272
19313
|
// Convert to entity
|
|
19273
19314
|
return (!opts || opts.toEntity !== false)
|
|
@@ -19298,7 +19339,7 @@ class BaseEntityService extends BaseGraphqlService {
|
|
|
19298
19339
|
totalFieldName: withTotal ? 'total' : undefined,
|
|
19299
19340
|
insertFilterFn: filter && filter.asFilterFn(),
|
|
19300
19341
|
variables,
|
|
19301
|
-
error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' },
|
|
19342
|
+
error: { code: ErrorCodes$2.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' },
|
|
19302
19343
|
fetchPolicy: opts && opts.fetchPolicy || undefined
|
|
19303
19344
|
})
|
|
19304
19345
|
.pipe(map(({ data, total }) => {
|
|
@@ -19334,7 +19375,7 @@ class BaseEntityService extends BaseGraphqlService {
|
|
|
19334
19375
|
const { data, total } = yield this.graphql.query({
|
|
19335
19376
|
query,
|
|
19336
19377
|
variables,
|
|
19337
|
-
error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'ERROR.LOAD_DATA_ERROR' },
|
|
19378
|
+
error: { code: ErrorCodes$2.LOAD_DATA_ERROR, message: 'ERROR.LOAD_DATA_ERROR' },
|
|
19338
19379
|
fetchPolicy: opts && opts.fetchPolicy || 'network-only'
|
|
19339
19380
|
});
|
|
19340
19381
|
const entities = (!opts || opts.toEntity !== false) ?
|
|
@@ -19373,7 +19414,7 @@ class BaseEntityService extends BaseGraphqlService {
|
|
|
19373
19414
|
variables: {
|
|
19374
19415
|
filter: filter && filter.asPodObject()
|
|
19375
19416
|
},
|
|
19376
|
-
error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'ERROR.COUNT_DATA_ERROR' },
|
|
19417
|
+
error: { code: ErrorCodes$2.LOAD_DATA_ERROR, message: 'ERROR.COUNT_DATA_ERROR' },
|
|
19377
19418
|
fetchPolicy: opts && opts.fetchPolicy || 'network-only'
|
|
19378
19419
|
});
|
|
19379
19420
|
return res.total;
|
|
@@ -19406,7 +19447,7 @@ class BaseEntityService extends BaseGraphqlService {
|
|
|
19406
19447
|
variables: {
|
|
19407
19448
|
data: json
|
|
19408
19449
|
},
|
|
19409
|
-
error: { code: ErrorCodes.SAVE_DATA_ERROR, message: 'ERROR.SAVE_DATA_ERROR' },
|
|
19450
|
+
error: { code: ErrorCodes$2.SAVE_DATA_ERROR, message: 'ERROR.SAVE_DATA_ERROR' },
|
|
19410
19451
|
update: (proxy, { data }) => {
|
|
19411
19452
|
const savedEntities = data && data.data;
|
|
19412
19453
|
if (savedEntities) {
|
|
@@ -19462,7 +19503,7 @@ class BaseEntityService extends BaseGraphqlService {
|
|
|
19462
19503
|
variables: {
|
|
19463
19504
|
data: json
|
|
19464
19505
|
},
|
|
19465
|
-
error: { code: ErrorCodes.SAVE_DATA_ERROR, message: 'ERROR.SAVE_DATA_ERROR' },
|
|
19506
|
+
error: { code: ErrorCodes$2.SAVE_DATA_ERROR, message: 'ERROR.SAVE_DATA_ERROR' },
|
|
19466
19507
|
update: (cache, { data }) => {
|
|
19467
19508
|
// Update entity
|
|
19468
19509
|
const savedEntity = data && data.data;
|
|
@@ -19510,7 +19551,7 @@ class BaseEntityService extends BaseGraphqlService {
|
|
|
19510
19551
|
refetchQueries: this.getRefetchQueriesForMutation(opts),
|
|
19511
19552
|
awaitRefetchQueries: opts && opts.awaitRefetchQueries,
|
|
19512
19553
|
variables: { ids },
|
|
19513
|
-
error: { code: ErrorCodes.DELETE_DATA_ERROR, message: 'ERROR.DELETE_DATA_ERROR' },
|
|
19554
|
+
error: { code: ErrorCodes$2.DELETE_DATA_ERROR, message: 'ERROR.DELETE_DATA_ERROR' },
|
|
19514
19555
|
update: (cache, res) => {
|
|
19515
19556
|
// Remove from cache
|
|
19516
19557
|
if (this.watchQueriesUpdatePolicy === 'update-cache') {
|
|
@@ -19551,7 +19592,7 @@ class BaseEntityService extends BaseGraphqlService {
|
|
|
19551
19592
|
refetchQueries: this.getRefetchQueriesForMutation(opts),
|
|
19552
19593
|
awaitRefetchQueries: opts && opts.awaitRefetchQueries,
|
|
19553
19594
|
variables: { id },
|
|
19554
|
-
error: { code: ErrorCodes.DELETE_DATA_ERROR, message: 'ERROR.DELETE_DATA_ERROR' },
|
|
19595
|
+
error: { code: ErrorCodes$2.DELETE_DATA_ERROR, message: 'ERROR.DELETE_DATA_ERROR' },
|
|
19555
19596
|
update: (proxy, res) => {
|
|
19556
19597
|
// Remove from cache
|
|
19557
19598
|
if (this.watchQueriesUpdatePolicy === 'update-cache') {
|
|
@@ -19584,7 +19625,7 @@ class BaseEntityService extends BaseGraphqlService {
|
|
|
19584
19625
|
query: opts && opts.query || this.subscriptions.listenChanges,
|
|
19585
19626
|
variables,
|
|
19586
19627
|
error: {
|
|
19587
|
-
code: ErrorCodes.SUBSCRIBE_DATA_ERROR,
|
|
19628
|
+
code: ErrorCodes$2.SUBSCRIBE_DATA_ERROR,
|
|
19588
19629
|
message: 'ERROR.SUBSCRIBE_DATA_ERROR'
|
|
19589
19630
|
}
|
|
19590
19631
|
})
|
|
@@ -19759,7 +19800,7 @@ class EntitiesTableDataSource extends TableDataSource {
|
|
|
19759
19800
|
if (this._debug)
|
|
19760
19801
|
invalidRows.forEach(row => AppTableUtils.logRowErrors(row, `[table-datasource] ${this._logTypeName} row #${row.id}`));
|
|
19761
19802
|
// Stop with an error
|
|
19762
|
-
throw { code: ErrorCodes.TABLE_INVALID_ROW_ERROR, message: 'ERROR.TABLE_INVALID_ROW_ERROR' };
|
|
19803
|
+
throw { code: ErrorCodes$2.TABLE_INVALID_ROW_ERROR, message: 'ERROR.TABLE_INVALID_ROW_ERROR' };
|
|
19763
19804
|
}
|
|
19764
19805
|
this._editingRowCount = 0;
|
|
19765
19806
|
let data;
|
|
@@ -20581,14 +20622,14 @@ class AppTable {
|
|
|
20581
20622
|
return __awaiter(this, void 0, void 0, function* () {
|
|
20582
20623
|
opts = Object.assign({ keepEditing: this.keepEditedRowOnSave }, opts);
|
|
20583
20624
|
if (this.readOnly) {
|
|
20584
|
-
throw { code: ErrorCodes.TABLE_READ_ONLY, message: 'ERROR.TABLE_READ_ONLY' };
|
|
20625
|
+
throw { code: ErrorCodes$2.TABLE_READ_ONLY, message: 'ERROR.TABLE_READ_ONLY' };
|
|
20585
20626
|
}
|
|
20586
20627
|
this.resetError();
|
|
20587
20628
|
// Keep edited row id (should be done BEFORE confirmEditCreate() )
|
|
20588
20629
|
this.previouslyEditedRowId = opts.keepEditing && ((_a = this.editedRow) === null || _a === void 0 ? void 0 : _a.editing) ? this.editedRow.id : undefined;
|
|
20589
20630
|
const previouslyEditedData = isNotNil(this.previouslyEditedRowId) && this.editedRow.currentData || ((_b = this.singleSelectedRow) === null || _b === void 0 ? void 0 : _b.currentData);
|
|
20590
20631
|
if (!this.confirmEditCreate()) {
|
|
20591
|
-
throw { code: ErrorCodes.TABLE_INVALID_ROW_ERROR, message: 'ERROR.TABLE_INVALID_ROW_ERROR' };
|
|
20632
|
+
throw { code: ErrorCodes$2.TABLE_INVALID_ROW_ERROR, message: 'ERROR.TABLE_INVALID_ROW_ERROR' };
|
|
20592
20633
|
}
|
|
20593
20634
|
// Mark as saving
|
|
20594
20635
|
this.markAsSaving();
|
|
@@ -20704,7 +20745,7 @@ class AppTable {
|
|
|
20704
20745
|
deleteRows(event, rows, opts) {
|
|
20705
20746
|
return __awaiter(this, void 0, void 0, function* () {
|
|
20706
20747
|
if (this.readOnly) {
|
|
20707
|
-
throw { code: ErrorCodes.TABLE_READ_ONLY, message: 'ERROR.TABLE_READ_ONLY' };
|
|
20748
|
+
throw { code: ErrorCodes$2.TABLE_READ_ONLY, message: 'ERROR.TABLE_READ_ONLY' };
|
|
20708
20749
|
}
|
|
20709
20750
|
if (event === null || event === void 0 ? void 0 : event.defaultPrevented)
|
|
20710
20751
|
return 0; // SKip
|
|
@@ -22135,7 +22176,7 @@ class AppEntityEditor extends AppTabEditor {
|
|
|
22135
22176
|
try {
|
|
22136
22177
|
const data = yield this.dataService.load(id, opts);
|
|
22137
22178
|
if (!data)
|
|
22138
|
-
throw { code: ErrorCodes.DATA_NOT_FOUND_ERROR, message: 'ERROR.DATA_NO_FOUND' };
|
|
22179
|
+
throw { code: ErrorCodes$2.DATA_NOT_FOUND_ERROR, message: 'ERROR.DATA_NO_FOUND' };
|
|
22139
22180
|
this._usageMode = this.computeUsageMode(data);
|
|
22140
22181
|
yield this.onEntityLoaded(data, opts);
|
|
22141
22182
|
yield this.updateView(data, opts);
|
|
@@ -23028,7 +23069,7 @@ class UserEventService extends BaseGraphqlService {
|
|
|
23028
23069
|
EntityUtils.copyIdAndUpdateDate(source, target);
|
|
23029
23070
|
}
|
|
23030
23071
|
}
|
|
23031
|
-
UserEventService.ɵprov =
|
|
23072
|
+
UserEventService.ɵprov = i0.ɵɵdefineInjectable({ factory: function UserEventService_Factory() { return new UserEventService(i0.ɵɵinject(GraphqlService), i0.ɵɵinject(AccountService), i0.ɵɵinject(NetworkService), i0.ɵɵinject(i1$1.TranslateService), i0.ɵɵinject(i1$4.ToastController), i0.ɵɵinject(ENVIRONMENT)); }, token: UserEventService, providedIn: "root" });
|
|
23032
23073
|
UserEventService.decorators = [
|
|
23033
23074
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
23034
23075
|
];
|
|
@@ -23230,6 +23271,7 @@ let PersonFilter = PersonFilter_1 = class PersonFilter extends EntityFilter {
|
|
|
23230
23271
|
this.userProfiles = source.userProfiles;
|
|
23231
23272
|
this.excludedIds = source.excludedIds;
|
|
23232
23273
|
this.searchAttribute = source.searchAttribute;
|
|
23274
|
+
this.searchAttributes = source.searchAttributes;
|
|
23233
23275
|
}
|
|
23234
23276
|
asObject(opts) {
|
|
23235
23277
|
const target = super.asObject(opts);
|
|
@@ -23240,6 +23282,7 @@ let PersonFilter = PersonFilter_1 = class PersonFilter extends EntityFilter {
|
|
|
23240
23282
|
target.userProfiles = this.userProfiles;
|
|
23241
23283
|
target.excludedIds = this.excludedIds;
|
|
23242
23284
|
target.searchAttribute = this.searchAttribute;
|
|
23285
|
+
target.searchAttributes = this.searchAttributes;
|
|
23243
23286
|
return target;
|
|
23244
23287
|
}
|
|
23245
23288
|
buildFilter() {
|
|
@@ -23253,7 +23296,7 @@ let PersonFilter = PersonFilter_1 = class PersonFilter extends EntityFilter {
|
|
|
23253
23296
|
filterFns.push(e => isNil(e.id) || !this.excludedIds.includes(e.id));
|
|
23254
23297
|
}
|
|
23255
23298
|
// Search text
|
|
23256
|
-
const searchTextFilter = EntityUtils.searchTextFilter(this.searchAttribute || ['lastName', 'firstName', 'department.name'], this.searchText);
|
|
23299
|
+
const searchTextFilter = EntityUtils.searchTextFilter(this.searchAttribute || this.searchAttributes || ['lastName', 'firstName', 'department.name'], this.searchText);
|
|
23257
23300
|
if (searchTextFilter)
|
|
23258
23301
|
filterFns.push(searchTextFilter);
|
|
23259
23302
|
return filterFns;
|
|
@@ -23365,12 +23408,13 @@ class PersonService extends BaseEntityService {
|
|
|
23365
23408
|
};
|
|
23366
23409
|
});
|
|
23367
23410
|
}
|
|
23368
|
-
suggest(value, filter) {
|
|
23411
|
+
suggest(value, filter, sortBy, sortDirection) {
|
|
23369
23412
|
return __awaiter(this, void 0, void 0, function* () {
|
|
23370
23413
|
if (ReferentialUtils.isNotEmpty(value))
|
|
23371
23414
|
return { data: [value] };
|
|
23372
23415
|
value = (typeof value === 'string' && value !== '*') && value || undefined;
|
|
23373
|
-
|
|
23416
|
+
sortBy = sortBy || filter.searchAttribute || (filter.searchAttributes && filter.searchAttributes[0]);
|
|
23417
|
+
return this.loadAll(0, !value ? 30 : 10, sortBy, sortDirection, Object.assign(Object.assign({}, filter), { searchText: value, statusIds: filter && filter.statusIds || [StatusIds.ENABLE], userProfiles: filter && filter.userProfiles }), { withTotal: true /* need by autocomplete */ });
|
|
23374
23418
|
});
|
|
23375
23419
|
}
|
|
23376
23420
|
executeImport(progression, opts) {
|
|
@@ -23410,7 +23454,7 @@ class PersonService extends BaseEntityService {
|
|
|
23410
23454
|
return target;
|
|
23411
23455
|
}
|
|
23412
23456
|
}
|
|
23413
|
-
PersonService.ɵprov =
|
|
23457
|
+
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" });
|
|
23414
23458
|
PersonService.decorators = [
|
|
23415
23459
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
23416
23460
|
];
|
|
@@ -23441,7 +23485,7 @@ class PersonValidatorService {
|
|
|
23441
23485
|
return this.formBuilder.group(formConfig);
|
|
23442
23486
|
}
|
|
23443
23487
|
}
|
|
23444
|
-
PersonValidatorService.ɵprov =
|
|
23488
|
+
PersonValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function PersonValidatorService_Factory() { return new PersonValidatorService(i0.ɵɵinject(i1$6.FormBuilder), i0.ɵɵinject(AccountValidatorService)); }, token: PersonValidatorService, providedIn: "root" });
|
|
23445
23489
|
PersonValidatorService.decorators = [
|
|
23446
23490
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
23447
23491
|
];
|
|
@@ -23645,16 +23689,16 @@ AdminModule.decorators = [
|
|
|
23645
23689
|
];
|
|
23646
23690
|
AdminModule.ctorParameters = () => [];
|
|
23647
23691
|
|
|
23648
|
-
const ɵ0
|
|
23692
|
+
const ɵ0 = {
|
|
23649
23693
|
profile: 'ADMIN'
|
|
23650
23694
|
};
|
|
23651
|
-
const routes
|
|
23695
|
+
const routes = [
|
|
23652
23696
|
{
|
|
23653
23697
|
path: 'users',
|
|
23654
23698
|
pathMatch: 'full',
|
|
23655
23699
|
component: UsersPage,
|
|
23656
23700
|
canActivate: [AuthGuardService],
|
|
23657
|
-
data: ɵ0
|
|
23701
|
+
data: ɵ0
|
|
23658
23702
|
}
|
|
23659
23703
|
];
|
|
23660
23704
|
class AdminRoutingModule {
|
|
@@ -23664,13 +23708,13 @@ AdminRoutingModule.decorators = [
|
|
|
23664
23708
|
imports: [
|
|
23665
23709
|
SharedRoutingModule,
|
|
23666
23710
|
AdminModule,
|
|
23667
|
-
RouterModule.forChild(routes
|
|
23711
|
+
RouterModule.forChild(routes)
|
|
23668
23712
|
],
|
|
23669
23713
|
exports: [RouterModule]
|
|
23670
23714
|
},] }
|
|
23671
23715
|
];
|
|
23672
23716
|
|
|
23673
|
-
const ErrorCodes
|
|
23717
|
+
const ErrorCodes = {
|
|
23674
23718
|
LOAD_PERSONS_ERROR: 100,
|
|
23675
23719
|
SAVE_PERSONS_ERROR: 101,
|
|
23676
23720
|
DELETE_PERSONS_ERROR: 102,
|
|
@@ -23682,5 +23726,5 @@ const ErrorCodes$2 = {
|
|
|
23682
23726
|
* Generated bundle index. Do not edit.
|
|
23683
23727
|
*/
|
|
23684
23728
|
|
|
23685
|
-
export { APP_ABOUT_DEVELOPERS, APP_ABOUT_PARTNERS, APP_CONFIG_OPTIONS, 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_TESTING_PAGES, AboutModal, Account, AccountPage, AccountService, AccountToStringPipe, ActionsColumnComponent, AdminModule, AdminRoutingModule, Alerts, AnimationState, AppEditorOptions, AppEntityEditor, AppForm, AppFormField, AppFormProvider, AppFormUtils, AppGestureConfig, AppGraphQLModule, AppHelpModal, AppInMemoryTable, AppInstallUpgradeCard, AppListForm, AppLoadingSpinner, AppMenuModule, AppNullForm, AppPropertiesForm, AppTabEditor, AppTabEditorOptions, AppTable, AppTableDataSourceOptions, AppTableUtils, AppValidatorService, AppendToInputDirective, ArrayFilterPipe, ArrayFirstPipe, ArrayIncludesPipe, ArrayLengthPipe, ArrayPluckPipe, AudioProvider, AuthForm, AuthGuardService, AuthModal, AutocompleteTestPage, AutofocusDirective, Base58, BaseEntityService, BaseGraphqlService, BaseGraphqlServiceOptions, BaseReferential, Beans, CORE_CONFIG_OPTIONS, CellValueChangeListener, ChipsTestPage, Color, ColorScale, ComponentDirtyGuard, ConfigService, Configuration, CoreModule, CryptoService, DATE_ISO_PATTERN, DATE_UNIX_MS_TIMESTAMP, DATE_UNIX_TIMESTAMP, DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLACEHOLDER_CHAR, DEFAULT_REQUIRED_COLUMNS, DateDiffDurationPipe, DateFormatPipe, DateFromNowPipe, DateTimeTestPage, DateUtils, Department, DepartmentToStringPipe, DurationPipe, ENTITIES_STORAGE_KEY_PREFIX, ENVIRONMENT, EmptyArrayPipe, EntitiesService, EntitiesStorage, EntitiesTableDataSource, Entity, EntityClass, EntityClasses, EntityFilter, EntityFilterUtils, EntityMetadataComponent, EntityStore, EntityUtils, Environment, ErrorCodes
|
|
23686
|
-
//# sourceMappingURL=ngx-
|
|
23729
|
+
export { APP_ABOUT_DEVELOPERS, APP_ABOUT_PARTNERS, APP_CONFIG_OPTIONS, 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_TESTING_PAGES, AboutModal, Account, AccountPage, AccountService, AccountToStringPipe, ActionsColumnComponent, AdminModule, AdminRoutingModule, Alerts, AnimationState, AppEditorOptions, AppEntityEditor, AppForm, AppFormField, AppFormProvider, AppFormUtils, AppGestureConfig, AppGraphQLModule, AppHelpModal, AppInMemoryTable, AppInstallUpgradeCard, AppListForm, AppLoadingSpinner, AppMenuModule, AppNullForm, AppPropertiesForm, AppTabEditor, AppTabEditorOptions, AppTable, AppTableDataSourceOptions, AppTableUtils, AppValidatorService, AppendToInputDirective, ArrayFilterPipe, ArrayFirstPipe, ArrayIncludesPipe, ArrayLengthPipe, ArrayPluckPipe, AudioProvider, AuthForm, AuthGuardService, AuthModal, AutocompleteTestPage, AutofocusDirective, Base58, BaseEntityService, BaseGraphqlService, BaseGraphqlServiceOptions, BaseReferential, Beans, CORE_CONFIG_OPTIONS, CellValueChangeListener, ChipsTestPage, Color, ColorScale, ComponentDirtyGuard, ConfigService, Configuration, CoreModule, CryptoService, DATE_ISO_PATTERN, DATE_UNIX_MS_TIMESTAMP, DATE_UNIX_TIMESTAMP, DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLACEHOLDER_CHAR, DEFAULT_REQUIRED_COLUMNS, DateDiffDurationPipe, DateFormatPipe, DateFromNowPipe, DateTimeTestPage, DateUtils, Department, DepartmentToStringPipe, DurationPipe, ENTITIES_STORAGE_KEY_PREFIX, ENVIRONMENT, EmptyArrayPipe, EntitiesService, EntitiesStorage, EntitiesTableDataSource, Entity, EntityClass, EntityClasses, EntityFilter, EntityFilterUtils, EntityMetadataComponent, EntityStore, EntityUtils, Environment, ErrorCodes, EvenPipe, FileService, FileSizePipe, FormArrayHelper, FormButtonsBarComponent, FormButtonsBarToken, FormFieldValuesHolder, Fragments, GraphqlService, HAMMER_PRESS_TIME, HAMMER_TAP_TIME, HighlightPipe, HomePage, Hotkeys, HotkeysDialogComponent, InMemoryEntitiesService, IsLoginAccountPipe, IsNilOrBlankPipe, IsNotNilOrBlankPipe, IsNotOnFieldModePipe, IsOnFieldModePipe, 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, MapGetPipe, MapKeysPipe, MapValuesPipe, MatAutocompleteConfigHolder, MatAutocompleteField, MatBooleanField, MatChipsField, MatDate, MatDateShort, MatDateTime, MatDuration, MatLatLongField, MatNumpadComponent, MatNumpadContainerComponent, MatNumpadContent, MatPaginatorI18n, MatStepperI18n, MatSwipeField, MaterialChipsModule, MaterialTestingModule, MaterialTestingPage, MathAbsPipe, MenuComponent, MenuItems, MenuService, ModalToolbarComponent, NetworkService, NgInitDirective, NotEmptyArrayPipe, NumberFormatPipe, NumpadDirective, OddPipe, PRIORITIZED_AUTHORITIES, PUBKEY_REGEXP, Peer, Person, PersonFilter, PersonFragments, PersonService, PersonToStringPipe, PersonUtils, PersonValidatorService, PlatformService, ProgressBarService, ProgressInterceptor, PropertyGetPipe, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, Referential, ReferentialRef, ReferentialUtils, RegisterConfirmPage, SETTINGS_DISPLAY_COLUMNS, SETTINGS_FILTER, SETTINGS_PAGE_SIZE, SETTINGS_SORTED_COLUMN, SETTINGS_STORAGE_KEY, SETTINGS_TRANSIENT_PROPERTIES, SPACE_PLACEHOLDER_CHAR, SelectPeerModal, SettingsPage, SharedDirectivesModule, SharedFormArrayValidators, SharedFormGroupValidators, SharedHotkeysModule, SharedMatAutocompleteModule, SharedMatBooleanModule, SharedMatDateTimeModule, SharedMatDurationModule, SharedMatLatLongModule, SharedMatNumpadModule, SharedMatSwipeModule, SharedMaterialModule, SharedModule, SharedPipesModule, SharedRoutingModule, SharedTestingModule, SharedValidators, SocialModule, Software, StatusById, StatusIds, StatusList, StrLengthPipe, SwipeTestPage, TableSelectColumnsComponent, ToStringPipe, Toasts, ToolbarComponent, ToolbarToken, TranslatablePipe, TranslateContextPipe, TranslateContextService, UserEvent, UserEventFilter, UserEventService, UserEventTypes, UserEventsTable, UserSettings, UsersPage, accountToString, adaptValueToControl, addValueInArray, arrayDistinct, arrayGroupBy, arraySize, asInputElement, canHaveFocus, capitalizeFirstLetter, chainPromises, changeCaseToUnderscore, clearValueInArray, copyEntity2Form, createPromiseEvent, createPromiseEventEmitter, departmentToString, departmentsToString, disableControls, emitPromiseEvent, entityToString, equalsOrNil, fadeInAnimation, fadeInOutAnimation, filterFalse, filterNotNil, filterNumberInput, filterTrue, firstArrayValue, firstFalsePromise, firstNotNil, firstNotNilPromise, 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, isControlHasInput, isEmptyArray, isInputElement, isInstanceOf, isInt, isNil, isNilOrBlank, isNilOrNaN, isNotEmptyArray, isNotNil, isNotNilOrBlank, isNotNilOrNaN, isNotNilString, isNumber, isNumberRange, joinProperties, joinPropertiesPath, logFormErrors, markAllAsTouched, markAsUntouched, markControlAsTouched, markFormGroupAsTouched, matchUpperCase, mergeLoadResult, mixHex, 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, toBoolean, toDateISOString, toDuration, toFloat, toInt, toNotNil, toNumber, trimEmptyToNull, uncapitalizeFirstLetter, updateValueAndValidity, waitFor, waitIdle, waitWhilePending, ɵ0$5 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 };
|
|
23730
|
+
//# sourceMappingURL=sumaris-net.ngx-components.js.map
|