@sumaris-net/ngx-components 1.23.9 → 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 +450 -430
- 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 +6 -4
- package/esm2015/src/app/core/table/testing/table.testing.js +2 -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 +381 -348
- 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/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/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
|
}
|
|
@@ -23218,6 +23246,7 @@ class AppTable {
|
|
|
23218
23246
|
// Stop event
|
|
23219
23247
|
event === null || event === void 0 ? void 0 : event.stopPropagation();
|
|
23220
23248
|
// Confirmation edition or creation
|
|
23249
|
+
// TODO: add await ?
|
|
23221
23250
|
const confirmed = row.confirmEditCreate();
|
|
23222
23251
|
if (confirmed) {
|
|
23223
23252
|
// If edit finished, forget edited row
|
|
@@ -23236,6 +23265,7 @@ class AppTable {
|
|
|
23236
23265
|
}
|
|
23237
23266
|
if (row.validator) {
|
|
23238
23267
|
// If pending: Wait end of validation, then loop
|
|
23268
|
+
// TODO: remove when using async isValid() function
|
|
23239
23269
|
if (row.validator.pending) {
|
|
23240
23270
|
AppFormUtils.waitWhilePending(row.validator).then(() => this.confirmEditCreate(event, row));
|
|
23241
23271
|
return false;
|
|
@@ -23386,7 +23416,7 @@ class AppTable {
|
|
|
23386
23416
|
this.selection.clear();
|
|
23387
23417
|
}
|
|
23388
23418
|
else {
|
|
23389
|
-
const rows =
|
|
23419
|
+
const rows = this._dataSource.getRows();
|
|
23390
23420
|
rows.forEach(row => this.selection.select(row));
|
|
23391
23421
|
}
|
|
23392
23422
|
});
|
|
@@ -23525,7 +23555,7 @@ class AppTable {
|
|
|
23525
23555
|
if (data === undefined)
|
|
23526
23556
|
return Promise.resolve(false);
|
|
23527
23557
|
yield this.waitIdle();
|
|
23528
|
-
const row =
|
|
23558
|
+
const row = this.dataSource.getRows()
|
|
23529
23559
|
.find(row => this.equals(row.currentData, data));
|
|
23530
23560
|
if (!row)
|
|
23531
23561
|
return false;
|
|
@@ -23752,7 +23782,7 @@ class AppTable {
|
|
|
23752
23782
|
canCancelRows(rows, opts) {
|
|
23753
23783
|
return __awaiter(this, void 0, void 0, function* () {
|
|
23754
23784
|
// Get dirty rows
|
|
23755
|
-
rows = rows ||
|
|
23785
|
+
rows = rows || this.dataSource.getRows().filter(row => { var _a; return (_a = row.validator) === null || _a === void 0 ? void 0 : _a.dirty; });
|
|
23756
23786
|
if (isEmptyArray(rows))
|
|
23757
23787
|
return true; // No dirty: OK
|
|
23758
23788
|
// Check using emitter
|
|
@@ -24532,13 +24562,14 @@ class AppEditor {
|
|
|
24532
24562
|
}
|
|
24533
24563
|
}
|
|
24534
24564
|
markAsLoaded(opts) {
|
|
24535
|
-
var _a;
|
|
24565
|
+
var _a, _b;
|
|
24536
24566
|
if (this.loadingSubject.value) {
|
|
24537
24567
|
this.loadingSubject.next(false);
|
|
24538
24568
|
if (!opts || opts.onlySelf !== true) {
|
|
24539
|
-
// Emit to children forms
|
|
24540
|
-
//
|
|
24541
|
-
(_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));
|
|
24542
24573
|
}
|
|
24543
24574
|
if (!opts || opts.emitEvent !== false) {
|
|
24544
24575
|
this.markForCheck();
|
|
@@ -24676,39 +24707,41 @@ class AppEditor {
|
|
|
24676
24707
|
return __awaiter(this, void 0, void 0, function* () {
|
|
24677
24708
|
if (!this.dirty)
|
|
24678
24709
|
return true;
|
|
24679
|
-
let
|
|
24680
|
-
|
|
24681
|
-
|
|
24682
|
-
|
|
24683
|
-
|
|
24684
|
-
|
|
24685
|
-
|
|
24686
|
-
|
|
24687
|
-
|
|
24688
|
-
|
|
24689
|
-
|
|
24690
|
-
|
|
24691
|
-
|
|
24692
|
-
|
|
24693
|
-
|
|
24694
|
-
|
|
24695
|
-
|
|
24696
|
-
|
|
24697
|
-
|
|
24698
|
-
|
|
24699
|
-
|
|
24700
|
-
|
|
24701
|
-
|
|
24702
|
-
|
|
24703
|
-
|
|
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
|
+
}
|
|
24704
24737
|
}
|
|
24705
|
-
|
|
24706
|
-
|
|
24707
|
-
|
|
24708
|
-
|
|
24709
|
-
|
|
24710
|
-
|
|
24711
|
-
|
|
24738
|
+
]
|
|
24739
|
+
});
|
|
24740
|
+
yield alert.present();
|
|
24741
|
+
yield alert.onDidDismiss();
|
|
24742
|
+
if (!confirmed) {
|
|
24743
|
+
return !cancel;
|
|
24744
|
+
}
|
|
24712
24745
|
}
|
|
24713
24746
|
return yield this.save(event, opts);
|
|
24714
24747
|
});
|
|
@@ -26104,7 +26137,7 @@ const SocialErrorCodes = {
|
|
|
26104
26137
|
SUBSCRIBE_JOB_PROGRESSION_ERROR: 50010
|
|
26105
26138
|
};
|
|
26106
26139
|
|
|
26107
|
-
const moment$
|
|
26140
|
+
const moment$6 = momentImported;
|
|
26108
26141
|
const USER_EVENT_SERVICE = new InjectionToken('UserEventService');
|
|
26109
26142
|
class AbstractUserEventService extends BaseGraphqlService {
|
|
26110
26143
|
constructor(graphql, accountService, network, translate, options) {
|
|
@@ -26470,7 +26503,7 @@ class AbstractUserEventService extends BaseGraphqlService {
|
|
|
26470
26503
|
}
|
|
26471
26504
|
resetCount() {
|
|
26472
26505
|
this._countSubject.next(undefined);
|
|
26473
|
-
this.resetCountDate = moment$
|
|
26506
|
+
this.resetCountDate = moment$6();
|
|
26474
26507
|
// restart listening count changes
|
|
26475
26508
|
this.startListenCountChanges();
|
|
26476
26509
|
}
|
|
@@ -26530,7 +26563,7 @@ class AbstractUserEventService extends BaseGraphqlService {
|
|
|
26530
26563
|
if (!userEvents.length)
|
|
26531
26564
|
return;
|
|
26532
26565
|
// set read date
|
|
26533
|
-
userEvents.forEach(userEvent => userEvent.readDate = moment$
|
|
26566
|
+
userEvents.forEach(userEvent => userEvent.readDate = moment$6());
|
|
26534
26567
|
// split local/remote entities
|
|
26535
26568
|
const localEntities = userEvents.filter(userEvent => !userEvent.id || userEvent.id < 0);
|
|
26536
26569
|
const remoteEntities = userEvents.filter(userEvent => userEvent.id > 0);
|
|
@@ -27505,7 +27538,7 @@ class MessageService extends BaseGraphqlService {
|
|
|
27505
27538
|
});
|
|
27506
27539
|
}
|
|
27507
27540
|
}
|
|
27508
|
-
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" });
|
|
27509
27542
|
MessageService.decorators = [
|
|
27510
27543
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
27511
27544
|
];
|
|
@@ -27714,7 +27747,7 @@ class PersonService extends BaseEntityService {
|
|
|
27714
27747
|
return target;
|
|
27715
27748
|
}
|
|
27716
27749
|
}
|
|
27717
|
-
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" });
|
|
27718
27751
|
PersonService.decorators = [
|
|
27719
27752
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
27720
27753
|
];
|
|
@@ -27745,7 +27778,7 @@ class PersonValidatorService {
|
|
|
27745
27778
|
return this.formBuilder.group(formConfig);
|
|
27746
27779
|
}
|
|
27747
27780
|
}
|
|
27748
|
-
PersonValidatorService.ɵprov =
|
|
27781
|
+
PersonValidatorService.ɵprov = ɵɵdefineInjectable({ factory: function PersonValidatorService_Factory() { return new PersonValidatorService(ɵɵinject(FormBuilder), ɵɵinject(AccountValidatorService)); }, token: PersonValidatorService, providedIn: "root" });
|
|
27749
27782
|
PersonValidatorService.decorators = [
|
|
27750
27783
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
27751
27784
|
];
|
|
@@ -27923,7 +27956,7 @@ class UsersPage extends AppTable {
|
|
|
27923
27956
|
UsersPage.decorators = [
|
|
27924
27957
|
{ type: Component, args: [{
|
|
27925
27958
|
selector: 'app-users-table',
|
|
27926
|
-
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",
|
|
27927
27960
|
providers: [
|
|
27928
27961
|
{ provide: ValidatorService, useExisting: PersonValidatorService }
|
|
27929
27962
|
],
|
|
@@ -27974,17 +28007,17 @@ AdminModule.decorators = [
|
|
|
27974
28007
|
];
|
|
27975
28008
|
AdminModule.ctorParameters = () => [];
|
|
27976
28009
|
|
|
27977
|
-
const ɵ0 = {
|
|
28010
|
+
const ɵ0$c = {
|
|
27978
28011
|
profile: 'ADMIN'
|
|
27979
28012
|
};
|
|
27980
|
-
const routes
|
|
28013
|
+
const routes = [
|
|
27981
28014
|
{
|
|
27982
28015
|
path: 'users',
|
|
27983
28016
|
pathMatch: 'full',
|
|
27984
28017
|
component: UsersPage,
|
|
27985
28018
|
canActivate: [AuthGuardService],
|
|
27986
28019
|
canDeactivate: [ComponentDirtyGuard],
|
|
27987
|
-
data: ɵ0
|
|
28020
|
+
data: ɵ0$c
|
|
27988
28021
|
}
|
|
27989
28022
|
];
|
|
27990
28023
|
class AdminRoutingModule {
|
|
@@ -27994,27 +28027,27 @@ AdminRoutingModule.decorators = [
|
|
|
27994
28027
|
imports: [
|
|
27995
28028
|
SharedRoutingModule,
|
|
27996
28029
|
AdminModule,
|
|
27997
|
-
RouterModule.forChild(routes
|
|
28030
|
+
RouterModule.forChild(routes)
|
|
27998
28031
|
],
|
|
27999
28032
|
exports: [RouterModule]
|
|
28000
28033
|
},] }
|
|
28001
28034
|
];
|
|
28002
28035
|
|
|
28003
|
-
class EntityTestClass
|
|
28036
|
+
class EntityTestClass {
|
|
28004
28037
|
}
|
|
28005
|
-
const FAKE_ENTITIES
|
|
28038
|
+
const FAKE_ENTITIES = [
|
|
28006
28039
|
{ id: 1, label: 'AAA', name: 'Item A', description: 'Very long description A', comments: 'Very very long comments... again for A' },
|
|
28007
28040
|
{ id: 2, label: 'BBB', name: 'Item B', description: 'Very long description B', comments: 'Very very long comments... again for B' },
|
|
28008
28041
|
{ id: 3, label: 'CCC', name: 'Item C', description: 'Very long description C', comments: 'Very very long comments... again for C' }
|
|
28009
28042
|
];
|
|
28010
|
-
function deepCopy
|
|
28043
|
+
function deepCopy(values, size) {
|
|
28011
28044
|
if (isNil(size)) {
|
|
28012
|
-
return (values || FAKE_ENTITIES
|
|
28045
|
+
return (values || FAKE_ENTITIES).map(entity => Object.assign({}, entity));
|
|
28013
28046
|
}
|
|
28014
28047
|
let result = [];
|
|
28015
28048
|
let i = 1;
|
|
28016
28049
|
while (result.length < size) {
|
|
28017
|
-
result = result.concat((values || FAKE_ENTITIES
|
|
28050
|
+
result = result.concat((values || FAKE_ENTITIES).map(entity => {
|
|
28018
28051
|
const name = entity.name + ' #' + i;
|
|
28019
28052
|
return Object.assign(Object.assign({}, entity), { id: i++, name });
|
|
28020
28053
|
}));
|
|
@@ -28024,7 +28057,7 @@ function deepCopy$1(values, size) {
|
|
|
28024
28057
|
class AutocompleteTestPage {
|
|
28025
28058
|
constructor(formBuilder) {
|
|
28026
28059
|
this.formBuilder = formBuilder;
|
|
28027
|
-
this._items = deepCopy
|
|
28060
|
+
this._items = deepCopy(FAKE_ENTITIES, 100);
|
|
28028
28061
|
this._$items = new BehaviorSubject(undefined);
|
|
28029
28062
|
this.autocompleteFields = new MatAutocompleteConfigHolder();
|
|
28030
28063
|
this.memoryHide = false;
|
|
@@ -28069,7 +28102,7 @@ class AutocompleteTestPage {
|
|
|
28069
28102
|
});
|
|
28070
28103
|
// From items
|
|
28071
28104
|
this.autocompleteFields.add('entity-items-large', {
|
|
28072
|
-
items: FAKE_ENTITIES
|
|
28105
|
+
items: FAKE_ENTITIES.slice(),
|
|
28073
28106
|
attributes: ['label', 'name', 'description', 'comments'],
|
|
28074
28107
|
displayWith: this.entityToString
|
|
28075
28108
|
});
|
|
@@ -28101,14 +28134,14 @@ class AutocompleteTestPage {
|
|
|
28101
28134
|
loadData() {
|
|
28102
28135
|
return __awaiter(this, void 0, void 0, function* () {
|
|
28103
28136
|
const data = {
|
|
28104
|
-
entity: deepCopy
|
|
28105
|
-
farEntity: deepCopy
|
|
28137
|
+
entity: deepCopy(FAKE_ENTITIES)[0],
|
|
28138
|
+
farEntity: deepCopy(FAKE_ENTITIES)[2],
|
|
28106
28139
|
// This item is NOT in the items list => i should be displayed anyway
|
|
28107
28140
|
missingEntity: {
|
|
28108
28141
|
id: -1, label: '??', name: 'Missing item'
|
|
28109
28142
|
},
|
|
28110
|
-
disableEntity: deepCopy
|
|
28111
|
-
entities: deepCopy
|
|
28143
|
+
disableEntity: deepCopy(FAKE_ENTITIES)[2],
|
|
28144
|
+
entities: deepCopy(FAKE_ENTITIES)
|
|
28112
28145
|
};
|
|
28113
28146
|
this.form.setValue(data);
|
|
28114
28147
|
// Load observables
|
|
@@ -28258,13 +28291,13 @@ LatLongTestPage.ctorParameters = () => [
|
|
|
28258
28291
|
{ type: FormBuilder }
|
|
28259
28292
|
];
|
|
28260
28293
|
|
|
28261
|
-
const moment$
|
|
28294
|
+
const moment$7 = momentImported;
|
|
28262
28295
|
class SwipeTestPage {
|
|
28263
28296
|
constructor(formBuilder, dateFormatPipe) {
|
|
28264
28297
|
this.formBuilder = formBuilder;
|
|
28265
28298
|
this.dateFormatPipe = dateFormatPipe;
|
|
28266
28299
|
this.$dates = new BehaviorSubject(undefined);
|
|
28267
|
-
this._today = moment$
|
|
28300
|
+
this._today = moment$7().startOf('day');
|
|
28268
28301
|
this.form = formBuilder.group({
|
|
28269
28302
|
empty: [null, Validators.required],
|
|
28270
28303
|
date: [null, Validators.compose([Validators.required, SharedValidators.validDate])],
|
|
@@ -28277,7 +28310,7 @@ class SwipeTestPage {
|
|
|
28277
28310
|
ngOnInit() {
|
|
28278
28311
|
const dates = [];
|
|
28279
28312
|
for (let d = 0; d < 7; d++) {
|
|
28280
|
-
dates[d] = moment$
|
|
28313
|
+
dates[d] = moment$7(this._today).add(d - 3, 'day');
|
|
28281
28314
|
}
|
|
28282
28315
|
this.$dates.next(dates);
|
|
28283
28316
|
this.loadData();
|
|
@@ -28318,7 +28351,7 @@ SwipeTestPage.ctorParameters = () => [
|
|
|
28318
28351
|
{ type: DateFormatPipe }
|
|
28319
28352
|
];
|
|
28320
28353
|
|
|
28321
|
-
const moment$
|
|
28354
|
+
const moment$8 = momentImported;
|
|
28322
28355
|
class DateTimeTestPage {
|
|
28323
28356
|
constructor(platform, formBuilder, cd) {
|
|
28324
28357
|
this.platform = platform;
|
|
@@ -28352,7 +28385,7 @@ class DateTimeTestPage {
|
|
|
28352
28385
|
// Load the form with data
|
|
28353
28386
|
loadData() {
|
|
28354
28387
|
return __awaiter(this, void 0, void 0, function* () {
|
|
28355
|
-
const now = moment$
|
|
28388
|
+
const now = moment$8();
|
|
28356
28389
|
const data = {
|
|
28357
28390
|
empty: null,
|
|
28358
28391
|
emptyRequired: null,
|
|
@@ -28418,9 +28451,9 @@ DateTimeTestPage.ctorParameters = () => [
|
|
|
28418
28451
|
{ type: ChangeDetectorRef }
|
|
28419
28452
|
];
|
|
28420
28453
|
|
|
28421
|
-
class EntityTestClass {
|
|
28454
|
+
class EntityTestClass$1 {
|
|
28422
28455
|
}
|
|
28423
|
-
const FAKE_ENTITIES = [
|
|
28456
|
+
const FAKE_ENTITIES$1 = [
|
|
28424
28457
|
{ id: 1, label: 'AAA', name: 'Item A' },
|
|
28425
28458
|
{ id: 2, label: 'BBB', name: 'Item B' },
|
|
28426
28459
|
{ id: 3, label: 'CCC', name: 'Item C' },
|
|
@@ -28429,14 +28462,14 @@ const FAKE_ENTITIES = [
|
|
|
28429
28462
|
{ id: 6, label: 'FFF', name: 'Item F' },
|
|
28430
28463
|
{ id: 7, label: 'GGG', name: 'Item G' }
|
|
28431
28464
|
];
|
|
28432
|
-
function deepCopy(values, size) {
|
|
28465
|
+
function deepCopy$1(values, size) {
|
|
28433
28466
|
if (isNil(size)) {
|
|
28434
|
-
return (values || FAKE_ENTITIES).map(entity => Object.assign({}, entity));
|
|
28467
|
+
return (values || FAKE_ENTITIES$1).map(entity => Object.assign({}, entity));
|
|
28435
28468
|
}
|
|
28436
28469
|
let result = [];
|
|
28437
28470
|
let i = 1;
|
|
28438
28471
|
while (result.length < size) {
|
|
28439
|
-
result = result.concat((values || FAKE_ENTITIES).map(entity => {
|
|
28472
|
+
result = result.concat((values || FAKE_ENTITIES$1).map(entity => {
|
|
28440
28473
|
const name = entity.name + ' #' + i;
|
|
28441
28474
|
return Object.assign(Object.assign({}, entity), { id: i++, name });
|
|
28442
28475
|
}));
|
|
@@ -28446,7 +28479,7 @@ function deepCopy(values, size) {
|
|
|
28446
28479
|
class ChipsTestPage {
|
|
28447
28480
|
constructor(formBuilder) {
|
|
28448
28481
|
this.formBuilder = formBuilder;
|
|
28449
|
-
this._items = deepCopy(FAKE_ENTITIES, 100);
|
|
28482
|
+
this._items = deepCopy$1(FAKE_ENTITIES$1, 100);
|
|
28450
28483
|
this._$items = new BehaviorSubject(undefined);
|
|
28451
28484
|
this.autocompleteFields = new MatAutocompleteConfigHolder();
|
|
28452
28485
|
this.appearance = 'legacy';
|
|
@@ -28486,7 +28519,7 @@ class ChipsTestPage {
|
|
|
28486
28519
|
// Load the form with data
|
|
28487
28520
|
loadData() {
|
|
28488
28521
|
return __awaiter(this, void 0, void 0, function* () {
|
|
28489
|
-
const items = deepCopy(FAKE_ENTITIES);
|
|
28522
|
+
const items = deepCopy$1(FAKE_ENTITIES$1);
|
|
28490
28523
|
const data = {
|
|
28491
28524
|
entity: items.slice(0, 1),
|
|
28492
28525
|
entityInitial: items.slice(1, 2),
|
|
@@ -28602,7 +28635,7 @@ NumpadTestPage.ctorParameters = () => [
|
|
|
28602
28635
|
{ type: FormBuilder }
|
|
28603
28636
|
];
|
|
28604
28637
|
|
|
28605
|
-
const moment$
|
|
28638
|
+
const moment$9 = momentImported;
|
|
28606
28639
|
class DateTestPage {
|
|
28607
28640
|
constructor(formBuilder, cd) {
|
|
28608
28641
|
this.formBuilder = formBuilder;
|
|
@@ -28635,7 +28668,7 @@ class DateTestPage {
|
|
|
28635
28668
|
// Load the form with data
|
|
28636
28669
|
loadData() {
|
|
28637
28670
|
return __awaiter(this, void 0, void 0, function* () {
|
|
28638
|
-
const now = moment$
|
|
28671
|
+
const now = moment$9();
|
|
28639
28672
|
const nowAtMahe = now.clone().tz(this.timezone).startOf('day');
|
|
28640
28673
|
const data = {
|
|
28641
28674
|
empty: null,
|
|
@@ -28713,7 +28746,7 @@ const SHARED_MATERIAL_TESTING_PAGES = [
|
|
|
28713
28746
|
{ label: 'Shared directives', divider: true },
|
|
28714
28747
|
{ label: 'Badge icon directive', page: '/testing/shared/badge-icon' }
|
|
28715
28748
|
];
|
|
28716
|
-
const routes$
|
|
28749
|
+
const routes$1 = [
|
|
28717
28750
|
{
|
|
28718
28751
|
path: '',
|
|
28719
28752
|
pathMatch: 'full',
|
|
@@ -28770,7 +28803,7 @@ MaterialTestingModule.decorators = [
|
|
|
28770
28803
|
ReactiveFormsModule,
|
|
28771
28804
|
SharedMaterialModule,
|
|
28772
28805
|
TranslateModule.forChild(),
|
|
28773
|
-
RouterModule.forChild(routes$
|
|
28806
|
+
RouterModule.forChild(routes$1)
|
|
28774
28807
|
],
|
|
28775
28808
|
declarations: [
|
|
28776
28809
|
DateTimeTestPage,
|
|
@@ -28831,7 +28864,7 @@ ToastTestingPage.ctorParameters = () => [
|
|
|
28831
28864
|
{ type: TranslateService }
|
|
28832
28865
|
];
|
|
28833
28866
|
|
|
28834
|
-
const routes$
|
|
28867
|
+
const routes$2 = [
|
|
28835
28868
|
{
|
|
28836
28869
|
path: 'toast',
|
|
28837
28870
|
pathMatch: 'full',
|
|
@@ -28846,7 +28879,7 @@ ToastTestingModule.decorators = [
|
|
|
28846
28879
|
CommonModule,
|
|
28847
28880
|
IonicModule,
|
|
28848
28881
|
TranslateModule.forChild(),
|
|
28849
|
-
RouterModule.forChild(routes$
|
|
28882
|
+
RouterModule.forChild(routes$2)
|
|
28850
28883
|
],
|
|
28851
28884
|
declarations: [
|
|
28852
28885
|
ToastTestingPage
|
|
@@ -29110,7 +29143,7 @@ class TableTestPage extends AppTable {
|
|
|
29110
29143
|
console.debug('[test-table] Destroying table...');
|
|
29111
29144
|
super.ngOnDestroy();
|
|
29112
29145
|
this.stopTimer();
|
|
29113
|
-
this.dataService.
|
|
29146
|
+
this.dataService.stop();
|
|
29114
29147
|
}
|
|
29115
29148
|
restoreFilter() {
|
|
29116
29149
|
const json = this.settings.getPageSettings(this.settingsId, 'filter');
|
|
@@ -29301,7 +29334,7 @@ TextPopoverTestingPage.ctorParameters = () => [
|
|
|
29301
29334
|
{ type: PopoverController }
|
|
29302
29335
|
];
|
|
29303
29336
|
|
|
29304
|
-
const routes$
|
|
29337
|
+
const routes$4 = [
|
|
29305
29338
|
{
|
|
29306
29339
|
path: 'text-popover',
|
|
29307
29340
|
pathMatch: 'full',
|
|
@@ -29316,7 +29349,7 @@ TextPopoverTestingModule.decorators = [
|
|
|
29316
29349
|
CommonModule,
|
|
29317
29350
|
IonicModule,
|
|
29318
29351
|
TranslateModule.forChild(),
|
|
29319
|
-
RouterModule.forChild(routes$
|
|
29352
|
+
RouterModule.forChild(routes$4)
|
|
29320
29353
|
],
|
|
29321
29354
|
declarations: [
|
|
29322
29355
|
TextPopoverTestingPage
|
|
@@ -29333,7 +29366,7 @@ const CORE_TESTING_PAGES = [
|
|
|
29333
29366
|
{ label: 'Table', page: '/testing/core/table' },
|
|
29334
29367
|
{ label: 'Text popover', page: '/testing/core/text-popover' }
|
|
29335
29368
|
];
|
|
29336
|
-
const routes$
|
|
29369
|
+
const routes$5 = [
|
|
29337
29370
|
{
|
|
29338
29371
|
path: '',
|
|
29339
29372
|
pathMatch: 'full',
|
|
@@ -29357,7 +29390,7 @@ CoreTestingModule.decorators = [
|
|
|
29357
29390
|
imports: [
|
|
29358
29391
|
CommonModule,
|
|
29359
29392
|
TranslateModule.forChild(),
|
|
29360
|
-
RouterModule.forChild(routes$
|
|
29393
|
+
RouterModule.forChild(routes$5),
|
|
29361
29394
|
// Sub modules
|
|
29362
29395
|
TableTestingModule,
|
|
29363
29396
|
TextPopoverTestingModule
|
|
@@ -29660,7 +29693,7 @@ UserEventTestService.ctorParameters = () => [
|
|
|
29660
29693
|
{ type: Environment, decorators: [{ type: Optional }, { type: Inject, args: [ENVIRONMENT,] }] }
|
|
29661
29694
|
];
|
|
29662
29695
|
|
|
29663
|
-
const moment = momentImported;
|
|
29696
|
+
const moment$a = momentImported;
|
|
29664
29697
|
class UserEventTestingPage {
|
|
29665
29698
|
constructor(userEventService, router, alertController, translateService) {
|
|
29666
29699
|
this.userEventService = userEventService;
|
|
@@ -29721,7 +29754,7 @@ class UserEventTestingPage {
|
|
|
29721
29754
|
type: 'message',
|
|
29722
29755
|
level: 'INFO',
|
|
29723
29756
|
message: 'message test message test message test message test message test message test message test message test',
|
|
29724
|
-
creationDate: moment(),
|
|
29757
|
+
creationDate: moment$a(),
|
|
29725
29758
|
}));
|
|
29726
29759
|
}
|
|
29727
29760
|
addError() {
|
|
@@ -29731,7 +29764,7 @@ class UserEventTestingPage {
|
|
|
29731
29764
|
type: 'upload',
|
|
29732
29765
|
level: 'ERROR',
|
|
29733
29766
|
message: 'message error',
|
|
29734
|
-
creationDate: moment(),
|
|
29767
|
+
creationDate: moment$a(),
|
|
29735
29768
|
}));
|
|
29736
29769
|
}
|
|
29737
29770
|
addWarning() {
|
|
@@ -29741,7 +29774,7 @@ class UserEventTestingPage {
|
|
|
29741
29774
|
type: 'download',
|
|
29742
29775
|
level: 'WARNING',
|
|
29743
29776
|
message: 'message warning',
|
|
29744
|
-
creationDate: moment(),
|
|
29777
|
+
creationDate: moment$a(),
|
|
29745
29778
|
}));
|
|
29746
29779
|
}
|
|
29747
29780
|
addDebug() {
|
|
@@ -29751,7 +29784,7 @@ class UserEventTestingPage {
|
|
|
29751
29784
|
type: 'debug',
|
|
29752
29785
|
level: 'DEBUG',
|
|
29753
29786
|
message: 'message DEBUG',
|
|
29754
|
-
creationDate: moment(),
|
|
29787
|
+
creationDate: moment$a(),
|
|
29755
29788
|
}));
|
|
29756
29789
|
}
|
|
29757
29790
|
addNotificationWithLink() {
|
|
@@ -29761,7 +29794,7 @@ class UserEventTestingPage {
|
|
|
29761
29794
|
type: 'message',
|
|
29762
29795
|
level: 'INFO',
|
|
29763
29796
|
message: 'message with link',
|
|
29764
|
-
creationDate: moment(),
|
|
29797
|
+
creationDate: moment$a(),
|
|
29765
29798
|
actions: [{
|
|
29766
29799
|
name: 'click here',
|
|
29767
29800
|
iconRef: {
|
|
@@ -29778,7 +29811,7 @@ class UserEventTestingPage {
|
|
|
29778
29811
|
type: 'message',
|
|
29779
29812
|
level: 'INFO',
|
|
29780
29813
|
message: 'message with action',
|
|
29781
|
-
creationDate: moment(),
|
|
29814
|
+
creationDate: moment$a(),
|
|
29782
29815
|
actions: [
|
|
29783
29816
|
{
|
|
29784
29817
|
name: 'click here',
|
|
@@ -29850,7 +29883,7 @@ class UserEventTestingPage {
|
|
|
29850
29883
|
type: 'message',
|
|
29851
29884
|
level: 'INFO',
|
|
29852
29885
|
message: 'message with action',
|
|
29853
|
-
creationDate: moment(),
|
|
29886
|
+
creationDate: moment$a(),
|
|
29854
29887
|
actions: [
|
|
29855
29888
|
{
|
|
29856
29889
|
default: true,
|
|
@@ -29904,7 +29937,7 @@ const SOCIAL_TESTING_PAGES = [
|
|
|
29904
29937
|
{ label: 'User event', page: '/testing/social/user-event' },
|
|
29905
29938
|
{ label: 'Job progression', page: '/testing/social/job-progression' }
|
|
29906
29939
|
];
|
|
29907
|
-
const routes = [
|
|
29940
|
+
const routes$6 = [
|
|
29908
29941
|
{
|
|
29909
29942
|
path: 'job-progression',
|
|
29910
29943
|
pathMatch: 'full',
|
|
@@ -29923,7 +29956,7 @@ SocialTestingModule.decorators = [
|
|
|
29923
29956
|
imports: [
|
|
29924
29957
|
CommonModule,
|
|
29925
29958
|
TranslateModule.forChild(),
|
|
29926
|
-
RouterModule.forChild(routes),
|
|
29959
|
+
RouterModule.forChild(routes$6),
|
|
29927
29960
|
JobTestingModule,
|
|
29928
29961
|
UserEventTestingModule
|
|
29929
29962
|
],
|
|
@@ -29936,5 +29969,5 @@ SocialTestingModule.decorators = [
|
|
|
29936
29969
|
* Generated bundle index. Do not edit.
|
|
29937
29970
|
*/
|
|
29938
29971
|
|
|
29939
|
-
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 };
|
|
29940
29973
|
//# sourceMappingURL=sumaris-net.ngx-components.js.map
|