@sumaris-net/ngx-components 1.23.8 → 1.23.11
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 +530 -492
- 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/doc/changelog.md +8 -0
- package/esm2015/src/app/admin/users/list/users.js +2 -2
- package/esm2015/src/app/core/form/editor.class.js +40 -37
- package/esm2015/src/app/core/services/account.service.js +2 -2
- package/esm2015/src/app/core/services/config.service.js +2 -2
- package/esm2015/src/app/core/services/network.service.js +6 -6
- package/esm2015/src/app/core/table/entities-table-datasource.class.js +2 -2
- package/esm2015/src/app/core/table/table.class.js +63 -54
- package/esm2015/src/app/core/table/testing/table.testing.js +3 -2
- package/esm2015/src/app/shared/directives/autofocus.directive.js +1 -1
- package/esm2015/src/app/shared/material/autocomplete/material.autocomplete.js +2 -2
- package/esm2015/src/app/shared/services/entity-service.class.js +1 -10
- package/esm2015/src/app/shared/services/memory-entity-service.class.js +76 -33
- package/esm2015/src/app/shared/services/startable-service.class.js +21 -13
- package/fesm2015/sumaris-net.ngx-components.js +438 -397
- package/fesm2015/sumaris-net.ngx-components.js.map +1 -1
- package/package.json +3 -3
- package/src/app/core/form/editor.class.d.ts +2 -1
- package/src/app/core/services/network.service.d.ts +1 -1
- package/src/app/core/table/table.class.d.ts +2 -1
- package/src/app/shared/services/entity-service.class.d.ts +0 -8
- package/src/app/shared/services/memory-entity-service.class.d.ts +14 -7
- package/src/app/shared/services/startable-service.class.d.ts +4 -2
- package/src/theme/_ngx-components.scss +5 -0
- package/sumaris-net.ngx-components.metadata.json +1 -1
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { InjectionToken, EventEmitter, Component, forwardRef, ChangeDetectionStrategy, ChangeDetectorRef, Optional, Input, Output, ViewChild, Pipe, Injectable, Directive, Inject, NgModule, ElementRef, TemplateRef, ViewContainerRef, HostBinding, HostListener, ViewChildren, ComponentFactoryResolver, ApplicationRef, Injector, Renderer2, ViewEncapsulation } from '@angular/core';
|
|
3
|
-
import * as i1$3 from '@angular/common';
|
|
1
|
+
import { InjectionToken, EventEmitter, Component, forwardRef, ChangeDetectionStrategy, ChangeDetectorRef, Optional, Input, Output, ViewChild, ɵɵdefineInjectable, ɵɵinject, Pipe, Injectable, Directive, Inject, NgModule, ElementRef, TemplateRef, ViewContainerRef, HostBinding, HostListener, ViewChildren, ComponentFactoryResolver, ApplicationRef, INJECTOR, Injector, Renderer2, ViewEncapsulation } from '@angular/core';
|
|
4
2
|
import { CommonModule, DOCUMENT, Location } from '@angular/common';
|
|
5
3
|
import { CdkTableModule } from '@angular/cdk/table';
|
|
6
4
|
import { A11yModule } from '@angular/cdk/a11y';
|
|
7
5
|
import { OverlayModule, OverlayContainer, FullscreenOverlayContainer, Overlay } from '@angular/cdk/overlay';
|
|
8
6
|
import { ScrollingModule } from '@angular/cdk/scrolling';
|
|
9
|
-
import * as i1$2 from '@angular/material/core';
|
|
10
7
|
import { DateAdapter, MatCommonModule, MatRippleModule } from '@angular/material/core';
|
|
11
8
|
import { MatTableModule, MatColumnDef, MatTable } from '@angular/material/table';
|
|
12
9
|
import { MatSortModule, MatSort } from '@angular/material/sort';
|
|
@@ -30,22 +27,17 @@ import { MatProgressBarModule } from '@angular/material/progress-bar';
|
|
|
30
27
|
import { MatRadioModule } from '@angular/material/radio';
|
|
31
28
|
import { MatBadgeModule } from '@angular/material/badge';
|
|
32
29
|
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
|
|
33
|
-
import * as i2$1 from '@angular/material/dialog';
|
|
34
30
|
import { MatDialogModule, MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';
|
|
35
31
|
import { MatAutocomplete, MatAutocompleteTrigger, MatAutocompleteModule, MAT_AUTOCOMPLETE_SCROLL_STRATEGY, MAT_AUTOCOMPLETE_DEFAULT_OPTIONS } from '@angular/material/autocomplete';
|
|
36
32
|
import { __awaiter, __decorate } from 'tslib';
|
|
37
|
-
import * as i1$6 from '@angular/forms';
|
|
38
33
|
import { Validators, NG_VALUE_ACCESSOR, FormGroupDirective, AbstractControl, FormGroup, FormArray, FormControl, ReactiveFormsModule, FormBuilder } from '@angular/forms';
|
|
39
34
|
import { timer, merge, fromEvent, BehaviorSubject, Subscription, Subject, isObservable, from, of, noop as noop$9, Observable, defer, forkJoin, interval, combineLatest, EMPTY } from 'rxjs';
|
|
40
35
|
import { filter, takeUntil, map, first, switchMap, tap, debounceTime, startWith, distinctUntilChanged, mergeMap, catchError, throttleTime, skip, bufferWhen, take } from 'rxjs/operators';
|
|
41
36
|
import { trigger, transition, style, animate, state } from '@angular/animations';
|
|
42
|
-
import * as i1$1 from '@ngx-translate/core';
|
|
43
37
|
import { TranslateService, TranslateModule } from '@ngx-translate/core';
|
|
44
|
-
import * as i1$4 from '@ionic/angular';
|
|
45
38
|
import { IonicModule, Platform, IonRouterOutlet, ModalController, PopoverController, IonicSafeString, createAnimation, ToastController, AlertController, IonicRouteStrategy, NavParams, MenuController, IonContent, IonItem, IonInfiniteScroll } from '@ionic/angular';
|
|
46
39
|
import * as momentImported from 'moment';
|
|
47
40
|
import { isMoment } from 'moment';
|
|
48
|
-
import * as i1 from '@angular/material-moment-adapter';
|
|
49
41
|
import { MomentDateAdapter, MatMomentDateModule } from '@angular/material-moment-adapter';
|
|
50
42
|
import { Keyboard } from '@ionic-native/keyboard/ngx';
|
|
51
43
|
import { TextMaskModule } from 'angular2-text-mask';
|
|
@@ -54,38 +46,32 @@ import { MatDatepickerModule } from '@angular/material/datepicker';
|
|
|
54
46
|
import { MatDividerModule } from '@angular/material/divider';
|
|
55
47
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
56
48
|
import { MatChipsModule } from '@angular/material/chips';
|
|
57
|
-
import * as i3$3 from '@angular/router';
|
|
58
49
|
import { ActivatedRoute, Router, RouterModule, RouteReuseStrategy } from '@angular/router';
|
|
59
|
-
import * as i1$5 from '@angular/platform-browser';
|
|
60
50
|
import { HammerGestureConfig, EventManager } from '@angular/platform-browser';
|
|
61
|
-
import * as i2$2 from '@angular/common/http';
|
|
62
51
|
import { HttpResponse, HttpEventType, HttpClient, HttpHeaders, HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';
|
|
63
52
|
import { ColorPickerModule } from 'ngx-color-picker';
|
|
64
|
-
import { NativeAudio } from '@ionic-native/native-audio/ngx';
|
|
65
|
-
import { Vibration } from '@ionic-native/vibration/ngx';
|
|
53
|
+
import { NativeAudio as NativeAudio$1 } from '@ionic-native/native-audio/ngx';
|
|
54
|
+
import { Vibration as Vibration$1 } from '@ionic-native/vibration/ngx';
|
|
66
55
|
import { AudioManagement } from '@ionic-native/audio-management/ngx';
|
|
67
|
-
import
|
|
68
|
-
import
|
|
69
|
-
import
|
|
56
|
+
import { NativeAudio } from '@ionic-native/native-audio/ngx/index';
|
|
57
|
+
import { Vibration } from '@ionic-native/vibration/ngx/index';
|
|
58
|
+
import { AudioManagement as AudioManagement$1 } from '@ionic-native/audio-management/ngx/index';
|
|
70
59
|
import * as uuidv4Imported from 'uuid/v4';
|
|
71
60
|
import { DragDropModule } from '@angular/cdk/drag-drop';
|
|
72
61
|
import { MarkdownModule } from 'ngx-markdown';
|
|
73
62
|
import { sign, box, hash, verify } from 'tweetnacl';
|
|
74
|
-
import * as i3$1 from '@ionic/storage';
|
|
75
63
|
import { Storage, IonicStorageModule } from '@ionic/storage';
|
|
76
64
|
import 'zone.js/dist/zone-error';
|
|
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
|
|
81
|
-
import
|
|
82
|
-
import
|
|
83
|
-
import { StatusBar } from '@ionic-native/status-bar/ngx';
|
|
84
|
-
import * as i2$4 from '@angular/cdk/platform';
|
|
65
|
+
import { SplashScreen as SplashScreen$1 } from '@ionic-native/splash-screen/ngx';
|
|
66
|
+
import { Connection, Network as Network$1 } from '@ionic-native/network/ngx';
|
|
67
|
+
import { CacheService as CacheService$1, CacheModule } from 'ionic-cache';
|
|
68
|
+
import { CacheService } from 'ionic-cache/dist/cache.service';
|
|
69
|
+
import { Network } from '@ionic-native/network/ngx/index';
|
|
70
|
+
import { SplashScreen } from '@ionic-native/splash-screen/ngx/index';
|
|
71
|
+
import { StatusBar as StatusBar$1 } from '@ionic-native/status-bar/ngx';
|
|
85
72
|
import { Platform as Platform$1 } from '@angular/cdk/platform';
|
|
86
|
-
import { InAppBrowser } from '@ionic-native/in-app-browser/ngx';
|
|
73
|
+
import { InAppBrowser as InAppBrowser$1 } from '@ionic-native/in-app-browser/ngx';
|
|
87
74
|
import { ApolloLink, NetworkStatus, InMemoryCache, ApolloClient, gql } from '@apollo/client/core';
|
|
88
|
-
import * as i2$3 from 'apollo-angular';
|
|
89
75
|
import { Apollo } from 'apollo-angular';
|
|
90
76
|
import { WebSocketLink } from '@apollo/client/link/ws';
|
|
91
77
|
import { getMainDefinition } from '@apollo/client/utilities';
|
|
@@ -93,14 +79,13 @@ import { RetryLink } from '@apollo/client/link/retry';
|
|
|
93
79
|
import QueueLink from 'apollo-link-queue';
|
|
94
80
|
import SerializingLink from 'apollo-link-serialize';
|
|
95
81
|
import loggerLink from 'apollo-link-logger';
|
|
96
|
-
import * as i3$2 from 'apollo-angular/http';
|
|
97
82
|
import { HttpLink } from 'apollo-angular/http';
|
|
98
83
|
import { IonicStorageWrapper, persistCache } from 'apollo3-cache-persist';
|
|
99
|
-
import { NotificationVisibility, Downloader } from '@ionic-native/downloader/ngx';
|
|
100
|
-
import
|
|
101
|
-
import
|
|
102
|
-
import
|
|
103
|
-
import
|
|
84
|
+
import { NotificationVisibility, Downloader as Downloader$1 } from '@ionic-native/downloader/ngx';
|
|
85
|
+
import { StatusBar } from '@ionic-native/status-bar/ngx/index';
|
|
86
|
+
import { Keyboard as Keyboard$1 } from '@ionic-native/keyboard/ngx/index';
|
|
87
|
+
import { InAppBrowser } from '@ionic-native/in-app-browser/ngx/index';
|
|
88
|
+
import { Downloader } from '@ionic-native/downloader/ngx/index';
|
|
104
89
|
import { CdkTextareaAutosize } from '@angular/cdk/text-field';
|
|
105
90
|
import { ValidatorService, TableDataSource } from '@e-is/ngx-material-table';
|
|
106
91
|
import { SelectionModel } from '@angular/cdk/collections';
|
|
@@ -1055,7 +1040,7 @@ const isIpad = (win) => {
|
|
|
1055
1040
|
}
|
|
1056
1041
|
return false;
|
|
1057
1042
|
};
|
|
1058
|
-
const ɵ0
|
|
1043
|
+
const ɵ0 = isIpad;
|
|
1059
1044
|
const isIOS = (win) => testUserAgent(win, /iPhone|iPod/i) || isIpad(win);
|
|
1060
1045
|
const isAndroid = (win) => testUserAgent(win, /android|sink/i);
|
|
1061
1046
|
const isCordova = (win) => {
|
|
@@ -1187,14 +1172,14 @@ class MatAutocompleteFieldUtils {
|
|
|
1187
1172
|
return isNotNil(o1 === null || o1 === void 0 ? void 0 : o1.id) && o1.id === (o2 === null || o2 === void 0 ? void 0 : o2.id);
|
|
1188
1173
|
}
|
|
1189
1174
|
}
|
|
1190
|
-
const noop
|
|
1191
|
-
const ɵ0$
|
|
1175
|
+
const noop = (_) => { };
|
|
1176
|
+
const ɵ0$1 = noop;
|
|
1192
1177
|
class MatAutocompleteField {
|
|
1193
1178
|
constructor(cd, formGroupDir) {
|
|
1194
1179
|
this.cd = cd;
|
|
1195
1180
|
this.formGroupDir = formGroupDir;
|
|
1196
|
-
this._onChangeCallback = noop
|
|
1197
|
-
this._onTouchedCallback = noop
|
|
1181
|
+
this._onChangeCallback = noop;
|
|
1182
|
+
this._onTouchedCallback = noop;
|
|
1198
1183
|
this.logPrefix = '[mat-autocomplete] ';
|
|
1199
1184
|
this.formControlName = null;
|
|
1200
1185
|
this.required = false;
|
|
@@ -1877,7 +1862,7 @@ MatAutocompleteField.decorators = [
|
|
|
1877
1862
|
{ type: Component, args: [{
|
|
1878
1863
|
// eslint-disable-next-line @angular-eslint/component-selector
|
|
1879
1864
|
selector: 'mat-autocomplete-field',
|
|
1880
|
-
template: "<ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col class=\"ion-no-padding\">\n <!-- readonly -->\n <mat-form-field *ngIf=\"_readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n [title]=\"displayValue\"\n class=\"mat-form-field-disabled\">\n\n <mat-label>{{placeholder}}</mat-label>\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput hidden type=\"text\" readonly=\"true\"\n [formControl]=\"formControl\" >\n <ion-text>{{displayWith(value)}}</ion-text>\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 [appearance]=\"appearance\"\n [class.mat-form-field-disabled]=\"disabled\"\n [title]=\"displayValue\">\n\n <mat-label>{{placeholder}}</mat-label>\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <!-- Mobile or Multiple (use <mat-select>) -->\n <mat-select #matSelect\n *ngIf=\"mobile || multiple; else desktopTemplate\"\n [disableRipple]=\"true\"\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)=\"keydownEscape.emit($event)\"\n (keyup.enter)=\"keyupEnter.emit($event)\"\n [compareWith]=\"equals\"\n [multiple]=\"multiple\"\n [typeaheadDebounceInterval]=\"debounceTime * 10\"\n [required]=\"required\">\n <mat-select-trigger>{{ displayWith(value) }}</mat-select-trigger>\n\n <!-- Search bar -->\n <mat-option class=\"mat-select-searchbar\" *ngIf=\"showSearchBar\"\n [class.mat-select-searchbar-sticky]=\"stickySearchBar\"\n disabled>\n <ion-searchbar #ionSearchbar\n inputmode=\"search\"\n autocomplete=\"off\"\n animated=\"true\"\n showClearButton=\"true\"\n [debounce]=\"debounceTime\"\n (ionClear)=\"markAsLoading()\"\n (ionInput)=\"markAsLoading()\"\n (ionChange)=\"ionSearchBarChanged($event, $event.detail.value)\"\n [placeholder]=\"'COMMON.BTN_SEARCH'|translate\"\n ></ion-searchbar>\n </mat-option>\n\n <!-- Headers -->\n <ion-row class=\"mat-select-header column ion-no-padding\"\n [class.multiple]=\"multiple\"\n [class.mat-select-searchbar-sticky]=\"showSearchBar && stickySearchBar\">\n <ion-col *ngFor=\"let attr of displayAttributes; index as i\" [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 && !multiple && !clearable\" 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 as items; else loadingTemplate\">\n <!-- No item option -->\n <mat-option *ngIf=\"items | isEmptyArray\" class=\"ion-padding text-italic\" disabled>\n <ion-label><i>{{noResultMessage | translate}}</i></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 [innerHTML]=\"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\n <!-- footer -->\n <mat-option *ngIf=\"itemCount as count\" class=\"mat-option-footer mat-autocomplete-footer ion-no-padding\" disabled>\n <ion-text class=\"ion-float-end ion-padding-end\"><i>{{'COMMON.RESULT_COUNT'|translate: {count: count} }}</i></ion-text>\n </mat-option>\n\n <!-- Loading spinner -->\n <ng-template #loadingTemplate>\n <mat-option *ngIf=\"(displayValue | 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-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 #desktopTemplate>\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)=\"clicked.emit($event)\"\n (focus)=\"filterInputTextFocusEvent($event)\"\n (blur)=\"filterInputTextBlurEvent($event)\"\n (keydown.escape)=\"keydownEscape.emit($event)\"\n (keyup.enter)=\"keyupEnter.emit($event)\"\n (keyup.arrowdown)=\"!autocomplete.showPanel && dropButtonClick.emit($event)\">\n\n <!-- autocomplete -->\n <mat-autocomplete #autocomplete=\"matAutocomplete\"\n autoActiveFirstOption\n [displayWith]=\"displayWith\"\n [class]=\"classList\"\n [panelWidth]=\"panelWidth\">\n <!-- Headers -->\n <ion-row class=\"mat-autocomplete-header column ion-no-padding\">\n <ion-col *ngFor=\"let attr of displayAttributes; index as i\" [size]=\"displayColumnSizes[i]\">\n <ion-label [innerHTML]=\"displayColumnNames[i] | translate\"></ion-label>\n </ion-col>\n </ion-row>\n\n <!-- Options -->\n <ng-container *ngIf=\"$filteredItems | async as items; else loadingTemplate\">\n <!-- No item option -->\n <mat-option *ngIf=\"items | isEmptyArray\" class=\"ion-padding text-italic\" disabled>\n <ion-label><i>{{noResultMessage | translate}}</i></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=\"(displayValue | 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\n <!-- footer -->\n <ion-row *ngIf=\"itemCount; let count\" class=\"mat-autocomplete-footer ion-no-padding\">\n <ion-col>\n <ion-text 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 </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</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=\"!mobile && !multiple\"\n (click)=\"dropButtonClick.emit($event)\"\n [hidden]=\"disabled\">\n <mat-icon class=\"large select-arrow\">arrow_drop_down</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\n<ng-template #headers>\n <ion-row class=\"mat-autocomplete-header ion-no-padding\">\n <ion-col *ngFor=\"let attr of displayAttributes; index as i\" [size]=\"displayColumnSizes[i]\">\n <ion-label [innerHTML]=\"displayColumnNames[i] | translate\"></ion-label>\n </ion-col>\n </ion-row>\n</ng-template>\n\n",
|
|
1865
|
+
template: "<ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col class=\"ion-no-padding\">\n <!-- readonly -->\n <mat-form-field *ngIf=\"_readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n [title]=\"displayValue\"\n class=\"mat-form-field-disabled\">\n\n <mat-label>{{placeholder}}</mat-label>\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput hidden type=\"text\" readonly=\"true\"\n [formControl]=\"formControl\" >\n <ion-text>{{displayWith(value)}}</ion-text>\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 [appearance]=\"appearance\"\n [class.mat-form-field-disabled]=\"disabled\"\n [title]=\"displayValue\">\n\n <mat-label>{{placeholder}}</mat-label>\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <!-- Mobile or Multiple (use <mat-select>) -->\n <mat-select #matSelect\n *ngIf=\"mobile || multiple; else desktopTemplate\"\n [disableRipple]=\"true\"\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)=\"keydownEscape.emit($event)\"\n (keyup.enter)=\"keyupEnter.emit($event)\"\n [compareWith]=\"equals\"\n [multiple]=\"multiple\"\n [typeaheadDebounceInterval]=\"debounceTime * 10\"\n [required]=\"required\">\n <mat-select-trigger>{{ displayWith(value) }}</mat-select-trigger>\n\n <!-- Search bar -->\n <mat-option class=\"mat-select-searchbar\" *ngIf=\"showSearchBar\"\n [class.mat-select-searchbar-sticky]=\"stickySearchBar\"\n disabled>\n <ion-searchbar #ionSearchbar\n inputmode=\"search\"\n autocomplete=\"off\"\n animated=\"true\"\n showClearButton=\"true\"\n [debounce]=\"debounceTime\"\n (ionClear)=\"markAsLoading()\"\n (ionInput)=\"markAsLoading()\"\n (ionChange)=\"ionSearchBarChanged($event, $event.detail.value)\"\n [placeholder]=\"'COMMON.BTN_SEARCH'|translate\"\n ></ion-searchbar>\n </mat-option>\n\n <!-- Headers -->\n <ion-row class=\"mat-select-header column ion-no-padding\"\n [class.multiple]=\"multiple\"\n [class.mat-select-searchbar-sticky]=\"showSearchBar && stickySearchBar\">\n <ion-col *ngFor=\"let attr of displayAttributes; index as i\" [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 && !multiple && !clearable\" 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 as items; else loadingTemplate\">\n <!-- No item option -->\n <mat-option *ngIf=\"items | isEmptyArray\" class=\"ion-padding text-italic\" disabled>\n <ion-label><i>{{noResultMessage | translate}}</i></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 [innerHTML]=\"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\n <!-- footer -->\n <mat-option *ngIf=\"itemCount as count\" class=\"mat-option-footer mat-autocomplete-footer ion-no-padding\" disabled>\n <ion-text class=\"ion-float-end ion-padding-end\"><i>{{'COMMON.RESULT_COUNT'|translate: {count: count} }}</i></ion-text>\n </mat-option>\n\n <!-- Loading spinner -->\n <ng-template #loadingTemplate>\n <mat-option *ngIf=\"(displayValue | 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-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 #desktopTemplate>\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)=\"clicked.emit($event)\"\n (focus)=\"filterInputTextFocusEvent($event)\"\n (blur)=\"filterInputTextBlurEvent($event)\"\n (keydown.escape)=\"keydownEscape.emit($event)\"\n (keyup.enter)=\"keyupEnter.emit($event)\"\n (keyup.arrowdown)=\"!autocomplete.showPanel && dropButtonClick.emit($event)\">\n\n <!-- autocomplete -->\n <mat-autocomplete #autocomplete=\"matAutocomplete\"\n autoActiveFirstOption\n [displayWith]=\"displayWith\"\n [class]=\"classList\"\n [panelWidth]=\"panelWidth\">\n <!-- Headers -->\n <ion-row class=\"mat-autocomplete-header column ion-no-padding\">\n <ion-col *ngFor=\"let attr of displayAttributes; index as i\" [size]=\"displayColumnSizes[i]\">\n <ion-label [innerHTML]=\"displayColumnNames[i] | translate\"></ion-label>\n </ion-col>\n </ion-row>\n\n <!-- Options -->\n <ng-container *ngIf=\"$filteredItems | async as items; else loadingTemplate\">\n <!-- No item option -->\n <mat-option *ngIf=\"items | isEmptyArray\" class=\"ion-padding text-italic\" disabled>\n <ion-label><i>{{noResultMessage | translate}}</i></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 [title]=\"text.innerText\">\n <ion-text><span #text [innerHTML]=\"item | propertyGet: path | highlight: { search: formControl.value, withAccent: highlightAccent }\"></span></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=\"(displayValue | 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\n <!-- footer -->\n <ion-row *ngIf=\"itemCount; let count\" class=\"mat-autocomplete-footer ion-no-padding\">\n <ion-col>\n <ion-text 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 </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</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=\"!mobile && !multiple\"\n (click)=\"dropButtonClick.emit($event)\"\n [hidden]=\"disabled\">\n <mat-icon class=\"large select-arrow\">arrow_drop_down</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\n<ng-template #headers>\n <ion-row class=\"mat-autocomplete-header ion-no-padding\">\n <ion-col *ngFor=\"let attr of displayAttributes; index as i\" [size]=\"displayColumnSizes[i]\">\n <ion-label [innerHTML]=\"displayColumnNames[i] | translate\"></ion-label>\n </ion-col>\n </ion-row>\n</ng-template>\n\n",
|
|
1881
1866
|
providers: [{
|
|
1882
1867
|
provide: NG_VALUE_ACCESSOR,
|
|
1883
1868
|
multi: true,
|
|
@@ -1967,7 +1952,7 @@ class DateFormatPipe {
|
|
|
1967
1952
|
return isMoment(value) ? value : this.dateAdapter.parse(value, parseFormat || DATE_ISO_PATTERN);
|
|
1968
1953
|
}
|
|
1969
1954
|
}
|
|
1970
|
-
DateFormatPipe.ɵprov =
|
|
1955
|
+
DateFormatPipe.ɵprov = ɵɵdefineInjectable({ factory: function DateFormatPipe_Factory() { return new DateFormatPipe(ɵɵinject(MomentDateAdapter), ɵɵinject(TranslateService)); }, token: DateFormatPipe, providedIn: "root" });
|
|
1971
1956
|
DateFormatPipe.decorators = [
|
|
1972
1957
|
{ type: Pipe, args: [{
|
|
1973
1958
|
name: 'dateFormat'
|
|
@@ -1979,7 +1964,7 @@ DateFormatPipe.ctorParameters = () => [
|
|
|
1979
1964
|
{ type: TranslateService }
|
|
1980
1965
|
];
|
|
1981
1966
|
|
|
1982
|
-
const moment
|
|
1967
|
+
const moment = momentImported;
|
|
1983
1968
|
class DateDiffDurationPipe {
|
|
1984
1969
|
constructor(dateAdapter, translate) {
|
|
1985
1970
|
this.dateAdapter = dateAdapter;
|
|
@@ -1995,11 +1980,11 @@ class DateDiffDurationPipe {
|
|
|
1995
1980
|
return this.format(startDate, endDate, args);
|
|
1996
1981
|
}
|
|
1997
1982
|
format(startDate, endDate, args) {
|
|
1998
|
-
const duration = moment
|
|
1983
|
+
const duration = moment.duration(endDate.diff(startDate));
|
|
1999
1984
|
if (duration.asMinutes() < 0)
|
|
2000
1985
|
return '';
|
|
2001
1986
|
const withSeconds = args === null || args === void 0 ? void 0 : args.seconds;
|
|
2002
|
-
const timeDuration = moment
|
|
1987
|
+
const timeDuration = moment(0)
|
|
2003
1988
|
.hour(duration.hours())
|
|
2004
1989
|
.minute(duration.minutes());
|
|
2005
1990
|
if (withSeconds) {
|
|
@@ -2009,7 +1994,7 @@ class DateDiffDurationPipe {
|
|
|
2009
1994
|
return (days > 0 ? days.toString() + (this.dayUnit + ' ') : '') + timeDuration.format(withSeconds ? 'HH:mm:ss' : 'HH:mm');
|
|
2010
1995
|
}
|
|
2011
1996
|
}
|
|
2012
|
-
DateDiffDurationPipe.ɵprov =
|
|
1997
|
+
DateDiffDurationPipe.ɵprov = ɵɵdefineInjectable({ factory: function DateDiffDurationPipe_Factory() { return new DateDiffDurationPipe(ɵɵinject(DateAdapter), ɵɵinject(TranslateService)); }, token: DateDiffDurationPipe, providedIn: "root" });
|
|
2013
1998
|
DateDiffDurationPipe.decorators = [
|
|
2014
1999
|
{ type: Pipe, args: [{
|
|
2015
2000
|
name: 'dateDiffDuration'
|
|
@@ -2030,7 +2015,7 @@ class DateFromNowPipe {
|
|
|
2030
2015
|
return date ? date.fromNow(args && args.withoutSuffix) : '';
|
|
2031
2016
|
}
|
|
2032
2017
|
}
|
|
2033
|
-
DateFromNowPipe.ɵprov =
|
|
2018
|
+
DateFromNowPipe.ɵprov = ɵɵdefineInjectable({ factory: function DateFromNowPipe_Factory() { return new DateFromNowPipe(ɵɵinject(MomentDateAdapter)); }, token: DateFromNowPipe, providedIn: "root" });
|
|
2034
2019
|
DateFromNowPipe.decorators = [
|
|
2035
2020
|
{ type: Pipe, args: [{
|
|
2036
2021
|
name: 'dateFromNow'
|
|
@@ -2099,7 +2084,7 @@ function formatToDD(value, opts) {
|
|
|
2099
2084
|
value *= -1;
|
|
2100
2085
|
}
|
|
2101
2086
|
}
|
|
2102
|
-
let degrees = roundFloat
|
|
2087
|
+
let degrees = roundFloat(value, opts.maxDecimals).toString();
|
|
2103
2088
|
// Add sign
|
|
2104
2089
|
let sign = negative ? '-' : '+';
|
|
2105
2090
|
if (opts.placeholderChar) {
|
|
@@ -2150,7 +2135,7 @@ function formatToDDMMSS(value, opts) {
|
|
|
2150
2135
|
}
|
|
2151
2136
|
let degrees = Math.trunc(value);
|
|
2152
2137
|
let minutes = Math.trunc((value - degrees) * 60);
|
|
2153
|
-
let seconds = roundFloat
|
|
2138
|
+
let seconds = roundFloat(((value - degrees) * 60 - minutes) * 60, opts.maxDecimals);
|
|
2154
2139
|
while (seconds >= 60) {
|
|
2155
2140
|
seconds -= 60;
|
|
2156
2141
|
minutes += 1;
|
|
@@ -2218,7 +2203,7 @@ function formatToDDMM(value, opts) {
|
|
|
2218
2203
|
}
|
|
2219
2204
|
}
|
|
2220
2205
|
let degrees = Math.trunc(value);
|
|
2221
|
-
let minutes = roundFloat
|
|
2206
|
+
let minutes = roundFloat((value - degrees) * 60, opts.maxDecimals);
|
|
2222
2207
|
while (minutes >= 60) {
|
|
2223
2208
|
minutes -= 60;
|
|
2224
2209
|
degrees += 1;
|
|
@@ -2269,15 +2254,15 @@ function parseLatitudeOrLongitude(input, pattern, maxDecimals, placeholderChar)
|
|
|
2269
2254
|
return NaN;
|
|
2270
2255
|
}
|
|
2271
2256
|
if (pattern === 'DD')
|
|
2272
|
-
return roundFloat
|
|
2257
|
+
return roundFloat(degrees, maxDecimals);
|
|
2273
2258
|
const minutes = (pattern === 'DDMMSS' || pattern === 'DDMM') && parts[1] && parseFloat(parts[1].replace(/,/g, '.')) || 0;
|
|
2274
2259
|
const seconds = (pattern === 'DDMMSS') && parts[2] && parseFloat(parts[2].replace(/,/g, '.')) || 0;
|
|
2275
2260
|
const direction = ((pattern === 'DDMMSS') && parts[3]) || ((pattern === 'DDMM') && parts[2]) || undefined;
|
|
2276
2261
|
const sign = (direction && (direction === 's' || direction === 'S' || direction === 'w' || direction === 'W')) ? -1 : 1;
|
|
2277
2262
|
degrees = sign * (degrees + minutes / 60 + seconds / (60 * 60));
|
|
2278
|
-
return roundFloat
|
|
2263
|
+
return roundFloat(degrees, maxDecimals);
|
|
2279
2264
|
}
|
|
2280
|
-
function roundFloat
|
|
2265
|
+
function roundFloat(input, maxDecimals) {
|
|
2281
2266
|
if (maxDecimals > 0) {
|
|
2282
2267
|
const powDecimal = Math.pow(10, maxDecimals);
|
|
2283
2268
|
return Math.trunc(input * powDecimal + 0.5) / powDecimal;
|
|
@@ -2338,7 +2323,7 @@ class NumberFormatPipe {
|
|
|
2338
2323
|
}
|
|
2339
2324
|
}
|
|
2340
2325
|
}
|
|
2341
|
-
NumberFormatPipe.ɵprov =
|
|
2326
|
+
NumberFormatPipe.ɵprov = ɵɵdefineInjectable({ factory: function NumberFormatPipe_Factory() { return new NumberFormatPipe(); }, token: NumberFormatPipe, providedIn: "root" });
|
|
2342
2327
|
NumberFormatPipe.decorators = [
|
|
2343
2328
|
{ type: Pipe, args: [{
|
|
2344
2329
|
name: 'numberFormat'
|
|
@@ -2378,7 +2363,7 @@ class HighlightPipe {
|
|
|
2378
2363
|
}
|
|
2379
2364
|
}
|
|
2380
2365
|
}
|
|
2381
|
-
HighlightPipe.ɵprov =
|
|
2366
|
+
HighlightPipe.ɵprov = ɵɵdefineInjectable({ factory: function HighlightPipe_Factory() { return new HighlightPipe(); }, token: HighlightPipe, providedIn: "root" });
|
|
2382
2367
|
HighlightPipe.decorators = [
|
|
2383
2368
|
{ type: Pipe, args: [{
|
|
2384
2369
|
name: 'highlight'
|
|
@@ -2443,7 +2428,7 @@ FileSizePipe.decorators = [
|
|
|
2443
2428
|
{ type: Pipe, args: [{ name: 'fileSize' },] }
|
|
2444
2429
|
];
|
|
2445
2430
|
|
|
2446
|
-
const moment$
|
|
2431
|
+
const moment$1 = momentImported;
|
|
2447
2432
|
const DATE_UNIX_TIMESTAMP = 'X';
|
|
2448
2433
|
const DATE_UNIX_MS_TIMESTAMP = 'x';
|
|
2449
2434
|
const MOMENT_NO_TIME_PROPERTY = '_hasNoTime';
|
|
@@ -2532,37 +2517,37 @@ function fromDateISOString(value) {
|
|
|
2532
2517
|
return value;
|
|
2533
2518
|
if (typeof value === 'string' && value.length === 10) {
|
|
2534
2519
|
// Parse the input value, as a date only
|
|
2535
|
-
const dateOnly = moment$
|
|
2520
|
+
const dateOnly = moment$1(value, DATE_PATTERN);
|
|
2536
2521
|
if (dateOnly.isValid())
|
|
2537
2522
|
return DateUtils.markNoTime(dateOnly);
|
|
2538
2523
|
}
|
|
2539
2524
|
// Parse the input value, as a ISO date time
|
|
2540
|
-
const date = moment$
|
|
2525
|
+
const date = moment$1(value, DATE_ISO_PATTERN);
|
|
2541
2526
|
if (date.isValid())
|
|
2542
2527
|
return date;
|
|
2543
2528
|
// Not valid: trying to convert from unix timestamp
|
|
2544
2529
|
if (typeof value === 'string') {
|
|
2545
2530
|
console.warn('Wrong date format - Trying to convert from local time: ' + value);
|
|
2546
2531
|
if (value.length === 10) {
|
|
2547
|
-
return moment$
|
|
2532
|
+
return moment$1(value, DATE_UNIX_TIMESTAMP);
|
|
2548
2533
|
}
|
|
2549
2534
|
else if (value.length === 13) {
|
|
2550
|
-
return moment$
|
|
2535
|
+
return moment$1(value, DATE_UNIX_MS_TIMESTAMP);
|
|
2551
2536
|
}
|
|
2552
2537
|
}
|
|
2553
2538
|
console.warn('Unable to parse date: ' + value);
|
|
2554
2539
|
return undefined;
|
|
2555
2540
|
}
|
|
2556
2541
|
function fromUnixTimestamp(timeInSec) {
|
|
2557
|
-
return moment$
|
|
2542
|
+
return moment$1(timeInSec, DATE_UNIX_TIMESTAMP);
|
|
2558
2543
|
}
|
|
2559
2544
|
function fromUnixMsTimestamp(timeInMs) {
|
|
2560
|
-
return moment$
|
|
2545
|
+
return moment$1(timeInMs, DATE_UNIX_MS_TIMESTAMP);
|
|
2561
2546
|
}
|
|
2562
2547
|
function toDuration(value, unit) {
|
|
2563
2548
|
if (!value)
|
|
2564
2549
|
return undefined;
|
|
2565
|
-
const duration = moment$
|
|
2550
|
+
const duration = moment$1.duration(value, unit);
|
|
2566
2551
|
// fix 990+ ms
|
|
2567
2552
|
if (duration.milliseconds() >= 990) {
|
|
2568
2553
|
duration.add(1000 - duration.milliseconds(), 'ms');
|
|
@@ -2591,7 +2576,7 @@ class DurationPipe {
|
|
|
2591
2576
|
return (days > 0 ? days.toString() + (this.dayUnit + ' ') : '') + hour + ':' + minute;
|
|
2592
2577
|
}
|
|
2593
2578
|
}
|
|
2594
|
-
DurationPipe.ɵprov =
|
|
2579
|
+
DurationPipe.ɵprov = ɵɵdefineInjectable({ factory: function DurationPipe_Factory() { return new DurationPipe(ɵɵinject(TranslateService)); }, token: DurationPipe, providedIn: "root" });
|
|
2595
2580
|
DurationPipe.decorators = [
|
|
2596
2581
|
{ type: Pipe, args: [{
|
|
2597
2582
|
name: 'duration'
|
|
@@ -2612,7 +2597,7 @@ class MathAbsPipe {
|
|
|
2612
2597
|
}
|
|
2613
2598
|
}
|
|
2614
2599
|
}
|
|
2615
|
-
MathAbsPipe.ɵprov =
|
|
2600
|
+
MathAbsPipe.ɵprov = ɵɵdefineInjectable({ factory: function MathAbsPipe_Factory() { return new MathAbsPipe(); }, token: MathAbsPipe, providedIn: "root" });
|
|
2616
2601
|
MathAbsPipe.decorators = [
|
|
2617
2602
|
{ type: Pipe, args: [{
|
|
2618
2603
|
name: 'mathAbs'
|
|
@@ -2624,7 +2609,7 @@ class EvenPipe {
|
|
|
2624
2609
|
return val % 2 === 0;
|
|
2625
2610
|
}
|
|
2626
2611
|
}
|
|
2627
|
-
EvenPipe.ɵprov =
|
|
2612
|
+
EvenPipe.ɵprov = ɵɵdefineInjectable({ factory: function EvenPipe_Factory() { return new EvenPipe(); }, token: EvenPipe, providedIn: "root" });
|
|
2628
2613
|
EvenPipe.decorators = [
|
|
2629
2614
|
{ type: Pipe, args: [{
|
|
2630
2615
|
name: 'even'
|
|
@@ -2636,7 +2621,7 @@ class OddPipe {
|
|
|
2636
2621
|
return val % 2 !== 0;
|
|
2637
2622
|
}
|
|
2638
2623
|
}
|
|
2639
|
-
OddPipe.ɵprov =
|
|
2624
|
+
OddPipe.ɵprov = ɵɵdefineInjectable({ factory: function OddPipe_Factory() { return new OddPipe(); }, token: OddPipe, providedIn: "root" });
|
|
2640
2625
|
OddPipe.decorators = [
|
|
2641
2626
|
{ type: Pipe, args: [{
|
|
2642
2627
|
name: 'odd'
|
|
@@ -2744,7 +2729,7 @@ class MapGetPipe {
|
|
|
2744
2729
|
return val[key];
|
|
2745
2730
|
}
|
|
2746
2731
|
}
|
|
2747
|
-
MapGetPipe.ɵprov =
|
|
2732
|
+
MapGetPipe.ɵprov = ɵɵdefineInjectable({ factory: function MapGetPipe_Factory() { return new MapGetPipe(); }, token: MapGetPipe, providedIn: "root" });
|
|
2748
2733
|
MapGetPipe.decorators = [
|
|
2749
2734
|
{ type: Pipe, args: [{
|
|
2750
2735
|
name: 'mapGet'
|
|
@@ -2758,7 +2743,7 @@ class MapKeysPipe {
|
|
|
2758
2743
|
return Object.keys(map);
|
|
2759
2744
|
}
|
|
2760
2745
|
}
|
|
2761
|
-
MapKeysPipe.ɵprov =
|
|
2746
|
+
MapKeysPipe.ɵprov = ɵɵdefineInjectable({ factory: function MapKeysPipe_Factory() { return new MapKeysPipe(); }, token: MapKeysPipe, providedIn: "root" });
|
|
2762
2747
|
MapKeysPipe.decorators = [
|
|
2763
2748
|
{ type: Pipe, args: [{
|
|
2764
2749
|
name: 'mapKeys'
|
|
@@ -2772,7 +2757,7 @@ class MapValuesPipe {
|
|
|
2772
2757
|
return Object.values(map);
|
|
2773
2758
|
}
|
|
2774
2759
|
}
|
|
2775
|
-
MapValuesPipe.ɵprov =
|
|
2760
|
+
MapValuesPipe.ɵprov = ɵɵdefineInjectable({ factory: function MapValuesPipe_Factory() { return new MapValuesPipe(); }, token: MapValuesPipe, providedIn: "root" });
|
|
2776
2761
|
MapValuesPipe.decorators = [
|
|
2777
2762
|
{ type: Pipe, args: [{
|
|
2778
2763
|
name: 'mapValues'
|
|
@@ -2900,7 +2885,7 @@ class TranslateContextService {
|
|
|
2900
2885
|
return translations[keys[keys.length - 1]]; // Return the last keys translation
|
|
2901
2886
|
}
|
|
2902
2887
|
}
|
|
2903
|
-
TranslateContextService.ɵprov =
|
|
2888
|
+
TranslateContextService.ɵprov = ɵɵdefineInjectable({ factory: function TranslateContextService_Factory() { return new TranslateContextService(ɵɵinject(TranslateService)); }, token: TranslateContextService, providedIn: "root" });
|
|
2904
2889
|
TranslateContextService.decorators = [
|
|
2905
2890
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
2906
2891
|
];
|
|
@@ -2958,7 +2943,7 @@ NgInitDirective.propDecorators = {
|
|
|
2958
2943
|
ngInit: [{ type: Output }]
|
|
2959
2944
|
};
|
|
2960
2945
|
|
|
2961
|
-
const moment$
|
|
2946
|
+
const moment$2 = momentImported;
|
|
2962
2947
|
// @dynamic
|
|
2963
2948
|
class SharedValidators {
|
|
2964
2949
|
static getDoubleRegexp(maxDecimals) {
|
|
@@ -3039,7 +3024,7 @@ class SharedValidators {
|
|
|
3039
3024
|
}
|
|
3040
3025
|
static validDate(control) {
|
|
3041
3026
|
const value = control.value;
|
|
3042
|
-
const date = !value || moment$
|
|
3027
|
+
const date = !value || moment$2.isMoment(value) ? value : moment$2(value, DATE_ISO_PATTERN);
|
|
3043
3028
|
if (date && (!date.isValid() || date.year() < 1970)) {
|
|
3044
3029
|
return { validDate: true };
|
|
3045
3030
|
}
|
|
@@ -4164,7 +4149,7 @@ class FormErrorTranslator {
|
|
|
4164
4149
|
return errorKey;
|
|
4165
4150
|
}
|
|
4166
4151
|
}
|
|
4167
|
-
FormErrorTranslator.ɵprov =
|
|
4152
|
+
FormErrorTranslator.ɵprov = ɵɵdefineInjectable({ factory: function FormErrorTranslator_Factory() { return new FormErrorTranslator(ɵɵinject(TranslateService), ɵɵinject(APP_FORM_ERROR_I18N_KEYS, 8)); }, token: FormErrorTranslator, providedIn: "root" });
|
|
4168
4153
|
FormErrorTranslator.decorators = [
|
|
4169
4154
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
4170
4155
|
];
|
|
@@ -4426,7 +4411,7 @@ class PropertyFormatPipe {
|
|
|
4426
4411
|
return this._i18nNo;
|
|
4427
4412
|
}
|
|
4428
4413
|
}
|
|
4429
|
-
PropertyFormatPipe.ɵprov =
|
|
4414
|
+
PropertyFormatPipe.ɵprov = ɵɵdefineInjectable({ factory: function PropertyFormatPipe_Factory() { return new PropertyFormatPipe(ɵɵinject(DateFormatPipe), ɵɵinject(TranslateService)); }, token: PropertyFormatPipe, providedIn: "root" });
|
|
4430
4415
|
PropertyFormatPipe.decorators = [
|
|
4431
4416
|
{ type: Pipe, args: [{
|
|
4432
4417
|
name: 'propertyFormat'
|
|
@@ -4792,9 +4777,9 @@ function parseDuration(input, maxDecimals, placeholderChar) {
|
|
|
4792
4777
|
const hour = parseInt(durationParts[0] || '0');
|
|
4793
4778
|
const minute = parseInt(durationParts[1] || '0');
|
|
4794
4779
|
const value = hour + (minute + 0.5) / 60;
|
|
4795
|
-
return roundFloat(value, maxDecimals);
|
|
4780
|
+
return roundFloat$1(value, maxDecimals);
|
|
4796
4781
|
}
|
|
4797
|
-
function roundFloat(input, maxDecimals) {
|
|
4782
|
+
function roundFloat$1(input, maxDecimals) {
|
|
4798
4783
|
if (maxDecimals > 0) {
|
|
4799
4784
|
const powDecimal = Math.pow(10, maxDecimals);
|
|
4800
4785
|
return Math.trunc(input * powDecimal + 0.5) / powDecimal;
|
|
@@ -4818,16 +4803,16 @@ const MASKS = {
|
|
|
4818
4803
|
DD: [/[+-]/, /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, '°']
|
|
4819
4804
|
}
|
|
4820
4805
|
};
|
|
4821
|
-
const noop$
|
|
4806
|
+
const noop$1 = () => {
|
|
4822
4807
|
};
|
|
4823
|
-
const ɵ0$
|
|
4808
|
+
const ɵ0$2 = noop$1;
|
|
4824
4809
|
class MatLatLongField {
|
|
4825
4810
|
constructor(formBuilder, cd, formGroupDir) {
|
|
4826
4811
|
this.formBuilder = formBuilder;
|
|
4827
4812
|
this.cd = cd;
|
|
4828
4813
|
this.formGroupDir = formGroupDir;
|
|
4829
|
-
this._onChangeCallback = noop$
|
|
4830
|
-
this._onTouchedCallback = noop$
|
|
4814
|
+
this._onChangeCallback = noop$1;
|
|
4815
|
+
this._onTouchedCallback = noop$1;
|
|
4831
4816
|
this._subscription = new Subscription();
|
|
4832
4817
|
this._disabling = false;
|
|
4833
4818
|
this._writing = false;
|
|
@@ -5172,14 +5157,14 @@ SharedMatLatLongModule.decorators = [
|
|
|
5172
5157
|
},] }
|
|
5173
5158
|
];
|
|
5174
5159
|
|
|
5175
|
-
const DEFAULT_VALUE_ACCESSOR
|
|
5160
|
+
const DEFAULT_VALUE_ACCESSOR = {
|
|
5176
5161
|
provide: NG_VALUE_ACCESSOR,
|
|
5177
5162
|
useExisting: forwardRef(() => MatDate),
|
|
5178
5163
|
multi: true
|
|
5179
5164
|
};
|
|
5180
5165
|
const TEXT_MASK = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
|
|
5181
|
-
const noop$
|
|
5182
|
-
const ɵ0$
|
|
5166
|
+
const noop$2 = () => { };
|
|
5167
|
+
const ɵ0$3 = noop$2;
|
|
5183
5168
|
class MatDate {
|
|
5184
5169
|
constructor(dateAdapter, translate, formBuilder, cd, keyboard, formGroupDir) {
|
|
5185
5170
|
this.dateAdapter = dateAdapter;
|
|
@@ -5188,8 +5173,8 @@ class MatDate {
|
|
|
5188
5173
|
this.cd = cd;
|
|
5189
5174
|
this.keyboard = keyboard;
|
|
5190
5175
|
this.formGroupDir = formGroupDir;
|
|
5191
|
-
this._onChangeCallback = noop$
|
|
5192
|
-
this._onTouchedCallback = noop$
|
|
5176
|
+
this._onChangeCallback = noop$2;
|
|
5177
|
+
this._onTouchedCallback = noop$2;
|
|
5193
5178
|
this._subscription = new Subscription();
|
|
5194
5179
|
this._writing = true;
|
|
5195
5180
|
this._disabling = false;
|
|
@@ -5495,7 +5480,7 @@ MatDate.decorators = [
|
|
|
5495
5480
|
selector: 'mat-date-field',
|
|
5496
5481
|
template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n class=\"mat-form-field-disabled\">\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput hidden type=\"text\"\n readonly\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\">\n <ion-text>{{formControl.value|dateFormat: {pattern: datePattern} }}</ion-text>\n</mat-form-field>\n\n<!-- writable -->\n<ng-template #writable>\n <mat-form-field [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\">\n\n <mat-label>{{placeholder}}</mat-label>\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"!mobile\"\n [formControl]=\"textControl\"\n [textMask]=\"{mask: mask, keepCharPositions: true, placeholderChar: placeholderChar}\"\n [placeholder]=\"'COMMON.DATE_PLACEHOLDER'|translate\"\n (blur)=\"checkIfTouched()\"\n (keyup.arrowdown)=\"openDatePicker($event, datePicker)\"\n (keyup.escape)=\"preventEvent($event)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n [appAutofocus]=\"autofocus\">\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"mobile\"\n [formControl]=\"textControl\"\n (click)=\"openDatePickerIfMobile($event, datePicker)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n readonly>\n\n <!-- Hide the final input -->\n <input matInput type=\"text\" [formControl]=\"formControl\"\n hidden\n [matDatepicker]=\"datePicker\"\n [matDatepickerFilter]=\"datePickerFilter\"\n (dateChange)=\"onDatePickerChange($event)\">\n\n <button type=\"button\" mat-icon-button tabindex=\"-1\" matSuffix\n (click)=\"openDatePicker($event, datePicker)\"\n [disabled]=\"formControl.disabled\">\n <div *ngIf=\"mobile; then iconDate; else iconDesktop\"></div>\n </button>\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"clear()\"\n [hidden]=\"formControl.disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n\n <!-- errors -->\n <mat-error *ngIf=\"formControl.touched && formControl.errors|mapKeys|arrayFirst; let errorKey\" [ngSwitch]=\"errorKey\">\n <span *ngSwitchCase=\"'required'\" translate>ERROR.FIELD_REQUIRED</span>\n <span *ngSwitchCase=\"'validDate'\" translate>ERROR.FIELD_NOT_VALID_DATE</span>\n <span *ngSwitchCase=\"'dateIsAfter'\">{{'ERROR.FIELD_NOT_VALID_DATE_AFTER' | translate: formControl.errors.dateIsAfter }}</span>\n <span *ngSwitchCase=\"'dateIsBefore'\">{{'ERROR.FIELD_NOT_VALID_DATE_BEFORE' | translate: formControl.errors.dateIsBefore }}</span>\n <span *ngSwitchCase=\"'dateRange'\" translate>ERROR.FIELD_NOT_VALID_DATE_RANGE</span>\n <span *ngSwitchCase=\"'dateMaxDuration'\" translate>ERROR.FIELD_NOT_VALID_DATE_MAX_DURATION</span>\n <span *ngSwitchCase=\"'dateMinDuration'\" translate>ERROR.FIELD_NOT_VALID_DATE_MIN_DURATION</span>\n <span *ngSwitchCase=\"'msg'\">{{(formControl.errors.msg?.key || formControl.errors.msg) | translate: formControl.errors.msg?.params}}</span>\n </mat-error>\n <ng-content select=\"mat-error\"></ng-content>\n\n <!-- mat hint -->\n <div class=\"mat-form-field-hint-wrapper\" [class.cdk-visually-hidden]=\"formControl.invalid\">\n <div class=\"mat-form-field-hint-spacer\"></div>\n <ng-content select=\"mat-hint\"></ng-content>\n </div>\n </mat-form-field>\n\n <mat-datepicker #datePicker\n [touchUi]=\"mobile\"\n [disabled]=\"formControl.disabled\"\n [startAt]=\"startDate\"\n ></mat-datepicker>\n\n\n\n</ng-template>\n\n<ng-template #iconDesktop>\n <mat-icon>keyboard_arrow_down</mat-icon>\n</ng-template>\n\n<ng-template #iconDate>\n <mat-icon>date_range</mat-icon>\n</ng-template>\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n",
|
|
5497
5482
|
providers: [
|
|
5498
|
-
DEFAULT_VALUE_ACCESSOR
|
|
5483
|
+
DEFAULT_VALUE_ACCESSOR,
|
|
5499
5484
|
],
|
|
5500
5485
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
5501
5486
|
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%}"]
|
|
@@ -5530,16 +5515,16 @@ MatDate.propDecorators = {
|
|
|
5530
5515
|
matInputs: [{ type: ViewChildren, args: ['matInput',] }]
|
|
5531
5516
|
};
|
|
5532
5517
|
|
|
5533
|
-
const DEFAULT_VALUE_ACCESSOR$
|
|
5518
|
+
const DEFAULT_VALUE_ACCESSOR$1 = {
|
|
5534
5519
|
provide: NG_VALUE_ACCESSOR,
|
|
5535
5520
|
useExisting: forwardRef(() => MatDateTime),
|
|
5536
5521
|
multi: true
|
|
5537
5522
|
};
|
|
5538
|
-
const DAY_MASK
|
|
5523
|
+
const DAY_MASK = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
|
|
5539
5524
|
const HOUR_REGEXP = /^[012][0-9][:][012345][0-9]$/;
|
|
5540
|
-
const HOUR_MASK
|
|
5541
|
-
const noop$
|
|
5542
|
-
const ɵ0$
|
|
5525
|
+
const HOUR_MASK = [/[012]/, /\d/, ':', /[012345]/, /\d/];
|
|
5526
|
+
const noop$3 = () => { };
|
|
5527
|
+
const ɵ0$4 = noop$3;
|
|
5543
5528
|
class MatDateTime {
|
|
5544
5529
|
constructor(dateAdapter, translate, formBuilder, cd, keyboard, formGroupDir) {
|
|
5545
5530
|
this.dateAdapter = dateAdapter;
|
|
@@ -5548,14 +5533,14 @@ class MatDateTime {
|
|
|
5548
5533
|
this.cd = cd;
|
|
5549
5534
|
this.keyboard = keyboard;
|
|
5550
5535
|
this.formGroupDir = formGroupDir;
|
|
5551
|
-
this._onChangeCallback = noop$
|
|
5552
|
-
this._onTouchedCallback = noop$
|
|
5536
|
+
this._onChangeCallback = noop$3;
|
|
5537
|
+
this._onTouchedCallback = noop$3;
|
|
5553
5538
|
this._subscription = new Subscription();
|
|
5554
5539
|
this._writing = true;
|
|
5555
5540
|
this._disabling = false;
|
|
5556
5541
|
this._readonly = false;
|
|
5557
|
-
this.dayMask = DAY_MASK
|
|
5558
|
-
this.hourMask = HOUR_MASK
|
|
5542
|
+
this.dayMask = DAY_MASK;
|
|
5543
|
+
this.hourMask = HOUR_MASK;
|
|
5559
5544
|
this.floatLabel = 'auto';
|
|
5560
5545
|
this.compact = false;
|
|
5561
5546
|
this.placeholderChar = DEFAULT_PLACEHOLDER_CHAR;
|
|
@@ -5876,7 +5861,7 @@ MatDateTime.decorators = [
|
|
|
5876
5861
|
selector: 'mat-date-time-field',
|
|
5877
5862
|
template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n class=\"mat-form-field-disabled\">\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput hidden type=\"text\"\n readonly\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\">\n <ion-text>{{formControl.value|dateFormat: {pattern: displayPattern} }}</ion-text>\n</mat-form-field>\n\n<!-- writable + time -->\n<ng-template #writable >\n <ion-grid class=\"ion-no-padding mat-form-field-{{appearance}}\">\n <ion-row class=\"ion-no-padding no-wrap\" nowrap>\n\n <!-- day -->\n <ion-col class=\"day ion-no-padding\">\n <mat-form-field [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n [class.mat-form-field-invalid]=\"formControl.touched && formControl.invalid\">\n\n <mat-label>{{placeholder}}</mat-label>\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"!mobile\"\n [formControl]=\"dayControl\"\n [textMask]=\"{mask: dayMask, keepCharPositions: true, placeholderChar: placeholderChar}\"\n [placeholder]=\"'COMMON.DATE_PLACEHOLDER'|translate\"\n (blur)=\"checkIfTouched()\"\n (keyup.arrowdown)=\"openDatePicker($event, datePicker)\"\n (keyup.escape)=\"preventEvent($event)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n [appAutofocus]=\"autofocus\">\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"mobile\"\n [formControl]=\"dayControl\"\n (click)=\"openDatePickerIfMobile($event, datePicker)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n readonly>\n\n <!-- Hide the final input -->\n <input matInput type=\"text\" [formControl]=\"formControl\"\n hidden\n [matDatepicker]=\"datePicker\"\n [matDatepickerFilter]=\"datePickerFilter\"\n (dateChange)=\"onDatePickerChange($event)\">\n\n <button type=\"button\" mat-icon-button tabindex=\"-1\" matSuffix\n (click)=\"openDatePicker($event, datePicker)\"\n [disabled]=\"formControl.disabled\">\n <div *ngIf=\"mobile; then iconDate; else iconDesktop\"></div>\n </button>\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"clear()\"\n [hidden]=\"formControl.disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n <mat-datepicker #datePicker\n [touchUi]=\"mobile\"\n [disabled]=\"formControl.disabled\"\n [startAt]=\"startDate\"></mat-datepicker>\n <div class=\"mat-form-field-subscript mat-form-field-subscript-wrapper\" >\n <!-- errors -->\n <ng-container [ngSwitch]=\"formControl.touched && formControl.errors|mapKeys|arrayFirst\">\n <mat-error *ngSwitchCase=\"'required'\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngSwitchCase=\"'validDate'\" translate>ERROR.FIELD_NOT_VALID_DATE_TIME</mat-error>\n <mat-error *ngSwitchCase=\"'dateIsAfter'\">{{'ERROR.FIELD_NOT_VALID_DATE_AFTER' | translate: formControl.errors.dateIsAfter }}</mat-error>\n <mat-error *ngSwitchCase=\"'dateIsBefore'\">{{'ERROR.FIELD_NOT_VALID_DATE_BEFORE' | translate: formControl.errors.dateIsBefore }}</mat-error>\n <mat-error *ngSwitchCase=\"'dateRange'\" translate>ERROR.FIELD_NOT_VALID_DATE_RANGE</mat-error>\n <mat-error *ngSwitchCase=\"'dateMaxDuration'\" translate>ERROR.FIELD_NOT_VALID_DATE_MAX_DURATION</mat-error>\n <mat-error *ngSwitchCase=\"'dateMinDuration'\" translate>ERROR.FIELD_NOT_VALID_DATE_MIN_DURATION</mat-error>\n <mat-error *ngSwitchCase=\"'msg'\">{{(formControl.errors.msg?.key || formControl.errors.msg) | translate: formControl.errors.msg?.params}}</mat-error>\n </ng-container>\n <ng-content select=\"mat-error\"></ng-content>\n\n <!-- mat hint -->\n <div class=\"mat-form-field-hint-wrapper\" [class.cdk-visually-hidden]=\"formControl.invalid\">\n <div class=\"mat-form-field-hint-spacer\"></div>\n <ng-content select=\"mat-hint\"></ng-content>\n </div>\n </div>\n\n </ion-col>\n\n <!-- hour -->\n <ion-col class=\"hour ion-no-padding\">\n <mat-form-field [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n [class.mat-form-field-invalid]=\"formControl.touched && (hourControl.invalid || formControl.invalid)\">\n <mat-label *ngIf=\"placeholder && floatLabel != 'never'\" translate>COMMON.TIME</mat-label>\n <input matInput #matInput type=\"text\"\n *ngIf=\"!mobile\"\n [formControl]=\"hourControl\"\n autocomplete=\"off\"\n min=\"0\" max=\"23\"\n [textMask]=\"{mask: hourMask, keepCharPositions: true, placeholderChar: placeholderChar, guide: true}\"\n [placeholder]=\"'COMMON.TIME_PLACEHOLDER'|translate\"\n [required]=\"required\"\n (keyup.arrowdown)=\"openTimePicker($event)\"\n (keyup.escape)=\"preventEvent($event)\"\n (blur)=\"checkIfTouched()\"\n [tabindex]=\"tabindex !== undefined ? tabindex+1 : undefined\">\n\n <input matInput #matInput type=\"text\"\n *ngIf=\"mobile\"\n [formControl]=\"hourControl\"\n (click)=\"openTimePickerIfMobile($event)\"\n readonly>\n\n <input matInput type=\"text\"\n [formControl]=\"hourControl\"\n hidden\n [ngxTimepicker]=\"timePicker\"\n [format]=\"24\">\n\n <button matSuffix type=\"button\" mat-icon-button\n tabindex=\"-1\"\n *ngIf=\"!compact && !mobile\"\n [disabled]=\"formControl.disabled\"\n (click)=\"openTimePicker($event)\" >\n <mat-icon>keyboard_arrow_down</mat-icon>\n </button>\n <button matSuffix type=\"button\" mat-icon-button\n tabindex=\"-1\"\n *ngIf=\"!compact && mobile\"\n [disabled]=\"formControl.disabled\"\n (click)=\"openTimePickerIfMobile($event)\">\n <mat-icon>access_time</mat-icon>\n </button>\n\n <ngx-material-timepicker #timePicker [@.disabled]=\"true\"\n (timeSet)=\"onTimePickerChange($event)\"\n [ESC]=\"!mobile\"\n [defaultTime]=\"'00:00'\"\n [cancelBtnTmpl]=\"timePickerCancelButton\"\n [confirmBtnTmpl]=\"timePickerOkButton\"\n [preventOverlayClick]=\"mobile\"\n [enableKeyboardInput]=\"false\"\n [disableAnimation]=\"true\">\n <!-- cancel button -->\n <ng-template #timePickerCancelButton>\n <ion-button fill=\"clear\" color=\"dark\">\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n </ng-template>\n\n <!-- confirm button -->\n <ng-template #timePickerOkButton>\n <ion-button fill=\"solid\" color=\"tertiary\">\n <ion-label translate>COMMON.BTN_VALIDATE</ion-label>\n </ion-button>\n </ng-template>\n\n </ngx-material-timepicker>\n </mat-form-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n\n</ng-template>\n\n<ng-template #iconDesktop>\n <mat-icon>keyboard_arrow_down</mat-icon>\n</ng-template>\n\n<ng-template #iconDate>\n <mat-icon>date_range</mat-icon>\n</ng-template>\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n",
|
|
5878
5863
|
providers: [
|
|
5879
|
-
DEFAULT_VALUE_ACCESSOR$
|
|
5864
|
+
DEFAULT_VALUE_ACCESSOR$1,
|
|
5880
5865
|
],
|
|
5881
5866
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
5882
5867
|
styles: [":host{display:inline-block;width:100%;position:relative;--ion-grid-column-padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}mat-form-field .datetime-md{padding:0!important}ion-row.no-wrap{flex-wrap:nowrap}ion-col.day{min-width:100px}ion-col.day .mat-form-field-subscript-wrapper{overflow:visible;right:-64px;width:calc(100% + 64px)}ion-col.day .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper{display:flex}ion-col.day .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper .mat-form-field-hint-spacer{flex:1 0 1em}ion-col.hour{min-width:55px;max-width:65px}ion-col.hour mat-form-field{width:100%}ion-col.hour mat-form-field input[type=text],ion-col.hour mat-form-field mat-label{text-align:left;min-width:50px}mat-form-field.mat-form-field-disabled ion-col.day{min-width:100px}.mat-form-field-outline ion-col.day{min-width:153px}.mat-form-field-outline ion-col.hour{min-width:100px;max-width:110px}.hour .mat-form-field-label{max-width:40px}.hour mat-form-field.mat-form-field-should-float .mat-form-field-placeholder{max-width:inherit}mat-error{text-align:right;width:100%}"]
|
|
@@ -5911,15 +5896,15 @@ MatDateTime.propDecorators = {
|
|
|
5911
5896
|
matInputs: [{ type: ViewChildren, args: ['matInput',] }]
|
|
5912
5897
|
};
|
|
5913
5898
|
|
|
5914
|
-
const DEFAULT_VALUE_ACCESSOR$
|
|
5899
|
+
const DEFAULT_VALUE_ACCESSOR$2 = {
|
|
5915
5900
|
provide: NG_VALUE_ACCESSOR,
|
|
5916
5901
|
useExisting: forwardRef(() => MatDateShort),
|
|
5917
5902
|
multi: true
|
|
5918
5903
|
};
|
|
5919
|
-
const DAY_MASK = [/\d/, /\d/, /\d/, /\d/];
|
|
5904
|
+
const DAY_MASK$1 = [/\d/, /\d/, /\d/, /\d/];
|
|
5920
5905
|
const noop$4 = () => {
|
|
5921
5906
|
};
|
|
5922
|
-
const ɵ0$
|
|
5907
|
+
const ɵ0$5 = noop$4;
|
|
5923
5908
|
class MatDateShort {
|
|
5924
5909
|
constructor(dateAdapter, translate, formBuilder, cd, keyboard, formGroupDir) {
|
|
5925
5910
|
this.dateAdapter = dateAdapter;
|
|
@@ -5932,7 +5917,7 @@ class MatDateShort {
|
|
|
5932
5917
|
this._onTouchedCallback = noop$4;
|
|
5933
5918
|
this.writing = true;
|
|
5934
5919
|
this.disabling = false;
|
|
5935
|
-
this.dayMask = DAY_MASK;
|
|
5920
|
+
this.dayMask = DAY_MASK$1;
|
|
5936
5921
|
this.disabled = false;
|
|
5937
5922
|
this.floatLabel = 'auto';
|
|
5938
5923
|
this.readonly = false;
|
|
@@ -6177,7 +6162,7 @@ MatDateShort.decorators = [
|
|
|
6177
6162
|
selector: 'mat-date-short-field',
|
|
6178
6163
|
template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly else writable\"\n [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n class=\"mat-form-field-disabled\">\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput hidden type=\"text\" readonly=\"true\" [formControl]=\"formControl\">\n <ion-text>{{formControl.value|dateFormat: {pattern: displayPattern} }}</ion-text>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n</mat-form-field>\n\n<ng-template #writable>\n <mat-form-field [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\">\n\n <mat-label>{{placeholder}}</mat-label>\n\n <div matPrefix><ng-content select=\"[matPrefix]\"></ng-content></div>\n\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"!mobile\"\n [formControl]=\"dayControl\"\n [textMask]=\"{mask: dayMask, keepCharPositions: true, placeholderChar: placeholderChar}\"\n [placeholder]=\"'COMMON.DATE_YEAR_PLACEHOLDER'|translate\"\n (blur)=\"checkIfTouched()\"\n (keyup.arrowdown)=\"openDatePicker($event, datePicker1)\"\n (keyup.escape)=\"preventEvent($event)\"\n (click)=\"matInput.select()\"\n [required]=\"required\"\n [tabindex]=\"tabindex\">\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"mobile\"\n [formControl]=\"dayControl\"\n (click)=\"openDatePickerIfMobile($event, datePicker1)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n readonly>\n\n <!-- Hide the final control -->\n <input matInput type=\"text\"\n [formControl]=\"formControl\"\n hidden\n [matDatepicker]=\"datePicker1\"\n (dateChange)=\"onDatePickerChange($event)\">\n\n\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n (click)=\"openDatePicker($event, datePicker1)\"\n [disabled]=\"formControl.disabled\">\n <div *ngIf=\"mobile; then iconDate; else iconDesktop\"></div>\n </button>\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"writeValue(null)\"\n [hidden]=\"formControl.disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n\n <mat-error *ngIf=\"formControl.touched && formControl.errors|mapKeys|arrayFirst; let errorKey\" [ngSwitch]=\"errorKey\">\n <span *ngSwitchCase=\"'required'\" translate>ERROR.FIELD_REQUIRED</span>\n <span *ngSwitchCase=\"'validDate'\" translate>ERROR.FIELD_NOT_VALID_DATE</span>\n <span *ngSwitchCase=\"'dateIsAfter'\">{{'ERROR.FIELD_NOT_VALID_DATE_AFTER' | translate: formControl.errors.dateIsAfter }}</span>\n <span *ngSwitchCase=\"'dateRange'\" translate>ERROR.FIELD_NOT_VALID_DATE_RANGE</span>\n <span *ngSwitchCase=\"'dateMaxDuration'\" translate>ERROR.FIELD_NOT_VALID_DATE_MAX_DURATION</span>\n <span *ngSwitchCase=\"'dateMinDuration'\" translate>ERROR.FIELD_NOT_VALID_DATE_MIN_DURATION</span>\n <span *ngSwitchCase=\"'msg'\">{{(formControl.errors.msg?.key || formControl.errors.msg) | translate: formControl.errors.msg?.params}}</span>\n </mat-error>\n <ng-content select=\"mat-error\"></ng-content>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n\n <mat-datepicker #datePicker1\n startView=\"multi-year\"\n [touchUi]=\"mobile\"\n [disabled]=\"formControl.disabled\"\n (yearSelected)=\"closeDatePicker($event, datePicker1)\"\n [startAt]=\"startDate\"></mat-datepicker>\n\n <ng-template #iconDesktop>\n <mat-icon>keyboard_arrow_down</mat-icon>\n </ng-template>\n\n <ng-template #iconDate>\n <mat-icon>date_range</mat-icon>\n </ng-template>\n\n</ng-template>\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n\n<ng-template #matSuffixTemplate>\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n",
|
|
6179
6164
|
providers: [
|
|
6180
|
-
DEFAULT_VALUE_ACCESSOR$
|
|
6165
|
+
DEFAULT_VALUE_ACCESSOR$2,
|
|
6181
6166
|
],
|
|
6182
6167
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
6183
6168
|
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%}"]
|
|
@@ -6246,16 +6231,16 @@ SharedMatDateTimeModule.decorators = [
|
|
|
6246
6231
|
},] }
|
|
6247
6232
|
];
|
|
6248
6233
|
|
|
6249
|
-
const DEFAULT_VALUE_ACCESSOR$
|
|
6234
|
+
const DEFAULT_VALUE_ACCESSOR$3 = {
|
|
6250
6235
|
provide: NG_VALUE_ACCESSOR,
|
|
6251
6236
|
useExisting: forwardRef(() => MatDuration),
|
|
6252
6237
|
multi: true
|
|
6253
6238
|
};
|
|
6254
6239
|
const HOUR_TIME_PATTERN = /[0-9]\d\d:[0-5]\d/;
|
|
6255
|
-
const HOUR_MASK = [/\d/, /\d/, /\d/, ':', /[0-5]/, /\d/];
|
|
6256
|
-
const noop$
|
|
6240
|
+
const HOUR_MASK$1 = [/\d/, /\d/, /\d/, ':', /[0-5]/, /\d/];
|
|
6241
|
+
const noop$5 = () => {
|
|
6257
6242
|
};
|
|
6258
|
-
const ɵ0$6 = noop$
|
|
6243
|
+
const ɵ0$6 = noop$5;
|
|
6259
6244
|
class MatDuration {
|
|
6260
6245
|
constructor(platform, dateAdapter, translate, formBuilder, cd, formGroupDir) {
|
|
6261
6246
|
this.dateAdapter = dateAdapter;
|
|
@@ -6264,11 +6249,11 @@ class MatDuration {
|
|
|
6264
6249
|
this.cd = cd;
|
|
6265
6250
|
this.formGroupDir = formGroupDir;
|
|
6266
6251
|
this._subscription = new Subscription();
|
|
6267
|
-
this._onChangeCallback = noop$
|
|
6268
|
-
this._onTouchedCallback = noop$
|
|
6252
|
+
this._onChangeCallback = noop$5;
|
|
6253
|
+
this._onTouchedCallback = noop$5;
|
|
6269
6254
|
this.writing = true;
|
|
6270
6255
|
this.disabling = false;
|
|
6271
|
-
this.hourMask = HOUR_MASK;
|
|
6256
|
+
this.hourMask = HOUR_MASK$1;
|
|
6272
6257
|
this.disabled = false;
|
|
6273
6258
|
this.floatLabel = 'auto';
|
|
6274
6259
|
this.readonly = false;
|
|
@@ -6448,7 +6433,7 @@ MatDuration.decorators = [
|
|
|
6448
6433
|
selector: 'mat-duration-field',
|
|
6449
6434
|
template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly else writable\"\n [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n class=\"mat-form-field-disabled\">\n <input matInput hidden type=\"text\" readonly=\"true\" [formControl]=\"formControl\">\n <ion-text>{{ formControl.value|duration }}</ion-text>\n</mat-form-field>\n\n<!-- writable -->\n<ng-template #writable>\n <mat-form-field [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n [class.mat-form-field-disabled]=\"formControl.disabled\"\n [class.mat-form-field-invalid]=\"formControl.touched && formControl.invalid\">\n <mat-label *ngIf=\"placeholder && floatLabel != 'never'\" translate>COMMON.TIME</mat-label>\n\n <div matPrefix><ng-content select=\"[matPrefix]\"></ng-content></div>\n\n <input matInput #matInput type=\"text\"\n autocomplete=\"off\"\n [formControl]=\"textControl\"\n [textMask]=\"{mask: hourMask, keepCharPositions: true, placeholderChar: placeholderChar, guide: true}\"\n [placeholder]=\"'COMMON.DURATION_PLACEHOLDER'|translate\"\n [required]=\"required\"\n (keydown.tab)=\"moveCaretToSeparator($event, true)\"\n (keydown.shift.tab)=\"moveCaretToSeparator($event, false)\"\n (keyup.escape)=\"preventEvent($event)\"\n (blur)=\"checkIfTouched()\"\n [tabindex]=\"tabindex !== undefined ? tabindex+1 : undefined\">\n\n\n <!-- errors -->\n <mat-error *ngIf=\"!formControl.hasError('required') && textControl.hasError('pattern')\" translate>ERROR.FIELD_NOT_VALID_PATTERN</mat-error>\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"formControl.hasError('min')\">\n {{(compact ? 'ERROR.FIELD_MIN_COMPACT' : 'ERROR.FIELD_MIN') | translate:formControl.errors.min }}</mat-error>\n <mat-error *ngIf=\"formControl.hasError('max')\">\n {{(compact ? 'ERROR.FIELD_MAX_COMPACT' : 'ERROR.FIELD_MAX') | translate:formControl.errors.max }}</mat-error>\n\n <ng-content select=\"mat-error\"></ng-content>\n </mat-form-field>\n</ng-template>\n\n",
|
|
6450
6435
|
providers: [
|
|
6451
|
-
DEFAULT_VALUE_ACCESSOR$
|
|
6436
|
+
DEFAULT_VALUE_ACCESSOR$3,
|
|
6452
6437
|
],
|
|
6453
6438
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
6454
6439
|
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%}"]
|
|
@@ -6506,22 +6491,22 @@ SharedMatDurationModule.decorators = [
|
|
|
6506
6491
|
},] }
|
|
6507
6492
|
];
|
|
6508
6493
|
|
|
6509
|
-
const DEFAULT_VALUE_ACCESSOR$
|
|
6494
|
+
const DEFAULT_VALUE_ACCESSOR$4 = {
|
|
6510
6495
|
provide: NG_VALUE_ACCESSOR,
|
|
6511
6496
|
useExisting: forwardRef(() => MatBooleanField),
|
|
6512
6497
|
multi: true
|
|
6513
6498
|
};
|
|
6514
|
-
const noop$
|
|
6499
|
+
const noop$6 = () => {
|
|
6515
6500
|
};
|
|
6516
|
-
const ɵ0$
|
|
6501
|
+
const ɵ0$7 = noop$6;
|
|
6517
6502
|
class MatBooleanField {
|
|
6518
6503
|
constructor(translate, formBuilder, cd, formGroupDir) {
|
|
6519
6504
|
this.translate = translate;
|
|
6520
6505
|
this.formBuilder = formBuilder;
|
|
6521
6506
|
this.cd = cd;
|
|
6522
6507
|
this.formGroupDir = formGroupDir;
|
|
6523
|
-
this._onChangeCallback = noop$
|
|
6524
|
-
this._onTouchedCallback = noop$
|
|
6508
|
+
this._onChangeCallback = noop$6;
|
|
6509
|
+
this._onTouchedCallback = noop$6;
|
|
6525
6510
|
this._writing = false;
|
|
6526
6511
|
this.showRadio = false;
|
|
6527
6512
|
this.disabled = false;
|
|
@@ -6684,7 +6669,7 @@ MatBooleanField.decorators = [
|
|
|
6684
6669
|
selector: 'mat-boolean-field',
|
|
6685
6670
|
template: "<mat-form-field *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n class=\"mat-form-field-disabled {{classList}}\">\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input matInput hidden type=\"text\" readonly\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\">\n <ion-text>{{(value == null ? 'COMMON.EMPTY_OPTION' : (value === true ? yesLabel : noLabel)) | translate }}</ion-text>\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n</mat-form-field>\n\n<ng-template #writable>\n <ng-container [ngSwitch]=\"style\">\n\n <!-- Radio -->\n <mat-form-field *ngSwitchCase=\"'radio'\"\n [floatLabel]=\"showRadio && (!floatLabel || floatLabel === 'auto') ? 'always': floatLabel\"\n [appearance]=\"appearance\"\n class=\"mat-boolean-field mat-boolean-field-radio {{classList}}\">\n <mat-label *ngIf=\"placeholder && floatLabel!=='never'\">\n {{placeholder}}\n <span [hidden]=\"showRadio\">({{yesLabel|translate}}/{{'COMMON.NO'|translate}})</span>\n </mat-label>\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input matInput #fakeInput type=\"text\" readonly=\"true\"\n [formControl]=\"formControl\"\n (focus)=\"_onFocusFakeInput($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showRadio\"\n [tabindex]=\"tabindex\">\n\n <!-- radio button -->\n <mat-radio-group [hidden]=\"!showRadio\"\n [formControl]=\"formControl\"\n (change)=\"onRadioValueChanged($event)\">\n <mat-radio-button #yesButton [value]=\"true\">\n <span>{{yesLabel|translate}}</span>\n </mat-radio-button> \n <mat-radio-button #noButton [value]=\"false\">\n <span>{{noLabel|translate}}</span>\n </mat-radio-button>\n </mat-radio-group>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n\n <!-- Checkbox -->\n <mat-form-field *ngSwitchCase=\"'checkbox'\"\n [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n class=\"mat-boolean-field mat-boolean-field-checkbox {{classList}}\">\n <mat-label *ngIf=\"placeholder && !showRadio\">\n {{placeholder}}\n </mat-label>\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input matInput #matInput\n [formControl]=\"formControl\"\n (focus)=\"_onFocusFakeInput($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showRadio\"\n [tabindex]=\"tabindex\">\n\n <ion-label> </ion-label>\n\n <!-- checkbox, when compact -->\n <mat-checkbox #checkboxButton\n [formControl]=\"formControl\"\n (change)=\"onCheckboxValueChanged($event)\"\n [indeterminate]=\"value===null\"\n [hidden]=\"!showRadio\"\n [tabindex]=\"tabindex\">\n </mat-checkbox>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n\n <!-- Buttons -->\n <mat-form-field *ngSwitchCase=\"'button'\"\n [floatLabel]=\"floatLabel === 'never' ? 'never' : 'always'\"\n [appearance]=\"appearance\"\n class=\"mat-boolean-field mat-boolean-field-button {{classList}}\">\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input matInput type=\"text\" hidden\n [formControl]=\"formControl\"\n [placeholder]=\"placeholder\"\n [required]=\"required\">\n <div class=\"mat-form-field-buttons\"\n [style.--buttons-col-count]=\"buttonsColCount\"\n *ngIf=\"!formControl.disabled; else disabledLabel\">\n <!-- yes -->\n <ion-button class=\"mat-form-field-button\"\n [tabindex]=\"_tabindex\"\n (click)=\"writeValue(true, $event)\"\n (keyup.enter)=\"writeValue(true, $event)\"\n [color]=\"_value == null ? 'tertiary' : (_value === true) ? 'accent' : 'light'\">\n <ion-icon *ngIf=\"showButtonIcons && yesIcon; let icon\" slot=\"start\" [name]=\"icon\"></ion-icon>\n {{yesLabel|translate}}\n </ion-button>\n\n <!-- No button -->\n <ion-button class=\"mat-form-field-button\"\n [tabindex]=\"_tabindex !== undefined ? (_tabindex + 1) : undefined\"\n (click)=\"writeValue(false, $event)\"\n (keyup.enter)=\"writeValue(false, $event)\"\n [color]=\"_value == null ? 'tertiary' : (_value === false) ? 'accent' : 'light'\">\n <ion-icon *ngIf=\"showButtonIcons && noIcon; let icon\" slot=\"start\" [name]=\"icon\"></ion-icon>\n {{noLabel|translate}}\n </ion-button>\n </div>\n <ng-template #disabledLabel>\n <ion-label><i translate>COMMON.EMPTY_OPTION</i></ion-label>\n </ng-template>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n\n </mat-form-field>\n </ng-container>\n\n</ng-template>\n\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n<ng-template #matSuffixTemplate>\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n",
|
|
6686
6671
|
providers: [
|
|
6687
|
-
DEFAULT_VALUE_ACCESSOR$
|
|
6672
|
+
DEFAULT_VALUE_ACCESSOR$4
|
|
6688
6673
|
],
|
|
6689
6674
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
6690
6675
|
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}"]
|
|
@@ -6931,7 +6916,7 @@ class MatNumpadDomService {
|
|
|
6931
6916
|
this.appRef.detachView(this.componentRef.hostView);
|
|
6932
6917
|
}
|
|
6933
6918
|
}
|
|
6934
|
-
MatNumpadDomService.ɵprov =
|
|
6919
|
+
MatNumpadDomService.ɵprov = ɵɵdefineInjectable({ factory: function MatNumpadDomService_Factory() { return new MatNumpadDomService(ɵɵinject(ComponentFactoryResolver), ɵɵinject(ApplicationRef), ɵɵinject(INJECTOR), ɵɵinject(DOCUMENT, 8)); }, token: MatNumpadDomService, providedIn: "root" });
|
|
6935
6920
|
MatNumpadDomService.decorators = [
|
|
6936
6921
|
{ type: Injectable, args: [{
|
|
6937
6922
|
providedIn: 'root'
|
|
@@ -7295,7 +7280,7 @@ SharedMatNumpadModule.decorators = [
|
|
|
7295
7280
|
},] }
|
|
7296
7281
|
];
|
|
7297
7282
|
|
|
7298
|
-
const DEFAULT_VALUE_ACCESSOR = {
|
|
7283
|
+
const DEFAULT_VALUE_ACCESSOR$5 = {
|
|
7299
7284
|
provide: NG_VALUE_ACCESSOR,
|
|
7300
7285
|
useExisting: forwardRef(() => MatSwipeField),
|
|
7301
7286
|
multi: true
|
|
@@ -7558,7 +7543,7 @@ MatSwipeField.decorators = [
|
|
|
7558
7543
|
{ type: Component, args: [{
|
|
7559
7544
|
selector: 'mat-swipe-field',
|
|
7560
7545
|
template: "<mat-form-field [floatLabel]=\"showSlides && (!floatLabel || floatLabel === 'auto') ? 'always': floatLabel\"\n [appearance]=\"appearance\"\n [class]=\"classList\"\n [class.mat-form-field-disabled]=\"disabled\">\n <mat-label *ngIf=\"placeholder && floatLabel!=='never'\">\n {{placeholder}}\n </mat-label>\n <input matInput #fakeInput type=\"text\"\n [formControl]=\"formControl\"\n [readonly]=\"true\"\n (focus)=\"_onFocusFakeInput($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showSlides\"\n [tabindex]=\"tabindex\">\n\n <div class=\"slides-container\" [class.hidden]=\"!showSlides\">\n <ion-slides #slides\n [options]=\"slidesOptions\"\n (ionSlidesDidLoad)=\"slidesLoaded()\"\n (ionSlideReachStart)=\"reachStart(true)\"\n (ionSlideReachEnd)=\"reachEnd(true)\"\n (ionSlideNextEnd)=\"reachStart(false)\"\n (ionSlidePrevEnd)=\"reachEnd(false)\"\n (ionSlideDidChange)=\"slideChanged()\"\n >\n <ion-slide *ngFor=\"let item of $items | async\">\n <ion-label>{{ displayWith(item) }}</ion-label>\n </ion-slide>\n\n </ion-slides>\n </div>\n\n <button #prevButton\n mat-icon-button\n type=\"button\"\n class=\"button-prev\"\n [hidden]=\"!showSlides\"\n [disabled]=\"previousDisabled\"\n (click)=\"previous()\">\n <mat-icon>chevron_left</mat-icon>\n </button>\n <button #nextButton\n mat-icon-button\n type=\"button\"\n class=\"button-next\"\n [hidden]=\"!showSlides\"\n [disabled]=\"nextDisabled\"\n (click)=\"next()\">\n <mat-icon>chevron_right</mat-icon>\n </button>\n\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"clearValue($event)\"\n [hidden]=\"disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"formControl.hasError('entity')\" translate>ERROR.FIELD_INVALID</mat-error>\n\n</mat-form-field>\n",
|
|
7561
|
-
providers: [DEFAULT_VALUE_ACCESSOR],
|
|
7546
|
+
providers: [DEFAULT_VALUE_ACCESSOR$5],
|
|
7562
7547
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
7563
7548
|
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}"]
|
|
7564
7549
|
},] }
|
|
@@ -7617,14 +7602,14 @@ SharedMatSwipeModule.decorators = [
|
|
|
7617
7602
|
},] }
|
|
7618
7603
|
];
|
|
7619
7604
|
|
|
7620
|
-
const noop$
|
|
7621
|
-
const ɵ0$
|
|
7605
|
+
const noop$7 = () => { };
|
|
7606
|
+
const ɵ0$8 = noop$7;
|
|
7622
7607
|
class MatChipsField {
|
|
7623
7608
|
constructor(cd, formGroupDir) {
|
|
7624
7609
|
this.cd = cd;
|
|
7625
7610
|
this.formGroupDir = formGroupDir;
|
|
7626
|
-
this._onChangeCallback = noop$
|
|
7627
|
-
this._onTouchedCallback = noop$
|
|
7611
|
+
this._onChangeCallback = noop$7;
|
|
7612
|
+
this._onTouchedCallback = noop$7;
|
|
7628
7613
|
this.logPrefix = '[mat-chips] ';
|
|
7629
7614
|
this.formControlName = null;
|
|
7630
7615
|
this.required = false;
|
|
@@ -8496,7 +8481,7 @@ class ProgressBarService {
|
|
|
8496
8481
|
}
|
|
8497
8482
|
}
|
|
8498
8483
|
}
|
|
8499
|
-
ProgressBarService.ɵprov =
|
|
8484
|
+
ProgressBarService.ɵprov = ɵɵdefineInjectable({ factory: function ProgressBarService_Factory() { return new ProgressBarService(); }, token: ProgressBarService, providedIn: "root" });
|
|
8500
8485
|
ProgressBarService.decorators = [
|
|
8501
8486
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
8502
8487
|
];
|
|
@@ -8540,7 +8525,7 @@ class AppGestureConfig extends HammerGestureConfig {
|
|
|
8540
8525
|
return mc;
|
|
8541
8526
|
}
|
|
8542
8527
|
}
|
|
8543
|
-
AppGestureConfig.ɵprov =
|
|
8528
|
+
AppGestureConfig.ɵprov = ɵɵdefineInjectable({ factory: function AppGestureConfig_Factory() { return new AppGestureConfig(); }, token: AppGestureConfig, providedIn: "root" });
|
|
8544
8529
|
AppGestureConfig.decorators = [
|
|
8545
8530
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
8546
8531
|
];
|
|
@@ -8781,7 +8766,7 @@ class MatPaginatorI18n extends MatPaginatorIntl {
|
|
|
8781
8766
|
this.previousPageLabel = this.translate.instant('COMMON.PAGINATOR.PREVIOUS_PAGE');
|
|
8782
8767
|
}
|
|
8783
8768
|
}
|
|
8784
|
-
MatPaginatorI18n.ɵprov =
|
|
8769
|
+
MatPaginatorI18n.ɵprov = ɵɵdefineInjectable({ factory: function MatPaginatorI18n_Factory() { return new MatPaginatorI18n(ɵɵinject(TranslateService)); }, token: MatPaginatorI18n, providedIn: "root" });
|
|
8785
8770
|
MatPaginatorI18n.decorators = [
|
|
8786
8771
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
8787
8772
|
];
|
|
@@ -8871,17 +8856,17 @@ function getColorContrast(color, bw) {
|
|
|
8871
8856
|
return rgbArrayToHex(rgb.map(v => 255 - v));
|
|
8872
8857
|
}
|
|
8873
8858
|
|
|
8874
|
-
const noop = () => {
|
|
8859
|
+
const noop$8 = () => {
|
|
8875
8860
|
};
|
|
8876
|
-
const ɵ0$
|
|
8861
|
+
const ɵ0$9 = noop$8;
|
|
8877
8862
|
class AppFormField {
|
|
8878
8863
|
constructor(translate, cd, injector, formGroupDir) {
|
|
8879
8864
|
this.translate = translate;
|
|
8880
8865
|
this.cd = cd;
|
|
8881
8866
|
this.injector = injector;
|
|
8882
8867
|
this.formGroupDir = formGroupDir;
|
|
8883
|
-
this._onChangeCallback = noop;
|
|
8884
|
-
this._onTouchedCallback = noop;
|
|
8868
|
+
this._onChangeCallback = noop$8;
|
|
8869
|
+
this._onTouchedCallback = noop$8;
|
|
8885
8870
|
this.readonly = false;
|
|
8886
8871
|
this.compact = false;
|
|
8887
8872
|
this.floatLabel = 'auto';
|
|
@@ -9071,7 +9056,8 @@ AppFormField.propDecorators = {
|
|
|
9071
9056
|
|
|
9072
9057
|
class StartableService {
|
|
9073
9058
|
constructor(prerequisiteService) {
|
|
9074
|
-
this.
|
|
9059
|
+
this.startSubject = new Subject();
|
|
9060
|
+
this.stopSubject = new Subject();
|
|
9075
9061
|
this._debug = false;
|
|
9076
9062
|
this._startByReadyFunction = true; // should start when calling ready() ?
|
|
9077
9063
|
this._data = null;
|
|
@@ -9094,7 +9080,7 @@ class StartableService {
|
|
|
9094
9080
|
this._data = data;
|
|
9095
9081
|
this._started = true;
|
|
9096
9082
|
this._startPromise = undefined;
|
|
9097
|
-
this.
|
|
9083
|
+
this.startSubject.next(this._data);
|
|
9098
9084
|
return this._data;
|
|
9099
9085
|
})
|
|
9100
9086
|
.catch(err => {
|
|
@@ -9108,17 +9094,18 @@ class StartableService {
|
|
|
9108
9094
|
stop() {
|
|
9109
9095
|
return __awaiter(this, void 0, void 0, function* () {
|
|
9110
9096
|
try {
|
|
9111
|
-
|
|
9112
|
-
this._subscription.unsubscribe();
|
|
9113
|
-
this._subscription = null;
|
|
9114
|
-
}
|
|
9097
|
+
this.unsubscribe();
|
|
9115
9098
|
yield this.ngOnStop();
|
|
9116
|
-
this._started = false;
|
|
9117
|
-
this._startPromise = undefined;
|
|
9118
9099
|
}
|
|
9119
9100
|
catch (err) {
|
|
9120
9101
|
console.error('Failed to stop a service: ' + (err && err.message || err), err);
|
|
9121
9102
|
}
|
|
9103
|
+
finally {
|
|
9104
|
+
this.stopSubject.next();
|
|
9105
|
+
this._data = null;
|
|
9106
|
+
this._started = false;
|
|
9107
|
+
this._startPromise = undefined;
|
|
9108
|
+
}
|
|
9122
9109
|
});
|
|
9123
9110
|
}
|
|
9124
9111
|
restart() {
|
|
@@ -9143,8 +9130,9 @@ class StartableService {
|
|
|
9143
9130
|
return this._startPromise;
|
|
9144
9131
|
if (this._startByReadyFunction)
|
|
9145
9132
|
return this.start();
|
|
9146
|
-
return
|
|
9147
|
-
.
|
|
9133
|
+
return this.startSubject
|
|
9134
|
+
.pipe(takeUntil(this.stopSubject))
|
|
9135
|
+
.toPromise();
|
|
9148
9136
|
}
|
|
9149
9137
|
registerSubscription(sub) {
|
|
9150
9138
|
this._subscription = this._subscription || new Subscription();
|
|
@@ -9153,9 +9141,14 @@ class StartableService {
|
|
|
9153
9141
|
unregisterSubscription(sub) {
|
|
9154
9142
|
this._subscription.remove(sub);
|
|
9155
9143
|
}
|
|
9144
|
+
unsubscribe() {
|
|
9145
|
+
var _a;
|
|
9146
|
+
(_a = this._subscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
|
|
9147
|
+
this._subscription = null;
|
|
9148
|
+
}
|
|
9156
9149
|
ngOnStop() {
|
|
9157
9150
|
return __awaiter(this, void 0, void 0, function* () {
|
|
9158
|
-
// Can be
|
|
9151
|
+
// Can be overwritten by subclasses
|
|
9159
9152
|
});
|
|
9160
9153
|
}
|
|
9161
9154
|
}
|
|
@@ -9317,14 +9310,14 @@ class AudioProvider extends StartableService {
|
|
|
9317
9310
|
});
|
|
9318
9311
|
}
|
|
9319
9312
|
}
|
|
9320
|
-
AudioProvider.ɵprov =
|
|
9313
|
+
AudioProvider.ɵprov = ɵɵdefineInjectable({ factory: function AudioProvider_Factory() { return new AudioProvider(ɵɵinject(Platform), ɵɵinject(NativeAudio, 8), ɵɵinject(Vibration, 8), ɵɵinject(AudioManagement$1, 8)); }, token: AudioProvider, providedIn: "root" });
|
|
9321
9314
|
AudioProvider.decorators = [
|
|
9322
9315
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
9323
9316
|
];
|
|
9324
9317
|
AudioProvider.ctorParameters = () => [
|
|
9325
9318
|
{ type: Platform },
|
|
9326
|
-
{ type: NativeAudio, decorators: [{ type: Optional }] },
|
|
9327
|
-
{ type: Vibration, decorators: [{ type: Optional }] },
|
|
9319
|
+
{ type: NativeAudio$1, decorators: [{ type: Optional }] },
|
|
9320
|
+
{ type: Vibration$1, decorators: [{ type: Optional }] },
|
|
9328
9321
|
{ type: AudioManagement, decorators: [{ type: Optional }] }
|
|
9329
9322
|
];
|
|
9330
9323
|
|
|
@@ -9409,7 +9402,7 @@ class Hotkeys {
|
|
|
9409
9402
|
});
|
|
9410
9403
|
}
|
|
9411
9404
|
}
|
|
9412
|
-
Hotkeys.ɵprov =
|
|
9405
|
+
Hotkeys.ɵprov = ɵɵdefineInjectable({ factory: function Hotkeys_Factory() { return new Hotkeys(ɵɵinject(EventManager), ɵɵinject(MatDialog), ɵɵinject(DOCUMENT), ɵɵinject(ModalController), ɵɵinject(PopoverController)); }, token: Hotkeys, providedIn: "root" });
|
|
9413
9406
|
Hotkeys.decorators = [
|
|
9414
9407
|
{ type: Injectable, args: [{
|
|
9415
9408
|
providedIn: 'root'
|
|
@@ -9623,7 +9616,7 @@ class ImagesUtils {
|
|
|
9623
9616
|
}
|
|
9624
9617
|
}
|
|
9625
9618
|
|
|
9626
|
-
const uuidv4
|
|
9619
|
+
const uuidv4 = uuidv4Imported;
|
|
9627
9620
|
class FileService {
|
|
9628
9621
|
constructor(platform,
|
|
9629
9622
|
//private transfer: FileTransfer,
|
|
@@ -9660,7 +9653,7 @@ class FileService {
|
|
|
9660
9653
|
const lastSlashIndex = fileUrl.lastIndexOf('/');
|
|
9661
9654
|
if (lastSlashIndex === -1)
|
|
9662
9655
|
throw new Error('Invalid URL: ' + fileUrl);
|
|
9663
|
-
const fileName = lastSlashIndex < (fileUrl.length - 1) && fileUrl.substring(lastSlashIndex + 1) || uuidv4
|
|
9656
|
+
const fileName = lastSlashIndex < (fileUrl.length - 1) && fileUrl.substring(lastSlashIndex + 1) || uuidv4();
|
|
9664
9657
|
// Download into the file system
|
|
9665
9658
|
if (outputType === 'fileUrl' && this.canUseFileSystem) {
|
|
9666
9659
|
console.warn(`WARN: [file] Downloading image {${fileUrl}} in local filesystem...`);
|
|
@@ -9716,7 +9709,7 @@ class FileService {
|
|
|
9716
9709
|
this._started = true;
|
|
9717
9710
|
}
|
|
9718
9711
|
}
|
|
9719
|
-
FileService.ɵprov =
|
|
9712
|
+
FileService.ɵprov = ɵɵdefineInjectable({ factory: function FileService_Factory() { return new FileService(ɵɵinject(Platform), ɵɵinject(HttpClient), ɵɵinject(ENVIRONMENT)); }, token: FileService, providedIn: "root" });
|
|
9720
9713
|
FileService.decorators = [
|
|
9721
9714
|
{ type: Injectable, args: [{
|
|
9722
9715
|
providedIn: 'root',
|
|
@@ -9882,7 +9875,7 @@ class Base58 {
|
|
|
9882
9875
|
Base58.alphabet = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
|
|
9883
9876
|
|
|
9884
9877
|
const scrypt = require('scrypt-async');
|
|
9885
|
-
const sha256
|
|
9878
|
+
const sha256 = require('hash.js/lib/hash/sha/256');
|
|
9886
9879
|
const sha512 = require('hash.js/lib/hash/sha/512');
|
|
9887
9880
|
const nacl = {
|
|
9888
9881
|
sign,
|
|
@@ -9986,7 +9979,7 @@ class CryptoService {
|
|
|
9986
9979
|
* Hash (using SHA256) a message
|
|
9987
9980
|
*/
|
|
9988
9981
|
sha256(message) {
|
|
9989
|
-
return sha256
|
|
9982
|
+
return sha256().update(message).digest('hex');
|
|
9990
9983
|
}
|
|
9991
9984
|
/**
|
|
9992
9985
|
* Hash (using SHA512) a message
|
|
@@ -9999,7 +9992,7 @@ class CryptoService {
|
|
|
9999
9992
|
return nacl.util.encodeBase64(m);
|
|
10000
9993
|
}
|
|
10001
9994
|
}
|
|
10002
|
-
CryptoService.ɵprov =
|
|
9995
|
+
CryptoService.ɵprov = ɵɵdefineInjectable({ factory: function CryptoService_Factory() { return new CryptoService(); }, token: CryptoService, providedIn: "root" });
|
|
10003
9996
|
CryptoService.decorators = [
|
|
10004
9997
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
10005
9998
|
];
|
|
@@ -10761,7 +10754,7 @@ SelectPeerModal.propDecorators = {
|
|
|
10761
10754
|
onRefresh: [{ type: Input }]
|
|
10762
10755
|
};
|
|
10763
10756
|
|
|
10764
|
-
const moment$
|
|
10757
|
+
const moment$3 = momentImported;
|
|
10765
10758
|
const SETTINGS_STORAGE_KEY = 'settings';
|
|
10766
10759
|
const SETTINGS_TRANSIENT_PROPERTIES = ['mobile', 'touchUi' /*deprecated*/];
|
|
10767
10760
|
// fixme: this constant points to static environment
|
|
@@ -11004,11 +10997,11 @@ class LocalSettingsService extends StartableService {
|
|
|
11004
10997
|
if (!feature) {
|
|
11005
10998
|
feature = {
|
|
11006
10999
|
name: featureName.toLowerCase(),
|
|
11007
|
-
lastSyncDate: moment$
|
|
11000
|
+
lastSyncDate: moment$3().toISOString()
|
|
11008
11001
|
};
|
|
11009
11002
|
}
|
|
11010
11003
|
else {
|
|
11011
|
-
feature.lastSyncDate = moment$
|
|
11004
|
+
feature.lastSyncDate = moment$3().toISOString();
|
|
11012
11005
|
}
|
|
11013
11006
|
this.saveOfflineFeature(feature);
|
|
11014
11007
|
}
|
|
@@ -11169,7 +11162,7 @@ class LocalSettingsService extends StartableService {
|
|
|
11169
11162
|
if (!page || !page.title || !page.path)
|
|
11170
11163
|
throw Error('Missing required argument \'page\', \'page.path\' or \'page.title\'');
|
|
11171
11164
|
// Set time
|
|
11172
|
-
page.time = page.time || moment$
|
|
11165
|
+
page.time = page.time || moment$3();
|
|
11173
11166
|
// Clean the title (remove <small> tags)
|
|
11174
11167
|
if (!opts || opts.removeTitleSmallTag !== false) {
|
|
11175
11168
|
const tagIndex = page.title.indexOf('</small>');
|
|
@@ -11185,7 +11178,7 @@ class LocalSettingsService extends StartableService {
|
|
|
11185
11178
|
return page;
|
|
11186
11179
|
}
|
|
11187
11180
|
}
|
|
11188
|
-
LocalSettingsService.ɵprov =
|
|
11181
|
+
LocalSettingsService.ɵprov = ɵɵdefineInjectable({ factory: function LocalSettingsService_Factory() { return new LocalSettingsService(ɵɵinject(TranslateService), ɵɵinject(Platform), ɵɵinject(Storage), ɵɵinject(ENVIRONMENT), ɵɵinject(APP_LOCAL_SETTINGS, 8), ɵɵinject(APP_LOCAL_SETTINGS_OPTIONS, 8)); }, token: LocalSettingsService, providedIn: "root" });
|
|
11189
11182
|
LocalSettingsService.decorators = [
|
|
11190
11183
|
{ type: Injectable, args: [{
|
|
11191
11184
|
providedIn: 'root'
|
|
@@ -11361,7 +11354,7 @@ class NetworkService extends StartableService {
|
|
|
11361
11354
|
this.splashScreen = splashScreen;
|
|
11362
11355
|
this.translate = translate;
|
|
11363
11356
|
this.toastController = toastController;
|
|
11364
|
-
this.onPeerChanges = this.
|
|
11357
|
+
this.onPeerChanges = this.startSubject.pipe(map(peer => peer && peer.url), filter(isNotNilOrBlank), distinctUntilChanged());
|
|
11365
11358
|
this.onNetworkStatusChanges = new BehaviorSubject(null);
|
|
11366
11359
|
this.onResetNetworkCache = new EventEmitter(true);
|
|
11367
11360
|
this._listeners = {};
|
|
@@ -11375,7 +11368,7 @@ class NetworkService extends StartableService {
|
|
|
11375
11368
|
this._timerRefreshCondition = () => true; // Always check
|
|
11376
11369
|
}
|
|
11377
11370
|
this.resetData();
|
|
11378
|
-
this.
|
|
11371
|
+
this.startSubject.subscribe(() => this.ngOnAfterStart());
|
|
11379
11372
|
// For DEV only
|
|
11380
11373
|
this._debug = !environment.production;
|
|
11381
11374
|
}
|
|
@@ -11407,7 +11400,7 @@ class NetworkService extends StartableService {
|
|
|
11407
11400
|
on(eventType, callback) {
|
|
11408
11401
|
switch (eventType) {
|
|
11409
11402
|
case 'start':
|
|
11410
|
-
return this.
|
|
11403
|
+
return this.startSubject.subscribe(() => callback());
|
|
11411
11404
|
case 'peerChanged':
|
|
11412
11405
|
return this.onPeerChanges.subscribe(() => callback());
|
|
11413
11406
|
case 'statusChanged':
|
|
@@ -11587,11 +11580,11 @@ class NetworkService extends StartableService {
|
|
|
11587
11580
|
}
|
|
11588
11581
|
});
|
|
11589
11582
|
}
|
|
11590
|
-
getAppVersion(peer, opts) {
|
|
11583
|
+
getAppVersion(peer, opts = { nocache: true }) {
|
|
11591
11584
|
return __awaiter(this, void 0, void 0, function* () {
|
|
11592
11585
|
try {
|
|
11593
11586
|
let path = this.computePeerPath(peer, 'version.appup');
|
|
11594
|
-
if (opts
|
|
11587
|
+
if (opts.nocache) {
|
|
11595
11588
|
path += '?t=' + Date.now();
|
|
11596
11589
|
}
|
|
11597
11590
|
const appVersion = yield this.getText(path, opts);
|
|
@@ -11902,7 +11895,7 @@ class NetworkService extends StartableService {
|
|
|
11902
11895
|
});
|
|
11903
11896
|
}
|
|
11904
11897
|
}
|
|
11905
|
-
NetworkService.ɵprov =
|
|
11898
|
+
NetworkService.ɵprov = ɵɵdefineInjectable({ factory: function NetworkService_Factory() { return new NetworkService(ɵɵinject(DOCUMENT), ɵɵinject(Platform), ɵɵinject(ModalController), ɵɵinject(CryptoService), ɵɵinject(Storage), ɵɵinject(LocalSettingsService), ɵɵinject(CacheService), ɵɵinject(HttpClient), ɵɵinject(ENVIRONMENT), ɵɵinject(Network, 8), ɵɵinject(SplashScreen, 8), ɵɵinject(TranslateService, 8), ɵɵinject(ToastController, 8)); }, token: NetworkService, providedIn: "root" });
|
|
11906
11899
|
NetworkService.decorators = [
|
|
11907
11900
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
11908
11901
|
];
|
|
@@ -11913,11 +11906,11 @@ NetworkService.ctorParameters = () => [
|
|
|
11913
11906
|
{ type: CryptoService },
|
|
11914
11907
|
{ type: Storage },
|
|
11915
11908
|
{ type: LocalSettingsService },
|
|
11916
|
-
{ type: CacheService },
|
|
11909
|
+
{ type: CacheService$1 },
|
|
11917
11910
|
{ type: HttpClient },
|
|
11918
11911
|
{ type: undefined, decorators: [{ type: Inject, args: [ENVIRONMENT,] }] },
|
|
11919
|
-
{ type: Network, decorators: [{ type: Optional }] },
|
|
11920
|
-
{ type: SplashScreen, decorators: [{ type: Optional }] },
|
|
11912
|
+
{ type: Network$1, decorators: [{ type: Optional }] },
|
|
11913
|
+
{ type: SplashScreen$1, decorators: [{ type: Optional }] },
|
|
11921
11914
|
{ type: TranslateService, decorators: [{ type: Optional }] },
|
|
11922
11915
|
{ type: ToastController, decorators: [{ type: Optional }] }
|
|
11923
11916
|
];
|
|
@@ -12848,7 +12841,7 @@ class EntitiesStorage extends StartableService {
|
|
|
12848
12841
|
}
|
|
12849
12842
|
EntitiesStorage.TRASH_PREFIX = 'Trash#';
|
|
12850
12843
|
EntitiesStorage.REMOTE_PREFIX = 'Remote#';
|
|
12851
|
-
EntitiesStorage.ɵprov =
|
|
12844
|
+
EntitiesStorage.ɵprov = ɵɵdefineInjectable({ factory: function EntitiesStorage_Factory() { return new EntitiesStorage(ɵɵinject(Platform), ɵɵinject(ProgressBarService), ɵɵinject(Storage), ɵɵinject(ENVIRONMENT), ɵɵinject(APP_LOCAL_STORAGE_TYPE_POLICIES, 8)); }, token: EntitiesStorage, providedIn: "root" });
|
|
12852
12845
|
EntitiesStorage.decorators = [
|
|
12853
12846
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
12854
12847
|
];
|
|
@@ -12985,10 +12978,10 @@ function referentialToString(obj, properties) {
|
|
|
12985
12978
|
function referentialsToString(values, properties, separator) {
|
|
12986
12979
|
return (values || []).map(v => referentialToString(v, properties)).join(separator || ', ');
|
|
12987
12980
|
}
|
|
12988
|
-
const ɵ0$
|
|
12981
|
+
const ɵ0$a = StatusIds.ENABLE, ɵ1 = StatusIds.DISABLE, ɵ2 = StatusIds.TEMPORARY;
|
|
12989
12982
|
const StatusList = Object.freeze([
|
|
12990
12983
|
{
|
|
12991
|
-
id: ɵ0$
|
|
12984
|
+
id: ɵ0$a,
|
|
12992
12985
|
icon: 'checkmark',
|
|
12993
12986
|
label: 'REFERENTIAL.STATUS_ENUM.ENABLE'
|
|
12994
12987
|
},
|
|
@@ -13263,7 +13256,7 @@ function accountToString(data) {
|
|
|
13263
13256
|
(data.lastName || '')) || '';
|
|
13264
13257
|
}
|
|
13265
13258
|
|
|
13266
|
-
const uuidv4 = uuidv4Imported;
|
|
13259
|
+
const uuidv4$1 = uuidv4Imported;
|
|
13267
13260
|
const _global = typeof global !== 'undefined' ? global : (typeof window !== 'undefined' ? window : {});
|
|
13268
13261
|
const NativeWebSocket = _global.WebSocket || _global.MozWebSocket;
|
|
13269
13262
|
/**
|
|
@@ -13307,7 +13300,7 @@ function createTrackerLink(opts) {
|
|
|
13307
13300
|
// Skip if not tracked
|
|
13308
13301
|
if (!context || !context.tracked)
|
|
13309
13302
|
return forward(operation);
|
|
13310
|
-
const id = context.serializationKey || uuidv4();
|
|
13303
|
+
const id = context.serializationKey || uuidv4$1();
|
|
13311
13304
|
console.debug(`[apollo-tracker-link] Watching tracked query {${operation.operationName}#${id}}`);
|
|
13312
13305
|
// Clean context, before calling JSON.stringify (remove unused attributes)
|
|
13313
13306
|
const cleanContext = Object.assign(Object.assign({}, context), { optimisticResponse: null, cache: null });
|
|
@@ -14047,7 +14040,7 @@ class GraphqlService extends StartableService {
|
|
|
14047
14040
|
return undefined;
|
|
14048
14041
|
}
|
|
14049
14042
|
}
|
|
14050
|
-
GraphqlService.ɵprov =
|
|
14043
|
+
GraphqlService.ɵprov = ɵɵdefineInjectable({ factory: function GraphqlService_Factory() { return new GraphqlService(ɵɵinject(Platform), ɵɵinject(Apollo), ɵɵinject(HttpLink), ɵɵinject(NetworkService), ɵɵinject(Storage), ɵɵinject(CryptoService), ɵɵinject(ENVIRONMENT), ɵɵinject(APP_GRAPHQL_TYPE_POLICIES, 8)); }, token: GraphqlService, providedIn: "root" });
|
|
14051
14044
|
GraphqlService.decorators = [
|
|
14052
14045
|
{ type: Injectable, args: [{
|
|
14053
14046
|
providedIn: 'root'
|
|
@@ -14064,7 +14057,7 @@ GraphqlService.ctorParameters = () => [
|
|
|
14064
14057
|
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [APP_GRAPHQL_TYPE_POLICIES,] }] }
|
|
14065
14058
|
];
|
|
14066
14059
|
|
|
14067
|
-
const sha256 = require('hash.js/lib/hash/sha/256');
|
|
14060
|
+
const sha256$1 = require('hash.js/lib/hash/sha/256');
|
|
14068
14061
|
class BaseGraphqlServiceOptions {
|
|
14069
14062
|
}
|
|
14070
14063
|
// eslint-disable-next-line @angular-eslint/directive-class-suffix
|
|
@@ -14215,8 +14208,8 @@ class BaseGraphqlService extends StartableService {
|
|
|
14215
14208
|
}
|
|
14216
14209
|
/* -- protected methods -- */
|
|
14217
14210
|
computeMutableWatchQueryId(opts) {
|
|
14218
|
-
const queryName = opts.queryName || sha256().update(JSON.stringify(opts.query)).digest('hex').substring(0, 8);
|
|
14219
|
-
const variablesKey = opts.variables && sha256().update(JSON.stringify(opts.variables)).digest('hex').substring(0, 8) || '';
|
|
14211
|
+
const queryName = opts.queryName || sha256$1().update(JSON.stringify(opts.query)).digest('hex').substring(0, 8);
|
|
14212
|
+
const variablesKey = opts.variables && sha256$1().update(JSON.stringify(opts.variables)).digest('hex').substring(0, 8) || '';
|
|
14220
14213
|
return [queryName, opts.arrayFieldName, variablesKey].join('|');
|
|
14221
14214
|
}
|
|
14222
14215
|
findMutableWatchQueries(opts) {
|
|
@@ -14286,7 +14279,7 @@ const DEFAULT_AVATAR_IMAGE = 'assets/img/person.png';
|
|
|
14286
14279
|
/* ------------------------------------
|
|
14287
14280
|
* GraphQL queries
|
|
14288
14281
|
* ------------------------------------*/
|
|
14289
|
-
const Fragments
|
|
14282
|
+
const Fragments = {
|
|
14290
14283
|
account: gql `
|
|
14291
14284
|
fragment AccountFragment on AccountVO {
|
|
14292
14285
|
id
|
|
@@ -14321,14 +14314,14 @@ const Fragments$1 = {
|
|
|
14321
14314
|
}`
|
|
14322
14315
|
};
|
|
14323
14316
|
// Load account query
|
|
14324
|
-
const LoadQuery
|
|
14317
|
+
const LoadQuery = gql `
|
|
14325
14318
|
query Account {
|
|
14326
14319
|
data: account {
|
|
14327
14320
|
...AccountFragment
|
|
14328
14321
|
}
|
|
14329
14322
|
}
|
|
14330
|
-
${Fragments
|
|
14331
|
-
${Fragments
|
|
14323
|
+
${Fragments.account}
|
|
14324
|
+
${Fragments.settings}
|
|
14332
14325
|
`;
|
|
14333
14326
|
// Check email query
|
|
14334
14327
|
const IsEmailExistsQuery = gql `
|
|
@@ -14343,21 +14336,21 @@ const AccountMutations = {
|
|
|
14343
14336
|
...AccountFragment
|
|
14344
14337
|
}
|
|
14345
14338
|
}
|
|
14346
|
-
${Fragments
|
|
14347
|
-
${Fragments
|
|
14339
|
+
${Fragments.account}
|
|
14340
|
+
${Fragments.settings}`,
|
|
14348
14341
|
create: gql `mutation CreateAccount($data:AccountVOInput){
|
|
14349
14342
|
data: createAccount(account: $data){
|
|
14350
14343
|
...AccountFragment
|
|
14351
14344
|
}
|
|
14352
14345
|
}
|
|
14353
|
-
${Fragments
|
|
14354
|
-
${Fragments
|
|
14346
|
+
${Fragments.account}
|
|
14347
|
+
${Fragments.settings}`,
|
|
14355
14348
|
saveSettings: gql `mutation SaveSettings($data:UserSettingsVOInput){
|
|
14356
14349
|
data: saveSettings(settings: $data){
|
|
14357
14350
|
...UserSettingsFragment
|
|
14358
14351
|
}
|
|
14359
14352
|
}
|
|
14360
|
-
${Fragments
|
|
14353
|
+
${Fragments.settings}`
|
|
14361
14354
|
};
|
|
14362
14355
|
// Sent confirmation email
|
|
14363
14356
|
const SendConfirmEmailMutation = gql `
|
|
@@ -14482,7 +14475,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
14482
14475
|
firstNotNilPromise(this._tokenType$)
|
|
14483
14476
|
]);
|
|
14484
14477
|
// Listen graphql start (or restart)
|
|
14485
|
-
this.registerSubscription(this.graphql.
|
|
14478
|
+
this.registerSubscription(this.graphql.stopSubject.subscribe(() => {
|
|
14486
14479
|
if (this.started && this.isLogin()) {
|
|
14487
14480
|
console.debug('[account] Restarting, to retry to authenticate...');
|
|
14488
14481
|
this.restart();
|
|
@@ -14868,7 +14861,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
14868
14861
|
// Load remotely
|
|
14869
14862
|
else {
|
|
14870
14863
|
const { data } = yield this.graphql.query({
|
|
14871
|
-
query: LoadQuery
|
|
14864
|
+
query: LoadQuery,
|
|
14872
14865
|
error: { code: ErrorCodes.LOAD_ACCOUNT_ERROR, message: 'ERROR.LOAD_ACCOUNT_ERROR' },
|
|
14873
14866
|
fetchPolicy: opts && opts.fetchPolicy || 'no-cache' || undefined
|
|
14874
14867
|
});
|
|
@@ -15391,7 +15384,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
15391
15384
|
return Toasts.show(this.toastController, this.translate, opts);
|
|
15392
15385
|
}
|
|
15393
15386
|
}
|
|
15394
|
-
AccountService.ɵprov =
|
|
15387
|
+
AccountService.ɵprov = ɵɵdefineInjectable({ factory: function AccountService_Factory() { return new AccountService(ɵɵinject(CryptoService), ɵɵinject(NetworkService), ɵɵinject(GraphqlService), ɵɵinject(LocalSettingsService), ɵɵinject(Storage), ɵɵinject(FileService), ɵɵinject(TranslateService, 8), ɵɵinject(ToastController, 8), ɵɵinject(ENVIRONMENT)); }, token: AccountService, providedIn: "root" });
|
|
15395
15388
|
AccountService.decorators = [
|
|
15396
15389
|
{ type: Injectable, args: [{ providedIn: 'root', deps: [ENVIRONMENT] },] }
|
|
15397
15390
|
];
|
|
@@ -15659,7 +15652,7 @@ const CONFIGURATION_STORAGE_KEY = 'configuration';
|
|
|
15659
15652
|
/* ------------------------------------
|
|
15660
15653
|
* GraphQL queries
|
|
15661
15654
|
* ------------------------------------*/
|
|
15662
|
-
const Fragments = {
|
|
15655
|
+
const Fragments$1 = {
|
|
15663
15656
|
config: gql `
|
|
15664
15657
|
fragment ConfigFragment on ConfigurationVO {
|
|
15665
15658
|
id
|
|
@@ -15686,13 +15679,13 @@ const Fragments = {
|
|
|
15686
15679
|
}
|
|
15687
15680
|
`
|
|
15688
15681
|
};
|
|
15689
|
-
const LoadQuery = gql `
|
|
15682
|
+
const LoadQuery$1 = gql `
|
|
15690
15683
|
query Configuration{
|
|
15691
15684
|
data: configuration{
|
|
15692
15685
|
...ConfigFragment
|
|
15693
15686
|
}
|
|
15694
15687
|
}
|
|
15695
|
-
${Fragments.config}
|
|
15688
|
+
${Fragments$1.config}
|
|
15696
15689
|
`;
|
|
15697
15690
|
// Save (create or update) account mutation
|
|
15698
15691
|
const SaveMutation = gql `
|
|
@@ -15701,7 +15694,7 @@ const SaveMutation = gql `
|
|
|
15701
15694
|
...ConfigFragment
|
|
15702
15695
|
}
|
|
15703
15696
|
}
|
|
15704
|
-
${Fragments.config}
|
|
15697
|
+
${Fragments$1.config}
|
|
15705
15698
|
`;
|
|
15706
15699
|
const ClearCache = gql `
|
|
15707
15700
|
query ClearCache($name: String) {
|
|
@@ -15744,7 +15737,7 @@ class ConfigService extends BaseGraphqlService {
|
|
|
15744
15737
|
const data = yield this.loadOrRestoreLocally();
|
|
15745
15738
|
this.$data.next(data);
|
|
15746
15739
|
// Restart if graphql service restart
|
|
15747
|
-
this.registerSubscription(this.graphql.
|
|
15740
|
+
this.registerSubscription(this.graphql.stopSubject.subscribe(() => this.restart()));
|
|
15748
15741
|
return data;
|
|
15749
15742
|
});
|
|
15750
15743
|
}
|
|
@@ -15752,7 +15745,7 @@ class ConfigService extends BaseGraphqlService {
|
|
|
15752
15745
|
return __awaiter(this, void 0, void 0, function* () {
|
|
15753
15746
|
const now = Date.now();
|
|
15754
15747
|
console.debug('[config] Loading Pod configuration...');
|
|
15755
|
-
const query = opts && opts.query || LoadQuery;
|
|
15748
|
+
const query = opts && opts.query || LoadQuery$1;
|
|
15756
15749
|
const variables = opts && opts.variables || undefined;
|
|
15757
15750
|
const res = yield this.graphql.query({
|
|
15758
15751
|
query,
|
|
@@ -15991,7 +15984,7 @@ class ConfigService extends BaseGraphqlService {
|
|
|
15991
15984
|
});
|
|
15992
15985
|
}
|
|
15993
15986
|
}
|
|
15994
|
-
ConfigService.ɵprov =
|
|
15987
|
+
ConfigService.ɵprov = ɵɵdefineInjectable({ factory: function ConfigService_Factory() { return new ConfigService(ɵɵinject(Platform), ɵɵinject(GraphqlService), ɵɵinject(Storage), ɵɵinject(NetworkService), ɵɵinject(FileService), ɵɵinject(ToastController), ɵɵinject(TranslateService), ɵɵinject(AccountService), ɵɵinject(ENVIRONMENT), ɵɵinject(APP_CONFIG_OPTIONS, 8)); }, token: ConfigService, providedIn: "root" });
|
|
15995
15988
|
ConfigService.decorators = [
|
|
15996
15989
|
{ type: Injectable, args: [{
|
|
15997
15990
|
providedIn: 'root',
|
|
@@ -16237,7 +16230,7 @@ class UriUtils {
|
|
|
16237
16230
|
}
|
|
16238
16231
|
}
|
|
16239
16232
|
|
|
16240
|
-
const moment$
|
|
16233
|
+
const moment$4 = momentImported;
|
|
16241
16234
|
const AndroidOsEnvironment = Object.freeze({
|
|
16242
16235
|
DIRECTORY_DOWNLOADS: 'Download',
|
|
16243
16236
|
DIRECTORY_DOWNLOADS_OLD: 'Downloads',
|
|
@@ -16500,16 +16493,16 @@ class PlatformService extends StartableService {
|
|
|
16500
16493
|
}
|
|
16501
16494
|
// config moment lib
|
|
16502
16495
|
try {
|
|
16503
|
-
moment$
|
|
16496
|
+
moment$4.locale(event.lang);
|
|
16504
16497
|
console.debug('[platform] Use locale {' + event.lang + '}');
|
|
16505
16498
|
}
|
|
16506
16499
|
// If error, fallback to en
|
|
16507
16500
|
catch (err) {
|
|
16508
|
-
moment$
|
|
16501
|
+
moment$4.locale('en');
|
|
16509
16502
|
console.warn('[platform] Unknown local for moment lib. Using default [en]');
|
|
16510
16503
|
}
|
|
16511
16504
|
// Config date adapter
|
|
16512
|
-
this.dateAdapter.setLocale(moment$
|
|
16505
|
+
this.dateAdapter.setLocale(moment$4.locale());
|
|
16513
16506
|
}
|
|
16514
16507
|
});
|
|
16515
16508
|
this.settings.onChange.subscribe(data => {
|
|
@@ -16709,7 +16702,7 @@ class PlatformService extends StartableService {
|
|
|
16709
16702
|
});
|
|
16710
16703
|
}
|
|
16711
16704
|
}
|
|
16712
|
-
PlatformService.ɵprov =
|
|
16705
|
+
PlatformService.ɵprov = ɵɵdefineInjectable({ factory: function PlatformService_Factory() { return new PlatformService(ɵɵinject(Platform), ɵɵinject(Platform$1), ɵɵinject(ToastController), ɵɵinject(TranslateService), ɵɵinject(MomentDateAdapter), ɵɵinject(EntitiesStorage), ɵɵinject(LocalSettingsService), ɵɵinject(NetworkService), ɵɵinject(AccountService), ɵɵinject(ConfigService), ɵɵinject(CacheService), ɵɵinject(Storage), ɵɵinject(AudioProvider), ɵɵinject(ENVIRONMENT), ɵɵinject(StatusBar, 8), ɵɵinject(Keyboard$1, 8), ɵɵinject(SplashScreen, 8), ɵɵinject(InAppBrowser, 8), ɵɵinject(Downloader, 8)); }, token: PlatformService, providedIn: "root" });
|
|
16713
16706
|
PlatformService.decorators = [
|
|
16714
16707
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
16715
16708
|
];
|
|
@@ -16724,15 +16717,15 @@ PlatformService.ctorParameters = () => [
|
|
|
16724
16717
|
{ type: NetworkService },
|
|
16725
16718
|
{ type: AccountService },
|
|
16726
16719
|
{ type: ConfigService },
|
|
16727
|
-
{ type: CacheService },
|
|
16720
|
+
{ type: CacheService$1 },
|
|
16728
16721
|
{ type: Storage },
|
|
16729
16722
|
{ type: AudioProvider },
|
|
16730
16723
|
{ type: undefined, decorators: [{ type: Inject, args: [ENVIRONMENT,] }] },
|
|
16731
|
-
{ type: StatusBar, decorators: [{ type: Optional }] },
|
|
16724
|
+
{ type: StatusBar$1, decorators: [{ type: Optional }] },
|
|
16732
16725
|
{ type: Keyboard, decorators: [{ type: Optional }] },
|
|
16733
|
-
{ type: SplashScreen, decorators: [{ type: Optional }] },
|
|
16734
|
-
{ type: InAppBrowser, decorators: [{ type: Optional }] },
|
|
16735
|
-
{ type: Downloader, decorators: [{ type: Optional }] }
|
|
16726
|
+
{ type: SplashScreen$1, decorators: [{ type: Optional }] },
|
|
16727
|
+
{ type: InAppBrowser$1, decorators: [{ type: Optional }] },
|
|
16728
|
+
{ type: Downloader$1, decorators: [{ type: Optional }] }
|
|
16736
16729
|
];
|
|
16737
16730
|
|
|
16738
16731
|
class AppHelpModal {
|
|
@@ -16797,7 +16790,7 @@ class MatStepperI18n extends MatStepperIntl {
|
|
|
16797
16790
|
this.optionalLabel = this.translate.instant('COMMON.OPTIONAL');
|
|
16798
16791
|
}
|
|
16799
16792
|
}
|
|
16800
|
-
MatStepperI18n.ɵprov =
|
|
16793
|
+
MatStepperI18n.ɵprov = ɵɵdefineInjectable({ factory: function MatStepperI18n_Factory() { return new MatStepperI18n(ɵɵinject(TranslateService)); }, token: MatStepperI18n, providedIn: "root" });
|
|
16801
16794
|
MatStepperI18n.decorators = [
|
|
16802
16795
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
16803
16796
|
];
|
|
@@ -18078,14 +18071,6 @@ function mergeLoadResult(res1, res2) {
|
|
|
18078
18071
|
total: ((res1.total || ((_a = res1.data) === null || _a === void 0 ? void 0 : _a.length) || 0) + (res2.total || ((_b = res2.data) === null || _b === void 0 ? void 0 : _b.length) || 0))
|
|
18079
18072
|
};
|
|
18080
18073
|
}
|
|
18081
|
-
class EntitiesService {
|
|
18082
|
-
ngOnDestroy() {
|
|
18083
|
-
// Can be override by subclasses
|
|
18084
|
-
}
|
|
18085
|
-
}
|
|
18086
|
-
EntitiesService.decorators = [
|
|
18087
|
-
{ type: Directive }
|
|
18088
|
-
];
|
|
18089
18074
|
|
|
18090
18075
|
class EntityFilter extends Entity {
|
|
18091
18076
|
constructor(__typename) {
|
|
@@ -18155,15 +18140,15 @@ class EntityFilterUtils {
|
|
|
18155
18140
|
|
|
18156
18141
|
// @dynamic
|
|
18157
18142
|
// eslint-disable-next-line @angular-eslint/directive-class-suffix
|
|
18158
|
-
class InMemoryEntitiesService extends
|
|
18143
|
+
class InMemoryEntitiesService extends StartableService {
|
|
18159
18144
|
constructor(dataType, filterType, options) {
|
|
18160
|
-
super();
|
|
18145
|
+
super(null);
|
|
18161
18146
|
this.dataType = dataType;
|
|
18162
18147
|
this.filterType = filterType;
|
|
18163
18148
|
this.debug = false;
|
|
18164
|
-
this.dirty = false;
|
|
18165
|
-
this._saving = false;
|
|
18166
18149
|
this.dataSubject = new BehaviorSubject(null);
|
|
18150
|
+
this.dirtySubject = new BehaviorSubject(false);
|
|
18151
|
+
this.savingSubject = new BehaviorSubject(false);
|
|
18167
18152
|
options = Object.assign({ onSort: this.sort }, options);
|
|
18168
18153
|
this._sortFn = options.onSort;
|
|
18169
18154
|
this._onLoad = options.onLoad;
|
|
@@ -18186,18 +18171,37 @@ class InMemoryEntitiesService extends EntitiesService {
|
|
|
18186
18171
|
get value() {
|
|
18187
18172
|
return this.dataSubject.getValue();
|
|
18188
18173
|
}
|
|
18189
|
-
|
|
18190
|
-
|
|
18191
|
-
|
|
18192
|
-
|
|
18193
|
-
this.
|
|
18174
|
+
get saving() {
|
|
18175
|
+
return this.savingSubject.value;
|
|
18176
|
+
}
|
|
18177
|
+
get dirty() {
|
|
18178
|
+
return this.dirtySubject.value;
|
|
18179
|
+
}
|
|
18180
|
+
ngOnStart() {
|
|
18181
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
18182
|
+
if (this.debug)
|
|
18183
|
+
console.debug('[memory-data-service] Starting...');
|
|
18184
|
+
return firstNotNilPromise(this.dataSubject, { stop: this.stopSubject });
|
|
18185
|
+
});
|
|
18186
|
+
}
|
|
18187
|
+
ngOnStop() {
|
|
18188
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
18189
|
+
if (this.debug)
|
|
18190
|
+
console.debug('[memory-data-service] Stopping...');
|
|
18191
|
+
this.savingSubject.next(false);
|
|
18192
|
+
this.dirtySubject.next(false);
|
|
18193
|
+
this.dataSubject.complete();
|
|
18194
|
+
this.dataSubject = new BehaviorSubject(null);
|
|
18195
|
+
});
|
|
18194
18196
|
}
|
|
18195
18197
|
setValue(data) {
|
|
18196
18198
|
if (this.dataSubject.value !== data) {
|
|
18199
|
+
if (!this.started)
|
|
18200
|
+
this.start();
|
|
18197
18201
|
this._hiddenData = [];
|
|
18198
18202
|
this.dataSubject.next(data);
|
|
18199
18203
|
}
|
|
18200
|
-
this.
|
|
18204
|
+
this.markAsPristine();
|
|
18201
18205
|
}
|
|
18202
18206
|
loadAll(offset, size, sortBy, sortDirection, filter, opts) {
|
|
18203
18207
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -18207,9 +18211,8 @@ class InMemoryEntitiesService extends EntitiesService {
|
|
|
18207
18211
|
if (isNil(originalData)) {
|
|
18208
18212
|
console.warn('[memory-data-service] Cannot load all: no value set. Will return empty result');
|
|
18209
18213
|
}
|
|
18210
|
-
// Wait
|
|
18211
|
-
|
|
18212
|
-
yield waitFor(() => !this._saving);
|
|
18214
|
+
// Wait while idle
|
|
18215
|
+
yield this.waitWhileSaving();
|
|
18213
18216
|
const excludedDataByFilter = [];
|
|
18214
18217
|
let excludedDataByPagination;
|
|
18215
18218
|
try {
|
|
@@ -18291,9 +18294,9 @@ class InMemoryEntitiesService extends EntitiesService {
|
|
|
18291
18294
|
offset = offset >= 0 ? offset : 0;
|
|
18292
18295
|
size = size >= 0 ? size : -1;
|
|
18293
18296
|
return this.dataSubject
|
|
18294
|
-
.pipe(
|
|
18297
|
+
.pipe(takeUntil(this.stopSubject),
|
|
18295
18298
|
// Warn if waiting value to be set
|
|
18296
|
-
tap((data) => !data && console.
|
|
18299
|
+
tap((data) => !data && console.debug('[memory-data-service] Waiting value to be set...')), filter(isNotNil), mergeMap(_ => this.loadAll(offset, size, sortBy, sortDirection, filterData, options)));
|
|
18297
18300
|
}
|
|
18298
18301
|
saveAll(data, options) {
|
|
18299
18302
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -18309,7 +18312,7 @@ class InMemoryEntitiesService extends EntitiesService {
|
|
|
18309
18312
|
data = ((res instanceof Promise)) ? yield res : res;
|
|
18310
18313
|
}
|
|
18311
18314
|
this.dataSubject.next(data);
|
|
18312
|
-
this.
|
|
18315
|
+
this.markAsDirty();
|
|
18313
18316
|
return data;
|
|
18314
18317
|
}
|
|
18315
18318
|
finally {
|
|
@@ -18322,16 +18325,22 @@ class InMemoryEntitiesService extends EntitiesService {
|
|
|
18322
18325
|
let data = this.dataSubject.value;
|
|
18323
18326
|
if (!data)
|
|
18324
18327
|
throw new Error('[memory-service] Could not delete, because value not set');
|
|
18325
|
-
|
|
18326
|
-
|
|
18327
|
-
|
|
18328
|
-
|
|
18329
|
-
|
|
18330
|
-
|
|
18331
|
-
|
|
18332
|
-
|
|
18333
|
-
|
|
18334
|
-
|
|
18328
|
+
this.markAsSaving();
|
|
18329
|
+
try {
|
|
18330
|
+
// Remove deleted item, from data
|
|
18331
|
+
const updatedData = data.filter(entity => {
|
|
18332
|
+
const removed = dataToRemove.findIndex(entityToRemove => this.equals(entityToRemove, entity)) !== -1;
|
|
18333
|
+
return !removed;
|
|
18334
|
+
});
|
|
18335
|
+
const deleteCount = data.length - updatedData.length;
|
|
18336
|
+
if (deleteCount > 0) {
|
|
18337
|
+
data = updatedData;
|
|
18338
|
+
this.dataSubject.next(data);
|
|
18339
|
+
this.markAsDirty();
|
|
18340
|
+
}
|
|
18341
|
+
}
|
|
18342
|
+
finally {
|
|
18343
|
+
this.markAsSaved();
|
|
18335
18344
|
}
|
|
18336
18345
|
});
|
|
18337
18346
|
}
|
|
@@ -18388,11 +18397,30 @@ class InMemoryEntitiesService extends EntitiesService {
|
|
|
18388
18397
|
return { data, total };
|
|
18389
18398
|
}));
|
|
18390
18399
|
}
|
|
18400
|
+
waitWhileSaving(opts) {
|
|
18401
|
+
if (!this.saving)
|
|
18402
|
+
return;
|
|
18403
|
+
return firstFalsePromise(this.savingSubject, Object.assign({ stop: (opts === null || opts === void 0 ? void 0 : opts.stop) || merge(this.stopSubject, this.dataSubject) }, opts));
|
|
18404
|
+
}
|
|
18391
18405
|
markAsSaving() {
|
|
18392
|
-
this.
|
|
18406
|
+
if (!this.savingSubject.value) {
|
|
18407
|
+
this.savingSubject.next(true);
|
|
18408
|
+
}
|
|
18393
18409
|
}
|
|
18394
18410
|
markAsSaved() {
|
|
18395
|
-
this.
|
|
18411
|
+
if (this.savingSubject.value) {
|
|
18412
|
+
this.savingSubject.next(false);
|
|
18413
|
+
}
|
|
18414
|
+
}
|
|
18415
|
+
markAsDirty() {
|
|
18416
|
+
if (!this.dirtySubject.value) {
|
|
18417
|
+
this.dirtySubject.next(true);
|
|
18418
|
+
}
|
|
18419
|
+
}
|
|
18420
|
+
markAsPristine() {
|
|
18421
|
+
if (this.dirtySubject.value) {
|
|
18422
|
+
this.dirtySubject.next(false);
|
|
18423
|
+
}
|
|
18396
18424
|
}
|
|
18397
18425
|
}
|
|
18398
18426
|
InMemoryEntitiesService.decorators = [
|
|
@@ -18716,7 +18744,7 @@ function state2side(state) {
|
|
|
18716
18744
|
return 1;
|
|
18717
18745
|
}
|
|
18718
18746
|
}
|
|
18719
|
-
const ɵ0$
|
|
18747
|
+
const ɵ0$b = (defaultStateSize) => [
|
|
18720
18748
|
Math.round((rgbArrayMap.red[0] - 50) / defaultStateSize),
|
|
18721
18749
|
Math.round((255 - rgbArrayMap.red[1]) / defaultStateSize),
|
|
18722
18750
|
Math.round((255 - rgbArrayMap.red[2]) / defaultStateSize)
|
|
@@ -18724,7 +18752,7 @@ const ɵ0$1 = (defaultStateSize) => [
|
|
|
18724
18752
|
const SCALE_OPTIONS_DEFAULT = {
|
|
18725
18753
|
startColor: rgbArrayMap.red,
|
|
18726
18754
|
startStates: [0, 2, 3],
|
|
18727
|
-
startStepsFn: ɵ0$
|
|
18755
|
+
startStepsFn: ɵ0$b
|
|
18728
18756
|
};
|
|
18729
18757
|
/**
|
|
18730
18758
|
* Internal function, that create a colors scale, using iteration
|
|
@@ -19531,7 +19559,7 @@ class UserSettingsValidatorService extends AppValidatorService {
|
|
|
19531
19559
|
});
|
|
19532
19560
|
}
|
|
19533
19561
|
}
|
|
19534
|
-
UserSettingsValidatorService.ɵprov =
|
|
19562
|
+
UserSettingsValidatorService.ɵprov = ɵɵdefineInjectable({ factory: function UserSettingsValidatorService_Factory() { return new UserSettingsValidatorService(ɵɵinject(FormBuilder)); }, token: UserSettingsValidatorService, providedIn: "root" });
|
|
19535
19563
|
UserSettingsValidatorService.decorators = [
|
|
19536
19564
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
19537
19565
|
];
|
|
@@ -19575,7 +19603,7 @@ class AccountValidatorService extends AppValidatorService {
|
|
|
19575
19603
|
return validatorFns.length ? Validators.compose(validatorFns) : validatorFns.length === 1 ? validatorFns[0] : undefined;
|
|
19576
19604
|
}
|
|
19577
19605
|
}
|
|
19578
|
-
AccountValidatorService.ɵprov =
|
|
19606
|
+
AccountValidatorService.ɵprov = ɵɵdefineInjectable({ factory: function AccountValidatorService_Factory() { return new AccountValidatorService(ɵɵinject(FormBuilder), ɵɵinject(AccountService)); }, token: AccountValidatorService, providedIn: "root" });
|
|
19579
19607
|
AccountValidatorService.decorators = [
|
|
19580
19608
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
19581
19609
|
];
|
|
@@ -19869,7 +19897,7 @@ class MenuService {
|
|
|
19869
19897
|
this._$opened.next(false);
|
|
19870
19898
|
}
|
|
19871
19899
|
}
|
|
19872
|
-
MenuService.ɵprov =
|
|
19900
|
+
MenuService.ɵprov = ɵɵdefineInjectable({ factory: function MenuService_Factory() { return new MenuService(); }, token: MenuService, providedIn: "root" });
|
|
19873
19901
|
MenuService.decorators = [
|
|
19874
19902
|
{ type: Injectable, args: [{
|
|
19875
19903
|
providedIn: 'root'
|
|
@@ -20205,7 +20233,7 @@ class LocalSettingsValidatorService extends AppValidatorService {
|
|
|
20205
20233
|
});
|
|
20206
20234
|
}
|
|
20207
20235
|
}
|
|
20208
|
-
LocalSettingsValidatorService.ɵprov =
|
|
20236
|
+
LocalSettingsValidatorService.ɵprov = ɵɵdefineInjectable({ factory: function LocalSettingsValidatorService_Factory() { return new LocalSettingsValidatorService(ɵɵinject(FormBuilder), ɵɵinject(NetworkService)); }, token: LocalSettingsValidatorService, providedIn: "root" });
|
|
20209
20237
|
LocalSettingsValidatorService.decorators = [
|
|
20210
20238
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
20211
20239
|
];
|
|
@@ -20824,7 +20852,7 @@ class IsOnFieldModePipe {
|
|
|
20824
20852
|
return value === 'FIELD';
|
|
20825
20853
|
}
|
|
20826
20854
|
}
|
|
20827
|
-
IsOnFieldModePipe.ɵprov =
|
|
20855
|
+
IsOnFieldModePipe.ɵprov = ɵɵdefineInjectable({ factory: function IsOnFieldModePipe_Factory() { return new IsOnFieldModePipe(); }, token: IsOnFieldModePipe, providedIn: "root" });
|
|
20828
20856
|
IsOnFieldModePipe.decorators = [
|
|
20829
20857
|
{ type: Pipe, args: [{
|
|
20830
20858
|
name: 'isOnField'
|
|
@@ -20836,7 +20864,7 @@ class IsNotOnFieldModePipe {
|
|
|
20836
20864
|
return value !== 'FIELD';
|
|
20837
20865
|
}
|
|
20838
20866
|
}
|
|
20839
|
-
IsNotOnFieldModePipe.ɵprov =
|
|
20867
|
+
IsNotOnFieldModePipe.ɵprov = ɵɵdefineInjectable({ factory: function IsNotOnFieldModePipe_Factory() { return new IsNotOnFieldModePipe(); }, token: IsNotOnFieldModePipe, providedIn: "root" });
|
|
20840
20868
|
IsNotOnFieldModePipe.decorators = [
|
|
20841
20869
|
{ type: Pipe, args: [{
|
|
20842
20870
|
name: 'isNotOnField'
|
|
@@ -20851,7 +20879,7 @@ class PersonToStringPipe {
|
|
|
20851
20879
|
return PersonUtils.personToString(value);
|
|
20852
20880
|
}
|
|
20853
20881
|
}
|
|
20854
|
-
PersonToStringPipe.ɵprov =
|
|
20882
|
+
PersonToStringPipe.ɵprov = ɵɵdefineInjectable({ factory: function PersonToStringPipe_Factory() { return new PersonToStringPipe(); }, token: PersonToStringPipe, providedIn: "root" });
|
|
20855
20883
|
PersonToStringPipe.decorators = [
|
|
20856
20884
|
{ type: Pipe, args: [{
|
|
20857
20885
|
name: 'personToString'
|
|
@@ -21204,7 +21232,7 @@ class IsLoginAccountPipe {
|
|
|
21204
21232
|
return value && value.pubkey && true;
|
|
21205
21233
|
}
|
|
21206
21234
|
}
|
|
21207
|
-
IsLoginAccountPipe.ɵprov =
|
|
21235
|
+
IsLoginAccountPipe.ɵprov = ɵɵdefineInjectable({ factory: function IsLoginAccountPipe_Factory() { return new IsLoginAccountPipe(); }, token: IsLoginAccountPipe, providedIn: "root" });
|
|
21208
21236
|
IsLoginAccountPipe.decorators = [
|
|
21209
21237
|
{ type: Pipe, args: [{
|
|
21210
21238
|
name: 'isLogin'
|
|
@@ -21216,7 +21244,7 @@ class AccountToStringPipe {
|
|
|
21216
21244
|
return accountToString(value);
|
|
21217
21245
|
}
|
|
21218
21246
|
}
|
|
21219
|
-
AccountToStringPipe.ɵprov =
|
|
21247
|
+
AccountToStringPipe.ɵprov = ɵɵdefineInjectable({ factory: function AccountToStringPipe_Factory() { return new AccountToStringPipe(); }, token: AccountToStringPipe, providedIn: "root" });
|
|
21220
21248
|
AccountToStringPipe.decorators = [
|
|
21221
21249
|
{ type: Pipe, args: [{
|
|
21222
21250
|
name: 'accountToString'
|
|
@@ -21231,7 +21259,7 @@ class DepartmentToStringPipe {
|
|
|
21231
21259
|
return departmentToString(value);
|
|
21232
21260
|
}
|
|
21233
21261
|
}
|
|
21234
|
-
DepartmentToStringPipe.ɵprov =
|
|
21262
|
+
DepartmentToStringPipe.ɵprov = ɵɵdefineInjectable({ factory: function DepartmentToStringPipe_Factory() { return new DepartmentToStringPipe(); }, token: DepartmentToStringPipe, providedIn: "root" });
|
|
21235
21263
|
DepartmentToStringPipe.decorators = [
|
|
21236
21264
|
{ type: Pipe, args: [{
|
|
21237
21265
|
name: 'departmentToString'
|
|
@@ -21866,7 +21894,7 @@ class AuthGuardService {
|
|
|
21866
21894
|
}));
|
|
21867
21895
|
}
|
|
21868
21896
|
}
|
|
21869
|
-
AuthGuardService.ɵprov =
|
|
21897
|
+
AuthGuardService.ɵprov = ɵɵdefineInjectable({ factory: function AuthGuardService_Factory() { return new AuthGuardService(ɵɵinject(AccountService), ɵɵinject(ModalController), ɵɵinject(Router), ɵɵinject(ENVIRONMENT)); }, token: AuthGuardService, providedIn: "root" });
|
|
21870
21898
|
AuthGuardService.decorators = [
|
|
21871
21899
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
21872
21900
|
];
|
|
@@ -22615,7 +22643,7 @@ class EntitiesTableDataSource extends TableDataSource {
|
|
|
22615
22643
|
this.handleServiceError(err);
|
|
22616
22644
|
}
|
|
22617
22645
|
finally {
|
|
22618
|
-
this.
|
|
22646
|
+
this.markAsLoaded();
|
|
22619
22647
|
}
|
|
22620
22648
|
});
|
|
22621
22649
|
}
|
|
@@ -23064,42 +23092,11 @@ class AppTable {
|
|
|
23064
23092
|
this.listenDatasourceLoading(this._dataSource);
|
|
23065
23093
|
}
|
|
23066
23094
|
ngAfterViewInit() {
|
|
23067
|
-
|
|
23068
|
-
|
|
23069
|
-
|
|
23070
|
-
|
|
23071
|
-
|
|
23072
|
-
console.warn(`[table] Missing <mat-table> in the HTML template (after waiting 500ms)! Component: ${this.constructor.name}`);
|
|
23073
|
-
}
|
|
23074
|
-
}, 500);
|
|
23075
|
-
}
|
|
23076
|
-
if (!this.displayedColumns)
|
|
23077
|
-
console.warn(`[table] Missing 'displayedColumns'. Did you call super.ngOnInit() in component ${this.constructor.name} ?`);
|
|
23078
|
-
}
|
|
23079
|
-
merge(
|
|
23080
|
-
// Listen sort events
|
|
23081
|
-
this.sort && this.sort.sortChange
|
|
23082
|
-
.pipe(filter(() => !this.sort.disabled), mergeMap(() => __awaiter(this, void 0, void 0, function* () { return this.saveBeforeAction('sort'); })), filter(res => res === true),
|
|
23083
|
-
// Save sort in settings
|
|
23084
|
-
tap(() => {
|
|
23085
|
-
const value = [this.sort.active, this.sort.direction || 'asc'].join(':');
|
|
23086
|
-
this.settings.savePageSetting(this.settingsId, value, SETTINGS_SORTED_COLUMN);
|
|
23087
|
-
}))
|
|
23088
|
-
|| EMPTY,
|
|
23089
|
-
// Listen paginator events
|
|
23090
|
-
this.paginator && this.paginator.page
|
|
23091
|
-
.pipe(mergeMap(() => __awaiter(this, void 0, void 0, function* () { return this.saveBeforeAction('sort'); })), filter(res => res === true),
|
|
23092
|
-
// Save page size
|
|
23093
|
-
tap(() => this.settings.savePageSetting(this.settingsId, this.paginator.pageSize, SETTINGS_PAGE_SIZE))) || EMPTY).subscribe(value => {
|
|
23094
|
-
this.onSort.emit();
|
|
23095
|
-
this.onRefresh.emit(value);
|
|
23096
|
-
});
|
|
23097
|
-
// If the user changes the sort order, reset back to the first page.
|
|
23098
|
-
if (this.sort && this.paginator) {
|
|
23099
|
-
this.registerSubscription(this.sort.sortChange
|
|
23100
|
-
.pipe(filter(() => !this.sort.disabled))
|
|
23101
|
-
.subscribe(() => this.paginator.pageIndex = 0));
|
|
23102
|
-
}
|
|
23095
|
+
// Detect when super.ngOnInit() not call
|
|
23096
|
+
if (this.debug && !this.displayedColumns)
|
|
23097
|
+
console.warn(`[table] Missing 'displayedColumns'. Did you call super.ngOnInit() in component ${this.constructor.name} ?`);
|
|
23098
|
+
// Start listening sort and paginator events
|
|
23099
|
+
this.listenSortAndPaginationEvents();
|
|
23103
23100
|
}
|
|
23104
23101
|
ngOnDestroy() {
|
|
23105
23102
|
var _a;
|
|
@@ -23235,19 +23232,6 @@ class AppTable {
|
|
|
23235
23232
|
this.editRowById(event, row.id + 1, { focusColumn: this.firstUserColumn });
|
|
23236
23233
|
return true;
|
|
23237
23234
|
}
|
|
23238
|
-
editRowById(event, id, opts) {
|
|
23239
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
23240
|
-
if (id < 0)
|
|
23241
|
-
return;
|
|
23242
|
-
if (id >= this.visibleRowCount) {
|
|
23243
|
-
this.addRow(event, undefined, Object.assign(Object.assign({}, opts), { editing: true }));
|
|
23244
|
-
}
|
|
23245
|
-
else {
|
|
23246
|
-
const row = yield this.dataSource.getRow(id);
|
|
23247
|
-
this.editRow(event, row, opts);
|
|
23248
|
-
}
|
|
23249
|
-
});
|
|
23250
|
-
}
|
|
23251
23235
|
/**
|
|
23252
23236
|
* Confirm the creation of the given row, or if not specified the currently edited row
|
|
23253
23237
|
*
|
|
@@ -23262,6 +23246,7 @@ class AppTable {
|
|
|
23262
23246
|
// Stop event
|
|
23263
23247
|
event === null || event === void 0 ? void 0 : event.stopPropagation();
|
|
23264
23248
|
// Confirmation edition or creation
|
|
23249
|
+
// TODO: add await ?
|
|
23265
23250
|
const confirmed = row.confirmEditCreate();
|
|
23266
23251
|
if (confirmed) {
|
|
23267
23252
|
// If edit finished, forget edited row
|
|
@@ -23280,6 +23265,7 @@ class AppTable {
|
|
|
23280
23265
|
}
|
|
23281
23266
|
if (row.validator) {
|
|
23282
23267
|
// If pending: Wait end of validation, then loop
|
|
23268
|
+
// TODO: remove when using async isValid() function
|
|
23283
23269
|
if (row.validator.pending) {
|
|
23284
23270
|
AppFormUtils.waitWhilePending(row.validator).then(() => this.confirmEditCreate(event, row));
|
|
23285
23271
|
return false;
|
|
@@ -23430,7 +23416,7 @@ class AppTable {
|
|
|
23430
23416
|
this.selection.clear();
|
|
23431
23417
|
}
|
|
23432
23418
|
else {
|
|
23433
|
-
const rows =
|
|
23419
|
+
const rows = this._dataSource.getRows();
|
|
23434
23420
|
rows.forEach(row => this.selection.select(row));
|
|
23435
23421
|
}
|
|
23436
23422
|
});
|
|
@@ -23569,7 +23555,7 @@ class AppTable {
|
|
|
23569
23555
|
if (data === undefined)
|
|
23570
23556
|
return Promise.resolve(false);
|
|
23571
23557
|
yield this.waitIdle();
|
|
23572
|
-
const row =
|
|
23558
|
+
const row = this.dataSource.getRows()
|
|
23573
23559
|
.find(row => this.equals(row.currentData, data));
|
|
23574
23560
|
if (!row)
|
|
23575
23561
|
return false;
|
|
@@ -23796,7 +23782,7 @@ class AppTable {
|
|
|
23796
23782
|
canCancelRows(rows, opts) {
|
|
23797
23783
|
return __awaiter(this, void 0, void 0, function* () {
|
|
23798
23784
|
// Get dirty rows
|
|
23799
|
-
rows = rows ||
|
|
23785
|
+
rows = rows || this.dataSource.getRows().filter(row => { var _a; return (_a = row.validator) === null || _a === void 0 ? void 0 : _a.dirty; });
|
|
23800
23786
|
if (isEmptyArray(rows))
|
|
23801
23787
|
return true; // No dirty: OK
|
|
23802
23788
|
// Check using emitter
|
|
@@ -24123,6 +24109,57 @@ class AppTable {
|
|
|
24123
24109
|
this.markAsDirty(opts);
|
|
24124
24110
|
}
|
|
24125
24111
|
/* -- private method -- */
|
|
24112
|
+
listenSortAndPaginationEvents() {
|
|
24113
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
24114
|
+
if (!this.table) {
|
|
24115
|
+
// DEBUG only -- alert user that table not found in template
|
|
24116
|
+
if (this.debug) {
|
|
24117
|
+
setTimeout(() => !this.table && console.warn(`[table] Missing <mat-table> in the HTML template (after waiting 500ms)! Component: ${this.constructor.name}`), 500);
|
|
24118
|
+
}
|
|
24119
|
+
// Make sure to wait the table
|
|
24120
|
+
yield waitFor(() => !!this.table, { stop: this.destroySubject });
|
|
24121
|
+
}
|
|
24122
|
+
this.registerSubscription(merge(
|
|
24123
|
+
// Listen sort events
|
|
24124
|
+
this.sort && this.sort.sortChange
|
|
24125
|
+
.pipe(filter(() => !this.sort.disabled), mergeMap(() => __awaiter(this, void 0, void 0, function* () { return this.saveBeforeAction('sort'); })), filter(res => res === true),
|
|
24126
|
+
// Save sort in settings
|
|
24127
|
+
tap(() => {
|
|
24128
|
+
const value = [this.sort.active, this.sort.direction || 'asc'].join(':');
|
|
24129
|
+
this.settings.savePageSetting(this.settingsId, value, SETTINGS_SORTED_COLUMN);
|
|
24130
|
+
}))
|
|
24131
|
+
|| EMPTY,
|
|
24132
|
+
// Listen paginator events
|
|
24133
|
+
this.paginator && this.paginator.page
|
|
24134
|
+
.pipe(mergeMap((event) => __awaiter(this, void 0, void 0, function* () { return this.saveBeforeAction('sort'); })), filter(res => res === true),
|
|
24135
|
+
// Save page size in settings
|
|
24136
|
+
tap(() => this.settings.savePageSetting(this.settingsId, this.paginator.pageSize, SETTINGS_PAGE_SIZE))) || EMPTY)
|
|
24137
|
+
// Refresh on any sort or paginator events
|
|
24138
|
+
.subscribe(value => {
|
|
24139
|
+
this.onSort.emit(value);
|
|
24140
|
+
this.onRefresh.emit(value);
|
|
24141
|
+
}));
|
|
24142
|
+
// If the user changes the sort order, reset back to the first page.
|
|
24143
|
+
if (this.sort && this.paginator) {
|
|
24144
|
+
this.registerSubscription(this.sort.sortChange
|
|
24145
|
+
.pipe(filter(() => !this.sort.disabled))
|
|
24146
|
+
.subscribe(() => this.paginator.pageIndex = 0));
|
|
24147
|
+
}
|
|
24148
|
+
});
|
|
24149
|
+
}
|
|
24150
|
+
editRowById(event, id, opts) {
|
|
24151
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
24152
|
+
if (id < 0)
|
|
24153
|
+
return;
|
|
24154
|
+
if (id >= this.visibleRowCount) {
|
|
24155
|
+
this.addRow(event, undefined, Object.assign(Object.assign({}, opts), { editing: true }));
|
|
24156
|
+
}
|
|
24157
|
+
else {
|
|
24158
|
+
const row = yield this.dataSource.getRow(id);
|
|
24159
|
+
this.editRow(event, row, opts);
|
|
24160
|
+
}
|
|
24161
|
+
});
|
|
24162
|
+
}
|
|
24126
24163
|
setLoading(value, opts) {
|
|
24127
24164
|
if (this.loadingSubject.value !== value) {
|
|
24128
24165
|
this.loadingSubject.next(value);
|
|
@@ -24525,13 +24562,14 @@ class AppEditor {
|
|
|
24525
24562
|
}
|
|
24526
24563
|
}
|
|
24527
24564
|
markAsLoaded(opts) {
|
|
24528
|
-
var _a;
|
|
24565
|
+
var _a, _b;
|
|
24529
24566
|
if (this.loadingSubject.value) {
|
|
24530
24567
|
this.loadingSubject.next(false);
|
|
24531
24568
|
if (!opts || opts.onlySelf !== true) {
|
|
24532
|
-
// Emit to children forms
|
|
24533
|
-
//
|
|
24534
|
-
(_a = this.forms) === null || _a === void 0 ? void 0 : _a.forEach(
|
|
24569
|
+
// Emit to children forms and editors
|
|
24570
|
+
// note: tables should be changed by parent
|
|
24571
|
+
(_a = this.forms) === null || _a === void 0 ? void 0 : _a.forEach(f => f.markAsLoaded(opts));
|
|
24572
|
+
(_b = this.editors) === null || _b === void 0 ? void 0 : _b.forEach(e => e.markAsLoaded(opts));
|
|
24535
24573
|
}
|
|
24536
24574
|
if (!opts || opts.emitEvent !== false) {
|
|
24537
24575
|
this.markForCheck();
|
|
@@ -24669,39 +24707,41 @@ class AppEditor {
|
|
|
24669
24707
|
return __awaiter(this, void 0, void 0, function* () {
|
|
24670
24708
|
if (!this.dirty)
|
|
24671
24709
|
return true;
|
|
24672
|
-
let
|
|
24673
|
-
|
|
24674
|
-
|
|
24675
|
-
|
|
24676
|
-
|
|
24677
|
-
|
|
24678
|
-
|
|
24679
|
-
|
|
24680
|
-
|
|
24681
|
-
|
|
24682
|
-
|
|
24683
|
-
|
|
24684
|
-
|
|
24685
|
-
|
|
24686
|
-
|
|
24687
|
-
|
|
24688
|
-
|
|
24689
|
-
|
|
24690
|
-
|
|
24691
|
-
|
|
24692
|
-
|
|
24693
|
-
|
|
24694
|
-
|
|
24695
|
-
|
|
24696
|
-
|
|
24710
|
+
let confirmed = (opts === null || opts === void 0 ? void 0 : opts.confirmed) || false;
|
|
24711
|
+
if (!confirmed) {
|
|
24712
|
+
let cancel = false;
|
|
24713
|
+
const translations = this.translate.instant(['COMMON.BTN_SAVE', 'COMMON.BTN_CANCEL', 'COMMON.BTN_ABORT_CHANGES', 'CONFIRM.SAVE', 'CONFIRM.ALERT_HEADER']);
|
|
24714
|
+
const alert = yield this.alertCtrl.create({
|
|
24715
|
+
header: translations['CONFIRM.ALERT_HEADER'],
|
|
24716
|
+
message: translations['CONFIRM.SAVE'],
|
|
24717
|
+
buttons: [
|
|
24718
|
+
{
|
|
24719
|
+
text: translations['COMMON.BTN_CANCEL'],
|
|
24720
|
+
role: 'cancel',
|
|
24721
|
+
cssClass: 'secondary',
|
|
24722
|
+
handler: () => {
|
|
24723
|
+
cancel = true;
|
|
24724
|
+
}
|
|
24725
|
+
},
|
|
24726
|
+
{
|
|
24727
|
+
text: translations['COMMON.BTN_ABORT_CHANGES'],
|
|
24728
|
+
cssClass: 'secondary',
|
|
24729
|
+
handler: () => {
|
|
24730
|
+
}
|
|
24731
|
+
},
|
|
24732
|
+
{
|
|
24733
|
+
text: translations['COMMON.BTN_SAVE'],
|
|
24734
|
+
handler: () => {
|
|
24735
|
+
confirmed = true; // update upper value
|
|
24736
|
+
}
|
|
24697
24737
|
}
|
|
24698
|
-
|
|
24699
|
-
|
|
24700
|
-
|
|
24701
|
-
|
|
24702
|
-
|
|
24703
|
-
|
|
24704
|
-
|
|
24738
|
+
]
|
|
24739
|
+
});
|
|
24740
|
+
yield alert.present();
|
|
24741
|
+
yield alert.onDidDismiss();
|
|
24742
|
+
if (!confirmed) {
|
|
24743
|
+
return !cancel;
|
|
24744
|
+
}
|
|
24705
24745
|
}
|
|
24706
24746
|
return yield this.save(event, opts);
|
|
24707
24747
|
});
|
|
@@ -26097,7 +26137,7 @@ const SocialErrorCodes = {
|
|
|
26097
26137
|
SUBSCRIBE_JOB_PROGRESSION_ERROR: 50010
|
|
26098
26138
|
};
|
|
26099
26139
|
|
|
26100
|
-
const moment$
|
|
26140
|
+
const moment$6 = momentImported;
|
|
26101
26141
|
const USER_EVENT_SERVICE = new InjectionToken('UserEventService');
|
|
26102
26142
|
class AbstractUserEventService extends BaseGraphqlService {
|
|
26103
26143
|
constructor(graphql, accountService, network, translate, options) {
|
|
@@ -26463,7 +26503,7 @@ class AbstractUserEventService extends BaseGraphqlService {
|
|
|
26463
26503
|
}
|
|
26464
26504
|
resetCount() {
|
|
26465
26505
|
this._countSubject.next(undefined);
|
|
26466
|
-
this.resetCountDate = moment$
|
|
26506
|
+
this.resetCountDate = moment$6();
|
|
26467
26507
|
// restart listening count changes
|
|
26468
26508
|
this.startListenCountChanges();
|
|
26469
26509
|
}
|
|
@@ -26523,7 +26563,7 @@ class AbstractUserEventService extends BaseGraphqlService {
|
|
|
26523
26563
|
if (!userEvents.length)
|
|
26524
26564
|
return;
|
|
26525
26565
|
// set read date
|
|
26526
|
-
userEvents.forEach(userEvent => userEvent.readDate = moment$
|
|
26566
|
+
userEvents.forEach(userEvent => userEvent.readDate = moment$6());
|
|
26527
26567
|
// split local/remote entities
|
|
26528
26568
|
const localEntities = userEvents.filter(userEvent => !userEvent.id || userEvent.id < 0);
|
|
26529
26569
|
const remoteEntities = userEvents.filter(userEvent => userEvent.id > 0);
|
|
@@ -27498,7 +27538,7 @@ class MessageService extends BaseGraphqlService {
|
|
|
27498
27538
|
});
|
|
27499
27539
|
}
|
|
27500
27540
|
}
|
|
27501
|
-
MessageService.ɵprov =
|
|
27541
|
+
MessageService.ɵprov = ɵɵdefineInjectable({ factory: function MessageService_Factory() { return new MessageService(ɵɵinject(GraphqlService), ɵɵinject(TranslateService), ɵɵinject(ToastController), ɵɵinject(ENVIRONMENT, 8)); }, token: MessageService, providedIn: "root" });
|
|
27502
27542
|
MessageService.decorators = [
|
|
27503
27543
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
27504
27544
|
];
|
|
@@ -27707,7 +27747,7 @@ class PersonService extends BaseEntityService {
|
|
|
27707
27747
|
return target;
|
|
27708
27748
|
}
|
|
27709
27749
|
}
|
|
27710
|
-
PersonService.ɵprov =
|
|
27750
|
+
PersonService.ɵprov = ɵɵdefineInjectable({ factory: function PersonService_Factory() { return new PersonService(ɵɵinject(GraphqlService), ɵɵinject(PlatformService), ɵɵinject(NetworkService), ɵɵinject(EntitiesStorage)); }, token: PersonService, providedIn: "root" });
|
|
27711
27751
|
PersonService.decorators = [
|
|
27712
27752
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
27713
27753
|
];
|
|
@@ -27738,7 +27778,7 @@ class PersonValidatorService {
|
|
|
27738
27778
|
return this.formBuilder.group(formConfig);
|
|
27739
27779
|
}
|
|
27740
27780
|
}
|
|
27741
|
-
PersonValidatorService.ɵprov =
|
|
27781
|
+
PersonValidatorService.ɵprov = ɵɵdefineInjectable({ factory: function PersonValidatorService_Factory() { return new PersonValidatorService(ɵɵinject(FormBuilder), ɵɵinject(AccountValidatorService)); }, token: PersonValidatorService, providedIn: "root" });
|
|
27742
27782
|
PersonValidatorService.decorators = [
|
|
27743
27783
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
27744
27784
|
];
|
|
@@ -27916,7 +27956,7 @@ class UsersPage extends AppTable {
|
|
|
27916
27956
|
UsersPage.decorators = [
|
|
27917
27957
|
{ type: Component, args: [{
|
|
27918
27958
|
selector: 'app-users-table',
|
|
27919
|
-
template: "<app-toolbar [title]=\"'USER.LIST.TITLE'|translate\"\n color=\"primary\"\n [canGoBack]=\"false\"\n [hasValidate]=\"!(loadingSubject|async) && dirty\"\n (onValidate)=\"save()\">\n <ion-buttons slot=\"end\">\n\n <!-- Compose message -->\n <button mat-icon-button *ngIf=\"canSendMessage\"\n [title]=\"'USER.LIST.BTN_SEND_MESSAGE'|translate\"\n (click)=\"openComposeMessageModal($event)\">\n <ion-icon name=\"mail\" slot=\"icon-only\"></ion-icon>\n </button>\n\n <ng-container *ngIf=\"!selection.hasValue(); else hasSelection\">\n <!-- Add -->\n <button mat-icon-button\n *ngIf=\"canEdit && !mobile\"\n [title]=\"'COMMON.BTN_ADD'|translate\"\n (click)=\"addRow()\">\n <mat-icon>add</mat-icon>\n </button>\n\n <!-- Refresh -->\n <button mat-icon-button *ngIf=\"!mobile\"\n [title]=\"'COMMON.BTN_REFRESH'|translate\"\n (click)=\"onRefresh.emit()\">\n <mat-icon>refresh</mat-icon>\n </button>\n\n <!-- reset filter -->\n <button mat-icon-button (click)=\"resetFilter()\"\n *ngIf=\"filterCriteriaCount\">\n <mat-icon color=\"accent\">filter_list_alt</mat-icon>\n <mat-icon class=\"icon-secondary\" style=\"left: 16px; top: 5px; font-weight: bold;\">close</mat-icon>\n </button>\n\n <!-- show filter -->\n <button mat-icon-button (click)=\"filterExpansionPanel.toggle()\">\n <mat-icon *ngIf=\"filterCriteriaCount; else emptyFilter\"\n [matBadge]=\"filterCriteriaCount\"\n matBadgeColor=\"accent\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\">filter_list_alt\n </mat-icon>\n <ng-template #emptyFilter>\n <mat-icon>filter_list_alt</mat-icon>\n </ng-template>\n </button>\n </ng-container>\n\n <ng-template #hasSelection>\n\n <!-- delete -->\n <button mat-icon-button\n class=\"hidden-xs hidden-sm\"\n [title]=\"'COMMON.BTN_DELETE'|translate\"\n (click)=\"deleteSelection($event)\">\n <mat-icon>delete</mat-icon>\n </button>\n </ng-template>\n </ion-buttons>\n</app-toolbar>\n\n<ion-content class=\"ion-no-padding\">\n\n <!-- error -->\n <ion-item *ngIf=\"errorSubject|async ; let error\" lines=\"none\" @slideUpDownAnimation>\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error|translate\"></ion-label>\n </ion-item>\n\n <!-- search -->\n <mat-expansion-panel #filterExpansionPanel class=\"ion-no-padding filter-panel filter-panel-floating\">\n <form class=\"form-container ion-padding\" [formGroup]=\"filterForm\" (ngSubmit)=\"onRefresh.emit()\">\n <ion-grid>\n <ion-row>\n <ion-col>\n <!-- search -->\n <mat-form-field>\n <input matInput [placeholder]=\"'USER.LIST.FILTER.SEARCH'|translate\" formControlName=\"searchText\">\n\n <button mat-icon-button matSuffix tabindex=\"-1\"\n type=\"button\"\n (click)=\"clearControlValue($event, filterForm.controls.searchText)\"\n [hidden]=\"filterForm.controls.searchText.disabled || !filterForm.controls.searchText.value\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </ion-col>\n\n <ion-col>\n <!-- status -->\n <mat-form-field>\n <mat-select formControlName=\"statusId\" [placeholder]=\"'USER.STATUS'|translate\">\n <mat-option [value]=\"null\"><i><span translate>COMMON.EMPTY_OPTION</span></i></mat-option>\n <mat-option *ngFor=\"let item of statusList\" [value]=\"item.id\">\n <ion-icon [name]=\"item.icon\"></ion-icon>\n {{ item.label |translate }}\n </mat-option>\n </mat-select>\n\n <button mat-icon-button matSuffix tabindex=\"-1\"\n type=\"button\"\n (click)=\"clearControlValue($event, filterForm.controls.statusId)\"\n [hidden]=\"filterForm.controls.statusId.disabled || !filterForm.controls.statusId.value\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </form>\n\n <mat-action-row>\n <!-- Counter -->\n <ion-label [hidden]=\"(loadingSubject|async) || filterForm.dirty\"\n [color]=\"empty && 'danger'\"\n class=\"ion-padding\">\n {{ (totalRowCount ? 'COMMON.RESULT_COUNT' : 'COMMON.NO_RESULT') | translate: {\n count: (totalRowCount |\n numberFormat)\n } }}\n </ion-label>\n\n <div class=\"toolbar-spacer\"></div>\n\n <!-- Close panel -->\n <ion-button mat-button fill=\"clear\" color=\"dark\"\n (click)=\"filterExpansionPanel.close()\"\n [disabled]=\"loadingSubject|async\">\n <ion-text translate>COMMON.BTN_CLOSE</ion-text>\n </ion-button>\n\n <!-- Search button -->\n <ion-button mat-button\n [color]=\"filterForm.dirty ? 'tertiary' : 'dark'\"\n [fill]=\"filterForm.dirty ? 'solid' : 'clear'\"\n (click)=\"applyFilterAndClosePanel($event)\"\n [disabled]=\"loadingSubject|async\">\n <ion-text translate>COMMON.BTN_APPLY</ion-text>\n </ion-button>\n\n </mat-action-row>\n </mat-expansion-panel>\n\n <!-- error -->\n <ion-item *ngIf=\"error\" visible-xs visible-sm visible-mobile lines=\"none\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error|translate\"></ion-label>\n </ion-item>\n\n <div class=\"table-container\">\n <table #table mat-table matSort\n [dataSource]=\"dataSource\"\n [matSortActive]=\"defaultSortBy\" [matSortDirection]=\"defaultSortDirection\"\n matSortDisableClear [trackBy]=\"trackByFn\">\n\n <ng-container matColumnDef=\"select\" [sticky]=\"useSticky\">\n <th mat-header-cell *matHeaderCellDef [class.cdk-visually-hidden]=\"!inlineEdition\">\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [checked]=\"selection.hasValue() && isAllSelected()\"\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\n </mat-checkbox>\n </th>\n <td mat-cell *matCellDef=\"let row\" [class.cdk-visually-hidden]=\"!inlineEdition\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(row) : null\" [checked]=\"selection.isSelected(row)\">\n </mat-checkbox>\n </td>\n </ng-container>\n\n <!-- Id Column -->\n <ng-container matColumnDef=\"id\" [sticky]=\"useSticky\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <ion-label>#</ion-label>\n </th>\n <td mat-cell *matCellDef=\"let row\">{{ row.currentData.id }}</td>\n </ng-container>\n\n <!-- avatar Column -->\n <ng-container matColumnDef=\"avatar\" [sticky]=\"useSticky\">\n <th mat-header-cell *matHeaderCellDef></th>\n <td mat-cell *matCellDef=\"let row\">\n <div class=\"avatar\" *ngIf=\"row.currentData.avatar; else generateIcon\"\n [ngStyle]=\"{'background-image':'url('+row.currentData.avatar+')'}\"></div>\n <ng-template #generateIcon>\n <div class=\"avatar\">\n <svg width=\"38\" width=\"38\" [data-jdenticon-value]=\"row.currentData.id\"></svg>\n </div>\n </ng-template>\n </td>\n </ng-container>\n\n <!-- lastName -->\n <ng-container matColumnDef=\"lastName\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <span translate>USER.LAST_NAME</span>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"focusColumn='lastName'\">\n <mat-form-field floatLabel=\"never\">\n <input matInput\n [formControl]=\"row.validator.controls['lastName']\"\n [placeholder]=\"'USER.LAST_NAME'|translate\"\n [readonly]=\"!row.editing\"\n [appAutofocus]=\"row.editing && focusColumn==='lastName'\">\n <mat-error *ngIf=\"row.validator.controls['lastName'].hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"row.validator.controls['lastName'].hasError('minlength')\">\n <span>{{'ERROR.FIELD_MIN_LENGTH' | translate: {minLength: 2} }}</span>\n </mat-error>\n </mat-form-field>\n\n </td>\n\n </ng-container>\n\n <!-- firstname -->\n <ng-container matColumnDef=\"firstName\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <span translate>USER.FIRST_NAME</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n\n (click)=\"focusColumn='firstName'\">\n <mat-form-field floatLabel=\"never\">\n <input matInput [formControl]=\"row.validator.controls['firstName']\"\n [placeholder]=\"'USER.FIRST_NAME'|translate\"\n [readonly]=\"!row.editing\"\n [appAutofocus]=\"row.editing && focusColumn==='firstName'\">\n <mat-error *ngIf=\"row.validator.controls['firstName'].hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"row.validator.controls['firstName'].hasError('minlength')\">\n <span>{{'ERROR.FIELD_MIN_LENGTH' | translate: {minLength: 2} }}</span>\n </mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- email -->\n <ng-container matColumnDef=\"email\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <span translate>USER.EMAIL</span>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"focusColumn='email'\">\n <mat-form-field floatLabel=\"never\">\n <input matInput [formControl]=\"row.validator.controls['email']\"\n [placeholder]=\"'USER.EMAIL'|translate\"\n [readonly]=\"!row.editing\"\n [appAutofocus]=\"row.editing && focusColumn==='email'\">\n <mat-error *ngIf=\"row.validator.controls['email'].hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"row.validator.controls['email'].hasError('email')\">\n <span translate>ERROR.FIELD_NOT_VALID_EMAIL</span>\n </mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- additional fields -->\n <ng-container *ngFor=\"let definition of additionalFields\" [matColumnDef]=\"definition.key\">\n <th mat-header-cell *matHeaderCellDef>\n <span>{{definition.label|translate}}</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n (click)=\"focusColumn=definition.key\">\n <app-form-field floatLabel=\"never\"\n [definition]=\"definition\"\n [formControl]=\"row.validator.controls[definition.key]\"\n [required]=\"definition.extra?.account?.required\"\n [autofocus]=\"row.editing && focusColumn===definition.ke\">\n </app-form-field>\n </td>\n </ng-container>\n\n <!-- profile column -->\n <ng-container matColumnDef=\"profile\">\n <th mat-header-cell *matHeaderCellDef>\n <span translate>USER.PROFILE</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n (click)=\"focusColumn='profile'\">\n <mat-form-field floatLabel=\"never\">\n <mat-select [formControl]=\"row.validator.controls['mainProfile']\"\n [placeholder]=\"'USER.PROFILE'|translate\">\n <mat-option *ngFor=\"let item of profiles\" [value]=\"item\">\n {{ ('USER.PROFILE_ENUM.' + item) | uppercase |translate }}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"row.validator.controls['mainProfile'].hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- Status column -->\n <ng-container matColumnDef=\"status\">\n <th mat-header-cell *matHeaderCellDef>\n <span translate>USER.STATUS</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n (click)=\"focusColumn='status'\">\n <mat-form-field floatLabel=\"never\">\n <ion-icon matPrefix *ngIf=\"row.validator.controls['statusId'].value >=0\" [name]=\"statusById[row.validator.controls['statusId'].value]?.icon\"></ion-icon>\n\n <mat-select [formControl]=\"row.validator.controls['statusId']\"\n [placeholder]=\"'REFERENTIAL.STATUS'|translate\">\n <mat-select-trigger>\n <span *ngIf=\"row.validator.controls['statusId'].value >=0\">\n {{ statusById[row.validator.controls['statusId'].value]?.label | translate}}</span>\n </mat-select-trigger>\n <mat-option *ngFor=\"let item of statusList\" [value]=\"item.id\">\n <ion-icon [name]=\"item.icon\"></ion-icon>\n {{ item.label |translate }}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"row.validator.controls['statusId'].hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- username -->\n <ng-container matColumnDef=\"username\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <span translate>USER.USERNAME</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n (click)=\"focusColumn='username'\">\n <mat-form-field floatLabel=\"never\" >\n <input matInput [formControl]=\"row.validator.controls.username\"\n [placeholder]=\"'USER.USERNAME'|translate\"\n [readonly]=\"!row.editing\"\n [appAutofocus]=\"row.editing && focusColumn==='username'\">\n <mat-error *ngIf=\"row.validator.controls.username.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- username extranet -->\n <ng-container matColumnDef=\"usernameExtranet\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <span translate>USER.USERNAME_EXTRANET</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n (click)=\"focusColumn='usernameExtranet'\">\n <mat-form-field floatLabel=\"never\">\n <input matInput [formControl]=\"row.validator.controls.usernameExtranet\"\n [placeholder]=\"'USER.USERNAME_EXTRANET'|translate\"\n [readonly]=\"!row.editing\"\n [appAutofocus]=\"row.editing && focusColumn==='usernameExtranet'\">\n <mat-error *ngIf=\"row.validator.controls.usernameExtranet.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- pubkey -->\n <ng-container matColumnDef=\"pubkey\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <span translate>USER.PUBKEY</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n [title]=\"row.validator.controls.pubkey.valueChanges|async\"\n (click)=\"focusColumn='pubkey'\">\n <mat-form-field floatLabel=\"never\">\n <input matInput [formControl]=\"row.validator.controls['pubkey']\" [placeholder]=\"'USER.PUBKEY'|translate\"\n [readonly]=\"!row.editing\" autocomplete=\"off\">\n <mat-error *ngIf=\"row.validator.controls.pubkey.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"row.validator.controls.pubkey.hasError('pubkey')\">\n <span translate>ERROR.FIELD_NOT_VALID_PUBKEY</span>\n </mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- Actions buttons column -->\n <app-actions-column [stickyEnd]=\"useSticky\"\n (optionsClick)=\"openSelectColumnsModal($event)\"\n (cancelOrDeleteClick)=\"cancelOrDelete($event.event, $event.row)\"\n (confirmAndAddClick)=\"confirmAndAdd($event.event, $event.row)\"\n (backward)=\"confirmAndBackward($event.event, $event.row)\"\n (forward)=\"confirmAndForward($event.event, $event.row)\"\n [canCancel]=\"false\">\n </app-actions-column>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"\n [class.mat-row-error]=\"row.validator.invalid\"\n [class.mat-row-dirty]=\"row.currentData.dirty\"\n [class.mat-row-disabled]=\"!row.editing\"\n (click)=\"clickRow($event, row)\"\n (keydown.escape)=\"escapeEditingRow($event)\"\n [cdkTrapFocus]=\"row.validator.invalid\"></tr>\n </table>\n\n <ng-container *ngIf=\"loadingSubject|async; else noResult\">\n <ion-item>\n <ion-skeleton-text animated></ion-skeleton-text>\n </ion-item>\n </ng-container>\n\n <ng-template #noResult>\n <ion-item *ngIf=\"totalRowCount === 0\">\n <ion-text color=\"danger\" class=\"text-italic\" translate>COMMON.NO_RESULT</ion-text>\n </ion-item>\n </ng-template>\n </div>\n</ion-content>\n\n<ion-footer>\n <mat-paginator class=\"mat-paginator-footer\"\n [length]=\"totalRowCount\" [pageSize]=\"defaultPageSize\"\n [pageSizeOptions]=\"defaultPageSizeOptions\" showFirstLastButtons>\n </mat-paginator>\n\n <app-form-buttons-bar *ngIf=\"!mobile && inlineEdition\"\n (onCancel)=\"onRefresh.emit()\" (onSave)=\"save()\" [disabled]=\"(loadingSubject|async) || !dirty\"></app-form-buttons-bar>\n</ion-footer>\n\n<ion-fab slot=\"fixed\" vertical=\"bottom\" horizontal=\"end\" *ngIf=\"mobile\">\n <ion-fab-button color=\"tertiary\" (click)=\"addRow()\">\n <ion-icon name=\"add\"></ion-icon>\n </ion-fab-button>\n</ion-fab>\n",
|
|
27959
|
+
template: "<app-toolbar [title]=\"'USER.LIST.TITLE'|translate\"\n color=\"primary\"\n [canGoBack]=\"false\"\n [hasValidate]=\"!(loadingSubject|async) && dirty\"\n (onValidate)=\"save()\">\n <ion-buttons slot=\"end\">\n\n <!-- Compose message -->\n <button mat-icon-button *ngIf=\"canSendMessage\"\n [title]=\"'USER.LIST.BTN_SEND_MESSAGE'|translate\"\n (click)=\"openComposeMessageModal($event)\">\n <ion-icon name=\"mail\" slot=\"icon-only\"></ion-icon>\n </button>\n\n <ng-container *ngIf=\"!selection.hasValue(); else hasSelection\">\n <!-- Add -->\n <button mat-icon-button\n *ngIf=\"canEdit && !mobile\"\n [title]=\"'COMMON.BTN_ADD'|translate\"\n (click)=\"addRow()\">\n <mat-icon>add</mat-icon>\n </button>\n\n <!-- Refresh -->\n <button mat-icon-button *ngIf=\"!mobile\"\n [title]=\"'COMMON.BTN_REFRESH'|translate\"\n (click)=\"onRefresh.emit()\">\n <mat-icon>refresh</mat-icon>\n </button>\n\n <!-- reset filter -->\n <button mat-icon-button (click)=\"resetFilter()\"\n *ngIf=\"filterCriteriaCount\">\n <mat-icon color=\"accent\">filter_list_alt</mat-icon>\n <mat-icon class=\"icon-secondary\" style=\"left: 16px; top: 5px; font-weight: bold;\">close</mat-icon>\n </button>\n\n <!-- show filter -->\n <button mat-icon-button (click)=\"filterExpansionPanel.toggle()\">\n <mat-icon *ngIf=\"filterCriteriaCount; else emptyFilter\"\n [matBadge]=\"filterCriteriaCount\"\n matBadgeColor=\"accent\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\">filter_list_alt\n </mat-icon>\n <ng-template #emptyFilter>\n <mat-icon>filter_list_alt</mat-icon>\n </ng-template>\n </button>\n </ng-container>\n\n <ng-template #hasSelection>\n\n <!-- delete -->\n <button mat-icon-button\n class=\"hidden-xs hidden-sm\"\n [title]=\"'COMMON.BTN_DELETE'|translate\"\n (click)=\"deleteSelection($event)\">\n <mat-icon>delete</mat-icon>\n </button>\n </ng-template>\n </ion-buttons>\n</app-toolbar>\n\n<ion-content class=\"ion-no-padding\">\n\n <!-- error -->\n <ion-item *ngIf=\"errorSubject|async ; let error\" lines=\"none\" @slideUpDownAnimation>\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error|translate\"></ion-label>\n </ion-item>\n\n <!-- search -->\n <mat-expansion-panel #filterExpansionPanel class=\"ion-no-padding filter-panel filter-panel-floating\">\n <form class=\"form-container ion-padding\" [formGroup]=\"filterForm\" (ngSubmit)=\"onRefresh.emit()\">\n <ion-grid>\n <ion-row>\n <ion-col>\n <!-- search -->\n <mat-form-field>\n <input matInput [placeholder]=\"'USER.LIST.FILTER.SEARCH'|translate\" formControlName=\"searchText\">\n\n <button mat-icon-button matSuffix tabindex=\"-1\"\n type=\"button\"\n (click)=\"clearControlValue($event, filterForm.controls.searchText)\"\n [hidden]=\"filterForm.controls.searchText.disabled || !filterForm.controls.searchText.value\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </ion-col>\n\n <ion-col>\n <!-- status -->\n <mat-form-field>\n <mat-select formControlName=\"statusId\" [placeholder]=\"'USER.STATUS'|translate\">\n <mat-option [value]=\"null\"><i><span translate>COMMON.EMPTY_OPTION</span></i></mat-option>\n <mat-option *ngFor=\"let item of statusList\" [value]=\"item.id\">\n <ion-icon [name]=\"item.icon\"></ion-icon>\n {{ item.label |translate }}\n </mat-option>\n </mat-select>\n\n <button mat-icon-button matSuffix tabindex=\"-1\"\n type=\"button\"\n (click)=\"clearControlValue($event, filterForm.controls.statusId)\"\n [hidden]=\"filterForm.controls.statusId.disabled || !filterForm.controls.statusId.value\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </form>\n\n <mat-action-row>\n <!-- Counter -->\n <ion-label [hidden]=\"(loadingSubject|async) || filterForm.dirty\"\n [color]=\"empty && 'danger'\"\n class=\"ion-padding\">\n {{ (totalRowCount ? 'COMMON.RESULT_COUNT' : 'COMMON.NO_RESULT') | translate: {\n count: (totalRowCount |\n numberFormat)\n } }}\n </ion-label>\n\n <div class=\"toolbar-spacer\"></div>\n\n <!-- Close panel -->\n <ion-button mat-button fill=\"clear\" color=\"dark\"\n (click)=\"filterExpansionPanel.close()\"\n [disabled]=\"loadingSubject|async\">\n <ion-text translate>COMMON.BTN_CLOSE</ion-text>\n </ion-button>\n\n <!-- Search button -->\n <ion-button mat-button\n [color]=\"filterForm.dirty ? 'tertiary' : 'dark'\"\n [fill]=\"filterForm.dirty ? 'solid' : 'clear'\"\n (click)=\"applyFilterAndClosePanel($event)\"\n [disabled]=\"loadingSubject|async\">\n <ion-text translate>COMMON.BTN_APPLY</ion-text>\n </ion-button>\n\n </mat-action-row>\n </mat-expansion-panel>\n\n <!-- error -->\n <ion-item *ngIf=\"error\" visible-xs visible-sm visible-mobile lines=\"none\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error|translate\"></ion-label>\n </ion-item>\n\n <div class=\"table-container\">\n <table #table mat-table matSort\n [dataSource]=\"dataSource\"\n [matSortActive]=\"defaultSortBy\" [matSortDirection]=\"defaultSortDirection\"\n matSortDisableClear [trackBy]=\"trackByFn\">\n\n <ng-container matColumnDef=\"select\" [sticky]=\"useSticky\">\n <th mat-header-cell *matHeaderCellDef [class.cdk-visually-hidden]=\"!inlineEdition\">\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [checked]=\"selection.hasValue() && isAllSelected()\"\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\n </mat-checkbox>\n </th>\n <td mat-cell *matCellDef=\"let row\" [class.cdk-visually-hidden]=\"!inlineEdition\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(row) : null\" [checked]=\"selection.isSelected(row)\">\n </mat-checkbox>\n </td>\n </ng-container>\n\n <!-- Id Column -->\n <ng-container matColumnDef=\"id\" [sticky]=\"useSticky\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <ion-label>#</ion-label>\n </th>\n <td mat-cell *matCellDef=\"let row\">{{ row.currentData.id }}</td>\n </ng-container>\n\n <!-- avatar Column -->\n <ng-container matColumnDef=\"avatar\" [sticky]=\"useSticky\">\n <th mat-header-cell *matHeaderCellDef></th>\n <td mat-cell *matCellDef=\"let row\">\n <div class=\"avatar\" *ngIf=\"row.currentData.avatar; else generateIcon\"\n [ngStyle]=\"{'background-image':'url('+row.currentData.avatar+')'}\"></div>\n <ng-template #generateIcon>\n <div class=\"avatar\">\n <svg width=\"38\" width=\"38\" [data-jdenticon-value]=\"row.currentData.id\"></svg>\n </div>\n </ng-template>\n </td>\n </ng-container>\n\n <!-- lastName -->\n <ng-container matColumnDef=\"lastName\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <span translate>USER.LAST_NAME</span>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"focusColumn='lastName'\">\n <mat-form-field floatLabel=\"never\">\n <input matInput\n [formControl]=\"row.validator.controls['lastName']\"\n [placeholder]=\"'USER.LAST_NAME'|translate\"\n [readonly]=\"!row.editing\"\n [appAutofocus]=\"row.editing && focusColumn==='lastName'\">\n <mat-error *ngIf=\"row.validator.controls['lastName'].hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"row.validator.controls['lastName'].hasError('minlength')\">\n <span>{{'ERROR.FIELD_MIN_LENGTH' | translate: {minLength: 2} }}</span>\n </mat-error>\n </mat-form-field>\n </td>\n\n </ng-container>\n\n <!-- firstname -->\n <ng-container matColumnDef=\"firstName\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <span translate>USER.FIRST_NAME</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n (click)=\"focusColumn='firstName'\">\n <mat-form-field floatLabel=\"never\">\n <input matInput [formControl]=\"row.validator.controls['firstName']\"\n [placeholder]=\"'USER.FIRST_NAME'|translate\"\n [readonly]=\"!row.editing\"\n [appAutofocus]=\"row.editing && focusColumn==='firstName'\">\n <mat-error *ngIf=\"row.validator.controls['firstName'].hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"row.validator.controls['firstName'].hasError('minlength')\">\n <span>{{'ERROR.FIELD_MIN_LENGTH' | translate: {minLength: 2} }}</span>\n </mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- email -->\n <ng-container matColumnDef=\"email\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <span translate>USER.EMAIL</span>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"focusColumn='email'\">\n <mat-form-field floatLabel=\"never\">\n <input matInput [formControl]=\"row.validator.controls['email']\"\n [placeholder]=\"'USER.EMAIL'|translate\"\n [readonly]=\"!row.editing\"\n [appAutofocus]=\"row.editing && focusColumn==='email'\">\n <mat-error *ngIf=\"row.validator.controls['email'].hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"row.validator.controls['email'].hasError('email')\">\n <span translate>ERROR.FIELD_NOT_VALID_EMAIL</span>\n </mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- additional fields -->\n <ng-container *ngFor=\"let definition of additionalFields\" [matColumnDef]=\"definition.key\">\n <th mat-header-cell *matHeaderCellDef>\n <span>{{definition.label|translate}}</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n (click)=\"focusColumn=definition.key\">\n <app-form-field floatLabel=\"never\"\n [definition]=\"definition\"\n [formControl]=\"row.validator.controls[definition.key]\"\n [required]=\"definition.extra?.account?.required\"\n [autofocus]=\"row.editing && focusColumn===definition.key\">\n </app-form-field>\n </td>\n </ng-container>\n\n <!-- profile column -->\n <ng-container matColumnDef=\"profile\">\n <th mat-header-cell *matHeaderCellDef>\n <span translate>USER.PROFILE</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n (click)=\"focusColumn='profile'\">\n <mat-form-field floatLabel=\"never\">\n <mat-select [formControl]=\"row.validator.controls['mainProfile']\"\n [placeholder]=\"'USER.PROFILE'|translate\">\n <mat-option *ngFor=\"let item of profiles\" [value]=\"item\">\n {{ ('USER.PROFILE_ENUM.' + item) | uppercase |translate }}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"row.validator.controls['mainProfile'].hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- Status column -->\n <ng-container matColumnDef=\"status\">\n <th mat-header-cell *matHeaderCellDef>\n <span translate>USER.STATUS</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n (click)=\"focusColumn='status'\">\n <mat-form-field floatLabel=\"never\">\n <ion-icon matPrefix *ngIf=\"row.validator.controls['statusId'].value >=0\" [name]=\"statusById[row.validator.controls['statusId'].value]?.icon\"></ion-icon>\n\n <mat-select [formControl]=\"row.validator.controls['statusId']\"\n [placeholder]=\"'REFERENTIAL.STATUS'|translate\">\n <mat-select-trigger>\n <span *ngIf=\"row.validator.controls['statusId'].value >=0\">\n {{ statusById[row.validator.controls['statusId'].value]?.label | translate}}</span>\n </mat-select-trigger>\n <mat-option *ngFor=\"let item of statusList\" [value]=\"item.id\">\n <ion-icon [name]=\"item.icon\"></ion-icon>\n {{ item.label |translate }}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"row.validator.controls['statusId'].hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- username -->\n <ng-container matColumnDef=\"username\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <span translate>USER.USERNAME</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n (click)=\"focusColumn='username'\">\n <mat-form-field floatLabel=\"never\" >\n <input matInput [formControl]=\"row.validator.controls.username\"\n [placeholder]=\"'USER.USERNAME'|translate\"\n [readonly]=\"!row.editing\"\n [appAutofocus]=\"row.editing && focusColumn==='username'\">\n <mat-error *ngIf=\"row.validator.controls.username.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- username extranet -->\n <ng-container matColumnDef=\"usernameExtranet\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <span translate>USER.USERNAME_EXTRANET</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n (click)=\"focusColumn='usernameExtranet'\">\n <mat-form-field floatLabel=\"never\">\n <input matInput [formControl]=\"row.validator.controls.usernameExtranet\"\n [placeholder]=\"'USER.USERNAME_EXTRANET'|translate\"\n [readonly]=\"!row.editing\"\n [appAutofocus]=\"row.editing && focusColumn==='usernameExtranet'\">\n <mat-error *ngIf=\"row.validator.controls.usernameExtranet.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- pubkey -->\n <ng-container matColumnDef=\"pubkey\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <span translate>USER.PUBKEY</span>\n </th>\n <td mat-cell *matCellDef=\"let row\"\n [title]=\"row.validator.controls.pubkey.valueChanges|async\"\n (click)=\"focusColumn='pubkey'\">\n <mat-form-field floatLabel=\"never\">\n <input matInput [formControl]=\"row.validator.controls['pubkey']\" [placeholder]=\"'USER.PUBKEY'|translate\"\n [readonly]=\"!row.editing\" autocomplete=\"off\">\n <mat-error *ngIf=\"row.validator.controls.pubkey.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"row.validator.controls.pubkey.hasError('pubkey')\">\n <span translate>ERROR.FIELD_NOT_VALID_PUBKEY</span>\n </mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- Actions buttons column -->\n <app-actions-column [stickyEnd]=\"useSticky\"\n (optionsClick)=\"openSelectColumnsModal($event)\"\n (cancelOrDeleteClick)=\"cancelOrDelete($event.event, $event.row)\"\n (confirmAndAddClick)=\"confirmAndAdd($event.event, $event.row)\"\n (backward)=\"confirmAndBackward($event.event, $event.row)\"\n (forward)=\"confirmAndForward($event.event, $event.row)\"\n [canCancel]=\"false\">\n </app-actions-column>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"\n [class.mat-row-error]=\"row.validator.invalid\"\n [class.mat-row-dirty]=\"row.currentData.dirty\"\n [class.mat-row-disabled]=\"!row.editing\"\n (click)=\"clickRow($event, row)\"\n (keydown.escape)=\"escapeEditingRow($event)\"\n [cdkTrapFocus]=\"row.validator.invalid\"></tr>\n </table>\n\n <ng-container *ngIf=\"loadingSubject|async; else noResult\">\n <ion-item>\n <ion-skeleton-text animated></ion-skeleton-text>\n </ion-item>\n </ng-container>\n\n <ng-template #noResult>\n <ion-item *ngIf=\"totalRowCount === 0\">\n <ion-text color=\"danger\" class=\"text-italic\" translate>COMMON.NO_RESULT</ion-text>\n </ion-item>\n </ng-template>\n </div>\n</ion-content>\n\n<ion-footer>\n <mat-paginator class=\"mat-paginator-footer\"\n [length]=\"totalRowCount\" [pageSize]=\"defaultPageSize\"\n [pageSizeOptions]=\"defaultPageSizeOptions\" showFirstLastButtons>\n </mat-paginator>\n\n <app-form-buttons-bar *ngIf=\"!mobile && inlineEdition\"\n (onCancel)=\"onRefresh.emit()\" (onSave)=\"save()\" [disabled]=\"(loadingSubject|async) || !dirty\"></app-form-buttons-bar>\n</ion-footer>\n\n<ion-fab slot=\"fixed\" vertical=\"bottom\" horizontal=\"end\" *ngIf=\"mobile\">\n <ion-fab-button color=\"tertiary\" (click)=\"addRow()\">\n <ion-icon name=\"add\"></ion-icon>\n </ion-fab-button>\n</ion-fab>\n",
|
|
27920
27960
|
providers: [
|
|
27921
27961
|
{ provide: ValidatorService, useExisting: PersonValidatorService }
|
|
27922
27962
|
],
|
|
@@ -27967,17 +28007,17 @@ AdminModule.decorators = [
|
|
|
27967
28007
|
];
|
|
27968
28008
|
AdminModule.ctorParameters = () => [];
|
|
27969
28009
|
|
|
27970
|
-
const ɵ0 = {
|
|
28010
|
+
const ɵ0$c = {
|
|
27971
28011
|
profile: 'ADMIN'
|
|
27972
28012
|
};
|
|
27973
|
-
const routes
|
|
28013
|
+
const routes = [
|
|
27974
28014
|
{
|
|
27975
28015
|
path: 'users',
|
|
27976
28016
|
pathMatch: 'full',
|
|
27977
28017
|
component: UsersPage,
|
|
27978
28018
|
canActivate: [AuthGuardService],
|
|
27979
28019
|
canDeactivate: [ComponentDirtyGuard],
|
|
27980
|
-
data: ɵ0
|
|
28020
|
+
data: ɵ0$c
|
|
27981
28021
|
}
|
|
27982
28022
|
];
|
|
27983
28023
|
class AdminRoutingModule {
|
|
@@ -27987,27 +28027,27 @@ AdminRoutingModule.decorators = [
|
|
|
27987
28027
|
imports: [
|
|
27988
28028
|
SharedRoutingModule,
|
|
27989
28029
|
AdminModule,
|
|
27990
|
-
RouterModule.forChild(routes
|
|
28030
|
+
RouterModule.forChild(routes)
|
|
27991
28031
|
],
|
|
27992
28032
|
exports: [RouterModule]
|
|
27993
28033
|
},] }
|
|
27994
28034
|
];
|
|
27995
28035
|
|
|
27996
|
-
class EntityTestClass
|
|
28036
|
+
class EntityTestClass {
|
|
27997
28037
|
}
|
|
27998
|
-
const FAKE_ENTITIES
|
|
28038
|
+
const FAKE_ENTITIES = [
|
|
27999
28039
|
{ id: 1, label: 'AAA', name: 'Item A', description: 'Very long description A', comments: 'Very very long comments... again for A' },
|
|
28000
28040
|
{ id: 2, label: 'BBB', name: 'Item B', description: 'Very long description B', comments: 'Very very long comments... again for B' },
|
|
28001
28041
|
{ id: 3, label: 'CCC', name: 'Item C', description: 'Very long description C', comments: 'Very very long comments... again for C' }
|
|
28002
28042
|
];
|
|
28003
|
-
function deepCopy
|
|
28043
|
+
function deepCopy(values, size) {
|
|
28004
28044
|
if (isNil(size)) {
|
|
28005
|
-
return (values || FAKE_ENTITIES
|
|
28045
|
+
return (values || FAKE_ENTITIES).map(entity => Object.assign({}, entity));
|
|
28006
28046
|
}
|
|
28007
28047
|
let result = [];
|
|
28008
28048
|
let i = 1;
|
|
28009
28049
|
while (result.length < size) {
|
|
28010
|
-
result = result.concat((values || FAKE_ENTITIES
|
|
28050
|
+
result = result.concat((values || FAKE_ENTITIES).map(entity => {
|
|
28011
28051
|
const name = entity.name + ' #' + i;
|
|
28012
28052
|
return Object.assign(Object.assign({}, entity), { id: i++, name });
|
|
28013
28053
|
}));
|
|
@@ -28017,7 +28057,7 @@ function deepCopy$1(values, size) {
|
|
|
28017
28057
|
class AutocompleteTestPage {
|
|
28018
28058
|
constructor(formBuilder) {
|
|
28019
28059
|
this.formBuilder = formBuilder;
|
|
28020
|
-
this._items = deepCopy
|
|
28060
|
+
this._items = deepCopy(FAKE_ENTITIES, 100);
|
|
28021
28061
|
this._$items = new BehaviorSubject(undefined);
|
|
28022
28062
|
this.autocompleteFields = new MatAutocompleteConfigHolder();
|
|
28023
28063
|
this.memoryHide = false;
|
|
@@ -28062,7 +28102,7 @@ class AutocompleteTestPage {
|
|
|
28062
28102
|
});
|
|
28063
28103
|
// From items
|
|
28064
28104
|
this.autocompleteFields.add('entity-items-large', {
|
|
28065
|
-
items: FAKE_ENTITIES
|
|
28105
|
+
items: FAKE_ENTITIES.slice(),
|
|
28066
28106
|
attributes: ['label', 'name', 'description', 'comments'],
|
|
28067
28107
|
displayWith: this.entityToString
|
|
28068
28108
|
});
|
|
@@ -28094,14 +28134,14 @@ class AutocompleteTestPage {
|
|
|
28094
28134
|
loadData() {
|
|
28095
28135
|
return __awaiter(this, void 0, void 0, function* () {
|
|
28096
28136
|
const data = {
|
|
28097
|
-
entity: deepCopy
|
|
28098
|
-
farEntity: deepCopy
|
|
28137
|
+
entity: deepCopy(FAKE_ENTITIES)[0],
|
|
28138
|
+
farEntity: deepCopy(FAKE_ENTITIES)[2],
|
|
28099
28139
|
// This item is NOT in the items list => i should be displayed anyway
|
|
28100
28140
|
missingEntity: {
|
|
28101
28141
|
id: -1, label: '??', name: 'Missing item'
|
|
28102
28142
|
},
|
|
28103
|
-
disableEntity: deepCopy
|
|
28104
|
-
entities: deepCopy
|
|
28143
|
+
disableEntity: deepCopy(FAKE_ENTITIES)[2],
|
|
28144
|
+
entities: deepCopy(FAKE_ENTITIES)
|
|
28105
28145
|
};
|
|
28106
28146
|
this.form.setValue(data);
|
|
28107
28147
|
// Load observables
|
|
@@ -28251,13 +28291,13 @@ LatLongTestPage.ctorParameters = () => [
|
|
|
28251
28291
|
{ type: FormBuilder }
|
|
28252
28292
|
];
|
|
28253
28293
|
|
|
28254
|
-
const moment$
|
|
28294
|
+
const moment$7 = momentImported;
|
|
28255
28295
|
class SwipeTestPage {
|
|
28256
28296
|
constructor(formBuilder, dateFormatPipe) {
|
|
28257
28297
|
this.formBuilder = formBuilder;
|
|
28258
28298
|
this.dateFormatPipe = dateFormatPipe;
|
|
28259
28299
|
this.$dates = new BehaviorSubject(undefined);
|
|
28260
|
-
this._today = moment$
|
|
28300
|
+
this._today = moment$7().startOf('day');
|
|
28261
28301
|
this.form = formBuilder.group({
|
|
28262
28302
|
empty: [null, Validators.required],
|
|
28263
28303
|
date: [null, Validators.compose([Validators.required, SharedValidators.validDate])],
|
|
@@ -28270,7 +28310,7 @@ class SwipeTestPage {
|
|
|
28270
28310
|
ngOnInit() {
|
|
28271
28311
|
const dates = [];
|
|
28272
28312
|
for (let d = 0; d < 7; d++) {
|
|
28273
|
-
dates[d] = moment$
|
|
28313
|
+
dates[d] = moment$7(this._today).add(d - 3, 'day');
|
|
28274
28314
|
}
|
|
28275
28315
|
this.$dates.next(dates);
|
|
28276
28316
|
this.loadData();
|
|
@@ -28311,7 +28351,7 @@ SwipeTestPage.ctorParameters = () => [
|
|
|
28311
28351
|
{ type: DateFormatPipe }
|
|
28312
28352
|
];
|
|
28313
28353
|
|
|
28314
|
-
const moment$
|
|
28354
|
+
const moment$8 = momentImported;
|
|
28315
28355
|
class DateTimeTestPage {
|
|
28316
28356
|
constructor(platform, formBuilder, cd) {
|
|
28317
28357
|
this.platform = platform;
|
|
@@ -28345,7 +28385,7 @@ class DateTimeTestPage {
|
|
|
28345
28385
|
// Load the form with data
|
|
28346
28386
|
loadData() {
|
|
28347
28387
|
return __awaiter(this, void 0, void 0, function* () {
|
|
28348
|
-
const now = moment$
|
|
28388
|
+
const now = moment$8();
|
|
28349
28389
|
const data = {
|
|
28350
28390
|
empty: null,
|
|
28351
28391
|
emptyRequired: null,
|
|
@@ -28411,9 +28451,9 @@ DateTimeTestPage.ctorParameters = () => [
|
|
|
28411
28451
|
{ type: ChangeDetectorRef }
|
|
28412
28452
|
];
|
|
28413
28453
|
|
|
28414
|
-
class EntityTestClass {
|
|
28454
|
+
class EntityTestClass$1 {
|
|
28415
28455
|
}
|
|
28416
|
-
const FAKE_ENTITIES = [
|
|
28456
|
+
const FAKE_ENTITIES$1 = [
|
|
28417
28457
|
{ id: 1, label: 'AAA', name: 'Item A' },
|
|
28418
28458
|
{ id: 2, label: 'BBB', name: 'Item B' },
|
|
28419
28459
|
{ id: 3, label: 'CCC', name: 'Item C' },
|
|
@@ -28422,14 +28462,14 @@ const FAKE_ENTITIES = [
|
|
|
28422
28462
|
{ id: 6, label: 'FFF', name: 'Item F' },
|
|
28423
28463
|
{ id: 7, label: 'GGG', name: 'Item G' }
|
|
28424
28464
|
];
|
|
28425
|
-
function deepCopy(values, size) {
|
|
28465
|
+
function deepCopy$1(values, size) {
|
|
28426
28466
|
if (isNil(size)) {
|
|
28427
|
-
return (values || FAKE_ENTITIES).map(entity => Object.assign({}, entity));
|
|
28467
|
+
return (values || FAKE_ENTITIES$1).map(entity => Object.assign({}, entity));
|
|
28428
28468
|
}
|
|
28429
28469
|
let result = [];
|
|
28430
28470
|
let i = 1;
|
|
28431
28471
|
while (result.length < size) {
|
|
28432
|
-
result = result.concat((values || FAKE_ENTITIES).map(entity => {
|
|
28472
|
+
result = result.concat((values || FAKE_ENTITIES$1).map(entity => {
|
|
28433
28473
|
const name = entity.name + ' #' + i;
|
|
28434
28474
|
return Object.assign(Object.assign({}, entity), { id: i++, name });
|
|
28435
28475
|
}));
|
|
@@ -28439,7 +28479,7 @@ function deepCopy(values, size) {
|
|
|
28439
28479
|
class ChipsTestPage {
|
|
28440
28480
|
constructor(formBuilder) {
|
|
28441
28481
|
this.formBuilder = formBuilder;
|
|
28442
|
-
this._items = deepCopy(FAKE_ENTITIES, 100);
|
|
28482
|
+
this._items = deepCopy$1(FAKE_ENTITIES$1, 100);
|
|
28443
28483
|
this._$items = new BehaviorSubject(undefined);
|
|
28444
28484
|
this.autocompleteFields = new MatAutocompleteConfigHolder();
|
|
28445
28485
|
this.appearance = 'legacy';
|
|
@@ -28479,7 +28519,7 @@ class ChipsTestPage {
|
|
|
28479
28519
|
// Load the form with data
|
|
28480
28520
|
loadData() {
|
|
28481
28521
|
return __awaiter(this, void 0, void 0, function* () {
|
|
28482
|
-
const items = deepCopy(FAKE_ENTITIES);
|
|
28522
|
+
const items = deepCopy$1(FAKE_ENTITIES$1);
|
|
28483
28523
|
const data = {
|
|
28484
28524
|
entity: items.slice(0, 1),
|
|
28485
28525
|
entityInitial: items.slice(1, 2),
|
|
@@ -28595,7 +28635,7 @@ NumpadTestPage.ctorParameters = () => [
|
|
|
28595
28635
|
{ type: FormBuilder }
|
|
28596
28636
|
];
|
|
28597
28637
|
|
|
28598
|
-
const moment$
|
|
28638
|
+
const moment$9 = momentImported;
|
|
28599
28639
|
class DateTestPage {
|
|
28600
28640
|
constructor(formBuilder, cd) {
|
|
28601
28641
|
this.formBuilder = formBuilder;
|
|
@@ -28628,7 +28668,7 @@ class DateTestPage {
|
|
|
28628
28668
|
// Load the form with data
|
|
28629
28669
|
loadData() {
|
|
28630
28670
|
return __awaiter(this, void 0, void 0, function* () {
|
|
28631
|
-
const now = moment$
|
|
28671
|
+
const now = moment$9();
|
|
28632
28672
|
const nowAtMahe = now.clone().tz(this.timezone).startOf('day');
|
|
28633
28673
|
const data = {
|
|
28634
28674
|
empty: null,
|
|
@@ -28706,7 +28746,7 @@ const SHARED_MATERIAL_TESTING_PAGES = [
|
|
|
28706
28746
|
{ label: 'Shared directives', divider: true },
|
|
28707
28747
|
{ label: 'Badge icon directive', page: '/testing/shared/badge-icon' }
|
|
28708
28748
|
];
|
|
28709
|
-
const routes$
|
|
28749
|
+
const routes$1 = [
|
|
28710
28750
|
{
|
|
28711
28751
|
path: '',
|
|
28712
28752
|
pathMatch: 'full',
|
|
@@ -28763,7 +28803,7 @@ MaterialTestingModule.decorators = [
|
|
|
28763
28803
|
ReactiveFormsModule,
|
|
28764
28804
|
SharedMaterialModule,
|
|
28765
28805
|
TranslateModule.forChild(),
|
|
28766
|
-
RouterModule.forChild(routes$
|
|
28806
|
+
RouterModule.forChild(routes$1)
|
|
28767
28807
|
],
|
|
28768
28808
|
declarations: [
|
|
28769
28809
|
DateTimeTestPage,
|
|
@@ -28824,7 +28864,7 @@ ToastTestingPage.ctorParameters = () => [
|
|
|
28824
28864
|
{ type: TranslateService }
|
|
28825
28865
|
];
|
|
28826
28866
|
|
|
28827
|
-
const routes$
|
|
28867
|
+
const routes$2 = [
|
|
28828
28868
|
{
|
|
28829
28869
|
path: 'toast',
|
|
28830
28870
|
pathMatch: 'full',
|
|
@@ -28839,7 +28879,7 @@ ToastTestingModule.decorators = [
|
|
|
28839
28879
|
CommonModule,
|
|
28840
28880
|
IonicModule,
|
|
28841
28881
|
TranslateModule.forChild(),
|
|
28842
|
-
RouterModule.forChild(routes$
|
|
28882
|
+
RouterModule.forChild(routes$2)
|
|
28843
28883
|
],
|
|
28844
28884
|
declarations: [
|
|
28845
28885
|
ToastTestingPage
|
|
@@ -29103,7 +29143,7 @@ class TableTestPage extends AppTable {
|
|
|
29103
29143
|
console.debug('[test-table] Destroying table...');
|
|
29104
29144
|
super.ngOnDestroy();
|
|
29105
29145
|
this.stopTimer();
|
|
29106
|
-
this.dataService.
|
|
29146
|
+
this.dataService.stop();
|
|
29107
29147
|
}
|
|
29108
29148
|
restoreFilter() {
|
|
29109
29149
|
const json = this.settings.getPageSettings(this.settingsId, 'filter');
|
|
@@ -29129,6 +29169,7 @@ class TableTestPage extends AppTable {
|
|
|
29129
29169
|
this.data = this.generateData(0, TableTestPage.maxRowCount);
|
|
29130
29170
|
}
|
|
29131
29171
|
this.dataService.value = this.data;
|
|
29172
|
+
this.onRefresh.emit();
|
|
29132
29173
|
}
|
|
29133
29174
|
fetchMore(event) {
|
|
29134
29175
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -29293,7 +29334,7 @@ TextPopoverTestingPage.ctorParameters = () => [
|
|
|
29293
29334
|
{ type: PopoverController }
|
|
29294
29335
|
];
|
|
29295
29336
|
|
|
29296
|
-
const routes$
|
|
29337
|
+
const routes$4 = [
|
|
29297
29338
|
{
|
|
29298
29339
|
path: 'text-popover',
|
|
29299
29340
|
pathMatch: 'full',
|
|
@@ -29308,7 +29349,7 @@ TextPopoverTestingModule.decorators = [
|
|
|
29308
29349
|
CommonModule,
|
|
29309
29350
|
IonicModule,
|
|
29310
29351
|
TranslateModule.forChild(),
|
|
29311
|
-
RouterModule.forChild(routes$
|
|
29352
|
+
RouterModule.forChild(routes$4)
|
|
29312
29353
|
],
|
|
29313
29354
|
declarations: [
|
|
29314
29355
|
TextPopoverTestingPage
|
|
@@ -29325,7 +29366,7 @@ const CORE_TESTING_PAGES = [
|
|
|
29325
29366
|
{ label: 'Table', page: '/testing/core/table' },
|
|
29326
29367
|
{ label: 'Text popover', page: '/testing/core/text-popover' }
|
|
29327
29368
|
];
|
|
29328
|
-
const routes$
|
|
29369
|
+
const routes$5 = [
|
|
29329
29370
|
{
|
|
29330
29371
|
path: '',
|
|
29331
29372
|
pathMatch: 'full',
|
|
@@ -29349,7 +29390,7 @@ CoreTestingModule.decorators = [
|
|
|
29349
29390
|
imports: [
|
|
29350
29391
|
CommonModule,
|
|
29351
29392
|
TranslateModule.forChild(),
|
|
29352
|
-
RouterModule.forChild(routes$
|
|
29393
|
+
RouterModule.forChild(routes$5),
|
|
29353
29394
|
// Sub modules
|
|
29354
29395
|
TableTestingModule,
|
|
29355
29396
|
TextPopoverTestingModule
|
|
@@ -29652,7 +29693,7 @@ UserEventTestService.ctorParameters = () => [
|
|
|
29652
29693
|
{ type: Environment, decorators: [{ type: Optional }, { type: Inject, args: [ENVIRONMENT,] }] }
|
|
29653
29694
|
];
|
|
29654
29695
|
|
|
29655
|
-
const moment = momentImported;
|
|
29696
|
+
const moment$a = momentImported;
|
|
29656
29697
|
class UserEventTestingPage {
|
|
29657
29698
|
constructor(userEventService, router, alertController, translateService) {
|
|
29658
29699
|
this.userEventService = userEventService;
|
|
@@ -29713,7 +29754,7 @@ class UserEventTestingPage {
|
|
|
29713
29754
|
type: 'message',
|
|
29714
29755
|
level: 'INFO',
|
|
29715
29756
|
message: 'message test message test message test message test message test message test message test message test',
|
|
29716
|
-
creationDate: moment(),
|
|
29757
|
+
creationDate: moment$a(),
|
|
29717
29758
|
}));
|
|
29718
29759
|
}
|
|
29719
29760
|
addError() {
|
|
@@ -29723,7 +29764,7 @@ class UserEventTestingPage {
|
|
|
29723
29764
|
type: 'upload',
|
|
29724
29765
|
level: 'ERROR',
|
|
29725
29766
|
message: 'message error',
|
|
29726
|
-
creationDate: moment(),
|
|
29767
|
+
creationDate: moment$a(),
|
|
29727
29768
|
}));
|
|
29728
29769
|
}
|
|
29729
29770
|
addWarning() {
|
|
@@ -29733,7 +29774,7 @@ class UserEventTestingPage {
|
|
|
29733
29774
|
type: 'download',
|
|
29734
29775
|
level: 'WARNING',
|
|
29735
29776
|
message: 'message warning',
|
|
29736
|
-
creationDate: moment(),
|
|
29777
|
+
creationDate: moment$a(),
|
|
29737
29778
|
}));
|
|
29738
29779
|
}
|
|
29739
29780
|
addDebug() {
|
|
@@ -29743,7 +29784,7 @@ class UserEventTestingPage {
|
|
|
29743
29784
|
type: 'debug',
|
|
29744
29785
|
level: 'DEBUG',
|
|
29745
29786
|
message: 'message DEBUG',
|
|
29746
|
-
creationDate: moment(),
|
|
29787
|
+
creationDate: moment$a(),
|
|
29747
29788
|
}));
|
|
29748
29789
|
}
|
|
29749
29790
|
addNotificationWithLink() {
|
|
@@ -29753,7 +29794,7 @@ class UserEventTestingPage {
|
|
|
29753
29794
|
type: 'message',
|
|
29754
29795
|
level: 'INFO',
|
|
29755
29796
|
message: 'message with link',
|
|
29756
|
-
creationDate: moment(),
|
|
29797
|
+
creationDate: moment$a(),
|
|
29757
29798
|
actions: [{
|
|
29758
29799
|
name: 'click here',
|
|
29759
29800
|
iconRef: {
|
|
@@ -29770,7 +29811,7 @@ class UserEventTestingPage {
|
|
|
29770
29811
|
type: 'message',
|
|
29771
29812
|
level: 'INFO',
|
|
29772
29813
|
message: 'message with action',
|
|
29773
|
-
creationDate: moment(),
|
|
29814
|
+
creationDate: moment$a(),
|
|
29774
29815
|
actions: [
|
|
29775
29816
|
{
|
|
29776
29817
|
name: 'click here',
|
|
@@ -29842,7 +29883,7 @@ class UserEventTestingPage {
|
|
|
29842
29883
|
type: 'message',
|
|
29843
29884
|
level: 'INFO',
|
|
29844
29885
|
message: 'message with action',
|
|
29845
|
-
creationDate: moment(),
|
|
29886
|
+
creationDate: moment$a(),
|
|
29846
29887
|
actions: [
|
|
29847
29888
|
{
|
|
29848
29889
|
default: true,
|
|
@@ -29896,7 +29937,7 @@ const SOCIAL_TESTING_PAGES = [
|
|
|
29896
29937
|
{ label: 'User event', page: '/testing/social/user-event' },
|
|
29897
29938
|
{ label: 'Job progression', page: '/testing/social/job-progression' }
|
|
29898
29939
|
];
|
|
29899
|
-
const routes = [
|
|
29940
|
+
const routes$6 = [
|
|
29900
29941
|
{
|
|
29901
29942
|
path: 'job-progression',
|
|
29902
29943
|
pathMatch: 'full',
|
|
@@ -29915,7 +29956,7 @@ SocialTestingModule.decorators = [
|
|
|
29915
29956
|
imports: [
|
|
29916
29957
|
CommonModule,
|
|
29917
29958
|
TranslateModule.forChild(),
|
|
29918
|
-
RouterModule.forChild(routes),
|
|
29959
|
+
RouterModule.forChild(routes$6),
|
|
29919
29960
|
JobTestingModule,
|
|
29920
29961
|
UserEventTestingModule
|
|
29921
29962
|
],
|
|
@@ -29928,5 +29969,5 @@ SocialTestingModule.decorators = [
|
|
|
29928
29969
|
* Generated bundle index. Do not edit.
|
|
29929
29970
|
*/
|
|
29930
29971
|
|
|
29931
|
-
export { APP_ABOUT_DEVELOPERS, APP_ABOUT_PARTNERS, APP_CONFIG_OPTIONS, APP_FORM_ERROR_I18N_KEYS, APP_GRAPHQL_TYPE_POLICIES, APP_HOME_BUTTONS, APP_LOCALES, APP_LOCAL_SETTINGS, APP_LOCAL_SETTINGS_OPTIONS, APP_LOCAL_STORAGE_TYPE_POLICIES, APP_MENU_ITEMS, APP_MENU_OPTIONS, APP_TESTING_PAGES, AboutModal, AbstractUserEventService, Account, AccountPage, AccountService, AccountToStringPipe, ActionsColumnComponent, AdminModule, AdminRoutingModule, Alerts, AndroidOsEnvironment, AnimationState, AppEditor, AppEditorOptions, AppEntityEditor, AppEntityEditorModal, AppEntityEditorModalOptions, AppForm, AppFormField, AppFormProvider, AppFormUtils, AppGestureConfig, AppGraphQLModule, AppHelpModal, AppIconComponent, AppIconModule, AppInMemoryTable, AppInstallUpgradeCard, AppListForm, AppLoadingSpinner, AppMenuModule, AppNullForm, AppPropertiesForm, AppTabEditor, AppTabEditorOptions, AppTable, AppTableUtils, AppUserEventNotificationIcon, AppValidatorService, AppendToInputDirective, ArrayFilterPipe, ArrayFirstPipe, ArrayIncludesPipe, ArrayLengthPipe, ArrayPluckPipe, AudioProvider, AuthForm, AuthGuardService, AuthModal, AutoTitleDirective, AutocompleteTestPage, AutofocusDirective, Base58, BaseEntityService, BaseGraphqlService, BaseGraphqlServiceOptions, BaseReferential, Beans, CORE_CONFIG_OPTIONS, CORE_TESTING_PAGES, CellValueChangeListener, ChipsTestPage, Color, ColorScale, ComponentDirtyGuard, ConfigService, Configuration, CoreModule, CoreTestingModule, CryptoService, CsvUtils, DATE_ISO_PATTERN, DATE_PATTERN, DATE_UNIX_MS_TIMESTAMP, DATE_UNIX_TIMESTAMP, DEFAULT_MENU_SHOW_WHEN, DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLACEHOLDER_CHAR, DEFAULT_REQUIRED_COLUMNS, DateDiffDurationPipe, DateFormatPipe, DateFromNowPipe, DateTimeTestPage, DateUtils, Department, DepartmentToStringPipe, DragAndDropDirective, DurationPipe, ENTITIES_STORAGE_KEY_PREFIX, ENVIRONMENT, EmptyArrayPipe,
|
|
29972
|
+
export { APP_ABOUT_DEVELOPERS, APP_ABOUT_PARTNERS, APP_CONFIG_OPTIONS, APP_FORM_ERROR_I18N_KEYS, APP_GRAPHQL_TYPE_POLICIES, APP_HOME_BUTTONS, APP_LOCALES, APP_LOCAL_SETTINGS, APP_LOCAL_SETTINGS_OPTIONS, APP_LOCAL_STORAGE_TYPE_POLICIES, APP_MENU_ITEMS, APP_MENU_OPTIONS, APP_TESTING_PAGES, AboutModal, AbstractUserEventService, Account, AccountPage, AccountService, AccountToStringPipe, ActionsColumnComponent, AdminModule, AdminRoutingModule, Alerts, AndroidOsEnvironment, AnimationState, AppEditor, AppEditorOptions, AppEntityEditor, AppEntityEditorModal, AppEntityEditorModalOptions, AppForm, AppFormField, AppFormProvider, AppFormUtils, AppGestureConfig, AppGraphQLModule, AppHelpModal, AppIconComponent, AppIconModule, AppInMemoryTable, AppInstallUpgradeCard, AppListForm, AppLoadingSpinner, AppMenuModule, AppNullForm, AppPropertiesForm, AppTabEditor, AppTabEditorOptions, AppTable, AppTableUtils, AppUserEventNotificationIcon, AppValidatorService, AppendToInputDirective, ArrayFilterPipe, ArrayFirstPipe, ArrayIncludesPipe, ArrayLengthPipe, ArrayPluckPipe, AudioProvider, AuthForm, AuthGuardService, AuthModal, AutoTitleDirective, AutocompleteTestPage, AutofocusDirective, Base58, BaseEntityService, BaseGraphqlService, BaseGraphqlServiceOptions, BaseReferential, Beans, CORE_CONFIG_OPTIONS, CORE_TESTING_PAGES, CellValueChangeListener, ChipsTestPage, Color, ColorScale, ComponentDirtyGuard, ConfigService, Configuration, CoreModule, CoreTestingModule, CryptoService, CsvUtils, DATE_ISO_PATTERN, DATE_PATTERN, DATE_UNIX_MS_TIMESTAMP, DATE_UNIX_TIMESTAMP, DEFAULT_MENU_SHOW_WHEN, DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLACEHOLDER_CHAR, DEFAULT_REQUIRED_COLUMNS, DateDiffDurationPipe, DateFormatPipe, DateFromNowPipe, DateTimeTestPage, DateUtils, Department, DepartmentToStringPipe, DragAndDropDirective, DurationPipe, ENTITIES_STORAGE_KEY_PREFIX, ENVIRONMENT, EmptyArrayPipe, EntitiesStorage, EntitiesTableDataSource, Entity, EntityClass, EntityClasses, EntityFilter, EntityFilterUtils, EntityMetadataComponent, EntityStore, EntityUtils, Environment, ErrorCodes, EvenPipe, FileResponse, FileService, FileSizePipe, FilesUtils, FormArrayHelper, FormButtonsBarComponent, FormButtonsBarToken, FormErrorTranslatePipe, FormErrorTranslator, FormFieldValuesHolder, FormGetArrayPipe, FormGetControlPipe, FormGetGroupPipe, FormGetPipe, FormGetValuePipe, Fragments$1 as Fragments, GraphqlService, HAMMER_PRESS_TIME, HAMMER_TAP_TIME, HighlightPipe, HomePage, Hotkeys, HotkeysDialogComponent, IMAGE_DEFAULTS, ImagesUtils, InMemoryEntitiesService, IsLoginAccountPipe, IsNilOrBlankPipe, IsNotNilOrBlankPipe, IsNotOnFieldModePipe, IsOnFieldModePipe, Job, JobModule, JobProgression, JobProgressionComponent, JobProgressionService, JobProgressionServiceToken, JobProgressionTestService, JobProgressionTestingPage, JobTestingModule, JobUtils, KEYBOARD_HIDE_DELAY_MS, LAT_LONG_DEFAULT_MAX_DECIMALS, LAT_LONG_PATTERNS, LatLongFormatPipe, LatLongTestPage, LatitudeFormatPipe, LocalSettingsService, LongitudeFormatPipe, MINIFY_ENTITY_FOR_LOCAL_STORAGE, MINIFY_ENTITY_FOR_POD, MOMENT_NO_TIME_PROPERTY, MapGetPipe, MapKeysPipe, MapValuesPipe, MatAutocompleteConfigHolder, MatAutocompleteField, MatBadgeIconDirective, MatBooleanField, MatChipsField, MatDate, MatDateShort, MatDateTime, MatDuration, MatLatLongField, MatNumpadComponent, MatNumpadContainerComponent, MatNumpadContent, MatPaginatorI18n, MatStepperI18n, MatSwipeField, MaterialTestingModule, MathAbsPipe, MenuComponent, MenuItems, MenuOptions, MenuService, Message, MessageFilter, MessageForm, MessageModal, MessageModule, MessageService, MessageTypeList, MessageTypes, MimeTypes, ModalToolbarComponent, NetworkService, NgInitDirective, NgVarDirective, NotEmptyArrayPipe, NumberFormatPipe, NumpadDirective, OddPipe, PRIORITIZED_AUTHORITIES, PUBKEY_REGEXP, Peer, Person, PersonFilter, PersonFragments, PersonService, PersonToStringPipe, PersonUtils, PersonValidatorService, PlatformService, ProgressBarService, ProgressInterceptor, PropertyFormatPipe, PropertyGetPipe, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, Referential, ReferentialFilter, ReferentialRef, ReferentialUtils, ReferentialValidatorService, RegisterConfirmPage, ResizableComponent, ResizableDirective, ResizableModule, SETTINGS_DISPLAY_COLUMNS, SETTINGS_FILTER, SETTINGS_PAGE_SIZE, SETTINGS_SORTED_COLUMN, SETTINGS_STORAGE_KEY, SETTINGS_TRANSIENT_PROPERTIES, SHARED_MATERIAL_TESTING_PAGES, SHARED_TESTING_PAGES, SOCIAL_TESTING_PAGES, SPACE_PLACEHOLDER_CHAR, SelectPeerModal, ServerErrorCodes, SettingsPage, SharedAsyncValidators, SharedDirectivesModule, SharedFormArrayValidators, SharedFormGroupValidators, SharedHotkeysModule, SharedMatAutocompleteModule, SharedMatBadgeIconModule, SharedMatBooleanModule, SharedMatChipsModule, SharedMatDateTimeModule, SharedMatDurationModule, SharedMatLatLongModule, SharedMatNumpadModule, SharedMatSwipeModule, SharedMaterialModule, SharedModule, SharedPipesModule, SharedRoutingModule, SharedTestingModule, SharedTestsPage, SharedValidators, SocialErrorCodes, SocialModule, SocialModuleOptionsToken, SocialTestingModule, Software, StartableService, StatusById, StatusIds, StatusList, StrIncludesPipe, StrLengthPipe, SwipeTestPage, TableSelectColumnsComponent, TableTestPage, TableTestingModule, TextForm, TextPopover, TextPopoverTestingModule, TextPopoverTestingPage, ToStringPipe, Toasts, ToolbarComponent, ToolbarToken, TranslatablePipe, TranslateContextPipe, TranslateContextService, USER_EVENT_SERVICE, UploadFile, UploadFileComponent, UploadFilePopover, UploadFileTestingModule, UploadFileTestingPage, UriUtils, UserEventModule, UserEventTestService, UserEventTestingModule, UserEventTestingPage, UserSettings, UsersPage, accountToString, adaptValueToControl, addValueInArray, arrayDistinct, arrayGroupBy, arraySize, asInputElement, canHaveFocus, capitalizeFirstLetter, chainPromises, changeCaseToUnderscore, clearValueInArray, copyEntity2Form, createPromiseEvent, createPromiseEventEmitter, departmentToString, departmentsToString, disableControls, emitPromiseEvent, entityToString, equals, equalsOrNil, escapeRegExp, fadeInAnimation, fadeInOutAnimation, filterFalse, filterNotNil, filterNumberInput, filterTrue, firstArrayValue, firstFalse, firstFalsePromise, firstNotNil, firstNotNilPromise, firstTrue, firstTruePromise, focusInput, focusNextInput, focusPreviousInput, formatLatitude, formatLongitude, fromDateISOString, fromScrollEndEvent, fromUnixMsTimestamp, fromUnixTimestamp, getCaretPosition, getColorContrast, getColorShade, getColorTint, getConnectionType, getControlFromPath, getFocusableInputElements, getFormErrors, getFormValueFromEntity, getProperty, getPropertyByPath, getPropertyByPathAsString, getRandomImage, hexToRgb, hexToRgbArray, isAndroid, isBlankString, isControlHasInput, isCordova, isEmptyArray, isIOS, isInputElement, isInstanceOf, isInt, isMobile, isNil, isNilOrBlank, isNilOrNaN, isNotEmptyArray, isNotNil, isNotNilBoolean, isNotNilOrBlank, isNotNilOrNaN, isNotNilString, isNumber, isNumberRange, isProgressEvent, isResponseEvent, isTouchUi, isWindows, joinProperties, joinPropertiesPath, logFormErrors, markAllAsTouched, markAsUntouched, markControlAsTouched, markFormGroupAsTouched, matchMedia, matchUpperCase, mergeLoadResult, mixHex, moment$5 as moment, moveInputCaretToSeparator, noTrailingSlash, notNilOrDefault, nullIfUndefined, parseLatitudeOrLongitude, propertiesPathComparator, propertyComparator, propertyPathComparator, referentialToString, referentialsToString, remove, removeAll, removeDiacritics, removeDuplicatesFromArray, removeEnd, removeValueInArray, replaceAll, resetCalculatedValue, resizeArray, rgbArrayToHex, rgbToHex, round, scrollFactory, selectInputContent, selectInputRange, setCalculatedValue, setTabIndex, sleep, slideInOutAnimation, slideUpDownAnimation, sort, splitById, splitByProperty, startsWithUpperCase, suggestFromArray, suggestFromStringArray, tabindexComparator, testUserAgent, toBoolean, toDateISOString, toDuration, toFloat, toInt, toNotNil, toNumber, trimEmptyToNull, tz, uncapitalizeFirstLetter, updateValueAndValidity, waitFor, waitForFalse, waitForTrue, waitIdle, waitWhilePending, ɵ0, CustomReuseStrategy as ɵa, MatNumpadDomService as ɵb, isFocusableElement as ɵc, RegisterForm as ɵd, AccountValidatorService as ɵe, RegisterModal as ɵf, UserSettingsValidatorService as ɵg, LocalSettingsValidatorService as ɵh, AppUpdateOfflineModeCard as ɵi, UserEventNotificationList as ɵj, JobProgressionList as ɵk, DateTestPage as ɵl, NumpadTestPage as ɵm, MatBadgeIconTestPage as ɵn, ToastTestingModule as ɵo, ToastTestingPage as ɵp };
|
|
29932
29973
|
//# sourceMappingURL=sumaris-net.ngx-components.js.map
|