@sumaris-net/ngx-components 1.23.9 → 1.23.12
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 +453 -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 +78 -32
- package/esm2015/src/app/shared/services/startable-service.class.js +21 -13
- package/esm2015/src/app/shared/upload-file/upload-file.component.js +1 -1
- package/fesm2015/sumaris-net.ngx-components.js +384 -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 -5
- 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
|
];
|
|
@@ -16982,7 +16975,7 @@ UploadFileComponent.decorators = [
|
|
|
16982
16975
|
{ type: Component, args: [{
|
|
16983
16976
|
selector: 'app-upload-file',
|
|
16984
16977
|
template: "<div *ngIf=\"!uniqueFile || files.length === 0\"\n class=\"container\"\n appDragAndDrop (fileDropped)=\"onFileDropped($event)\">\n <input\n type=\"file\"\n #fileDropRef\n id=\"fileDropRef\"\n multiple\n [accept]=\"fileExtension\"\n (change)=\"fileBrowseHandler($any($event.target).files)\"\n />\n <mat-icon style=\"font-size: xx-large\" color=\"accent\">file_upload</mat-icon>\n <ion-label\n [innerHTML]=\"\n 'FILE.UPLOAD.DRAG_AND_DROP' | translate: { extension: !fileExtension ? '' : ' (' + fileExtension + ')' }\n \"\n ></ion-label>\n <ion-button>{{ 'FILE.UPLOAD.BROWSE' | translate }}</ion-button>\n</div>\n<div class=\"files-list\">\n <div *ngFor=\"let file of files; index as i\"\n class=\"single-file\"\n [class.deleting]=\"file.deleting\">\n <mat-icon>description</mat-icon>\n <div class=\"info\">\n <h4 class=\"name\">\n {{ file.name }}\n </h4>\n <p class=\"size\">\n {{ file.size | fileSize }}\n </p>\n <ion-progress-bar *ngIf=\"!file.error\"\n [value]=\"file.progress||0\"\n [type]=\"(file.deleting || file.progress === -1) ? 'indeterminate' : 'determinate'\"></ion-progress-bar>\n <ion-label *ngIf=\"file.error\" color=\"danger\" [innerHTML]=\"file.error | translate\"></ion-label>\n </div>\n <!-- remote from list (before importation) -->\n <button *ngIf=\"!(file.progress) || file.error\" mat-icon-button (click)=\"deleteFile(i)\">\n <mat-icon>clear</mat-icon>\n </button>\n <!-- delete file (remotely - after importation) -->\n <button *ngIf=\"file.progress === 1 && !!deleteFn && !file.deleting\" mat-icon-button (click)=\"deleteFile(i)\">\n <mat-icon>clear</mat-icon>\n </button>\n </div>\n</div>\n",
|
|
16985
|
-
styles: [".container{width:calc(100% - 3rem);min-height:200px;padding:2rem;text-align:center;border:1px dashed #979797;position:relative;margin:1.5rem}.container input{opacity:0;position:absolute;z-index:2;width:100%;height:100%;top:0;left:0;cursor:pointer}.container ion-label{display:block;font-size:20px;font-weight:600;color:#38424c}.container label{display:inline-block;color:#fff;width:183px;height:44px;border-radius:21.5px;background-color:#db202f;padding:8px 16px}.fileover{
|
|
16978
|
+
styles: [".container{width:calc(100% - 3rem);min-height:200px;padding:2rem;text-align:center;border:1px dashed #979797;position:relative;margin:1.5rem}.container input{opacity:0;position:absolute;z-index:2;width:100%;height:100%;top:0;left:0;cursor:pointer}.container ion-label{display:block;font-size:20px;font-weight:600;color:#38424c}.container label{display:inline-block;color:#fff;width:183px;height:44px;border-radius:21.5px;background-color:#db202f;padding:8px 16px}.fileover{animation:shake 1s;animation-iteration-count:infinite}.files-list{max-height:300px;overflow:auto}.files-list .single-file{display:flex;flex-grow:1;padding:.5rem;justify-content:space-between;align-items:center;border:1px dashed #979797;margin-bottom:1rem}.files-list .single-file.deleting .name{color:grey!important;font-style:italic!important}.files-list .single-file .name{font-size:14px;font-weight:500;color:#353f4a;margin:0}.files-list .single-file .size{font-size:12px;font-weight:500;color:#a4a4a4;margin:0 0 .25rem}.files-list .single-file .info{width:100%}@keyframes shake{0%{transform:translate(1px,1px) rotate(0deg)}10%{transform:translate(-1px,-2px) rotate(-1deg)}20%{transform:translate(-3px) rotate(1deg)}30%{transform:translate(3px,2px) rotate(0deg)}40%{transform:translate(1px,-1px) rotate(1deg)}50%{transform:translate(-1px,2px) rotate(-1deg)}60%{transform:translate(-3px,1px) rotate(0deg)}70%{transform:translate(3px,1px) rotate(-1deg)}80%{transform:translate(-1px,-1px) rotate(1deg)}90%{transform:translate(1px,2px) rotate(0deg)}to{transform:translate(1px,-2px) rotate(-1deg)}}"]
|
|
16986
16979
|
},] }
|
|
16987
16980
|
];
|
|
16988
16981
|
UploadFileComponent.ctorParameters = () => [
|
|
@@ -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,40 @@ class InMemoryEntitiesService extends EntitiesService {
|
|
|
18186
18171
|
get value() {
|
|
18187
18172
|
return this.dataSubject.getValue();
|
|
18188
18173
|
}
|
|
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
|
+
});
|
|
18196
|
+
}
|
|
18189
18197
|
ngOnDestroy() {
|
|
18190
|
-
|
|
18191
|
-
console.debug('[memory-data-service] Destroying...');
|
|
18192
|
-
this.dataSubject.complete();
|
|
18193
|
-
this.dataSubject.unsubscribe();
|
|
18198
|
+
this.stop();
|
|
18194
18199
|
}
|
|
18195
18200
|
setValue(data) {
|
|
18196
18201
|
if (this.dataSubject.value !== data) {
|
|
18202
|
+
if (!this.started)
|
|
18203
|
+
this.start();
|
|
18197
18204
|
this._hiddenData = [];
|
|
18198
18205
|
this.dataSubject.next(data);
|
|
18199
18206
|
}
|
|
18200
|
-
this.
|
|
18207
|
+
this.markAsPristine();
|
|
18201
18208
|
}
|
|
18202
18209
|
loadAll(offset, size, sortBy, sortDirection, filter, opts) {
|
|
18203
18210
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -18207,9 +18214,8 @@ class InMemoryEntitiesService extends EntitiesService {
|
|
|
18207
18214
|
if (isNil(originalData)) {
|
|
18208
18215
|
console.warn('[memory-data-service] Cannot load all: no value set. Will return empty result');
|
|
18209
18216
|
}
|
|
18210
|
-
// Wait
|
|
18211
|
-
|
|
18212
|
-
yield waitFor(() => !this._saving);
|
|
18217
|
+
// Wait while idle
|
|
18218
|
+
yield this.waitWhileSaving();
|
|
18213
18219
|
const excludedDataByFilter = [];
|
|
18214
18220
|
let excludedDataByPagination;
|
|
18215
18221
|
try {
|
|
@@ -18291,9 +18297,9 @@ class InMemoryEntitiesService extends EntitiesService {
|
|
|
18291
18297
|
offset = offset >= 0 ? offset : 0;
|
|
18292
18298
|
size = size >= 0 ? size : -1;
|
|
18293
18299
|
return this.dataSubject
|
|
18294
|
-
.pipe(
|
|
18300
|
+
.pipe(takeUntil(this.stopSubject),
|
|
18295
18301
|
// Warn if waiting value to be set
|
|
18296
|
-
tap((data) => !data && console.
|
|
18302
|
+
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
18303
|
}
|
|
18298
18304
|
saveAll(data, options) {
|
|
18299
18305
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -18309,7 +18315,7 @@ class InMemoryEntitiesService extends EntitiesService {
|
|
|
18309
18315
|
data = ((res instanceof Promise)) ? yield res : res;
|
|
18310
18316
|
}
|
|
18311
18317
|
this.dataSubject.next(data);
|
|
18312
|
-
this.
|
|
18318
|
+
this.markAsDirty();
|
|
18313
18319
|
return data;
|
|
18314
18320
|
}
|
|
18315
18321
|
finally {
|
|
@@ -18322,16 +18328,22 @@ class InMemoryEntitiesService extends EntitiesService {
|
|
|
18322
18328
|
let data = this.dataSubject.value;
|
|
18323
18329
|
if (!data)
|
|
18324
18330
|
throw new Error('[memory-service] Could not delete, because value not set');
|
|
18325
|
-
|
|
18326
|
-
|
|
18327
|
-
|
|
18328
|
-
|
|
18329
|
-
|
|
18330
|
-
|
|
18331
|
-
|
|
18332
|
-
|
|
18333
|
-
|
|
18334
|
-
|
|
18331
|
+
this.markAsSaving();
|
|
18332
|
+
try {
|
|
18333
|
+
// Remove deleted item, from data
|
|
18334
|
+
const updatedData = data.filter(entity => {
|
|
18335
|
+
const removed = dataToRemove.findIndex(entityToRemove => this.equals(entityToRemove, entity)) !== -1;
|
|
18336
|
+
return !removed;
|
|
18337
|
+
});
|
|
18338
|
+
const deleteCount = data.length - updatedData.length;
|
|
18339
|
+
if (deleteCount > 0) {
|
|
18340
|
+
data = updatedData;
|
|
18341
|
+
this.dataSubject.next(data);
|
|
18342
|
+
this.markAsDirty();
|
|
18343
|
+
}
|
|
18344
|
+
}
|
|
18345
|
+
finally {
|
|
18346
|
+
this.markAsSaved();
|
|
18335
18347
|
}
|
|
18336
18348
|
});
|
|
18337
18349
|
}
|
|
@@ -18388,11 +18400,30 @@ class InMemoryEntitiesService extends EntitiesService {
|
|
|
18388
18400
|
return { data, total };
|
|
18389
18401
|
}));
|
|
18390
18402
|
}
|
|
18403
|
+
waitWhileSaving(opts) {
|
|
18404
|
+
if (!this.saving)
|
|
18405
|
+
return;
|
|
18406
|
+
return firstFalsePromise(this.savingSubject, Object.assign({ stop: (opts === null || opts === void 0 ? void 0 : opts.stop) || merge(this.stopSubject, this.dataSubject) }, opts));
|
|
18407
|
+
}
|
|
18391
18408
|
markAsSaving() {
|
|
18392
|
-
this.
|
|
18409
|
+
if (!this.savingSubject.value) {
|
|
18410
|
+
this.savingSubject.next(true);
|
|
18411
|
+
}
|
|
18393
18412
|
}
|
|
18394
18413
|
markAsSaved() {
|
|
18395
|
-
this.
|
|
18414
|
+
if (this.savingSubject.value) {
|
|
18415
|
+
this.savingSubject.next(false);
|
|
18416
|
+
}
|
|
18417
|
+
}
|
|
18418
|
+
markAsDirty() {
|
|
18419
|
+
if (!this.dirtySubject.value) {
|
|
18420
|
+
this.dirtySubject.next(true);
|
|
18421
|
+
}
|
|
18422
|
+
}
|
|
18423
|
+
markAsPristine() {
|
|
18424
|
+
if (this.dirtySubject.value) {
|
|
18425
|
+
this.dirtySubject.next(false);
|
|
18426
|
+
}
|
|
18396
18427
|
}
|
|
18397
18428
|
}
|
|
18398
18429
|
InMemoryEntitiesService.decorators = [
|
|
@@ -18716,7 +18747,7 @@ function state2side(state) {
|
|
|
18716
18747
|
return 1;
|
|
18717
18748
|
}
|
|
18718
18749
|
}
|
|
18719
|
-
const ɵ0$
|
|
18750
|
+
const ɵ0$b = (defaultStateSize) => [
|
|
18720
18751
|
Math.round((rgbArrayMap.red[0] - 50) / defaultStateSize),
|
|
18721
18752
|
Math.round((255 - rgbArrayMap.red[1]) / defaultStateSize),
|
|
18722
18753
|
Math.round((255 - rgbArrayMap.red[2]) / defaultStateSize)
|
|
@@ -18724,7 +18755,7 @@ const ɵ0$1 = (defaultStateSize) => [
|
|
|
18724
18755
|
const SCALE_OPTIONS_DEFAULT = {
|
|
18725
18756
|
startColor: rgbArrayMap.red,
|
|
18726
18757
|
startStates: [0, 2, 3],
|
|
18727
|
-
startStepsFn: ɵ0$
|
|
18758
|
+
startStepsFn: ɵ0$b
|
|
18728
18759
|
};
|
|
18729
18760
|
/**
|
|
18730
18761
|
* Internal function, that create a colors scale, using iteration
|
|
@@ -19531,7 +19562,7 @@ class UserSettingsValidatorService extends AppValidatorService {
|
|
|
19531
19562
|
});
|
|
19532
19563
|
}
|
|
19533
19564
|
}
|
|
19534
|
-
UserSettingsValidatorService.ɵprov =
|
|
19565
|
+
UserSettingsValidatorService.ɵprov = ɵɵdefineInjectable({ factory: function UserSettingsValidatorService_Factory() { return new UserSettingsValidatorService(ɵɵinject(FormBuilder)); }, token: UserSettingsValidatorService, providedIn: "root" });
|
|
19535
19566
|
UserSettingsValidatorService.decorators = [
|
|
19536
19567
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
19537
19568
|
];
|
|
@@ -19575,7 +19606,7 @@ class AccountValidatorService extends AppValidatorService {
|
|
|
19575
19606
|
return validatorFns.length ? Validators.compose(validatorFns) : validatorFns.length === 1 ? validatorFns[0] : undefined;
|
|
19576
19607
|
}
|
|
19577
19608
|
}
|
|
19578
|
-
AccountValidatorService.ɵprov =
|
|
19609
|
+
AccountValidatorService.ɵprov = ɵɵdefineInjectable({ factory: function AccountValidatorService_Factory() { return new AccountValidatorService(ɵɵinject(FormBuilder), ɵɵinject(AccountService)); }, token: AccountValidatorService, providedIn: "root" });
|
|
19579
19610
|
AccountValidatorService.decorators = [
|
|
19580
19611
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
19581
19612
|
];
|
|
@@ -19869,7 +19900,7 @@ class MenuService {
|
|
|
19869
19900
|
this._$opened.next(false);
|
|
19870
19901
|
}
|
|
19871
19902
|
}
|
|
19872
|
-
MenuService.ɵprov =
|
|
19903
|
+
MenuService.ɵprov = ɵɵdefineInjectable({ factory: function MenuService_Factory() { return new MenuService(); }, token: MenuService, providedIn: "root" });
|
|
19873
19904
|
MenuService.decorators = [
|
|
19874
19905
|
{ type: Injectable, args: [{
|
|
19875
19906
|
providedIn: 'root'
|
|
@@ -20205,7 +20236,7 @@ class LocalSettingsValidatorService extends AppValidatorService {
|
|
|
20205
20236
|
});
|
|
20206
20237
|
}
|
|
20207
20238
|
}
|
|
20208
|
-
LocalSettingsValidatorService.ɵprov =
|
|
20239
|
+
LocalSettingsValidatorService.ɵprov = ɵɵdefineInjectable({ factory: function LocalSettingsValidatorService_Factory() { return new LocalSettingsValidatorService(ɵɵinject(FormBuilder), ɵɵinject(NetworkService)); }, token: LocalSettingsValidatorService, providedIn: "root" });
|
|
20209
20240
|
LocalSettingsValidatorService.decorators = [
|
|
20210
20241
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
20211
20242
|
];
|
|
@@ -20824,7 +20855,7 @@ class IsOnFieldModePipe {
|
|
|
20824
20855
|
return value === 'FIELD';
|
|
20825
20856
|
}
|
|
20826
20857
|
}
|
|
20827
|
-
IsOnFieldModePipe.ɵprov =
|
|
20858
|
+
IsOnFieldModePipe.ɵprov = ɵɵdefineInjectable({ factory: function IsOnFieldModePipe_Factory() { return new IsOnFieldModePipe(); }, token: IsOnFieldModePipe, providedIn: "root" });
|
|
20828
20859
|
IsOnFieldModePipe.decorators = [
|
|
20829
20860
|
{ type: Pipe, args: [{
|
|
20830
20861
|
name: 'isOnField'
|
|
@@ -20836,7 +20867,7 @@ class IsNotOnFieldModePipe {
|
|
|
20836
20867
|
return value !== 'FIELD';
|
|
20837
20868
|
}
|
|
20838
20869
|
}
|
|
20839
|
-
IsNotOnFieldModePipe.ɵprov =
|
|
20870
|
+
IsNotOnFieldModePipe.ɵprov = ɵɵdefineInjectable({ factory: function IsNotOnFieldModePipe_Factory() { return new IsNotOnFieldModePipe(); }, token: IsNotOnFieldModePipe, providedIn: "root" });
|
|
20840
20871
|
IsNotOnFieldModePipe.decorators = [
|
|
20841
20872
|
{ type: Pipe, args: [{
|
|
20842
20873
|
name: 'isNotOnField'
|
|
@@ -20851,7 +20882,7 @@ class PersonToStringPipe {
|
|
|
20851
20882
|
return PersonUtils.personToString(value);
|
|
20852
20883
|
}
|
|
20853
20884
|
}
|
|
20854
|
-
PersonToStringPipe.ɵprov =
|
|
20885
|
+
PersonToStringPipe.ɵprov = ɵɵdefineInjectable({ factory: function PersonToStringPipe_Factory() { return new PersonToStringPipe(); }, token: PersonToStringPipe, providedIn: "root" });
|
|
20855
20886
|
PersonToStringPipe.decorators = [
|
|
20856
20887
|
{ type: Pipe, args: [{
|
|
20857
20888
|
name: 'personToString'
|
|
@@ -21204,7 +21235,7 @@ class IsLoginAccountPipe {
|
|
|
21204
21235
|
return value && value.pubkey && true;
|
|
21205
21236
|
}
|
|
21206
21237
|
}
|
|
21207
|
-
IsLoginAccountPipe.ɵprov =
|
|
21238
|
+
IsLoginAccountPipe.ɵprov = ɵɵdefineInjectable({ factory: function IsLoginAccountPipe_Factory() { return new IsLoginAccountPipe(); }, token: IsLoginAccountPipe, providedIn: "root" });
|
|
21208
21239
|
IsLoginAccountPipe.decorators = [
|
|
21209
21240
|
{ type: Pipe, args: [{
|
|
21210
21241
|
name: 'isLogin'
|
|
@@ -21216,7 +21247,7 @@ class AccountToStringPipe {
|
|
|
21216
21247
|
return accountToString(value);
|
|
21217
21248
|
}
|
|
21218
21249
|
}
|
|
21219
|
-
AccountToStringPipe.ɵprov =
|
|
21250
|
+
AccountToStringPipe.ɵprov = ɵɵdefineInjectable({ factory: function AccountToStringPipe_Factory() { return new AccountToStringPipe(); }, token: AccountToStringPipe, providedIn: "root" });
|
|
21220
21251
|
AccountToStringPipe.decorators = [
|
|
21221
21252
|
{ type: Pipe, args: [{
|
|
21222
21253
|
name: 'accountToString'
|
|
@@ -21231,7 +21262,7 @@ class DepartmentToStringPipe {
|
|
|
21231
21262
|
return departmentToString(value);
|
|
21232
21263
|
}
|
|
21233
21264
|
}
|
|
21234
|
-
DepartmentToStringPipe.ɵprov =
|
|
21265
|
+
DepartmentToStringPipe.ɵprov = ɵɵdefineInjectable({ factory: function DepartmentToStringPipe_Factory() { return new DepartmentToStringPipe(); }, token: DepartmentToStringPipe, providedIn: "root" });
|
|
21235
21266
|
DepartmentToStringPipe.decorators = [
|
|
21236
21267
|
{ type: Pipe, args: [{
|
|
21237
21268
|
name: 'departmentToString'
|
|
@@ -21866,7 +21897,7 @@ class AuthGuardService {
|
|
|
21866
21897
|
}));
|
|
21867
21898
|
}
|
|
21868
21899
|
}
|
|
21869
|
-
AuthGuardService.ɵprov =
|
|
21900
|
+
AuthGuardService.ɵprov = ɵɵdefineInjectable({ factory: function AuthGuardService_Factory() { return new AuthGuardService(ɵɵinject(AccountService), ɵɵinject(ModalController), ɵɵinject(Router), ɵɵinject(ENVIRONMENT)); }, token: AuthGuardService, providedIn: "root" });
|
|
21870
21901
|
AuthGuardService.decorators = [
|
|
21871
21902
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
21872
21903
|
];
|
|
@@ -22615,7 +22646,7 @@ class EntitiesTableDataSource extends TableDataSource {
|
|
|
22615
22646
|
this.handleServiceError(err);
|
|
22616
22647
|
}
|
|
22617
22648
|
finally {
|
|
22618
|
-
this.
|
|
22649
|
+
this.markAsLoaded();
|
|
22619
22650
|
}
|
|
22620
22651
|
});
|
|
22621
22652
|
}
|
|
@@ -23218,6 +23249,7 @@ class AppTable {
|
|
|
23218
23249
|
// Stop event
|
|
23219
23250
|
event === null || event === void 0 ? void 0 : event.stopPropagation();
|
|
23220
23251
|
// Confirmation edition or creation
|
|
23252
|
+
// TODO: add await ?
|
|
23221
23253
|
const confirmed = row.confirmEditCreate();
|
|
23222
23254
|
if (confirmed) {
|
|
23223
23255
|
// If edit finished, forget edited row
|
|
@@ -23236,6 +23268,7 @@ class AppTable {
|
|
|
23236
23268
|
}
|
|
23237
23269
|
if (row.validator) {
|
|
23238
23270
|
// If pending: Wait end of validation, then loop
|
|
23271
|
+
// TODO: remove when using async isValid() function
|
|
23239
23272
|
if (row.validator.pending) {
|
|
23240
23273
|
AppFormUtils.waitWhilePending(row.validator).then(() => this.confirmEditCreate(event, row));
|
|
23241
23274
|
return false;
|
|
@@ -23386,7 +23419,7 @@ class AppTable {
|
|
|
23386
23419
|
this.selection.clear();
|
|
23387
23420
|
}
|
|
23388
23421
|
else {
|
|
23389
|
-
const rows =
|
|
23422
|
+
const rows = this._dataSource.getRows();
|
|
23390
23423
|
rows.forEach(row => this.selection.select(row));
|
|
23391
23424
|
}
|
|
23392
23425
|
});
|
|
@@ -23525,7 +23558,7 @@ class AppTable {
|
|
|
23525
23558
|
if (data === undefined)
|
|
23526
23559
|
return Promise.resolve(false);
|
|
23527
23560
|
yield this.waitIdle();
|
|
23528
|
-
const row =
|
|
23561
|
+
const row = this.dataSource.getRows()
|
|
23529
23562
|
.find(row => this.equals(row.currentData, data));
|
|
23530
23563
|
if (!row)
|
|
23531
23564
|
return false;
|
|
@@ -23752,7 +23785,7 @@ class AppTable {
|
|
|
23752
23785
|
canCancelRows(rows, opts) {
|
|
23753
23786
|
return __awaiter(this, void 0, void 0, function* () {
|
|
23754
23787
|
// Get dirty rows
|
|
23755
|
-
rows = rows ||
|
|
23788
|
+
rows = rows || this.dataSource.getRows().filter(row => { var _a; return (_a = row.validator) === null || _a === void 0 ? void 0 : _a.dirty; });
|
|
23756
23789
|
if (isEmptyArray(rows))
|
|
23757
23790
|
return true; // No dirty: OK
|
|
23758
23791
|
// Check using emitter
|
|
@@ -24532,13 +24565,14 @@ class AppEditor {
|
|
|
24532
24565
|
}
|
|
24533
24566
|
}
|
|
24534
24567
|
markAsLoaded(opts) {
|
|
24535
|
-
var _a;
|
|
24568
|
+
var _a, _b;
|
|
24536
24569
|
if (this.loadingSubject.value) {
|
|
24537
24570
|
this.loadingSubject.next(false);
|
|
24538
24571
|
if (!opts || opts.onlySelf !== true) {
|
|
24539
|
-
// Emit to children forms
|
|
24540
|
-
//
|
|
24541
|
-
(_a = this.forms) === null || _a === void 0 ? void 0 : _a.forEach(
|
|
24572
|
+
// Emit to children forms and editors
|
|
24573
|
+
// note: tables should be changed by parent
|
|
24574
|
+
(_a = this.forms) === null || _a === void 0 ? void 0 : _a.forEach(f => f.markAsLoaded(opts));
|
|
24575
|
+
(_b = this.editors) === null || _b === void 0 ? void 0 : _b.forEach(e => e.markAsLoaded(opts));
|
|
24542
24576
|
}
|
|
24543
24577
|
if (!opts || opts.emitEvent !== false) {
|
|
24544
24578
|
this.markForCheck();
|
|
@@ -24676,39 +24710,41 @@ class AppEditor {
|
|
|
24676
24710
|
return __awaiter(this, void 0, void 0, function* () {
|
|
24677
24711
|
if (!this.dirty)
|
|
24678
24712
|
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
|
-
|
|
24713
|
+
let confirmed = (opts === null || opts === void 0 ? void 0 : opts.confirmed) || false;
|
|
24714
|
+
if (!confirmed) {
|
|
24715
|
+
let cancel = false;
|
|
24716
|
+
const translations = this.translate.instant(['COMMON.BTN_SAVE', 'COMMON.BTN_CANCEL', 'COMMON.BTN_ABORT_CHANGES', 'CONFIRM.SAVE', 'CONFIRM.ALERT_HEADER']);
|
|
24717
|
+
const alert = yield this.alertCtrl.create({
|
|
24718
|
+
header: translations['CONFIRM.ALERT_HEADER'],
|
|
24719
|
+
message: translations['CONFIRM.SAVE'],
|
|
24720
|
+
buttons: [
|
|
24721
|
+
{
|
|
24722
|
+
text: translations['COMMON.BTN_CANCEL'],
|
|
24723
|
+
role: 'cancel',
|
|
24724
|
+
cssClass: 'secondary',
|
|
24725
|
+
handler: () => {
|
|
24726
|
+
cancel = true;
|
|
24727
|
+
}
|
|
24728
|
+
},
|
|
24729
|
+
{
|
|
24730
|
+
text: translations['COMMON.BTN_ABORT_CHANGES'],
|
|
24731
|
+
cssClass: 'secondary',
|
|
24732
|
+
handler: () => {
|
|
24733
|
+
}
|
|
24734
|
+
},
|
|
24735
|
+
{
|
|
24736
|
+
text: translations['COMMON.BTN_SAVE'],
|
|
24737
|
+
handler: () => {
|
|
24738
|
+
confirmed = true; // update upper value
|
|
24739
|
+
}
|
|
24704
24740
|
}
|
|
24705
|
-
|
|
24706
|
-
|
|
24707
|
-
|
|
24708
|
-
|
|
24709
|
-
|
|
24710
|
-
|
|
24711
|
-
|
|
24741
|
+
]
|
|
24742
|
+
});
|
|
24743
|
+
yield alert.present();
|
|
24744
|
+
yield alert.onDidDismiss();
|
|
24745
|
+
if (!confirmed) {
|
|
24746
|
+
return !cancel;
|
|
24747
|
+
}
|
|
24712
24748
|
}
|
|
24713
24749
|
return yield this.save(event, opts);
|
|
24714
24750
|
});
|
|
@@ -26104,7 +26140,7 @@ const SocialErrorCodes = {
|
|
|
26104
26140
|
SUBSCRIBE_JOB_PROGRESSION_ERROR: 50010
|
|
26105
26141
|
};
|
|
26106
26142
|
|
|
26107
|
-
const moment$
|
|
26143
|
+
const moment$6 = momentImported;
|
|
26108
26144
|
const USER_EVENT_SERVICE = new InjectionToken('UserEventService');
|
|
26109
26145
|
class AbstractUserEventService extends BaseGraphqlService {
|
|
26110
26146
|
constructor(graphql, accountService, network, translate, options) {
|
|
@@ -26470,7 +26506,7 @@ class AbstractUserEventService extends BaseGraphqlService {
|
|
|
26470
26506
|
}
|
|
26471
26507
|
resetCount() {
|
|
26472
26508
|
this._countSubject.next(undefined);
|
|
26473
|
-
this.resetCountDate = moment$
|
|
26509
|
+
this.resetCountDate = moment$6();
|
|
26474
26510
|
// restart listening count changes
|
|
26475
26511
|
this.startListenCountChanges();
|
|
26476
26512
|
}
|
|
@@ -26530,7 +26566,7 @@ class AbstractUserEventService extends BaseGraphqlService {
|
|
|
26530
26566
|
if (!userEvents.length)
|
|
26531
26567
|
return;
|
|
26532
26568
|
// set read date
|
|
26533
|
-
userEvents.forEach(userEvent => userEvent.readDate = moment$
|
|
26569
|
+
userEvents.forEach(userEvent => userEvent.readDate = moment$6());
|
|
26534
26570
|
// split local/remote entities
|
|
26535
26571
|
const localEntities = userEvents.filter(userEvent => !userEvent.id || userEvent.id < 0);
|
|
26536
26572
|
const remoteEntities = userEvents.filter(userEvent => userEvent.id > 0);
|
|
@@ -27505,7 +27541,7 @@ class MessageService extends BaseGraphqlService {
|
|
|
27505
27541
|
});
|
|
27506
27542
|
}
|
|
27507
27543
|
}
|
|
27508
|
-
MessageService.ɵprov =
|
|
27544
|
+
MessageService.ɵprov = ɵɵdefineInjectable({ factory: function MessageService_Factory() { return new MessageService(ɵɵinject(GraphqlService), ɵɵinject(TranslateService), ɵɵinject(ToastController), ɵɵinject(ENVIRONMENT, 8)); }, token: MessageService, providedIn: "root" });
|
|
27509
27545
|
MessageService.decorators = [
|
|
27510
27546
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
27511
27547
|
];
|
|
@@ -27714,7 +27750,7 @@ class PersonService extends BaseEntityService {
|
|
|
27714
27750
|
return target;
|
|
27715
27751
|
}
|
|
27716
27752
|
}
|
|
27717
|
-
PersonService.ɵprov =
|
|
27753
|
+
PersonService.ɵprov = ɵɵdefineInjectable({ factory: function PersonService_Factory() { return new PersonService(ɵɵinject(GraphqlService), ɵɵinject(PlatformService), ɵɵinject(NetworkService), ɵɵinject(EntitiesStorage)); }, token: PersonService, providedIn: "root" });
|
|
27718
27754
|
PersonService.decorators = [
|
|
27719
27755
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
27720
27756
|
];
|
|
@@ -27745,7 +27781,7 @@ class PersonValidatorService {
|
|
|
27745
27781
|
return this.formBuilder.group(formConfig);
|
|
27746
27782
|
}
|
|
27747
27783
|
}
|
|
27748
|
-
PersonValidatorService.ɵprov =
|
|
27784
|
+
PersonValidatorService.ɵprov = ɵɵdefineInjectable({ factory: function PersonValidatorService_Factory() { return new PersonValidatorService(ɵɵinject(FormBuilder), ɵɵinject(AccountValidatorService)); }, token: PersonValidatorService, providedIn: "root" });
|
|
27749
27785
|
PersonValidatorService.decorators = [
|
|
27750
27786
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
27751
27787
|
];
|
|
@@ -27923,7 +27959,7 @@ class UsersPage extends AppTable {
|
|
|
27923
27959
|
UsersPage.decorators = [
|
|
27924
27960
|
{ type: Component, args: [{
|
|
27925
27961
|
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",
|
|
27962
|
+
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
27963
|
providers: [
|
|
27928
27964
|
{ provide: ValidatorService, useExisting: PersonValidatorService }
|
|
27929
27965
|
],
|
|
@@ -27974,17 +28010,17 @@ AdminModule.decorators = [
|
|
|
27974
28010
|
];
|
|
27975
28011
|
AdminModule.ctorParameters = () => [];
|
|
27976
28012
|
|
|
27977
|
-
const ɵ0 = {
|
|
28013
|
+
const ɵ0$c = {
|
|
27978
28014
|
profile: 'ADMIN'
|
|
27979
28015
|
};
|
|
27980
|
-
const routes
|
|
28016
|
+
const routes = [
|
|
27981
28017
|
{
|
|
27982
28018
|
path: 'users',
|
|
27983
28019
|
pathMatch: 'full',
|
|
27984
28020
|
component: UsersPage,
|
|
27985
28021
|
canActivate: [AuthGuardService],
|
|
27986
28022
|
canDeactivate: [ComponentDirtyGuard],
|
|
27987
|
-
data: ɵ0
|
|
28023
|
+
data: ɵ0$c
|
|
27988
28024
|
}
|
|
27989
28025
|
];
|
|
27990
28026
|
class AdminRoutingModule {
|
|
@@ -27994,27 +28030,27 @@ AdminRoutingModule.decorators = [
|
|
|
27994
28030
|
imports: [
|
|
27995
28031
|
SharedRoutingModule,
|
|
27996
28032
|
AdminModule,
|
|
27997
|
-
RouterModule.forChild(routes
|
|
28033
|
+
RouterModule.forChild(routes)
|
|
27998
28034
|
],
|
|
27999
28035
|
exports: [RouterModule]
|
|
28000
28036
|
},] }
|
|
28001
28037
|
];
|
|
28002
28038
|
|
|
28003
|
-
class EntityTestClass
|
|
28039
|
+
class EntityTestClass {
|
|
28004
28040
|
}
|
|
28005
|
-
const FAKE_ENTITIES
|
|
28041
|
+
const FAKE_ENTITIES = [
|
|
28006
28042
|
{ id: 1, label: 'AAA', name: 'Item A', description: 'Very long description A', comments: 'Very very long comments... again for A' },
|
|
28007
28043
|
{ id: 2, label: 'BBB', name: 'Item B', description: 'Very long description B', comments: 'Very very long comments... again for B' },
|
|
28008
28044
|
{ id: 3, label: 'CCC', name: 'Item C', description: 'Very long description C', comments: 'Very very long comments... again for C' }
|
|
28009
28045
|
];
|
|
28010
|
-
function deepCopy
|
|
28046
|
+
function deepCopy(values, size) {
|
|
28011
28047
|
if (isNil(size)) {
|
|
28012
|
-
return (values || FAKE_ENTITIES
|
|
28048
|
+
return (values || FAKE_ENTITIES).map(entity => Object.assign({}, entity));
|
|
28013
28049
|
}
|
|
28014
28050
|
let result = [];
|
|
28015
28051
|
let i = 1;
|
|
28016
28052
|
while (result.length < size) {
|
|
28017
|
-
result = result.concat((values || FAKE_ENTITIES
|
|
28053
|
+
result = result.concat((values || FAKE_ENTITIES).map(entity => {
|
|
28018
28054
|
const name = entity.name + ' #' + i;
|
|
28019
28055
|
return Object.assign(Object.assign({}, entity), { id: i++, name });
|
|
28020
28056
|
}));
|
|
@@ -28024,7 +28060,7 @@ function deepCopy$1(values, size) {
|
|
|
28024
28060
|
class AutocompleteTestPage {
|
|
28025
28061
|
constructor(formBuilder) {
|
|
28026
28062
|
this.formBuilder = formBuilder;
|
|
28027
|
-
this._items = deepCopy
|
|
28063
|
+
this._items = deepCopy(FAKE_ENTITIES, 100);
|
|
28028
28064
|
this._$items = new BehaviorSubject(undefined);
|
|
28029
28065
|
this.autocompleteFields = new MatAutocompleteConfigHolder();
|
|
28030
28066
|
this.memoryHide = false;
|
|
@@ -28069,7 +28105,7 @@ class AutocompleteTestPage {
|
|
|
28069
28105
|
});
|
|
28070
28106
|
// From items
|
|
28071
28107
|
this.autocompleteFields.add('entity-items-large', {
|
|
28072
|
-
items: FAKE_ENTITIES
|
|
28108
|
+
items: FAKE_ENTITIES.slice(),
|
|
28073
28109
|
attributes: ['label', 'name', 'description', 'comments'],
|
|
28074
28110
|
displayWith: this.entityToString
|
|
28075
28111
|
});
|
|
@@ -28101,14 +28137,14 @@ class AutocompleteTestPage {
|
|
|
28101
28137
|
loadData() {
|
|
28102
28138
|
return __awaiter(this, void 0, void 0, function* () {
|
|
28103
28139
|
const data = {
|
|
28104
|
-
entity: deepCopy
|
|
28105
|
-
farEntity: deepCopy
|
|
28140
|
+
entity: deepCopy(FAKE_ENTITIES)[0],
|
|
28141
|
+
farEntity: deepCopy(FAKE_ENTITIES)[2],
|
|
28106
28142
|
// This item is NOT in the items list => i should be displayed anyway
|
|
28107
28143
|
missingEntity: {
|
|
28108
28144
|
id: -1, label: '??', name: 'Missing item'
|
|
28109
28145
|
},
|
|
28110
|
-
disableEntity: deepCopy
|
|
28111
|
-
entities: deepCopy
|
|
28146
|
+
disableEntity: deepCopy(FAKE_ENTITIES)[2],
|
|
28147
|
+
entities: deepCopy(FAKE_ENTITIES)
|
|
28112
28148
|
};
|
|
28113
28149
|
this.form.setValue(data);
|
|
28114
28150
|
// Load observables
|
|
@@ -28258,13 +28294,13 @@ LatLongTestPage.ctorParameters = () => [
|
|
|
28258
28294
|
{ type: FormBuilder }
|
|
28259
28295
|
];
|
|
28260
28296
|
|
|
28261
|
-
const moment$
|
|
28297
|
+
const moment$7 = momentImported;
|
|
28262
28298
|
class SwipeTestPage {
|
|
28263
28299
|
constructor(formBuilder, dateFormatPipe) {
|
|
28264
28300
|
this.formBuilder = formBuilder;
|
|
28265
28301
|
this.dateFormatPipe = dateFormatPipe;
|
|
28266
28302
|
this.$dates = new BehaviorSubject(undefined);
|
|
28267
|
-
this._today = moment$
|
|
28303
|
+
this._today = moment$7().startOf('day');
|
|
28268
28304
|
this.form = formBuilder.group({
|
|
28269
28305
|
empty: [null, Validators.required],
|
|
28270
28306
|
date: [null, Validators.compose([Validators.required, SharedValidators.validDate])],
|
|
@@ -28277,7 +28313,7 @@ class SwipeTestPage {
|
|
|
28277
28313
|
ngOnInit() {
|
|
28278
28314
|
const dates = [];
|
|
28279
28315
|
for (let d = 0; d < 7; d++) {
|
|
28280
|
-
dates[d] = moment$
|
|
28316
|
+
dates[d] = moment$7(this._today).add(d - 3, 'day');
|
|
28281
28317
|
}
|
|
28282
28318
|
this.$dates.next(dates);
|
|
28283
28319
|
this.loadData();
|
|
@@ -28318,7 +28354,7 @@ SwipeTestPage.ctorParameters = () => [
|
|
|
28318
28354
|
{ type: DateFormatPipe }
|
|
28319
28355
|
];
|
|
28320
28356
|
|
|
28321
|
-
const moment$
|
|
28357
|
+
const moment$8 = momentImported;
|
|
28322
28358
|
class DateTimeTestPage {
|
|
28323
28359
|
constructor(platform, formBuilder, cd) {
|
|
28324
28360
|
this.platform = platform;
|
|
@@ -28352,7 +28388,7 @@ class DateTimeTestPage {
|
|
|
28352
28388
|
// Load the form with data
|
|
28353
28389
|
loadData() {
|
|
28354
28390
|
return __awaiter(this, void 0, void 0, function* () {
|
|
28355
|
-
const now = moment$
|
|
28391
|
+
const now = moment$8();
|
|
28356
28392
|
const data = {
|
|
28357
28393
|
empty: null,
|
|
28358
28394
|
emptyRequired: null,
|
|
@@ -28418,9 +28454,9 @@ DateTimeTestPage.ctorParameters = () => [
|
|
|
28418
28454
|
{ type: ChangeDetectorRef }
|
|
28419
28455
|
];
|
|
28420
28456
|
|
|
28421
|
-
class EntityTestClass {
|
|
28457
|
+
class EntityTestClass$1 {
|
|
28422
28458
|
}
|
|
28423
|
-
const FAKE_ENTITIES = [
|
|
28459
|
+
const FAKE_ENTITIES$1 = [
|
|
28424
28460
|
{ id: 1, label: 'AAA', name: 'Item A' },
|
|
28425
28461
|
{ id: 2, label: 'BBB', name: 'Item B' },
|
|
28426
28462
|
{ id: 3, label: 'CCC', name: 'Item C' },
|
|
@@ -28429,14 +28465,14 @@ const FAKE_ENTITIES = [
|
|
|
28429
28465
|
{ id: 6, label: 'FFF', name: 'Item F' },
|
|
28430
28466
|
{ id: 7, label: 'GGG', name: 'Item G' }
|
|
28431
28467
|
];
|
|
28432
|
-
function deepCopy(values, size) {
|
|
28468
|
+
function deepCopy$1(values, size) {
|
|
28433
28469
|
if (isNil(size)) {
|
|
28434
|
-
return (values || FAKE_ENTITIES).map(entity => Object.assign({}, entity));
|
|
28470
|
+
return (values || FAKE_ENTITIES$1).map(entity => Object.assign({}, entity));
|
|
28435
28471
|
}
|
|
28436
28472
|
let result = [];
|
|
28437
28473
|
let i = 1;
|
|
28438
28474
|
while (result.length < size) {
|
|
28439
|
-
result = result.concat((values || FAKE_ENTITIES).map(entity => {
|
|
28475
|
+
result = result.concat((values || FAKE_ENTITIES$1).map(entity => {
|
|
28440
28476
|
const name = entity.name + ' #' + i;
|
|
28441
28477
|
return Object.assign(Object.assign({}, entity), { id: i++, name });
|
|
28442
28478
|
}));
|
|
@@ -28446,7 +28482,7 @@ function deepCopy(values, size) {
|
|
|
28446
28482
|
class ChipsTestPage {
|
|
28447
28483
|
constructor(formBuilder) {
|
|
28448
28484
|
this.formBuilder = formBuilder;
|
|
28449
|
-
this._items = deepCopy(FAKE_ENTITIES, 100);
|
|
28485
|
+
this._items = deepCopy$1(FAKE_ENTITIES$1, 100);
|
|
28450
28486
|
this._$items = new BehaviorSubject(undefined);
|
|
28451
28487
|
this.autocompleteFields = new MatAutocompleteConfigHolder();
|
|
28452
28488
|
this.appearance = 'legacy';
|
|
@@ -28486,7 +28522,7 @@ class ChipsTestPage {
|
|
|
28486
28522
|
// Load the form with data
|
|
28487
28523
|
loadData() {
|
|
28488
28524
|
return __awaiter(this, void 0, void 0, function* () {
|
|
28489
|
-
const items = deepCopy(FAKE_ENTITIES);
|
|
28525
|
+
const items = deepCopy$1(FAKE_ENTITIES$1);
|
|
28490
28526
|
const data = {
|
|
28491
28527
|
entity: items.slice(0, 1),
|
|
28492
28528
|
entityInitial: items.slice(1, 2),
|
|
@@ -28602,7 +28638,7 @@ NumpadTestPage.ctorParameters = () => [
|
|
|
28602
28638
|
{ type: FormBuilder }
|
|
28603
28639
|
];
|
|
28604
28640
|
|
|
28605
|
-
const moment$
|
|
28641
|
+
const moment$9 = momentImported;
|
|
28606
28642
|
class DateTestPage {
|
|
28607
28643
|
constructor(formBuilder, cd) {
|
|
28608
28644
|
this.formBuilder = formBuilder;
|
|
@@ -28635,7 +28671,7 @@ class DateTestPage {
|
|
|
28635
28671
|
// Load the form with data
|
|
28636
28672
|
loadData() {
|
|
28637
28673
|
return __awaiter(this, void 0, void 0, function* () {
|
|
28638
|
-
const now = moment$
|
|
28674
|
+
const now = moment$9();
|
|
28639
28675
|
const nowAtMahe = now.clone().tz(this.timezone).startOf('day');
|
|
28640
28676
|
const data = {
|
|
28641
28677
|
empty: null,
|
|
@@ -28713,7 +28749,7 @@ const SHARED_MATERIAL_TESTING_PAGES = [
|
|
|
28713
28749
|
{ label: 'Shared directives', divider: true },
|
|
28714
28750
|
{ label: 'Badge icon directive', page: '/testing/shared/badge-icon' }
|
|
28715
28751
|
];
|
|
28716
|
-
const routes$
|
|
28752
|
+
const routes$1 = [
|
|
28717
28753
|
{
|
|
28718
28754
|
path: '',
|
|
28719
28755
|
pathMatch: 'full',
|
|
@@ -28770,7 +28806,7 @@ MaterialTestingModule.decorators = [
|
|
|
28770
28806
|
ReactiveFormsModule,
|
|
28771
28807
|
SharedMaterialModule,
|
|
28772
28808
|
TranslateModule.forChild(),
|
|
28773
|
-
RouterModule.forChild(routes$
|
|
28809
|
+
RouterModule.forChild(routes$1)
|
|
28774
28810
|
],
|
|
28775
28811
|
declarations: [
|
|
28776
28812
|
DateTimeTestPage,
|
|
@@ -28831,7 +28867,7 @@ ToastTestingPage.ctorParameters = () => [
|
|
|
28831
28867
|
{ type: TranslateService }
|
|
28832
28868
|
];
|
|
28833
28869
|
|
|
28834
|
-
const routes$
|
|
28870
|
+
const routes$2 = [
|
|
28835
28871
|
{
|
|
28836
28872
|
path: 'toast',
|
|
28837
28873
|
pathMatch: 'full',
|
|
@@ -28846,7 +28882,7 @@ ToastTestingModule.decorators = [
|
|
|
28846
28882
|
CommonModule,
|
|
28847
28883
|
IonicModule,
|
|
28848
28884
|
TranslateModule.forChild(),
|
|
28849
|
-
RouterModule.forChild(routes$
|
|
28885
|
+
RouterModule.forChild(routes$2)
|
|
28850
28886
|
],
|
|
28851
28887
|
declarations: [
|
|
28852
28888
|
ToastTestingPage
|
|
@@ -29110,7 +29146,7 @@ class TableTestPage extends AppTable {
|
|
|
29110
29146
|
console.debug('[test-table] Destroying table...');
|
|
29111
29147
|
super.ngOnDestroy();
|
|
29112
29148
|
this.stopTimer();
|
|
29113
|
-
this.dataService.
|
|
29149
|
+
this.dataService.stop();
|
|
29114
29150
|
}
|
|
29115
29151
|
restoreFilter() {
|
|
29116
29152
|
const json = this.settings.getPageSettings(this.settingsId, 'filter');
|
|
@@ -29301,7 +29337,7 @@ TextPopoverTestingPage.ctorParameters = () => [
|
|
|
29301
29337
|
{ type: PopoverController }
|
|
29302
29338
|
];
|
|
29303
29339
|
|
|
29304
|
-
const routes$
|
|
29340
|
+
const routes$4 = [
|
|
29305
29341
|
{
|
|
29306
29342
|
path: 'text-popover',
|
|
29307
29343
|
pathMatch: 'full',
|
|
@@ -29316,7 +29352,7 @@ TextPopoverTestingModule.decorators = [
|
|
|
29316
29352
|
CommonModule,
|
|
29317
29353
|
IonicModule,
|
|
29318
29354
|
TranslateModule.forChild(),
|
|
29319
|
-
RouterModule.forChild(routes$
|
|
29355
|
+
RouterModule.forChild(routes$4)
|
|
29320
29356
|
],
|
|
29321
29357
|
declarations: [
|
|
29322
29358
|
TextPopoverTestingPage
|
|
@@ -29333,7 +29369,7 @@ const CORE_TESTING_PAGES = [
|
|
|
29333
29369
|
{ label: 'Table', page: '/testing/core/table' },
|
|
29334
29370
|
{ label: 'Text popover', page: '/testing/core/text-popover' }
|
|
29335
29371
|
];
|
|
29336
|
-
const routes$
|
|
29372
|
+
const routes$5 = [
|
|
29337
29373
|
{
|
|
29338
29374
|
path: '',
|
|
29339
29375
|
pathMatch: 'full',
|
|
@@ -29357,7 +29393,7 @@ CoreTestingModule.decorators = [
|
|
|
29357
29393
|
imports: [
|
|
29358
29394
|
CommonModule,
|
|
29359
29395
|
TranslateModule.forChild(),
|
|
29360
|
-
RouterModule.forChild(routes$
|
|
29396
|
+
RouterModule.forChild(routes$5),
|
|
29361
29397
|
// Sub modules
|
|
29362
29398
|
TableTestingModule,
|
|
29363
29399
|
TextPopoverTestingModule
|
|
@@ -29660,7 +29696,7 @@ UserEventTestService.ctorParameters = () => [
|
|
|
29660
29696
|
{ type: Environment, decorators: [{ type: Optional }, { type: Inject, args: [ENVIRONMENT,] }] }
|
|
29661
29697
|
];
|
|
29662
29698
|
|
|
29663
|
-
const moment = momentImported;
|
|
29699
|
+
const moment$a = momentImported;
|
|
29664
29700
|
class UserEventTestingPage {
|
|
29665
29701
|
constructor(userEventService, router, alertController, translateService) {
|
|
29666
29702
|
this.userEventService = userEventService;
|
|
@@ -29721,7 +29757,7 @@ class UserEventTestingPage {
|
|
|
29721
29757
|
type: 'message',
|
|
29722
29758
|
level: 'INFO',
|
|
29723
29759
|
message: 'message test message test message test message test message test message test message test message test',
|
|
29724
|
-
creationDate: moment(),
|
|
29760
|
+
creationDate: moment$a(),
|
|
29725
29761
|
}));
|
|
29726
29762
|
}
|
|
29727
29763
|
addError() {
|
|
@@ -29731,7 +29767,7 @@ class UserEventTestingPage {
|
|
|
29731
29767
|
type: 'upload',
|
|
29732
29768
|
level: 'ERROR',
|
|
29733
29769
|
message: 'message error',
|
|
29734
|
-
creationDate: moment(),
|
|
29770
|
+
creationDate: moment$a(),
|
|
29735
29771
|
}));
|
|
29736
29772
|
}
|
|
29737
29773
|
addWarning() {
|
|
@@ -29741,7 +29777,7 @@ class UserEventTestingPage {
|
|
|
29741
29777
|
type: 'download',
|
|
29742
29778
|
level: 'WARNING',
|
|
29743
29779
|
message: 'message warning',
|
|
29744
|
-
creationDate: moment(),
|
|
29780
|
+
creationDate: moment$a(),
|
|
29745
29781
|
}));
|
|
29746
29782
|
}
|
|
29747
29783
|
addDebug() {
|
|
@@ -29751,7 +29787,7 @@ class UserEventTestingPage {
|
|
|
29751
29787
|
type: 'debug',
|
|
29752
29788
|
level: 'DEBUG',
|
|
29753
29789
|
message: 'message DEBUG',
|
|
29754
|
-
creationDate: moment(),
|
|
29790
|
+
creationDate: moment$a(),
|
|
29755
29791
|
}));
|
|
29756
29792
|
}
|
|
29757
29793
|
addNotificationWithLink() {
|
|
@@ -29761,7 +29797,7 @@ class UserEventTestingPage {
|
|
|
29761
29797
|
type: 'message',
|
|
29762
29798
|
level: 'INFO',
|
|
29763
29799
|
message: 'message with link',
|
|
29764
|
-
creationDate: moment(),
|
|
29800
|
+
creationDate: moment$a(),
|
|
29765
29801
|
actions: [{
|
|
29766
29802
|
name: 'click here',
|
|
29767
29803
|
iconRef: {
|
|
@@ -29778,7 +29814,7 @@ class UserEventTestingPage {
|
|
|
29778
29814
|
type: 'message',
|
|
29779
29815
|
level: 'INFO',
|
|
29780
29816
|
message: 'message with action',
|
|
29781
|
-
creationDate: moment(),
|
|
29817
|
+
creationDate: moment$a(),
|
|
29782
29818
|
actions: [
|
|
29783
29819
|
{
|
|
29784
29820
|
name: 'click here',
|
|
@@ -29850,7 +29886,7 @@ class UserEventTestingPage {
|
|
|
29850
29886
|
type: 'message',
|
|
29851
29887
|
level: 'INFO',
|
|
29852
29888
|
message: 'message with action',
|
|
29853
|
-
creationDate: moment(),
|
|
29889
|
+
creationDate: moment$a(),
|
|
29854
29890
|
actions: [
|
|
29855
29891
|
{
|
|
29856
29892
|
default: true,
|
|
@@ -29904,7 +29940,7 @@ const SOCIAL_TESTING_PAGES = [
|
|
|
29904
29940
|
{ label: 'User event', page: '/testing/social/user-event' },
|
|
29905
29941
|
{ label: 'Job progression', page: '/testing/social/job-progression' }
|
|
29906
29942
|
];
|
|
29907
|
-
const routes = [
|
|
29943
|
+
const routes$6 = [
|
|
29908
29944
|
{
|
|
29909
29945
|
path: 'job-progression',
|
|
29910
29946
|
pathMatch: 'full',
|
|
@@ -29923,7 +29959,7 @@ SocialTestingModule.decorators = [
|
|
|
29923
29959
|
imports: [
|
|
29924
29960
|
CommonModule,
|
|
29925
29961
|
TranslateModule.forChild(),
|
|
29926
|
-
RouterModule.forChild(routes),
|
|
29962
|
+
RouterModule.forChild(routes$6),
|
|
29927
29963
|
JobTestingModule,
|
|
29928
29964
|
UserEventTestingModule
|
|
29929
29965
|
],
|
|
@@ -29936,5 +29972,5 @@ SocialTestingModule.decorators = [
|
|
|
29936
29972
|
* Generated bundle index. Do not edit.
|
|
29937
29973
|
*/
|
|
29938
29974
|
|
|
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,
|
|
29975
|
+
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
29976
|
//# sourceMappingURL=sumaris-net.ngx-components.js.map
|