@sumaris-net/ngx-components 0.25.16 → 0.25.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/sumaris-net.ngx-components.umd.js +341 -296
- package/bundles/sumaris-net.ngx-components.umd.js.map +1 -1
- package/bundles/sumaris-net.ngx-components.umd.min.js +2 -2
- package/bundles/sumaris-net.ngx-components.umd.min.js.map +1 -1
- package/esm2015/src/app/core/form/entity-editor.class.js +5 -2
- package/esm2015/src/app/core/services/model/entity.model.js +1 -1
- package/esm2015/src/app/core/table/entities-table-datasource.class.js +5 -7
- package/esm2015/src/app/core/table/table.class.js +22 -16
- package/esm2015/src/app/shared/material/autocomplete/testing/autocomplete.test.js +2 -2
- package/esm2015/src/app/shared/validator/validators.js +8 -9
- package/fesm2015/sumaris-net.ngx-components.js +309 -288
- package/fesm2015/sumaris-net.ngx-components.js.map +1 -1
- package/package.json +1 -1
- package/src/app/core/form/entity-editor.class.d.ts +1 -0
- package/src/app/core/services/model/entity.model.d.ts +2 -2
- package/src/app/core/table/table.class.d.ts +1 -0
- package/src/theme/_ngx-components.scss +6 -0
- package/sumaris-net.ngx-components.metadata.json +1 -1
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { InjectionToken, EventEmitter, forwardRef, Component, ChangeDetectionStrategy, ChangeDetectorRef, Optional, Input, HostBinding, Output, ViewChild, Pipe, Injectable, Directive, Inject, NgModule, ElementRef, ViewChildren, HostListener, ComponentFactoryResolver, ApplicationRef, Injector, 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, AbstractControl, FormGroup, FormArray, FormControl, ReactiveFormsModule, Validators, FormBuilder } from '@angular/forms';
|
|
34
39
|
import { timer, merge, fromEvent, Subscription, BehaviorSubject, Subject, isObservable, of, noop as noop$8, Observable, defer, from, 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,13 +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 { NotificationVisibility, Downloader
|
|
85
|
-
import
|
|
86
|
-
import
|
|
87
|
-
import
|
|
88
|
-
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';
|
|
89
104
|
import { ValidatorService, TableDataSource } from '@e-is/ngx-material-table';
|
|
90
105
|
import { SelectionModel } from '@angular/cdk/collections';
|
|
91
106
|
import { NgxJdenticonModule } from 'ngx-jdenticon';
|
|
@@ -870,19 +885,19 @@ class MatAutocompleteConfigHolder {
|
|
|
870
885
|
return this.fields[fieldName] || this.add(fieldName);
|
|
871
886
|
}
|
|
872
887
|
}
|
|
873
|
-
const DEFAULT_VALUE_ACCESSOR = {
|
|
888
|
+
const DEFAULT_VALUE_ACCESSOR$6 = {
|
|
874
889
|
provide: NG_VALUE_ACCESSOR,
|
|
875
890
|
useExisting: forwardRef(() => MatAutocompleteField),
|
|
876
891
|
multi: true
|
|
877
892
|
};
|
|
878
|
-
const noop = () => { };
|
|
879
|
-
const ɵ0 = noop;
|
|
893
|
+
const noop$7 = () => { };
|
|
894
|
+
const ɵ0$a = noop$7;
|
|
880
895
|
class MatAutocompleteField {
|
|
881
896
|
constructor(cd, formGroupDir) {
|
|
882
897
|
this.cd = cd;
|
|
883
898
|
this.formGroupDir = formGroupDir;
|
|
884
|
-
this._onChangeCallback = noop;
|
|
885
|
-
this._onTouchedCallback = noop;
|
|
899
|
+
this._onChangeCallback = noop$7;
|
|
900
|
+
this._onTouchedCallback = noop$7;
|
|
886
901
|
this._subscription = new Subscription();
|
|
887
902
|
this._filter$ = new BehaviorSubject(undefined);
|
|
888
903
|
this._reload$ = new Subject();
|
|
@@ -1476,7 +1491,7 @@ MatAutocompleteField.decorators = [
|
|
|
1476
1491
|
// eslint-disable-next-line @angular-eslint/component-selector
|
|
1477
1492
|
selector: 'mat-autocomplete-field',
|
|
1478
1493
|
template: "<ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col class=\"ion-no-padding\">\n <mat-form-field *ngIf=\"_readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n [title]=\"displayValue\"\n class=\"mat-form-field-disabled\">\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <!-- readonly -->\n <ng-container>\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 <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n\n </mat-form-field>\n\n <ng-template #writable>\n <mat-form-field [floatLabel]=\"floatLabel\"\n [class.mat-form-field-disabled]=\"disabled\"\n [title]=\"displayValue\">\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\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\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 <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\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 </ng-template>\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\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n\n\n<ng-template #matSuffixTemplate>\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 select=\"[matSuffix]\"></ng-content>\n</ng-template>\n",
|
|
1479
|
-
providers: [DEFAULT_VALUE_ACCESSOR],
|
|
1494
|
+
providers: [DEFAULT_VALUE_ACCESSOR$6],
|
|
1480
1495
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1481
1496
|
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}"]
|
|
1482
1497
|
},] }
|
|
@@ -1553,7 +1568,7 @@ class DateFormatPipe {
|
|
|
1553
1568
|
return this.dateAdapter.format(date, displayFormat);
|
|
1554
1569
|
}
|
|
1555
1570
|
}
|
|
1556
|
-
DateFormatPipe.ɵprov =
|
|
1571
|
+
DateFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DateFormatPipe_Factory() { return new DateFormatPipe(i0.ɵɵinject(i1.MomentDateAdapter), i0.ɵɵinject(i1$1.TranslateService)); }, token: DateFormatPipe, providedIn: "root" });
|
|
1557
1572
|
DateFormatPipe.decorators = [
|
|
1558
1573
|
{ type: Pipe, args: [{
|
|
1559
1574
|
name: 'dateFormat'
|
|
@@ -1565,7 +1580,7 @@ DateFormatPipe.ctorParameters = () => [
|
|
|
1565
1580
|
{ type: TranslateService }
|
|
1566
1581
|
];
|
|
1567
1582
|
|
|
1568
|
-
const moment = momentImported;
|
|
1583
|
+
const moment$6 = momentImported;
|
|
1569
1584
|
class DateDiffDurationPipe {
|
|
1570
1585
|
constructor(dateAdapter, translate) {
|
|
1571
1586
|
this.dateAdapter = dateAdapter;
|
|
@@ -1581,17 +1596,17 @@ class DateDiffDurationPipe {
|
|
|
1581
1596
|
return this.format(startDate, endDate);
|
|
1582
1597
|
}
|
|
1583
1598
|
format(startDate, endDate) {
|
|
1584
|
-
const duration = moment.duration(endDate.diff(startDate));
|
|
1599
|
+
const duration = moment$6.duration(endDate.diff(startDate));
|
|
1585
1600
|
if (duration.asMinutes() < 0)
|
|
1586
1601
|
return '';
|
|
1587
|
-
const timeDuration = moment(0)
|
|
1602
|
+
const timeDuration = moment$6(0)
|
|
1588
1603
|
.hour(duration.hours())
|
|
1589
1604
|
.minute(duration.minutes());
|
|
1590
1605
|
const days = Math.floor(duration.asDays());
|
|
1591
1606
|
return (days > 0 ? days.toString() + (this.dayUnit + ' ') : '') + timeDuration.format('HH:mm');
|
|
1592
1607
|
}
|
|
1593
1608
|
}
|
|
1594
|
-
DateDiffDurationPipe.ɵprov =
|
|
1609
|
+
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" });
|
|
1595
1610
|
DateDiffDurationPipe.decorators = [
|
|
1596
1611
|
{ type: Pipe, args: [{
|
|
1597
1612
|
name: 'dateDiffDuration'
|
|
@@ -1612,7 +1627,7 @@ class DateFromNowPipe {
|
|
|
1612
1627
|
return date ? date.fromNow(args && args.withoutSuffix) : '';
|
|
1613
1628
|
}
|
|
1614
1629
|
}
|
|
1615
|
-
DateFromNowPipe.ɵprov =
|
|
1630
|
+
DateFromNowPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DateFromNowPipe_Factory() { return new DateFromNowPipe(i0.ɵɵinject(i1.MomentDateAdapter)); }, token: DateFromNowPipe, providedIn: "root" });
|
|
1616
1631
|
DateFromNowPipe.decorators = [
|
|
1617
1632
|
{ type: Pipe, args: [{
|
|
1618
1633
|
name: 'dateFromNow'
|
|
@@ -1681,7 +1696,7 @@ function formatToDD(value, opts) {
|
|
|
1681
1696
|
value *= -1;
|
|
1682
1697
|
}
|
|
1683
1698
|
}
|
|
1684
|
-
let degrees = roundFloat(value, opts.maxDecimals).toString();
|
|
1699
|
+
let degrees = roundFloat$1(value, opts.maxDecimals).toString();
|
|
1685
1700
|
// Add sign
|
|
1686
1701
|
let sign = negative ? '-' : '+';
|
|
1687
1702
|
if (opts.placeholderChar) {
|
|
@@ -1732,7 +1747,7 @@ function formatToDDMMSS(value, opts) {
|
|
|
1732
1747
|
}
|
|
1733
1748
|
let degrees = Math.trunc(value);
|
|
1734
1749
|
let minutes = Math.trunc((value - degrees) * 60);
|
|
1735
|
-
let seconds = roundFloat(((value - degrees) * 60 - minutes) * 60, opts.maxDecimals);
|
|
1750
|
+
let seconds = roundFloat$1(((value - degrees) * 60 - minutes) * 60, opts.maxDecimals);
|
|
1736
1751
|
while (seconds >= 60) {
|
|
1737
1752
|
seconds -= 60;
|
|
1738
1753
|
minutes += 1;
|
|
@@ -1800,7 +1815,7 @@ function formatToDDMM(value, opts) {
|
|
|
1800
1815
|
}
|
|
1801
1816
|
}
|
|
1802
1817
|
let degrees = Math.trunc(value);
|
|
1803
|
-
let minutes = roundFloat((value - degrees) * 60, opts.maxDecimals);
|
|
1818
|
+
let minutes = roundFloat$1((value - degrees) * 60, opts.maxDecimals);
|
|
1804
1819
|
while (minutes >= 60) {
|
|
1805
1820
|
minutes -= 60;
|
|
1806
1821
|
degrees += 1;
|
|
@@ -1851,15 +1866,15 @@ function parseLatitudeOrLongitude(input, pattern, maxDecimals, placeholderChar)
|
|
|
1851
1866
|
return NaN;
|
|
1852
1867
|
}
|
|
1853
1868
|
if (pattern === 'DD')
|
|
1854
|
-
return roundFloat(degrees, maxDecimals);
|
|
1869
|
+
return roundFloat$1(degrees, maxDecimals);
|
|
1855
1870
|
const minutes = (pattern === 'DDMMSS' || pattern === 'DDMM') && parts[1] && parseFloat(parts[1].replace(/,/g, '.')) || 0;
|
|
1856
1871
|
const seconds = (pattern === 'DDMMSS') && parts[2] && parseFloat(parts[2].replace(/,/g, '.')) || 0;
|
|
1857
1872
|
const direction = ((pattern === 'DDMMSS') && parts[3]) || ((pattern === 'DDMM') && parts[2]) || undefined;
|
|
1858
1873
|
const sign = (direction && (direction === 's' || direction === 'S' || direction === 'w' || direction === 'W')) ? -1 : 1;
|
|
1859
1874
|
degrees = sign * (degrees + minutes / 60 + seconds / (60 * 60));
|
|
1860
|
-
return roundFloat(degrees, maxDecimals);
|
|
1875
|
+
return roundFloat$1(degrees, maxDecimals);
|
|
1861
1876
|
}
|
|
1862
|
-
function roundFloat(input, maxDecimals) {
|
|
1877
|
+
function roundFloat$1(input, maxDecimals) {
|
|
1863
1878
|
if (maxDecimals > 0) {
|
|
1864
1879
|
const powDecimal = Math.pow(10, maxDecimals);
|
|
1865
1880
|
return Math.trunc(input * powDecimal + 0.5) / powDecimal;
|
|
@@ -1879,7 +1894,7 @@ class LatLongFormatPipe {
|
|
|
1879
1894
|
return ((!args.type || args.type !== 'latitude') ? formatLongitude : formatLatitude)(value, args);
|
|
1880
1895
|
}
|
|
1881
1896
|
}
|
|
1882
|
-
LatLongFormatPipe.ɵprov =
|
|
1897
|
+
LatLongFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function LatLongFormatPipe_Factory() { return new LatLongFormatPipe(); }, token: LatLongFormatPipe, providedIn: "root" });
|
|
1883
1898
|
LatLongFormatPipe.decorators = [
|
|
1884
1899
|
{ type: Pipe, args: [{
|
|
1885
1900
|
name: 'latLongFormat'
|
|
@@ -1891,7 +1906,7 @@ class LatitudeFormatPipe {
|
|
|
1891
1906
|
this.transform = formatLatitude;
|
|
1892
1907
|
}
|
|
1893
1908
|
}
|
|
1894
|
-
LatitudeFormatPipe.ɵprov =
|
|
1909
|
+
LatitudeFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function LatitudeFormatPipe_Factory() { return new LatitudeFormatPipe(); }, token: LatitudeFormatPipe, providedIn: "root" });
|
|
1895
1910
|
LatitudeFormatPipe.decorators = [
|
|
1896
1911
|
{ type: Pipe, args: [{
|
|
1897
1912
|
name: 'latitudeFormat'
|
|
@@ -1903,7 +1918,7 @@ class LongitudeFormatPipe {
|
|
|
1903
1918
|
this.transform = formatLongitude;
|
|
1904
1919
|
}
|
|
1905
1920
|
}
|
|
1906
|
-
LongitudeFormatPipe.ɵprov =
|
|
1921
|
+
LongitudeFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function LongitudeFormatPipe_Factory() { return new LongitudeFormatPipe(); }, token: LongitudeFormatPipe, providedIn: "root" });
|
|
1907
1922
|
LongitudeFormatPipe.decorators = [
|
|
1908
1923
|
{ type: Pipe, args: [{
|
|
1909
1924
|
name: 'longitudeFormat'
|
|
@@ -1923,7 +1938,7 @@ class NumberFormatPipe {
|
|
|
1923
1938
|
}
|
|
1924
1939
|
}
|
|
1925
1940
|
}
|
|
1926
|
-
NumberFormatPipe.ɵprov =
|
|
1941
|
+
NumberFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function NumberFormatPipe_Factory() { return new NumberFormatPipe(); }, token: NumberFormatPipe, providedIn: "root" });
|
|
1927
1942
|
NumberFormatPipe.decorators = [
|
|
1928
1943
|
{ type: Pipe, args: [{
|
|
1929
1944
|
name: 'numberFormat'
|
|
@@ -1963,7 +1978,7 @@ class HighlightPipe {
|
|
|
1963
1978
|
}
|
|
1964
1979
|
}
|
|
1965
1980
|
}
|
|
1966
|
-
HighlightPipe.ɵprov =
|
|
1981
|
+
HighlightPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function HighlightPipe_Factory() { return new HighlightPipe(); }, token: HighlightPipe, providedIn: "root" });
|
|
1967
1982
|
HighlightPipe.decorators = [
|
|
1968
1983
|
{ type: Pipe, args: [{
|
|
1969
1984
|
name: 'highlight'
|
|
@@ -2028,7 +2043,7 @@ FileSizePipe.decorators = [
|
|
|
2028
2043
|
{ type: Pipe, args: [{ name: 'fileSize' },] }
|
|
2029
2044
|
];
|
|
2030
2045
|
|
|
2031
|
-
const moment$
|
|
2046
|
+
const moment$5 = momentImported;
|
|
2032
2047
|
const DATE_UNIX_TIMESTAMP = 'X';
|
|
2033
2048
|
const DATE_UNIX_MS_TIMESTAMP = 'x';
|
|
2034
2049
|
class DateUtils {
|
|
@@ -2062,32 +2077,32 @@ function fromDateISOString(value) {
|
|
|
2062
2077
|
if (!value || isMoment(value))
|
|
2063
2078
|
return value;
|
|
2064
2079
|
// Parse the input value, as a ISO date time
|
|
2065
|
-
const date = moment$
|
|
2080
|
+
const date = moment$5(value, DATE_ISO_PATTERN);
|
|
2066
2081
|
if (date.isValid())
|
|
2067
2082
|
return date;
|
|
2068
2083
|
// Not valid: trying to convert from unix timestamp
|
|
2069
2084
|
if (typeof value === 'string') {
|
|
2070
2085
|
console.warn('Wrong date format - Trying to convert from local time: ' + value);
|
|
2071
2086
|
if (value.length === 10) {
|
|
2072
|
-
return moment$
|
|
2087
|
+
return moment$5(value, DATE_UNIX_TIMESTAMP);
|
|
2073
2088
|
}
|
|
2074
2089
|
else if (value.length === 13) {
|
|
2075
|
-
return moment$
|
|
2090
|
+
return moment$5(value, DATE_UNIX_MS_TIMESTAMP);
|
|
2076
2091
|
}
|
|
2077
2092
|
}
|
|
2078
2093
|
console.warn('Unable to parse date: ' + value);
|
|
2079
2094
|
return undefined;
|
|
2080
2095
|
}
|
|
2081
2096
|
function fromUnixTimestamp(timeInSec) {
|
|
2082
|
-
return moment$
|
|
2097
|
+
return moment$5(timeInSec, DATE_UNIX_TIMESTAMP);
|
|
2083
2098
|
}
|
|
2084
2099
|
function fromUnixMsTimestamp(timeInMs) {
|
|
2085
|
-
return moment$
|
|
2100
|
+
return moment$5(timeInMs, DATE_UNIX_MS_TIMESTAMP);
|
|
2086
2101
|
}
|
|
2087
2102
|
function toDuration(value, unit) {
|
|
2088
2103
|
if (!value)
|
|
2089
2104
|
return undefined;
|
|
2090
|
-
const duration = moment$
|
|
2105
|
+
const duration = moment$5.duration(value, unit);
|
|
2091
2106
|
// fix 990+ ms
|
|
2092
2107
|
if (duration.milliseconds() >= 990) {
|
|
2093
2108
|
duration.add(1000 - duration.milliseconds(), 'ms');
|
|
@@ -2116,7 +2131,7 @@ class DurationPipe {
|
|
|
2116
2131
|
return (days > 0 ? days.toString() + (this.dayUnit + ' ') : '') + hour + ':' + minute;
|
|
2117
2132
|
}
|
|
2118
2133
|
}
|
|
2119
|
-
DurationPipe.ɵprov =
|
|
2134
|
+
DurationPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DurationPipe_Factory() { return new DurationPipe(i0.ɵɵinject(i1$1.TranslateService)); }, token: DurationPipe, providedIn: "root" });
|
|
2120
2135
|
DurationPipe.decorators = [
|
|
2121
2136
|
{ type: Pipe, args: [{
|
|
2122
2137
|
name: 'duration'
|
|
@@ -2137,7 +2152,7 @@ class MathAbsPipe {
|
|
|
2137
2152
|
}
|
|
2138
2153
|
}
|
|
2139
2154
|
}
|
|
2140
|
-
MathAbsPipe.ɵprov =
|
|
2155
|
+
MathAbsPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MathAbsPipe_Factory() { return new MathAbsPipe(); }, token: MathAbsPipe, providedIn: "root" });
|
|
2141
2156
|
MathAbsPipe.decorators = [
|
|
2142
2157
|
{ type: Pipe, args: [{
|
|
2143
2158
|
name: 'mathAbs'
|
|
@@ -2149,7 +2164,7 @@ class EvenPipe {
|
|
|
2149
2164
|
return val % 2 === 0;
|
|
2150
2165
|
}
|
|
2151
2166
|
}
|
|
2152
|
-
EvenPipe.ɵprov =
|
|
2167
|
+
EvenPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function EvenPipe_Factory() { return new EvenPipe(); }, token: EvenPipe, providedIn: "root" });
|
|
2153
2168
|
EvenPipe.decorators = [
|
|
2154
2169
|
{ type: Pipe, args: [{
|
|
2155
2170
|
name: 'even'
|
|
@@ -2161,7 +2176,7 @@ class OddPipe {
|
|
|
2161
2176
|
return val % 2 !== 0;
|
|
2162
2177
|
}
|
|
2163
2178
|
}
|
|
2164
|
-
OddPipe.ɵprov =
|
|
2179
|
+
OddPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function OddPipe_Factory() { return new OddPipe(); }, token: OddPipe, providedIn: "root" });
|
|
2165
2180
|
OddPipe.decorators = [
|
|
2166
2181
|
{ type: Pipe, args: [{
|
|
2167
2182
|
name: 'odd'
|
|
@@ -2269,7 +2284,7 @@ class MapGetPipe {
|
|
|
2269
2284
|
return val[key];
|
|
2270
2285
|
}
|
|
2271
2286
|
}
|
|
2272
|
-
MapGetPipe.ɵprov =
|
|
2287
|
+
MapGetPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MapGetPipe_Factory() { return new MapGetPipe(); }, token: MapGetPipe, providedIn: "root" });
|
|
2273
2288
|
MapGetPipe.decorators = [
|
|
2274
2289
|
{ type: Pipe, args: [{
|
|
2275
2290
|
name: 'mapGet'
|
|
@@ -2283,7 +2298,7 @@ class MapKeysPipe {
|
|
|
2283
2298
|
return Object.keys(map);
|
|
2284
2299
|
}
|
|
2285
2300
|
}
|
|
2286
|
-
MapKeysPipe.ɵprov =
|
|
2301
|
+
MapKeysPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MapKeysPipe_Factory() { return new MapKeysPipe(); }, token: MapKeysPipe, providedIn: "root" });
|
|
2287
2302
|
MapKeysPipe.decorators = [
|
|
2288
2303
|
{ type: Pipe, args: [{
|
|
2289
2304
|
name: 'mapKeys'
|
|
@@ -2297,7 +2312,7 @@ class MapValuesPipe {
|
|
|
2297
2312
|
return Object.values(map);
|
|
2298
2313
|
}
|
|
2299
2314
|
}
|
|
2300
|
-
MapValuesPipe.ɵprov =
|
|
2315
|
+
MapValuesPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MapValuesPipe_Factory() { return new MapValuesPipe(); }, token: MapValuesPipe, providedIn: "root" });
|
|
2301
2316
|
MapValuesPipe.decorators = [
|
|
2302
2317
|
{ type: Pipe, args: [{
|
|
2303
2318
|
name: 'mapValues'
|
|
@@ -2310,7 +2325,7 @@ class IsNotNilOrBlankPipe {
|
|
|
2310
2325
|
return isNotNilOrBlank(value);
|
|
2311
2326
|
}
|
|
2312
2327
|
}
|
|
2313
|
-
IsNotNilOrBlankPipe.ɵprov =
|
|
2328
|
+
IsNotNilOrBlankPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsNotNilOrBlankPipe_Factory() { return new IsNotNilOrBlankPipe(); }, token: IsNotNilOrBlankPipe, providedIn: "root" });
|
|
2314
2329
|
IsNotNilOrBlankPipe.decorators = [
|
|
2315
2330
|
{ type: Pipe, args: [{
|
|
2316
2331
|
name: 'isNotNilOrBlank'
|
|
@@ -2322,7 +2337,7 @@ class IsNilOrBlankPipe {
|
|
|
2322
2337
|
return isNilOrBlank(value);
|
|
2323
2338
|
}
|
|
2324
2339
|
}
|
|
2325
|
-
IsNilOrBlankPipe.ɵprov =
|
|
2340
|
+
IsNilOrBlankPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsNilOrBlankPipe_Factory() { return new IsNilOrBlankPipe(); }, token: IsNilOrBlankPipe, providedIn: "root" });
|
|
2326
2341
|
IsNilOrBlankPipe.decorators = [
|
|
2327
2342
|
{ type: Pipe, args: [{
|
|
2328
2343
|
name: 'isNilOrBlank'
|
|
@@ -2334,7 +2349,7 @@ class ToStringPipe {
|
|
|
2334
2349
|
return (value !== null && value !== undefined) ? value.toString() : '';
|
|
2335
2350
|
}
|
|
2336
2351
|
}
|
|
2337
|
-
ToStringPipe.ɵprov =
|
|
2352
|
+
ToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function ToStringPipe_Factory() { return new ToStringPipe(); }, token: ToStringPipe, providedIn: "root" });
|
|
2338
2353
|
ToStringPipe.decorators = [
|
|
2339
2354
|
{ type: Pipe, args: [{
|
|
2340
2355
|
name: 'toString'
|
|
@@ -2346,7 +2361,7 @@ class StrLengthPipe {
|
|
|
2346
2361
|
return value && value.length || 0;
|
|
2347
2362
|
}
|
|
2348
2363
|
}
|
|
2349
|
-
StrLengthPipe.ɵprov =
|
|
2364
|
+
StrLengthPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function StrLengthPipe_Factory() { return new StrLengthPipe(); }, token: StrLengthPipe, providedIn: "root" });
|
|
2350
2365
|
StrLengthPipe.decorators = [
|
|
2351
2366
|
{ type: Pipe, args: [{
|
|
2352
2367
|
name: 'strLength'
|
|
@@ -2397,7 +2412,7 @@ class TranslateContextService {
|
|
|
2397
2412
|
: parts.slice(0, parts.length - 1).concat(context + parts[parts.length - 1]).join('.');
|
|
2398
2413
|
}
|
|
2399
2414
|
}
|
|
2400
|
-
TranslateContextService.ɵprov =
|
|
2415
|
+
TranslateContextService.ɵprov = i0.ɵɵdefineInjectable({ factory: function TranslateContextService_Factory() { return new TranslateContextService(i0.ɵɵinject(i1$1.TranslateService)); }, token: TranslateContextService, providedIn: "root" });
|
|
2401
2416
|
TranslateContextService.decorators = [
|
|
2402
2417
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
2403
2418
|
];
|
|
@@ -2413,7 +2428,7 @@ class TranslateContextPipe {
|
|
|
2413
2428
|
return this.translateContext.instant(key, context);
|
|
2414
2429
|
}
|
|
2415
2430
|
}
|
|
2416
|
-
TranslateContextPipe.ɵprov =
|
|
2431
|
+
TranslateContextPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function TranslateContextPipe_Factory() { return new TranslateContextPipe(i0.ɵɵinject(TranslateContextService)); }, token: TranslateContextPipe, providedIn: "root" });
|
|
2417
2432
|
TranslateContextPipe.decorators = [
|
|
2418
2433
|
{ type: Pipe, args: [{
|
|
2419
2434
|
name: 'translateContext'
|
|
@@ -2430,7 +2445,7 @@ class TranslatablePipe {
|
|
|
2430
2445
|
return (_a = changeCaseToUnderscore(value)) === null || _a === void 0 ? void 0 : _a.toUpperCase();
|
|
2431
2446
|
}
|
|
2432
2447
|
}
|
|
2433
|
-
TranslatablePipe.ɵprov =
|
|
2448
|
+
TranslatablePipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function TranslatablePipe_Factory() { return new TranslatablePipe(); }, token: TranslatablePipe, providedIn: "root" });
|
|
2434
2449
|
TranslatablePipe.decorators = [
|
|
2435
2450
|
{ type: Pipe, args: [{
|
|
2436
2451
|
name: 'translatable'
|
|
@@ -2447,7 +2462,7 @@ class PropertyGetPipe {
|
|
|
2447
2462
|
args && args.defaultValue);
|
|
2448
2463
|
}
|
|
2449
2464
|
}
|
|
2450
|
-
PropertyGetPipe.ɵprov =
|
|
2465
|
+
PropertyGetPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function PropertyGetPipe_Factory() { return new PropertyGetPipe(); }, token: PropertyGetPipe, providedIn: "root" });
|
|
2451
2466
|
PropertyGetPipe.decorators = [
|
|
2452
2467
|
{ type: Pipe, args: [{
|
|
2453
2468
|
name: 'propertyGet'
|
|
@@ -2472,12 +2487,12 @@ NgInitDirective.propDecorators = {
|
|
|
2472
2487
|
ngInit: [{ type: Output }]
|
|
2473
2488
|
};
|
|
2474
2489
|
|
|
2475
|
-
const moment$
|
|
2490
|
+
const moment$4 = momentImported;
|
|
2476
2491
|
// @dynamic
|
|
2477
2492
|
class SharedValidators {
|
|
2478
2493
|
static validDate(control) {
|
|
2479
2494
|
const value = control.value;
|
|
2480
|
-
const date = !value || moment$
|
|
2495
|
+
const date = !value || moment$4.isMoment(value) ? value : moment$4(control.value, DATE_ISO_PATTERN);
|
|
2481
2496
|
if (date && (!date.isValid() || date.year() < 1970)) {
|
|
2482
2497
|
return { validDate: true };
|
|
2483
2498
|
}
|
|
@@ -2685,23 +2700,22 @@ class SharedFormGroupValidators {
|
|
|
2685
2700
|
};
|
|
2686
2701
|
}
|
|
2687
2702
|
static dateMaxDuration(startDateField, endDateField, maxDuration, durationUnit) {
|
|
2703
|
+
const maxDurationError = { dateMaxDuration: true };
|
|
2688
2704
|
return (group) => {
|
|
2689
|
-
const endField = group.get(endDateField);
|
|
2690
2705
|
const startDate = fromDateISOString(group.get(startDateField).value);
|
|
2706
|
+
const endField = group.get(endDateField);
|
|
2691
2707
|
const endDate = fromDateISOString(endField.value);
|
|
2692
2708
|
if (isNotNil(startDate) && isNotNil(endDate) && Math.abs(startDate.diff(endDate, durationUnit)) > maxDuration) {
|
|
2709
|
+
console.log('TODO error !');
|
|
2693
2710
|
// Update end field
|
|
2694
|
-
const endFieldErrors = endField.errors || {};
|
|
2695
|
-
endFieldErrors['dateMaxDuration'] = true;
|
|
2696
|
-
endField.setErrors(endFieldErrors);
|
|
2697
2711
|
endField.markAsTouched({ onlySelf: true });
|
|
2712
|
+
endField.markAsPending();
|
|
2713
|
+
endField.setErrors(Object.assign(Object.assign({}, endField.errors), maxDurationError));
|
|
2698
2714
|
// Return the error (should be apply to the parent form)
|
|
2699
|
-
return
|
|
2715
|
+
return maxDurationError;
|
|
2700
2716
|
}
|
|
2701
2717
|
// OK: remove the existing on the end field
|
|
2702
|
-
|
|
2703
|
-
SharedValidators.clearError(endField, 'dateMaxDuration');
|
|
2704
|
-
}
|
|
2718
|
+
SharedValidators.clearError(endField, 'dateMaxDuration');
|
|
2705
2719
|
return null;
|
|
2706
2720
|
};
|
|
2707
2721
|
}
|
|
@@ -3513,7 +3527,7 @@ class FormErrorAdapter {
|
|
|
3513
3527
|
return errorKey;
|
|
3514
3528
|
}
|
|
3515
3529
|
}
|
|
3516
|
-
FormErrorAdapter.ɵprov =
|
|
3530
|
+
FormErrorAdapter.ɵprov = i0.ɵɵdefineInjectable({ factory: function FormErrorAdapter_Factory() { return new FormErrorAdapter(i0.ɵɵinject(i1$1.TranslateService), i0.ɵɵinject(APP_FORM_ERROR_I18N_KEYS, 8)); }, token: FormErrorAdapter, providedIn: "root" });
|
|
3517
3531
|
FormErrorAdapter.decorators = [
|
|
3518
3532
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
3519
3533
|
];
|
|
@@ -3782,9 +3796,9 @@ function parseDuration(input, maxDecimals, placeholderChar) {
|
|
|
3782
3796
|
const hour = parseInt(durationParts[0] || '0');
|
|
3783
3797
|
const minute = parseInt(durationParts[1] || '0');
|
|
3784
3798
|
const value = hour + (minute + 0.5) / 60;
|
|
3785
|
-
return roundFloat
|
|
3799
|
+
return roundFloat(value, maxDecimals);
|
|
3786
3800
|
}
|
|
3787
|
-
function roundFloat
|
|
3801
|
+
function roundFloat(input, maxDecimals) {
|
|
3788
3802
|
if (maxDecimals > 0) {
|
|
3789
3803
|
const powDecimal = Math.pow(10, maxDecimals);
|
|
3790
3804
|
return Math.trunc(input * powDecimal + 0.5) / powDecimal;
|
|
@@ -3808,9 +3822,9 @@ const MASKS = {
|
|
|
3808
3822
|
DD: [/[+-]/, /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, '°']
|
|
3809
3823
|
}
|
|
3810
3824
|
};
|
|
3811
|
-
const noop$
|
|
3825
|
+
const noop$6 = () => {
|
|
3812
3826
|
};
|
|
3813
|
-
const ɵ0$
|
|
3827
|
+
const ɵ0$9 = noop$6;
|
|
3814
3828
|
class MatLatLongField {
|
|
3815
3829
|
constructor(platform, translate, formBuilder, cd, formGroupDir) {
|
|
3816
3830
|
this.platform = platform;
|
|
@@ -3818,8 +3832,8 @@ class MatLatLongField {
|
|
|
3818
3832
|
this.formBuilder = formBuilder;
|
|
3819
3833
|
this.cd = cd;
|
|
3820
3834
|
this.formGroupDir = formGroupDir;
|
|
3821
|
-
this._onChangeCallback = noop$
|
|
3822
|
-
this._onTouchedCallback = noop$
|
|
3835
|
+
this._onChangeCallback = noop$6;
|
|
3836
|
+
this._onTouchedCallback = noop$6;
|
|
3823
3837
|
this._subscription = new Subscription();
|
|
3824
3838
|
this.disabling = false;
|
|
3825
3839
|
this.writing = false;
|
|
@@ -4155,14 +4169,14 @@ SharedMatLatLongModule.decorators = [
|
|
|
4155
4169
|
},] }
|
|
4156
4170
|
];
|
|
4157
4171
|
|
|
4158
|
-
const DEFAULT_VALUE_ACCESSOR$
|
|
4172
|
+
const DEFAULT_VALUE_ACCESSOR$5 = {
|
|
4159
4173
|
provide: NG_VALUE_ACCESSOR,
|
|
4160
4174
|
useExisting: forwardRef(() => MatDate),
|
|
4161
4175
|
multi: true
|
|
4162
4176
|
};
|
|
4163
|
-
const DAY_MASK = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
|
|
4164
|
-
const noop$
|
|
4165
|
-
const ɵ0$
|
|
4177
|
+
const DAY_MASK$2 = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
|
|
4178
|
+
const noop$5 = () => { };
|
|
4179
|
+
const ɵ0$8 = noop$5;
|
|
4166
4180
|
class MatDate {
|
|
4167
4181
|
constructor(platform, dateAdapter, translate, formBuilder, cd, keyboard, formGroupDir) {
|
|
4168
4182
|
this.dateAdapter = dateAdapter;
|
|
@@ -4171,12 +4185,12 @@ class MatDate {
|
|
|
4171
4185
|
this.cd = cd;
|
|
4172
4186
|
this.keyboard = keyboard;
|
|
4173
4187
|
this.formGroupDir = formGroupDir;
|
|
4174
|
-
this._onChangeCallback = noop$
|
|
4175
|
-
this._onTouchedCallback = noop$
|
|
4188
|
+
this._onChangeCallback = noop$5;
|
|
4189
|
+
this._onTouchedCallback = noop$5;
|
|
4176
4190
|
this._subscription = new Subscription();
|
|
4177
4191
|
this.writing = true;
|
|
4178
4192
|
this.disabling = false;
|
|
4179
|
-
this.dayMask = DAY_MASK;
|
|
4193
|
+
this.dayMask = DAY_MASK$2;
|
|
4180
4194
|
this.disabled = false;
|
|
4181
4195
|
this.floatLabel = 'auto';
|
|
4182
4196
|
this.readonly = false;
|
|
@@ -4413,7 +4427,7 @@ MatDate.decorators = [
|
|
|
4413
4427
|
selector: 'mat-date-field',
|
|
4414
4428
|
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",
|
|
4415
4429
|
providers: [
|
|
4416
|
-
DEFAULT_VALUE_ACCESSOR$
|
|
4430
|
+
DEFAULT_VALUE_ACCESSOR$5,
|
|
4417
4431
|
],
|
|
4418
4432
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
4419
4433
|
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%}"]
|
|
@@ -4446,17 +4460,17 @@ MatDate.propDecorators = {
|
|
|
4446
4460
|
matInputs: [{ type: ViewChildren, args: ['matInput',] }]
|
|
4447
4461
|
};
|
|
4448
4462
|
|
|
4449
|
-
const DEFAULT_VALUE_ACCESSOR$
|
|
4463
|
+
const DEFAULT_VALUE_ACCESSOR$4 = {
|
|
4450
4464
|
provide: NG_VALUE_ACCESSOR,
|
|
4451
4465
|
useExisting: forwardRef(() => MatDateTime),
|
|
4452
4466
|
multi: true
|
|
4453
4467
|
};
|
|
4454
4468
|
const DAY_MASK$1 = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
|
|
4455
4469
|
const HOUR_REGEXP = /^[012][0-9][:][012345][0-9]$/;
|
|
4456
|
-
const HOUR_MASK = [/[012]/, /\d/, ':', /[012345]/, /\d/];
|
|
4457
|
-
const noop$
|
|
4470
|
+
const HOUR_MASK$1 = [/[012]/, /\d/, ':', /[012345]/, /\d/];
|
|
4471
|
+
const noop$4 = () => {
|
|
4458
4472
|
};
|
|
4459
|
-
const ɵ0$
|
|
4473
|
+
const ɵ0$7 = noop$4;
|
|
4460
4474
|
class MatDateTime {
|
|
4461
4475
|
constructor(platform, dateAdapter, translate, formBuilder, keyboard, cd, formGroupDir) {
|
|
4462
4476
|
this.platform = platform;
|
|
@@ -4466,14 +4480,14 @@ class MatDateTime {
|
|
|
4466
4480
|
this.keyboard = keyboard;
|
|
4467
4481
|
this.cd = cd;
|
|
4468
4482
|
this.formGroupDir = formGroupDir;
|
|
4469
|
-
this._onChangeCallback = noop$
|
|
4470
|
-
this._onTouchedCallback = noop$
|
|
4483
|
+
this._onChangeCallback = noop$4;
|
|
4484
|
+
this._onTouchedCallback = noop$4;
|
|
4471
4485
|
this._subscription = new Subscription();
|
|
4472
4486
|
this.writing = true;
|
|
4473
4487
|
this.disabling = false;
|
|
4474
4488
|
this._readonly = false;
|
|
4475
4489
|
this.dayMask = DAY_MASK$1;
|
|
4476
|
-
this.hourMask = HOUR_MASK;
|
|
4490
|
+
this.hourMask = HOUR_MASK$1;
|
|
4477
4491
|
this.floatLabel = 'auto';
|
|
4478
4492
|
this.compact = false;
|
|
4479
4493
|
this.placeholderChar = DEFAULT_PLACEHOLDER_CHAR;
|
|
@@ -4784,7 +4798,7 @@ MatDateTime.decorators = [
|
|
|
4784
4798
|
selector: 'mat-date-time-field',
|
|
4785
4799
|
template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n class=\"mat-form-field-disabled\">\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput hidden type=\"text\"\n readonly\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\">\n <ion-text>{{formControl.value|dateFormat: {pattern: displayPattern} }}</ion-text>\n</mat-form-field>\n\n<!-- writable + time -->\n<ng-template #writable >\n <ion-grid class=\"ion-no-padding\">\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>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </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\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n",
|
|
4786
4800
|
providers: [
|
|
4787
|
-
DEFAULT_VALUE_ACCESSOR$
|
|
4801
|
+
DEFAULT_VALUE_ACCESSOR$4,
|
|
4788
4802
|
],
|
|
4789
4803
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
4790
4804
|
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%}"]
|
|
@@ -4823,10 +4837,10 @@ const DEFAULT_VALUE_ACCESSOR$3 = {
|
|
|
4823
4837
|
useExisting: forwardRef(() => MatDateShort),
|
|
4824
4838
|
multi: true
|
|
4825
4839
|
};
|
|
4826
|
-
const DAY_MASK
|
|
4827
|
-
const noop$
|
|
4840
|
+
const DAY_MASK = [/\d/, /\d/, /\d/, /\d/];
|
|
4841
|
+
const noop$3 = () => {
|
|
4828
4842
|
};
|
|
4829
|
-
const ɵ0$
|
|
4843
|
+
const ɵ0$6 = noop$3;
|
|
4830
4844
|
class MatDateShort {
|
|
4831
4845
|
constructor(platform, dateAdapter, translate, formBuilder, cd, keyboard, formGroupDir) {
|
|
4832
4846
|
this.dateAdapter = dateAdapter;
|
|
@@ -4835,11 +4849,11 @@ class MatDateShort {
|
|
|
4835
4849
|
this.cd = cd;
|
|
4836
4850
|
this.keyboard = keyboard;
|
|
4837
4851
|
this.formGroupDir = formGroupDir;
|
|
4838
|
-
this._onChangeCallback = noop$
|
|
4839
|
-
this._onTouchedCallback = noop$
|
|
4852
|
+
this._onChangeCallback = noop$3;
|
|
4853
|
+
this._onTouchedCallback = noop$3;
|
|
4840
4854
|
this.writing = true;
|
|
4841
4855
|
this.disabling = false;
|
|
4842
|
-
this.dayMask = DAY_MASK
|
|
4856
|
+
this.dayMask = DAY_MASK;
|
|
4843
4857
|
this.disabled = false;
|
|
4844
4858
|
this.floatLabel = 'auto';
|
|
4845
4859
|
this.readonly = false;
|
|
@@ -5152,16 +5166,16 @@ SharedMatDateTimeModule.decorators = [
|
|
|
5152
5166
|
},] }
|
|
5153
5167
|
];
|
|
5154
5168
|
|
|
5155
|
-
const DEFAULT_VALUE_ACCESSOR$
|
|
5169
|
+
const DEFAULT_VALUE_ACCESSOR$2 = {
|
|
5156
5170
|
provide: NG_VALUE_ACCESSOR,
|
|
5157
5171
|
useExisting: forwardRef(() => MatDuration),
|
|
5158
5172
|
multi: true
|
|
5159
5173
|
};
|
|
5160
5174
|
const HOUR_TIME_PATTERN = /[0-9]\d\d:[0-5]\d/;
|
|
5161
|
-
const HOUR_MASK
|
|
5162
|
-
const noop$
|
|
5175
|
+
const HOUR_MASK = [/\d/, /\d/, /\d/, ':', /[0-5]/, /\d/];
|
|
5176
|
+
const noop$2 = () => {
|
|
5163
5177
|
};
|
|
5164
|
-
const ɵ0$5 = noop$
|
|
5178
|
+
const ɵ0$5 = noop$2;
|
|
5165
5179
|
class MatDuration {
|
|
5166
5180
|
constructor(platform, dateAdapter, translate, formBuilder, cd, formGroupDir) {
|
|
5167
5181
|
this.dateAdapter = dateAdapter;
|
|
@@ -5170,11 +5184,11 @@ class MatDuration {
|
|
|
5170
5184
|
this.cd = cd;
|
|
5171
5185
|
this.formGroupDir = formGroupDir;
|
|
5172
5186
|
this._subscription = new Subscription();
|
|
5173
|
-
this._onChangeCallback = noop$
|
|
5174
|
-
this._onTouchedCallback = noop$
|
|
5187
|
+
this._onChangeCallback = noop$2;
|
|
5188
|
+
this._onTouchedCallback = noop$2;
|
|
5175
5189
|
this.writing = true;
|
|
5176
5190
|
this.disabling = false;
|
|
5177
|
-
this.hourMask = HOUR_MASK
|
|
5191
|
+
this.hourMask = HOUR_MASK;
|
|
5178
5192
|
this.disabled = false;
|
|
5179
5193
|
this.floatLabel = 'auto';
|
|
5180
5194
|
this.readonly = false;
|
|
@@ -5354,7 +5368,7 @@ MatDuration.decorators = [
|
|
|
5354
5368
|
selector: 'mat-duration-field',
|
|
5355
5369
|
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",
|
|
5356
5370
|
providers: [
|
|
5357
|
-
DEFAULT_VALUE_ACCESSOR$
|
|
5371
|
+
DEFAULT_VALUE_ACCESSOR$2,
|
|
5358
5372
|
],
|
|
5359
5373
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
5360
5374
|
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%}"]
|
|
@@ -5411,22 +5425,22 @@ SharedMatDurationModule.decorators = [
|
|
|
5411
5425
|
},] }
|
|
5412
5426
|
];
|
|
5413
5427
|
|
|
5414
|
-
const DEFAULT_VALUE_ACCESSOR$
|
|
5428
|
+
const DEFAULT_VALUE_ACCESSOR$1 = {
|
|
5415
5429
|
provide: NG_VALUE_ACCESSOR,
|
|
5416
5430
|
useExisting: forwardRef(() => MatBooleanField),
|
|
5417
5431
|
multi: true
|
|
5418
5432
|
};
|
|
5419
|
-
const noop$
|
|
5433
|
+
const noop$1 = () => {
|
|
5420
5434
|
};
|
|
5421
|
-
const ɵ0$
|
|
5435
|
+
const ɵ0$4 = noop$1;
|
|
5422
5436
|
class MatBooleanField {
|
|
5423
5437
|
constructor(translate, formBuilder, cd, formGroupDir) {
|
|
5424
5438
|
this.translate = translate;
|
|
5425
5439
|
this.formBuilder = formBuilder;
|
|
5426
5440
|
this.cd = cd;
|
|
5427
5441
|
this.formGroupDir = formGroupDir;
|
|
5428
|
-
this._onChangeCallback = noop$
|
|
5429
|
-
this._onTouchedCallback = noop$
|
|
5442
|
+
this._onChangeCallback = noop$1;
|
|
5443
|
+
this._onTouchedCallback = noop$1;
|
|
5430
5444
|
this._writing = false;
|
|
5431
5445
|
this.showRadio = false;
|
|
5432
5446
|
this.disabled = false;
|
|
@@ -5599,7 +5613,7 @@ MatBooleanField.decorators = [
|
|
|
5599
5613
|
selector: 'mat-boolean-field',
|
|
5600
5614
|
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",
|
|
5601
5615
|
providers: [
|
|
5602
|
-
DEFAULT_VALUE_ACCESSOR$
|
|
5616
|
+
DEFAULT_VALUE_ACCESSOR$1
|
|
5603
5617
|
],
|
|
5604
5618
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
5605
5619
|
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}"]
|
|
@@ -5847,7 +5861,7 @@ class MatNumpadDomService {
|
|
|
5847
5861
|
this.appRef.detachView(this.componentRef.hostView);
|
|
5848
5862
|
}
|
|
5849
5863
|
}
|
|
5850
|
-
MatNumpadDomService.ɵprov =
|
|
5864
|
+
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" });
|
|
5851
5865
|
MatNumpadDomService.decorators = [
|
|
5852
5866
|
{ type: Injectable, args: [{
|
|
5853
5867
|
providedIn: 'root'
|
|
@@ -6211,7 +6225,7 @@ SharedMatNumpadModule.decorators = [
|
|
|
6211
6225
|
},] }
|
|
6212
6226
|
];
|
|
6213
6227
|
|
|
6214
|
-
const DEFAULT_VALUE_ACCESSOR
|
|
6228
|
+
const DEFAULT_VALUE_ACCESSOR = {
|
|
6215
6229
|
provide: NG_VALUE_ACCESSOR,
|
|
6216
6230
|
useExisting: forwardRef(() => MatSwipeField),
|
|
6217
6231
|
multi: true
|
|
@@ -6474,7 +6488,7 @@ MatSwipeField.decorators = [
|
|
|
6474
6488
|
{ type: Component, args: [{
|
|
6475
6489
|
selector: 'mat-swipe-field',
|
|
6476
6490
|
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",
|
|
6477
|
-
providers: [DEFAULT_VALUE_ACCESSOR
|
|
6491
|
+
providers: [DEFAULT_VALUE_ACCESSOR],
|
|
6478
6492
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
6479
6493
|
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}"]
|
|
6480
6494
|
},] }
|
|
@@ -6969,7 +6983,7 @@ class ProgressBarService {
|
|
|
6969
6983
|
}
|
|
6970
6984
|
}
|
|
6971
6985
|
}
|
|
6972
|
-
ProgressBarService.ɵprov =
|
|
6986
|
+
ProgressBarService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ProgressBarService_Factory() { return new ProgressBarService(); }, token: ProgressBarService, providedIn: "root" });
|
|
6973
6987
|
ProgressBarService.decorators = [
|
|
6974
6988
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
6975
6989
|
];
|
|
@@ -7013,7 +7027,7 @@ class AppGestureConfig extends HammerGestureConfig {
|
|
|
7013
7027
|
return mc;
|
|
7014
7028
|
}
|
|
7015
7029
|
}
|
|
7016
|
-
AppGestureConfig.ɵprov =
|
|
7030
|
+
AppGestureConfig.ɵprov = i0.ɵɵdefineInjectable({ factory: function AppGestureConfig_Factory() { return new AppGestureConfig(); }, token: AppGestureConfig, providedIn: "root" });
|
|
7017
7031
|
AppGestureConfig.decorators = [
|
|
7018
7032
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
7019
7033
|
];
|
|
@@ -7236,7 +7250,7 @@ class MatPaginatorI18n extends MatPaginatorIntl {
|
|
|
7236
7250
|
this.previousPageLabel = this.translate.instant('COMMON.PAGINATOR.PREVIOUS_PAGE');
|
|
7237
7251
|
}
|
|
7238
7252
|
}
|
|
7239
|
-
MatPaginatorI18n.ɵprov =
|
|
7253
|
+
MatPaginatorI18n.ɵprov = i0.ɵɵdefineInjectable({ factory: function MatPaginatorI18n_Factory() { return new MatPaginatorI18n(i0.ɵɵinject(i1$1.TranslateService)); }, token: MatPaginatorI18n, providedIn: "root" });
|
|
7240
7254
|
MatPaginatorI18n.decorators = [
|
|
7241
7255
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
7242
7256
|
];
|
|
@@ -7326,17 +7340,17 @@ function getColorContrast(color, bw) {
|
|
|
7326
7340
|
return rgbArrayToHex(rgb.map(v => 255 - v));
|
|
7327
7341
|
}
|
|
7328
7342
|
|
|
7329
|
-
const noop
|
|
7343
|
+
const noop = () => {
|
|
7330
7344
|
};
|
|
7331
|
-
const ɵ0$
|
|
7345
|
+
const ɵ0$3 = noop;
|
|
7332
7346
|
class AppFormField {
|
|
7333
7347
|
constructor(translate, cd, injector, formGroupDir) {
|
|
7334
7348
|
this.translate = translate;
|
|
7335
7349
|
this.cd = cd;
|
|
7336
7350
|
this.injector = injector;
|
|
7337
7351
|
this.formGroupDir = formGroupDir;
|
|
7338
|
-
this._onChangeCallback = noop
|
|
7339
|
-
this._onTouchedCallback = noop
|
|
7352
|
+
this._onChangeCallback = noop;
|
|
7353
|
+
this._onTouchedCallback = noop;
|
|
7340
7354
|
this.readonly = false;
|
|
7341
7355
|
this.compact = false;
|
|
7342
7356
|
this.floatLabel = 'auto';
|
|
@@ -7752,14 +7766,14 @@ class AudioProvider extends StartableService {
|
|
|
7752
7766
|
});
|
|
7753
7767
|
}
|
|
7754
7768
|
}
|
|
7755
|
-
AudioProvider.ɵprov =
|
|
7769
|
+
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" });
|
|
7756
7770
|
AudioProvider.decorators = [
|
|
7757
7771
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
7758
7772
|
];
|
|
7759
7773
|
AudioProvider.ctorParameters = () => [
|
|
7760
7774
|
{ type: Platform },
|
|
7761
|
-
{ type: NativeAudio
|
|
7762
|
-
{ type: Vibration
|
|
7775
|
+
{ type: NativeAudio, decorators: [{ type: Optional }] },
|
|
7776
|
+
{ type: Vibration, decorators: [{ type: Optional }] },
|
|
7763
7777
|
{ type: AudioManagement, decorators: [{ type: Optional }] }
|
|
7764
7778
|
];
|
|
7765
7779
|
|
|
@@ -7841,7 +7855,7 @@ class Hotkeys {
|
|
|
7841
7855
|
});
|
|
7842
7856
|
}
|
|
7843
7857
|
}
|
|
7844
|
-
Hotkeys.ɵprov =
|
|
7858
|
+
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" });
|
|
7845
7859
|
Hotkeys.decorators = [
|
|
7846
7860
|
{ type: Injectable, args: [{
|
|
7847
7861
|
providedIn: 'root'
|
|
@@ -8015,7 +8029,7 @@ class Base64ImageReader {
|
|
|
8015
8029
|
}
|
|
8016
8030
|
}
|
|
8017
8031
|
|
|
8018
|
-
const uuidv4 = uuidv4Imported;
|
|
8032
|
+
const uuidv4$1 = uuidv4Imported;
|
|
8019
8033
|
class FileService {
|
|
8020
8034
|
constructor(platform,
|
|
8021
8035
|
//private transfer: FileTransfer,
|
|
@@ -8052,7 +8066,7 @@ class FileService {
|
|
|
8052
8066
|
const lastSlashIndex = source.lastIndexOf('/');
|
|
8053
8067
|
if (lastSlashIndex === -1)
|
|
8054
8068
|
throw new Error('Invalid URL: ' + source);
|
|
8055
|
-
const fileName = lastSlashIndex < (source.length - 1) && source.substring(lastSlashIndex + 1) || uuidv4();
|
|
8069
|
+
const fileName = lastSlashIndex < (source.length - 1) && source.substring(lastSlashIndex + 1) || uuidv4$1();
|
|
8056
8070
|
// Download into the file system
|
|
8057
8071
|
if (responseType === 'file' && this.canUseFileSystem) {
|
|
8058
8072
|
console.warn(`WARN: [file] Fetching image {${source}} in local file...`);
|
|
@@ -8108,7 +8122,7 @@ class FileService {
|
|
|
8108
8122
|
this._started = true;
|
|
8109
8123
|
}
|
|
8110
8124
|
}
|
|
8111
|
-
FileService.ɵprov =
|
|
8125
|
+
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" });
|
|
8112
8126
|
FileService.decorators = [
|
|
8113
8127
|
{ type: Injectable, args: [{
|
|
8114
8128
|
providedIn: 'root',
|
|
@@ -8270,7 +8284,7 @@ class Base58 {
|
|
|
8270
8284
|
Base58.alphabet = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
|
|
8271
8285
|
|
|
8272
8286
|
const scrypt = require('scrypt-async');
|
|
8273
|
-
const sha256 = require('hash.js/lib/hash/sha/256');
|
|
8287
|
+
const sha256$1 = require('hash.js/lib/hash/sha/256');
|
|
8274
8288
|
const sha512 = require('hash.js/lib/hash/sha/512');
|
|
8275
8289
|
const nacl = {
|
|
8276
8290
|
sign,
|
|
@@ -8374,7 +8388,7 @@ class CryptoService {
|
|
|
8374
8388
|
* Hash (using SHA256) a message
|
|
8375
8389
|
*/
|
|
8376
8390
|
sha256(message) {
|
|
8377
|
-
return sha256().update(message).digest('hex');
|
|
8391
|
+
return sha256$1().update(message).digest('hex');
|
|
8378
8392
|
}
|
|
8379
8393
|
/**
|
|
8380
8394
|
* Hash (using SHA512) a message
|
|
@@ -8387,7 +8401,7 @@ class CryptoService {
|
|
|
8387
8401
|
return nacl.util.encodeBase64(m);
|
|
8388
8402
|
}
|
|
8389
8403
|
}
|
|
8390
|
-
CryptoService.ɵprov =
|
|
8404
|
+
CryptoService.ɵprov = i0.ɵɵdefineInjectable({ factory: function CryptoService_Factory() { return new CryptoService(); }, token: CryptoService, providedIn: "root" });
|
|
8391
8405
|
CryptoService.decorators = [
|
|
8392
8406
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
8393
8407
|
];
|
|
@@ -9608,7 +9622,7 @@ class LocalSettingsService extends StartableService {
|
|
|
9608
9622
|
return page;
|
|
9609
9623
|
}
|
|
9610
9624
|
}
|
|
9611
|
-
LocalSettingsService.ɵprov =
|
|
9625
|
+
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" });
|
|
9612
9626
|
LocalSettingsService.decorators = [
|
|
9613
9627
|
{ type: Injectable, args: [{
|
|
9614
9628
|
providedIn: 'root',
|
|
@@ -10268,7 +10282,7 @@ class NetworkService extends StartableService {
|
|
|
10268
10282
|
});
|
|
10269
10283
|
}
|
|
10270
10284
|
}
|
|
10271
|
-
NetworkService.ɵprov =
|
|
10285
|
+
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" });
|
|
10272
10286
|
NetworkService.decorators = [
|
|
10273
10287
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
10274
10288
|
];
|
|
@@ -10279,16 +10293,16 @@ NetworkService.ctorParameters = () => [
|
|
|
10279
10293
|
{ type: CryptoService },
|
|
10280
10294
|
{ type: Storage },
|
|
10281
10295
|
{ type: LocalSettingsService },
|
|
10282
|
-
{ type: CacheService
|
|
10296
|
+
{ type: CacheService },
|
|
10283
10297
|
{ type: HttpClient },
|
|
10284
10298
|
{ type: undefined, decorators: [{ type: Inject, args: [ENVIRONMENT,] }] },
|
|
10285
|
-
{ type: Network
|
|
10286
|
-
{ type: SplashScreen
|
|
10299
|
+
{ type: Network, decorators: [{ type: Optional }] },
|
|
10300
|
+
{ type: SplashScreen, decorators: [{ type: Optional }] },
|
|
10287
10301
|
{ type: TranslateService, decorators: [{ type: Optional }] },
|
|
10288
10302
|
{ type: ToastController, decorators: [{ type: Optional }] }
|
|
10289
10303
|
];
|
|
10290
10304
|
|
|
10291
|
-
const ErrorCodes = {
|
|
10305
|
+
const ErrorCodes$2 = {
|
|
10292
10306
|
UNKNOWN_ERROR: 0,
|
|
10293
10307
|
LOAD_ACCOUNT_ERROR: 1,
|
|
10294
10308
|
BAD_PASSWORD: 2,
|
|
@@ -10635,7 +10649,7 @@ class EntityStore {
|
|
|
10635
10649
|
}
|
|
10636
10650
|
catch (err) {
|
|
10637
10651
|
console.error(err);
|
|
10638
|
-
throw { code: ErrorCodes.ENTITY_STORAGE_MIGRATION_FAILED, message: 'ERROR.ENTITY_STORAGE_MIGRATION_FAILED', details: err };
|
|
10652
|
+
throw { code: ErrorCodes$2.ENTITY_STORAGE_MIGRATION_FAILED, message: 'ERROR.ENTITY_STORAGE_MIGRATION_FAILED', details: err };
|
|
10639
10653
|
}
|
|
10640
10654
|
}
|
|
10641
10655
|
// Emit update event
|
|
@@ -11206,7 +11220,7 @@ class EntitiesStorage extends StartableService {
|
|
|
11206
11220
|
}
|
|
11207
11221
|
EntitiesStorage.TRASH_PREFIX = 'Trash#';
|
|
11208
11222
|
EntitiesStorage.REMOTE_PREFIX = 'Remote#';
|
|
11209
|
-
EntitiesStorage.ɵprov =
|
|
11223
|
+
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" });
|
|
11210
11224
|
EntitiesStorage.decorators = [
|
|
11211
11225
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
11212
11226
|
];
|
|
@@ -11306,10 +11320,10 @@ function referentialToString(obj, properties) {
|
|
|
11306
11320
|
function referentialsToString(values, properties, separator) {
|
|
11307
11321
|
return (values || []).map(v => referentialToString(v, properties)).join(separator || ', ');
|
|
11308
11322
|
}
|
|
11309
|
-
const ɵ0$
|
|
11323
|
+
const ɵ0$2 = StatusIds.ENABLE, ɵ1 = StatusIds.DISABLE, ɵ2 = StatusIds.TEMPORARY;
|
|
11310
11324
|
const StatusList = Object.freeze([
|
|
11311
11325
|
{
|
|
11312
|
-
id: ɵ0$
|
|
11326
|
+
id: ɵ0$2,
|
|
11313
11327
|
icon: 'checkmark',
|
|
11314
11328
|
label: 'REFERENTIAL.STATUS_ENUM.ENABLE'
|
|
11315
11329
|
},
|
|
@@ -11584,7 +11598,7 @@ function accountToString(data) {
|
|
|
11584
11598
|
(data.lastName || '')) || '';
|
|
11585
11599
|
}
|
|
11586
11600
|
|
|
11587
|
-
const uuidv4
|
|
11601
|
+
const uuidv4 = uuidv4Imported;
|
|
11588
11602
|
const _global = typeof global !== 'undefined' ? global : (typeof window !== 'undefined' ? window : {});
|
|
11589
11603
|
const NativeWebSocket = _global.WebSocket || _global.MozWebSocket;
|
|
11590
11604
|
/**
|
|
@@ -11628,7 +11642,7 @@ function createTrackerLink(opts) {
|
|
|
11628
11642
|
// Skip if not tracked
|
|
11629
11643
|
if (!context || !context.tracked)
|
|
11630
11644
|
return forward(operation);
|
|
11631
|
-
const id = context.serializationKey || uuidv4
|
|
11645
|
+
const id = context.serializationKey || uuidv4();
|
|
11632
11646
|
console.debug(`[apollo-tracker-link] Watching tracked query {${operation.operationName}#${id}}`);
|
|
11633
11647
|
// Clean context, before calling JSON.stringify (remove unused attributes)
|
|
11634
11648
|
const cleanContext = Object.assign(Object.assign({}, context), { optimisticResponse: null, cache: null });
|
|
@@ -12297,7 +12311,7 @@ class GraphqlService extends StartableService {
|
|
|
12297
12311
|
(err.networkError && ((err.networkError.error && this.toAppError(err.networkError.error))
|
|
12298
12312
|
|| this.toAppError(err.networkError)
|
|
12299
12313
|
|| (err.networkError.error && this.createAppErrorByCode(err.networkError.error.status))
|
|
12300
|
-
|| this.createAppErrorByCode(ErrorCodes.UNKNOWN_NETWORK_ERROR)))
|
|
12314
|
+
|| this.createAppErrorByCode(ErrorCodes$2.UNKNOWN_NETWORK_ERROR)))
|
|
12301
12315
|
// If graphQL: try to convert the first error found
|
|
12302
12316
|
|| (err.graphQLErrors && err.graphQLErrors.length && this.toAppError(err.graphQLErrors[0]))
|
|
12303
12317
|
|| this.toAppError(err)
|
|
@@ -12305,7 +12319,7 @@ class GraphqlService extends StartableService {
|
|
|
12305
12319
|
|| (err.graphQLErrors && err.graphQLErrors[0])
|
|
12306
12320
|
|| err;
|
|
12307
12321
|
console.error('[graphql] ' + (error && error.message || error), error.stack || '');
|
|
12308
|
-
if (error && error.code === ErrorCodes.UNKNOWN_NETWORK_ERROR && err.networkError && err.networkError.message) {
|
|
12322
|
+
if (error && error.code === ErrorCodes$2.UNKNOWN_NETWORK_ERROR && err.networkError && err.networkError.message) {
|
|
12309
12323
|
console.error('[graphql] original error: ' + err.networkError.message);
|
|
12310
12324
|
this.onNetworkError.next(error);
|
|
12311
12325
|
}
|
|
@@ -12341,7 +12355,7 @@ class GraphqlService extends StartableService {
|
|
|
12341
12355
|
return 'ERROR.UNAUTHORIZED';
|
|
12342
12356
|
case ServerErrorCodes.FORBIDDEN:
|
|
12343
12357
|
return 'ERROR.FORBIDDEN';
|
|
12344
|
-
case ErrorCodes.UNKNOWN_NETWORK_ERROR:
|
|
12358
|
+
case ErrorCodes$2.UNKNOWN_NETWORK_ERROR:
|
|
12345
12359
|
return 'ERROR.UNKNOWN_NETWORK_ERROR';
|
|
12346
12360
|
case ServerErrorCodes.BAD_UPDATE_DATE:
|
|
12347
12361
|
return 'ERROR.BAD_UPDATE_DATE';
|
|
@@ -12369,7 +12383,7 @@ class GraphqlService extends StartableService {
|
|
|
12369
12383
|
return undefined;
|
|
12370
12384
|
}
|
|
12371
12385
|
}
|
|
12372
|
-
GraphqlService.ɵprov =
|
|
12386
|
+
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" });
|
|
12373
12387
|
GraphqlService.decorators = [
|
|
12374
12388
|
{ type: Injectable, args: [{
|
|
12375
12389
|
providedIn: 'root'
|
|
@@ -12386,7 +12400,7 @@ GraphqlService.ctorParameters = () => [
|
|
|
12386
12400
|
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [APP_GRAPHQL_TYPE_POLICIES,] }] }
|
|
12387
12401
|
];
|
|
12388
12402
|
|
|
12389
|
-
const sha256
|
|
12403
|
+
const sha256 = require('hash.js/lib/hash/sha/256');
|
|
12390
12404
|
class BaseGraphqlServiceOptions {
|
|
12391
12405
|
}
|
|
12392
12406
|
// eslint-disable-next-line @angular-eslint/directive-class-suffix
|
|
@@ -12536,8 +12550,8 @@ class BaseGraphqlService {
|
|
|
12536
12550
|
}
|
|
12537
12551
|
/* -- protected methods -- */
|
|
12538
12552
|
computeMutableWatchQueryId(opts) {
|
|
12539
|
-
const queryName = opts.queryName || sha256
|
|
12540
|
-
const variablesKey = opts.variables && sha256
|
|
12553
|
+
const queryName = opts.queryName || sha256().update(JSON.stringify(opts.query)).digest('hex').substring(0, 8);
|
|
12554
|
+
const variablesKey = opts.variables && sha256().update(JSON.stringify(opts.variables)).digest('hex').substring(0, 8) || '';
|
|
12541
12555
|
return [queryName, opts.arrayFieldName, variablesKey].join('|');
|
|
12542
12556
|
}
|
|
12543
12557
|
findMutableWatchQueries(opts) {
|
|
@@ -12600,7 +12614,7 @@ const DEFAULT_AVATAR_IMAGE = 'assets/img/person.png';
|
|
|
12600
12614
|
/* ------------------------------------
|
|
12601
12615
|
* GraphQL queries
|
|
12602
12616
|
* ------------------------------------*/
|
|
12603
|
-
const Fragments = {
|
|
12617
|
+
const Fragments$1 = {
|
|
12604
12618
|
account: gql `
|
|
12605
12619
|
fragment AccountFragment on AccountVO {
|
|
12606
12620
|
id
|
|
@@ -12633,13 +12647,13 @@ const Fragments = {
|
|
|
12633
12647
|
`
|
|
12634
12648
|
};
|
|
12635
12649
|
// Load account query
|
|
12636
|
-
const LoadQuery = gql `
|
|
12650
|
+
const LoadQuery$1 = gql `
|
|
12637
12651
|
query Account {
|
|
12638
12652
|
data: account {
|
|
12639
12653
|
...AccountFragment
|
|
12640
12654
|
}
|
|
12641
12655
|
}
|
|
12642
|
-
${Fragments.account}
|
|
12656
|
+
${Fragments$1.account}
|
|
12643
12657
|
`;
|
|
12644
12658
|
// Check email query
|
|
12645
12659
|
const IsEmailExistsQuery = gql `
|
|
@@ -12648,13 +12662,13 @@ const IsEmailExistsQuery = gql `
|
|
|
12648
12662
|
}
|
|
12649
12663
|
`;
|
|
12650
12664
|
// Save (create or update) account mutation
|
|
12651
|
-
const SaveMutation = gql `
|
|
12665
|
+
const SaveMutation$1 = gql `
|
|
12652
12666
|
mutation SaveAccount($data:AccountVOInput){
|
|
12653
12667
|
data: saveAccount(account: $data){
|
|
12654
12668
|
...AccountFragment
|
|
12655
12669
|
}
|
|
12656
12670
|
}
|
|
12657
|
-
${Fragments.account}
|
|
12671
|
+
${Fragments$1.account}
|
|
12658
12672
|
`;
|
|
12659
12673
|
// Create account mutation
|
|
12660
12674
|
const CreateMutation = gql `
|
|
@@ -12663,7 +12677,7 @@ const CreateMutation = gql `
|
|
|
12663
12677
|
...AccountFragment
|
|
12664
12678
|
}
|
|
12665
12679
|
}
|
|
12666
|
-
${Fragments.account}
|
|
12680
|
+
${Fragments$1.account}
|
|
12667
12681
|
`;
|
|
12668
12682
|
// Sent confirmation email
|
|
12669
12683
|
const SendConfirmEmailMutation = gql `
|
|
@@ -13001,7 +13015,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
13001
13015
|
catch (error) {
|
|
13002
13016
|
console.error(error);
|
|
13003
13017
|
this.resetData();
|
|
13004
|
-
throw { code: ErrorCodes.UNKNOWN_ERROR, message: 'ERROR.SCRYPT_ERROR' };
|
|
13018
|
+
throw { code: ErrorCodes$2.UNKNOWN_ERROR, message: 'ERROR.SCRYPT_ERROR' };
|
|
13005
13019
|
}
|
|
13006
13020
|
// Store pubkey+keypair
|
|
13007
13021
|
this._data.pubkey = Base58.encode(keypair.publicKey);
|
|
@@ -13035,7 +13049,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
13035
13049
|
}
|
|
13036
13050
|
catch (err) {
|
|
13037
13051
|
// If account not found, check if email is valid
|
|
13038
|
-
if (err && +(err.code) === ErrorCodes.LOAD_ACCOUNT_ERROR) {
|
|
13052
|
+
if (err && +(err.code) === ErrorCodes$2.LOAD_ACCOUNT_ERROR) {
|
|
13039
13053
|
// Check email exists
|
|
13040
13054
|
if (data.username.indexOf('@') !== -1) {
|
|
13041
13055
|
let isEmailExists;
|
|
@@ -13047,11 +13061,11 @@ class AccountService extends BaseGraphqlService {
|
|
|
13047
13061
|
}
|
|
13048
13062
|
// Email not exists (no account)
|
|
13049
13063
|
if (!isEmailExists) {
|
|
13050
|
-
throw { code: ErrorCodes.UNKNOWN_ACCOUNT_EMAIL, message: 'ERROR.UNKNOWN_ACCOUNT_EMAIL' };
|
|
13064
|
+
throw { code: ErrorCodes$2.UNKNOWN_ACCOUNT_EMAIL, message: 'ERROR.UNKNOWN_ACCOUNT_EMAIL' };
|
|
13051
13065
|
}
|
|
13052
13066
|
}
|
|
13053
13067
|
// Email exists, so error = 'bad password'
|
|
13054
|
-
throw { code: ErrorCodes.BAD_PASSWORD, message: 'ERROR.BAD_PASSWORD' };
|
|
13068
|
+
throw { code: ErrorCodes$2.BAD_PASSWORD, message: 'ERROR.BAD_PASSWORD' };
|
|
13055
13069
|
}
|
|
13056
13070
|
throw err; // resend the first error
|
|
13057
13071
|
}
|
|
@@ -13176,8 +13190,8 @@ class AccountService extends BaseGraphqlService {
|
|
|
13176
13190
|
// Load remotely
|
|
13177
13191
|
else {
|
|
13178
13192
|
const { data } = yield this.graphql.query({
|
|
13179
|
-
query: LoadQuery,
|
|
13180
|
-
error: { code: ErrorCodes.LOAD_ACCOUNT_ERROR, message: 'ERROR.LOAD_ACCOUNT_ERROR' },
|
|
13193
|
+
query: LoadQuery$1,
|
|
13194
|
+
error: { code: ErrorCodes$2.LOAD_ACCOUNT_ERROR, message: 'ERROR.LOAD_ACCOUNT_ERROR' },
|
|
13181
13195
|
fetchPolicy: opts && opts.fetchPolicy || 'no-cache' || undefined
|
|
13182
13196
|
});
|
|
13183
13197
|
json = data;
|
|
@@ -13204,7 +13218,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
13204
13218
|
return __awaiter(this, void 0, void 0, function* () {
|
|
13205
13219
|
const isEmailExists = yield this.isEmailExists(email);
|
|
13206
13220
|
if (isEmailExists) {
|
|
13207
|
-
throw { code: ErrorCodes.EMAIL_ALREADY_REGISTERED, message: 'ERROR.EMAIL_ALREADY_REGISTERED' };
|
|
13221
|
+
throw { code: ErrorCodes$2.EMAIL_ALREADY_REGISTERED, message: 'ERROR.EMAIL_ALREADY_REGISTERED' };
|
|
13208
13222
|
}
|
|
13209
13223
|
});
|
|
13210
13224
|
}
|
|
@@ -13240,7 +13254,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
13240
13254
|
locale
|
|
13241
13255
|
},
|
|
13242
13256
|
error: {
|
|
13243
|
-
code: ErrorCodes.SENT_CONFIRMATION_EMAIL_FAILED,
|
|
13257
|
+
code: ErrorCodes$2.SENT_CONFIRMATION_EMAIL_FAILED,
|
|
13244
13258
|
message: 'ERROR.SENT_ACCOUNT_CONFIRMATION_EMAIL_FAILED'
|
|
13245
13259
|
}
|
|
13246
13260
|
});
|
|
@@ -13256,7 +13270,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
13256
13270
|
code
|
|
13257
13271
|
},
|
|
13258
13272
|
error: {
|
|
13259
|
-
code: ErrorCodes.CONFIRM_EMAIL_FAILED,
|
|
13273
|
+
code: ErrorCodes$2.CONFIRM_EMAIL_FAILED,
|
|
13260
13274
|
message: 'ERROR.CONFIRM_ACCOUNT_EMAIL_FAILED'
|
|
13261
13275
|
}
|
|
13262
13276
|
});
|
|
@@ -13274,7 +13288,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
13274
13288
|
interval: 10
|
|
13275
13289
|
},
|
|
13276
13290
|
error: {
|
|
13277
|
-
code: ErrorCodes.SUBSCRIBE_ACCOUNT_ERROR,
|
|
13291
|
+
code: ErrorCodes$2.SUBSCRIBE_ACCOUNT_ERROR,
|
|
13278
13292
|
message: 'ERROR.ACCOUNT.SUBSCRIBE_ACCOUNT_ERROR'
|
|
13279
13293
|
}
|
|
13280
13294
|
}).subscribe({
|
|
@@ -13383,7 +13397,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
13383
13397
|
throw error;
|
|
13384
13398
|
console.error(error);
|
|
13385
13399
|
throw {
|
|
13386
|
-
code: ErrorCodes.LOAD_ACCOUNT_ERROR,
|
|
13400
|
+
code: ErrorCodes$2.LOAD_ACCOUNT_ERROR,
|
|
13387
13401
|
message: 'ERROR.LOAD_ACCOUNT_ERROR'
|
|
13388
13402
|
};
|
|
13389
13403
|
}
|
|
@@ -13528,7 +13542,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
13528
13542
|
if (!isNew) {
|
|
13529
13543
|
const existingAccount = yield this.load({ fetchPolicy: 'network-only' });
|
|
13530
13544
|
if (!existingAccount || !existingAccount.updateDate) {
|
|
13531
|
-
throw { code: ErrorCodes.ACCOUNT_NOT_EXISTS, message: 'ERROR.ACCOUNT_NOT_EXISTS' };
|
|
13545
|
+
throw { code: ErrorCodes$2.ACCOUNT_NOT_EXISTS, message: 'ERROR.ACCOUNT_NOT_EXISTS' };
|
|
13532
13546
|
}
|
|
13533
13547
|
this.copyIdAndUpdateDate(existingAccount, account);
|
|
13534
13548
|
}
|
|
@@ -13537,10 +13551,10 @@ class AccountService extends BaseGraphqlService {
|
|
|
13537
13551
|
delete json.profiles;
|
|
13538
13552
|
// Execute mutation
|
|
13539
13553
|
const { data } = yield this.graphql.mutate({
|
|
13540
|
-
mutation: isNew ? CreateMutation : SaveMutation,
|
|
13554
|
+
mutation: isNew ? CreateMutation : SaveMutation$1,
|
|
13541
13555
|
variables: { data: json },
|
|
13542
13556
|
error: {
|
|
13543
|
-
code: ErrorCodes.SAVE_ACCOUNT_ERROR,
|
|
13557
|
+
code: ErrorCodes$2.SAVE_ACCOUNT_ERROR,
|
|
13544
13558
|
message: 'ERROR.SAVE_ACCOUNT_ERROR'
|
|
13545
13559
|
}
|
|
13546
13560
|
});
|
|
@@ -13560,7 +13574,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
13560
13574
|
if (counter > 4) {
|
|
13561
13575
|
if (this._debug)
|
|
13562
13576
|
console.debug(`[account] Failed to authentication on pod (after ${counter} attempts)`);
|
|
13563
|
-
throw { code: ErrorCodes.AUTH_SERVER_ERROR, message: 'ERROR.AUTH_SERVER_ERROR' };
|
|
13577
|
+
throw { code: ErrorCodes$2.AUTH_SERVER_ERROR, message: 'ERROR.AUTH_SERVER_ERROR' };
|
|
13564
13578
|
}
|
|
13565
13579
|
// Check if valid
|
|
13566
13580
|
if (token) {
|
|
@@ -13570,7 +13584,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
13570
13584
|
token
|
|
13571
13585
|
},
|
|
13572
13586
|
error: {
|
|
13573
|
-
code: ErrorCodes.UNAUTHORIZED,
|
|
13587
|
+
code: ErrorCodes$2.UNAUTHORIZED,
|
|
13574
13588
|
message: 'ERROR.UNAUTHORIZED'
|
|
13575
13589
|
},
|
|
13576
13590
|
fetchPolicy: 'no-cache'
|
|
@@ -13586,7 +13600,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
13586
13600
|
}
|
|
13587
13601
|
// Generate a new token
|
|
13588
13602
|
const challengeError = {
|
|
13589
|
-
code: ErrorCodes.AUTH_CHALLENGE_ERROR,
|
|
13603
|
+
code: ErrorCodes$2.AUTH_CHALLENGE_ERROR,
|
|
13590
13604
|
message: 'ERROR.AUTH_CHALLENGE_ERROR'
|
|
13591
13605
|
};
|
|
13592
13606
|
const data = yield this.graphql.query({
|
|
@@ -13620,7 +13634,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
13620
13634
|
target.settings.updateDate = source.settings && source.settings.updateDate || target.settings.updateDate;
|
|
13621
13635
|
}
|
|
13622
13636
|
}
|
|
13623
|
-
AccountService.ɵprov =
|
|
13637
|
+
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" });
|
|
13624
13638
|
AccountService.decorators = [
|
|
13625
13639
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
13626
13640
|
];
|
|
@@ -13880,7 +13894,7 @@ const CONFIGURATION_STORAGE_KEY = 'configuration';
|
|
|
13880
13894
|
/* ------------------------------------
|
|
13881
13895
|
* GraphQL queries
|
|
13882
13896
|
* ------------------------------------*/
|
|
13883
|
-
const Fragments
|
|
13897
|
+
const Fragments = {
|
|
13884
13898
|
config: gql `
|
|
13885
13899
|
fragment ConfigFragment on ConfigurationVO {
|
|
13886
13900
|
id
|
|
@@ -13907,22 +13921,22 @@ const Fragments$1 = {
|
|
|
13907
13921
|
}
|
|
13908
13922
|
`
|
|
13909
13923
|
};
|
|
13910
|
-
const LoadQuery
|
|
13924
|
+
const LoadQuery = gql `
|
|
13911
13925
|
query Configuration{
|
|
13912
13926
|
data: configuration{
|
|
13913
13927
|
...ConfigFragment
|
|
13914
13928
|
}
|
|
13915
13929
|
}
|
|
13916
|
-
${Fragments
|
|
13930
|
+
${Fragments.config}
|
|
13917
13931
|
`;
|
|
13918
13932
|
// Save (create or update) account mutation
|
|
13919
|
-
const SaveMutation
|
|
13933
|
+
const SaveMutation = gql `
|
|
13920
13934
|
mutation SaveConfiguration($data: ConfigurationVOInput){
|
|
13921
13935
|
data: saveConfiguration(config: $data){
|
|
13922
13936
|
...ConfigFragment
|
|
13923
13937
|
}
|
|
13924
13938
|
}
|
|
13925
|
-
${Fragments
|
|
13939
|
+
${Fragments.config}
|
|
13926
13940
|
`;
|
|
13927
13941
|
const ClearCache = gql `
|
|
13928
13942
|
query ClearCache($name: String) {
|
|
@@ -14017,12 +14031,12 @@ class ConfigService extends BaseGraphqlService {
|
|
|
14017
14031
|
return __awaiter(this, void 0, void 0, function* () {
|
|
14018
14032
|
const now = Date.now();
|
|
14019
14033
|
console.debug('[config] Loading Pod configuration...');
|
|
14020
|
-
const query = opts && opts.query || LoadQuery
|
|
14034
|
+
const query = opts && opts.query || LoadQuery;
|
|
14021
14035
|
const variables = opts && opts.variables || undefined;
|
|
14022
14036
|
const res = yield this.graphql.query({
|
|
14023
14037
|
query,
|
|
14024
14038
|
variables,
|
|
14025
|
-
error: { code: ErrorCodes.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
|
|
14039
|
+
error: { code: ErrorCodes$2.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
|
|
14026
14040
|
fetchPolicy: opts && opts.fetchPolicy || undefined /*default*/
|
|
14027
14041
|
});
|
|
14028
14042
|
const data = res && res.data ? Configuration.fromObject(res.data) : undefined;
|
|
@@ -14047,12 +14061,12 @@ class ConfigService extends BaseGraphqlService {
|
|
|
14047
14061
|
const json = config.asObject();
|
|
14048
14062
|
// Execute mutation
|
|
14049
14063
|
const res = yield this.graphql.mutate({
|
|
14050
|
-
mutation: SaveMutation
|
|
14064
|
+
mutation: SaveMutation,
|
|
14051
14065
|
variables: {
|
|
14052
14066
|
data: json
|
|
14053
14067
|
},
|
|
14054
14068
|
error: {
|
|
14055
|
-
code: ErrorCodes.SAVE_CONFIG_ERROR,
|
|
14069
|
+
code: ErrorCodes$2.SAVE_CONFIG_ERROR,
|
|
14056
14070
|
message: 'ERROR.SAVE_CONFIG_ERROR'
|
|
14057
14071
|
}
|
|
14058
14072
|
});
|
|
@@ -14078,7 +14092,7 @@ class ConfigService extends BaseGraphqlService {
|
|
|
14078
14092
|
const res = yield this.graphql.query({
|
|
14079
14093
|
query: CacheStatistics,
|
|
14080
14094
|
variables: null,
|
|
14081
|
-
error: { code: ErrorCodes.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
|
|
14095
|
+
error: { code: ErrorCodes$2.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
|
|
14082
14096
|
fetchPolicy: 'network-only'
|
|
14083
14097
|
});
|
|
14084
14098
|
const data = res && res.cacheStatistics || undefined;
|
|
@@ -14094,7 +14108,7 @@ class ConfigService extends BaseGraphqlService {
|
|
|
14094
14108
|
const res = yield this.graphql.query({
|
|
14095
14109
|
query: ClearCache,
|
|
14096
14110
|
variables,
|
|
14097
|
-
error: { code: ErrorCodes.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
|
|
14111
|
+
error: { code: ErrorCodes$2.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
|
|
14098
14112
|
fetchPolicy: 'network-only'
|
|
14099
14113
|
});
|
|
14100
14114
|
const data = res && res.clearCache || undefined;
|
|
@@ -14253,7 +14267,7 @@ class ConfigService extends BaseGraphqlService {
|
|
|
14253
14267
|
});
|
|
14254
14268
|
}
|
|
14255
14269
|
}
|
|
14256
|
-
ConfigService.ɵprov =
|
|
14270
|
+
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" });
|
|
14257
14271
|
ConfigService.decorators = [
|
|
14258
14272
|
{ type: Injectable, args: [{
|
|
14259
14273
|
providedIn: 'root',
|
|
@@ -14272,7 +14286,7 @@ ConfigService.ctorParameters = () => [
|
|
|
14272
14286
|
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [APP_CONFIG_OPTIONS,] }] }
|
|
14273
14287
|
];
|
|
14274
14288
|
|
|
14275
|
-
const moment$
|
|
14289
|
+
const moment$2 = momentImported;
|
|
14276
14290
|
class PlatformService {
|
|
14277
14291
|
constructor(platform, cdkPlatform, toastController, translate, dateAdapter, entitiesStorage, settings, networkService, accountService, configService, cache, storage, audioProvider, environment, statusBar, keyboard, splashScreen, browser, downloader) {
|
|
14278
14292
|
this.platform = platform;
|
|
@@ -14481,16 +14495,16 @@ class PlatformService {
|
|
|
14481
14495
|
}
|
|
14482
14496
|
// config moment lib
|
|
14483
14497
|
try {
|
|
14484
|
-
moment$
|
|
14498
|
+
moment$2.locale(event.lang);
|
|
14485
14499
|
console.debug('[platform] Use locale {' + event.lang + '}');
|
|
14486
14500
|
}
|
|
14487
14501
|
// If error, fallback to en
|
|
14488
14502
|
catch (err) {
|
|
14489
|
-
moment$
|
|
14503
|
+
moment$2.locale('en');
|
|
14490
14504
|
console.warn('[platform] Unknown local for moment lib. Using default [en]');
|
|
14491
14505
|
}
|
|
14492
14506
|
// Config date adapter
|
|
14493
|
-
this.dateAdapter.setLocale(moment$
|
|
14507
|
+
this.dateAdapter.setLocale(moment$2.locale());
|
|
14494
14508
|
}
|
|
14495
14509
|
});
|
|
14496
14510
|
this.settings.onChange.subscribe(data => {
|
|
@@ -14628,7 +14642,7 @@ class PlatformService {
|
|
|
14628
14642
|
});
|
|
14629
14643
|
}
|
|
14630
14644
|
}
|
|
14631
|
-
PlatformService.ɵprov =
|
|
14645
|
+
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" });
|
|
14632
14646
|
PlatformService.decorators = [
|
|
14633
14647
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
14634
14648
|
];
|
|
@@ -14643,15 +14657,15 @@ PlatformService.ctorParameters = () => [
|
|
|
14643
14657
|
{ type: NetworkService },
|
|
14644
14658
|
{ type: AccountService },
|
|
14645
14659
|
{ type: ConfigService },
|
|
14646
|
-
{ type: CacheService
|
|
14660
|
+
{ type: CacheService },
|
|
14647
14661
|
{ type: Storage },
|
|
14648
14662
|
{ type: AudioProvider },
|
|
14649
14663
|
{ type: undefined, decorators: [{ type: Inject, args: [ENVIRONMENT,] }] },
|
|
14650
|
-
{ type: StatusBar
|
|
14664
|
+
{ type: StatusBar, decorators: [{ type: Optional }] },
|
|
14651
14665
|
{ type: Keyboard, decorators: [{ type: Optional }] },
|
|
14652
|
-
{ type: SplashScreen
|
|
14653
|
-
{ type: InAppBrowser
|
|
14654
|
-
{ type: Downloader
|
|
14666
|
+
{ type: SplashScreen, decorators: [{ type: Optional }] },
|
|
14667
|
+
{ type: InAppBrowser, decorators: [{ type: Optional }] },
|
|
14668
|
+
{ type: Downloader, decorators: [{ type: Optional }] }
|
|
14655
14669
|
];
|
|
14656
14670
|
|
|
14657
14671
|
class AppHelpModal {
|
|
@@ -14715,7 +14729,7 @@ class MatStepperI18n extends MatStepperIntl {
|
|
|
14715
14729
|
this.optionalLabel = this.translate.instant('COMMON.OPTIONAL');
|
|
14716
14730
|
}
|
|
14717
14731
|
}
|
|
14718
|
-
MatStepperI18n.ɵprov =
|
|
14732
|
+
MatStepperI18n.ɵprov = i0.ɵɵdefineInjectable({ factory: function MatStepperI18n_Factory() { return new MatStepperI18n(i0.ɵɵinject(i1$1.TranslateService)); }, token: MatStepperI18n, providedIn: "root" });
|
|
14719
14733
|
MatStepperI18n.decorators = [
|
|
14720
14734
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
14721
14735
|
];
|
|
@@ -15707,7 +15721,7 @@ function state2side(state) {
|
|
|
15707
15721
|
return 1;
|
|
15708
15722
|
}
|
|
15709
15723
|
}
|
|
15710
|
-
const ɵ0$
|
|
15724
|
+
const ɵ0$1 = (defaultStateSize) => [
|
|
15711
15725
|
Math.round((rgbArrayMap.red[0] - 50) / defaultStateSize),
|
|
15712
15726
|
Math.round((255 - rgbArrayMap.red[1]) / defaultStateSize),
|
|
15713
15727
|
Math.round((255 - rgbArrayMap.red[2]) / defaultStateSize)
|
|
@@ -15715,7 +15729,7 @@ const ɵ0$9 = (defaultStateSize) => [
|
|
|
15715
15729
|
const SCALE_OPTIONS_DEFAULT = {
|
|
15716
15730
|
startColor: rgbArrayMap.red,
|
|
15717
15731
|
startStates: [0, 2, 3],
|
|
15718
|
-
startStepsFn: ɵ0$
|
|
15732
|
+
startStepsFn: ɵ0$1
|
|
15719
15733
|
};
|
|
15720
15734
|
/**
|
|
15721
15735
|
* Internal function, that create a colors scale, using iteration
|
|
@@ -15807,21 +15821,21 @@ function linearColorGradient(count, options) {
|
|
|
15807
15821
|
return result;
|
|
15808
15822
|
}
|
|
15809
15823
|
|
|
15810
|
-
class EntityTestClass {
|
|
15824
|
+
class EntityTestClass$1 {
|
|
15811
15825
|
}
|
|
15812
|
-
const FAKE_ENTITIES = [
|
|
15826
|
+
const FAKE_ENTITIES$1 = [
|
|
15813
15827
|
{ id: 1, label: 'AAA', name: 'Item A', description: 'Very long description A', comments: 'Very very long comments... again for A' },
|
|
15814
15828
|
{ id: 2, label: 'BBB', name: 'Item B', description: 'Very long description B', comments: 'Very very long comments... again for B' },
|
|
15815
15829
|
{ id: 3, label: 'CCC', name: 'Item C', description: 'Very long description C', comments: 'Very very long comments... again for C' }
|
|
15816
15830
|
];
|
|
15817
|
-
function deepCopy(values, size) {
|
|
15831
|
+
function deepCopy$1(values, size) {
|
|
15818
15832
|
if (isNil(size)) {
|
|
15819
|
-
return (values || FAKE_ENTITIES).map(entity => Object.assign({}, entity));
|
|
15833
|
+
return (values || FAKE_ENTITIES$1).map(entity => Object.assign({}, entity));
|
|
15820
15834
|
}
|
|
15821
15835
|
let result = [];
|
|
15822
15836
|
let i = 1;
|
|
15823
15837
|
while (result.length < size) {
|
|
15824
|
-
result = result.concat((values || FAKE_ENTITIES).map(entity => {
|
|
15838
|
+
result = result.concat((values || FAKE_ENTITIES$1).map(entity => {
|
|
15825
15839
|
const name = entity.name + ' #' + i;
|
|
15826
15840
|
return Object.assign(Object.assign({}, entity), { id: i++, name });
|
|
15827
15841
|
}));
|
|
@@ -15831,7 +15845,7 @@ function deepCopy(values, size) {
|
|
|
15831
15845
|
class AutocompleteTestPage {
|
|
15832
15846
|
constructor(formBuilder) {
|
|
15833
15847
|
this.formBuilder = formBuilder;
|
|
15834
|
-
this._items = deepCopy(FAKE_ENTITIES, 100);
|
|
15848
|
+
this._items = deepCopy$1(FAKE_ENTITIES$1, 100);
|
|
15835
15849
|
this.$items = new BehaviorSubject(undefined);
|
|
15836
15850
|
this.autocompleteFields = new MatAutocompleteConfigHolder();
|
|
15837
15851
|
this.memoryHide = false;
|
|
@@ -15875,7 +15889,7 @@ class AutocompleteTestPage {
|
|
|
15875
15889
|
});
|
|
15876
15890
|
// From items
|
|
15877
15891
|
this.autocompleteFields.add('entity-items-large', {
|
|
15878
|
-
items: FAKE_ENTITIES.slice(),
|
|
15892
|
+
items: FAKE_ENTITIES$1.slice(),
|
|
15879
15893
|
attributes: ['label', 'name', 'description', 'comments'],
|
|
15880
15894
|
displayWith: this.entityToString
|
|
15881
15895
|
});
|
|
@@ -15885,12 +15899,12 @@ class AutocompleteTestPage {
|
|
|
15885
15899
|
loadData() {
|
|
15886
15900
|
return __awaiter(this, void 0, void 0, function* () {
|
|
15887
15901
|
const data = {
|
|
15888
|
-
entity: deepCopy(FAKE_ENTITIES)[0],
|
|
15902
|
+
entity: deepCopy$1(FAKE_ENTITIES$1)[0],
|
|
15889
15903
|
// This item is NOT in the items list => i should be displayed anyway
|
|
15890
15904
|
missingEntity: {
|
|
15891
15905
|
id: -1, label: '??', name: 'Missing item'
|
|
15892
15906
|
},
|
|
15893
|
-
disableEntity: deepCopy(FAKE_ENTITIES)[2]
|
|
15907
|
+
disableEntity: deepCopy$1(FAKE_ENTITIES$1)[2]
|
|
15894
15908
|
};
|
|
15895
15909
|
this.form.setValue(data);
|
|
15896
15910
|
// Load observables
|
|
@@ -15960,7 +15974,7 @@ class AutocompleteTestPage {
|
|
|
15960
15974
|
AutocompleteTestPage.decorators = [
|
|
15961
15975
|
{ type: Component, args: [{
|
|
15962
15976
|
selector: 'app-autocomplete-test',
|
|
15963
|
-
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 <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-icon matPrefix>keyboard_arrow_right</mat-icon>\n <mat-icon matSuffix>keyboard_arrow_left</mat-icon>\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"
|
|
15977
|
+
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>\n <ion-col>\n <ion-text><h4>Debug memory leak</h4></ion-text>\n </ion-col>\n </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>\n <pre>mobile: true, suggestFn: (searchText, filter) => any[]</pre>\n </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>\n <pre>mobile: true, items: Observable<any[]></pre>\n </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>\n <pre>mobile: true, items: Observable<any[]></pre>\n </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>\n <pre></pre>\n </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>\n <pre>class=\"min-width-large\"</pre>\n </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-row>\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 <ion-grid>\n <ion-row>\n <ion-col size=\"3\">\n <mat-checkbox (change)=\"readonlyField.readonly=$event.checked\" [checked]=\"readonlyField.readonly\">\n Readonly ?\n </mat-checkbox>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col>\n <mat-autocomplete-field #readonlyField formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items')\"\n [placeholder]=\"'Entity'\"\n [mobile]=\"true\"\n [compareWith]=\"compareWithFn\"\n [logPrefix]=\"'[combo-mobile-readonly]'\"\n [readonly]=\"true\"\n [clearable]=\"!readonlyField.readonly\">\n </mat-autocomplete-field>\n </ion-col>\n </ion-row>\n </ion-grid>\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>\n <ion-text><h4>Desktop mode</h4></ion-text>\n </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>\n </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>\n <pre>items: [], value: {{stringify(form.controls.entity.value)}}</pre>\n </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>\n <pre>items: Observable<any[]></pre>\n </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>\n <pre>items: Observable<any[]></pre>\n </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>\n <pre>class: 'mat-autocomplete-panel-full-size'</pre>\n </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>\n <pre>class=\"mat-autocomplete-panel-full-size\"</pre>\n </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>\n <pre>panelWidth: string</pre>\n </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 <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 <ion-grid>\n <ion-row>\n <ion-col size=\"3\">\n <mat-checkbox (change)=\"readonlyField.readonly=$event.checked\" [checked]=\"readonlyField.readonly\">\n Readonly ?\n </mat-checkbox>\n </ion-col>\n <ion-col size=\"3\">\n <mat-checkbox #showIcons [checked]=\"false\">\n Icons ?\n </mat-checkbox>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col>\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 [clearable]=\"!readonlyField.readonly\">\n <mat-icon matPrefix *ngIf=\"showIcons.checked\">keyboard_arrow_right</mat-icon>\n <mat-icon matSuffix *ngIf=\"showIcons.checked\">keyboard_arrow_left</mat-icon>\n </mat-autocomplete-field>\n </ion-col>\n </ion-row>\n </ion-grid>\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"
|
|
15964
15978
|
},] }
|
|
15965
15979
|
];
|
|
15966
15980
|
AutocompleteTestPage.ctorParameters = () => [
|
|
@@ -16063,13 +16077,13 @@ MaterialTestingPage.ctorParameters = () => [
|
|
|
16063
16077
|
{ type: Array, decorators: [{ type: Optional }, { type: Inject, args: [APP_TESTING_PAGES,] }] }
|
|
16064
16078
|
];
|
|
16065
16079
|
|
|
16066
|
-
const moment$
|
|
16080
|
+
const moment$1 = momentImported;
|
|
16067
16081
|
class SwipeTestPage {
|
|
16068
16082
|
constructor(formBuilder, dateFormatPipe) {
|
|
16069
16083
|
this.formBuilder = formBuilder;
|
|
16070
16084
|
this.dateFormatPipe = dateFormatPipe;
|
|
16071
16085
|
this.$dates = new BehaviorSubject(undefined);
|
|
16072
|
-
this._today = moment$
|
|
16086
|
+
this._today = moment$1().startOf('day');
|
|
16073
16087
|
this.form = formBuilder.group({
|
|
16074
16088
|
empty: [null, Validators.required],
|
|
16075
16089
|
date: [null, Validators.compose([Validators.required, SharedValidators.validDate])],
|
|
@@ -16082,7 +16096,7 @@ class SwipeTestPage {
|
|
|
16082
16096
|
ngOnInit() {
|
|
16083
16097
|
const dates = [];
|
|
16084
16098
|
for (let d = 0; d < 7; d++) {
|
|
16085
|
-
dates[d] = moment$
|
|
16099
|
+
dates[d] = moment$1(this._today).add(d - 3, 'day');
|
|
16086
16100
|
}
|
|
16087
16101
|
this.$dates.next(dates);
|
|
16088
16102
|
this.loadData();
|
|
@@ -16123,7 +16137,7 @@ SwipeTestPage.ctorParameters = () => [
|
|
|
16123
16137
|
{ type: DateFormatPipe }
|
|
16124
16138
|
];
|
|
16125
16139
|
|
|
16126
|
-
const moment
|
|
16140
|
+
const moment = momentImported;
|
|
16127
16141
|
class DateTimeTestPage {
|
|
16128
16142
|
constructor(platform, formBuilder, cd) {
|
|
16129
16143
|
this.platform = platform;
|
|
@@ -16155,7 +16169,7 @@ class DateTimeTestPage {
|
|
|
16155
16169
|
// Load the form with data
|
|
16156
16170
|
loadData() {
|
|
16157
16171
|
return __awaiter(this, void 0, void 0, function* () {
|
|
16158
|
-
const now = moment
|
|
16172
|
+
const now = moment();
|
|
16159
16173
|
const data = {
|
|
16160
16174
|
empty: toDateISOString(now.clone().add(2, 'hours')),
|
|
16161
16175
|
enable: toDateISOString(now),
|
|
@@ -16216,20 +16230,20 @@ DateTimeTestPage.ctorParameters = () => [
|
|
|
16216
16230
|
{ type: ChangeDetectorRef }
|
|
16217
16231
|
];
|
|
16218
16232
|
|
|
16219
|
-
class EntityTestClass
|
|
16233
|
+
class EntityTestClass {
|
|
16220
16234
|
}
|
|
16221
|
-
const FAKE_ENTITIES
|
|
16235
|
+
const FAKE_ENTITIES = [
|
|
16222
16236
|
{ id: 1, label: 'AAA', name: 'Item A' },
|
|
16223
16237
|
{ id: 2, label: 'BBB', name: 'Item B' },
|
|
16224
16238
|
{ id: 3, label: 'CCC', name: 'Item C' }
|
|
16225
16239
|
];
|
|
16226
|
-
function deepCopy
|
|
16227
|
-
return (values || FAKE_ENTITIES
|
|
16240
|
+
function deepCopy(values) {
|
|
16241
|
+
return (values || FAKE_ENTITIES).map(entity => Object.assign({}, entity));
|
|
16228
16242
|
}
|
|
16229
16243
|
class ChipsTestPage {
|
|
16230
16244
|
constructor(formBuilder) {
|
|
16231
16245
|
this.formBuilder = formBuilder;
|
|
16232
|
-
this._items = deepCopy
|
|
16246
|
+
this._items = deepCopy(FAKE_ENTITIES);
|
|
16233
16247
|
this._$items = new BehaviorSubject(undefined);
|
|
16234
16248
|
this.autocompleteFields = new MatAutocompleteConfigHolder();
|
|
16235
16249
|
this.form = formBuilder.group({
|
|
@@ -16248,7 +16262,7 @@ class ChipsTestPage {
|
|
|
16248
16262
|
});
|
|
16249
16263
|
// From items
|
|
16250
16264
|
this.autocompleteFields.add('entity-items', {
|
|
16251
|
-
items: FAKE_ENTITIES
|
|
16265
|
+
items: FAKE_ENTITIES.slice(),
|
|
16252
16266
|
attributes: ['label', 'name'],
|
|
16253
16267
|
displayWith: this.entityToString
|
|
16254
16268
|
});
|
|
@@ -16269,15 +16283,15 @@ class ChipsTestPage {
|
|
|
16269
16283
|
const data = {
|
|
16270
16284
|
entity: [],
|
|
16271
16285
|
// THis item is NOT in the items list => i should be displayed anyway
|
|
16272
|
-
entityInitial: FAKE_ENTITIES
|
|
16273
|
-
disableEntity: FAKE_ENTITIES
|
|
16286
|
+
entityInitial: FAKE_ENTITIES.slice(1, 2),
|
|
16287
|
+
disableEntity: FAKE_ENTITIES.slice(1, 2)
|
|
16274
16288
|
};
|
|
16275
16289
|
this.form.setValue(data);
|
|
16276
16290
|
});
|
|
16277
16291
|
}
|
|
16278
16292
|
loadItems() {
|
|
16279
16293
|
return __awaiter(this, void 0, void 0, function* () {
|
|
16280
|
-
this._$items.next(deepCopy
|
|
16294
|
+
this._$items.next(deepCopy(FAKE_ENTITIES));
|
|
16281
16295
|
});
|
|
16282
16296
|
}
|
|
16283
16297
|
entityToString(item) {
|
|
@@ -16309,7 +16323,7 @@ ChipsTestPage.ctorParameters = () => [
|
|
|
16309
16323
|
{ type: FormBuilder }
|
|
16310
16324
|
];
|
|
16311
16325
|
|
|
16312
|
-
const routes = [
|
|
16326
|
+
const routes$1 = [
|
|
16313
16327
|
{
|
|
16314
16328
|
path: '',
|
|
16315
16329
|
pathMatch: 'full',
|
|
@@ -16356,7 +16370,7 @@ MaterialTestingModule.decorators = [
|
|
|
16356
16370
|
ReactiveFormsModule,
|
|
16357
16371
|
SharedMaterialModule,
|
|
16358
16372
|
TranslateModule.forChild(),
|
|
16359
|
-
RouterModule.forChild(routes)
|
|
16373
|
+
RouterModule.forChild(routes$1)
|
|
16360
16374
|
],
|
|
16361
16375
|
declarations: [
|
|
16362
16376
|
MaterialTestingPage,
|
|
@@ -17299,7 +17313,7 @@ class UserSettingsValidatorService extends AppValidatorService {
|
|
|
17299
17313
|
});
|
|
17300
17314
|
}
|
|
17301
17315
|
}
|
|
17302
|
-
UserSettingsValidatorService.ɵprov =
|
|
17316
|
+
UserSettingsValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function UserSettingsValidatorService_Factory() { return new UserSettingsValidatorService(i0.ɵɵinject(i1$6.FormBuilder)); }, token: UserSettingsValidatorService, providedIn: "root" });
|
|
17303
17317
|
UserSettingsValidatorService.decorators = [
|
|
17304
17318
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
17305
17319
|
];
|
|
@@ -17343,7 +17357,7 @@ class AccountValidatorService extends AppValidatorService {
|
|
|
17343
17357
|
return validatorFns.length ? Validators.compose(validatorFns) : validatorFns.length === 1 ? validatorFns[0] : undefined;
|
|
17344
17358
|
}
|
|
17345
17359
|
}
|
|
17346
|
-
AccountValidatorService.ɵprov =
|
|
17360
|
+
AccountValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function AccountValidatorService_Factory() { return new AccountValidatorService(i0.ɵɵinject(i1$6.FormBuilder), i0.ɵɵinject(AccountService)); }, token: AccountValidatorService, providedIn: "root" });
|
|
17347
17361
|
AccountValidatorService.decorators = [
|
|
17348
17362
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
17349
17363
|
];
|
|
@@ -17877,7 +17891,7 @@ class LocalSettingsValidatorService extends AppValidatorService {
|
|
|
17877
17891
|
});
|
|
17878
17892
|
}
|
|
17879
17893
|
}
|
|
17880
|
-
LocalSettingsValidatorService.ɵprov =
|
|
17894
|
+
LocalSettingsValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function LocalSettingsValidatorService_Factory() { return new LocalSettingsValidatorService(i0.ɵɵinject(i1$6.FormBuilder), i0.ɵɵinject(NetworkService)); }, token: LocalSettingsValidatorService, providedIn: "root" });
|
|
17881
17895
|
LocalSettingsValidatorService.decorators = [
|
|
17882
17896
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
17883
17897
|
];
|
|
@@ -18497,7 +18511,7 @@ class IsOnFieldModePipe {
|
|
|
18497
18511
|
return value === 'FIELD';
|
|
18498
18512
|
}
|
|
18499
18513
|
}
|
|
18500
|
-
IsOnFieldModePipe.ɵprov =
|
|
18514
|
+
IsOnFieldModePipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsOnFieldModePipe_Factory() { return new IsOnFieldModePipe(); }, token: IsOnFieldModePipe, providedIn: "root" });
|
|
18501
18515
|
IsOnFieldModePipe.decorators = [
|
|
18502
18516
|
{ type: Pipe, args: [{
|
|
18503
18517
|
name: 'isOnField'
|
|
@@ -18509,7 +18523,7 @@ class IsNotOnFieldModePipe {
|
|
|
18509
18523
|
return value !== 'FIELD';
|
|
18510
18524
|
}
|
|
18511
18525
|
}
|
|
18512
|
-
IsNotOnFieldModePipe.ɵprov =
|
|
18526
|
+
IsNotOnFieldModePipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsNotOnFieldModePipe_Factory() { return new IsNotOnFieldModePipe(); }, token: IsNotOnFieldModePipe, providedIn: "root" });
|
|
18513
18527
|
IsNotOnFieldModePipe.decorators = [
|
|
18514
18528
|
{ type: Pipe, args: [{
|
|
18515
18529
|
name: 'isNotOnField'
|
|
@@ -18524,7 +18538,7 @@ class PersonToStringPipe {
|
|
|
18524
18538
|
return PersonUtils.personToString(value);
|
|
18525
18539
|
}
|
|
18526
18540
|
}
|
|
18527
|
-
PersonToStringPipe.ɵprov =
|
|
18541
|
+
PersonToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function PersonToStringPipe_Factory() { return new PersonToStringPipe(); }, token: PersonToStringPipe, providedIn: "root" });
|
|
18528
18542
|
PersonToStringPipe.decorators = [
|
|
18529
18543
|
{ type: Pipe, args: [{
|
|
18530
18544
|
name: 'personToString'
|
|
@@ -18870,7 +18884,7 @@ class IsLoginAccountPipe {
|
|
|
18870
18884
|
return value && value.pubkey && true;
|
|
18871
18885
|
}
|
|
18872
18886
|
}
|
|
18873
|
-
IsLoginAccountPipe.ɵprov =
|
|
18887
|
+
IsLoginAccountPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsLoginAccountPipe_Factory() { return new IsLoginAccountPipe(); }, token: IsLoginAccountPipe, providedIn: "root" });
|
|
18874
18888
|
IsLoginAccountPipe.decorators = [
|
|
18875
18889
|
{ type: Pipe, args: [{
|
|
18876
18890
|
name: 'isLogin'
|
|
@@ -18882,7 +18896,7 @@ class AccountToStringPipe {
|
|
|
18882
18896
|
return accountToString(value);
|
|
18883
18897
|
}
|
|
18884
18898
|
}
|
|
18885
|
-
AccountToStringPipe.ɵprov =
|
|
18899
|
+
AccountToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function AccountToStringPipe_Factory() { return new AccountToStringPipe(); }, token: AccountToStringPipe, providedIn: "root" });
|
|
18886
18900
|
AccountToStringPipe.decorators = [
|
|
18887
18901
|
{ type: Pipe, args: [{
|
|
18888
18902
|
name: 'accountToString'
|
|
@@ -18897,7 +18911,7 @@ class DepartmentToStringPipe {
|
|
|
18897
18911
|
return departmentToString(value);
|
|
18898
18912
|
}
|
|
18899
18913
|
}
|
|
18900
|
-
DepartmentToStringPipe.ɵprov =
|
|
18914
|
+
DepartmentToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DepartmentToStringPipe_Factory() { return new DepartmentToStringPipe(); }, token: DepartmentToStringPipe, providedIn: "root" });
|
|
18901
18915
|
DepartmentToStringPipe.decorators = [
|
|
18902
18916
|
{ type: Pipe, args: [{
|
|
18903
18917
|
name: 'departmentToString'
|
|
@@ -18923,7 +18937,7 @@ class MenuService {
|
|
|
18923
18937
|
this._visibleSubject.next(value);
|
|
18924
18938
|
}
|
|
18925
18939
|
}
|
|
18926
|
-
MenuService.ɵprov =
|
|
18940
|
+
MenuService.ɵprov = i0.ɵɵdefineInjectable({ factory: function MenuService_Factory() { return new MenuService(); }, token: MenuService, providedIn: "root" });
|
|
18927
18941
|
MenuService.decorators = [
|
|
18928
18942
|
{ type: Injectable, args: [{
|
|
18929
18943
|
providedIn: 'root'
|
|
@@ -19417,7 +19431,7 @@ class AuthGuardService {
|
|
|
19417
19431
|
}));
|
|
19418
19432
|
}
|
|
19419
19433
|
}
|
|
19420
|
-
AuthGuardService.ɵprov =
|
|
19434
|
+
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" });
|
|
19421
19435
|
AuthGuardService.decorators = [
|
|
19422
19436
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
19423
19437
|
];
|
|
@@ -19465,7 +19479,7 @@ class BaseEntityService extends BaseGraphqlService {
|
|
|
19465
19479
|
query,
|
|
19466
19480
|
variables: { id },
|
|
19467
19481
|
fetchPolicy: opts && opts.fetchPolicy || undefined,
|
|
19468
|
-
error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' }
|
|
19482
|
+
error: { code: ErrorCodes$2.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' }
|
|
19469
19483
|
})
|
|
19470
19484
|
.pipe(map(({ data }) => (!opts || opts.toEntity !== false)
|
|
19471
19485
|
? (data && this.fromObject(data))
|
|
@@ -19480,7 +19494,7 @@ class BaseEntityService extends BaseGraphqlService {
|
|
|
19480
19494
|
query,
|
|
19481
19495
|
variables: { id },
|
|
19482
19496
|
fetchPolicy: opts && opts.fetchPolicy || undefined,
|
|
19483
|
-
error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' }
|
|
19497
|
+
error: { code: ErrorCodes$2.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' }
|
|
19484
19498
|
});
|
|
19485
19499
|
// Convert to entity
|
|
19486
19500
|
return (!opts || opts.toEntity !== false)
|
|
@@ -19511,7 +19525,7 @@ class BaseEntityService extends BaseGraphqlService {
|
|
|
19511
19525
|
totalFieldName: withTotal ? 'total' : undefined,
|
|
19512
19526
|
insertFilterFn: filter && filter.asFilterFn(),
|
|
19513
19527
|
variables,
|
|
19514
|
-
error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' },
|
|
19528
|
+
error: { code: ErrorCodes$2.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' },
|
|
19515
19529
|
fetchPolicy: opts && opts.fetchPolicy || undefined
|
|
19516
19530
|
})
|
|
19517
19531
|
.pipe(map(({ data, total }) => {
|
|
@@ -19547,7 +19561,7 @@ class BaseEntityService extends BaseGraphqlService {
|
|
|
19547
19561
|
const { data, total } = yield this.graphql.query({
|
|
19548
19562
|
query,
|
|
19549
19563
|
variables,
|
|
19550
|
-
error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'ERROR.LOAD_DATA_ERROR' },
|
|
19564
|
+
error: { code: ErrorCodes$2.LOAD_DATA_ERROR, message: 'ERROR.LOAD_DATA_ERROR' },
|
|
19551
19565
|
fetchPolicy: opts && opts.fetchPolicy || 'network-only'
|
|
19552
19566
|
});
|
|
19553
19567
|
const entities = (!opts || opts.toEntity !== false) ?
|
|
@@ -19586,7 +19600,7 @@ class BaseEntityService extends BaseGraphqlService {
|
|
|
19586
19600
|
variables: {
|
|
19587
19601
|
filter: filter && filter.asPodObject()
|
|
19588
19602
|
},
|
|
19589
|
-
error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'ERROR.COUNT_DATA_ERROR' },
|
|
19603
|
+
error: { code: ErrorCodes$2.LOAD_DATA_ERROR, message: 'ERROR.COUNT_DATA_ERROR' },
|
|
19590
19604
|
fetchPolicy: opts && opts.fetchPolicy || 'network-only'
|
|
19591
19605
|
});
|
|
19592
19606
|
return res.total;
|
|
@@ -19619,7 +19633,7 @@ class BaseEntityService extends BaseGraphqlService {
|
|
|
19619
19633
|
variables: {
|
|
19620
19634
|
data: json
|
|
19621
19635
|
},
|
|
19622
|
-
error: { code: ErrorCodes.SAVE_DATA_ERROR, message: 'ERROR.SAVE_DATA_ERROR' },
|
|
19636
|
+
error: { code: ErrorCodes$2.SAVE_DATA_ERROR, message: 'ERROR.SAVE_DATA_ERROR' },
|
|
19623
19637
|
update: (proxy, { data }) => {
|
|
19624
19638
|
const savedEntities = data && data.data;
|
|
19625
19639
|
if (savedEntities) {
|
|
@@ -19675,7 +19689,7 @@ class BaseEntityService extends BaseGraphqlService {
|
|
|
19675
19689
|
variables: {
|
|
19676
19690
|
data: json
|
|
19677
19691
|
},
|
|
19678
|
-
error: { code: ErrorCodes.SAVE_DATA_ERROR, message: 'ERROR.SAVE_DATA_ERROR' },
|
|
19692
|
+
error: { code: ErrorCodes$2.SAVE_DATA_ERROR, message: 'ERROR.SAVE_DATA_ERROR' },
|
|
19679
19693
|
update: (cache, { data }) => {
|
|
19680
19694
|
// Update entity
|
|
19681
19695
|
const savedEntity = data && data.data;
|
|
@@ -19723,7 +19737,7 @@ class BaseEntityService extends BaseGraphqlService {
|
|
|
19723
19737
|
refetchQueries: this.getRefetchQueriesForMutation(opts),
|
|
19724
19738
|
awaitRefetchQueries: opts && opts.awaitRefetchQueries,
|
|
19725
19739
|
variables: { ids },
|
|
19726
|
-
error: { code: ErrorCodes.DELETE_DATA_ERROR, message: 'ERROR.DELETE_DATA_ERROR' },
|
|
19740
|
+
error: { code: ErrorCodes$2.DELETE_DATA_ERROR, message: 'ERROR.DELETE_DATA_ERROR' },
|
|
19727
19741
|
update: (cache, res) => {
|
|
19728
19742
|
// Remove from cache
|
|
19729
19743
|
if (this.watchQueriesUpdatePolicy === 'update-cache') {
|
|
@@ -19764,7 +19778,7 @@ class BaseEntityService extends BaseGraphqlService {
|
|
|
19764
19778
|
refetchQueries: this.getRefetchQueriesForMutation(opts),
|
|
19765
19779
|
awaitRefetchQueries: opts && opts.awaitRefetchQueries,
|
|
19766
19780
|
variables: { id },
|
|
19767
|
-
error: { code: ErrorCodes.DELETE_DATA_ERROR, message: 'ERROR.DELETE_DATA_ERROR' },
|
|
19781
|
+
error: { code: ErrorCodes$2.DELETE_DATA_ERROR, message: 'ERROR.DELETE_DATA_ERROR' },
|
|
19768
19782
|
update: (proxy, res) => {
|
|
19769
19783
|
// Remove from cache
|
|
19770
19784
|
if (this.watchQueriesUpdatePolicy === 'update-cache') {
|
|
@@ -19797,7 +19811,7 @@ class BaseEntityService extends BaseGraphqlService {
|
|
|
19797
19811
|
query: opts && opts.query || this.subscriptions.listenChanges,
|
|
19798
19812
|
variables,
|
|
19799
19813
|
error: {
|
|
19800
|
-
code: ErrorCodes.SUBSCRIBE_DATA_ERROR,
|
|
19814
|
+
code: ErrorCodes$2.SUBSCRIBE_DATA_ERROR,
|
|
19801
19815
|
message: 'ERROR.SUBSCRIBE_DATA_ERROR'
|
|
19802
19816
|
}
|
|
19803
19817
|
})
|
|
@@ -19972,7 +19986,7 @@ class EntitiesTableDataSource extends TableDataSource {
|
|
|
19972
19986
|
if (this._debug)
|
|
19973
19987
|
invalidRows.forEach(row => AppTableUtils.logRowErrors(row, `[table-datasource] ${this._logTypeName} row #${row.id}`));
|
|
19974
19988
|
// Stop with an error
|
|
19975
|
-
throw { code: ErrorCodes.TABLE_INVALID_ROW_ERROR, message: 'ERROR.TABLE_INVALID_ROW_ERROR' };
|
|
19989
|
+
throw { code: ErrorCodes$2.TABLE_INVALID_ROW_ERROR, message: 'ERROR.TABLE_INVALID_ROW_ERROR' };
|
|
19976
19990
|
}
|
|
19977
19991
|
this._editingRowCount = 0;
|
|
19978
19992
|
let data;
|
|
@@ -20043,12 +20057,10 @@ class EntitiesTableDataSource extends TableDataSource {
|
|
|
20043
20057
|
this._stopWatching$.next();
|
|
20044
20058
|
}
|
|
20045
20059
|
waitIdle(debounceTimeMs) {
|
|
20046
|
-
return
|
|
20047
|
-
|
|
20048
|
-
|
|
20049
|
-
|
|
20050
|
-
));
|
|
20051
|
-
});
|
|
20060
|
+
return firstFalsePromise(this.loadingSubject
|
|
20061
|
+
.asObservable()
|
|
20062
|
+
.pipe(debounceTime(debounceTimeMs || 100) // if not started yet, wait
|
|
20063
|
+
));
|
|
20052
20064
|
}
|
|
20053
20065
|
confirmCreate(row) {
|
|
20054
20066
|
if (!super.confirmCreate(row))
|
|
@@ -20683,7 +20695,7 @@ class AppTable {
|
|
|
20683
20695
|
if (previousRow && (previousRow.id === -1) && ((_a = previousRow.validator) === null || _a === void 0 ? void 0 : _a.invalid) && !((_b = previousRow.validator) === null || _b === void 0 ? void 0 : _b.dirty)) {
|
|
20684
20696
|
this.deleteNewRow(event, previousRow);
|
|
20685
20697
|
// Wait deletion is done, then edit previous row (by id, because of reloading)
|
|
20686
|
-
|
|
20698
|
+
this.waitIdle()
|
|
20687
20699
|
.then(() => this.editRowById(event, row.id, { focusColumn: this.lastUserColumn }));
|
|
20688
20700
|
return true;
|
|
20689
20701
|
}
|
|
@@ -20796,14 +20808,14 @@ class AppTable {
|
|
|
20796
20808
|
return __awaiter(this, void 0, void 0, function* () {
|
|
20797
20809
|
opts = Object.assign({ keepEditing: this.keepEditedRowOnSave }, opts);
|
|
20798
20810
|
if (this.readOnly) {
|
|
20799
|
-
throw { code: ErrorCodes.TABLE_READ_ONLY, message: 'ERROR.TABLE_READ_ONLY' };
|
|
20811
|
+
throw { code: ErrorCodes$2.TABLE_READ_ONLY, message: 'ERROR.TABLE_READ_ONLY' };
|
|
20800
20812
|
}
|
|
20801
20813
|
this.resetError();
|
|
20802
20814
|
// Keep edited row id (should be done BEFORE confirmEditCreate() )
|
|
20803
20815
|
this.previouslyEditedRowId = opts.keepEditing && ((_a = this.editedRow) === null || _a === void 0 ? void 0 : _a.editing) ? this.editedRow.id : undefined;
|
|
20804
20816
|
const previouslyEditedData = isNotNil(this.previouslyEditedRowId) && this.editedRow.currentData || ((_b = this.singleSelectedRow) === null || _b === void 0 ? void 0 : _b.currentData);
|
|
20805
20817
|
if (!this.confirmEditCreate()) {
|
|
20806
|
-
throw { code: ErrorCodes.TABLE_INVALID_ROW_ERROR, message: 'ERROR.TABLE_INVALID_ROW_ERROR' };
|
|
20818
|
+
throw { code: ErrorCodes$2.TABLE_INVALID_ROW_ERROR, message: 'ERROR.TABLE_INVALID_ROW_ERROR' };
|
|
20807
20819
|
}
|
|
20808
20820
|
// Mark as saving
|
|
20809
20821
|
this.markAsSaving();
|
|
@@ -20919,7 +20931,7 @@ class AppTable {
|
|
|
20919
20931
|
deleteRows(event, rows, opts) {
|
|
20920
20932
|
return __awaiter(this, void 0, void 0, function* () {
|
|
20921
20933
|
if (this.readOnly) {
|
|
20922
|
-
throw { code: ErrorCodes.TABLE_READ_ONLY, message: 'ERROR.TABLE_READ_ONLY' };
|
|
20934
|
+
throw { code: ErrorCodes$2.TABLE_READ_ONLY, message: 'ERROR.TABLE_READ_ONLY' };
|
|
20923
20935
|
}
|
|
20924
20936
|
if (event === null || event === void 0 ? void 0 : event.defaultPrevented)
|
|
20925
20937
|
return 0; // SKip
|
|
@@ -20970,31 +20982,34 @@ class AppTable {
|
|
|
20970
20982
|
});
|
|
20971
20983
|
}
|
|
20972
20984
|
selectRowById(id) {
|
|
20973
|
-
|
|
20974
|
-
|
|
20975
|
-
|
|
20976
|
-
|
|
20977
|
-
|
|
20985
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
20986
|
+
if (id === undefined)
|
|
20987
|
+
return false;
|
|
20988
|
+
yield this.waitIdle();
|
|
20989
|
+
const row = this.dataSource.getRow(id);
|
|
20990
|
+
return this.clickRow(null, row);
|
|
20991
|
+
});
|
|
20978
20992
|
}
|
|
20979
20993
|
/**
|
|
20980
20994
|
* Try to select row by data. Will use dataEquals() (that call EntityUtils.equals()) to find same row's data
|
|
20981
20995
|
* @param data
|
|
20982
20996
|
*/
|
|
20983
20997
|
selectRowByData(data) {
|
|
20984
|
-
|
|
20985
|
-
|
|
20986
|
-
|
|
20987
|
-
|
|
20988
|
-
|
|
20989
|
-
|
|
20998
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
20999
|
+
if (data === undefined)
|
|
21000
|
+
return Promise.resolve(false);
|
|
21001
|
+
yield this.waitIdle();
|
|
21002
|
+
const row = ((yield this.dataSource.getRows()) || [])
|
|
21003
|
+
.find(row => this.equals(row.currentData, data));
|
|
21004
|
+
return row && this.clickRow(null, row);
|
|
21005
|
+
});
|
|
20990
21006
|
}
|
|
20991
21007
|
clickRow(event, row) {
|
|
20992
|
-
var _a;
|
|
20993
21008
|
if (this.loading) {
|
|
20994
21009
|
// Wait while loading, and loop
|
|
20995
21010
|
if (this.debug)
|
|
20996
21011
|
console.debug("[table] Waiting before apply clickRow() (datasource is busy)...");
|
|
20997
|
-
|
|
21012
|
+
this.waitIdle().then(() => this.clickRow(event, row));
|
|
20998
21013
|
return false;
|
|
20999
21014
|
}
|
|
21000
21015
|
// DEBUG
|
|
@@ -21020,6 +21035,9 @@ class AppTable {
|
|
|
21020
21035
|
moveRow(id, direction) {
|
|
21021
21036
|
this.dataSource.move(id, direction);
|
|
21022
21037
|
}
|
|
21038
|
+
waitIdle() {
|
|
21039
|
+
return firstFalsePromise(this.loadingSubject);
|
|
21040
|
+
}
|
|
21023
21041
|
openSelectColumnsModal(event) {
|
|
21024
21042
|
return __awaiter(this, void 0, void 0, function* () {
|
|
21025
21043
|
// Copy current columns (deep copy)
|
|
@@ -21052,7 +21070,7 @@ class AppTable {
|
|
|
21052
21070
|
// When target wait for a complete (e.g. IonRefresher)
|
|
21053
21071
|
if ((event === null || event === void 0 ? void 0 : event.target) && event.target.complete) {
|
|
21054
21072
|
setTimeout(() => __awaiter(this, void 0, void 0, function* () {
|
|
21055
|
-
yield
|
|
21073
|
+
yield this.waitIdle();
|
|
21056
21074
|
event.target.complete();
|
|
21057
21075
|
}));
|
|
21058
21076
|
}
|
|
@@ -22324,7 +22342,7 @@ class AppEntityEditor extends AppTabEditor {
|
|
|
22324
22342
|
try {
|
|
22325
22343
|
const data = yield this.dataService.load(id, opts);
|
|
22326
22344
|
if (!data)
|
|
22327
|
-
throw { code: ErrorCodes.DATA_NOT_FOUND_ERROR, message: 'ERROR.DATA_NO_FOUND' };
|
|
22345
|
+
throw { code: ErrorCodes$2.DATA_NOT_FOUND_ERROR, message: 'ERROR.DATA_NO_FOUND' };
|
|
22328
22346
|
this._usageMode = this.computeUsageMode(data);
|
|
22329
22347
|
yield this.onEntityLoaded(data, opts);
|
|
22330
22348
|
yield this.updateView(data, opts);
|
|
@@ -22368,7 +22386,7 @@ class AppEntityEditor extends AppTabEditor {
|
|
|
22368
22386
|
const idChanged = isNotNil(data.id)
|
|
22369
22387
|
&& this.previousDataId !== undefined // Ignore if first loading (=undefined)
|
|
22370
22388
|
&& this.previousDataId !== data.id;
|
|
22371
|
-
opts = Object.assign({ updateRoute: this._autoUpdateRoute && idChanged && !this.loading, openTabIndex: this._autoOpenNextTab && idChanged &&
|
|
22389
|
+
opts = Object.assign({ updateRoute: this._autoUpdateRoute && idChanged && !this.loading, openTabIndex: this._autoOpenNextTab && idChanged && this.computeNextTabIndex() }, opts);
|
|
22372
22390
|
this.data = data;
|
|
22373
22391
|
this.previousDataId = data.id || null;
|
|
22374
22392
|
const promiseOrVoid = this.setValue(data);
|
|
@@ -22624,6 +22642,9 @@ class AppEntityEditor extends AppTabEditor {
|
|
|
22624
22642
|
this.error = userMessage;
|
|
22625
22643
|
}
|
|
22626
22644
|
/* -- protected methods -- */
|
|
22645
|
+
computeNextTabIndex() {
|
|
22646
|
+
return this.selectedTabIndex + 1 < this.tabCount ? this.selectedTabIndex + 1 : undefined;
|
|
22647
|
+
}
|
|
22627
22648
|
unload() {
|
|
22628
22649
|
return __awaiter(this, void 0, void 0, function* () {
|
|
22629
22650
|
this.form.reset();
|
|
@@ -23217,7 +23238,7 @@ class UserEventService extends BaseGraphqlService {
|
|
|
23217
23238
|
EntityUtils.copyIdAndUpdateDate(source, target);
|
|
23218
23239
|
}
|
|
23219
23240
|
}
|
|
23220
|
-
UserEventService.ɵprov =
|
|
23241
|
+
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" });
|
|
23221
23242
|
UserEventService.decorators = [
|
|
23222
23243
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
23223
23244
|
];
|
|
@@ -23602,7 +23623,7 @@ class PersonService extends BaseEntityService {
|
|
|
23602
23623
|
return target;
|
|
23603
23624
|
}
|
|
23604
23625
|
}
|
|
23605
|
-
PersonService.ɵprov =
|
|
23626
|
+
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" });
|
|
23606
23627
|
PersonService.decorators = [
|
|
23607
23628
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
23608
23629
|
];
|
|
@@ -23633,7 +23654,7 @@ class PersonValidatorService {
|
|
|
23633
23654
|
return this.formBuilder.group(formConfig);
|
|
23634
23655
|
}
|
|
23635
23656
|
}
|
|
23636
|
-
PersonValidatorService.ɵprov =
|
|
23657
|
+
PersonValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function PersonValidatorService_Factory() { return new PersonValidatorService(i0.ɵɵinject(i1$6.FormBuilder), i0.ɵɵinject(AccountValidatorService)); }, token: PersonValidatorService, providedIn: "root" });
|
|
23637
23658
|
PersonValidatorService.decorators = [
|
|
23638
23659
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
23639
23660
|
];
|
|
@@ -23839,16 +23860,16 @@ AdminModule.decorators = [
|
|
|
23839
23860
|
];
|
|
23840
23861
|
AdminModule.ctorParameters = () => [];
|
|
23841
23862
|
|
|
23842
|
-
const ɵ0
|
|
23863
|
+
const ɵ0 = {
|
|
23843
23864
|
profile: 'ADMIN'
|
|
23844
23865
|
};
|
|
23845
|
-
const routes
|
|
23866
|
+
const routes = [
|
|
23846
23867
|
{
|
|
23847
23868
|
path: 'users',
|
|
23848
23869
|
pathMatch: 'full',
|
|
23849
23870
|
component: UsersPage,
|
|
23850
23871
|
canActivate: [AuthGuardService],
|
|
23851
|
-
data: ɵ0
|
|
23872
|
+
data: ɵ0
|
|
23852
23873
|
}
|
|
23853
23874
|
];
|
|
23854
23875
|
class AdminRoutingModule {
|
|
@@ -23858,13 +23879,13 @@ AdminRoutingModule.decorators = [
|
|
|
23858
23879
|
imports: [
|
|
23859
23880
|
SharedRoutingModule,
|
|
23860
23881
|
AdminModule,
|
|
23861
|
-
RouterModule.forChild(routes
|
|
23882
|
+
RouterModule.forChild(routes)
|
|
23862
23883
|
],
|
|
23863
23884
|
exports: [RouterModule]
|
|
23864
23885
|
},] }
|
|
23865
23886
|
];
|
|
23866
23887
|
|
|
23867
|
-
const ErrorCodes
|
|
23888
|
+
const ErrorCodes = {
|
|
23868
23889
|
LOAD_PERSONS_ERROR: 100,
|
|
23869
23890
|
SAVE_PERSONS_ERROR: 101,
|
|
23870
23891
|
DELETE_PERSONS_ERROR: 102,
|
|
@@ -23876,5 +23897,5 @@ const ErrorCodes$2 = {
|
|
|
23876
23897
|
* Generated bundle index. Do not edit.
|
|
23877
23898
|
*/
|
|
23878
23899
|
|
|
23879
|
-
export { APP_ABOUT_DEVELOPERS, APP_ABOUT_PARTNERS, APP_CONFIG_OPTIONS, APP_FORM_ERROR_I18N_KEYS, APP_GRAPHQL_TYPE_POLICIES, APP_HOME_BUTTONS, APP_LOCALES, APP_LOCAL_SETTINGS, APP_LOCAL_SETTINGS_OPTIONS, APP_LOCAL_STORAGE_TYPE_POLICIES, APP_MENU_ITEMS, APP_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
|
|
23900
|
+
export { APP_ABOUT_DEVELOPERS, APP_ABOUT_PARTNERS, APP_CONFIG_OPTIONS, APP_FORM_ERROR_I18N_KEYS, APP_GRAPHQL_TYPE_POLICIES, APP_HOME_BUTTONS, APP_LOCALES, APP_LOCAL_SETTINGS, APP_LOCAL_SETTINGS_OPTIONS, APP_LOCAL_STORAGE_TYPE_POLICIES, APP_MENU_ITEMS, APP_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, FormErrorAdapter, FormErrorTranslatePipe, 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, StartableService, 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 };
|
|
23880
23901
|
//# sourceMappingURL=sumaris-net.ngx-components.js.map
|