@sumaris-net/ngx-components 1.17.1 → 1.18.0-rc1
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 +570 -492
- package/bundles/sumaris-net.ngx-components.umd.js.map +1 -1
- package/bundles/sumaris-net.ngx-components.umd.min.js +2 -2
- package/bundles/sumaris-net.ngx-components.umd.min.js.map +1 -1
- package/doc/changelog.md +5 -0
- package/esm2015/src/app/shared/hotkeys/hotkeys.service.js +7 -11
- package/esm2015/src/app/shared/inputs.js +1 -1
- package/esm2015/src/app/shared/material/autocomplete/material.autocomplete.js +102 -61
- package/esm2015/src/app/shared/material/autocomplete/testing/autocomplete.test.js +20 -5
- package/esm2015/src/app/shared/material/chips/material.chips.js +26 -23
- package/esm2015/src/app/shared/material/material.module.js +1 -1
- package/fesm2015/sumaris-net.ngx-components.js +541 -472
- package/fesm2015/sumaris-net.ngx-components.js.map +1 -1
- package/package.json +1 -1
- package/src/app/shared/hotkeys/hotkeys.service.d.ts +2 -3
- package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +8 -3
- package/src/app/shared/material/autocomplete/testing/autocomplete.test.d.ts +5 -3
- package/src/theme/_ngx-components.scss +67 -20
- package/sumaris-net.ngx-components.metadata.json +1 -1
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { InjectionToken, EventEmitter, 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';
|
|
2
4
|
import { CommonModule, DOCUMENT, Location } from '@angular/common';
|
|
3
5
|
import { CdkTableModule } from '@angular/cdk/table';
|
|
4
6
|
import { A11yModule } from '@angular/cdk/a11y';
|
|
5
7
|
import { OverlayModule, OverlayContainer, FullscreenOverlayContainer, Overlay } from '@angular/cdk/overlay';
|
|
6
8
|
import { ScrollingModule } from '@angular/cdk/scrolling';
|
|
9
|
+
import * as i1$2 from '@angular/material/core';
|
|
7
10
|
import { DateAdapter, MatCommonModule, MatRippleModule } from '@angular/material/core';
|
|
8
11
|
import { MatTableModule, MatTable, MatColumnDef } from '@angular/material/table';
|
|
9
12
|
import { MatSortModule, MatSort } from '@angular/material/sort';
|
|
@@ -27,52 +30,63 @@ import { MatProgressBarModule } from '@angular/material/progress-bar';
|
|
|
27
30
|
import { MatRadioModule } from '@angular/material/radio';
|
|
28
31
|
import { MatBadgeModule } from '@angular/material/badge';
|
|
29
32
|
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
|
|
33
|
+
import * as i2$1 from '@angular/material/dialog';
|
|
30
34
|
import { MatDialogModule, MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';
|
|
31
35
|
import { MatAutocomplete, MatAutocompleteTrigger, MatAutocompleteModule, MAT_AUTOCOMPLETE_SCROLL_STRATEGY, MAT_AUTOCOMPLETE_DEFAULT_OPTIONS } from '@angular/material/autocomplete';
|
|
32
36
|
import { __awaiter, __decorate } from 'tslib';
|
|
37
|
+
import * as i1$6 from '@angular/forms';
|
|
33
38
|
import { NG_VALUE_ACCESSOR, FormGroupDirective, AbstractControl, FormGroup, FormArray, FormControl, ReactiveFormsModule, Validators, FormBuilder } from '@angular/forms';
|
|
34
39
|
import { timer, merge, fromEvent, BehaviorSubject, Subscription, Subject, isObservable, from, of, noop as noop$9, Observable, defer, forkJoin, combineLatest, EMPTY } from 'rxjs';
|
|
35
40
|
import { filter, first, map, takeUntil, switchMap, startWith, debounceTime, takeWhile, tap, distinctUntilChanged, mergeMap, catchError, throttleTime, skip } from 'rxjs/operators';
|
|
41
|
+
import { trigger, transition, style, animate, state } from '@angular/animations';
|
|
42
|
+
import * as i1$1 from '@ngx-translate/core';
|
|
36
43
|
import { TranslateService, TranslateModule } from '@ngx-translate/core';
|
|
37
|
-
import
|
|
44
|
+
import * as i1$4 from '@ionic/angular';
|
|
45
|
+
import { IonicModule, Platform, IonRouterOutlet, ModalController, IonicSafeString, createAnimation, ToastController, PopoverController, AlertController, IonicRouteStrategy, NavParams, MenuController, IonContent, IonInfiniteScroll } from '@ionic/angular';
|
|
38
46
|
import * as momentImported from 'moment';
|
|
39
47
|
import { isMoment } from 'moment';
|
|
48
|
+
import * as i1 from '@angular/material-moment-adapter';
|
|
40
49
|
import { MomentDateAdapter, MatMomentDateModule } from '@angular/material-moment-adapter';
|
|
41
50
|
import * as momentTZImported from 'moment-timezone';
|
|
42
51
|
import { Keyboard } from '@ionic-native/keyboard/ngx';
|
|
43
52
|
import { TextMaskModule } from 'angular2-text-mask';
|
|
44
53
|
import { NgxMaterialTimepickerModule } from 'ngx-material-timepicker';
|
|
45
54
|
import { MatDatepickerModule } from '@angular/material/datepicker';
|
|
46
|
-
import { trigger, state, style, transition, animate } from '@angular/animations';
|
|
47
55
|
import { MatDividerModule } from '@angular/material/divider';
|
|
48
56
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
49
57
|
import { MatChipsModule } from '@angular/material/chips';
|
|
58
|
+
import * as i3$3 from '@angular/router';
|
|
50
59
|
import { Router, ActivatedRoute, RouterModule, RouteReuseStrategy } from '@angular/router';
|
|
60
|
+
import * as i1$5 from '@angular/platform-browser';
|
|
51
61
|
import { HammerGestureConfig, EventManager } from '@angular/platform-browser';
|
|
62
|
+
import * as i2$2 from '@angular/common/http';
|
|
52
63
|
import { HttpResponse, HttpClient, HttpHeaders, HttpEventType, HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';
|
|
53
64
|
import { ColorPickerModule } from 'ngx-color-picker';
|
|
54
|
-
import { NativeAudio
|
|
55
|
-
import { Vibration
|
|
65
|
+
import { NativeAudio } from '@ionic-native/native-audio/ngx';
|
|
66
|
+
import { Vibration } from '@ionic-native/vibration/ngx';
|
|
56
67
|
import { AudioManagement } from '@ionic-native/audio-management/ngx';
|
|
57
|
-
import
|
|
58
|
-
import
|
|
59
|
-
import
|
|
68
|
+
import * as i2 from '@ionic-native/native-audio/ngx/index';
|
|
69
|
+
import * as i3 from '@ionic-native/vibration/ngx/index';
|
|
70
|
+
import * as i4 from '@ionic-native/audio-management/ngx/index';
|
|
60
71
|
import * as uuidv4Imported from 'uuid/v4';
|
|
61
72
|
import { DragDropModule } from '@angular/cdk/drag-drop';
|
|
62
73
|
import { MarkdownModule } from 'ngx-markdown';
|
|
63
74
|
import { sign, box, hash, verify } from 'tweetnacl';
|
|
75
|
+
import * as i3$1 from '@ionic/storage';
|
|
64
76
|
import { Storage, IonicStorageModule } from '@ionic/storage';
|
|
65
77
|
import 'zone.js/dist/zone-error';
|
|
66
|
-
import { SplashScreen
|
|
67
|
-
import { Connection, Network
|
|
68
|
-
import { CacheService
|
|
69
|
-
import
|
|
70
|
-
import
|
|
71
|
-
import
|
|
72
|
-
import { StatusBar
|
|
78
|
+
import { SplashScreen } from '@ionic-native/splash-screen/ngx';
|
|
79
|
+
import { Connection, Network } from '@ionic-native/network/ngx';
|
|
80
|
+
import { CacheService, CacheModule } from 'ionic-cache';
|
|
81
|
+
import * as i6 from 'ionic-cache/dist/cache.service';
|
|
82
|
+
import * as i9 from '@ionic-native/network/ngx/index';
|
|
83
|
+
import * as i10 from '@ionic-native/splash-screen/ngx/index';
|
|
84
|
+
import { StatusBar } from '@ionic-native/status-bar/ngx';
|
|
85
|
+
import * as i2$4 from '@angular/cdk/platform';
|
|
73
86
|
import { Platform as Platform$1 } from '@angular/cdk/platform';
|
|
74
|
-
import { InAppBrowser
|
|
87
|
+
import { InAppBrowser } from '@ionic-native/in-app-browser/ngx';
|
|
75
88
|
import { ApolloLink, NetworkStatus, InMemoryCache, ApolloClient, gql } from '@apollo/client/core';
|
|
89
|
+
import * as i2$3 from 'apollo-angular';
|
|
76
90
|
import { Apollo } from 'apollo-angular';
|
|
77
91
|
import { WebSocketLink } from '@apollo/client/link/ws';
|
|
78
92
|
import { getMainDefinition } from '@apollo/client/utilities';
|
|
@@ -80,13 +94,14 @@ import { RetryLink } from '@apollo/client/link/retry';
|
|
|
80
94
|
import QueueLink from 'apollo-link-queue';
|
|
81
95
|
import SerializingLink from 'apollo-link-serialize';
|
|
82
96
|
import loggerLink from 'apollo-link-logger';
|
|
97
|
+
import * as i3$2 from 'apollo-angular/http';
|
|
83
98
|
import { HttpLink } from 'apollo-angular/http';
|
|
84
99
|
import { IonicStorageWrapper, persistCache } from 'apollo3-cache-persist';
|
|
85
|
-
import { NotificationVisibility, Downloader
|
|
86
|
-
import
|
|
87
|
-
import
|
|
88
|
-
import
|
|
89
|
-
import
|
|
100
|
+
import { NotificationVisibility, Downloader } from '@ionic-native/downloader/ngx';
|
|
101
|
+
import * as i14 from '@ionic-native/status-bar/ngx/index';
|
|
102
|
+
import * as i15 from '@ionic-native/keyboard/ngx/index';
|
|
103
|
+
import * as i17 from '@ionic-native/in-app-browser/ngx/index';
|
|
104
|
+
import * as i18 from '@ionic-native/downloader/ngx/index';
|
|
90
105
|
import { CdkTextareaAutosize } from '@angular/cdk/text-field';
|
|
91
106
|
import { ValidatorService, TableDataSource } from '@e-is/ngx-material-table';
|
|
92
107
|
import { SelectionModel } from '@angular/cdk/collections';
|
|
@@ -942,6 +957,109 @@ function fromScrollEndEvent(element, threshold) {
|
|
|
942
957
|
.pipe(filter(() => isEnd()));
|
|
943
958
|
}
|
|
944
959
|
|
|
960
|
+
// import the required animation functions from the angular animations module
|
|
961
|
+
const fadeInAnimation =
|
|
962
|
+
// trigger name for attaching this animation to an element using the [@triggerName] syntax
|
|
963
|
+
trigger('fadeInAnimation', [
|
|
964
|
+
// route 'enter' transition
|
|
965
|
+
transition(':enter', [
|
|
966
|
+
// css styles at start of transition
|
|
967
|
+
style({ opacity: 0 }),
|
|
968
|
+
// animation and styles at end of transition
|
|
969
|
+
animate('.3s', style({ opacity: 1 }))
|
|
970
|
+
]),
|
|
971
|
+
]);
|
|
972
|
+
const fadeInOutAnimation =
|
|
973
|
+
// trigger name for attaching this animation to an element using the [@triggerName] syntax
|
|
974
|
+
trigger('fadeInOutAnimation', [
|
|
975
|
+
// route 'enter' transition
|
|
976
|
+
transition(':enter', [
|
|
977
|
+
// css styles at start of transition
|
|
978
|
+
style({ opacity: 0 }),
|
|
979
|
+
// animation and styles at end of transition
|
|
980
|
+
animate('.3s', style({ opacity: 1 }))
|
|
981
|
+
]),
|
|
982
|
+
// route 'leave' transition
|
|
983
|
+
transition(':leave', [
|
|
984
|
+
// animation and styles at end of transition
|
|
985
|
+
animate('.5s ease-in-out', style({
|
|
986
|
+
opacity: 0
|
|
987
|
+
}))
|
|
988
|
+
]),
|
|
989
|
+
]);
|
|
990
|
+
const slideInOutAnimation =
|
|
991
|
+
// trigger name for attaching this animation to an element using the [@triggerName] syntax
|
|
992
|
+
trigger('slideInOutAnimation', [
|
|
993
|
+
// end state styles for route container (host)
|
|
994
|
+
state('*', style({
|
|
995
|
+
// the view covers the whole screen with a semi tranparent background
|
|
996
|
+
position: 'relative',
|
|
997
|
+
top: 0,
|
|
998
|
+
left: 0,
|
|
999
|
+
right: 0,
|
|
1000
|
+
bottom: 0,
|
|
1001
|
+
opacity: 1
|
|
1002
|
+
})),
|
|
1003
|
+
// route 'enter' transition
|
|
1004
|
+
transition(':enter', [
|
|
1005
|
+
// styles at start of transition
|
|
1006
|
+
style({
|
|
1007
|
+
// start with the content positioned off the right of the screen,
|
|
1008
|
+
// -400% is required instead of -100% because the negative position adds to the width of the element
|
|
1009
|
+
left: '400%',
|
|
1010
|
+
// start with background opacity set to 0 (invisible)
|
|
1011
|
+
opacity: 0
|
|
1012
|
+
}),
|
|
1013
|
+
// animation and styles at end of transition
|
|
1014
|
+
animate('.3s ease-in-out', style({
|
|
1015
|
+
// transition the right position to 0 which slides the content into view
|
|
1016
|
+
left: 0,
|
|
1017
|
+
// transition the background opacity to 0.8 to fade it in
|
|
1018
|
+
opacity: 0.8
|
|
1019
|
+
}))
|
|
1020
|
+
]),
|
|
1021
|
+
// route 'leave' transition
|
|
1022
|
+
transition(':leave', [
|
|
1023
|
+
// animation and styles at end of transition
|
|
1024
|
+
animate('.5s ease-in-out', style({
|
|
1025
|
+
// transition the right position to -400% which slides the content out of view
|
|
1026
|
+
left: '400%',
|
|
1027
|
+
// transition the background opacity to 0 to fade it out
|
|
1028
|
+
opacity: 0
|
|
1029
|
+
}))
|
|
1030
|
+
])
|
|
1031
|
+
]);
|
|
1032
|
+
const slideUpDownAnimation =
|
|
1033
|
+
// trigger name for attaching this animation to an element using the [@triggerName] syntax
|
|
1034
|
+
trigger('slideUpDownAnimation', [
|
|
1035
|
+
// end state styles for route container (host)
|
|
1036
|
+
state('*', style({
|
|
1037
|
+
transform: 'translateY(0)',
|
|
1038
|
+
opacity: 1
|
|
1039
|
+
})),
|
|
1040
|
+
// route 'enter' transition
|
|
1041
|
+
transition(':enter', [
|
|
1042
|
+
// styles at start of transition
|
|
1043
|
+
style({
|
|
1044
|
+
transform: 'translateY(-400%)',
|
|
1045
|
+
opacity: 0
|
|
1046
|
+
}),
|
|
1047
|
+
// animation and styles at end of transition
|
|
1048
|
+
animate('.3s ease-in-out', style({
|
|
1049
|
+
transform: 'translateY(0)',
|
|
1050
|
+
opacity: 1
|
|
1051
|
+
}))
|
|
1052
|
+
]),
|
|
1053
|
+
// route 'leave' transition
|
|
1054
|
+
transition(':leave', [
|
|
1055
|
+
// animation and styles at end of transition
|
|
1056
|
+
animate('.5s ease-in-out', style({
|
|
1057
|
+
transform: 'translateY(-100%)',
|
|
1058
|
+
opacity: 0
|
|
1059
|
+
}))
|
|
1060
|
+
])
|
|
1061
|
+
]);
|
|
1062
|
+
|
|
945
1063
|
class MatAutocompleteConfigHolder {
|
|
946
1064
|
constructor(options) {
|
|
947
1065
|
this.options = options;
|
|
@@ -963,8 +1081,8 @@ class MatAutocompleteConfigHolder {
|
|
|
963
1081
|
// Keep original the function from options, when exists
|
|
964
1082
|
const attributesOrFn = attributes.map((a, index) => typeof a === 'function' && options.attributes[index] || a);
|
|
965
1083
|
const filter = Object.assign({ searchAttribute: attributes.length === 1 ? attributes[0] : undefined, searchAttributes: attributes.length > 1 ? attributes : undefined }, options.filter);
|
|
966
|
-
const displayWith = options.displayWith || (
|
|
967
|
-
const equals = options.equals ||
|
|
1084
|
+
const displayWith = options.displayWith || MatAutocompleteFieldUtils.createDisplayFn(attributes, options.multiple);
|
|
1085
|
+
const equals = options.equals || MatAutocompleteFieldUtils.defaultEquals;
|
|
968
1086
|
const config = Object.assign(Object.assign({}, options), { attributes: attributesOrFn, suggestFn,
|
|
969
1087
|
filter,
|
|
970
1088
|
displayWith,
|
|
@@ -979,14 +1097,31 @@ class MatAutocompleteConfigHolder {
|
|
|
979
1097
|
return this.fields[fieldName] || this.add(fieldName);
|
|
980
1098
|
}
|
|
981
1099
|
}
|
|
982
|
-
|
|
983
|
-
|
|
1100
|
+
class MatAutocompleteFieldUtils {
|
|
1101
|
+
static createDisplayFn(displayAttributes, multiple) {
|
|
1102
|
+
// if multiple (manage array)
|
|
1103
|
+
if (multiple) {
|
|
1104
|
+
return (value) => {
|
|
1105
|
+
return Array.isArray(value)
|
|
1106
|
+
? (value || []).map(obj => obj && joinPropertiesPath(obj, displayAttributes)).join(', ')
|
|
1107
|
+
: value && joinPropertiesPath(value, displayAttributes);
|
|
1108
|
+
};
|
|
1109
|
+
}
|
|
1110
|
+
// Join properties
|
|
1111
|
+
return (obj) => obj && joinPropertiesPath(obj, displayAttributes);
|
|
1112
|
+
}
|
|
1113
|
+
static defaultEquals(o1, o2) {
|
|
1114
|
+
return isNotNil(o1 === null || o1 === void 0 ? void 0 : o1.id) && o1.id === (o2 === null || o2 === void 0 ? void 0 : o2.id);
|
|
1115
|
+
}
|
|
1116
|
+
}
|
|
1117
|
+
const noop$8 = (_) => { };
|
|
1118
|
+
const ɵ0$c = noop$8;
|
|
984
1119
|
class MatAutocompleteField {
|
|
985
1120
|
constructor(cd, formGroupDir) {
|
|
986
1121
|
this.cd = cd;
|
|
987
1122
|
this.formGroupDir = formGroupDir;
|
|
988
|
-
this._onChangeCallback = noop;
|
|
989
|
-
this._onTouchedCallback = noop;
|
|
1123
|
+
this._onChangeCallback = noop$8;
|
|
1124
|
+
this._onTouchedCallback = noop$8;
|
|
990
1125
|
this.logPrefix = '[mat-autocomplete] ';
|
|
991
1126
|
this.formControlName = null;
|
|
992
1127
|
this.required = false;
|
|
@@ -994,12 +1129,13 @@ class MatAutocompleteField {
|
|
|
994
1129
|
this.debounceTime = null;
|
|
995
1130
|
this.i18nPrefix = 'REFERENTIAL.';
|
|
996
1131
|
this.noResultMessage = 'COMMON.NO_RESULT';
|
|
997
|
-
this.multiple = false;
|
|
998
1132
|
this.itemSize = '48px';
|
|
999
1133
|
this.fetchMoreThreshold = '15%';
|
|
1000
1134
|
this.suggestLengthThreshold = null;
|
|
1001
1135
|
this.showLoadingSpinner = true;
|
|
1002
1136
|
this.debug = false;
|
|
1137
|
+
this.showSearchBar = true;
|
|
1138
|
+
this.stickySearchBar = true;
|
|
1003
1139
|
this.clicked = new EventEmitter();
|
|
1004
1140
|
this.blurred = new EventEmitter();
|
|
1005
1141
|
this.focused = new EventEmitter();
|
|
@@ -1079,6 +1215,9 @@ class MatAutocompleteField {
|
|
|
1079
1215
|
get loading() {
|
|
1080
1216
|
return isNil(this.$filteredItems.value);
|
|
1081
1217
|
}
|
|
1218
|
+
get desktop() {
|
|
1219
|
+
return !this.mobile;
|
|
1220
|
+
}
|
|
1082
1221
|
ngOnInit() {
|
|
1083
1222
|
var _a, _b;
|
|
1084
1223
|
this.formControl = this.formControl || this.formControlName && this.formGroupDir && this.formGroupDir.form.get(this.formControlName);
|
|
@@ -1096,6 +1235,7 @@ class MatAutocompleteField {
|
|
|
1096
1235
|
this.displayColumnNames = this.displayColumnNames || this.config.columnNames;
|
|
1097
1236
|
this.displayWith = this.displayWith || this.config.displayWith;
|
|
1098
1237
|
this.equals = this.equals || this.config.equals;
|
|
1238
|
+
this.multiple = toBoolean(this.multiple, this.config.multiple);
|
|
1099
1239
|
this.mobile = toBoolean(this.mobile, this.config.mobile);
|
|
1100
1240
|
this.suggestLengthThreshold = toNumber(this.suggestLengthThreshold, this.config.suggestLengthThreshold || 0);
|
|
1101
1241
|
this.showAllOnFocus = toBoolean(this.showAllOnFocus, toBoolean(this.config.showAllOnFocus, this.suggestLengthThreshold <= 0));
|
|
@@ -1105,8 +1245,11 @@ class MatAutocompleteField {
|
|
|
1105
1245
|
this.highlightAccent = toBoolean(this.highlightAccent, toBoolean(this.config.highlightAccent));
|
|
1106
1246
|
}
|
|
1107
1247
|
// Default values
|
|
1248
|
+
this.multiple = toBoolean(this.multiple, false);
|
|
1249
|
+
this.mobile = toBoolean(this.mobile, this.multiple);
|
|
1108
1250
|
this.displayAttributes = this.displayAttributes || ((_a = this.filter) === null || _a === void 0 ? void 0 : _a.attributes) || ['label', 'name'];
|
|
1109
|
-
this.displayWith = this.displayWith || (
|
|
1251
|
+
this.displayWith = this.displayWith || MatAutocompleteFieldUtils.createDisplayFn(this.displayAttributes, this.multiple);
|
|
1252
|
+
this.equals = this.equals || MatAutocompleteFieldUtils.defaultEquals;
|
|
1110
1253
|
this.displayColumnSizes = this.displayColumnSizes
|
|
1111
1254
|
// if only column: auto size
|
|
1112
1255
|
|| (this.displayAttributes.length === 1 && [undefined])
|
|
@@ -1114,24 +1257,21 @@ class MatAutocompleteField {
|
|
|
1114
1257
|
// - if label then col size = 2
|
|
1115
1258
|
// - if rankOrder then col size = 1
|
|
1116
1259
|
// - ese => auto size
|
|
1117
|
-
|| this.displayAttributes.map(attr =>
|
|
1118
|
-
: (
|
|
1119
|
-
: undefined));
|
|
1260
|
+
|| this.displayAttributes.map(attr => attr && (attr.endsWith('label') ? 3
|
|
1261
|
+
: (attr.endsWith('rankOrder') ? 2
|
|
1262
|
+
: undefined)));
|
|
1120
1263
|
this.displayColumnNames = this.displayAttributes.map((attr, index) => this.displayColumnNames && this.displayColumnNames[index] ||
|
|
1121
1264
|
(this.i18nPrefix + changeCaseToUnderscore(attr).toUpperCase()));
|
|
1122
|
-
this.mobile = toBoolean(this.mobile, false);
|
|
1123
|
-
this.searchable = !this.mobile && !this.multiple;
|
|
1124
|
-
this.equals = this.equals || ((o1, o2) => o1 && o2 && o1.id === o2.id);
|
|
1125
1265
|
const classList = (_b = this.classList) === null || _b === void 0 ? void 0 : _b.split(' ');
|
|
1126
1266
|
this.panelWidth = this.panelWidth || (classList && ((classList.includes('min-width-medium') && '300px')
|
|
1127
1267
|
|| (classList.includes('min-width-large') && '400px')
|
|
1128
1268
|
|| (classList.includes('min-width-xlarge') && '450px')
|
|
1129
1269
|
|| (classList.includes('mat-autocomplete-panel-full-size') && '100vw')));
|
|
1130
1270
|
this.showPanelOnFocus = toBoolean(this.showPanelOnFocus, true);
|
|
1131
|
-
this.debounceTime = toNumber(this.debounceTime, 250);
|
|
1271
|
+
this.debounceTime = toNumber(this.debounceTime, this.mobile ? 650 : 250);
|
|
1132
1272
|
this.highlightAccent = toBoolean(this.highlightAccent, false);
|
|
1133
1273
|
this.suggestLengthThreshold = this.suggestLengthThreshold || 0;
|
|
1134
|
-
this.matAutocompletePosition = this.matAutocompletePosition ||
|
|
1274
|
+
this.matAutocompletePosition = this.matAutocompletePosition || 'auto';
|
|
1135
1275
|
// No suggestFn: filter on the given items
|
|
1136
1276
|
if (!this.suggestFn) {
|
|
1137
1277
|
const suggestFromArrayFn = (value, filter) => __awaiter(this, void 0, void 0, function* () {
|
|
@@ -1152,10 +1292,10 @@ class MatAutocompleteField {
|
|
|
1152
1292
|
return this.suggestFn(value, filter); // Loop
|
|
1153
1293
|
});
|
|
1154
1294
|
}
|
|
1155
|
-
else if (
|
|
1295
|
+
else if (this.mobile) {
|
|
1156
1296
|
// Manually fill input items, from the given suggest function
|
|
1157
|
-
this._subscription.add(this._$filter.pipe(startWith(this.filter), debounceTime(250), takeWhile((_) =>
|
|
1158
|
-
switchMap((filter) => this.suggest('*', filter)))
|
|
1297
|
+
this._subscription.add(this._$filter.pipe(startWith(this.filter), debounceTime(250), takeWhile((_) => this.mobile), // Close subscription, when not mobile (no more mat-select)
|
|
1298
|
+
filter(_ => this.suggestLengthThreshold <= 0), switchMap((filter) => this.suggest('*', filter)))
|
|
1159
1299
|
.subscribe(items => this.$inputItems.next(items)));
|
|
1160
1300
|
}
|
|
1161
1301
|
// Send value to suggest when :
|
|
@@ -1171,11 +1311,17 @@ class MatAutocompleteField {
|
|
|
1171
1311
|
this._reload$,
|
|
1172
1312
|
// Search text (no distinctUntilChanged() because of the debounceTime() pipe)
|
|
1173
1313
|
this.formControl.valueChanges
|
|
1174
|
-
.pipe(filter(value => this.enabled &&
|
|
1314
|
+
.pipe(filter(value => this.enabled && isNotNilString(value)),
|
|
1175
1315
|
// Mark as loading (to show loading spinner) - earlier as possible, so before the debounce time
|
|
1176
1316
|
tap(_ => this.showLoadingSpinner && this.markAsLoading()),
|
|
1177
1317
|
// Filter if not enough character
|
|
1178
|
-
filter(value =>
|
|
1318
|
+
filter(value => {
|
|
1319
|
+
if (value.length >= this.suggestLengthThreshold)
|
|
1320
|
+
return true;
|
|
1321
|
+
// Update display value, to enable the message "not enough characters"
|
|
1322
|
+
this.displayValue = value;
|
|
1323
|
+
return false;
|
|
1324
|
+
}),
|
|
1179
1325
|
// Wait a debounce time
|
|
1180
1326
|
debounceTime(this.debounceTime)
|
|
1181
1327
|
// DEBUG
|
|
@@ -1183,37 +1329,34 @@ class MatAutocompleteField {
|
|
|
1183
1329
|
),
|
|
1184
1330
|
// Object set: use it (no distinctUntilChanged() pipe need)
|
|
1185
1331
|
this.formControl.valueChanges
|
|
1186
|
-
.pipe(startWith(this.formControl.value), filter(value => (this.
|
|
1332
|
+
.pipe(startWith(this.formControl.value), filter(value => (!this.mobile && isNotNil(value) && typeof value === 'object')), tap(value => {
|
|
1187
1333
|
// DEBUG
|
|
1188
|
-
if (this.debug)
|
|
1189
|
-
|
|
1334
|
+
//if (this.debug) console.debug(this.logPrefix + ' object changes:', value)
|
|
1335
|
+
var _a;
|
|
1190
1336
|
// Update the display value (if need)
|
|
1191
1337
|
const displayValue = this.displayWith(value) || '';
|
|
1192
1338
|
if (this.displayValue !== displayValue) {
|
|
1193
1339
|
this.displayValue = displayValue;
|
|
1194
1340
|
// Apply to the input[type=text] field
|
|
1195
|
-
if (this.matInputText
|
|
1341
|
+
if ((_a = this.matInputText) === null || _a === void 0 ? void 0 : _a.nativeElement) {
|
|
1196
1342
|
this.matInputText.nativeElement.value = this.displayValue;
|
|
1197
1343
|
}
|
|
1198
1344
|
}
|
|
1199
|
-
})
|
|
1200
|
-
// DEBUG
|
|
1201
|
-
//,tap(value => this.debug && console.debug(this.logPrefix + ' Received an object value: ', value))
|
|
1202
|
-
),
|
|
1345
|
+
})),
|
|
1203
1346
|
// On dropdown button click (no distinctUntilChanged(), nor debounceTime)
|
|
1204
1347
|
this.dropButtonClick
|
|
1205
|
-
.pipe(filter(event => this.
|
|
1348
|
+
.pipe(filter(event => !this.mobile && this.enabled && (!event || !event.defaultPrevented)), map(_ => this.showAllOnFocus ? '*' : this.formControl.value),
|
|
1206
1349
|
// Make sure there is enough characters
|
|
1207
1350
|
filter(thresholdFilterFn)),
|
|
1208
1351
|
// Merge some observables, with a common distinctUntilChanged() pipe, and NO debounceTime
|
|
1209
1352
|
merge(
|
|
1210
1353
|
// Focus or click => Load all
|
|
1211
1354
|
merge(this.focused, this.clicked)
|
|
1212
|
-
.pipe(filter(_ => this.enabled && this.
|
|
1355
|
+
.pipe(filter(_ => this.enabled && !this.mobile), map(_ => this.showAllOnFocus ? '*' : this.formControl.value)
|
|
1213
1356
|
// DEBUG
|
|
1214
1357
|
//,tap(value => this.debug && console.debug(this.logPrefix + ' Received focused or clicked event: ', value))
|
|
1215
1358
|
), merge(this.$inputItems, this._$filter)
|
|
1216
|
-
.pipe(filter(_ => this.
|
|
1359
|
+
.pipe(filter(_ => this.enabled), map(_ => this.formControl.value)))
|
|
1217
1360
|
.pipe(
|
|
1218
1361
|
// Make sure there is enough characters
|
|
1219
1362
|
filter(thresholdFilterFn),
|
|
@@ -1246,7 +1389,7 @@ class MatAutocompleteField {
|
|
|
1246
1389
|
fetchMoreItemsChanges)
|
|
1247
1390
|
.subscribe(items => {
|
|
1248
1391
|
// Make sure control value is inside (mat-select)
|
|
1249
|
-
if (items &&
|
|
1392
|
+
if (items && this.mobile) {
|
|
1250
1393
|
const value = this.formControl.value;
|
|
1251
1394
|
if (isNotNil(value) && typeof value === 'object' && items.findIndex(item => this.equals(item, value)) === -1) {
|
|
1252
1395
|
// If form value is missing: add it to the list
|
|
@@ -1260,7 +1403,7 @@ class MatAutocompleteField {
|
|
|
1260
1403
|
this._subscription.add(this.blurred
|
|
1261
1404
|
.pipe(
|
|
1262
1405
|
// Skip if not searchable
|
|
1263
|
-
filter(_ => this.
|
|
1406
|
+
filter(_ => !this.mobile), map(_ => this.formControl.value)
|
|
1264
1407
|
// DEBUG
|
|
1265
1408
|
//,tap(value => this.debug && console.debug(this.logPrefix + ' Received blurred event: ', value)),
|
|
1266
1409
|
)
|
|
@@ -1284,6 +1427,7 @@ class MatAutocompleteField {
|
|
|
1284
1427
|
this.$filteredItems.next(undefined);
|
|
1285
1428
|
}
|
|
1286
1429
|
this._implicitValue = null; // reset the implicit value
|
|
1430
|
+
this.closePanel(); // Clone panel
|
|
1287
1431
|
}));
|
|
1288
1432
|
// Listen form control status change
|
|
1289
1433
|
this._subscription.add(this.formControl.statusChanges
|
|
@@ -1294,6 +1438,7 @@ class MatAutocompleteField {
|
|
|
1294
1438
|
.subscribe(() => this.checkIfTouched()));
|
|
1295
1439
|
this._subscription.add(this.keydownEscape.subscribe(event => {
|
|
1296
1440
|
if (this.isOpen) {
|
|
1441
|
+
// Avoid form or page to manage escape event
|
|
1297
1442
|
event === null || event === void 0 ? void 0 : event.stopPropagation();
|
|
1298
1443
|
event === null || event === void 0 ? void 0 : event.preventDefault();
|
|
1299
1444
|
// DEBUG
|
|
@@ -1329,7 +1474,6 @@ class MatAutocompleteField {
|
|
|
1329
1474
|
this.equals = null;
|
|
1330
1475
|
this.suggestFn = null;
|
|
1331
1476
|
this.$filteredItems = null;
|
|
1332
|
-
this.matSelectItems$ = null;
|
|
1333
1477
|
this.config = null;
|
|
1334
1478
|
this.classList = null;
|
|
1335
1479
|
this._onChangeCallback = null;
|
|
@@ -1344,8 +1488,13 @@ class MatAutocompleteField {
|
|
|
1344
1488
|
* Allow to reload content. Useful when filter has been changed but not detected
|
|
1345
1489
|
*/
|
|
1346
1490
|
reloadItems(value) {
|
|
1491
|
+
var _a;
|
|
1347
1492
|
// Force a refresh
|
|
1348
1493
|
this._reload$.next(value || '*');
|
|
1494
|
+
// Clear the search bar, because options will not correspond
|
|
1495
|
+
if (!this.isOpen && isNotNilOrBlank((_a = this.ionSearchbar) === null || _a === void 0 ? void 0 : _a.value)) {
|
|
1496
|
+
this.ionSearchbar.value = null;
|
|
1497
|
+
}
|
|
1349
1498
|
}
|
|
1350
1499
|
writeValue(value) {
|
|
1351
1500
|
// DEBUG
|
|
@@ -1369,15 +1518,15 @@ class MatAutocompleteField {
|
|
|
1369
1518
|
this.cd.markForCheck();
|
|
1370
1519
|
}
|
|
1371
1520
|
focus() {
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
focusInput(this.matInputText);
|
|
1521
|
+
if (this.mobile) {
|
|
1522
|
+
this.matSelect.focus();
|
|
1375
1523
|
}
|
|
1376
1524
|
else {
|
|
1377
|
-
(
|
|
1525
|
+
focusInput(this.matInputText);
|
|
1378
1526
|
}
|
|
1379
1527
|
}
|
|
1380
1528
|
filterInputTextFocusEvent(event) {
|
|
1529
|
+
var _a;
|
|
1381
1530
|
if (!event || event.defaultPrevented)
|
|
1382
1531
|
return;
|
|
1383
1532
|
// Ignore event from mat-option
|
|
@@ -1392,7 +1541,7 @@ class MatAutocompleteField {
|
|
|
1392
1541
|
}
|
|
1393
1542
|
// DEBUG
|
|
1394
1543
|
//if (this.debug) console.debug(this.logPrefix + ' Select input content');
|
|
1395
|
-
const hasContent =
|
|
1544
|
+
const hasContent = isNotNilOrBlank((_a = event.target) === null || _a === void 0 ? void 0 : _a.value);
|
|
1396
1545
|
// If combo is empty, or if has content but should force to show panel on focus
|
|
1397
1546
|
if (!hasContent || this.showPanelOnFocus || this.showAllOnFocus) {
|
|
1398
1547
|
// DEBUG
|
|
@@ -1412,18 +1561,38 @@ class MatAutocompleteField {
|
|
|
1412
1561
|
event.stopPropagation();
|
|
1413
1562
|
event.returnValue = false;
|
|
1414
1563
|
// DEBUG
|
|
1415
|
-
if (this.debug)
|
|
1416
|
-
console.debug(this.logPrefix + " Cancelling blur event");
|
|
1564
|
+
//if (this.debug) console.debug(this.logPrefix + " Cancelling blur event");
|
|
1417
1565
|
return false;
|
|
1418
1566
|
}
|
|
1419
|
-
//DEBUG
|
|
1420
|
-
if (this.debug)
|
|
1421
|
-
console.debug(this.logPrefix + ' Blur: move caret to the beginning');
|
|
1567
|
+
// DEBUG
|
|
1568
|
+
//if (this.debug) console.debug(this.logPrefix + ' Blur: move caret to the beginning');
|
|
1422
1569
|
// Move caret to the beginning (fix issue IMAGINE-469)
|
|
1423
1570
|
selectInputRange(event.target, 0, 0);
|
|
1424
1571
|
this.blurred.emit(event);
|
|
1425
1572
|
return true;
|
|
1426
1573
|
}
|
|
1574
|
+
ionSearchBarChanged(event) {
|
|
1575
|
+
if (!event || event.defaultPrevented || !this.matSelect.panelOpen)
|
|
1576
|
+
return;
|
|
1577
|
+
// DEBUG
|
|
1578
|
+
//console.debug(this.logPrefix + " Received <ion-searchbar> changes", event.detail.data);
|
|
1579
|
+
event.preventDefault();
|
|
1580
|
+
event.detail.preventDefault();
|
|
1581
|
+
event.stopPropagation();
|
|
1582
|
+
event.detail.stopPropagation();
|
|
1583
|
+
this.markAsLoading();
|
|
1584
|
+
this.reloadItems(event.detail.data);
|
|
1585
|
+
// TODO avoid mat-select to focus the option
|
|
1586
|
+
/*if (this.multiple) {
|
|
1587
|
+
this.matSelect._elementRef;
|
|
1588
|
+
}*/
|
|
1589
|
+
}
|
|
1590
|
+
ionSearchBarClear(event) {
|
|
1591
|
+
if (!event || event.defaultPrevented || !this.matSelect.panelOpen)
|
|
1592
|
+
return;
|
|
1593
|
+
this.markAsLoading();
|
|
1594
|
+
this.reloadItems();
|
|
1595
|
+
}
|
|
1427
1596
|
filterMatSelectFocusEvent(event) {
|
|
1428
1597
|
if (!event || event.defaultPrevented)
|
|
1429
1598
|
return;
|
|
@@ -1449,20 +1618,6 @@ class MatAutocompleteField {
|
|
|
1449
1618
|
this.blurred.emit(event);
|
|
1450
1619
|
return true;
|
|
1451
1620
|
}
|
|
1452
|
-
toggleSearch(event) {
|
|
1453
|
-
const searchable = !this.searchable;
|
|
1454
|
-
if (searchable && this.searchable && this.matInputText) {
|
|
1455
|
-
this.focus();
|
|
1456
|
-
}
|
|
1457
|
-
else {
|
|
1458
|
-
this.searchable = searchable;
|
|
1459
|
-
if (searchable) {
|
|
1460
|
-
this.autofocus = true;
|
|
1461
|
-
this.showPanelOnFocus = false;
|
|
1462
|
-
}
|
|
1463
|
-
this.markForCheck();
|
|
1464
|
-
}
|
|
1465
|
-
}
|
|
1466
1621
|
clearValue(event) {
|
|
1467
1622
|
this.writeValue(null);
|
|
1468
1623
|
event.stopPropagation();
|
|
@@ -1512,7 +1667,7 @@ class MatAutocompleteField {
|
|
|
1512
1667
|
}
|
|
1513
1668
|
get isOpen() {
|
|
1514
1669
|
var _a, _b;
|
|
1515
|
-
return (this.
|
|
1670
|
+
return (!this.mobile && ((_a = this.autocomplete) === null || _a === void 0 ? void 0 : _a.isOpen))
|
|
1516
1671
|
|| ((_b = this.matSelect) === null || _b === void 0 ? void 0 : _b.panelOpen)
|
|
1517
1672
|
|| false;
|
|
1518
1673
|
}
|
|
@@ -1551,8 +1706,7 @@ class MatAutocompleteField {
|
|
|
1551
1706
|
res = data;
|
|
1552
1707
|
}
|
|
1553
1708
|
// DEBUG
|
|
1554
|
-
if (this.debug)
|
|
1555
|
-
console.debug(this.logPrefix + ' Filtered items by suggestFn:', value, res);
|
|
1709
|
+
//if (this.debug) console.debug(this.logPrefix + ' Filtered items by suggestFn:', value, res);
|
|
1556
1710
|
return res;
|
|
1557
1711
|
});
|
|
1558
1712
|
}
|
|
@@ -1571,7 +1725,7 @@ class MatAutocompleteField {
|
|
|
1571
1725
|
});
|
|
1572
1726
|
}
|
|
1573
1727
|
updateImplicitValue(items) {
|
|
1574
|
-
if (this.
|
|
1728
|
+
if (!this.mobile) {
|
|
1575
1729
|
// Store implicit value (will use it onBlur if not other value selected)
|
|
1576
1730
|
if (items && items.length === 1) {
|
|
1577
1731
|
this._implicitValue = items[0];
|
|
@@ -1624,12 +1778,13 @@ MatAutocompleteField.decorators = [
|
|
|
1624
1778
|
{ type: Component, args: [{
|
|
1625
1779
|
// eslint-disable-next-line @angular-eslint/component-selector
|
|
1626
1780
|
selector: 'mat-autocomplete-field',
|
|
1627
|
-
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 [title]=\"displayValue\"\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 [placeholder]=\"placeholder\"\n [formControl]=\"formControl\" readonly>\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 [class.mat-form-field-disabled]=\"disabled\"\n [title]=\"displayValue\">\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <!-- Basic select -->\n <mat-select #matSelect\n *ngIf=\"!searchable; else searchableTemplate\"\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\"\n [tabindex]=\"_tabindex\"\n [panelClass]=\"classList\"\n [style.width]=\"panelWidth\"\n (focus)=\"filterMatSelectFocusEvent($event)\"\n (blur)=\"filterMatSelectBlurEvent($event)\"\n (keydown.escape)=\"keydownEscape.emit($event)\"\n (keyup.enter)=\"keyupEnter.emit($event)\"\n [compareWith]=\"equals\"\n [multiple]=\"multiple\"\n [required]=\"required\">\n <mat-select-trigger>{{ displayWith(value) }}</mat-select-trigger>\n\n <!-- header -->\n <ion-row class=\"mat-autocomplete-header ion-no-padding\">\n <ion-col *ngFor=\"let attr of displayAttributes; index as i\" [size]=\"displayColumnSizes[i]\">\n <ion-label [innerHTML]=\"displayColumnNames[i] | translate\"></ion-label>\n </ion-col>\n </ion-row>\n\n <!-- None option -->\n <mat-option *ngIf=\"!required\" class=\"ion-no-padding\">\n <ion-row class=\"ion-no-padding\">\n <ion-col class=\"ion-no-padding\">\n <ion-label><i translate>COMMON.EMPTY_OPTION</i></ion-label>\n </ion-col>\n </ion-row>\n </mat-option>\n\n <ng-container *ngIf=\"$filteredItems | async; let items\">\n <!-- No item option -->\n <mat-option *ngIf=\"items | isEmptyArray\" class=\"ion-padding text-italic\" disabled>\n <ion-label>{{noResultMessage | translate}}</ion-label>\n </mat-option>\n\n <!-- options -->\n <mat-option *ngFor=\"let item of items\" [value]=\"item\" class=\"ion-no-padding\">\n <ion-row [classList]=\"item.classList\">\n <ion-col *ngFor=\"let path of displayAttributes; index as i;\"\n [size]=\"displayColumnSizes[i]\">\n <ion-text>{{item | propertyGet: path }}</ion-text>\n </ion-col>\n </ion-row>\n </mat-option>\n\n <!-- More item -->\n <mat-option *ngIf=\"_moreItemsCount\" (ngInit)=\"_initMatSelectInfiniteScroll()\"\n class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n </ng-container>\n\n <ion-row class=\"mat-autocomplete-footer ion-no-padding\">\n <ion-col>\n <ion-text *ngIf=\"itemCount; let count\" class=\"ion-float-end ion-padding-end\"><i>{{'COMMON.RESULT_COUNT'|translate: {count: count} }}</i></ion-text>\n </ion-col>\n </ion-row>\n\n </mat-select>\n\n\n <!--\n NOTE :\n - \"selectInputContent($event) || onFocus.emit($event)\" : call onFocus only when to the input is empty (nothing to select)\n -->\n <ng-template #searchableTemplate>\n <input matInput #matInputText type=\"text\"\n [matAutocomplete]=\"autocomplete\"\n [matAutocompletePosition]=\"matAutocompletePosition\"\n [formControl]=\"formControl\"\n [placeholder]=\"placeholder\"\n [appAutofocus]=\"autofocus\"\n [tabindex]=\"_tabindex\"\n [required]=\"required\"\n (click)=\"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\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\n <ng-container *ngIf=\"$filteredItems | async; else loadingTemplate; let items\">\n <!-- No item option -->\n <mat-option *ngIf=\"items | isEmptyArray\" class=\"ion-padding text-italic\" disabled>\n <ion-label><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=\"(matInputText.value | strLength) >= suggestLengthThreshold; else waitMoreCharacterTemplate\"\n class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n </ng-template>\n\n <!-- Need more characters -->\n <ng-template #waitMoreCharacterTemplate>\n <mat-option class=\"ion-padding text-italic\" disabled>\n <ion-label>\n {{'INFO.PLEASE_TYPE_MORE_CHARACTERS'|translate:{minLength: suggestLengthThreshold} }}\n </ion-label>\n </mat-option>\n </ng-template>\n\n <ion-row class=\"mat-autocomplete-footer ion-no-padding\">\n <ion-col>\n <ion-text *ngIf=\"itemCount; let count\" class=\"ion-float-end ion-padding-end\"><i>{{'COMMON.RESULT_COUNT'|translate: {count: count} }}</i></ion-text>\n </ion-col>\n </ion-row>\n\n </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=\"searchable\"\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 type=\"button\" mat-icon-button tabindex=\"-1\"\n *ngIf=\"enabled && mobile && !searchable && !multiple\"\n [title]=\"'COMMON.BTN_SEARCH'|translate\"\n (click)=\"toggleSearch($event)\">\n <mat-icon>search</mat-icon>\n </button>\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"clearValue($event)\"\n [hidden]=\"disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n",
|
|
1781
|
+
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 [title]=\"displayValue\"\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 [placeholder]=\"placeholder\"\n [formControl]=\"formControl\" readonly>\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 [class.mat-form-field-disabled]=\"disabled\"\n [title]=\"displayValue\">\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <!-- Mobile or Mutliple (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 <ion-searchbar *ngIf=\"showSearchBar\" #ionSearchbar\n class=\"mat-select-header\"\n [class.ion-searchbar-sticky]=\"stickySearchBar\"\n inputmode=\"search\"\n autocomplete=\"off\"\n animated=\"true\"\n showClearButton\n [debounce]=\"debounceTime\"\n (ionClear)=\"ionSearchBarClear($event)\"\n (ionInput)=\"ionSearchBarChanged($event)\"\n [placeholder]=\"'COMMON.BTN_SEARCH'|translate\"\n ></ion-searchbar>\n\n <!-- Headers -->\n <ion-row class=\"mat-select-header column ion-no-padding\"\n [class.multiple]=\"multiple\"\n [class.ion-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\" 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 <!-- 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)=\"_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 <ion-row *ngIf=\"itemCount as count\"\n 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 <!-- 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=\"desktop\"\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<ng-template #options>\n\n\n</ng-template>\n\n",
|
|
1628
1782
|
providers: [{
|
|
1629
1783
|
provide: NG_VALUE_ACCESSOR,
|
|
1630
1784
|
multi: true,
|
|
1631
1785
|
useExisting: forwardRef(() => MatAutocompleteField)
|
|
1632
1786
|
}],
|
|
1787
|
+
animations: [slideInOutAnimation],
|
|
1633
1788
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1634
1789
|
styles: [":host{display:inline-block;position:relative}:host.ion-text-wrap ion-label{white-space:normal!important}button[hidden]{display:none}mat-icon.select-arrow{color:rgba(0,0,0,.47);font-size:150%}"]
|
|
1635
1790
|
},] }
|
|
@@ -1670,6 +1825,8 @@ MatAutocompleteField.propDecorators = {
|
|
|
1670
1825
|
suggestLengthThreshold: [{ type: Input }],
|
|
1671
1826
|
showLoadingSpinner: [{ type: Input }],
|
|
1672
1827
|
debug: [{ type: Input }],
|
|
1828
|
+
showSearchBar: [{ type: Input }],
|
|
1829
|
+
stickySearchBar: [{ type: Input }],
|
|
1673
1830
|
clicked: [{ type: Output, args: ['click',] }],
|
|
1674
1831
|
blurred: [{ type: Output, args: ['blur',] }],
|
|
1675
1832
|
focused: [{ type: Output, args: ['focus',] }],
|
|
@@ -1677,6 +1834,7 @@ MatAutocompleteField.propDecorators = {
|
|
|
1677
1834
|
keydownEscape: [{ type: Output, args: ['keydown.escape',] }],
|
|
1678
1835
|
keyupEnter: [{ type: Output, args: ['keyup.enter',] }],
|
|
1679
1836
|
matSelect: [{ type: ViewChild, args: ['matSelect',] }],
|
|
1837
|
+
ionSearchbar: [{ type: ViewChild, args: ['ionSearchbar',] }],
|
|
1680
1838
|
matInputText: [{ type: ViewChild, args: ['matInputText',] }],
|
|
1681
1839
|
autocomplete: [{ type: ViewChild, args: [MatAutocomplete,] }],
|
|
1682
1840
|
autocompleteTrigger: [{ type: ViewChild, args: [MatAutocompleteTrigger,] }],
|
|
@@ -1706,7 +1864,7 @@ class DateFormatPipe {
|
|
|
1706
1864
|
return this.dateAdapter.format(date, displayFormat);
|
|
1707
1865
|
}
|
|
1708
1866
|
}
|
|
1709
|
-
DateFormatPipe.ɵprov =
|
|
1867
|
+
DateFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DateFormatPipe_Factory() { return new DateFormatPipe(i0.ɵɵinject(i1.MomentDateAdapter), i0.ɵɵinject(i1$1.TranslateService)); }, token: DateFormatPipe, providedIn: "root" });
|
|
1710
1868
|
DateFormatPipe.decorators = [
|
|
1711
1869
|
{ type: Pipe, args: [{
|
|
1712
1870
|
name: 'dateFormat'
|
|
@@ -1718,7 +1876,7 @@ DateFormatPipe.ctorParameters = () => [
|
|
|
1718
1876
|
{ type: TranslateService }
|
|
1719
1877
|
];
|
|
1720
1878
|
|
|
1721
|
-
const moment = momentImported;
|
|
1879
|
+
const moment$7 = momentImported;
|
|
1722
1880
|
class DateDiffDurationPipe {
|
|
1723
1881
|
constructor(dateAdapter, translate) {
|
|
1724
1882
|
this.dateAdapter = dateAdapter;
|
|
@@ -1734,17 +1892,17 @@ class DateDiffDurationPipe {
|
|
|
1734
1892
|
return this.format(startDate, endDate);
|
|
1735
1893
|
}
|
|
1736
1894
|
format(startDate, endDate) {
|
|
1737
|
-
const duration = moment.duration(endDate.diff(startDate));
|
|
1895
|
+
const duration = moment$7.duration(endDate.diff(startDate));
|
|
1738
1896
|
if (duration.asMinutes() < 0)
|
|
1739
1897
|
return '';
|
|
1740
|
-
const timeDuration = moment(0)
|
|
1898
|
+
const timeDuration = moment$7(0)
|
|
1741
1899
|
.hour(duration.hours())
|
|
1742
1900
|
.minute(duration.minutes());
|
|
1743
1901
|
const days = Math.floor(duration.asDays());
|
|
1744
1902
|
return (days > 0 ? days.toString() + (this.dayUnit + ' ') : '') + timeDuration.format('HH:mm');
|
|
1745
1903
|
}
|
|
1746
1904
|
}
|
|
1747
|
-
DateDiffDurationPipe.ɵprov =
|
|
1905
|
+
DateDiffDurationPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DateDiffDurationPipe_Factory() { return new DateDiffDurationPipe(i0.ɵɵinject(i1$2.DateAdapter), i0.ɵɵinject(i1$1.TranslateService)); }, token: DateDiffDurationPipe, providedIn: "root" });
|
|
1748
1906
|
DateDiffDurationPipe.decorators = [
|
|
1749
1907
|
{ type: Pipe, args: [{
|
|
1750
1908
|
name: 'dateDiffDuration'
|
|
@@ -1765,7 +1923,7 @@ class DateFromNowPipe {
|
|
|
1765
1923
|
return date ? date.fromNow(args && args.withoutSuffix) : '';
|
|
1766
1924
|
}
|
|
1767
1925
|
}
|
|
1768
|
-
DateFromNowPipe.ɵprov =
|
|
1926
|
+
DateFromNowPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DateFromNowPipe_Factory() { return new DateFromNowPipe(i0.ɵɵinject(i1.MomentDateAdapter)); }, token: DateFromNowPipe, providedIn: "root" });
|
|
1769
1927
|
DateFromNowPipe.decorators = [
|
|
1770
1928
|
{ type: Pipe, args: [{
|
|
1771
1929
|
name: 'dateFromNow'
|
|
@@ -1834,7 +1992,7 @@ function formatToDD(value, opts) {
|
|
|
1834
1992
|
value *= -1;
|
|
1835
1993
|
}
|
|
1836
1994
|
}
|
|
1837
|
-
let degrees = roundFloat(value, opts.maxDecimals).toString();
|
|
1995
|
+
let degrees = roundFloat$1(value, opts.maxDecimals).toString();
|
|
1838
1996
|
// Add sign
|
|
1839
1997
|
let sign = negative ? '-' : '+';
|
|
1840
1998
|
if (opts.placeholderChar) {
|
|
@@ -1885,7 +2043,7 @@ function formatToDDMMSS(value, opts) {
|
|
|
1885
2043
|
}
|
|
1886
2044
|
let degrees = Math.trunc(value);
|
|
1887
2045
|
let minutes = Math.trunc((value - degrees) * 60);
|
|
1888
|
-
let seconds = roundFloat(((value - degrees) * 60 - minutes) * 60, opts.maxDecimals);
|
|
2046
|
+
let seconds = roundFloat$1(((value - degrees) * 60 - minutes) * 60, opts.maxDecimals);
|
|
1889
2047
|
while (seconds >= 60) {
|
|
1890
2048
|
seconds -= 60;
|
|
1891
2049
|
minutes += 1;
|
|
@@ -1953,7 +2111,7 @@ function formatToDDMM(value, opts) {
|
|
|
1953
2111
|
}
|
|
1954
2112
|
}
|
|
1955
2113
|
let degrees = Math.trunc(value);
|
|
1956
|
-
let minutes = roundFloat((value - degrees) * 60, opts.maxDecimals);
|
|
2114
|
+
let minutes = roundFloat$1((value - degrees) * 60, opts.maxDecimals);
|
|
1957
2115
|
while (minutes >= 60) {
|
|
1958
2116
|
minutes -= 60;
|
|
1959
2117
|
degrees += 1;
|
|
@@ -2004,15 +2162,15 @@ function parseLatitudeOrLongitude(input, pattern, maxDecimals, placeholderChar)
|
|
|
2004
2162
|
return NaN;
|
|
2005
2163
|
}
|
|
2006
2164
|
if (pattern === 'DD')
|
|
2007
|
-
return roundFloat(degrees, maxDecimals);
|
|
2165
|
+
return roundFloat$1(degrees, maxDecimals);
|
|
2008
2166
|
const minutes = (pattern === 'DDMMSS' || pattern === 'DDMM') && parts[1] && parseFloat(parts[1].replace(/,/g, '.')) || 0;
|
|
2009
2167
|
const seconds = (pattern === 'DDMMSS') && parts[2] && parseFloat(parts[2].replace(/,/g, '.')) || 0;
|
|
2010
2168
|
const direction = ((pattern === 'DDMMSS') && parts[3]) || ((pattern === 'DDMM') && parts[2]) || undefined;
|
|
2011
2169
|
const sign = (direction && (direction === 's' || direction === 'S' || direction === 'w' || direction === 'W')) ? -1 : 1;
|
|
2012
2170
|
degrees = sign * (degrees + minutes / 60 + seconds / (60 * 60));
|
|
2013
|
-
return roundFloat(degrees, maxDecimals);
|
|
2171
|
+
return roundFloat$1(degrees, maxDecimals);
|
|
2014
2172
|
}
|
|
2015
|
-
function roundFloat(input, maxDecimals) {
|
|
2173
|
+
function roundFloat$1(input, maxDecimals) {
|
|
2016
2174
|
if (maxDecimals > 0) {
|
|
2017
2175
|
const powDecimal = Math.pow(10, maxDecimals);
|
|
2018
2176
|
return Math.trunc(input * powDecimal + 0.5) / powDecimal;
|
|
@@ -2032,7 +2190,7 @@ class LatLongFormatPipe {
|
|
|
2032
2190
|
return ((!args.type || args.type !== 'latitude') ? formatLongitude : formatLatitude)(value, args);
|
|
2033
2191
|
}
|
|
2034
2192
|
}
|
|
2035
|
-
LatLongFormatPipe.ɵprov =
|
|
2193
|
+
LatLongFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function LatLongFormatPipe_Factory() { return new LatLongFormatPipe(); }, token: LatLongFormatPipe, providedIn: "root" });
|
|
2036
2194
|
LatLongFormatPipe.decorators = [
|
|
2037
2195
|
{ type: Pipe, args: [{
|
|
2038
2196
|
name: 'latLongFormat'
|
|
@@ -2044,7 +2202,7 @@ class LatitudeFormatPipe {
|
|
|
2044
2202
|
this.transform = formatLatitude;
|
|
2045
2203
|
}
|
|
2046
2204
|
}
|
|
2047
|
-
LatitudeFormatPipe.ɵprov =
|
|
2205
|
+
LatitudeFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function LatitudeFormatPipe_Factory() { return new LatitudeFormatPipe(); }, token: LatitudeFormatPipe, providedIn: "root" });
|
|
2048
2206
|
LatitudeFormatPipe.decorators = [
|
|
2049
2207
|
{ type: Pipe, args: [{
|
|
2050
2208
|
name: 'latitudeFormat'
|
|
@@ -2056,7 +2214,7 @@ class LongitudeFormatPipe {
|
|
|
2056
2214
|
this.transform = formatLongitude;
|
|
2057
2215
|
}
|
|
2058
2216
|
}
|
|
2059
|
-
LongitudeFormatPipe.ɵprov =
|
|
2217
|
+
LongitudeFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function LongitudeFormatPipe_Factory() { return new LongitudeFormatPipe(); }, token: LongitudeFormatPipe, providedIn: "root" });
|
|
2060
2218
|
LongitudeFormatPipe.decorators = [
|
|
2061
2219
|
{ type: Pipe, args: [{
|
|
2062
2220
|
name: 'longitudeFormat'
|
|
@@ -2076,7 +2234,7 @@ class NumberFormatPipe {
|
|
|
2076
2234
|
}
|
|
2077
2235
|
}
|
|
2078
2236
|
}
|
|
2079
|
-
NumberFormatPipe.ɵprov =
|
|
2237
|
+
NumberFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function NumberFormatPipe_Factory() { return new NumberFormatPipe(); }, token: NumberFormatPipe, providedIn: "root" });
|
|
2080
2238
|
NumberFormatPipe.decorators = [
|
|
2081
2239
|
{ type: Pipe, args: [{
|
|
2082
2240
|
name: 'numberFormat'
|
|
@@ -2116,7 +2274,7 @@ class HighlightPipe {
|
|
|
2116
2274
|
}
|
|
2117
2275
|
}
|
|
2118
2276
|
}
|
|
2119
|
-
HighlightPipe.ɵprov =
|
|
2277
|
+
HighlightPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function HighlightPipe_Factory() { return new HighlightPipe(); }, token: HighlightPipe, providedIn: "root" });
|
|
2120
2278
|
HighlightPipe.decorators = [
|
|
2121
2279
|
{ type: Pipe, args: [{
|
|
2122
2280
|
name: 'highlight'
|
|
@@ -2181,7 +2339,7 @@ FileSizePipe.decorators = [
|
|
|
2181
2339
|
{ type: Pipe, args: [{ name: 'fileSize' },] }
|
|
2182
2340
|
];
|
|
2183
2341
|
|
|
2184
|
-
const moment$
|
|
2342
|
+
const moment$6 = momentImported;
|
|
2185
2343
|
const tz = momentTZImported;
|
|
2186
2344
|
const DATE_UNIX_TIMESTAMP = 'X';
|
|
2187
2345
|
const DATE_UNIX_MS_TIMESTAMP = 'x';
|
|
@@ -2258,32 +2416,32 @@ function fromDateISOString(value) {
|
|
|
2258
2416
|
if (!value || isMoment(value))
|
|
2259
2417
|
return value;
|
|
2260
2418
|
// Parse the input value, as a ISO date time
|
|
2261
|
-
const date = moment$
|
|
2419
|
+
const date = moment$6(value, DATE_ISO_PATTERN);
|
|
2262
2420
|
if (date.isValid())
|
|
2263
2421
|
return date;
|
|
2264
2422
|
// Not valid: trying to convert from unix timestamp
|
|
2265
2423
|
if (typeof value === 'string') {
|
|
2266
2424
|
console.warn('Wrong date format - Trying to convert from local time: ' + value);
|
|
2267
2425
|
if (value.length === 10) {
|
|
2268
|
-
return moment$
|
|
2426
|
+
return moment$6(value, DATE_UNIX_TIMESTAMP);
|
|
2269
2427
|
}
|
|
2270
2428
|
else if (value.length === 13) {
|
|
2271
|
-
return moment$
|
|
2429
|
+
return moment$6(value, DATE_UNIX_MS_TIMESTAMP);
|
|
2272
2430
|
}
|
|
2273
2431
|
}
|
|
2274
2432
|
console.warn('Unable to parse date: ' + value);
|
|
2275
2433
|
return undefined;
|
|
2276
2434
|
}
|
|
2277
2435
|
function fromUnixTimestamp(timeInSec) {
|
|
2278
|
-
return moment$
|
|
2436
|
+
return moment$6(timeInSec, DATE_UNIX_TIMESTAMP);
|
|
2279
2437
|
}
|
|
2280
2438
|
function fromUnixMsTimestamp(timeInMs) {
|
|
2281
|
-
return moment$
|
|
2439
|
+
return moment$6(timeInMs, DATE_UNIX_MS_TIMESTAMP);
|
|
2282
2440
|
}
|
|
2283
2441
|
function toDuration(value, unit) {
|
|
2284
2442
|
if (!value)
|
|
2285
2443
|
return undefined;
|
|
2286
|
-
const duration = moment$
|
|
2444
|
+
const duration = moment$6.duration(value, unit);
|
|
2287
2445
|
// fix 990+ ms
|
|
2288
2446
|
if (duration.milliseconds() >= 990) {
|
|
2289
2447
|
duration.add(1000 - duration.milliseconds(), 'ms');
|
|
@@ -2312,7 +2470,7 @@ class DurationPipe {
|
|
|
2312
2470
|
return (days > 0 ? days.toString() + (this.dayUnit + ' ') : '') + hour + ':' + minute;
|
|
2313
2471
|
}
|
|
2314
2472
|
}
|
|
2315
|
-
DurationPipe.ɵprov =
|
|
2473
|
+
DurationPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DurationPipe_Factory() { return new DurationPipe(i0.ɵɵinject(i1$1.TranslateService)); }, token: DurationPipe, providedIn: "root" });
|
|
2316
2474
|
DurationPipe.decorators = [
|
|
2317
2475
|
{ type: Pipe, args: [{
|
|
2318
2476
|
name: 'duration'
|
|
@@ -2333,7 +2491,7 @@ class MathAbsPipe {
|
|
|
2333
2491
|
}
|
|
2334
2492
|
}
|
|
2335
2493
|
}
|
|
2336
|
-
MathAbsPipe.ɵprov =
|
|
2494
|
+
MathAbsPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MathAbsPipe_Factory() { return new MathAbsPipe(); }, token: MathAbsPipe, providedIn: "root" });
|
|
2337
2495
|
MathAbsPipe.decorators = [
|
|
2338
2496
|
{ type: Pipe, args: [{
|
|
2339
2497
|
name: 'mathAbs'
|
|
@@ -2345,7 +2503,7 @@ class EvenPipe {
|
|
|
2345
2503
|
return val % 2 === 0;
|
|
2346
2504
|
}
|
|
2347
2505
|
}
|
|
2348
|
-
EvenPipe.ɵprov =
|
|
2506
|
+
EvenPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function EvenPipe_Factory() { return new EvenPipe(); }, token: EvenPipe, providedIn: "root" });
|
|
2349
2507
|
EvenPipe.decorators = [
|
|
2350
2508
|
{ type: Pipe, args: [{
|
|
2351
2509
|
name: 'even'
|
|
@@ -2357,7 +2515,7 @@ class OddPipe {
|
|
|
2357
2515
|
return val % 2 !== 0;
|
|
2358
2516
|
}
|
|
2359
2517
|
}
|
|
2360
|
-
OddPipe.ɵprov =
|
|
2518
|
+
OddPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function OddPipe_Factory() { return new OddPipe(); }, token: OddPipe, providedIn: "root" });
|
|
2361
2519
|
OddPipe.decorators = [
|
|
2362
2520
|
{ type: Pipe, args: [{
|
|
2363
2521
|
name: 'odd'
|
|
@@ -2465,7 +2623,7 @@ class MapGetPipe {
|
|
|
2465
2623
|
return val[key];
|
|
2466
2624
|
}
|
|
2467
2625
|
}
|
|
2468
|
-
MapGetPipe.ɵprov =
|
|
2626
|
+
MapGetPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MapGetPipe_Factory() { return new MapGetPipe(); }, token: MapGetPipe, providedIn: "root" });
|
|
2469
2627
|
MapGetPipe.decorators = [
|
|
2470
2628
|
{ type: Pipe, args: [{
|
|
2471
2629
|
name: 'mapGet'
|
|
@@ -2479,7 +2637,7 @@ class MapKeysPipe {
|
|
|
2479
2637
|
return Object.keys(map);
|
|
2480
2638
|
}
|
|
2481
2639
|
}
|
|
2482
|
-
MapKeysPipe.ɵprov =
|
|
2640
|
+
MapKeysPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MapKeysPipe_Factory() { return new MapKeysPipe(); }, token: MapKeysPipe, providedIn: "root" });
|
|
2483
2641
|
MapKeysPipe.decorators = [
|
|
2484
2642
|
{ type: Pipe, args: [{
|
|
2485
2643
|
name: 'mapKeys'
|
|
@@ -2493,7 +2651,7 @@ class MapValuesPipe {
|
|
|
2493
2651
|
return Object.values(map);
|
|
2494
2652
|
}
|
|
2495
2653
|
}
|
|
2496
|
-
MapValuesPipe.ɵprov =
|
|
2654
|
+
MapValuesPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function MapValuesPipe_Factory() { return new MapValuesPipe(); }, token: MapValuesPipe, providedIn: "root" });
|
|
2497
2655
|
MapValuesPipe.decorators = [
|
|
2498
2656
|
{ type: Pipe, args: [{
|
|
2499
2657
|
name: 'mapValues'
|
|
@@ -2506,7 +2664,7 @@ class IsNotNilOrBlankPipe {
|
|
|
2506
2664
|
return isNotNilOrBlank(value);
|
|
2507
2665
|
}
|
|
2508
2666
|
}
|
|
2509
|
-
IsNotNilOrBlankPipe.ɵprov =
|
|
2667
|
+
IsNotNilOrBlankPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsNotNilOrBlankPipe_Factory() { return new IsNotNilOrBlankPipe(); }, token: IsNotNilOrBlankPipe, providedIn: "root" });
|
|
2510
2668
|
IsNotNilOrBlankPipe.decorators = [
|
|
2511
2669
|
{ type: Pipe, args: [{
|
|
2512
2670
|
name: 'isNotNilOrBlank'
|
|
@@ -2518,7 +2676,7 @@ class IsNilOrBlankPipe {
|
|
|
2518
2676
|
return isNilOrBlank(value);
|
|
2519
2677
|
}
|
|
2520
2678
|
}
|
|
2521
|
-
IsNilOrBlankPipe.ɵprov =
|
|
2679
|
+
IsNilOrBlankPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsNilOrBlankPipe_Factory() { return new IsNilOrBlankPipe(); }, token: IsNilOrBlankPipe, providedIn: "root" });
|
|
2522
2680
|
IsNilOrBlankPipe.decorators = [
|
|
2523
2681
|
{ type: Pipe, args: [{
|
|
2524
2682
|
name: 'isNilOrBlank'
|
|
@@ -2530,7 +2688,7 @@ class ToStringPipe {
|
|
|
2530
2688
|
return (value !== null && value !== undefined) ? value.toString() : '';
|
|
2531
2689
|
}
|
|
2532
2690
|
}
|
|
2533
|
-
ToStringPipe.ɵprov =
|
|
2691
|
+
ToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function ToStringPipe_Factory() { return new ToStringPipe(); }, token: ToStringPipe, providedIn: "root" });
|
|
2534
2692
|
ToStringPipe.decorators = [
|
|
2535
2693
|
{ type: Pipe, args: [{
|
|
2536
2694
|
name: 'toString'
|
|
@@ -2542,7 +2700,7 @@ class StrLengthPipe {
|
|
|
2542
2700
|
return value && value.length || 0;
|
|
2543
2701
|
}
|
|
2544
2702
|
}
|
|
2545
|
-
StrLengthPipe.ɵprov =
|
|
2703
|
+
StrLengthPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function StrLengthPipe_Factory() { return new StrLengthPipe(); }, token: StrLengthPipe, providedIn: "root" });
|
|
2546
2704
|
StrLengthPipe.decorators = [
|
|
2547
2705
|
{ type: Pipe, args: [{
|
|
2548
2706
|
name: 'strLength'
|
|
@@ -2554,7 +2712,7 @@ class StrIncludesPipe {
|
|
|
2554
2712
|
return (value === null || value === void 0 ? void 0 : value.includes(searchString, position)) || false;
|
|
2555
2713
|
}
|
|
2556
2714
|
}
|
|
2557
|
-
StrIncludesPipe.ɵprov =
|
|
2715
|
+
StrIncludesPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function StrIncludesPipe_Factory() { return new StrIncludesPipe(); }, token: StrIncludesPipe, providedIn: "root" });
|
|
2558
2716
|
StrIncludesPipe.decorators = [
|
|
2559
2717
|
{ type: Pipe, args: [{
|
|
2560
2718
|
name: 'strIncludes'
|
|
@@ -2631,7 +2789,7 @@ class TranslateContextService {
|
|
|
2631
2789
|
return translations[keys[keys.length - 1]]; // Return the last keys translation
|
|
2632
2790
|
}
|
|
2633
2791
|
}
|
|
2634
|
-
TranslateContextService.ɵprov =
|
|
2792
|
+
TranslateContextService.ɵprov = i0.ɵɵdefineInjectable({ factory: function TranslateContextService_Factory() { return new TranslateContextService(i0.ɵɵinject(i1$1.TranslateService)); }, token: TranslateContextService, providedIn: "root" });
|
|
2635
2793
|
TranslateContextService.decorators = [
|
|
2636
2794
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
2637
2795
|
];
|
|
@@ -2681,7 +2839,7 @@ class PropertyGetPipe {
|
|
|
2681
2839
|
args && args.defaultValue);
|
|
2682
2840
|
}
|
|
2683
2841
|
}
|
|
2684
|
-
PropertyGetPipe.ɵprov =
|
|
2842
|
+
PropertyGetPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function PropertyGetPipe_Factory() { return new PropertyGetPipe(); }, token: PropertyGetPipe, providedIn: "root" });
|
|
2685
2843
|
PropertyGetPipe.decorators = [
|
|
2686
2844
|
{ type: Pipe, args: [{
|
|
2687
2845
|
name: 'propertyGet'
|
|
@@ -2706,7 +2864,7 @@ NgInitDirective.propDecorators = {
|
|
|
2706
2864
|
ngInit: [{ type: Output }]
|
|
2707
2865
|
};
|
|
2708
2866
|
|
|
2709
|
-
const moment$
|
|
2867
|
+
const moment$5 = momentImported;
|
|
2710
2868
|
// @dynamic
|
|
2711
2869
|
class SharedValidators {
|
|
2712
2870
|
static getDoubleRegexp(maxDecimals) {
|
|
@@ -2787,7 +2945,7 @@ class SharedValidators {
|
|
|
2787
2945
|
}
|
|
2788
2946
|
static validDate(control) {
|
|
2789
2947
|
const value = control.value;
|
|
2790
|
-
const date = !value || moment$
|
|
2948
|
+
const date = !value || moment$5.isMoment(value) ? value : moment$5(control.value, DATE_ISO_PATTERN);
|
|
2791
2949
|
if (date && (!date.isValid() || date.year() < 1970)) {
|
|
2792
2950
|
return { validDate: true };
|
|
2793
2951
|
}
|
|
@@ -3899,7 +4057,7 @@ class FormErrorTranslator {
|
|
|
3899
4057
|
return errorKey;
|
|
3900
4058
|
}
|
|
3901
4059
|
}
|
|
3902
|
-
FormErrorTranslator.ɵprov =
|
|
4060
|
+
FormErrorTranslator.ɵprov = i0.ɵɵdefineInjectable({ factory: function FormErrorTranslator_Factory() { return new FormErrorTranslator(i0.ɵɵinject(i1$1.TranslateService), i0.ɵɵinject(APP_FORM_ERROR_I18N_KEYS, 8)); }, token: FormErrorTranslator, providedIn: "root" });
|
|
3903
4061
|
FormErrorTranslator.decorators = [
|
|
3904
4062
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
3905
4063
|
];
|
|
@@ -3979,7 +4137,7 @@ class FormGetPipe {
|
|
|
3979
4137
|
return form.get(path);
|
|
3980
4138
|
}
|
|
3981
4139
|
}
|
|
3982
|
-
FormGetPipe.ɵprov =
|
|
4140
|
+
FormGetPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function FormGetPipe_Factory() { return new FormGetPipe(); }, token: FormGetPipe, providedIn: "root" });
|
|
3983
4141
|
FormGetPipe.decorators = [
|
|
3984
4142
|
{ type: Pipe, args: [{
|
|
3985
4143
|
name: 'formGet'
|
|
@@ -3991,7 +4149,7 @@ class FormGetControlPipe {
|
|
|
3991
4149
|
return form.get(path);
|
|
3992
4150
|
}
|
|
3993
4151
|
}
|
|
3994
|
-
FormGetControlPipe.ɵprov =
|
|
4152
|
+
FormGetControlPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function FormGetControlPipe_Factory() { return new FormGetControlPipe(); }, token: FormGetControlPipe, providedIn: "root" });
|
|
3995
4153
|
FormGetControlPipe.decorators = [
|
|
3996
4154
|
{ type: Pipe, args: [{
|
|
3997
4155
|
name: 'formGetControl'
|
|
@@ -4003,7 +4161,7 @@ class FormGetArrayPipe {
|
|
|
4003
4161
|
return form.get(path);
|
|
4004
4162
|
}
|
|
4005
4163
|
}
|
|
4006
|
-
FormGetArrayPipe.ɵprov =
|
|
4164
|
+
FormGetArrayPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function FormGetArrayPipe_Factory() { return new FormGetArrayPipe(); }, token: FormGetArrayPipe, providedIn: "root" });
|
|
4007
4165
|
FormGetArrayPipe.decorators = [
|
|
4008
4166
|
{ type: Pipe, args: [{
|
|
4009
4167
|
name: 'formGetArray'
|
|
@@ -4015,7 +4173,7 @@ class FormGetGroupPipe {
|
|
|
4015
4173
|
return form.get(path);
|
|
4016
4174
|
}
|
|
4017
4175
|
}
|
|
4018
|
-
FormGetGroupPipe.ɵprov =
|
|
4176
|
+
FormGetGroupPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function FormGetGroupPipe_Factory() { return new FormGetGroupPipe(); }, token: FormGetGroupPipe, providedIn: "root" });
|
|
4019
4177
|
FormGetGroupPipe.decorators = [
|
|
4020
4178
|
{ type: Pipe, args: [{
|
|
4021
4179
|
name: 'formGetGroup'
|
|
@@ -4135,7 +4293,7 @@ const isIpad = (win) => {
|
|
|
4135
4293
|
}
|
|
4136
4294
|
return false;
|
|
4137
4295
|
};
|
|
4138
|
-
const ɵ0$
|
|
4296
|
+
const ɵ0$b = isIpad;
|
|
4139
4297
|
const isIOS = (win) => testUserAgent(win, /iPhone|iPod/i) || isIpad(win);
|
|
4140
4298
|
const isAndroid = (win) => testUserAgent(win, /android|sink/i);
|
|
4141
4299
|
const isCordova = (win) => !!(win['cordova'] || win['phonegap'] || win['PhoneGap']);
|
|
@@ -4370,9 +4528,9 @@ function parseDuration(input, maxDecimals, placeholderChar) {
|
|
|
4370
4528
|
const hour = parseInt(durationParts[0] || '0');
|
|
4371
4529
|
const minute = parseInt(durationParts[1] || '0');
|
|
4372
4530
|
const value = hour + (minute + 0.5) / 60;
|
|
4373
|
-
return roundFloat
|
|
4531
|
+
return roundFloat(value, maxDecimals);
|
|
4374
4532
|
}
|
|
4375
|
-
function roundFloat
|
|
4533
|
+
function roundFloat(input, maxDecimals) {
|
|
4376
4534
|
if (maxDecimals > 0) {
|
|
4377
4535
|
const powDecimal = Math.pow(10, maxDecimals);
|
|
4378
4536
|
return Math.trunc(input * powDecimal + 0.5) / powDecimal;
|
|
@@ -4396,9 +4554,9 @@ const MASKS = {
|
|
|
4396
4554
|
DD: [/[+-]/, /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, '°']
|
|
4397
4555
|
}
|
|
4398
4556
|
};
|
|
4399
|
-
const noop$
|
|
4557
|
+
const noop$7 = () => {
|
|
4400
4558
|
};
|
|
4401
|
-
const ɵ0$
|
|
4559
|
+
const ɵ0$a = noop$7;
|
|
4402
4560
|
class MatLatLongField {
|
|
4403
4561
|
constructor(platform, translate, formBuilder, cd, formGroupDir) {
|
|
4404
4562
|
this.platform = platform;
|
|
@@ -4406,8 +4564,8 @@ class MatLatLongField {
|
|
|
4406
4564
|
this.formBuilder = formBuilder;
|
|
4407
4565
|
this.cd = cd;
|
|
4408
4566
|
this.formGroupDir = formGroupDir;
|
|
4409
|
-
this._onChangeCallback = noop$
|
|
4410
|
-
this._onTouchedCallback = noop$
|
|
4567
|
+
this._onChangeCallback = noop$7;
|
|
4568
|
+
this._onTouchedCallback = noop$7;
|
|
4411
4569
|
this._subscription = new Subscription();
|
|
4412
4570
|
this.disabling = false;
|
|
4413
4571
|
this.writing = false;
|
|
@@ -4744,14 +4902,14 @@ SharedMatLatLongModule.decorators = [
|
|
|
4744
4902
|
},] }
|
|
4745
4903
|
];
|
|
4746
4904
|
|
|
4747
|
-
const DEFAULT_VALUE_ACCESSOR = {
|
|
4905
|
+
const DEFAULT_VALUE_ACCESSOR$5 = {
|
|
4748
4906
|
provide: NG_VALUE_ACCESSOR,
|
|
4749
4907
|
useExisting: forwardRef(() => MatDate),
|
|
4750
4908
|
multi: true
|
|
4751
4909
|
};
|
|
4752
|
-
const DAY_MASK = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
|
|
4753
|
-
const noop$
|
|
4754
|
-
const ɵ0$
|
|
4910
|
+
const DAY_MASK$2 = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
|
|
4911
|
+
const noop$6 = () => { };
|
|
4912
|
+
const ɵ0$9 = noop$6;
|
|
4755
4913
|
class MatDate {
|
|
4756
4914
|
constructor(platform, dateAdapter, translate, formBuilder, cd, keyboard, formGroupDir) {
|
|
4757
4915
|
this.platform = platform;
|
|
@@ -4761,13 +4919,13 @@ class MatDate {
|
|
|
4761
4919
|
this.cd = cd;
|
|
4762
4920
|
this.keyboard = keyboard;
|
|
4763
4921
|
this.formGroupDir = formGroupDir;
|
|
4764
|
-
this._onChangeCallback = noop$
|
|
4765
|
-
this._onTouchedCallback = noop$
|
|
4922
|
+
this._onChangeCallback = noop$6;
|
|
4923
|
+
this._onTouchedCallback = noop$6;
|
|
4766
4924
|
this._subscription = new Subscription();
|
|
4767
4925
|
this._writing = true;
|
|
4768
4926
|
this._disabling = false;
|
|
4769
4927
|
this._readonly = false;
|
|
4770
|
-
this.dayMask = DAY_MASK;
|
|
4928
|
+
this.dayMask = DAY_MASK$2;
|
|
4771
4929
|
this.floatLabel = 'auto';
|
|
4772
4930
|
this.compact = false;
|
|
4773
4931
|
this.placeholderChar = DEFAULT_PLACEHOLDER_CHAR;
|
|
@@ -5054,7 +5212,7 @@ MatDate.decorators = [
|
|
|
5054
5212
|
selector: 'mat-date-field',
|
|
5055
5213
|
template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n class=\"mat-form-field-disabled\">\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput hidden type=\"text\"\n readonly\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\">\n <ion-text>{{formControl.value|dateFormat: {pattern: displayPattern} }}</ion-text>\n</mat-form-field>\n\n<!-- writable -->\n<ng-template #writable>\n <mat-form-field [floatLabel]=\"floatLabel\">\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\n <!-- errors -->\n <mat-error *ngIf=\"formControl.touched && formControl.errors|mapKeys|arrayFirst; let errorKey\">\n <ng-container [ngSwitch]=\"errorKey\">\n <span *ngSwitchCase=\"'required'\" translate>ERROR.FIELD_REQUIRED</span>\n <span *ngSwitchCase=\"'validDate'\" translate>ERROR.FIELD_NOT_VALID_DATE_TIME</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 </ng-container>\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",
|
|
5056
5214
|
providers: [
|
|
5057
|
-
DEFAULT_VALUE_ACCESSOR,
|
|
5215
|
+
DEFAULT_VALUE_ACCESSOR$5,
|
|
5058
5216
|
],
|
|
5059
5217
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
5060
5218
|
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%}"]
|
|
@@ -5089,16 +5247,16 @@ MatDate.propDecorators = {
|
|
|
5089
5247
|
matInputs: [{ type: ViewChildren, args: ['matInput',] }]
|
|
5090
5248
|
};
|
|
5091
5249
|
|
|
5092
|
-
const DEFAULT_VALUE_ACCESSOR$
|
|
5250
|
+
const DEFAULT_VALUE_ACCESSOR$4 = {
|
|
5093
5251
|
provide: NG_VALUE_ACCESSOR,
|
|
5094
5252
|
useExisting: forwardRef(() => MatDateTime),
|
|
5095
5253
|
multi: true
|
|
5096
5254
|
};
|
|
5097
5255
|
const DAY_MASK$1 = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
|
|
5098
5256
|
const HOUR_REGEXP = /^[012][0-9][:][012345][0-9]$/;
|
|
5099
|
-
const HOUR_MASK = [/[012]/, /\d/, ':', /[012345]/, /\d/];
|
|
5100
|
-
const noop$
|
|
5101
|
-
const ɵ0$
|
|
5257
|
+
const HOUR_MASK$1 = [/[012]/, /\d/, ':', /[012345]/, /\d/];
|
|
5258
|
+
const noop$5 = () => { };
|
|
5259
|
+
const ɵ0$8 = noop$5;
|
|
5102
5260
|
class MatDateTime {
|
|
5103
5261
|
constructor(platform, dateAdapter, translate, formBuilder, cd, keyboard, formGroupDir) {
|
|
5104
5262
|
this.platform = platform;
|
|
@@ -5108,14 +5266,14 @@ class MatDateTime {
|
|
|
5108
5266
|
this.cd = cd;
|
|
5109
5267
|
this.keyboard = keyboard;
|
|
5110
5268
|
this.formGroupDir = formGroupDir;
|
|
5111
|
-
this._onChangeCallback = noop$
|
|
5112
|
-
this._onTouchedCallback = noop$
|
|
5269
|
+
this._onChangeCallback = noop$5;
|
|
5270
|
+
this._onTouchedCallback = noop$5;
|
|
5113
5271
|
this._subscription = new Subscription();
|
|
5114
5272
|
this._writing = true;
|
|
5115
5273
|
this._disabling = false;
|
|
5116
5274
|
this._readonly = false;
|
|
5117
5275
|
this.dayMask = DAY_MASK$1;
|
|
5118
|
-
this.hourMask = HOUR_MASK;
|
|
5276
|
+
this.hourMask = HOUR_MASK$1;
|
|
5119
5277
|
this.floatLabel = 'auto';
|
|
5120
5278
|
this.compact = false;
|
|
5121
5279
|
this.placeholderChar = DEFAULT_PLACEHOLDER_CHAR;
|
|
@@ -5428,7 +5586,7 @@ MatDateTime.decorators = [
|
|
|
5428
5586
|
selector: 'mat-date-time-field',
|
|
5429
5587
|
template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n class=\"mat-form-field-disabled\">\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput hidden type=\"text\"\n readonly\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\">\n <ion-text>{{formControl.value|dateFormat: {pattern: displayPattern} }}</ion-text>\n</mat-form-field>\n\n<!-- writable + time -->\n<ng-template #writable >\n <ion-grid class=\"ion-no-padding\">\n <ion-row class=\"ion-no-padding no-wrap\" nowrap>\n\n <!-- day -->\n <ion-col class=\"day ion-no-padding\">\n <mat-form-field [floatLabel]=\"floatLabel\"\n [class.mat-form-field-invalid]=\"formControl.touched && formControl.invalid\">\n\n <mat-label>{{placeholder}}</mat-label>\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"!mobile\"\n [formControl]=\"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 [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",
|
|
5430
5588
|
providers: [
|
|
5431
|
-
DEFAULT_VALUE_ACCESSOR$
|
|
5589
|
+
DEFAULT_VALUE_ACCESSOR$4,
|
|
5432
5590
|
],
|
|
5433
5591
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
5434
5592
|
styles: [":host{display:inline-block;width:100%;position:relative;--ion-grid-column-padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}mat-form-field .datetime-md{padding:0!important}ion-row.no-wrap{flex-wrap:nowrap}ion-col.day{min-width:100px}ion-col.day .mat-form-field-subscript-wrapper{overflow:visible;right:-64px;width:calc(100% + 64px)}ion-col.day .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper{display:flex}ion-col.day .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper .mat-form-field-hint-spacer{flex:1 0 1em}ion-col.hour{min-width:55px;max-width:65px}ion-col.hour mat-form-field{width:100%}ion-col.hour mat-form-field input[type=text],ion-col.hour mat-form-field mat-label{text-align:left;min-width:50px}mat-form-field.mat-form-field-disabled ion-col.day{min-width:100px}.hour .mat-form-field-label{max-width:40px}.hour mat-form-field.mat-form-field-should-float .mat-form-field-placeholder{max-width:inherit}mat-error{text-align:right;width:100%}"]
|
|
@@ -5463,15 +5621,15 @@ MatDateTime.propDecorators = {
|
|
|
5463
5621
|
matInputs: [{ type: ViewChildren, args: ['matInput',] }]
|
|
5464
5622
|
};
|
|
5465
5623
|
|
|
5466
|
-
const DEFAULT_VALUE_ACCESSOR$
|
|
5624
|
+
const DEFAULT_VALUE_ACCESSOR$3 = {
|
|
5467
5625
|
provide: NG_VALUE_ACCESSOR,
|
|
5468
5626
|
useExisting: forwardRef(() => MatDateShort),
|
|
5469
5627
|
multi: true
|
|
5470
5628
|
};
|
|
5471
|
-
const DAY_MASK
|
|
5629
|
+
const DAY_MASK = [/\d/, /\d/, /\d/, /\d/];
|
|
5472
5630
|
const noop$4 = () => {
|
|
5473
5631
|
};
|
|
5474
|
-
const ɵ0$
|
|
5632
|
+
const ɵ0$7 = noop$4;
|
|
5475
5633
|
class MatDateShort {
|
|
5476
5634
|
constructor(platform, dateAdapter, translate, formBuilder, cd, keyboard, formGroupDir) {
|
|
5477
5635
|
this.dateAdapter = dateAdapter;
|
|
@@ -5484,7 +5642,7 @@ class MatDateShort {
|
|
|
5484
5642
|
this._onTouchedCallback = noop$4;
|
|
5485
5643
|
this.writing = true;
|
|
5486
5644
|
this.disabling = false;
|
|
5487
|
-
this.dayMask = DAY_MASK
|
|
5645
|
+
this.dayMask = DAY_MASK;
|
|
5488
5646
|
this.disabled = false;
|
|
5489
5647
|
this.floatLabel = 'auto';
|
|
5490
5648
|
this.readonly = false;
|
|
@@ -5729,7 +5887,7 @@ MatDateShort.decorators = [
|
|
|
5729
5887
|
selector: 'mat-date-short-field',
|
|
5730
5888
|
template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly else writable\">\n <input matInput hidden type=\"text\" readonly=\"true\" [formControl]=\"formControl\">\n <ion-text>{{formControl.value|dateFormat: {pattern: displayPattern} }}</ion-text>\n</mat-form-field>\n\n<ng-template #writable>\n <mat-form-field [floatLabel]=\"floatLabel\">\n\n <mat-label>{{placeholder}}</mat-label>\n\n <div matPrefix><ng-content select=\"[matPrefix]\"></ng-content></div>\n\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"!mobile\"\n [formControl]=\"dayControl\"\n [textMask]=\"{mask: dayMask, keepCharPositions: true, placeholderChar: placeholderChar}\"\n [placeholder]=\"'COMMON.DATE_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.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"formControl.hasError('validDate')\" translate>ERROR.FIELD_NOT_VALID_DATE</mat-error>\n <mat-error *ngIf=\"formControl.hasError('dateIsAfter')\">{{'ERROR.FIELD_NOT_VALID_DATE_AFTER' | translate: formControl.errors.dateIsAfter }}</mat-error>\n <mat-error *ngIf=\"formControl.hasError('dateRange')\" translate>ERROR.FIELD_NOT_VALID_DATE_RANGE</mat-error>\n <mat-error *ngIf=\"!formControl.hasError('dateRange') && formControl.hasError('dateMaxDuration')\" translate>ERROR.FIELD_NOT_VALID_DATE_MAX_DURATION</mat-error>\n <mat-error *ngIf=\"!formControl.hasError('dateRange') && formControl.hasError('dateMinDuration')\" translate>ERROR.FIELD_NOT_VALID_DATE_MIN_DURATION</mat-error>\n <mat-error *ngIf=\"formControl.hasError('msg')\">{{formControl.errors.msg}}</mat-error>\n <ng-content select=\"mat-error\"></ng-content>\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",
|
|
5731
5889
|
providers: [
|
|
5732
|
-
DEFAULT_VALUE_ACCESSOR$
|
|
5890
|
+
DEFAULT_VALUE_ACCESSOR$3,
|
|
5733
5891
|
],
|
|
5734
5892
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
5735
5893
|
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%}"]
|
|
@@ -5797,16 +5955,16 @@ SharedMatDateTimeModule.decorators = [
|
|
|
5797
5955
|
},] }
|
|
5798
5956
|
];
|
|
5799
5957
|
|
|
5800
|
-
const DEFAULT_VALUE_ACCESSOR$
|
|
5958
|
+
const DEFAULT_VALUE_ACCESSOR$2 = {
|
|
5801
5959
|
provide: NG_VALUE_ACCESSOR,
|
|
5802
5960
|
useExisting: forwardRef(() => MatDuration),
|
|
5803
5961
|
multi: true
|
|
5804
5962
|
};
|
|
5805
5963
|
const HOUR_TIME_PATTERN = /[0-9]\d\d:[0-5]\d/;
|
|
5806
|
-
const HOUR_MASK
|
|
5807
|
-
const noop$
|
|
5964
|
+
const HOUR_MASK = [/\d/, /\d/, /\d/, ':', /[0-5]/, /\d/];
|
|
5965
|
+
const noop$3 = () => {
|
|
5808
5966
|
};
|
|
5809
|
-
const ɵ0$6 = noop$
|
|
5967
|
+
const ɵ0$6 = noop$3;
|
|
5810
5968
|
class MatDuration {
|
|
5811
5969
|
constructor(platform, dateAdapter, translate, formBuilder, cd, formGroupDir) {
|
|
5812
5970
|
this.dateAdapter = dateAdapter;
|
|
@@ -5815,11 +5973,11 @@ class MatDuration {
|
|
|
5815
5973
|
this.cd = cd;
|
|
5816
5974
|
this.formGroupDir = formGroupDir;
|
|
5817
5975
|
this._subscription = new Subscription();
|
|
5818
|
-
this._onChangeCallback = noop$
|
|
5819
|
-
this._onTouchedCallback = noop$
|
|
5976
|
+
this._onChangeCallback = noop$3;
|
|
5977
|
+
this._onTouchedCallback = noop$3;
|
|
5820
5978
|
this.writing = true;
|
|
5821
5979
|
this.disabling = false;
|
|
5822
|
-
this.hourMask = HOUR_MASK
|
|
5980
|
+
this.hourMask = HOUR_MASK;
|
|
5823
5981
|
this.disabled = false;
|
|
5824
5982
|
this.floatLabel = 'auto';
|
|
5825
5983
|
this.readonly = false;
|
|
@@ -5999,7 +6157,7 @@ MatDuration.decorators = [
|
|
|
5999
6157
|
selector: 'mat-duration-field',
|
|
6000
6158
|
template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly else writable\">\n <input matInput hidden type=\"text\" readonly=\"true\" [formControl]=\"formControl\">\n <ion-text>{{ formControl.value|duration }}</ion-text>\n</mat-form-field>\n\n<!-- writable -->\n<ng-template #writable>\n <mat-form-field [floatLabel]=\"floatLabel\"\n [class.mat-form-field-disabled]=\"formControl.disabled\"\n [class.mat-form-field-invalid]=\"formControl.touched && formControl.invalid\">\n <mat-label *ngIf=\"placeholder && floatLabel != 'never'\" translate>COMMON.TIME</mat-label>\n\n <div matPrefix><ng-content select=\"[matPrefix]\"></ng-content></div>\n\n <input matInput #matInput type=\"text\"\n autocomplete=\"off\"\n [formControl]=\"textControl\"\n [textMask]=\"{mask: hourMask, keepCharPositions: true, placeholderChar: placeholderChar, guide: true}\"\n [placeholder]=\"'COMMON.DURATION_PLACEHOLDER'|translate\"\n [required]=\"required\"\n (keydown.tab)=\"moveCaretToSeparator($event, true)\"\n (keydown.shift.tab)=\"moveCaretToSeparator($event, false)\"\n (keyup.escape)=\"preventEvent($event)\"\n (blur)=\"checkIfTouched()\"\n [tabindex]=\"tabindex !== undefined ? tabindex+1 : undefined\">\n\n\n <!-- errors -->\n <mat-error *ngIf=\"!formControl.hasError('required') && textControl.hasError('pattern')\" translate>ERROR.FIELD_NOT_VALID_PATTERN</mat-error>\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"formControl.hasError('min')\">\n {{(compact ? 'ERROR.FIELD_MIN_COMPACT' : 'ERROR.FIELD_MIN') | translate:formControl.errors.min }}</mat-error>\n <mat-error *ngIf=\"formControl.hasError('max')\">\n {{(compact ? 'ERROR.FIELD_MAX_COMPACT' : 'ERROR.FIELD_MAX') | translate:formControl.errors.max }}</mat-error>\n\n <ng-content select=\"mat-error\"></ng-content>\n </mat-form-field>\n</ng-template>\n\n",
|
|
6001
6159
|
providers: [
|
|
6002
|
-
DEFAULT_VALUE_ACCESSOR$
|
|
6160
|
+
DEFAULT_VALUE_ACCESSOR$2,
|
|
6003
6161
|
],
|
|
6004
6162
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
6005
6163
|
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%}"]
|
|
@@ -6056,22 +6214,22 @@ SharedMatDurationModule.decorators = [
|
|
|
6056
6214
|
},] }
|
|
6057
6215
|
];
|
|
6058
6216
|
|
|
6059
|
-
const DEFAULT_VALUE_ACCESSOR$
|
|
6217
|
+
const DEFAULT_VALUE_ACCESSOR$1 = {
|
|
6060
6218
|
provide: NG_VALUE_ACCESSOR,
|
|
6061
6219
|
useExisting: forwardRef(() => MatBooleanField),
|
|
6062
6220
|
multi: true
|
|
6063
6221
|
};
|
|
6064
|
-
const noop$
|
|
6222
|
+
const noop$2 = () => {
|
|
6065
6223
|
};
|
|
6066
|
-
const ɵ0$
|
|
6224
|
+
const ɵ0$5 = noop$2;
|
|
6067
6225
|
class MatBooleanField {
|
|
6068
6226
|
constructor(translate, formBuilder, cd, formGroupDir) {
|
|
6069
6227
|
this.translate = translate;
|
|
6070
6228
|
this.formBuilder = formBuilder;
|
|
6071
6229
|
this.cd = cd;
|
|
6072
6230
|
this.formGroupDir = formGroupDir;
|
|
6073
|
-
this._onChangeCallback = noop$
|
|
6074
|
-
this._onTouchedCallback = noop$
|
|
6231
|
+
this._onChangeCallback = noop$2;
|
|
6232
|
+
this._onTouchedCallback = noop$2;
|
|
6075
6233
|
this._writing = false;
|
|
6076
6234
|
this.showRadio = false;
|
|
6077
6235
|
this.disabled = false;
|
|
@@ -6234,7 +6392,7 @@ MatBooleanField.decorators = [
|
|
|
6234
6392
|
selector: 'mat-boolean-field',
|
|
6235
6393
|
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>{{(formControl.value == null && 'COMMON.EMPTY_OPTION' || (formControl.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 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 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===undefined\"\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 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",
|
|
6236
6394
|
providers: [
|
|
6237
|
-
DEFAULT_VALUE_ACCESSOR$
|
|
6395
|
+
DEFAULT_VALUE_ACCESSOR$1
|
|
6238
6396
|
],
|
|
6239
6397
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
6240
6398
|
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}"]
|
|
@@ -6480,7 +6638,7 @@ class MatNumpadDomService {
|
|
|
6480
6638
|
this.appRef.detachView(this.componentRef.hostView);
|
|
6481
6639
|
}
|
|
6482
6640
|
}
|
|
6483
|
-
MatNumpadDomService.ɵprov =
|
|
6641
|
+
MatNumpadDomService.ɵprov = i0.ɵɵdefineInjectable({ factory: function MatNumpadDomService_Factory() { return new MatNumpadDomService(i0.ɵɵinject(i0.ComponentFactoryResolver), i0.ɵɵinject(i0.ApplicationRef), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(i1$3.DOCUMENT, 8)); }, token: MatNumpadDomService, providedIn: "root" });
|
|
6484
6642
|
MatNumpadDomService.decorators = [
|
|
6485
6643
|
{ type: Injectable, args: [{
|
|
6486
6644
|
providedIn: 'root'
|
|
@@ -6844,7 +7002,7 @@ SharedMatNumpadModule.decorators = [
|
|
|
6844
7002
|
},] }
|
|
6845
7003
|
];
|
|
6846
7004
|
|
|
6847
|
-
const DEFAULT_VALUE_ACCESSOR
|
|
7005
|
+
const DEFAULT_VALUE_ACCESSOR = {
|
|
6848
7006
|
provide: NG_VALUE_ACCESSOR,
|
|
6849
7007
|
useExisting: forwardRef(() => MatSwipeField),
|
|
6850
7008
|
multi: true
|
|
@@ -7107,7 +7265,7 @@ MatSwipeField.decorators = [
|
|
|
7107
7265
|
{ type: Component, args: [{
|
|
7108
7266
|
selector: 'mat-swipe-field',
|
|
7109
7267
|
template: "<mat-form-field [floatLabel]=\"showSlides && (!floatLabel || floatLabel === 'auto') ? 'always': floatLabel\"\n [class]=\"classList\"\n [class.mat-form-field-disabled]=\"disabled\">\n <mat-label *ngIf=\"placeholder && floatLabel!=='never'\">\n {{placeholder}}\n </mat-label>\n <input matInput #fakeInput type=\"text\"\n [formControl]=\"formControl\"\n [readonly]=\"true\"\n (focus)=\"_onFocusFakeInput($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showSlides\"\n [tabindex]=\"tabindex\">\n\n <div class=\"slides-container\" [class.hidden]=\"!showSlides\">\n <ion-slides #slides\n [options]=\"slidesOptions\"\n (ionSlidesDidLoad)=\"slidesLoaded()\"\n (ionSlideReachStart)=\"reachStart(true)\"\n (ionSlideReachEnd)=\"reachEnd(true)\"\n (ionSlideNextEnd)=\"reachStart(false)\"\n (ionSlidePrevEnd)=\"reachEnd(false)\"\n (ionSlideDidChange)=\"slideChanged()\"\n >\n <ion-slide *ngFor=\"let item of $items | async\">\n <ion-label>{{ displayWith(item) }}</ion-label>\n </ion-slide>\n\n </ion-slides>\n </div>\n\n <button #prevButton\n mat-icon-button\n type=\"button\"\n class=\"button-prev\"\n [hidden]=\"!showSlides\"\n [disabled]=\"previousDisabled\"\n (click)=\"previous()\">\n <mat-icon>chevron_left</mat-icon>\n </button>\n <button #nextButton\n mat-icon-button\n type=\"button\"\n class=\"button-next\"\n [hidden]=\"!showSlides\"\n [disabled]=\"nextDisabled\"\n (click)=\"next()\">\n <mat-icon>chevron_right</mat-icon>\n </button>\n\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"clearValue($event)\"\n [hidden]=\"disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"formControl.hasError('entity')\" translate>ERROR.FIELD_INVALID</mat-error>\n\n</mat-form-field>\n",
|
|
7110
|
-
providers: [DEFAULT_VALUE_ACCESSOR
|
|
7268
|
+
providers: [DEFAULT_VALUE_ACCESSOR],
|
|
7111
7269
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
7112
7270
|
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}"]
|
|
7113
7271
|
},] }
|
|
@@ -7165,14 +7323,14 @@ SharedMatSwipeModule.decorators = [
|
|
|
7165
7323
|
},] }
|
|
7166
7324
|
];
|
|
7167
7325
|
|
|
7168
|
-
const noop$
|
|
7169
|
-
const ɵ0$
|
|
7326
|
+
const noop$1 = () => { };
|
|
7327
|
+
const ɵ0$4 = noop$1;
|
|
7170
7328
|
class MatChipsField {
|
|
7171
7329
|
constructor(cd, formGroupDir) {
|
|
7172
7330
|
this.cd = cd;
|
|
7173
7331
|
this.formGroupDir = formGroupDir;
|
|
7174
|
-
this._onChangeCallback = noop$
|
|
7175
|
-
this._onTouchedCallback = noop$
|
|
7332
|
+
this._onChangeCallback = noop$1;
|
|
7333
|
+
this._onTouchedCallback = noop$1;
|
|
7176
7334
|
this.logPrefix = '[mat-chips] ';
|
|
7177
7335
|
this.formControlName = null;
|
|
7178
7336
|
this.required = false;
|
|
@@ -7293,9 +7451,9 @@ class MatChipsField {
|
|
|
7293
7451
|
// - if label then col size = 2
|
|
7294
7452
|
// - if rankOrder then col size = 1
|
|
7295
7453
|
// - ese => auto size
|
|
7296
|
-
|| this.displayAttributes.map(attr =>
|
|
7297
|
-
: (
|
|
7298
|
-
: undefined));
|
|
7454
|
+
|| this.displayAttributes.map(attr => attr && (attr.endsWith('label') ? 3
|
|
7455
|
+
: (attr.endsWith('rankOrder') ? 2
|
|
7456
|
+
: undefined)));
|
|
7299
7457
|
this.displayColumnNames = this.displayAttributes.map((attr, index) => this.displayColumnNames && this.displayColumnNames[index] ||
|
|
7300
7458
|
(this.i18nPrefix + changeCaseToUnderscore(attr).toUpperCase()));
|
|
7301
7459
|
this.mobile = toBoolean(this.mobile, false);
|
|
@@ -7313,18 +7471,18 @@ class MatChipsField {
|
|
|
7313
7471
|
// No suggestFn: filter on the given items
|
|
7314
7472
|
if (!this.suggestFn) {
|
|
7315
7473
|
const suggestFromArrayFn = (value, filter) => __awaiter(this, void 0, void 0, function* () {
|
|
7316
|
-
|
|
7317
|
-
|
|
7474
|
+
// DEBUG
|
|
7475
|
+
//if (this.debug) console.debug(this.logPrefix + ' Calling suggestFromArray with value=', value);
|
|
7318
7476
|
return suggestFromArray(this.$inputItems.value, value, Object.assign({ searchAttributes: this.displayAttributes }, filter));
|
|
7319
7477
|
});
|
|
7320
7478
|
// Wait (once) that items are loaded, then call suggest from array fn
|
|
7321
7479
|
this.suggestFn = (value, filter) => __awaiter(this, void 0, void 0, function* () {
|
|
7322
7480
|
if (isNil(this.$inputItems.value)) {
|
|
7323
|
-
|
|
7324
|
-
|
|
7481
|
+
// DEBUG
|
|
7482
|
+
//if (this.debug) console.debug('[mat-chips] Waiting items to be set...');
|
|
7325
7483
|
yield firstNotNilPromise(this.$inputItems);
|
|
7326
|
-
|
|
7327
|
-
|
|
7484
|
+
// DEBUG
|
|
7485
|
+
//if (this.debug) console.debug('[mat-chips] Received items:', this.$inputItems.value);
|
|
7328
7486
|
}
|
|
7329
7487
|
this.suggestFn = suggestFromArrayFn;
|
|
7330
7488
|
return this.suggestFn(value, filter); // Loop
|
|
@@ -7353,9 +7511,7 @@ class MatChipsField {
|
|
|
7353
7511
|
),
|
|
7354
7512
|
// Object set: use it (no distinctUntilChanged() pipe need)
|
|
7355
7513
|
this.inputControl.valueChanges
|
|
7356
|
-
.pipe(startWith(this.inputControl.value), filter(value => isNotNil(value) && typeof value === 'object'),
|
|
7357
|
-
// DEBUG
|
|
7358
|
-
tap(value => this.debug && console.debug(this.logPrefix + ' Received an object value: ', value))),
|
|
7514
|
+
.pipe(startWith(this.inputControl.value), filter(value => isNotNil(value) && typeof value === 'object')),
|
|
7359
7515
|
// On dropdown button click (no distinctUntilChanged(), nor debounceTime)
|
|
7360
7516
|
this.dropButtonClick
|
|
7361
7517
|
.pipe(filter(event => this.enabled && (!event || !event.defaultPrevented)), tap(_ => this.matInputText.nativeElement.focus()), map(_ => this.showAllOnFocus ? '*' : this.formControl.value),
|
|
@@ -7428,6 +7584,7 @@ class MatChipsField {
|
|
|
7428
7584
|
this.$filteredItems.next(undefined);
|
|
7429
7585
|
}
|
|
7430
7586
|
this._implicitValue = null; // reset the implicit value
|
|
7587
|
+
this.closePanel(); // Clone panel
|
|
7431
7588
|
}));
|
|
7432
7589
|
// Listen form control status change
|
|
7433
7590
|
this._subscription.add(this.formControl.statusChanges
|
|
@@ -7438,6 +7595,7 @@ class MatChipsField {
|
|
|
7438
7595
|
.subscribe(() => this.checkIfTouched()));
|
|
7439
7596
|
this._subscription.add(this.keydownEscape.subscribe(event => {
|
|
7440
7597
|
if (this.isOpen) {
|
|
7598
|
+
// Avoid form or page to manage escape event
|
|
7441
7599
|
event === null || event === void 0 ? void 0 : event.stopPropagation();
|
|
7442
7600
|
event === null || event === void 0 ? void 0 : event.preventDefault();
|
|
7443
7601
|
// DEBUG
|
|
@@ -7525,8 +7683,8 @@ class MatChipsField {
|
|
|
7525
7683
|
value = [value];
|
|
7526
7684
|
}
|
|
7527
7685
|
if (value !== this.formControl.value) {
|
|
7528
|
-
|
|
7529
|
-
|
|
7686
|
+
// DEBUG
|
|
7687
|
+
//if (this.debug) console.debug(this.logPrefix + ' Writing value: ', value);
|
|
7530
7688
|
this.formControl.patchValue(value, { emitEvent: false });
|
|
7531
7689
|
this._onChangeCallback(value);
|
|
7532
7690
|
}
|
|
@@ -7559,15 +7717,17 @@ class MatChipsField {
|
|
|
7559
7717
|
if (event.stopPropagation)
|
|
7560
7718
|
event.stopPropagation();
|
|
7561
7719
|
event.returnValue = false;
|
|
7562
|
-
|
|
7563
|
-
|
|
7720
|
+
// DEBUG
|
|
7721
|
+
//if (this.debug) console.debug(this.logPrefix + ' Cancelling focus event');
|
|
7564
7722
|
return false;
|
|
7565
7723
|
}
|
|
7724
|
+
// DEBUG
|
|
7725
|
+
//if (this.debug) console.debug(this.logPrefix + ' Select input content');
|
|
7566
7726
|
const hasContent = selectInputContent(event);
|
|
7567
7727
|
// If combo is empty, or if has content but should force to show panel on focus
|
|
7568
7728
|
if (!hasContent || (this.showPanelOnFocus && this.showAllOnFocus)) {
|
|
7569
|
-
|
|
7570
|
-
|
|
7729
|
+
// DEBUG
|
|
7730
|
+
//if (this.debug) console.debug(this.logPrefix + ' Emit focus event');
|
|
7571
7731
|
this.focused.emit(event);
|
|
7572
7732
|
return true;
|
|
7573
7733
|
}
|
|
@@ -7582,11 +7742,12 @@ class MatChipsField {
|
|
|
7582
7742
|
if (event.stopPropagation)
|
|
7583
7743
|
event.stopPropagation();
|
|
7584
7744
|
event.returnValue = false;
|
|
7585
|
-
//DEBUG
|
|
7745
|
+
//DEBUG
|
|
7746
|
+
//if (this.debug) console.debug(this.logPrefix + " Cancelling blur event");
|
|
7586
7747
|
return false;
|
|
7587
7748
|
}
|
|
7588
|
-
//DEBUG
|
|
7589
|
-
//console.debug(this.logPrefix + ' Blur: move caret to the beginning');
|
|
7749
|
+
// DEBUG
|
|
7750
|
+
//if (this.debug) console.debug(this.logPrefix + ' Blur: move caret to the beginning');
|
|
7590
7751
|
// Move caret to the beginning (fix issue IMAGINE-469)
|
|
7591
7752
|
selectInputRange(event.target, 0, 0);
|
|
7592
7753
|
this.blurred.emit(event);
|
|
@@ -7724,7 +7885,7 @@ MatChipsField.decorators = [
|
|
|
7724
7885
|
{ type: Component, args: [{
|
|
7725
7886
|
// eslint-disable-next-line @angular-eslint/component-selector
|
|
7726
7887
|
selector: 'mat-chips-field',
|
|
7727
|
-
template: "<ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col class=\"ion-no-padding\">\n <mat-form-field [floatLabel]=\"floatLabel\" class=\"material-chips\" [class.mat-form-field-disabled]=\"disabled\">\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <mat-label>{{placeholder}}</mat-label>\n <mat-chip-list #chipList\n (focus)=\"filterChipsFocusEvent($event)\" >\n <mat-chip\n *ngFor=\"let item of value\"\n [selectable]=\"false\"\n [removable]=\"!disabled\"\n (removed)=\"remove(item)\"\n [color]=\"chipColor\"\n >\n {{displayWith(item)}}\n <mat-icon matChipRemove *ngIf=\"!disabled\">cancel</mat-icon>\n </mat-chip>\n\n <input #matInputText type=\"text\"\n [matAutocomplete]=\"autocomplete\"\n [matAutocompletePosition]=\"matAutocompletePosition\"\n [formControl]=\"inputControl\"\n [appAutofocus]=\"autofocus\"\n [tabindex]=\"_tabindex\"\n [readonly]=\"disabled\"\n [hidden]=\"disabled\"\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 [matChipInputFor]=\"chipList\"\n >\n </mat-chip-list>\n\n <!-- autocomplete -->\n <mat-autocomplete #autocomplete=\"matAutocomplete\"\n (optionSelected)=\"add($event)\"\n autoActiveFirstOption\n [displayWith]=\"displayWith\"\n [class]=\"classList\"\n [panelWidth]=\"panelWidth\">\n <ion-row class=\"mat-autocomplete-header ion-no-padding\">\n <ion-col *ngFor=\"let attr of displayAttributes; index as i
|
|
7888
|
+
template: "<ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col class=\"ion-no-padding\">\n <mat-form-field [floatLabel]=\"floatLabel\" class=\"material-chips\" [class.mat-form-field-disabled]=\"disabled\">\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <mat-label>{{placeholder}}</mat-label>\n <mat-chip-list #chipList\n (focus)=\"filterChipsFocusEvent($event)\" >\n <mat-chip\n *ngFor=\"let item of value\"\n [selectable]=\"false\"\n [removable]=\"!disabled\"\n (removed)=\"remove(item)\"\n [color]=\"chipColor\"\n >\n {{displayWith(item)}}\n <mat-icon matChipRemove *ngIf=\"!disabled\">cancel</mat-icon>\n </mat-chip>\n\n <input #matInputText type=\"text\"\n [matAutocomplete]=\"autocomplete\"\n [matAutocompletePosition]=\"matAutocompletePosition\"\n [formControl]=\"inputControl\"\n [appAutofocus]=\"autofocus\"\n [tabindex]=\"_tabindex\"\n [readonly]=\"disabled\"\n [hidden]=\"disabled\"\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 [matChipInputFor]=\"chipList\"\n >\n </mat-chip-list>\n\n <!-- autocomplete -->\n <mat-autocomplete #autocomplete=\"matAutocomplete\"\n (optionSelected)=\"add($event)\"\n autoActiveFirstOption\n [displayWith]=\"displayWith\"\n [class]=\"classList\"\n [panelWidth]=\"panelWidth\">\n <ion-row class=\"mat-autocomplete-header ion-no-padding column\">\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 <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>{{noResultMessage | translate}}</ion-label>\n </mat-option>\n\n <mat-option *ngFor=\"let item of items\" [value]=\"item\" class=\"ion-no-padding\">\n <ion-row [classList]=\"item.classList\">\n <ion-col *ngFor=\"let path of displayAttributes; index as i;\"\n [size]=\"displayColumnSizes[i]\">\n <ion-text [innerHTML]=\"item | propertyGet: path | highlight: { search: inputControl.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 <!-- footer -->\n <ion-row *ngIf=\"itemCount as count\"\n 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 <!-- Loading spinner -->\n <ng-template #loadingTemplate>\n <mat-option *ngIf=\"(matInputText.value | strLength) >= suggestLengthThreshold; else waitMoreCharacterTemplate\"\n class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n </ng-template>\n\n <!-- Need more characters -->\n <ng-template #waitMoreCharacterTemplate>\n <mat-option class=\"ion-padding text-italic\" disabled>\n <ion-label>\n {{'INFO.PLEASE_TYPE_MORE_CHARACTERS'|translate:{minLength: suggestLengthThreshold} }}\n </ion-label>\n </mat-option>\n </ng-template>\n </mat-autocomplete>\n\n <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 <ng-content select=\"[matError]\"></ng-content>\n\n </mat-form-field>\n\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 mat-icon-button tabindex=\"-1\"\n type=\"button\"\n (click)=\"dropButtonClick.emit($event)\"\n [hidden]=\"disabled\">\n <mat-icon class=\"large select-arrow\">arrow_drop_down</mat-icon>\n </button>\n <button 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",
|
|
7728
7889
|
providers: [{
|
|
7729
7890
|
provide: NG_VALUE_ACCESSOR,
|
|
7730
7891
|
multi: true,
|
|
@@ -8041,7 +8202,7 @@ class ProgressBarService {
|
|
|
8041
8202
|
}
|
|
8042
8203
|
}
|
|
8043
8204
|
}
|
|
8044
|
-
ProgressBarService.ɵprov =
|
|
8205
|
+
ProgressBarService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ProgressBarService_Factory() { return new ProgressBarService(); }, token: ProgressBarService, providedIn: "root" });
|
|
8045
8206
|
ProgressBarService.decorators = [
|
|
8046
8207
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
8047
8208
|
];
|
|
@@ -8085,7 +8246,7 @@ class AppGestureConfig extends HammerGestureConfig {
|
|
|
8085
8246
|
return mc;
|
|
8086
8247
|
}
|
|
8087
8248
|
}
|
|
8088
|
-
AppGestureConfig.ɵprov =
|
|
8249
|
+
AppGestureConfig.ɵprov = i0.ɵɵdefineInjectable({ factory: function AppGestureConfig_Factory() { return new AppGestureConfig(); }, token: AppGestureConfig, providedIn: "root" });
|
|
8089
8250
|
AppGestureConfig.decorators = [
|
|
8090
8251
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
8091
8252
|
];
|
|
@@ -8310,7 +8471,7 @@ class MatPaginatorI18n extends MatPaginatorIntl {
|
|
|
8310
8471
|
this.previousPageLabel = this.translate.instant('COMMON.PAGINATOR.PREVIOUS_PAGE');
|
|
8311
8472
|
}
|
|
8312
8473
|
}
|
|
8313
|
-
MatPaginatorI18n.ɵprov =
|
|
8474
|
+
MatPaginatorI18n.ɵprov = i0.ɵɵdefineInjectable({ factory: function MatPaginatorI18n_Factory() { return new MatPaginatorI18n(i0.ɵɵinject(i1$1.TranslateService)); }, token: MatPaginatorI18n, providedIn: "root" });
|
|
8314
8475
|
MatPaginatorI18n.decorators = [
|
|
8315
8476
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
8316
8477
|
];
|
|
@@ -8400,17 +8561,17 @@ function getColorContrast(color, bw) {
|
|
|
8400
8561
|
return rgbArrayToHex(rgb.map(v => 255 - v));
|
|
8401
8562
|
}
|
|
8402
8563
|
|
|
8403
|
-
const noop
|
|
8564
|
+
const noop = () => {
|
|
8404
8565
|
};
|
|
8405
|
-
const ɵ0$
|
|
8566
|
+
const ɵ0$3 = noop;
|
|
8406
8567
|
class AppFormField {
|
|
8407
8568
|
constructor(translate, cd, injector, formGroupDir) {
|
|
8408
8569
|
this.translate = translate;
|
|
8409
8570
|
this.cd = cd;
|
|
8410
8571
|
this.injector = injector;
|
|
8411
8572
|
this.formGroupDir = formGroupDir;
|
|
8412
|
-
this._onChangeCallback = noop
|
|
8413
|
-
this._onTouchedCallback = noop
|
|
8573
|
+
this._onChangeCallback = noop;
|
|
8574
|
+
this._onTouchedCallback = noop;
|
|
8414
8575
|
this.readonly = false;
|
|
8415
8576
|
this.compact = false;
|
|
8416
8577
|
this.floatLabel = 'auto';
|
|
@@ -8846,14 +9007,14 @@ class AudioProvider extends StartableService {
|
|
|
8846
9007
|
});
|
|
8847
9008
|
}
|
|
8848
9009
|
}
|
|
8849
|
-
AudioProvider.ɵprov =
|
|
9010
|
+
AudioProvider.ɵprov = i0.ɵɵdefineInjectable({ factory: function AudioProvider_Factory() { return new AudioProvider(i0.ɵɵinject(i1$4.Platform), i0.ɵɵinject(i2.NativeAudio, 8), i0.ɵɵinject(i3.Vibration, 8), i0.ɵɵinject(i4.AudioManagement, 8)); }, token: AudioProvider, providedIn: "root" });
|
|
8850
9011
|
AudioProvider.decorators = [
|
|
8851
9012
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
8852
9013
|
];
|
|
8853
9014
|
AudioProvider.ctorParameters = () => [
|
|
8854
9015
|
{ type: Platform },
|
|
8855
|
-
{ type: NativeAudio
|
|
8856
|
-
{ type: Vibration
|
|
9016
|
+
{ type: NativeAudio, decorators: [{ type: Optional }] },
|
|
9017
|
+
{ type: Vibration, decorators: [{ type: Optional }] },
|
|
8857
9018
|
{ type: AudioManagement, decorators: [{ type: Optional }] }
|
|
8858
9019
|
];
|
|
8859
9020
|
|
|
@@ -8876,12 +9037,11 @@ HotkeysDialogComponent.ctorParameters = () => [
|
|
|
8876
9037
|
];
|
|
8877
9038
|
|
|
8878
9039
|
class Hotkeys {
|
|
8879
|
-
constructor(eventManager, dialog, document, modalController
|
|
9040
|
+
constructor(eventManager, dialog, document, modalController) {
|
|
8880
9041
|
this.eventManager = eventManager;
|
|
8881
9042
|
this.dialog = dialog;
|
|
8882
9043
|
this.document = document;
|
|
8883
9044
|
this.modalController = modalController;
|
|
8884
|
-
this.popoverController = popoverController;
|
|
8885
9045
|
this._debug = false;
|
|
8886
9046
|
this._hotkeys = new Map();
|
|
8887
9047
|
this._defaults = {
|
|
@@ -8910,12 +9070,10 @@ class Hotkeys {
|
|
|
8910
9070
|
return new Observable(observer => {
|
|
8911
9071
|
const handler = (e) => __awaiter(this, void 0, void 0, function* () {
|
|
8912
9072
|
// Get top component from ModalController
|
|
8913
|
-
const top =
|
|
9073
|
+
const top = yield this.modalController.getTop();
|
|
8914
9074
|
// If modal present, check its component name against hotkey element name (fix #181)
|
|
8915
|
-
if (top && top.component['name'] !== merged.elementName)
|
|
8916
|
-
e.preventDefault();
|
|
9075
|
+
if (top && top.component['name'] !== merged.elementName)
|
|
8917
9076
|
return;
|
|
8918
|
-
}
|
|
8919
9077
|
if (e instanceof KeyboardEvent && e.repeat)
|
|
8920
9078
|
return; // skip when repeated
|
|
8921
9079
|
if (merged.preventDefault)
|
|
@@ -8938,7 +9096,7 @@ class Hotkeys {
|
|
|
8938
9096
|
});
|
|
8939
9097
|
}
|
|
8940
9098
|
}
|
|
8941
|
-
Hotkeys.ɵprov =
|
|
9099
|
+
Hotkeys.ɵprov = i0.ɵɵdefineInjectable({ factory: function Hotkeys_Factory() { return new Hotkeys(i0.ɵɵinject(i1$5.EventManager), i0.ɵɵinject(i2$1.MatDialog), i0.ɵɵinject(i1$3.DOCUMENT), i0.ɵɵinject(i1$4.ModalController)); }, token: Hotkeys, providedIn: "root" });
|
|
8942
9100
|
Hotkeys.decorators = [
|
|
8943
9101
|
{ type: Injectable, args: [{
|
|
8944
9102
|
providedIn: 'root'
|
|
@@ -8948,8 +9106,7 @@ Hotkeys.ctorParameters = () => [
|
|
|
8948
9106
|
{ type: EventManager },
|
|
8949
9107
|
{ type: MatDialog },
|
|
8950
9108
|
{ type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },
|
|
8951
|
-
{ type: ModalController }
|
|
8952
|
-
{ type: PopoverController }
|
|
9109
|
+
{ type: ModalController }
|
|
8953
9110
|
];
|
|
8954
9111
|
|
|
8955
9112
|
class SharedHotkeysModule {
|
|
@@ -9113,7 +9270,7 @@ class Base64ImageReader {
|
|
|
9113
9270
|
}
|
|
9114
9271
|
}
|
|
9115
9272
|
|
|
9116
|
-
const uuidv4 = uuidv4Imported;
|
|
9273
|
+
const uuidv4$1 = uuidv4Imported;
|
|
9117
9274
|
class FileService {
|
|
9118
9275
|
constructor(platform,
|
|
9119
9276
|
//private transfer: FileTransfer,
|
|
@@ -9150,7 +9307,7 @@ class FileService {
|
|
|
9150
9307
|
const lastSlashIndex = source.lastIndexOf('/');
|
|
9151
9308
|
if (lastSlashIndex === -1)
|
|
9152
9309
|
throw new Error('Invalid URL: ' + source);
|
|
9153
|
-
const fileName = lastSlashIndex < (source.length - 1) && source.substring(lastSlashIndex + 1) || uuidv4();
|
|
9310
|
+
const fileName = lastSlashIndex < (source.length - 1) && source.substring(lastSlashIndex + 1) || uuidv4$1();
|
|
9154
9311
|
// Download into the file system
|
|
9155
9312
|
if (responseType === 'file' && this.canUseFileSystem) {
|
|
9156
9313
|
console.warn(`WARN: [file] Fetching image {${source}} in local file...`);
|
|
@@ -9206,7 +9363,7 @@ class FileService {
|
|
|
9206
9363
|
this._started = true;
|
|
9207
9364
|
}
|
|
9208
9365
|
}
|
|
9209
|
-
FileService.ɵprov =
|
|
9366
|
+
FileService.ɵprov = i0.ɵɵdefineInjectable({ factory: function FileService_Factory() { return new FileService(i0.ɵɵinject(i1$4.Platform), i0.ɵɵinject(i2$2.HttpClient), i0.ɵɵinject(ENVIRONMENT)); }, token: FileService, providedIn: "root" });
|
|
9210
9367
|
FileService.decorators = [
|
|
9211
9368
|
{ type: Injectable, args: [{
|
|
9212
9369
|
providedIn: 'root',
|
|
@@ -9372,7 +9529,7 @@ class Base58 {
|
|
|
9372
9529
|
Base58.alphabet = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
|
|
9373
9530
|
|
|
9374
9531
|
const scrypt = require('scrypt-async');
|
|
9375
|
-
const sha256 = require('hash.js/lib/hash/sha/256');
|
|
9532
|
+
const sha256$1 = require('hash.js/lib/hash/sha/256');
|
|
9376
9533
|
const sha512 = require('hash.js/lib/hash/sha/512');
|
|
9377
9534
|
const nacl = {
|
|
9378
9535
|
sign,
|
|
@@ -9476,7 +9633,7 @@ class CryptoService {
|
|
|
9476
9633
|
* Hash (using SHA256) a message
|
|
9477
9634
|
*/
|
|
9478
9635
|
sha256(message) {
|
|
9479
|
-
return sha256().update(message).digest('hex');
|
|
9636
|
+
return sha256$1().update(message).digest('hex');
|
|
9480
9637
|
}
|
|
9481
9638
|
/**
|
|
9482
9639
|
* Hash (using SHA512) a message
|
|
@@ -9489,7 +9646,7 @@ class CryptoService {
|
|
|
9489
9646
|
return nacl.util.encodeBase64(m);
|
|
9490
9647
|
}
|
|
9491
9648
|
}
|
|
9492
|
-
CryptoService.ɵprov =
|
|
9649
|
+
CryptoService.ɵprov = i0.ɵɵdefineInjectable({ factory: function CryptoService_Factory() { return new CryptoService(); }, token: CryptoService, providedIn: "root" });
|
|
9493
9650
|
CryptoService.decorators = [
|
|
9494
9651
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
9495
9652
|
];
|
|
@@ -9972,109 +10129,6 @@ Peer = Peer_1 = __decorate([
|
|
|
9972
10129
|
EntityClass({ typename: 'PeerVO' })
|
|
9973
10130
|
], Peer);
|
|
9974
10131
|
|
|
9975
|
-
// import the required animation functions from the angular animations module
|
|
9976
|
-
const fadeInAnimation =
|
|
9977
|
-
// trigger name for attaching this animation to an element using the [@triggerName] syntax
|
|
9978
|
-
trigger('fadeInAnimation', [
|
|
9979
|
-
// route 'enter' transition
|
|
9980
|
-
transition(':enter', [
|
|
9981
|
-
// css styles at start of transition
|
|
9982
|
-
style({ opacity: 0 }),
|
|
9983
|
-
// animation and styles at end of transition
|
|
9984
|
-
animate('.3s', style({ opacity: 1 }))
|
|
9985
|
-
]),
|
|
9986
|
-
]);
|
|
9987
|
-
const fadeInOutAnimation =
|
|
9988
|
-
// trigger name for attaching this animation to an element using the [@triggerName] syntax
|
|
9989
|
-
trigger('fadeInOutAnimation', [
|
|
9990
|
-
// route 'enter' transition
|
|
9991
|
-
transition(':enter', [
|
|
9992
|
-
// css styles at start of transition
|
|
9993
|
-
style({ opacity: 0 }),
|
|
9994
|
-
// animation and styles at end of transition
|
|
9995
|
-
animate('.3s', style({ opacity: 1 }))
|
|
9996
|
-
]),
|
|
9997
|
-
// route 'leave' transition
|
|
9998
|
-
transition(':leave', [
|
|
9999
|
-
// animation and styles at end of transition
|
|
10000
|
-
animate('.5s ease-in-out', style({
|
|
10001
|
-
opacity: 0
|
|
10002
|
-
}))
|
|
10003
|
-
]),
|
|
10004
|
-
]);
|
|
10005
|
-
const slideInOutAnimation =
|
|
10006
|
-
// trigger name for attaching this animation to an element using the [@triggerName] syntax
|
|
10007
|
-
trigger('slideInOutAnimation', [
|
|
10008
|
-
// end state styles for route container (host)
|
|
10009
|
-
state('*', style({
|
|
10010
|
-
// the view covers the whole screen with a semi tranparent background
|
|
10011
|
-
position: 'relative',
|
|
10012
|
-
top: 0,
|
|
10013
|
-
left: 0,
|
|
10014
|
-
right: 0,
|
|
10015
|
-
bottom: 0,
|
|
10016
|
-
opacity: 1
|
|
10017
|
-
})),
|
|
10018
|
-
// route 'enter' transition
|
|
10019
|
-
transition(':enter', [
|
|
10020
|
-
// styles at start of transition
|
|
10021
|
-
style({
|
|
10022
|
-
// start with the content positioned off the right of the screen,
|
|
10023
|
-
// -400% is required instead of -100% because the negative position adds to the width of the element
|
|
10024
|
-
left: '400%',
|
|
10025
|
-
// start with background opacity set to 0 (invisible)
|
|
10026
|
-
opacity: 0
|
|
10027
|
-
}),
|
|
10028
|
-
// animation and styles at end of transition
|
|
10029
|
-
animate('.3s ease-in-out', style({
|
|
10030
|
-
// transition the right position to 0 which slides the content into view
|
|
10031
|
-
left: 0,
|
|
10032
|
-
// transition the background opacity to 0.8 to fade it in
|
|
10033
|
-
opacity: 0.8
|
|
10034
|
-
}))
|
|
10035
|
-
]),
|
|
10036
|
-
// route 'leave' transition
|
|
10037
|
-
transition(':leave', [
|
|
10038
|
-
// animation and styles at end of transition
|
|
10039
|
-
animate('.5s ease-in-out', style({
|
|
10040
|
-
// transition the right position to -400% which slides the content out of view
|
|
10041
|
-
left: '400%',
|
|
10042
|
-
// transition the background opacity to 0 to fade it out
|
|
10043
|
-
opacity: 0
|
|
10044
|
-
}))
|
|
10045
|
-
])
|
|
10046
|
-
]);
|
|
10047
|
-
const slideUpDownAnimation =
|
|
10048
|
-
// trigger name for attaching this animation to an element using the [@triggerName] syntax
|
|
10049
|
-
trigger('slideUpDownAnimation', [
|
|
10050
|
-
// end state styles for route container (host)
|
|
10051
|
-
state('*', style({
|
|
10052
|
-
transform: 'translateY(0)',
|
|
10053
|
-
opacity: 1
|
|
10054
|
-
})),
|
|
10055
|
-
// route 'enter' transition
|
|
10056
|
-
transition(':enter', [
|
|
10057
|
-
// styles at start of transition
|
|
10058
|
-
style({
|
|
10059
|
-
transform: 'translateY(-400%)',
|
|
10060
|
-
opacity: 0
|
|
10061
|
-
}),
|
|
10062
|
-
// animation and styles at end of transition
|
|
10063
|
-
animate('.3s ease-in-out', style({
|
|
10064
|
-
transform: 'translateY(0)',
|
|
10065
|
-
opacity: 1
|
|
10066
|
-
}))
|
|
10067
|
-
]),
|
|
10068
|
-
// route 'leave' transition
|
|
10069
|
-
transition(':leave', [
|
|
10070
|
-
// animation and styles at end of transition
|
|
10071
|
-
animate('.5s ease-in-out', style({
|
|
10072
|
-
transform: 'translateY(-100%)',
|
|
10073
|
-
opacity: 0
|
|
10074
|
-
}))
|
|
10075
|
-
])
|
|
10076
|
-
]);
|
|
10077
|
-
|
|
10078
10132
|
class HttpUtils {
|
|
10079
10133
|
static getText(http, uri, opts) {
|
|
10080
10134
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -10352,7 +10406,7 @@ SelectPeerModal.propDecorators = {
|
|
|
10352
10406
|
onRefresh: [{ type: Input }]
|
|
10353
10407
|
};
|
|
10354
10408
|
|
|
10355
|
-
const moment$
|
|
10409
|
+
const moment$4 = momentImported;
|
|
10356
10410
|
const SETTINGS_STORAGE_KEY = 'settings';
|
|
10357
10411
|
const SETTINGS_TRANSIENT_PROPERTIES = ['mobile', 'touchUi' /*deprecated*/];
|
|
10358
10412
|
// fixme: this constant points to static environment
|
|
@@ -10595,11 +10649,11 @@ class LocalSettingsService extends StartableService {
|
|
|
10595
10649
|
if (!feature) {
|
|
10596
10650
|
feature = {
|
|
10597
10651
|
name: featureName.toLowerCase(),
|
|
10598
|
-
lastSyncDate: moment$
|
|
10652
|
+
lastSyncDate: moment$4().toISOString()
|
|
10599
10653
|
};
|
|
10600
10654
|
}
|
|
10601
10655
|
else {
|
|
10602
|
-
feature.lastSyncDate = moment$
|
|
10656
|
+
feature.lastSyncDate = moment$4().toISOString();
|
|
10603
10657
|
}
|
|
10604
10658
|
this.saveOfflineFeature(feature);
|
|
10605
10659
|
}
|
|
@@ -10760,7 +10814,7 @@ class LocalSettingsService extends StartableService {
|
|
|
10760
10814
|
if (!page || !page.title || !page.path)
|
|
10761
10815
|
throw Error('Missing required argument \'page\', \'page.path\' or \'page.title\'');
|
|
10762
10816
|
// Set time
|
|
10763
|
-
page.time = page.time || moment$
|
|
10817
|
+
page.time = page.time || moment$4();
|
|
10764
10818
|
// Clean the title (remove <small> tags)
|
|
10765
10819
|
if (!opts || opts.removeTitleSmallTag !== false) {
|
|
10766
10820
|
const tagIndex = page.title.indexOf('</small>');
|
|
@@ -10776,7 +10830,7 @@ class LocalSettingsService extends StartableService {
|
|
|
10776
10830
|
return page;
|
|
10777
10831
|
}
|
|
10778
10832
|
}
|
|
10779
|
-
LocalSettingsService.ɵprov =
|
|
10833
|
+
LocalSettingsService.ɵprov = i0.ɵɵdefineInjectable({ factory: function LocalSettingsService_Factory() { return new LocalSettingsService(i0.ɵɵinject(i1$1.TranslateService), i0.ɵɵinject(i1$4.Platform), i0.ɵɵinject(i3$1.Storage), i0.ɵɵinject(ENVIRONMENT), i0.ɵɵinject(APP_LOCAL_SETTINGS, 8), i0.ɵɵinject(APP_LOCAL_SETTINGS_OPTIONS, 8)); }, token: LocalSettingsService, providedIn: "root" });
|
|
10780
10834
|
LocalSettingsService.decorators = [
|
|
10781
10835
|
{ type: Injectable, args: [{
|
|
10782
10836
|
providedIn: 'root',
|
|
@@ -11493,7 +11547,7 @@ class NetworkService extends StartableService {
|
|
|
11493
11547
|
});
|
|
11494
11548
|
}
|
|
11495
11549
|
}
|
|
11496
|
-
NetworkService.ɵprov =
|
|
11550
|
+
NetworkService.ɵprov = i0.ɵɵdefineInjectable({ factory: function NetworkService_Factory() { return new NetworkService(i0.ɵɵinject(i1$3.DOCUMENT), i0.ɵɵinject(i1$4.Platform), i0.ɵɵinject(i1$4.ModalController), i0.ɵɵinject(CryptoService), i0.ɵɵinject(i3$1.Storage), i0.ɵɵinject(LocalSettingsService), i0.ɵɵinject(i6.CacheService), i0.ɵɵinject(i2$2.HttpClient), i0.ɵɵinject(ENVIRONMENT), i0.ɵɵinject(i9.Network, 8), i0.ɵɵinject(i10.SplashScreen, 8), i0.ɵɵinject(i1$1.TranslateService, 8), i0.ɵɵinject(i1$4.ToastController, 8)); }, token: NetworkService, providedIn: "root" });
|
|
11497
11551
|
NetworkService.decorators = [
|
|
11498
11552
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
11499
11553
|
];
|
|
@@ -11504,16 +11558,16 @@ NetworkService.ctorParameters = () => [
|
|
|
11504
11558
|
{ type: CryptoService },
|
|
11505
11559
|
{ type: Storage },
|
|
11506
11560
|
{ type: LocalSettingsService },
|
|
11507
|
-
{ type: CacheService
|
|
11561
|
+
{ type: CacheService },
|
|
11508
11562
|
{ type: HttpClient },
|
|
11509
11563
|
{ type: undefined, decorators: [{ type: Inject, args: [ENVIRONMENT,] }] },
|
|
11510
|
-
{ type: Network
|
|
11511
|
-
{ type: SplashScreen
|
|
11564
|
+
{ type: Network, decorators: [{ type: Optional }] },
|
|
11565
|
+
{ type: SplashScreen, decorators: [{ type: Optional }] },
|
|
11512
11566
|
{ type: TranslateService, decorators: [{ type: Optional }] },
|
|
11513
11567
|
{ type: ToastController, decorators: [{ type: Optional }] }
|
|
11514
11568
|
];
|
|
11515
11569
|
|
|
11516
|
-
const ErrorCodes = {
|
|
11570
|
+
const ErrorCodes$2 = {
|
|
11517
11571
|
UNKNOWN_ERROR: 0,
|
|
11518
11572
|
LOAD_ACCOUNT_ERROR: 1,
|
|
11519
11573
|
BAD_PASSWORD: 2,
|
|
@@ -11865,7 +11919,7 @@ class EntityStore {
|
|
|
11865
11919
|
}
|
|
11866
11920
|
catch (err) {
|
|
11867
11921
|
console.error(err);
|
|
11868
|
-
throw { code: ErrorCodes.ENTITY_STORAGE_MIGRATION_FAILED, message: 'ERROR.ENTITY_STORAGE_MIGRATION_FAILED', details: err };
|
|
11922
|
+
throw { code: ErrorCodes$2.ENTITY_STORAGE_MIGRATION_FAILED, message: 'ERROR.ENTITY_STORAGE_MIGRATION_FAILED', details: err };
|
|
11869
11923
|
}
|
|
11870
11924
|
}
|
|
11871
11925
|
// Emit update event
|
|
@@ -12439,7 +12493,7 @@ class EntitiesStorage extends StartableService {
|
|
|
12439
12493
|
}
|
|
12440
12494
|
EntitiesStorage.TRASH_PREFIX = 'Trash#';
|
|
12441
12495
|
EntitiesStorage.REMOTE_PREFIX = 'Remote#';
|
|
12442
|
-
EntitiesStorage.ɵprov =
|
|
12496
|
+
EntitiesStorage.ɵprov = i0.ɵɵdefineInjectable({ factory: function EntitiesStorage_Factory() { return new EntitiesStorage(i0.ɵɵinject(i1$4.Platform), i0.ɵɵinject(ProgressBarService), i0.ɵɵinject(i3$1.Storage), i0.ɵɵinject(ENVIRONMENT), i0.ɵɵinject(APP_LOCAL_STORAGE_TYPE_POLICIES, 8)); }, token: EntitiesStorage, providedIn: "root" });
|
|
12443
12497
|
EntitiesStorage.decorators = [
|
|
12444
12498
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
12445
12499
|
];
|
|
@@ -12576,10 +12630,10 @@ function referentialToString(obj, properties) {
|
|
|
12576
12630
|
function referentialsToString(values, properties, separator) {
|
|
12577
12631
|
return (values || []).map(v => referentialToString(v, properties)).join(separator || ', ');
|
|
12578
12632
|
}
|
|
12579
|
-
const ɵ0$
|
|
12633
|
+
const ɵ0$2 = StatusIds.ENABLE, ɵ1 = StatusIds.DISABLE, ɵ2 = StatusIds.TEMPORARY;
|
|
12580
12634
|
const StatusList = Object.freeze([
|
|
12581
12635
|
{
|
|
12582
|
-
id: ɵ0$
|
|
12636
|
+
id: ɵ0$2,
|
|
12583
12637
|
icon: 'checkmark',
|
|
12584
12638
|
label: 'REFERENTIAL.STATUS_ENUM.ENABLE'
|
|
12585
12639
|
},
|
|
@@ -12854,7 +12908,7 @@ function accountToString(data) {
|
|
|
12854
12908
|
(data.lastName || '')) || '';
|
|
12855
12909
|
}
|
|
12856
12910
|
|
|
12857
|
-
const uuidv4
|
|
12911
|
+
const uuidv4 = uuidv4Imported;
|
|
12858
12912
|
const _global = typeof global !== 'undefined' ? global : (typeof window !== 'undefined' ? window : {});
|
|
12859
12913
|
const NativeWebSocket = _global.WebSocket || _global.MozWebSocket;
|
|
12860
12914
|
/**
|
|
@@ -12898,7 +12952,7 @@ function createTrackerLink(opts) {
|
|
|
12898
12952
|
// Skip if not tracked
|
|
12899
12953
|
if (!context || !context.tracked)
|
|
12900
12954
|
return forward(operation);
|
|
12901
|
-
const id = context.serializationKey || uuidv4
|
|
12955
|
+
const id = context.serializationKey || uuidv4();
|
|
12902
12956
|
console.debug(`[apollo-tracker-link] Watching tracked query {${operation.operationName}#${id}}`);
|
|
12903
12957
|
// Clean context, before calling JSON.stringify (remove unused attributes)
|
|
12904
12958
|
const cleanContext = Object.assign(Object.assign({}, context), { optimisticResponse: null, cache: null });
|
|
@@ -13561,7 +13615,7 @@ class GraphqlService extends StartableService {
|
|
|
13561
13615
|
(err.networkError && ((err.networkError.error && this.toAppError(err.networkError.error))
|
|
13562
13616
|
|| this.toAppError(err.networkError)
|
|
13563
13617
|
|| (err.networkError.error && this.createAppErrorByCode(err.networkError.error.status))
|
|
13564
|
-
|| this.createAppErrorByCode(ErrorCodes.UNKNOWN_NETWORK_ERROR)))
|
|
13618
|
+
|| this.createAppErrorByCode(ErrorCodes$2.UNKNOWN_NETWORK_ERROR)))
|
|
13565
13619
|
// If graphQL: try to convert the first error found
|
|
13566
13620
|
|| (err.graphQLErrors && err.graphQLErrors.length && this.toAppError(err.graphQLErrors[0]))
|
|
13567
13621
|
|| this.toAppError(err)
|
|
@@ -13569,7 +13623,7 @@ class GraphqlService extends StartableService {
|
|
|
13569
13623
|
|| (err.graphQLErrors && err.graphQLErrors[0])
|
|
13570
13624
|
|| err;
|
|
13571
13625
|
console.error('[graphql] ' + (error && error.message || error), error.stack || '');
|
|
13572
|
-
if (error && error.code === ErrorCodes.UNKNOWN_NETWORK_ERROR && err.networkError && err.networkError.message) {
|
|
13626
|
+
if (error && error.code === ErrorCodes$2.UNKNOWN_NETWORK_ERROR && err.networkError && err.networkError.message) {
|
|
13573
13627
|
console.error('[graphql] original error: ' + err.networkError.message);
|
|
13574
13628
|
this.onNetworkError.next(error);
|
|
13575
13629
|
}
|
|
@@ -13605,7 +13659,7 @@ class GraphqlService extends StartableService {
|
|
|
13605
13659
|
return 'ERROR.UNAUTHORIZED';
|
|
13606
13660
|
case ServerErrorCodes.FORBIDDEN:
|
|
13607
13661
|
return 'ERROR.FORBIDDEN';
|
|
13608
|
-
case ErrorCodes.UNKNOWN_NETWORK_ERROR:
|
|
13662
|
+
case ErrorCodes$2.UNKNOWN_NETWORK_ERROR:
|
|
13609
13663
|
return 'ERROR.UNKNOWN_NETWORK_ERROR';
|
|
13610
13664
|
case ServerErrorCodes.BAD_UPDATE_DATE:
|
|
13611
13665
|
return 'ERROR.BAD_UPDATE_DATE';
|
|
@@ -13636,7 +13690,7 @@ class GraphqlService extends StartableService {
|
|
|
13636
13690
|
return undefined;
|
|
13637
13691
|
}
|
|
13638
13692
|
}
|
|
13639
|
-
GraphqlService.ɵprov =
|
|
13693
|
+
GraphqlService.ɵprov = i0.ɵɵdefineInjectable({ factory: function GraphqlService_Factory() { return new GraphqlService(i0.ɵɵinject(i1$4.Platform), i0.ɵɵinject(i2$3.Apollo), i0.ɵɵinject(i3$2.HttpLink), i0.ɵɵinject(NetworkService), i0.ɵɵinject(i3$1.Storage), i0.ɵɵinject(CryptoService), i0.ɵɵinject(ENVIRONMENT), i0.ɵɵinject(APP_GRAPHQL_TYPE_POLICIES, 8)); }, token: GraphqlService, providedIn: "root" });
|
|
13640
13694
|
GraphqlService.decorators = [
|
|
13641
13695
|
{ type: Injectable, args: [{
|
|
13642
13696
|
providedIn: 'root'
|
|
@@ -13653,7 +13707,7 @@ GraphqlService.ctorParameters = () => [
|
|
|
13653
13707
|
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [APP_GRAPHQL_TYPE_POLICIES,] }] }
|
|
13654
13708
|
];
|
|
13655
13709
|
|
|
13656
|
-
const sha256
|
|
13710
|
+
const sha256 = require('hash.js/lib/hash/sha/256');
|
|
13657
13711
|
class BaseGraphqlServiceOptions {
|
|
13658
13712
|
}
|
|
13659
13713
|
// eslint-disable-next-line @angular-eslint/directive-class-suffix
|
|
@@ -13804,8 +13858,8 @@ class BaseGraphqlService extends StartableService {
|
|
|
13804
13858
|
}
|
|
13805
13859
|
/* -- protected methods -- */
|
|
13806
13860
|
computeMutableWatchQueryId(opts) {
|
|
13807
|
-
const queryName = opts.queryName || sha256
|
|
13808
|
-
const variablesKey = opts.variables && sha256
|
|
13861
|
+
const queryName = opts.queryName || sha256().update(JSON.stringify(opts.query)).digest('hex').substring(0, 8);
|
|
13862
|
+
const variablesKey = opts.variables && sha256().update(JSON.stringify(opts.variables)).digest('hex').substring(0, 8) || '';
|
|
13809
13863
|
return [queryName, opts.arrayFieldName, variablesKey].join('|');
|
|
13810
13864
|
}
|
|
13811
13865
|
findMutableWatchQueries(opts) {
|
|
@@ -13875,7 +13929,7 @@ const DEFAULT_AVATAR_IMAGE = 'assets/img/person.png';
|
|
|
13875
13929
|
/* ------------------------------------
|
|
13876
13930
|
* GraphQL queries
|
|
13877
13931
|
* ------------------------------------*/
|
|
13878
|
-
const Fragments = {
|
|
13932
|
+
const Fragments$1 = {
|
|
13879
13933
|
account: gql `
|
|
13880
13934
|
fragment AccountFragment on AccountVO {
|
|
13881
13935
|
id
|
|
@@ -13910,14 +13964,14 @@ const Fragments = {
|
|
|
13910
13964
|
}`
|
|
13911
13965
|
};
|
|
13912
13966
|
// Load account query
|
|
13913
|
-
const LoadQuery = gql `
|
|
13967
|
+
const LoadQuery$1 = gql `
|
|
13914
13968
|
query Account {
|
|
13915
13969
|
data: account {
|
|
13916
13970
|
...AccountFragment
|
|
13917
13971
|
}
|
|
13918
13972
|
}
|
|
13919
|
-
${Fragments.account}
|
|
13920
|
-
${Fragments.settings}
|
|
13973
|
+
${Fragments$1.account}
|
|
13974
|
+
${Fragments$1.settings}
|
|
13921
13975
|
`;
|
|
13922
13976
|
// Check email query
|
|
13923
13977
|
const IsEmailExistsQuery = gql `
|
|
@@ -13932,21 +13986,21 @@ const AccountMutations = {
|
|
|
13932
13986
|
...AccountFragment
|
|
13933
13987
|
}
|
|
13934
13988
|
}
|
|
13935
|
-
${Fragments.account}
|
|
13936
|
-
${Fragments.settings}`,
|
|
13989
|
+
${Fragments$1.account}
|
|
13990
|
+
${Fragments$1.settings}`,
|
|
13937
13991
|
create: gql `mutation CreateAccount($data:AccountVOInput){
|
|
13938
13992
|
data: createAccount(account: $data){
|
|
13939
13993
|
...AccountFragment
|
|
13940
13994
|
}
|
|
13941
13995
|
}
|
|
13942
|
-
${Fragments.account}
|
|
13943
|
-
${Fragments.settings}`,
|
|
13996
|
+
${Fragments$1.account}
|
|
13997
|
+
${Fragments$1.settings}`,
|
|
13944
13998
|
saveSettings: gql `mutation SaveSettings($data:UserSettingsVOInput){
|
|
13945
13999
|
data: saveSettings(settings: $data){
|
|
13946
14000
|
...UserSettingsFragment
|
|
13947
14001
|
}
|
|
13948
14002
|
}
|
|
13949
|
-
${Fragments.settings}`
|
|
14003
|
+
${Fragments$1.settings}`
|
|
13950
14004
|
};
|
|
13951
14005
|
// Sent confirmation email
|
|
13952
14006
|
const SendConfirmEmailMutation = gql `
|
|
@@ -14261,7 +14315,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
14261
14315
|
catch (error) {
|
|
14262
14316
|
console.error(error);
|
|
14263
14317
|
this.resetData();
|
|
14264
|
-
throw { code: ErrorCodes.UNKNOWN_ERROR, message: 'ERROR.SCRYPT_ERROR' };
|
|
14318
|
+
throw { code: ErrorCodes$2.UNKNOWN_ERROR, message: 'ERROR.SCRYPT_ERROR' };
|
|
14265
14319
|
}
|
|
14266
14320
|
// Store pubkey+keypair
|
|
14267
14321
|
this._cache.pubkey = Base58.encode(keypair.publicKey);
|
|
@@ -14295,7 +14349,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
14295
14349
|
}
|
|
14296
14350
|
catch (err) {
|
|
14297
14351
|
// If account not found, check if email is valid
|
|
14298
|
-
if (err && +(err.code) === ErrorCodes.LOAD_ACCOUNT_ERROR) {
|
|
14352
|
+
if (err && +(err.code) === ErrorCodes$2.LOAD_ACCOUNT_ERROR) {
|
|
14299
14353
|
// Check email exists
|
|
14300
14354
|
if (data.username.indexOf('@') !== -1) {
|
|
14301
14355
|
let isEmailExists;
|
|
@@ -14307,11 +14361,11 @@ class AccountService extends BaseGraphqlService {
|
|
|
14307
14361
|
}
|
|
14308
14362
|
// Email not exists (no account)
|
|
14309
14363
|
if (!isEmailExists) {
|
|
14310
|
-
throw { code: ErrorCodes.UNKNOWN_ACCOUNT_EMAIL, message: 'ERROR.UNKNOWN_ACCOUNT_EMAIL' };
|
|
14364
|
+
throw { code: ErrorCodes$2.UNKNOWN_ACCOUNT_EMAIL, message: 'ERROR.UNKNOWN_ACCOUNT_EMAIL' };
|
|
14311
14365
|
}
|
|
14312
14366
|
}
|
|
14313
14367
|
// Email exists, so error = 'bad password'
|
|
14314
|
-
throw { code: ErrorCodes.BAD_PASSWORD, message: 'ERROR.BAD_PASSWORD' };
|
|
14368
|
+
throw { code: ErrorCodes$2.BAD_PASSWORD, message: 'ERROR.BAD_PASSWORD' };
|
|
14315
14369
|
}
|
|
14316
14370
|
throw err; // resend the first error
|
|
14317
14371
|
}
|
|
@@ -14457,8 +14511,8 @@ class AccountService extends BaseGraphqlService {
|
|
|
14457
14511
|
// Load remotely
|
|
14458
14512
|
else {
|
|
14459
14513
|
const { data } = yield this.graphql.query({
|
|
14460
|
-
query: LoadQuery,
|
|
14461
|
-
error: { code: ErrorCodes.LOAD_ACCOUNT_ERROR, message: 'ERROR.LOAD_ACCOUNT_ERROR' },
|
|
14514
|
+
query: LoadQuery$1,
|
|
14515
|
+
error: { code: ErrorCodes$2.LOAD_ACCOUNT_ERROR, message: 'ERROR.LOAD_ACCOUNT_ERROR' },
|
|
14462
14516
|
fetchPolicy: opts && opts.fetchPolicy || 'no-cache' || undefined
|
|
14463
14517
|
});
|
|
14464
14518
|
json = data;
|
|
@@ -14485,7 +14539,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
14485
14539
|
return __awaiter(this, void 0, void 0, function* () {
|
|
14486
14540
|
const isEmailExists = yield this.isEmailExists(email);
|
|
14487
14541
|
if (isEmailExists) {
|
|
14488
|
-
throw { code: ErrorCodes.EMAIL_ALREADY_REGISTERED, message: 'ERROR.EMAIL_ALREADY_REGISTERED' };
|
|
14542
|
+
throw { code: ErrorCodes$2.EMAIL_ALREADY_REGISTERED, message: 'ERROR.EMAIL_ALREADY_REGISTERED' };
|
|
14489
14543
|
}
|
|
14490
14544
|
});
|
|
14491
14545
|
}
|
|
@@ -14521,7 +14575,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
14521
14575
|
locale
|
|
14522
14576
|
},
|
|
14523
14577
|
error: {
|
|
14524
|
-
code: ErrorCodes.SENT_CONFIRMATION_EMAIL_FAILED,
|
|
14578
|
+
code: ErrorCodes$2.SENT_CONFIRMATION_EMAIL_FAILED,
|
|
14525
14579
|
message: 'ERROR.SENT_ACCOUNT_CONFIRMATION_EMAIL_FAILED'
|
|
14526
14580
|
}
|
|
14527
14581
|
});
|
|
@@ -14537,7 +14591,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
14537
14591
|
code
|
|
14538
14592
|
},
|
|
14539
14593
|
error: {
|
|
14540
|
-
code: ErrorCodes.CONFIRM_EMAIL_FAILED,
|
|
14594
|
+
code: ErrorCodes$2.CONFIRM_EMAIL_FAILED,
|
|
14541
14595
|
message: 'ERROR.CONFIRM_ACCOUNT_EMAIL_FAILED'
|
|
14542
14596
|
}
|
|
14543
14597
|
});
|
|
@@ -14616,7 +14670,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
14616
14670
|
throw error;
|
|
14617
14671
|
console.error(error);
|
|
14618
14672
|
throw {
|
|
14619
|
-
code: ErrorCodes.LOAD_ACCOUNT_ERROR,
|
|
14673
|
+
code: ErrorCodes$2.LOAD_ACCOUNT_ERROR,
|
|
14620
14674
|
message: 'ERROR.LOAD_ACCOUNT_ERROR'
|
|
14621
14675
|
};
|
|
14622
14676
|
}
|
|
@@ -14786,7 +14840,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
14786
14840
|
if (!isNew) {
|
|
14787
14841
|
const existingAccount = yield this.load({ fetchPolicy: 'network-only' });
|
|
14788
14842
|
if (!existingAccount || !existingAccount.updateDate) {
|
|
14789
|
-
throw { code: ErrorCodes.ACCOUNT_NOT_EXISTS, message: 'ERROR.ACCOUNT_NOT_EXISTS' };
|
|
14843
|
+
throw { code: ErrorCodes$2.ACCOUNT_NOT_EXISTS, message: 'ERROR.ACCOUNT_NOT_EXISTS' };
|
|
14790
14844
|
}
|
|
14791
14845
|
this.copyIdAndUpdateDate(existingAccount, account);
|
|
14792
14846
|
}
|
|
@@ -14798,7 +14852,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
14798
14852
|
mutation: isNew ? AccountMutations.create : AccountMutations.save,
|
|
14799
14853
|
variables: { data: json },
|
|
14800
14854
|
error: {
|
|
14801
|
-
code: ErrorCodes.SAVE_ACCOUNT_ERROR,
|
|
14855
|
+
code: ErrorCodes$2.SAVE_ACCOUNT_ERROR,
|
|
14802
14856
|
message: 'ERROR.SAVE_ACCOUNT_ERROR'
|
|
14803
14857
|
}
|
|
14804
14858
|
});
|
|
@@ -14825,7 +14879,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
14825
14879
|
mutation: AccountMutations.saveSettings,
|
|
14826
14880
|
variables: { data: json },
|
|
14827
14881
|
error: {
|
|
14828
|
-
code: ErrorCodes.SAVE_SETTINGS_ERROR,
|
|
14882
|
+
code: ErrorCodes$2.SAVE_SETTINGS_ERROR,
|
|
14829
14883
|
message: 'ERROR.SAVE_SETTINGS_ERROR'
|
|
14830
14884
|
}
|
|
14831
14885
|
});
|
|
@@ -14847,7 +14901,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
14847
14901
|
if (counter > 4) {
|
|
14848
14902
|
if (this._debug)
|
|
14849
14903
|
console.debug(`[account] Failed to authentication on pod (after ${counter} attempts)`);
|
|
14850
|
-
throw { code: ErrorCodes.AUTH_SERVER_ERROR, message: 'ERROR.AUTH_SERVER_ERROR' };
|
|
14904
|
+
throw { code: ErrorCodes$2.AUTH_SERVER_ERROR, message: 'ERROR.AUTH_SERVER_ERROR' };
|
|
14851
14905
|
}
|
|
14852
14906
|
// Check if valid
|
|
14853
14907
|
if (token) {
|
|
@@ -14857,7 +14911,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
14857
14911
|
token
|
|
14858
14912
|
},
|
|
14859
14913
|
error: {
|
|
14860
|
-
code: ErrorCodes.UNAUTHORIZED,
|
|
14914
|
+
code: ErrorCodes$2.UNAUTHORIZED,
|
|
14861
14915
|
message: 'ERROR.UNAUTHORIZED'
|
|
14862
14916
|
},
|
|
14863
14917
|
fetchPolicy: 'no-cache'
|
|
@@ -14873,7 +14927,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
14873
14927
|
}
|
|
14874
14928
|
// Generate a new token
|
|
14875
14929
|
const challengeError = {
|
|
14876
|
-
code: ErrorCodes.AUTH_CHALLENGE_ERROR,
|
|
14930
|
+
code: ErrorCodes$2.AUTH_CHALLENGE_ERROR,
|
|
14877
14931
|
message: 'ERROR.AUTH_CHALLENGE_ERROR'
|
|
14878
14932
|
};
|
|
14879
14933
|
const data = yield this.graphql.query({
|
|
@@ -14951,7 +15005,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
14951
15005
|
query: AccountSubscriptions.listenChanges,
|
|
14952
15006
|
variables,
|
|
14953
15007
|
error: {
|
|
14954
|
-
code: ErrorCodes.SUBSCRIBE_ACCOUNT_ERROR,
|
|
15008
|
+
code: ErrorCodes$2.SUBSCRIBE_ACCOUNT_ERROR,
|
|
14955
15009
|
message: 'ERROR.ACCOUNT.SUBSCRIBE_ERROR'
|
|
14956
15010
|
}
|
|
14957
15011
|
}).pipe(map(({ data }) => data),
|
|
@@ -14980,7 +15034,7 @@ class AccountService extends BaseGraphqlService {
|
|
|
14980
15034
|
return Toasts.show(this.toastController, this.translate, opts);
|
|
14981
15035
|
}
|
|
14982
15036
|
}
|
|
14983
|
-
AccountService.ɵprov =
|
|
15037
|
+
AccountService.ɵprov = i0.ɵɵdefineInjectable({ factory: function AccountService_Factory() { return new AccountService(i0.ɵɵinject(CryptoService), i0.ɵɵinject(NetworkService), i0.ɵɵinject(GraphqlService), i0.ɵɵinject(LocalSettingsService), i0.ɵɵinject(i3$1.Storage), i0.ɵɵinject(FileService), i0.ɵɵinject(i1$1.TranslateService, 8), i0.ɵɵinject(i1$4.ToastController, 8), i0.ɵɵinject(ENVIRONMENT)); }, token: AccountService, providedIn: "root" });
|
|
14984
15038
|
AccountService.decorators = [
|
|
14985
15039
|
{ type: Injectable, args: [{ providedIn: 'root', deps: [ENVIRONMENT] },] }
|
|
14986
15040
|
];
|
|
@@ -15248,7 +15302,7 @@ const CONFIGURATION_STORAGE_KEY = 'configuration';
|
|
|
15248
15302
|
/* ------------------------------------
|
|
15249
15303
|
* GraphQL queries
|
|
15250
15304
|
* ------------------------------------*/
|
|
15251
|
-
const Fragments
|
|
15305
|
+
const Fragments = {
|
|
15252
15306
|
config: gql `
|
|
15253
15307
|
fragment ConfigFragment on ConfigurationVO {
|
|
15254
15308
|
id
|
|
@@ -15275,13 +15329,13 @@ const Fragments$1 = {
|
|
|
15275
15329
|
}
|
|
15276
15330
|
`
|
|
15277
15331
|
};
|
|
15278
|
-
const LoadQuery
|
|
15332
|
+
const LoadQuery = gql `
|
|
15279
15333
|
query Configuration{
|
|
15280
15334
|
data: configuration{
|
|
15281
15335
|
...ConfigFragment
|
|
15282
15336
|
}
|
|
15283
15337
|
}
|
|
15284
|
-
${Fragments
|
|
15338
|
+
${Fragments.config}
|
|
15285
15339
|
`;
|
|
15286
15340
|
// Save (create or update) account mutation
|
|
15287
15341
|
const SaveMutation = gql `
|
|
@@ -15290,7 +15344,7 @@ const SaveMutation = gql `
|
|
|
15290
15344
|
...ConfigFragment
|
|
15291
15345
|
}
|
|
15292
15346
|
}
|
|
15293
|
-
${Fragments
|
|
15347
|
+
${Fragments.config}
|
|
15294
15348
|
`;
|
|
15295
15349
|
const ClearCache = gql `
|
|
15296
15350
|
query ClearCache($name: String) {
|
|
@@ -15341,12 +15395,12 @@ class ConfigService extends BaseGraphqlService {
|
|
|
15341
15395
|
return __awaiter(this, void 0, void 0, function* () {
|
|
15342
15396
|
const now = Date.now();
|
|
15343
15397
|
console.debug('[config] Loading Pod configuration...');
|
|
15344
|
-
const query = opts && opts.query || LoadQuery
|
|
15398
|
+
const query = opts && opts.query || LoadQuery;
|
|
15345
15399
|
const variables = opts && opts.variables || undefined;
|
|
15346
15400
|
const res = yield this.graphql.query({
|
|
15347
15401
|
query,
|
|
15348
15402
|
variables,
|
|
15349
|
-
error: { code: ErrorCodes.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
|
|
15403
|
+
error: { code: ErrorCodes$2.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
|
|
15350
15404
|
fetchPolicy: opts && opts.fetchPolicy || undefined /*default*/
|
|
15351
15405
|
});
|
|
15352
15406
|
const data = res && res.data ? Configuration.fromObject(res.data) : undefined;
|
|
@@ -15379,7 +15433,7 @@ class ConfigService extends BaseGraphqlService {
|
|
|
15379
15433
|
data: json
|
|
15380
15434
|
},
|
|
15381
15435
|
error: {
|
|
15382
|
-
code: ErrorCodes.SAVE_CONFIG_ERROR,
|
|
15436
|
+
code: ErrorCodes$2.SAVE_CONFIG_ERROR,
|
|
15383
15437
|
message: 'ERROR.SAVE_CONFIG_ERROR'
|
|
15384
15438
|
}
|
|
15385
15439
|
});
|
|
@@ -15405,7 +15459,7 @@ class ConfigService extends BaseGraphqlService {
|
|
|
15405
15459
|
const res = yield this.graphql.query({
|
|
15406
15460
|
query: CacheStatistics,
|
|
15407
15461
|
variables: null,
|
|
15408
|
-
error: { code: ErrorCodes.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
|
|
15462
|
+
error: { code: ErrorCodes$2.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
|
|
15409
15463
|
fetchPolicy: 'network-only'
|
|
15410
15464
|
});
|
|
15411
15465
|
const data = res && res.cacheStatistics || undefined;
|
|
@@ -15421,7 +15475,7 @@ class ConfigService extends BaseGraphqlService {
|
|
|
15421
15475
|
const res = yield this.graphql.query({
|
|
15422
15476
|
query: ClearCache,
|
|
15423
15477
|
variables,
|
|
15424
|
-
error: { code: ErrorCodes.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
|
|
15478
|
+
error: { code: ErrorCodes$2.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
|
|
15425
15479
|
fetchPolicy: 'no-cache'
|
|
15426
15480
|
});
|
|
15427
15481
|
const data = res && res.clearCache || undefined;
|
|
@@ -15580,7 +15634,7 @@ class ConfigService extends BaseGraphqlService {
|
|
|
15580
15634
|
});
|
|
15581
15635
|
}
|
|
15582
15636
|
}
|
|
15583
|
-
ConfigService.ɵprov =
|
|
15637
|
+
ConfigService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ConfigService_Factory() { return new ConfigService(i0.ɵɵinject(i1$4.Platform), i0.ɵɵinject(GraphqlService), i0.ɵɵinject(i3$1.Storage), i0.ɵɵinject(NetworkService), i0.ɵɵinject(FileService), i0.ɵɵinject(i1$4.ToastController), i0.ɵɵinject(i1$1.TranslateService), i0.ɵɵinject(AccountService), i0.ɵɵinject(ENVIRONMENT), i0.ɵɵinject(APP_CONFIG_OPTIONS, 8)); }, token: ConfigService, providedIn: "root" });
|
|
15584
15638
|
ConfigService.decorators = [
|
|
15585
15639
|
{ type: Injectable, args: [{
|
|
15586
15640
|
providedIn: 'root',
|
|
@@ -15600,7 +15654,7 @@ ConfigService.ctorParameters = () => [
|
|
|
15600
15654
|
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [APP_CONFIG_OPTIONS,] }] }
|
|
15601
15655
|
];
|
|
15602
15656
|
|
|
15603
|
-
const moment$
|
|
15657
|
+
const moment$3 = momentImported;
|
|
15604
15658
|
const AndroidOsEnvironment = Object.freeze({
|
|
15605
15659
|
DIRECTORY_DOWNLOADS: 'Download',
|
|
15606
15660
|
DIRECTORY_DOWNLOADS_OLD: 'Downloads',
|
|
@@ -15834,16 +15888,16 @@ class PlatformService extends StartableService {
|
|
|
15834
15888
|
}
|
|
15835
15889
|
// config moment lib
|
|
15836
15890
|
try {
|
|
15837
|
-
moment$
|
|
15891
|
+
moment$3.locale(event.lang);
|
|
15838
15892
|
console.debug('[platform] Use locale {' + event.lang + '}');
|
|
15839
15893
|
}
|
|
15840
15894
|
// If error, fallback to en
|
|
15841
15895
|
catch (err) {
|
|
15842
|
-
moment$
|
|
15896
|
+
moment$3.locale('en');
|
|
15843
15897
|
console.warn('[platform] Unknown local for moment lib. Using default [en]');
|
|
15844
15898
|
}
|
|
15845
15899
|
// Config date adapter
|
|
15846
|
-
this.dateAdapter.setLocale(moment$
|
|
15900
|
+
this.dateAdapter.setLocale(moment$3.locale());
|
|
15847
15901
|
}
|
|
15848
15902
|
});
|
|
15849
15903
|
this.settings.onChange.subscribe(data => {
|
|
@@ -16044,7 +16098,7 @@ class PlatformService extends StartableService {
|
|
|
16044
16098
|
});
|
|
16045
16099
|
}
|
|
16046
16100
|
}
|
|
16047
|
-
PlatformService.ɵprov =
|
|
16101
|
+
PlatformService.ɵprov = i0.ɵɵdefineInjectable({ factory: function PlatformService_Factory() { return new PlatformService(i0.ɵɵinject(i1$4.Platform), i0.ɵɵinject(i2$4.Platform), i0.ɵɵinject(i1$4.ToastController), i0.ɵɵinject(i1$1.TranslateService), i0.ɵɵinject(i1.MomentDateAdapter), i0.ɵɵinject(EntitiesStorage), i0.ɵɵinject(LocalSettingsService), i0.ɵɵinject(NetworkService), i0.ɵɵinject(AccountService), i0.ɵɵinject(ConfigService), i0.ɵɵinject(i6.CacheService), i0.ɵɵinject(i3$1.Storage), i0.ɵɵinject(AudioProvider), i0.ɵɵinject(ENVIRONMENT), i0.ɵɵinject(i14.StatusBar, 8), i0.ɵɵinject(i15.Keyboard, 8), i0.ɵɵinject(i10.SplashScreen, 8), i0.ɵɵinject(i17.InAppBrowser, 8), i0.ɵɵinject(i18.Downloader, 8)); }, token: PlatformService, providedIn: "root" });
|
|
16048
16102
|
PlatformService.decorators = [
|
|
16049
16103
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
16050
16104
|
];
|
|
@@ -16059,15 +16113,15 @@ PlatformService.ctorParameters = () => [
|
|
|
16059
16113
|
{ type: NetworkService },
|
|
16060
16114
|
{ type: AccountService },
|
|
16061
16115
|
{ type: ConfigService },
|
|
16062
|
-
{ type: CacheService
|
|
16116
|
+
{ type: CacheService },
|
|
16063
16117
|
{ type: Storage },
|
|
16064
16118
|
{ type: AudioProvider },
|
|
16065
16119
|
{ type: undefined, decorators: [{ type: Inject, args: [ENVIRONMENT,] }] },
|
|
16066
|
-
{ type: StatusBar
|
|
16120
|
+
{ type: StatusBar, decorators: [{ type: Optional }] },
|
|
16067
16121
|
{ type: Keyboard, decorators: [{ type: Optional }] },
|
|
16068
|
-
{ type: SplashScreen
|
|
16069
|
-
{ type: InAppBrowser
|
|
16070
|
-
{ type: Downloader
|
|
16122
|
+
{ type: SplashScreen, decorators: [{ type: Optional }] },
|
|
16123
|
+
{ type: InAppBrowser, decorators: [{ type: Optional }] },
|
|
16124
|
+
{ type: Downloader, decorators: [{ type: Optional }] }
|
|
16071
16125
|
];
|
|
16072
16126
|
|
|
16073
16127
|
class AppHelpModal {
|
|
@@ -16131,7 +16185,7 @@ class MatStepperI18n extends MatStepperIntl {
|
|
|
16131
16185
|
this.optionalLabel = this.translate.instant('COMMON.OPTIONAL');
|
|
16132
16186
|
}
|
|
16133
16187
|
}
|
|
16134
|
-
MatStepperI18n.ɵprov =
|
|
16188
|
+
MatStepperI18n.ɵprov = i0.ɵɵdefineInjectable({ factory: function MatStepperI18n_Factory() { return new MatStepperI18n(i0.ɵɵinject(i1$1.TranslateService)); }, token: MatStepperI18n, providedIn: "root" });
|
|
16135
16189
|
MatStepperI18n.decorators = [
|
|
16136
16190
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
16137
16191
|
];
|
|
@@ -17967,7 +18021,7 @@ function state2side(state) {
|
|
|
17967
18021
|
return 1;
|
|
17968
18022
|
}
|
|
17969
18023
|
}
|
|
17970
|
-
const ɵ0$
|
|
18024
|
+
const ɵ0$1 = (defaultStateSize) => [
|
|
17971
18025
|
Math.round((rgbArrayMap.red[0] - 50) / defaultStateSize),
|
|
17972
18026
|
Math.round((255 - rgbArrayMap.red[1]) / defaultStateSize),
|
|
17973
18027
|
Math.round((255 - rgbArrayMap.red[2]) / defaultStateSize)
|
|
@@ -17975,7 +18029,7 @@ const ɵ0$b = (defaultStateSize) => [
|
|
|
17975
18029
|
const SCALE_OPTIONS_DEFAULT = {
|
|
17976
18030
|
startColor: rgbArrayMap.red,
|
|
17977
18031
|
startStates: [0, 2, 3],
|
|
17978
|
-
startStepsFn: ɵ0$
|
|
18032
|
+
startStepsFn: ɵ0$1
|
|
17979
18033
|
};
|
|
17980
18034
|
/**
|
|
17981
18035
|
* Internal function, that create a colors scale, using iteration
|
|
@@ -18772,7 +18826,7 @@ class UserSettingsValidatorService extends AppValidatorService {
|
|
|
18772
18826
|
});
|
|
18773
18827
|
}
|
|
18774
18828
|
}
|
|
18775
|
-
UserSettingsValidatorService.ɵprov =
|
|
18829
|
+
UserSettingsValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function UserSettingsValidatorService_Factory() { return new UserSettingsValidatorService(i0.ɵɵinject(i1$6.FormBuilder)); }, token: UserSettingsValidatorService, providedIn: "root" });
|
|
18776
18830
|
UserSettingsValidatorService.decorators = [
|
|
18777
18831
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
18778
18832
|
];
|
|
@@ -18816,7 +18870,7 @@ class AccountValidatorService extends AppValidatorService {
|
|
|
18816
18870
|
return validatorFns.length ? Validators.compose(validatorFns) : validatorFns.length === 1 ? validatorFns[0] : undefined;
|
|
18817
18871
|
}
|
|
18818
18872
|
}
|
|
18819
|
-
AccountValidatorService.ɵprov =
|
|
18873
|
+
AccountValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function AccountValidatorService_Factory() { return new AccountValidatorService(i0.ɵɵinject(i1$6.FormBuilder), i0.ɵɵinject(AccountService)); }, token: AccountValidatorService, providedIn: "root" });
|
|
18820
18874
|
AccountValidatorService.decorators = [
|
|
18821
18875
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
18822
18876
|
];
|
|
@@ -19381,7 +19435,7 @@ class LocalSettingsValidatorService extends AppValidatorService {
|
|
|
19381
19435
|
});
|
|
19382
19436
|
}
|
|
19383
19437
|
}
|
|
19384
|
-
LocalSettingsValidatorService.ɵprov =
|
|
19438
|
+
LocalSettingsValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function LocalSettingsValidatorService_Factory() { return new LocalSettingsValidatorService(i0.ɵɵinject(i1$6.FormBuilder), i0.ɵɵinject(NetworkService)); }, token: LocalSettingsValidatorService, providedIn: "root" });
|
|
19385
19439
|
LocalSettingsValidatorService.decorators = [
|
|
19386
19440
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
19387
19441
|
];
|
|
@@ -20000,7 +20054,7 @@ class IsOnFieldModePipe {
|
|
|
20000
20054
|
return value === 'FIELD';
|
|
20001
20055
|
}
|
|
20002
20056
|
}
|
|
20003
|
-
IsOnFieldModePipe.ɵprov =
|
|
20057
|
+
IsOnFieldModePipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsOnFieldModePipe_Factory() { return new IsOnFieldModePipe(); }, token: IsOnFieldModePipe, providedIn: "root" });
|
|
20004
20058
|
IsOnFieldModePipe.decorators = [
|
|
20005
20059
|
{ type: Pipe, args: [{
|
|
20006
20060
|
name: 'isOnField'
|
|
@@ -20012,7 +20066,7 @@ class IsNotOnFieldModePipe {
|
|
|
20012
20066
|
return value !== 'FIELD';
|
|
20013
20067
|
}
|
|
20014
20068
|
}
|
|
20015
|
-
IsNotOnFieldModePipe.ɵprov =
|
|
20069
|
+
IsNotOnFieldModePipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsNotOnFieldModePipe_Factory() { return new IsNotOnFieldModePipe(); }, token: IsNotOnFieldModePipe, providedIn: "root" });
|
|
20016
20070
|
IsNotOnFieldModePipe.decorators = [
|
|
20017
20071
|
{ type: Pipe, args: [{
|
|
20018
20072
|
name: 'isNotOnField'
|
|
@@ -20027,7 +20081,7 @@ class PersonToStringPipe {
|
|
|
20027
20081
|
return PersonUtils.personToString(value);
|
|
20028
20082
|
}
|
|
20029
20083
|
}
|
|
20030
|
-
PersonToStringPipe.ɵprov =
|
|
20084
|
+
PersonToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function PersonToStringPipe_Factory() { return new PersonToStringPipe(); }, token: PersonToStringPipe, providedIn: "root" });
|
|
20031
20085
|
PersonToStringPipe.decorators = [
|
|
20032
20086
|
{ type: Pipe, args: [{
|
|
20033
20087
|
name: 'personToString'
|
|
@@ -20412,7 +20466,7 @@ class IsLoginAccountPipe {
|
|
|
20412
20466
|
return value && value.pubkey && true;
|
|
20413
20467
|
}
|
|
20414
20468
|
}
|
|
20415
|
-
IsLoginAccountPipe.ɵprov =
|
|
20469
|
+
IsLoginAccountPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function IsLoginAccountPipe_Factory() { return new IsLoginAccountPipe(); }, token: IsLoginAccountPipe, providedIn: "root" });
|
|
20416
20470
|
IsLoginAccountPipe.decorators = [
|
|
20417
20471
|
{ type: Pipe, args: [{
|
|
20418
20472
|
name: 'isLogin'
|
|
@@ -20424,7 +20478,7 @@ class AccountToStringPipe {
|
|
|
20424
20478
|
return accountToString(value);
|
|
20425
20479
|
}
|
|
20426
20480
|
}
|
|
20427
|
-
AccountToStringPipe.ɵprov =
|
|
20481
|
+
AccountToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function AccountToStringPipe_Factory() { return new AccountToStringPipe(); }, token: AccountToStringPipe, providedIn: "root" });
|
|
20428
20482
|
AccountToStringPipe.decorators = [
|
|
20429
20483
|
{ type: Pipe, args: [{
|
|
20430
20484
|
name: 'accountToString'
|
|
@@ -20439,7 +20493,7 @@ class DepartmentToStringPipe {
|
|
|
20439
20493
|
return departmentToString(value);
|
|
20440
20494
|
}
|
|
20441
20495
|
}
|
|
20442
|
-
DepartmentToStringPipe.ɵprov =
|
|
20496
|
+
DepartmentToStringPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function DepartmentToStringPipe_Factory() { return new DepartmentToStringPipe(); }, token: DepartmentToStringPipe, providedIn: "root" });
|
|
20443
20497
|
DepartmentToStringPipe.decorators = [
|
|
20444
20498
|
{ type: Pipe, args: [{
|
|
20445
20499
|
name: 'departmentToString'
|
|
@@ -20535,7 +20589,7 @@ class MenuService {
|
|
|
20535
20589
|
this._visibleSubject.next(value);
|
|
20536
20590
|
}
|
|
20537
20591
|
}
|
|
20538
|
-
MenuService.ɵprov =
|
|
20592
|
+
MenuService.ɵprov = i0.ɵɵdefineInjectable({ factory: function MenuService_Factory() { return new MenuService(); }, token: MenuService, providedIn: "root" });
|
|
20539
20593
|
MenuService.decorators = [
|
|
20540
20594
|
{ type: Injectable, args: [{
|
|
20541
20595
|
providedIn: 'root'
|
|
@@ -20991,7 +21045,7 @@ class AuthGuardService {
|
|
|
20991
21045
|
}));
|
|
20992
21046
|
}
|
|
20993
21047
|
}
|
|
20994
|
-
AuthGuardService.ɵprov =
|
|
21048
|
+
AuthGuardService.ɵprov = i0.ɵɵdefineInjectable({ factory: function AuthGuardService_Factory() { return new AuthGuardService(i0.ɵɵinject(AccountService), i0.ɵɵinject(i1$4.ModalController), i0.ɵɵinject(i3$3.Router), i0.ɵɵinject(ENVIRONMENT)); }, token: AuthGuardService, providedIn: "root" });
|
|
20995
21049
|
AuthGuardService.decorators = [
|
|
20996
21050
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
20997
21051
|
];
|
|
@@ -21033,7 +21087,7 @@ class BaseEntityService extends BaseGraphqlService {
|
|
|
21033
21087
|
query,
|
|
21034
21088
|
variables: { id },
|
|
21035
21089
|
fetchPolicy: opts && opts.fetchPolicy || undefined,
|
|
21036
|
-
error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' }
|
|
21090
|
+
error: { code: ErrorCodes$2.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' }
|
|
21037
21091
|
})
|
|
21038
21092
|
.pipe(map(({ data }) => (!opts || opts.toEntity !== false)
|
|
21039
21093
|
? (data && this.fromObject(data))
|
|
@@ -21048,7 +21102,7 @@ class BaseEntityService extends BaseGraphqlService {
|
|
|
21048
21102
|
query,
|
|
21049
21103
|
variables: { id },
|
|
21050
21104
|
fetchPolicy: opts && opts.fetchPolicy || undefined,
|
|
21051
|
-
error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' }
|
|
21105
|
+
error: { code: ErrorCodes$2.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' }
|
|
21052
21106
|
});
|
|
21053
21107
|
// Convert to entity
|
|
21054
21108
|
return (!opts || opts.toEntity !== false)
|
|
@@ -21079,7 +21133,7 @@ class BaseEntityService extends BaseGraphqlService {
|
|
|
21079
21133
|
totalFieldName: withTotal ? 'total' : undefined,
|
|
21080
21134
|
insertFilterFn: filter && filter.asFilterFn(),
|
|
21081
21135
|
variables,
|
|
21082
|
-
error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' },
|
|
21136
|
+
error: { code: ErrorCodes$2.LOAD_DATA_ERROR, message: 'REFERENTIAL.ERROR.LOAD_DATA_ERROR' },
|
|
21083
21137
|
fetchPolicy: opts && opts.fetchPolicy || undefined
|
|
21084
21138
|
})
|
|
21085
21139
|
.pipe(map(({ data, total }) => {
|
|
@@ -21115,7 +21169,7 @@ class BaseEntityService extends BaseGraphqlService {
|
|
|
21115
21169
|
const { data, total } = yield this.graphql.query({
|
|
21116
21170
|
query,
|
|
21117
21171
|
variables,
|
|
21118
|
-
error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'ERROR.LOAD_DATA_ERROR' },
|
|
21172
|
+
error: { code: ErrorCodes$2.LOAD_DATA_ERROR, message: 'ERROR.LOAD_DATA_ERROR' },
|
|
21119
21173
|
fetchPolicy: opts && opts.fetchPolicy || 'network-only'
|
|
21120
21174
|
});
|
|
21121
21175
|
const entities = (!opts || opts.toEntity !== false) ?
|
|
@@ -21154,7 +21208,7 @@ class BaseEntityService extends BaseGraphqlService {
|
|
|
21154
21208
|
variables: {
|
|
21155
21209
|
filter: filter && filter.asPodObject()
|
|
21156
21210
|
},
|
|
21157
|
-
error: { code: ErrorCodes.LOAD_DATA_ERROR, message: 'ERROR.COUNT_DATA_ERROR' },
|
|
21211
|
+
error: { code: ErrorCodes$2.LOAD_DATA_ERROR, message: 'ERROR.COUNT_DATA_ERROR' },
|
|
21158
21212
|
fetchPolicy: opts && opts.fetchPolicy || 'network-only'
|
|
21159
21213
|
});
|
|
21160
21214
|
return res.total;
|
|
@@ -21190,7 +21244,7 @@ class BaseEntityService extends BaseGraphqlService {
|
|
|
21190
21244
|
variables: {
|
|
21191
21245
|
data: json
|
|
21192
21246
|
},
|
|
21193
|
-
error: { code: ErrorCodes.SAVE_DATA_ERROR, message: 'ERROR.SAVE_DATA_ERROR' },
|
|
21247
|
+
error: { code: ErrorCodes$2.SAVE_DATA_ERROR, message: 'ERROR.SAVE_DATA_ERROR' },
|
|
21194
21248
|
update: (proxy, { data }) => {
|
|
21195
21249
|
const savedEntities = data && data.data;
|
|
21196
21250
|
if (savedEntities) {
|
|
@@ -21246,7 +21300,7 @@ class BaseEntityService extends BaseGraphqlService {
|
|
|
21246
21300
|
variables: {
|
|
21247
21301
|
data: json
|
|
21248
21302
|
},
|
|
21249
|
-
error: { code: ErrorCodes.SAVE_DATA_ERROR, message: 'ERROR.SAVE_DATA_ERROR' },
|
|
21303
|
+
error: { code: ErrorCodes$2.SAVE_DATA_ERROR, message: 'ERROR.SAVE_DATA_ERROR' },
|
|
21250
21304
|
update: (cache, { data }) => {
|
|
21251
21305
|
// Update entity
|
|
21252
21306
|
const savedEntity = data && data.data;
|
|
@@ -21294,7 +21348,7 @@ class BaseEntityService extends BaseGraphqlService {
|
|
|
21294
21348
|
refetchQueries: this.getRefetchQueriesForMutation(opts),
|
|
21295
21349
|
awaitRefetchQueries: opts && opts.awaitRefetchQueries,
|
|
21296
21350
|
variables: { ids },
|
|
21297
|
-
error: { code: ErrorCodes.DELETE_DATA_ERROR, message: 'ERROR.DELETE_DATA_ERROR' },
|
|
21351
|
+
error: { code: ErrorCodes$2.DELETE_DATA_ERROR, message: 'ERROR.DELETE_DATA_ERROR' },
|
|
21298
21352
|
update: (cache, res) => {
|
|
21299
21353
|
// Remove from cache
|
|
21300
21354
|
if (this.watchQueriesUpdatePolicy === 'update-cache') {
|
|
@@ -21335,7 +21389,7 @@ class BaseEntityService extends BaseGraphqlService {
|
|
|
21335
21389
|
refetchQueries: this.getRefetchQueriesForMutation(opts),
|
|
21336
21390
|
awaitRefetchQueries: opts && opts.awaitRefetchQueries,
|
|
21337
21391
|
variables: { id },
|
|
21338
|
-
error: { code: ErrorCodes.DELETE_DATA_ERROR, message: 'ERROR.DELETE_DATA_ERROR' },
|
|
21392
|
+
error: { code: ErrorCodes$2.DELETE_DATA_ERROR, message: 'ERROR.DELETE_DATA_ERROR' },
|
|
21339
21393
|
update: (proxy, res) => {
|
|
21340
21394
|
// Remove from cache
|
|
21341
21395
|
if (this.watchQueriesUpdatePolicy === 'update-cache') {
|
|
@@ -21371,7 +21425,7 @@ class BaseEntityService extends BaseGraphqlService {
|
|
|
21371
21425
|
fetchPolicy: opts && opts.fetchPolicy || 'no-cache',
|
|
21372
21426
|
variables,
|
|
21373
21427
|
error: {
|
|
21374
|
-
code: ErrorCodes.SUBSCRIBE_DATA_ERROR,
|
|
21428
|
+
code: ErrorCodes$2.SUBSCRIBE_DATA_ERROR,
|
|
21375
21429
|
message: 'ERROR.SUBSCRIBE_DATA_ERROR'
|
|
21376
21430
|
}
|
|
21377
21431
|
})
|
|
@@ -21557,7 +21611,7 @@ class EntitiesTableDataSource extends TableDataSource {
|
|
|
21557
21611
|
if (this._debug)
|
|
21558
21612
|
invalidRows.forEach(row => AppTableUtils.logRowErrors(row, `[table-datasource] ${this._logTypeName} row #${row.id}`));
|
|
21559
21613
|
// Stop with an error
|
|
21560
|
-
throw { code: ErrorCodes.TABLE_INVALID_ROW_ERROR, message: 'ERROR.TABLE_INVALID_ROW_ERROR' };
|
|
21614
|
+
throw { code: ErrorCodes$2.TABLE_INVALID_ROW_ERROR, message: 'ERROR.TABLE_INVALID_ROW_ERROR' };
|
|
21561
21615
|
}
|
|
21562
21616
|
this._editingRowCount = 0;
|
|
21563
21617
|
let data;
|
|
@@ -22428,14 +22482,14 @@ class AppTable {
|
|
|
22428
22482
|
return __awaiter(this, void 0, void 0, function* () {
|
|
22429
22483
|
opts = Object.assign({ keepEditing: this.keepEditedRowOnSave }, opts);
|
|
22430
22484
|
if (this.readOnly) {
|
|
22431
|
-
throw { code: ErrorCodes.TABLE_READ_ONLY, message: 'ERROR.TABLE_READ_ONLY' };
|
|
22485
|
+
throw { code: ErrorCodes$2.TABLE_READ_ONLY, message: 'ERROR.TABLE_READ_ONLY' };
|
|
22432
22486
|
}
|
|
22433
22487
|
this.resetError();
|
|
22434
22488
|
// Keep edited row id (should be done BEFORE confirmEditCreate() )
|
|
22435
22489
|
this.previouslyEditedRowId = opts.keepEditing ? ((((_a = this.editedRow) === null || _a === void 0 ? void 0 : _a.editing) ? this.editedRow.id : undefined) || ((_b = this.singleSelectedRow) === null || _b === void 0 ? void 0 : _b.id)) : undefined;
|
|
22436
22490
|
const previouslyEditedData = opts.keepEditing ? (isNotNil(this.previouslyEditedRowId) && ((_c = this.editedRow) === null || _c === void 0 ? void 0 : _c.currentData) || ((_d = this.singleSelectedRow) === null || _d === void 0 ? void 0 : _d.currentData)) : undefined;
|
|
22437
22491
|
if (!this.confirmEditCreate()) {
|
|
22438
|
-
throw { code: ErrorCodes.TABLE_INVALID_ROW_ERROR, message: 'ERROR.TABLE_INVALID_ROW_ERROR' };
|
|
22492
|
+
throw { code: ErrorCodes$2.TABLE_INVALID_ROW_ERROR, message: 'ERROR.TABLE_INVALID_ROW_ERROR' };
|
|
22439
22493
|
}
|
|
22440
22494
|
// Mark as saving
|
|
22441
22495
|
this.markAsSaving();
|
|
@@ -22554,7 +22608,7 @@ class AppTable {
|
|
|
22554
22608
|
var _a;
|
|
22555
22609
|
return __awaiter(this, void 0, void 0, function* () {
|
|
22556
22610
|
if (this.readOnly) {
|
|
22557
|
-
throw { code: ErrorCodes.TABLE_READ_ONLY, message: 'ERROR.TABLE_READ_ONLY' };
|
|
22611
|
+
throw { code: ErrorCodes$2.TABLE_READ_ONLY, message: 'ERROR.TABLE_READ_ONLY' };
|
|
22558
22612
|
}
|
|
22559
22613
|
if (event === null || event === void 0 ? void 0 : event.defaultPrevented)
|
|
22560
22614
|
return 0; // SKip
|
|
@@ -24134,7 +24188,7 @@ class AppEntityEditor extends AppTabEditor {
|
|
|
24134
24188
|
try {
|
|
24135
24189
|
const data = yield this.dataService.load(id, opts);
|
|
24136
24190
|
if (!data)
|
|
24137
|
-
throw { code: ErrorCodes.DATA_NOT_FOUND_ERROR, message: 'ERROR.DATA_NO_FOUND' };
|
|
24191
|
+
throw { code: ErrorCodes$2.DATA_NOT_FOUND_ERROR, message: 'ERROR.DATA_NO_FOUND' };
|
|
24138
24192
|
this._usageMode = this.computeUsageMode(data);
|
|
24139
24193
|
yield this.onEntityLoaded(data, opts);
|
|
24140
24194
|
yield this.updateView(data, opts);
|
|
@@ -25086,7 +25140,7 @@ class UserEventService extends BaseGraphqlService {
|
|
|
25086
25140
|
EntityUtils.copyIdAndUpdateDate(source, target);
|
|
25087
25141
|
}
|
|
25088
25142
|
}
|
|
25089
|
-
UserEventService.ɵprov =
|
|
25143
|
+
UserEventService.ɵprov = i0.ɵɵdefineInjectable({ factory: function UserEventService_Factory() { return new UserEventService(i0.ɵɵinject(GraphqlService), i0.ɵɵinject(AccountService), i0.ɵɵinject(NetworkService), i0.ɵɵinject(i1$1.TranslateService), i0.ɵɵinject(i1$4.ToastController), i0.ɵɵinject(ENVIRONMENT)); }, token: UserEventService, providedIn: "root" });
|
|
25090
25144
|
UserEventService.decorators = [
|
|
25091
25145
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
25092
25146
|
];
|
|
@@ -25467,7 +25521,7 @@ class PersonService extends BaseEntityService {
|
|
|
25467
25521
|
return target;
|
|
25468
25522
|
}
|
|
25469
25523
|
}
|
|
25470
|
-
PersonService.ɵprov =
|
|
25524
|
+
PersonService.ɵprov = i0.ɵɵdefineInjectable({ factory: function PersonService_Factory() { return new PersonService(i0.ɵɵinject(GraphqlService), i0.ɵɵinject(PlatformService), i0.ɵɵinject(NetworkService), i0.ɵɵinject(EntitiesStorage)); }, token: PersonService, providedIn: "root" });
|
|
25471
25525
|
PersonService.decorators = [
|
|
25472
25526
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
25473
25527
|
];
|
|
@@ -25498,7 +25552,7 @@ class PersonValidatorService {
|
|
|
25498
25552
|
return this.formBuilder.group(formConfig);
|
|
25499
25553
|
}
|
|
25500
25554
|
}
|
|
25501
|
-
PersonValidatorService.ɵprov =
|
|
25555
|
+
PersonValidatorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function PersonValidatorService_Factory() { return new PersonValidatorService(i0.ɵɵinject(i1$6.FormBuilder), i0.ɵɵinject(AccountValidatorService)); }, token: PersonValidatorService, providedIn: "root" });
|
|
25502
25556
|
PersonValidatorService.decorators = [
|
|
25503
25557
|
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
25504
25558
|
];
|
|
@@ -25692,16 +25746,16 @@ AdminModule.decorators = [
|
|
|
25692
25746
|
];
|
|
25693
25747
|
AdminModule.ctorParameters = () => [];
|
|
25694
25748
|
|
|
25695
|
-
const ɵ0
|
|
25749
|
+
const ɵ0 = {
|
|
25696
25750
|
profile: 'ADMIN'
|
|
25697
25751
|
};
|
|
25698
|
-
const routes = [
|
|
25752
|
+
const routes$5 = [
|
|
25699
25753
|
{
|
|
25700
25754
|
path: 'users',
|
|
25701
25755
|
pathMatch: 'full',
|
|
25702
25756
|
component: UsersPage,
|
|
25703
25757
|
canActivate: [AuthGuardService],
|
|
25704
|
-
data: ɵ0
|
|
25758
|
+
data: ɵ0
|
|
25705
25759
|
}
|
|
25706
25760
|
];
|
|
25707
25761
|
class AdminRoutingModule {
|
|
@@ -25711,33 +25765,33 @@ AdminRoutingModule.decorators = [
|
|
|
25711
25765
|
imports: [
|
|
25712
25766
|
SharedRoutingModule,
|
|
25713
25767
|
AdminModule,
|
|
25714
|
-
RouterModule.forChild(routes)
|
|
25768
|
+
RouterModule.forChild(routes$5)
|
|
25715
25769
|
],
|
|
25716
25770
|
exports: [RouterModule]
|
|
25717
25771
|
},] }
|
|
25718
25772
|
];
|
|
25719
25773
|
|
|
25720
|
-
const ErrorCodes
|
|
25774
|
+
const ErrorCodes = {
|
|
25721
25775
|
LOAD_PERSONS_ERROR: 100,
|
|
25722
25776
|
SAVE_PERSONS_ERROR: 101,
|
|
25723
25777
|
DELETE_PERSONS_ERROR: 102,
|
|
25724
25778
|
};
|
|
25725
25779
|
|
|
25726
|
-
class EntityTestClass {
|
|
25780
|
+
class EntityTestClass$1 {
|
|
25727
25781
|
}
|
|
25728
|
-
const FAKE_ENTITIES = [
|
|
25782
|
+
const FAKE_ENTITIES$1 = [
|
|
25729
25783
|
{ id: 1, label: 'AAA', name: 'Item A', description: 'Very long description A', comments: 'Very very long comments... again for A' },
|
|
25730
25784
|
{ id: 2, label: 'BBB', name: 'Item B', description: 'Very long description B', comments: 'Very very long comments... again for B' },
|
|
25731
25785
|
{ id: 3, label: 'CCC', name: 'Item C', description: 'Very long description C', comments: 'Very very long comments... again for C' }
|
|
25732
25786
|
];
|
|
25733
|
-
function deepCopy(values, size) {
|
|
25787
|
+
function deepCopy$1(values, size) {
|
|
25734
25788
|
if (isNil(size)) {
|
|
25735
|
-
return (values || FAKE_ENTITIES).map(entity => Object.assign({}, entity));
|
|
25789
|
+
return (values || FAKE_ENTITIES$1).map(entity => Object.assign({}, entity));
|
|
25736
25790
|
}
|
|
25737
25791
|
let result = [];
|
|
25738
25792
|
let i = 1;
|
|
25739
25793
|
while (result.length < size) {
|
|
25740
|
-
result = result.concat((values || FAKE_ENTITIES).map(entity => {
|
|
25794
|
+
result = result.concat((values || FAKE_ENTITIES$1).map(entity => {
|
|
25741
25795
|
const name = entity.name + ' #' + i;
|
|
25742
25796
|
return Object.assign(Object.assign({}, entity), { id: i++, name });
|
|
25743
25797
|
}));
|
|
@@ -25747,7 +25801,7 @@ function deepCopy(values, size) {
|
|
|
25747
25801
|
class AutocompleteTestPage {
|
|
25748
25802
|
constructor(formBuilder) {
|
|
25749
25803
|
this.formBuilder = formBuilder;
|
|
25750
|
-
this._items = deepCopy(FAKE_ENTITIES, 100);
|
|
25804
|
+
this._items = deepCopy$1(FAKE_ENTITIES$1, 100);
|
|
25751
25805
|
this._$items = new BehaviorSubject(undefined);
|
|
25752
25806
|
this.autocompleteFields = new MatAutocompleteConfigHolder();
|
|
25753
25807
|
this.memoryHide = false;
|
|
@@ -25758,6 +25812,7 @@ class AutocompleteTestPage {
|
|
|
25758
25812
|
entity: [null, SharedValidators.entity],
|
|
25759
25813
|
missingEntity: [null, SharedValidators.entity],
|
|
25760
25814
|
disableEntity: [null, SharedValidators.entity],
|
|
25815
|
+
entities: [null, SharedFormArrayValidators.requiredArrayMinLength(1)],
|
|
25761
25816
|
});
|
|
25762
25817
|
this.form.get('disableEntity').disable();
|
|
25763
25818
|
}
|
|
@@ -25791,22 +25846,32 @@ class AutocompleteTestPage {
|
|
|
25791
25846
|
});
|
|
25792
25847
|
// From items
|
|
25793
25848
|
this.autocompleteFields.add('entity-items-large', {
|
|
25794
|
-
items: FAKE_ENTITIES.slice(),
|
|
25849
|
+
items: FAKE_ENTITIES$1.slice(),
|
|
25795
25850
|
attributes: ['label', 'name', 'description', 'comments'],
|
|
25796
25851
|
displayWith: this.entityToString
|
|
25797
25852
|
});
|
|
25853
|
+
// For mutliple value
|
|
25854
|
+
this.autocompleteFields.add('entities-items-filter', {
|
|
25855
|
+
service: {
|
|
25856
|
+
suggest: (value, filter) => this.suggest(value, filter)
|
|
25857
|
+
},
|
|
25858
|
+
attributes: ['label', 'name'],
|
|
25859
|
+
multiple: true
|
|
25860
|
+
//displayWith: this.entitiesToString
|
|
25861
|
+
});
|
|
25798
25862
|
this.loadData();
|
|
25799
25863
|
}
|
|
25800
25864
|
// Load the form with data
|
|
25801
25865
|
loadData() {
|
|
25802
25866
|
return __awaiter(this, void 0, void 0, function* () {
|
|
25803
25867
|
const data = {
|
|
25804
|
-
entity: deepCopy(FAKE_ENTITIES)[0],
|
|
25868
|
+
entity: deepCopy$1(FAKE_ENTITIES$1)[0],
|
|
25805
25869
|
// This item is NOT in the items list => i should be displayed anyway
|
|
25806
25870
|
missingEntity: {
|
|
25807
25871
|
id: -1, label: '??', name: 'Missing item'
|
|
25808
25872
|
},
|
|
25809
|
-
disableEntity: deepCopy(FAKE_ENTITIES)[2]
|
|
25873
|
+
disableEntity: deepCopy$1(FAKE_ENTITIES$1)[2],
|
|
25874
|
+
entities: deepCopy$1(FAKE_ENTITIES$1)
|
|
25810
25875
|
};
|
|
25811
25876
|
this.form.setValue(data);
|
|
25812
25877
|
// Load observables
|
|
@@ -25821,6 +25886,9 @@ class AutocompleteTestPage {
|
|
|
25821
25886
|
entityToString(item) {
|
|
25822
25887
|
return [item && item.label || undefined, item && item.name || undefined].filter(isNotNil).join(' - ');
|
|
25823
25888
|
}
|
|
25889
|
+
entitiesToString(items) {
|
|
25890
|
+
return (items || []).map(this.entityToString).join(', ');
|
|
25891
|
+
}
|
|
25824
25892
|
suggest(value, filter) {
|
|
25825
25893
|
return __awaiter(this, void 0, void 0, function* () {
|
|
25826
25894
|
filter = Object.assign({ offset: 0, size: 30 }, filter);
|
|
@@ -25864,9 +25932,10 @@ class AutocompleteTestPage {
|
|
|
25864
25932
|
this.memoryTimer = null;
|
|
25865
25933
|
this.memoryHide = false;
|
|
25866
25934
|
}
|
|
25867
|
-
updateFilter(fieldName) {
|
|
25935
|
+
updateFilter(autocompleteField, fieldName) {
|
|
25868
25936
|
const filter = this.autocompleteFields.get(fieldName).filter || {};
|
|
25869
25937
|
filter.searchAttribute = (!filter || filter.searchAttribute !== 'name') ? 'name' : 'label';
|
|
25938
|
+
autocompleteField.reloadItems();
|
|
25870
25939
|
}
|
|
25871
25940
|
/* -- protected methods -- */
|
|
25872
25941
|
stringify(value) {
|
|
@@ -25876,7 +25945,7 @@ class AutocompleteTestPage {
|
|
|
25876
25945
|
AutocompleteTestPage.decorators = [
|
|
25877
25946
|
{ type: Component, args: [{
|
|
25878
25947
|
selector: 'app-autocomplete-test',
|
|
25879
|
-
template: "<ion-header>\n <ion-toolbar color=\"primary\">\n\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Autocomplete field test page</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content>\n\n <!-- Tab nav - mobile/desktop mode -->\n <nav mat-tab-nav-bar>\n <a mat-tab-link\n [active]=\"mode==='mobile'\"\n (click)=\"toggleMode('mobile')\">\n <mat-label>Mobile</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode==='desktop'\"\n (click)=\"toggleMode('desktop')\">\n <mat-label>Desktop</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode==='memory'\"\n (click)=\"toggleMode('memory')\">\n <mat-label>Memory leak debug</mat-label>\n </a>\n <a mat-tab-link\n [active]=\"mode==='temp'\"\n (click)=\"toggleMode('temp')\">\n <mat-label>Temporary</mat-label>\n </a>\n </nav>\n\n <form class=\"form-container\" [formGroup]=\"form\" (ngSubmit)=\"doSubmit($event)\">\n\n <!--<ion-grid *ngIf=\"mode === 'temp'\">\n <ion-row>\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n Items is an Observable\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>items: Observable<any[]></pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [logPrefix]=\"'[combo-desktop-2]'\"\n [compareWith]=\"compareWithFn\"\n [mobile]=\"false\"\n ></mat-autocomplete-field>\n </ion-card-content>\n\n </ion-card>\n </ion-col>\n </ion-row>\n\n\n </ion-grid>-->\n\n\n <ion-grid *ngIf=\"mode === 'memory'\">\n\n <!-- debugging memory leak -->\n <ion-row>\n <ion-col>\n <ion-text><h4>Debug memory leak</h4></ion-text>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col size=\"2\">\n <mat-form-field floatLabel=\"always\">\n <input matInput type=\"text\" hidden placeholder=\"Items type\">\n <mat-select (selectionChange)=\"memoryAutocompleteFieldName=$event.value\" [value]=\"memoryAutocompleteFieldName\">\n <mat-option value=\"entity-$items\">Observable</mat-option>\n <mat-option value=\"entity-suggestFn\">Suggest function</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n <ion-col size=\"1\" class=\"ion-no-padding\">\n <mat-form-field floatLabel=\"always\">\n <input matInput type=\"text\" hidden placeholder=\"Mobile ?\">\n <mat-checkbox (change)=\"memoryMobile=$event.checked\" [checked]=\"memoryMobile\">\n </mat-checkbox>\n </mat-form-field>\n </ion-col>\n\n <ion-col size=\"2\">\n <ion-button *ngIf=\"!memoryTimer\" (click)=\"startMemoryTimer()\" color=\"tertiary\">Start</ion-button>\n <ion-button *ngIf=\"memoryTimer\" (click)=\"stopMemoryTimer()\" color=\"tertiary\">Stop</ion-button>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col>\n <mat-autocomplete-field formControlName=\"entity\"\n *ngIf=\"!memoryHide && memoryAutocompleteFieldName\"\n [config]=\"autocompleteFields.get(memoryAutocompleteFieldName)\"\n [mobile]=\"memoryMobile\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-memory-leak]'\">\n </mat-autocomplete-field>\n </ion-col>\n </ion-row>\n\n </ion-grid>\n\n <!-- Mobile mode -->\n <ion-grid *ngIf=\"mode === 'mobile'\">\n\n <ion-row>\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Suggest() function\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>mobile: true, suggestFn: (searchText, filter) => any[]</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-suggestFn')\"\n [mobile]=\"true\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-mobile-1]'\"\n [required]=\"true\"\n placeholder=\"Suggest field\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Items is an Observable\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>mobile: true, items: Observable<any[]></pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"true\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-mobile-observable]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Control value if missing in items\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>mobile: true, items: Observable<any[]></pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"missingEntity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"true\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-mobile-2]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Disabled control\n </ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"disableEntity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"true\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-mobile-2]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n </ion-row>\n\n <ion-row>\n <ion-col size=\"9\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Change filter\n </ion-label>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre></pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <ion-button (click)=\"updateFilter('entity-items-filter')\">Filter on: {{autocompleteFields.get('entity-items-filter').filter?.searchAttribute }}</ion-button>\n </ion-col>\n <ion-col>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-filter')\"\n [mobile]=\"true\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-mobile-filter]'\"\n ></mat-autocomplete-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"3\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Large combo\n </ion-label>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>class=\"min-width-large\"</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-large')\"\n [mobile]=\"true\"\n class=\"min-width-large\"\n panelWidth=\"400px\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-mobile-large]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col size=\"6\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n Readonly toggle\n </ion-text>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <ion-grid>\n <ion-row>\n <ion-col size=\"3\">\n <mat-checkbox (change)=\"readonlyField.readonly=$event.checked\" [checked]=\"readonlyField.readonly\">\n Readonly ?\n </mat-checkbox>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col>\n <mat-autocomplete-field #readonlyField formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items')\"\n [placeholder]=\"'Entity'\"\n [mobile]=\"true\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-mobile-readonly]'\"\n [readonly]=\"true\"\n [clearable]=\"!readonlyField.readonly\">\n </mat-autocomplete-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n <!-- Desktop mode -->\n <ion-grid *ngIf=\"mode === 'desktop'\">\n <ion-row>\n <ion-col>\n <ion-text><h4>Desktop mode</h4></ion-text>\n </ion-col>\n </ion-row>\n <ion-row>\n\n\n <ion-col size=\"6\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n items from suggest function\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>suggest: (value, filter) => LoadResult<any></pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-filter')\"\n [placeholder]=\"'Entity'\"\n [mobile]=\"false\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-desktop-suggest]'\">\n </mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"6\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n search with a suggestLengthThreshold\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>suggest: (value, filter) => LoadResult<any>\nsuggestLengthThreshold: '3'</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-filter')\"\n [placeholder]=\"'Entity'\"\n [mobile]=\"false\"\n [equals]=\"equals\"\n suggestLengthThreshold=\"3\"\n [logPrefix]=\"'[combo-desktop-suggest]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"6\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n Items is an array\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>items: [], value: {{stringify(form.controls.entity.value)}}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items')\"\n [logPrefix]=\"'[combo-desktop-array-1]'\"\n [equals]=\"equals\"\n [mobile]=\"false\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n Items is an Observable\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>items: Observable<any[]></pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [logPrefix]=\"'[combo-desktop-2]'\"\n [equals]=\"equals\"\n [mobile]=\"false\"\n ></mat-autocomplete-field>\n </ion-card-content>\n\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Control value if missing in items\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>items: Observable<any[]></pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"missingEntity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-desktop-missing]'\"\n [mobile]=\"false\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Full size panel\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>class: 'mat-autocomplete-panel-full-size'</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"false\"\n [class]=\"'mat-autocomplete-panel-full-size'\"\n [matAutocompletePosition]=\"'above'\"\n [logPrefix]=\"'[combo-desktop-full-size]'\"\n [debug]=\"true\"\n [showAllOnFocus]=\"true\"\n [showPanelOnFocus]=\"true\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Disabled control\n </ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"disableEntity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"false\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-desktop-disable]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Readonly control\n </ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"false\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-desktop-readonly]'\"\n [readonly]=\"true\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size=\"9\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Full size combo\n </ion-label>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>class=\"mat-autocomplete-panel-full-size\"</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-large')\"\n [mobile]=\"false\"\n class=\"mat-autocomplete-panel-full-size\"\n panelWidth=\"100vw\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-desktop-full-size]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"3\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Large combo\n </ion-label>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>panelWidth: string</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-large')\"\n [mobile]=\"false\"\n panelWidth=\"400px\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-desktop-large]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"6\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n Readonly toggle\n </ion-text>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <ion-grid>\n <ion-row>\n <ion-col size=\"3\">\n <mat-checkbox (change)=\"readonlyField.readonly=$event.checked\" [checked]=\"readonlyField.readonly\">\n Readonly ?\n </mat-checkbox>\n </ion-col>\n <ion-col size=\"3\">\n <mat-checkbox #showIcons [checked]=\"false\">\n Icons ?\n </mat-checkbox>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col>\n <mat-autocomplete-field #readonlyField formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-filter')\"\n [placeholder]=\"'Entity'\"\n [mobile]=\"false\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-desktop-readonly]'\"\n [readonly]=\"true\"\n [clearable]=\"!readonlyField.readonly\">\n <mat-icon matPrefix *ngIf=\"showIcons.checked\">keyboard_arrow_right</mat-icon>\n <mat-icon matSuffix *ngIf=\"showIcons.checked\">keyboard_arrow_left</mat-icon>\n </mat-autocomplete-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n\n </ion-grid>\n\n </form>\n\n</ion-content>\n"
|
|
25948
|
+
template: "<ion-header>\n <ion-toolbar color=\"primary\">\n\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Autocomplete field test page</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content>\n\n <!-- Tab nav - mobile/desktop mode -->\n <nav mat-tab-nav-bar>\n <a mat-tab-link\n [active]=\"mode==='mobile'\"\n (click)=\"toggleMode('mobile')\">\n <mat-label>Mobile</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode==='desktop'\"\n (click)=\"toggleMode('desktop')\">\n <mat-label>Desktop</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode==='memory'\"\n (click)=\"toggleMode('memory')\">\n <mat-label>Memory leak debug</mat-label>\n </a>\n <a mat-tab-link\n [active]=\"mode==='temp'\"\n (click)=\"toggleMode('temp')\">\n <mat-label>Temporary</mat-label>\n </a>\n </nav>\n\n <form class=\"form-container\" [formGroup]=\"form\" (ngSubmit)=\"doSubmit($event)\">\n\n <!--<ion-grid *ngIf=\"mode === 'temp'\">\n <ion-row>\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n Items is an Observable\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>items: Observable<any[]></pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [logPrefix]=\"'[combo-desktop-2]'\"\n [compareWith]=\"compareWithFn\"\n [mobile]=\"false\"\n ></mat-autocomplete-field>\n </ion-card-content>\n\n </ion-card>\n </ion-col>\n </ion-row>\n\n\n </ion-grid>-->\n\n\n <ion-grid *ngIf=\"mode === 'memory'\">\n\n <!-- debugging memory leak -->\n <ion-row>\n <ion-col>\n <ion-text><h4>Debug memory leak</h4></ion-text>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col size=\"2\">\n <mat-form-field floatLabel=\"always\">\n <input matInput type=\"text\" hidden placeholder=\"Items type\">\n <mat-select (selectionChange)=\"memoryAutocompleteFieldName=$event.value\" [value]=\"memoryAutocompleteFieldName\">\n <mat-option value=\"entity-$items\">Observable</mat-option>\n <mat-option value=\"entity-suggestFn\">Suggest function</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n <ion-col size=\"1\" class=\"ion-no-padding\">\n <mat-form-field floatLabel=\"always\">\n <input matInput type=\"text\" hidden placeholder=\"Mobile ?\">\n <mat-checkbox (change)=\"memoryMobile=$event.checked\" [checked]=\"memoryMobile\">\n </mat-checkbox>\n </mat-form-field>\n </ion-col>\n\n <ion-col size=\"2\">\n <ion-button *ngIf=\"!memoryTimer\" (click)=\"startMemoryTimer()\" color=\"tertiary\">Start</ion-button>\n <ion-button *ngIf=\"memoryTimer\" (click)=\"stopMemoryTimer()\" color=\"tertiary\">Stop</ion-button>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col>\n <mat-autocomplete-field formControlName=\"entity\"\n *ngIf=\"!memoryHide && memoryAutocompleteFieldName\"\n [config]=\"autocompleteFields.get(memoryAutocompleteFieldName)\"\n [mobile]=\"memoryMobile\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-memory-leak]'\">\n </mat-autocomplete-field>\n </ion-col>\n </ion-row>\n\n </ion-grid>\n\n <!-- Mobile mode -->\n <ion-grid *ngIf=\"mode === 'mobile'\">\n\n <ion-row>\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Suggest() function\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>mobile: true, suggestFn: (searchText, filter) => any[]</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-suggestFn')\"\n [mobile]=\"true\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-mobile-1]'\"\n [required]=\"true\"\n placeholder=\"Suggest field\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Items is an Observable\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>mobile: true, items: Observable<any[]></pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"true\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-mobile-observable]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Control value if missing in items\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>mobile: true, items: Observable<any[]></pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"missingEntity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"true\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-mobile-2]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n search with a suggestLengthThreshold\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>suggest: (value, filter) => LoadResult<any>\nsuggestLengthThreshold: '3'</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-filter')\"\n [placeholder]=\"'Entity'\"\n [mobile]=\"true\"\n [equals]=\"equals\"\n suggestLengthThreshold=\"3\"\n [logPrefix]=\"'[combo-mobile-suggestLengthThreshold]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n Multiple value\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>multiple: true</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entities\"\n [config]=\"autocompleteFields.get('entities-items-filter')\"\n [placeholder]=\"'Multiple'\"\n mobile=\"true\"\n multiple=\"true\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-mobile-multiple]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Disabled control\n </ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"disableEntity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"true\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-mobile-2]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n </ion-row>\n\n <ion-row>\n <ion-col size=\"9\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Change filter\n </ion-label>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre></pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <ion-button (click)=\"updateFilter(filterChangeField, 'entity-items-filter')\">Filter on: {{autocompleteFields.get('entity-items-filter').filter?.searchAttribute }}</ion-button>\n </ion-col>\n <ion-col>\n <mat-autocomplete-field formControlName=\"entity\" #filterChangeField\n [config]=\"autocompleteFields.get('entity-items-filter')\"\n [mobile]=\"true\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-mobile-filter]'\"\n ></mat-autocomplete-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"3\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Large combo\n </ion-label>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>class=\"min-width-large\"</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-large')\"\n [mobile]=\"true\"\n class=\"min-width-large\"\n panelWidth=\"400px\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-mobile-large]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col size=\"6\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n Readonly toggle\n </ion-text>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <ion-grid>\n <ion-row>\n <ion-col size=\"3\">\n <mat-checkbox (change)=\"readonlyField.readonly=$event.checked\" [checked]=\"readonlyField.readonly\">\n Readonly ?\n </mat-checkbox>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col>\n <mat-autocomplete-field #readonlyField formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items')\"\n [placeholder]=\"'Entity'\"\n [mobile]=\"true\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-mobile-readonly]'\"\n [readonly]=\"true\"\n [clearable]=\"!readonlyField.readonly\">\n </mat-autocomplete-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Fullscreen\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>class: 'mat-autocomplete-panel-full-size'</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"true\"\n [class]=\"'mat-autocomplete-panel-full-size'\"\n [matAutocompletePosition]=\"'above'\"\n [logPrefix]=\"'[combo-mobile-full-size]'\"\n [debug]=\"true\"\n [showAllOnFocus]=\"true\"\n [showPanelOnFocus]=\"true\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n <!-- Desktop mode -->\n <ion-grid *ngIf=\"mode === 'desktop'\">\n <ion-row>\n <ion-col>\n <ion-text><h4>Desktop mode</h4></ion-text>\n </ion-col>\n </ion-row>\n <ion-row>\n\n\n <ion-col size=\"6\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n items from suggest function\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>suggest: (value, filter) => LoadResult<any></pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-filter')\"\n [placeholder]=\"'Entity'\"\n [mobile]=\"false\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-desktop-suggest]'\">\n </mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"6\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n search with a suggestLengthThreshold\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>suggest: (value, filter) => LoadResult<any>\nsuggestLengthThreshold: '3'</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-filter')\"\n [placeholder]=\"'Entity'\"\n [mobile]=\"false\"\n [equals]=\"equals\"\n suggestLengthThreshold=\"3\"\n [logPrefix]=\"'[combo-desktop-suggestLengthThreshold]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"6\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n Items is an array\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>items: [], value: {{stringify(form.controls.entity.value)}}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items')\"\n [logPrefix]=\"'[combo-desktop-array-1]'\"\n [equals]=\"equals\"\n [mobile]=\"false\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n Items is an Observable\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>items: Observable<any[]></pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [logPrefix]=\"'[combo-desktop-2]'\"\n [equals]=\"equals\"\n [mobile]=\"false\"\n ></mat-autocomplete-field>\n </ion-card-content>\n\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n Multiple value\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>multiple: true</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entities\"\n [config]=\"autocompleteFields.get('entities-items-filter')\"\n [placeholder]=\"'Multiple'\"\n mobile=\"false\"\n multiple=\"true\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-desktop-multiple]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Control value if missing in items\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>items: Observable<any[]></pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"missingEntity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-desktop-missing]'\"\n [mobile]=\"false\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Full size panel\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>class: 'mat-autocomplete-panel-full-size'</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"false\"\n [class]=\"'mat-autocomplete-panel-full-size'\"\n [matAutocompletePosition]=\"'above'\"\n [logPrefix]=\"'[combo-desktop-full-size]'\"\n [debug]=\"true\"\n [showAllOnFocus]=\"true\"\n [showPanelOnFocus]=\"true\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Disabled control\n </ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"disableEntity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"false\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-desktop-disable]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Readonly control\n </ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"false\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-desktop-readonly]'\"\n [readonly]=\"true\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size=\"9\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Full size combo\n </ion-label>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>class=\"mat-autocomplete-panel-full-size\"</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-large')\"\n [mobile]=\"false\"\n class=\"mat-autocomplete-panel-full-size\"\n panelWidth=\"100vw\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-desktop-full-size]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"3\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Large combo\n </ion-label>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>panelWidth: string</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-large')\"\n [mobile]=\"false\"\n panelWidth=\"400px\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-desktop-large]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"6\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n Readonly toggle\n </ion-text>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <ion-grid>\n <ion-row>\n <ion-col size=\"3\">\n <mat-checkbox (change)=\"readonlyField.readonly=$event.checked\" [checked]=\"readonlyField.readonly\">\n Readonly ?\n </mat-checkbox>\n </ion-col>\n <ion-col size=\"3\">\n <mat-checkbox #showIcons [checked]=\"false\">\n Icons ?\n </mat-checkbox>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col>\n <mat-autocomplete-field #readonlyField formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-filter')\"\n [placeholder]=\"'Entity'\"\n [mobile]=\"false\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-desktop-readonly]'\"\n [readonly]=\"true\"\n [clearable]=\"!readonlyField.readonly\">\n <mat-icon matPrefix *ngIf=\"showIcons.checked\">keyboard_arrow_right</mat-icon>\n <mat-icon matSuffix *ngIf=\"showIcons.checked\">keyboard_arrow_left</mat-icon>\n </mat-autocomplete-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n\n </ion-grid>\n\n </form>\n\n</ion-content>\n"
|
|
25880
25949
|
},] }
|
|
25881
25950
|
];
|
|
25882
25951
|
AutocompleteTestPage.ctorParameters = () => [
|
|
@@ -25949,13 +26018,13 @@ LatLongTestPage.ctorParameters = () => [
|
|
|
25949
26018
|
{ type: FormBuilder }
|
|
25950
26019
|
];
|
|
25951
26020
|
|
|
25952
|
-
const moment$
|
|
26021
|
+
const moment$2 = momentImported;
|
|
25953
26022
|
class SwipeTestPage {
|
|
25954
26023
|
constructor(formBuilder, dateFormatPipe) {
|
|
25955
26024
|
this.formBuilder = formBuilder;
|
|
25956
26025
|
this.dateFormatPipe = dateFormatPipe;
|
|
25957
26026
|
this.$dates = new BehaviorSubject(undefined);
|
|
25958
|
-
this._today = moment$
|
|
26027
|
+
this._today = moment$2().startOf('day');
|
|
25959
26028
|
this.form = formBuilder.group({
|
|
25960
26029
|
empty: [null, Validators.required],
|
|
25961
26030
|
date: [null, Validators.compose([Validators.required, SharedValidators.validDate])],
|
|
@@ -25968,7 +26037,7 @@ class SwipeTestPage {
|
|
|
25968
26037
|
ngOnInit() {
|
|
25969
26038
|
const dates = [];
|
|
25970
26039
|
for (let d = 0; d < 7; d++) {
|
|
25971
|
-
dates[d] = moment$
|
|
26040
|
+
dates[d] = moment$2(this._today).add(d - 3, 'day');
|
|
25972
26041
|
}
|
|
25973
26042
|
this.$dates.next(dates);
|
|
25974
26043
|
this.loadData();
|
|
@@ -26009,7 +26078,7 @@ SwipeTestPage.ctorParameters = () => [
|
|
|
26009
26078
|
{ type: DateFormatPipe }
|
|
26010
26079
|
];
|
|
26011
26080
|
|
|
26012
|
-
const moment$
|
|
26081
|
+
const moment$1 = momentImported;
|
|
26013
26082
|
class DateTimeTestPage {
|
|
26014
26083
|
constructor(platform, formBuilder, cd) {
|
|
26015
26084
|
this.platform = platform;
|
|
@@ -26041,7 +26110,7 @@ class DateTimeTestPage {
|
|
|
26041
26110
|
// Load the form with data
|
|
26042
26111
|
loadData() {
|
|
26043
26112
|
return __awaiter(this, void 0, void 0, function* () {
|
|
26044
|
-
const now = moment$
|
|
26113
|
+
const now = moment$1();
|
|
26045
26114
|
const data = {
|
|
26046
26115
|
empty: toDateISOString(now.clone().add(2, 'hours')),
|
|
26047
26116
|
enable: toDateISOString(now),
|
|
@@ -26102,9 +26171,9 @@ DateTimeTestPage.ctorParameters = () => [
|
|
|
26102
26171
|
{ type: ChangeDetectorRef }
|
|
26103
26172
|
];
|
|
26104
26173
|
|
|
26105
|
-
class EntityTestClass
|
|
26174
|
+
class EntityTestClass {
|
|
26106
26175
|
}
|
|
26107
|
-
const FAKE_ENTITIES
|
|
26176
|
+
const FAKE_ENTITIES = [
|
|
26108
26177
|
{ id: 1, label: 'AAA', name: 'Item A' },
|
|
26109
26178
|
{ id: 2, label: 'BBB', name: 'Item B' },
|
|
26110
26179
|
{ id: 3, label: 'CCC', name: 'Item C' },
|
|
@@ -26113,14 +26182,14 @@ const FAKE_ENTITIES$1 = [
|
|
|
26113
26182
|
{ id: 6, label: 'FFF', name: 'Item F' },
|
|
26114
26183
|
{ id: 7, label: 'GGG', name: 'Item G' }
|
|
26115
26184
|
];
|
|
26116
|
-
function deepCopy
|
|
26185
|
+
function deepCopy(values, size) {
|
|
26117
26186
|
if (isNil(size)) {
|
|
26118
|
-
return (values || FAKE_ENTITIES
|
|
26187
|
+
return (values || FAKE_ENTITIES).map(entity => Object.assign({}, entity));
|
|
26119
26188
|
}
|
|
26120
26189
|
let result = [];
|
|
26121
26190
|
let i = 1;
|
|
26122
26191
|
while (result.length < size) {
|
|
26123
|
-
result = result.concat((values || FAKE_ENTITIES
|
|
26192
|
+
result = result.concat((values || FAKE_ENTITIES).map(entity => {
|
|
26124
26193
|
const name = entity.name + ' #' + i;
|
|
26125
26194
|
return Object.assign(Object.assign({}, entity), { id: i++, name });
|
|
26126
26195
|
}));
|
|
@@ -26130,7 +26199,7 @@ function deepCopy$1(values, size) {
|
|
|
26130
26199
|
class ChipsTestPage {
|
|
26131
26200
|
constructor(formBuilder) {
|
|
26132
26201
|
this.formBuilder = formBuilder;
|
|
26133
|
-
this._items = deepCopy
|
|
26202
|
+
this._items = deepCopy(FAKE_ENTITIES, 100);
|
|
26134
26203
|
this._$items = new BehaviorSubject(undefined);
|
|
26135
26204
|
this.autocompleteFields = new MatAutocompleteConfigHolder();
|
|
26136
26205
|
this.form = formBuilder.group({
|
|
@@ -26169,7 +26238,7 @@ class ChipsTestPage {
|
|
|
26169
26238
|
// Load the form with data
|
|
26170
26239
|
loadData() {
|
|
26171
26240
|
return __awaiter(this, void 0, void 0, function* () {
|
|
26172
|
-
const items = deepCopy
|
|
26241
|
+
const items = deepCopy(FAKE_ENTITIES);
|
|
26173
26242
|
const data = {
|
|
26174
26243
|
entity: items.slice(0, 1),
|
|
26175
26244
|
entityInitial: items.slice(1, 2),
|
|
@@ -26285,7 +26354,7 @@ NumpadTestPage.ctorParameters = () => [
|
|
|
26285
26354
|
{ type: FormBuilder }
|
|
26286
26355
|
];
|
|
26287
26356
|
|
|
26288
|
-
const moment
|
|
26357
|
+
const moment = momentImported;
|
|
26289
26358
|
class DateTestPage {
|
|
26290
26359
|
constructor(platform, formBuilder, cd) {
|
|
26291
26360
|
this.platform = platform;
|
|
@@ -26319,7 +26388,7 @@ class DateTestPage {
|
|
|
26319
26388
|
// Load the form with data
|
|
26320
26389
|
loadData() {
|
|
26321
26390
|
return __awaiter(this, void 0, void 0, function* () {
|
|
26322
|
-
const now = moment
|
|
26391
|
+
const now = moment();
|
|
26323
26392
|
const nowAtMahe = now.clone().tz(this.timezone).startOf('day');
|
|
26324
26393
|
const data = {
|
|
26325
26394
|
empty: toDateISOString(now.clone().add(2, 'hours')),
|
|
@@ -26397,7 +26466,7 @@ const SHARED_MATERIAL_TESTING_PAGES = [
|
|
|
26397
26466
|
{ label: 'Shared directives', divider: true },
|
|
26398
26467
|
{ label: 'Badge icon directive', page: '/testing/shared/badge-icon' }
|
|
26399
26468
|
];
|
|
26400
|
-
const routes$
|
|
26469
|
+
const routes$4 = [
|
|
26401
26470
|
{
|
|
26402
26471
|
path: '',
|
|
26403
26472
|
pathMatch: 'full',
|
|
@@ -26454,7 +26523,7 @@ MaterialTestingModule.decorators = [
|
|
|
26454
26523
|
ReactiveFormsModule,
|
|
26455
26524
|
SharedMaterialModule,
|
|
26456
26525
|
TranslateModule.forChild(),
|
|
26457
|
-
RouterModule.forChild(routes$
|
|
26526
|
+
RouterModule.forChild(routes$4)
|
|
26458
26527
|
],
|
|
26459
26528
|
declarations: [
|
|
26460
26529
|
DateTimeTestPage,
|
|
@@ -26515,7 +26584,7 @@ ToastTestingPage.ctorParameters = () => [
|
|
|
26515
26584
|
{ type: TranslateService }
|
|
26516
26585
|
];
|
|
26517
26586
|
|
|
26518
|
-
const routes$
|
|
26587
|
+
const routes$3 = [
|
|
26519
26588
|
{
|
|
26520
26589
|
path: 'toast',
|
|
26521
26590
|
pathMatch: 'full',
|
|
@@ -26530,7 +26599,7 @@ ToastTestingModule.decorators = [
|
|
|
26530
26599
|
CommonModule,
|
|
26531
26600
|
IonicModule,
|
|
26532
26601
|
TranslateModule.forChild(),
|
|
26533
|
-
RouterModule.forChild(routes$
|
|
26602
|
+
RouterModule.forChild(routes$3)
|
|
26534
26603
|
],
|
|
26535
26604
|
declarations: [
|
|
26536
26605
|
ToastTestingPage
|
|
@@ -26593,7 +26662,7 @@ UploadFileTestingPage.ctorParameters = () => [
|
|
|
26593
26662
|
{ type: PopoverController }
|
|
26594
26663
|
];
|
|
26595
26664
|
|
|
26596
|
-
const routes$
|
|
26665
|
+
const routes$2 = [
|
|
26597
26666
|
{
|
|
26598
26667
|
path: 'upload-file',
|
|
26599
26668
|
pathMatch: 'full',
|
|
@@ -26608,7 +26677,7 @@ UploadFileTestingModule.decorators = [
|
|
|
26608
26677
|
CommonModule,
|
|
26609
26678
|
IonicModule,
|
|
26610
26679
|
TranslateModule.forChild(),
|
|
26611
|
-
RouterModule.forChild(routes$
|
|
26680
|
+
RouterModule.forChild(routes$2)
|
|
26612
26681
|
],
|
|
26613
26682
|
declarations: [
|
|
26614
26683
|
UploadFileTestingPage
|
|
@@ -26989,7 +27058,7 @@ TextPopoverTestingPage.ctorParameters = () => [
|
|
|
26989
27058
|
{ type: PopoverController }
|
|
26990
27059
|
];
|
|
26991
27060
|
|
|
26992
|
-
const routes$
|
|
27061
|
+
const routes$1 = [
|
|
26993
27062
|
{
|
|
26994
27063
|
path: 'text-popover',
|
|
26995
27064
|
pathMatch: 'full',
|
|
@@ -27004,7 +27073,7 @@ TextPopoverTestingModule.decorators = [
|
|
|
27004
27073
|
CommonModule,
|
|
27005
27074
|
IonicModule,
|
|
27006
27075
|
TranslateModule.forChild(),
|
|
27007
|
-
RouterModule.forChild(routes$
|
|
27076
|
+
RouterModule.forChild(routes$1)
|
|
27008
27077
|
],
|
|
27009
27078
|
declarations: [
|
|
27010
27079
|
TextPopoverTestingPage
|
|
@@ -27021,7 +27090,7 @@ const CORE_TESTING_PAGES = [
|
|
|
27021
27090
|
{ label: 'Table', page: '/testing/core/table' },
|
|
27022
27091
|
{ label: 'Text popover', page: '/testing/core/text-popover' }
|
|
27023
27092
|
];
|
|
27024
|
-
const routes
|
|
27093
|
+
const routes = [
|
|
27025
27094
|
{
|
|
27026
27095
|
path: '',
|
|
27027
27096
|
pathMatch: 'full',
|
|
@@ -27045,7 +27114,7 @@ CoreTestingModule.decorators = [
|
|
|
27045
27114
|
imports: [
|
|
27046
27115
|
CommonModule,
|
|
27047
27116
|
TranslateModule.forChild(),
|
|
27048
|
-
RouterModule.forChild(routes
|
|
27117
|
+
RouterModule.forChild(routes),
|
|
27049
27118
|
// Sub modules
|
|
27050
27119
|
TableTestingModule,
|
|
27051
27120
|
TextPopoverTestingModule
|
|
@@ -27065,5 +27134,5 @@ CoreTestingModule.decorators = [
|
|
|
27065
27134
|
* Generated bundle index. Do not edit.
|
|
27066
27135
|
*/
|
|
27067
27136
|
|
|
27068
|
-
export { APP_ABOUT_DEVELOPERS, APP_ABOUT_PARTNERS, APP_CONFIG_OPTIONS, APP_FORM_ERROR_I18N_KEYS, APP_GRAPHQL_TYPE_POLICIES, APP_HOME_BUTTONS, APP_LOCALES, APP_LOCAL_SETTINGS, APP_LOCAL_SETTINGS_OPTIONS, APP_LOCAL_STORAGE_TYPE_POLICIES, APP_MENU_ITEMS, APP_TESTING_PAGES, AboutModal, Account, AccountPage, AccountService, AccountToStringPipe, ActionsColumnComponent, AdminModule, AdminRoutingModule, Alerts, AndroidOsEnvironment, AnimationState, AppEditor, AppEditorOptions, AppEntityEditor, AppForm, AppFormField, AppFormProvider, AppFormUtils, AppGestureConfig, AppGraphQLModule, AppHelpModal, AppInMemoryTable, AppInstallUpgradeCard, AppListForm, AppLoadingSpinner, AppMenuModule, AppNullForm, AppPropertiesForm, AppTabEditor, AppTabEditorOptions, AppTable, AppTableDataSourceOptions, AppTableUtils, AppValidatorService, AppendToInputDirective, ArrayFilterPipe, ArrayFirstPipe, ArrayIncludesPipe, ArrayLengthPipe, ArrayPluckPipe, AudioProvider, AuthForm, AuthGuardService, AuthModal, AutocompleteTestPage, AutofocusDirective, Base58, BaseEntityService, BaseGraphqlService, BaseGraphqlServiceOptions, BaseReferential, Beans, CORE_CONFIG_OPTIONS, CORE_TESTING_PAGES, CellValueChangeListener, ChipsTestPage, Color, ColorScale, ComponentDirtyGuard, ConfigService, Configuration, CoreModule, CoreTestingModule, CryptoService, DATE_ISO_PATTERN, DATE_UNIX_MS_TIMESTAMP, DATE_UNIX_TIMESTAMP, DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLACEHOLDER_CHAR, DEFAULT_REQUIRED_COLUMNS, DateDiffDurationPipe, DateFormatPipe, DateFromNowPipe, DateTimeTestPage, DateUtils, Department, DepartmentToStringPipe, DragAndDropDirective, DurationPipe, ENTITIES_STORAGE_KEY_PREFIX, ENVIRONMENT, EmptyArrayPipe, EntitiesService, EntitiesStorage, EntitiesTableDataSource, Entity, EntityClass, EntityClasses, EntityFilter, EntityFilterUtils, EntityMetadataComponent, EntityStore, EntityUtils, Environment, ErrorCodes
|
|
27137
|
+
export { APP_ABOUT_DEVELOPERS, APP_ABOUT_PARTNERS, APP_CONFIG_OPTIONS, APP_FORM_ERROR_I18N_KEYS, APP_GRAPHQL_TYPE_POLICIES, APP_HOME_BUTTONS, APP_LOCALES, APP_LOCAL_SETTINGS, APP_LOCAL_SETTINGS_OPTIONS, APP_LOCAL_STORAGE_TYPE_POLICIES, APP_MENU_ITEMS, APP_TESTING_PAGES, AboutModal, Account, AccountPage, AccountService, AccountToStringPipe, ActionsColumnComponent, AdminModule, AdminRoutingModule, Alerts, AndroidOsEnvironment, AnimationState, AppEditor, AppEditorOptions, AppEntityEditor, AppForm, AppFormField, AppFormProvider, AppFormUtils, AppGestureConfig, AppGraphQLModule, AppHelpModal, AppInMemoryTable, AppInstallUpgradeCard, AppListForm, AppLoadingSpinner, AppMenuModule, AppNullForm, AppPropertiesForm, AppTabEditor, AppTabEditorOptions, AppTable, AppTableDataSourceOptions, AppTableUtils, AppValidatorService, AppendToInputDirective, ArrayFilterPipe, ArrayFirstPipe, ArrayIncludesPipe, ArrayLengthPipe, ArrayPluckPipe, AudioProvider, AuthForm, AuthGuardService, AuthModal, AutocompleteTestPage, AutofocusDirective, Base58, BaseEntityService, BaseGraphqlService, BaseGraphqlServiceOptions, BaseReferential, Beans, CORE_CONFIG_OPTIONS, CORE_TESTING_PAGES, CellValueChangeListener, ChipsTestPage, Color, ColorScale, ComponentDirtyGuard, ConfigService, Configuration, CoreModule, CoreTestingModule, CryptoService, DATE_ISO_PATTERN, DATE_UNIX_MS_TIMESTAMP, DATE_UNIX_TIMESTAMP, DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLACEHOLDER_CHAR, DEFAULT_REQUIRED_COLUMNS, DateDiffDurationPipe, DateFormatPipe, DateFromNowPipe, DateTimeTestPage, DateUtils, Department, DepartmentToStringPipe, DragAndDropDirective, DurationPipe, ENTITIES_STORAGE_KEY_PREFIX, ENVIRONMENT, EmptyArrayPipe, EntitiesService, 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, Fragments, GraphqlService, HAMMER_PRESS_TIME, HAMMER_TAP_TIME, HighlightPipe, HomePage, Hotkeys, HotkeysDialogComponent, InMemoryEntitiesService, IsLoginAccountPipe, IsNilOrBlankPipe, IsNotNilOrBlankPipe, IsNotOnFieldModePipe, IsOnFieldModePipe, JobUtils, KEYBOARD_HIDE_DELAY_MS, LAT_LONG_DEFAULT_MAX_DECIMALS, LAT_LONG_PATTERNS, LatLongFormatPipe, LatLongTestPage, LatitudeFormatPipe, LocalSettingsService, LongitudeFormatPipe, MINIFY_ENTITY_FOR_LOCAL_STORAGE, MINIFY_ENTITY_FOR_POD, MapGetPipe, MapKeysPipe, MapValuesPipe, MatAutocompleteConfigHolder, MatAutocompleteField, MatBadgeIconDirective, MatBooleanField, MatChipsField, MatDate, MatDateShort, MatDateTime, MatDuration, MatLatLongField, MatNumpadComponent, MatNumpadContainerComponent, MatNumpadContent, MatPaginatorI18n, MatStepperI18n, MatSwipeField, MaterialTestingModule, MathAbsPipe, MenuComponent, MenuItems, MenuService, ModalToolbarComponent, NetworkService, NgInitDirective, NgVarDirective, NotEmptyArrayPipe, NumberFormatPipe, NumpadDirective, OddPipe, PRIORITIZED_AUTHORITIES, PUBKEY_REGEXP, Peer, Person, PersonFilter, PersonFragments, PersonService, PersonToStringPipe, PersonUtils, PersonValidatorService, PlatformService, ProgressBarService, ProgressInterceptor, PropertyGetPipe, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, Referential, ReferentialFilter, ReferentialRef, ReferentialUtils, ReferentialValidatorService, RegisterConfirmPage, SETTINGS_DISPLAY_COLUMNS, SETTINGS_FILTER, SETTINGS_PAGE_SIZE, SETTINGS_SORTED_COLUMN, SETTINGS_STORAGE_KEY, SETTINGS_TRANSIENT_PROPERTIES, SHARED_MATERIAL_TESTING_PAGES, SHARED_TESTING_PAGES, SPACE_PLACEHOLDER_CHAR, SelectPeerModal, SettingsPage, SharedAsyncValidators, SharedDirectivesModule, SharedFormArrayValidators, SharedFormGroupValidators, SharedHotkeysModule, SharedMatAutocompleteModule, SharedMatBadgeIconModule, SharedMatBooleanModule, SharedMatChipsModule, SharedMatDateTimeModule, SharedMatDurationModule, SharedMatLatLongModule, SharedMatNumpadModule, SharedMatSwipeModule, SharedMaterialModule, SharedModule, SharedPipesModule, SharedRoutingModule, SharedTestingModule, SharedTestsPage, SharedValidators, SocialModule, Software, StartableService, StatusById, StatusIds, StatusList, StrIncludesPipe, StrLengthPipe, SwipeTestPage, TableSelectColumnsComponent, TableTestPage, TableTestingModule, TextForm, TextPopover, TextPopoverTestingModule, TextPopoverTestingPage, ToStringPipe, Toasts, ToolbarComponent, ToolbarToken, TranslatablePipe, TranslateContextPipe, TranslateContextService, UploadFile, UploadFileComponent, UploadFilePopover, UploadFileTestingModule, UploadFileTestingPage, UserEvent, UserEventFilter, UserEventService, UserEventTypes, UserEventsTable, UserSettings, UsersPage, accountToString, adaptValueToControl, addValueInArray, arrayDistinct, arrayGroupBy, arraySize, asInputElement, canHaveFocus, capitalizeFirstLetter, chainPromises, changeCaseToUnderscore, clearValueInArray, copyEntity2Form, createPromiseEvent, createPromiseEventEmitter, departmentToString, departmentsToString, disableControls, emitPromiseEvent, entityToString, equals, equalsOrNil, 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, isControlHasInput, isCordova, isEmptyArray, isIOS, isInputElement, isInstanceOf, isInt, isMobile, isNil, isNilOrBlank, isNilOrNaN, isNotEmptyArray, isNotNil, isNotNilOrBlank, isNotNilOrNaN, isNotNilString, isNumber, isNumberRange, isProgressEvent, isResponseEvent, isTouchUi, isWindows, joinProperties, joinPropertiesPath, logFormErrors, markAllAsTouched, markAsUntouched, markControlAsTouched, markFormGroupAsTouched, matchMedia, matchUpperCase, mergeLoadResult, mixHex, moveInputCaretToSeparator, noTrailingSlash, notNilOrDefault, nullIfUndefined, parseLatitudeOrLongitude, propertiesPathComparator, propertyComparator, propertyPathComparator, referentialToString, referentialsToString, remove, removeAll, removeDiacritics, removeDuplicatesFromArray, removeEnd, removeValueInArray, replaceAll, resetCalculatedValue, resizeArray, rgbArrayToHex, rgbToHex, round, scrollFactory, selectInputContent, selectInputRange, setCalculatedValue, setTabIndex, sleep, slideInOutAnimation, slideUpDownAnimation, sort, splitById, splitByProperty, startsWithUpperCase, suggestFromArray, suggestFromStringArray, tabindexComparator, testUserAgent, toBoolean, toDateISOString, toDuration, toFloat, toInt, toNotNil, toNumber, trimEmptyToNull, uncapitalizeFirstLetter, updateValueAndValidity, waitFor, waitForTrue, waitIdle, waitWhilePending, ɵ0$b as ɵ0, CustomReuseStrategy as ɵa, MatNumpadDomService as ɵb, isFocusableElement as ɵc, RegisterForm as ɵd, AccountValidatorService as ɵe, RegisterModal as ɵf, UserSettingsValidatorService as ɵg, LocalSettingsValidatorService as ɵh, AppIconComponent as ɵi, DateTestPage as ɵj, NumpadTestPage as ɵk, MatBadgeIconTestPage as ɵl, ToastTestingModule as ɵm, ToastTestingPage as ɵn };
|
|
27069
27138
|
//# sourceMappingURL=sumaris-net.ngx-components.js.map
|