@sumaris-net/ngx-components 1.14.2 → 1.15.1
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 +356 -196
- 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 +10 -0
- package/esm2015/src/app/shared/dates.js +5 -6
- package/esm2015/src/app/shared/material/datetime/material.date.js +132 -101
- package/esm2015/src/app/shared/material/datetime/material.datetime.js +58 -59
- package/esm2015/src/app/shared/material/datetime/testing/mat-date.test.js +109 -0
- package/esm2015/src/app/shared/material/material.testing.module.js +10 -1
- package/esm2015/src/app/shared/validator/validators.js +20 -9
- package/esm2015/sumaris-net.ngx-components.js +6 -5
- package/fesm2015/sumaris-net.ngx-components.js +339 -192
- package/fesm2015/sumaris-net.ngx-components.js.map +1 -1
- package/package.json +1 -1
- package/src/app/shared/dates.d.ts +2 -1
- package/src/app/shared/material/datetime/material.date.d.ts +20 -14
- package/src/app/shared/material/datetime/material.datetime.d.ts +5 -5
- package/src/app/shared/material/datetime/testing/mat-date.test.d.ts +29 -0
- package/src/app/shared/validator/validators.d.ts +3 -1
- package/src/assets/i18n/en-US.json +1 -0
- package/src/assets/i18n/en.json +1 -0
- package/src/assets/i18n/fr.json +1 -0
- package/sumaris-net.ngx-components.d.ts +5 -4
- package/sumaris-net.ngx-components.metadata.json +1 -1
|
@@ -1733,7 +1733,7 @@ DateFormatPipe.ctorParameters = () => [
|
|
|
1733
1733
|
{ type: TranslateService }
|
|
1734
1734
|
];
|
|
1735
1735
|
|
|
1736
|
-
const moment$
|
|
1736
|
+
const moment$7 = momentImported;
|
|
1737
1737
|
class DateDiffDurationPipe {
|
|
1738
1738
|
constructor(dateAdapter, translate) {
|
|
1739
1739
|
this.dateAdapter = dateAdapter;
|
|
@@ -1749,10 +1749,10 @@ class DateDiffDurationPipe {
|
|
|
1749
1749
|
return this.format(startDate, endDate);
|
|
1750
1750
|
}
|
|
1751
1751
|
format(startDate, endDate) {
|
|
1752
|
-
const duration = moment$
|
|
1752
|
+
const duration = moment$7.duration(endDate.diff(startDate));
|
|
1753
1753
|
if (duration.asMinutes() < 0)
|
|
1754
1754
|
return '';
|
|
1755
|
-
const timeDuration = moment$
|
|
1755
|
+
const timeDuration = moment$7(0)
|
|
1756
1756
|
.hour(duration.hours())
|
|
1757
1757
|
.minute(duration.minutes());
|
|
1758
1758
|
const days = Math.floor(duration.asDays());
|
|
@@ -2196,7 +2196,7 @@ FileSizePipe.decorators = [
|
|
|
2196
2196
|
{ type: Pipe, args: [{ name: 'fileSize' },] }
|
|
2197
2197
|
];
|
|
2198
2198
|
|
|
2199
|
-
const moment$
|
|
2199
|
+
const moment$6 = momentImported;
|
|
2200
2200
|
const tz = momentTZImported;
|
|
2201
2201
|
const DATE_UNIX_TIMESTAMP = 'X';
|
|
2202
2202
|
const DATE_UNIX_MS_TIMESTAMP = 'x';
|
|
@@ -2225,8 +2225,9 @@ class DateUtils {
|
|
|
2225
2225
|
* Same implementation as the Java class Dates.resetTime() (see any SUMARiS like Pod)
|
|
2226
2226
|
* @param value
|
|
2227
2227
|
* @param timezone a timezone (see https://momentjs.com/timezone/)
|
|
2228
|
+
* @param keepLocalTime if true, only the timezone (and offset) is updated, keeping the local time same. Consequently, it will now point to a different point in time if the offset has changed.
|
|
2228
2229
|
*/
|
|
2229
|
-
static resetTime(value, timezone) {
|
|
2230
|
+
static resetTime(value, timezone, keepLocalTime) {
|
|
2230
2231
|
if (!value)
|
|
2231
2232
|
return undefined;
|
|
2232
2233
|
const date = fromDateISOString(value);
|
|
@@ -2235,10 +2236,8 @@ class DateUtils {
|
|
|
2235
2236
|
return date.clone().startOf('day');
|
|
2236
2237
|
}
|
|
2237
2238
|
// Use timezone
|
|
2238
|
-
return
|
|
2239
|
-
.
|
|
2240
|
-
.set('month', date.get('month'))
|
|
2241
|
-
.set('day', date.get('day'))
|
|
2239
|
+
return date.clone() // clone the original date
|
|
2240
|
+
.tz(timezone, keepLocalTime)
|
|
2242
2241
|
.startOf('day');
|
|
2243
2242
|
}
|
|
2244
2243
|
}
|
|
@@ -2260,32 +2259,32 @@ function fromDateISOString(value) {
|
|
|
2260
2259
|
if (!value || isMoment(value))
|
|
2261
2260
|
return value;
|
|
2262
2261
|
// Parse the input value, as a ISO date time
|
|
2263
|
-
const date = moment$
|
|
2262
|
+
const date = moment$6(value, DATE_ISO_PATTERN);
|
|
2264
2263
|
if (date.isValid())
|
|
2265
2264
|
return date;
|
|
2266
2265
|
// Not valid: trying to convert from unix timestamp
|
|
2267
2266
|
if (typeof value === 'string') {
|
|
2268
2267
|
console.warn('Wrong date format - Trying to convert from local time: ' + value);
|
|
2269
2268
|
if (value.length === 10) {
|
|
2270
|
-
return moment$
|
|
2269
|
+
return moment$6(value, DATE_UNIX_TIMESTAMP);
|
|
2271
2270
|
}
|
|
2272
2271
|
else if (value.length === 13) {
|
|
2273
|
-
return moment$
|
|
2272
|
+
return moment$6(value, DATE_UNIX_MS_TIMESTAMP);
|
|
2274
2273
|
}
|
|
2275
2274
|
}
|
|
2276
2275
|
console.warn('Unable to parse date: ' + value);
|
|
2277
2276
|
return undefined;
|
|
2278
2277
|
}
|
|
2279
2278
|
function fromUnixTimestamp(timeInSec) {
|
|
2280
|
-
return moment$
|
|
2279
|
+
return moment$6(timeInSec, DATE_UNIX_TIMESTAMP);
|
|
2281
2280
|
}
|
|
2282
2281
|
function fromUnixMsTimestamp(timeInMs) {
|
|
2283
|
-
return moment$
|
|
2282
|
+
return moment$6(timeInMs, DATE_UNIX_MS_TIMESTAMP);
|
|
2284
2283
|
}
|
|
2285
2284
|
function toDuration(value, unit) {
|
|
2286
2285
|
if (!value)
|
|
2287
2286
|
return undefined;
|
|
2288
|
-
const duration = moment$
|
|
2287
|
+
const duration = moment$6.duration(value, unit);
|
|
2289
2288
|
// fix 990+ ms
|
|
2290
2289
|
if (duration.milliseconds() >= 990) {
|
|
2291
2290
|
duration.add(1000 - duration.milliseconds(), 'ms');
|
|
@@ -2708,7 +2707,7 @@ NgInitDirective.propDecorators = {
|
|
|
2708
2707
|
ngInit: [{ type: Output }]
|
|
2709
2708
|
};
|
|
2710
2709
|
|
|
2711
|
-
const moment$
|
|
2710
|
+
const moment$5 = momentImported;
|
|
2712
2711
|
// @dynamic
|
|
2713
2712
|
class SharedValidators {
|
|
2714
2713
|
static getDoubleRegexp(maxDecimals) {
|
|
@@ -2723,14 +2722,6 @@ class SharedValidators {
|
|
|
2723
2722
|
this._REGEXP_CACHE.DOUBLE_BY_MAX_DECIMALS[maxDecimals] = new RegExp(`^[-]?[0-9]+([.,][0-9]{1,${maxDecimals}})?$`);
|
|
2724
2723
|
return this._REGEXP_CACHE.DOUBLE_BY_MAX_DECIMALS[maxDecimals];
|
|
2725
2724
|
}
|
|
2726
|
-
static validDate(control) {
|
|
2727
|
-
const value = control.value;
|
|
2728
|
-
const date = !value || moment$4.isMoment(value) ? value : moment$4(control.value, DATE_ISO_PATTERN);
|
|
2729
|
-
if (date && (!date.isValid() || date.year() < 1970)) {
|
|
2730
|
-
return { validDate: true };
|
|
2731
|
-
}
|
|
2732
|
-
return null;
|
|
2733
|
-
}
|
|
2734
2725
|
static latitude(control) {
|
|
2735
2726
|
const value = control.value;
|
|
2736
2727
|
if (isNotNil(value) && (value < -90 || value > 90)) {
|
|
@@ -2795,6 +2786,14 @@ class SharedValidators {
|
|
|
2795
2786
|
return null;
|
|
2796
2787
|
};
|
|
2797
2788
|
}
|
|
2789
|
+
static validDate(control) {
|
|
2790
|
+
const value = control.value;
|
|
2791
|
+
const date = !value || moment$5.isMoment(value) ? value : moment$5(control.value, DATE_ISO_PATTERN);
|
|
2792
|
+
if (date && (!date.isValid() || date.year() < 1970)) {
|
|
2793
|
+
return { validDate: true };
|
|
2794
|
+
}
|
|
2795
|
+
return null;
|
|
2796
|
+
}
|
|
2798
2797
|
static dateIsAfter(previousValue, errorParam, granularity) {
|
|
2799
2798
|
return (control) => {
|
|
2800
2799
|
const value = fromDateISOString(control.value);
|
|
@@ -2805,6 +2804,16 @@ class SharedValidators {
|
|
|
2805
2804
|
return null;
|
|
2806
2805
|
};
|
|
2807
2806
|
}
|
|
2807
|
+
static dateIsBefore(maxValue, errorParam, granularity) {
|
|
2808
|
+
return (control) => {
|
|
2809
|
+
const value = fromDateISOString(control.value);
|
|
2810
|
+
if (isNotNil(value) && isNotNil(maxValue) && value.isSameOrAfter(maxValue, granularity)) {
|
|
2811
|
+
// Return the error
|
|
2812
|
+
return { dateIsBefore: { maxDate: errorParam } };
|
|
2813
|
+
}
|
|
2814
|
+
return null;
|
|
2815
|
+
};
|
|
2816
|
+
}
|
|
2808
2817
|
static dateRangeEnd(startDateFieldName, msg) {
|
|
2809
2818
|
const errorCode = msg ? 'msg' : 'dateRange';
|
|
2810
2819
|
const error = msg ? { msg } : { dateRange: true };
|
|
@@ -2899,6 +2908,7 @@ SharedValidators.I18N_ERROR_KEYS = {
|
|
|
2899
2908
|
pubkey: 'ERROR.FIELD_NOT_VALID_PUBKEY',
|
|
2900
2909
|
validDate: 'ERROR.FIELD_NOT_VALID_DATE',
|
|
2901
2910
|
dateIsAfter: 'ERROR.FIELD_NOT_VALID_DATE_AFTER',
|
|
2911
|
+
dateIsBefore: 'ERROR.FIELD_NOT_VALID_DATE_BEFORE',
|
|
2902
2912
|
dateRange: 'ERROR.FIELD_NOT_VALID_DATE_RANGE',
|
|
2903
2913
|
dateMinDuration: 'ERROR.FIELD_NOT_VALID_DATE_MIN_DURATION',
|
|
2904
2914
|
dateMaxDuration: 'ERROR.FIELD_NOT_VALID_DATE_MAX_DURATION',
|
|
@@ -4739,6 +4749,7 @@ const noop$6 = () => { };
|
|
|
4739
4749
|
const ɵ0$9 = noop$6;
|
|
4740
4750
|
class MatDate {
|
|
4741
4751
|
constructor(platform, dateAdapter, translate, formBuilder, cd, keyboard, formGroupDir) {
|
|
4752
|
+
this.platform = platform;
|
|
4742
4753
|
this.dateAdapter = dateAdapter;
|
|
4743
4754
|
this.translate = translate;
|
|
4744
4755
|
this.formBuilder = formBuilder;
|
|
@@ -4748,21 +4759,26 @@ class MatDate {
|
|
|
4748
4759
|
this._onChangeCallback = noop$6;
|
|
4749
4760
|
this._onTouchedCallback = noop$6;
|
|
4750
4761
|
this._subscription = new Subscription();
|
|
4751
|
-
this.
|
|
4752
|
-
this.
|
|
4762
|
+
this._writing = true;
|
|
4763
|
+
this._disabling = false;
|
|
4764
|
+
this._readonly = false;
|
|
4753
4765
|
this.dayMask = DAY_MASK$2;
|
|
4754
|
-
this.disabled = false;
|
|
4755
4766
|
this.floatLabel = 'auto';
|
|
4756
|
-
this.readonly = false;
|
|
4757
4767
|
this.compact = false;
|
|
4758
4768
|
this.placeholderChar = DEFAULT_PLACEHOLDER_CHAR;
|
|
4759
4769
|
this.autofocus = false;
|
|
4770
|
+
this.startDate = null;
|
|
4760
4771
|
this.clearable = false;
|
|
4761
|
-
|
|
4762
|
-
this.mobile = platform.is('mobile');
|
|
4763
|
-
this.keyboardHideDelay = this.mobile && KEYBOARD_HIDE_DELAY_MS || 0;
|
|
4772
|
+
this.timezone = null;
|
|
4764
4773
|
this.locale = (translate.currentLang || translate.defaultLang).substr(0, 2);
|
|
4765
4774
|
}
|
|
4775
|
+
set readonly(value) {
|
|
4776
|
+
this._readonly = value;
|
|
4777
|
+
this.markForCheck();
|
|
4778
|
+
}
|
|
4779
|
+
get readonly() {
|
|
4780
|
+
return this._readonly;
|
|
4781
|
+
}
|
|
4766
4782
|
set tabindex(value) {
|
|
4767
4783
|
if (this._tabindex !== value) {
|
|
4768
4784
|
this._tabindex = value;
|
|
@@ -4773,67 +4789,68 @@ class MatDate {
|
|
|
4773
4789
|
return this._tabindex;
|
|
4774
4790
|
}
|
|
4775
4791
|
get value() {
|
|
4776
|
-
return
|
|
4792
|
+
return this.formControl.value;
|
|
4777
4793
|
}
|
|
4778
4794
|
ngOnInit() {
|
|
4795
|
+
this.mobile = isNil(this.mobile) ? this.platform.is('mobile') : this.mobile;
|
|
4796
|
+
this._keyboardHideDelay = this.mobile && KEYBOARD_HIDE_DELAY_MS || 0;
|
|
4779
4797
|
this.formControl = this.formControl || this.formControlName && this.formGroupDir && this.formGroupDir.form.get(this.formControlName);
|
|
4780
4798
|
if (!this.formControl)
|
|
4781
4799
|
throw new Error('Missing mandatory attribute \'formControl\' or \'formControlName\' in <mat-date-field>.');
|
|
4782
4800
|
this.required = toBoolean(this.required, this.formControl.validator === Validators.required);
|
|
4783
|
-
//
|
|
4784
|
-
|
|
4785
|
-
|
|
4786
|
-
|
|
4787
|
-
|
|
4801
|
+
// Add 'validDate' validator (when existing validator are null or required, to be sure to keep it)
|
|
4802
|
+
if (!this.formControl.validator || this.formControl.validator === Validators.required) {
|
|
4803
|
+
this.formControl.setValidators(this.required ? [Validators.required, SharedValidators.validDate] : SharedValidators.validDate);
|
|
4804
|
+
}
|
|
4805
|
+
else {
|
|
4806
|
+
this.formControl.setValidators(this.required ? [this.formControl.validator, Validators.required, SharedValidators.validDate] :
|
|
4807
|
+
[this.formControl.validator, SharedValidators.validDate]);
|
|
4808
|
+
}
|
|
4809
|
+
this.dayControl = this.formBuilder.control(null, () => this.formControl.errors);
|
|
4788
4810
|
// Get patterns to display date
|
|
4789
|
-
this.updatePattern(this.translate.instant('COMMON.DATE_PATTERN'));
|
|
4790
4811
|
this._subscription.add(this.translate.get('COMMON.DATE_PATTERN')
|
|
4791
4812
|
.subscribe((pattern) => this.updatePattern(pattern)));
|
|
4792
4813
|
this._subscription.add(this.dayControl.valueChanges
|
|
4793
4814
|
.subscribe((value) => this.onFormChange(value)));
|
|
4794
|
-
// Listen status changes outside the component
|
|
4815
|
+
// Listen status changes (when done outside the component - e.g. when setErrors() is calling on the formControl)
|
|
4795
4816
|
this._subscription.add(this.formControl.statusChanges
|
|
4796
|
-
.pipe(filter(() => !this.readonly && !this.
|
|
4797
|
-
|
|
4798
|
-
|
|
4799
|
-
|
|
4800
|
-
}
|
|
4801
|
-
else if (status === 'VALID') {
|
|
4802
|
-
$error.next(null);
|
|
4803
|
-
}
|
|
4804
|
-
this.dayControl.updateValueAndValidity({ onlySelf: true, emitEvent: false });
|
|
4817
|
+
.pipe(filter((_) => !this.readonly && !this._writing && !this._disabling) // Skip
|
|
4818
|
+
)
|
|
4819
|
+
.subscribe(() => {
|
|
4820
|
+
this.dayControl.updateValueAndValidity({ emitEvent: false });
|
|
4805
4821
|
this.markForCheck();
|
|
4806
4822
|
}));
|
|
4807
4823
|
this.updateTabIndex();
|
|
4808
|
-
this.
|
|
4824
|
+
this._writing = false;
|
|
4809
4825
|
}
|
|
4810
4826
|
ngOnDestroy() {
|
|
4811
4827
|
this._subscription.unsubscribe();
|
|
4812
4828
|
}
|
|
4813
|
-
writeValue(
|
|
4814
|
-
if (this.
|
|
4815
|
-
return;
|
|
4816
|
-
|
|
4817
|
-
|
|
4818
|
-
|
|
4829
|
+
writeValue(valueStr) {
|
|
4830
|
+
if (this._writing)
|
|
4831
|
+
return; // Skip
|
|
4832
|
+
this._writing = true;
|
|
4833
|
+
// DEBUG
|
|
4834
|
+
// console.debug("[mat-date] writeValue() with:", valueStr);
|
|
4835
|
+
const value = fromDateISOString(valueStr);
|
|
4836
|
+
if (!value || !value.isValid()) {
|
|
4819
4837
|
this.dayControl.patchValue(null, { emitEvent: false });
|
|
4820
|
-
this._value = undefined;
|
|
4821
4838
|
if (this.formControl.value) {
|
|
4822
4839
|
this.formControl.patchValue(null, { emitEvent: false });
|
|
4823
4840
|
this._onChangeCallback(null);
|
|
4824
4841
|
}
|
|
4825
|
-
this.writing = false;
|
|
4826
|
-
this.markForCheck();
|
|
4827
|
-
return;
|
|
4828
4842
|
}
|
|
4829
|
-
|
|
4830
|
-
|
|
4831
|
-
|
|
4843
|
+
else {
|
|
4844
|
+
// Format day
|
|
4845
|
+
// Move to the expected TZ (keeping local hour - e.g. midnight)
|
|
4846
|
+
let day = value && this.timezone ? value.clone().tz(this.timezone) : value.clone();
|
|
4847
|
+
// Reset hour
|
|
4848
|
+
day = day.startOf('day');
|
|
4849
|
+
const dayStr = this.dateAdapter.format(day, this.dayPattern);
|
|
4850
|
+
// Update control
|
|
4851
|
+
this.dayControl.patchValue(dayStr, { emitEvent: false });
|
|
4832
4852
|
}
|
|
4833
|
-
this.
|
|
4834
|
-
// Set form value
|
|
4835
|
-
this.dayControl.patchValue(this.dateAdapter.format(this._value.clone().startOf('day'), this.dayPattern), { emitEvent: false });
|
|
4836
|
-
this.writing = false;
|
|
4853
|
+
this._writing = false;
|
|
4837
4854
|
this.markForCheck();
|
|
4838
4855
|
}
|
|
4839
4856
|
registerOnChange(fn) {
|
|
@@ -4843,37 +4860,39 @@ class MatDate {
|
|
|
4843
4860
|
this._onTouchedCallback = fn;
|
|
4844
4861
|
}
|
|
4845
4862
|
setDisabledState(isDisabled) {
|
|
4846
|
-
if (this.
|
|
4863
|
+
if (this._disabling)
|
|
4847
4864
|
return;
|
|
4848
|
-
this.
|
|
4849
|
-
this.disabled = isDisabled;
|
|
4865
|
+
this._disabling = true;
|
|
4850
4866
|
if (isDisabled) {
|
|
4851
|
-
this.dayControl.disable({
|
|
4867
|
+
this.dayControl.disable({ emitEvent: false });
|
|
4852
4868
|
}
|
|
4853
4869
|
else {
|
|
4854
|
-
this.dayControl.enable({
|
|
4870
|
+
this.dayControl.enable({ emitEvent: false });
|
|
4855
4871
|
}
|
|
4856
|
-
this.
|
|
4872
|
+
this._disabling = false;
|
|
4857
4873
|
this.markForCheck();
|
|
4858
4874
|
}
|
|
4859
4875
|
onDatePickerChange(event) {
|
|
4860
|
-
|
|
4861
|
-
|
|
4862
|
-
|
|
4863
|
-
|
|
4864
|
-
|
|
4865
|
-
let
|
|
4866
|
-
|
|
4867
|
-
|
|
4868
|
-
|
|
4869
|
-
|
|
4870
|
-
|
|
4871
|
-
|
|
4872
|
-
|
|
4873
|
-
this.
|
|
4874
|
-
|
|
4875
|
-
|
|
4876
|
-
|
|
4876
|
+
// Make sure event is valid
|
|
4877
|
+
if (!event || (event.value !== null && !isMoment(event.value))) {
|
|
4878
|
+
console.warn('Invalid MatDatepicker event. Skipping', event);
|
|
4879
|
+
return; // Skip
|
|
4880
|
+
}
|
|
4881
|
+
let dateStr = null;
|
|
4882
|
+
if (event.value) {
|
|
4883
|
+
let date = event.value
|
|
4884
|
+
.locale(this.locale) // set as time as locale time
|
|
4885
|
+
.minute(0).seconds(0).millisecond(0) // Reset hour
|
|
4886
|
+
.utc(true);
|
|
4887
|
+
dateStr = this.dateAdapter.format(date, this.dayPattern) || null;
|
|
4888
|
+
}
|
|
4889
|
+
if (this.dayControl.value !== dateStr) {
|
|
4890
|
+
// DEBUG
|
|
4891
|
+
console.debug("[mat-date] onDatePickerChange() new value:", dateStr);
|
|
4892
|
+
this.dayControl.setValue(dateStr, {
|
|
4893
|
+
emitEvent: true // Will call onFormChange
|
|
4894
|
+
});
|
|
4895
|
+
}
|
|
4877
4896
|
}
|
|
4878
4897
|
openDatePickerIfMobile(event, datePicker) {
|
|
4879
4898
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -4914,6 +4933,13 @@ class MatDate {
|
|
|
4914
4933
|
}
|
|
4915
4934
|
});
|
|
4916
4935
|
}
|
|
4936
|
+
clear() {
|
|
4937
|
+
this.dayControl.patchValue(null, { emitEvent: false });
|
|
4938
|
+
this.formControl.setValue(null, { emitEvent: false });
|
|
4939
|
+
this._onChangeCallback(null);
|
|
4940
|
+
this.markAsTouched();
|
|
4941
|
+
this.markAsDirty();
|
|
4942
|
+
}
|
|
4917
4943
|
/* -- private method -- */
|
|
4918
4944
|
updatePattern(pattern) {
|
|
4919
4945
|
pattern = pattern !== 'COMMON.DATE_PATTERN' ? pattern : 'L';
|
|
@@ -4923,36 +4949,29 @@ class MatDate {
|
|
|
4923
4949
|
this.markForCheck();
|
|
4924
4950
|
}
|
|
4925
4951
|
}
|
|
4926
|
-
onFormChange(dayValue) {
|
|
4927
|
-
if (this.writing)
|
|
4928
|
-
return; // Skip if call by self
|
|
4929
|
-
this.writing = true;
|
|
4930
|
-
// Make to remove placeholder chars
|
|
4931
|
-
while (dayValue && dayValue.indexOf(this.placeholderChar) !== -1) {
|
|
4932
|
-
dayValue = dayValue.replace(this.placeholderChar, '');
|
|
4933
|
-
}
|
|
4934
|
-
let date;
|
|
4935
|
-
// Parse day string
|
|
4936
|
-
date = dayValue && this.dateAdapter.parse(dayValue, this.dayPattern) || null;
|
|
4937
|
-
// Reset time
|
|
4938
|
-
date = date && date.utc(true).hour(0).minute(0).seconds(0).millisecond(0);
|
|
4939
|
-
// update date picker
|
|
4940
|
-
this._value = date && this.dateAdapter.parse(date.clone(), DATE_ISO_PATTERN);
|
|
4941
|
-
// Get the model value
|
|
4942
|
-
const dateStr = date && date.isValid() && this.dateAdapter.format(date, DATE_ISO_PATTERN).replace('+00:00', 'Z') || date;
|
|
4943
|
-
//console.debug("[mat-date-time] Setting date: ", dateStr);
|
|
4944
|
-
this.formControl.patchValue(dateStr, { emitEvent: false });
|
|
4945
|
-
//this.formControl.updateValueAndValidity();
|
|
4946
|
-
this.writing = false;
|
|
4947
|
-
this.markForCheck();
|
|
4948
|
-
this._onChangeCallback(dateStr);
|
|
4949
|
-
}
|
|
4950
4952
|
checkIfTouched() {
|
|
4951
4953
|
if (this.dayControl.touched) {
|
|
4952
|
-
this.markForCheck();
|
|
4953
4954
|
this._onTouchedCallback();
|
|
4955
|
+
this.markForCheck();
|
|
4954
4956
|
}
|
|
4955
4957
|
}
|
|
4958
|
+
onFormChange(dayStr) {
|
|
4959
|
+
if (this._writing)
|
|
4960
|
+
return; // Skip if call by self
|
|
4961
|
+
this._writing = true;
|
|
4962
|
+
// Make to remove placeholder chars
|
|
4963
|
+
while (dayStr && dayStr.indexOf(this.placeholderChar) !== -1) {
|
|
4964
|
+
dayStr = dayStr.replace(this.placeholderChar, '');
|
|
4965
|
+
}
|
|
4966
|
+
// Parse day
|
|
4967
|
+
let date = dayStr && this.dateAdapter.parse(dayStr, this.dayPattern);
|
|
4968
|
+
// Move to the expected TZ (keeping local hour - e.g. midnight)
|
|
4969
|
+
date = date && (this.timezone ? date.tz(this.timezone, true) : date);
|
|
4970
|
+
date = date === null || date === void 0 ? void 0 : date.startOf('day').utc(); // Convert local date into utc (avoid TZ offset to be in the final string)
|
|
4971
|
+
// Set model value
|
|
4972
|
+
this.emitChange(date);
|
|
4973
|
+
this._writing = false;
|
|
4974
|
+
}
|
|
4956
4975
|
waitKeyboardHide(waitKeyboardDelay) {
|
|
4957
4976
|
return __awaiter(this, void 0, void 0, function* () {
|
|
4958
4977
|
if (!this.keyboard || !this.keyboard.isVisible)
|
|
@@ -4962,11 +4981,23 @@ class MatDate {
|
|
|
4962
4981
|
// Wait hide occur
|
|
4963
4982
|
yield this.keyboard.onKeyboardHide().pipe(first()).toPromise();
|
|
4964
4983
|
// Wait an additional delay if need (depending on the OS)
|
|
4965
|
-
if (this.
|
|
4966
|
-
yield sleep(this.
|
|
4984
|
+
if (this._keyboardHideDelay > 0 && waitKeyboardDelay) {
|
|
4985
|
+
yield sleep(this._keyboardHideDelay);
|
|
4967
4986
|
}
|
|
4968
4987
|
});
|
|
4969
4988
|
}
|
|
4989
|
+
emitChange(value) {
|
|
4990
|
+
// Get the model value
|
|
4991
|
+
const dateStr = toDateISOString(value) || null;
|
|
4992
|
+
if (this.formControl.value !== dateStr) {
|
|
4993
|
+
// DEBUG
|
|
4994
|
+
//console.debug('[matèdate-time] Emit new value: ' + dateStr);
|
|
4995
|
+
// Changes comes from inside function: use the callback
|
|
4996
|
+
this._onChangeCallback(dateStr);
|
|
4997
|
+
// Check if need to update controls
|
|
4998
|
+
this.checkIfTouched();
|
|
4999
|
+
}
|
|
5000
|
+
}
|
|
4970
5001
|
updateTabIndex() {
|
|
4971
5002
|
if (isNil(this._tabindex) || this._tabindex === -1)
|
|
4972
5003
|
return; // skip
|
|
@@ -4978,6 +5009,14 @@ class MatDate {
|
|
|
4978
5009
|
this.markForCheck();
|
|
4979
5010
|
});
|
|
4980
5011
|
}
|
|
5012
|
+
markAsTouched(opts) {
|
|
5013
|
+
this.dayControl.markAsTouched(opts);
|
|
5014
|
+
this._onTouchedCallback();
|
|
5015
|
+
this.markForCheck();
|
|
5016
|
+
}
|
|
5017
|
+
markAsDirty(opts) {
|
|
5018
|
+
this.formControl.markAsDirty(opts);
|
|
5019
|
+
}
|
|
4981
5020
|
markForCheck() {
|
|
4982
5021
|
this.cd.markForCheck();
|
|
4983
5022
|
}
|
|
@@ -4985,7 +5024,7 @@ class MatDate {
|
|
|
4985
5024
|
MatDate.decorators = [
|
|
4986
5025
|
{ type: Component, args: [{
|
|
4987
5026
|
selector: 'mat-date-field',
|
|
4988
|
-
template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly else writable\">\n <input matInput hidden type=\"text\"
|
|
5027
|
+
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 (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\"></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",
|
|
4989
5028
|
providers: [
|
|
4990
5029
|
DEFAULT_VALUE_ACCESSOR$5,
|
|
4991
5030
|
],
|
|
@@ -5003,19 +5042,20 @@ MatDate.ctorParameters = () => [
|
|
|
5003
5042
|
{ type: FormGroupDirective, decorators: [{ type: Optional }] }
|
|
5004
5043
|
];
|
|
5005
5044
|
MatDate.propDecorators = {
|
|
5006
|
-
disabled: [{ type: Input }],
|
|
5007
5045
|
formControl: [{ type: Input }],
|
|
5008
5046
|
formControlName: [{ type: Input }],
|
|
5009
5047
|
placeholder: [{ type: Input }],
|
|
5010
5048
|
floatLabel: [{ type: Input }],
|
|
5011
|
-
readonly: [{ type: Input }],
|
|
5012
5049
|
required: [{ type: Input }],
|
|
5050
|
+
mobile: [{ type: Input }],
|
|
5013
5051
|
compact: [{ type: Input }],
|
|
5014
5052
|
placeholderChar: [{ type: Input }],
|
|
5015
5053
|
autofocus: [{ type: Input }],
|
|
5016
|
-
tabindex: [{ type: Input }],
|
|
5017
5054
|
startDate: [{ type: Input }],
|
|
5018
5055
|
clearable: [{ type: Input }],
|
|
5056
|
+
timezone: [{ type: Input }],
|
|
5057
|
+
readonly: [{ type: Input }],
|
|
5058
|
+
tabindex: [{ type: Input }],
|
|
5019
5059
|
datePicker: [{ type: ViewChild, args: ['datePicker',] }],
|
|
5020
5060
|
matInputs: [{ type: ViewChildren, args: ['matInput',] }]
|
|
5021
5061
|
};
|
|
@@ -5028,8 +5068,7 @@ const DEFAULT_VALUE_ACCESSOR$4 = {
|
|
|
5028
5068
|
const DAY_MASK$1 = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
|
|
5029
5069
|
const HOUR_REGEXP = /^[012][0-9][:][012345][0-9]$/;
|
|
5030
5070
|
const HOUR_MASK$1 = [/[012]/, /\d/, ':', /[012345]/, /\d/];
|
|
5031
|
-
const noop$5 = () => {
|
|
5032
|
-
};
|
|
5071
|
+
const noop$5 = () => { };
|
|
5033
5072
|
const ɵ0$8 = noop$5;
|
|
5034
5073
|
class MatDateTime {
|
|
5035
5074
|
constructor(platform, dateAdapter, translate, formBuilder, cd, keyboard, formGroupDir) {
|
|
@@ -5043,8 +5082,8 @@ class MatDateTime {
|
|
|
5043
5082
|
this._onChangeCallback = noop$5;
|
|
5044
5083
|
this._onTouchedCallback = noop$5;
|
|
5045
5084
|
this._subscription = new Subscription();
|
|
5046
|
-
this.
|
|
5047
|
-
this.
|
|
5085
|
+
this._writing = true;
|
|
5086
|
+
this._disabling = false;
|
|
5048
5087
|
this._readonly = false;
|
|
5049
5088
|
this.dayMask = DAY_MASK$1;
|
|
5050
5089
|
this.hourMask = HOUR_MASK$1;
|
|
@@ -5077,7 +5116,7 @@ class MatDateTime {
|
|
|
5077
5116
|
}
|
|
5078
5117
|
ngOnInit() {
|
|
5079
5118
|
this.mobile = isNil(this.mobile) ? this.platform.is('mobile') : this.mobile;
|
|
5080
|
-
this.
|
|
5119
|
+
this._keyboardHideDelay = this.mobile && KEYBOARD_HIDE_DELAY_MS || 0;
|
|
5081
5120
|
this.formControl = this.formControl || this.formControlName && this.formGroupDir && this.formGroupDir.form.get(this.formControlName);
|
|
5082
5121
|
if (!this.formControl)
|
|
5083
5122
|
throw new Error('Missing mandatory attribute \'formControl\' or \'formControlName\' in <mat-date-time-field>.');
|
|
@@ -5104,19 +5143,19 @@ class MatDateTime {
|
|
|
5104
5143
|
.subscribe((event) => this.onFormChange(event)));
|
|
5105
5144
|
// Listen status changes (when done outside the component - e.g. when setErrors() is calling on the formControl)
|
|
5106
5145
|
this._subscription.add(this.formControl.statusChanges
|
|
5107
|
-
.pipe(filter((_) => !this.readonly && !this.
|
|
5146
|
+
.pipe(filter((_) => !this.readonly && !this._writing && !this._disabling) // Skip
|
|
5108
5147
|
)
|
|
5109
5148
|
.subscribe(() => this.markForCheck()));
|
|
5110
5149
|
this.updateTabIndex();
|
|
5111
|
-
this.
|
|
5150
|
+
this._writing = false;
|
|
5112
5151
|
}
|
|
5113
5152
|
ngOnDestroy() {
|
|
5114
5153
|
this._subscription.unsubscribe();
|
|
5115
5154
|
}
|
|
5116
5155
|
writeValue(valueStr) {
|
|
5117
|
-
if (this.
|
|
5156
|
+
if (this._writing)
|
|
5118
5157
|
return; // Skip
|
|
5119
|
-
this.
|
|
5158
|
+
this._writing = true;
|
|
5120
5159
|
// DEBUG
|
|
5121
5160
|
// console.debug("[mat-date-time] writeValue() with:", valueStr);
|
|
5122
5161
|
const value = fromDateISOString(valueStr);
|
|
@@ -5125,10 +5164,10 @@ class MatDateTime {
|
|
|
5125
5164
|
this.timeFormControl.patchValue(null, { emitEvent: false });
|
|
5126
5165
|
}
|
|
5127
5166
|
else {
|
|
5128
|
-
//
|
|
5167
|
+
// Format day
|
|
5129
5168
|
const day = value.clone().startOf('day');
|
|
5130
5169
|
const dayStr = this.dateAdapter.format(day, this.dayPattern);
|
|
5131
|
-
//
|
|
5170
|
+
// Format time
|
|
5132
5171
|
// - Format hh
|
|
5133
5172
|
let hour = value.hour();
|
|
5134
5173
|
hour = hour < 10 ? ('0' + hour) : hour;
|
|
@@ -5140,46 +5179,9 @@ class MatDateTime {
|
|
|
5140
5179
|
this.dateFormControl.patchValue(dayStr, { emitEvent: false });
|
|
5141
5180
|
this.timeFormControl.patchValue(timeStr, { emitEvent: false });
|
|
5142
5181
|
}
|
|
5143
|
-
this.
|
|
5182
|
+
this._writing = false;
|
|
5144
5183
|
this.markForCheck();
|
|
5145
5184
|
}
|
|
5146
|
-
onFormChange(event) {
|
|
5147
|
-
if (this.writing)
|
|
5148
|
-
return; // Skip if call by self
|
|
5149
|
-
this.writing = true;
|
|
5150
|
-
let dayStr = this.dateFormControl.value;
|
|
5151
|
-
const time = this.timeFormControl.value;
|
|
5152
|
-
// DEBUG
|
|
5153
|
-
//console.debug(`[mat-date-time] onFormChange() from event: ${event} - controls values: `, [dayStr, time]);
|
|
5154
|
-
const incompleteValue = isNilOrBlank(time) !== isNilOrBlank(dayStr);
|
|
5155
|
-
if (incompleteValue || this.dateFormControl.invalid || this.timeFormControl.invalid) {
|
|
5156
|
-
this.formControl.markAsPending({ onlySelf: true });
|
|
5157
|
-
this.formControl.setErrors(Object.assign(Object.assign(Object.assign({ validDate: incompleteValue }, this.formControl.errors), this.dateFormControl.errors), this.timeFormControl.errors));
|
|
5158
|
-
this.formControl.markAsDirty();
|
|
5159
|
-
// Reset the value
|
|
5160
|
-
//this.emitChange(null);
|
|
5161
|
-
this.writing = false;
|
|
5162
|
-
return;
|
|
5163
|
-
}
|
|
5164
|
-
// Make to remove placeholder chars
|
|
5165
|
-
while (dayStr && dayStr.indexOf(this.placeholderChar) !== -1) {
|
|
5166
|
-
dayStr = dayStr.replace(this.placeholderChar, '');
|
|
5167
|
-
}
|
|
5168
|
-
// Parse day
|
|
5169
|
-
const day = dayStr && this.dateAdapter.parse(dayStr, this.dayPattern) || null;
|
|
5170
|
-
// Parse time
|
|
5171
|
-
const hourParts = (time || '').split(':');
|
|
5172
|
-
const hour = parseInt(hourParts[0] || 0);
|
|
5173
|
-
const minutes = parseInt(hourParts[1] || 0);
|
|
5174
|
-
const dateTime = day && day
|
|
5175
|
-
.locale(this.locale) // set as time as locale time
|
|
5176
|
-
.hour(hour).minute(minutes) // Set local hour
|
|
5177
|
-
.seconds(0).millisecond(0) // Reset seconds/millisecond
|
|
5178
|
-
.utc(); // Convert to UTC (avoid TZ offset in final string)
|
|
5179
|
-
// Set model value
|
|
5180
|
-
this.emitChange(dateTime);
|
|
5181
|
-
this.writing = false;
|
|
5182
|
-
}
|
|
5183
5185
|
registerOnChange(fn) {
|
|
5184
5186
|
this._onChangeCallback = fn;
|
|
5185
5187
|
}
|
|
@@ -5187,9 +5189,9 @@ class MatDateTime {
|
|
|
5187
5189
|
this._onTouchedCallback = fn;
|
|
5188
5190
|
}
|
|
5189
5191
|
setDisabledState(isDisabled) {
|
|
5190
|
-
if (this.
|
|
5192
|
+
if (this._disabling)
|
|
5191
5193
|
return; // Skip
|
|
5192
|
-
this.
|
|
5194
|
+
this._disabling = true;
|
|
5193
5195
|
if (isDisabled) {
|
|
5194
5196
|
this.dateFormControl.disable({ emitEvent: false });
|
|
5195
5197
|
this.timeFormControl.disable({ emitEvent: false });
|
|
@@ -5198,7 +5200,7 @@ class MatDateTime {
|
|
|
5198
5200
|
this.dateFormControl.enable({ emitEvent: false });
|
|
5199
5201
|
this.timeFormControl.enable({ emitEvent: false });
|
|
5200
5202
|
}
|
|
5201
|
-
this.
|
|
5203
|
+
this._disabling = false;
|
|
5202
5204
|
this.markForCheck();
|
|
5203
5205
|
}
|
|
5204
5206
|
onDatePickerChange(event) {
|
|
@@ -5304,6 +5306,43 @@ class MatDateTime {
|
|
|
5304
5306
|
this.markForCheck();
|
|
5305
5307
|
}
|
|
5306
5308
|
}
|
|
5309
|
+
onFormChange(event) {
|
|
5310
|
+
if (this._writing)
|
|
5311
|
+
return; // Skip if call by self
|
|
5312
|
+
this._writing = true;
|
|
5313
|
+
let dayStr = this.dateFormControl.value;
|
|
5314
|
+
const time = this.timeFormControl.value;
|
|
5315
|
+
// DEBUG
|
|
5316
|
+
//console.debug(`[mat-date-time] onFormChange() from event: ${event} - controls values: `, [dayStr, time]);
|
|
5317
|
+
const incompleteValue = isNilOrBlank(time) !== isNilOrBlank(dayStr);
|
|
5318
|
+
if (incompleteValue || this.dateFormControl.invalid || this.timeFormControl.invalid) {
|
|
5319
|
+
this.formControl.markAsPending({ onlySelf: true });
|
|
5320
|
+
this.formControl.setErrors(Object.assign(Object.assign(Object.assign({ validDate: incompleteValue }, this.formControl.errors), this.dateFormControl.errors), this.timeFormControl.errors));
|
|
5321
|
+
this.formControl.markAsDirty();
|
|
5322
|
+
// Reset the value
|
|
5323
|
+
//this.emitChange(null);
|
|
5324
|
+
this._writing = false;
|
|
5325
|
+
return;
|
|
5326
|
+
}
|
|
5327
|
+
// Make to remove placeholder chars
|
|
5328
|
+
while (dayStr && dayStr.indexOf(this.placeholderChar) !== -1) {
|
|
5329
|
+
dayStr = dayStr.replace(this.placeholderChar, '');
|
|
5330
|
+
}
|
|
5331
|
+
// Parse day
|
|
5332
|
+
const day = dayStr && this.dateAdapter.parse(dayStr, this.dayPattern) || null;
|
|
5333
|
+
// Parse time
|
|
5334
|
+
const hourParts = (time || '').split(':');
|
|
5335
|
+
const hour = parseInt(hourParts[0] || 0);
|
|
5336
|
+
const minutes = parseInt(hourParts[1] || 0);
|
|
5337
|
+
const dateTime = day && day
|
|
5338
|
+
.locale(this.locale) // set as time as locale time
|
|
5339
|
+
.hour(hour).minute(minutes) // Set local hour
|
|
5340
|
+
.seconds(0).millisecond(0) // Reset seconds/millisecond
|
|
5341
|
+
.utc(); // Convert to UTC (avoid TZ offset in final string)
|
|
5342
|
+
// Set model value
|
|
5343
|
+
this.emitChange(dateTime);
|
|
5344
|
+
this._writing = false;
|
|
5345
|
+
}
|
|
5307
5346
|
waitKeyboardHide(waitKeyboardDelay) {
|
|
5308
5347
|
return __awaiter(this, void 0, void 0, function* () {
|
|
5309
5348
|
if (!this.keyboard || !this.keyboard.isVisible)
|
|
@@ -5313,8 +5352,8 @@ class MatDateTime {
|
|
|
5313
5352
|
// Wait hide occur
|
|
5314
5353
|
yield this.keyboard.onKeyboardHide().pipe(first()).toPromise();
|
|
5315
5354
|
// Wait an additional delay if need (depending on the OS)
|
|
5316
|
-
if (this.
|
|
5317
|
-
yield sleep(this.
|
|
5355
|
+
if (this._keyboardHideDelay > 0 && waitKeyboardDelay) {
|
|
5356
|
+
yield sleep(this._keyboardHideDelay);
|
|
5318
5357
|
}
|
|
5319
5358
|
});
|
|
5320
5359
|
}
|
|
@@ -5341,9 +5380,9 @@ class MatDateTime {
|
|
|
5341
5380
|
this.markForCheck();
|
|
5342
5381
|
});
|
|
5343
5382
|
}
|
|
5344
|
-
markAsTouched() {
|
|
5345
|
-
this.dateFormControl.markAsTouched();
|
|
5346
|
-
this.timeFormControl.markAsTouched();
|
|
5383
|
+
markAsTouched(opts) {
|
|
5384
|
+
this.dateFormControl.markAsTouched(opts);
|
|
5385
|
+
this.timeFormControl.markAsTouched(opts);
|
|
5347
5386
|
this._onTouchedCallback();
|
|
5348
5387
|
this.markForCheck();
|
|
5349
5388
|
}
|
|
@@ -5357,7 +5396,7 @@ class MatDateTime {
|
|
|
5357
5396
|
MatDateTime.decorators = [
|
|
5358
5397
|
{ type: Component, args: [{
|
|
5359
5398
|
selector: 'mat-date-time-field',
|
|
5360
|
-
template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n class=\"mat-form-field-disabled\">\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput hidden type=\"text\"\n readonly\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\">\n <ion-text>{{formControl.value|dateFormat: {pattern: displayPattern} }}</ion-text>\n</mat-form-field>\n\n<!-- writable + time -->\n<ng-template #writable >\n <ion-grid class=\"ion-no-padding\">\n <ion-row class=\"ion-no-padding no-wrap\" nowrap>\n\n <!-- day -->\n <ion-col class=\"day ion-no-padding\">\n <mat-form-field [floatLabel]=\"floatLabel\"\n [class.mat-form-field-invalid]=\"formControl.touched && formControl.invalid\">\n\n <mat-label>{{placeholder}}</mat-label>\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"!mobile\"\n [formControl]=\"dateFormControl\"\n [textMask]=\"{mask: dayMask, keepCharPositions: true, placeholderChar: placeholderChar}\"\n [placeholder]=\"'COMMON.DATE_PLACEHOLDER'|translate\"\n (blur)=\"checkIfTouched()\"\n (keyup.arrowdown)=\"openDatePicker($event, datePicker)\"\n (keyup.escape)=\"preventEvent($event)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n [appAutofocus]=\"autofocus\">\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"mobile\"\n [formControl]=\"dateFormControl\"\n (click)=\"openDatePickerIfMobile($event, datePicker)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n readonly>\n <input matInput type=\"text\" [formControl]=\"formControl\"\n hidden\n [matDatepicker]=\"datePicker\"\n (dateChange)=\"onDatePickerChange($event)\">\n\n <button type=\"button\" mat-icon-button tabindex=\"-1\" matSuffix
|
|
5399
|
+
template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n class=\"mat-form-field-disabled\">\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput hidden type=\"text\"\n readonly\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\">\n <ion-text>{{formControl.value|dateFormat: {pattern: displayPattern} }}</ion-text>\n</mat-form-field>\n\n<!-- writable + time -->\n<ng-template #writable >\n <ion-grid class=\"ion-no-padding\">\n <ion-row class=\"ion-no-padding no-wrap\" nowrap>\n\n <!-- day -->\n <ion-col class=\"day ion-no-padding\">\n <mat-form-field [floatLabel]=\"floatLabel\"\n [class.mat-form-field-invalid]=\"formControl.touched && formControl.invalid\">\n\n <mat-label>{{placeholder}}</mat-label>\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"!mobile\"\n [formControl]=\"dateFormControl\"\n [textMask]=\"{mask: dayMask, keepCharPositions: true, placeholderChar: placeholderChar}\"\n [placeholder]=\"'COMMON.DATE_PLACEHOLDER'|translate\"\n (blur)=\"checkIfTouched()\"\n (keyup.arrowdown)=\"openDatePicker($event, datePicker)\"\n (keyup.escape)=\"preventEvent($event)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n [appAutofocus]=\"autofocus\">\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n *ngIf=\"mobile\"\n [formControl]=\"dateFormControl\"\n (click)=\"openDatePickerIfMobile($event, datePicker)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n readonly>\n\n <!-- Hide the final input -->\n <input matInput type=\"text\" [formControl]=\"formControl\"\n hidden\n [matDatepicker]=\"datePicker\"\n (dateChange)=\"onDatePickerChange($event)\">\n\n <button type=\"button\" mat-icon-button tabindex=\"-1\" matSuffix\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 && (timeFormControl.invalid || formControl.invalid)\">\n <mat-label *ngIf=\"placeholder && floatLabel != 'never'\" translate>COMMON.TIME</mat-label>\n <input matInput #matInput type=\"text\"\n *ngIf=\"!mobile\"\n [formControl]=\"timeFormControl\"\n autocomplete=\"off\"\n min=\"0\" max=\"23\"\n [textMask]=\"{mask: hourMask, keepCharPositions: true, placeholderChar: placeholderChar, guide: true}\"\n [placeholder]=\"'COMMON.TIME_PLACEHOLDER'|translate\"\n [required]=\"required\"\n (keyup.arrowdown)=\"openTimePicker($event)\"\n (keyup.escape)=\"preventEvent($event)\"\n (blur)=\"checkIfTouched()\"\n [tabindex]=\"tabindex !== undefined ? tabindex+1 : undefined\">\n\n <input matInput #matInput type=\"text\"\n *ngIf=\"mobile\"\n [formControl]=\"timeFormControl\"\n (click)=\"openTimePickerIfMobile($event)\"\n readonly>\n\n <input matInput type=\"text\"\n [formControl]=\"timeFormControl\"\n hidden\n [ngxTimepicker]=\"timePicker\"\n [format]=\"24\">\n\n <button matSuffix type=\"button\" mat-icon-button\n tabindex=\"-1\"\n *ngIf=\"!compact && !mobile\"\n [disabled]=\"formControl.disabled\"\n (click)=\"openTimePicker($event)\" >\n <mat-icon>keyboard_arrow_down</mat-icon>\n </button>\n <button matSuffix type=\"button\" mat-icon-button\n tabindex=\"-1\"\n *ngIf=\"!compact && mobile\"\n [disabled]=\"formControl.disabled\"\n (click)=\"openTimePickerIfMobile($event)\">\n <mat-icon>access_time</mat-icon>\n </button>\n\n <ngx-material-timepicker #timePicker [@.disabled]=\"true\"\n (timeSet)=\"onTimePickerChange($event)\"\n [ESC]=\"!mobile\"\n [defaultTime]=\"'00:00'\"\n [cancelBtnTmpl]=\"timePickerCancelButton\"\n [confirmBtnTmpl]=\"timePickerOkButton\"\n [preventOverlayClick]=\"mobile\"\n [enableKeyboardInput]=\"false\"\n [disableAnimation]=\"true\">\n <!-- cancel button -->\n <ng-template #timePickerCancelButton>\n <ion-button fill=\"clear\" color=\"dark\">\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n </ng-template>\n\n <!-- confirm button -->\n <ng-template #timePickerOkButton>\n <ion-button fill=\"solid\" color=\"tertiary\">\n <ion-label translate>COMMON.BTN_VALIDATE</ion-label>\n </ion-button>\n </ng-template>\n\n </ngx-material-timepicker>\n </mat-form-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n\n</ng-template>\n\n<ng-template #iconDesktop>\n <mat-icon>keyboard_arrow_down</mat-icon>\n</ng-template>\n\n<ng-template #iconDate>\n <mat-icon>date_range</mat-icon>\n</ng-template>\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n",
|
|
5361
5400
|
providers: [
|
|
5362
5401
|
DEFAULT_VALUE_ACCESSOR$4,
|
|
5363
5402
|
],
|
|
@@ -10253,7 +10292,7 @@ SelectPeerModal.propDecorators = {
|
|
|
10253
10292
|
onRefresh: [{ type: Input }]
|
|
10254
10293
|
};
|
|
10255
10294
|
|
|
10256
|
-
const moment$
|
|
10295
|
+
const moment$4 = momentImported;
|
|
10257
10296
|
const SETTINGS_STORAGE_KEY = 'settings';
|
|
10258
10297
|
const SETTINGS_TRANSIENT_PROPERTIES = ['mobile', 'touchUi' /*deprecated*/];
|
|
10259
10298
|
// fixme: this constant points to static environment
|
|
@@ -10496,11 +10535,11 @@ class LocalSettingsService extends StartableService {
|
|
|
10496
10535
|
if (!feature) {
|
|
10497
10536
|
feature = {
|
|
10498
10537
|
name: featureName.toLowerCase(),
|
|
10499
|
-
lastSyncDate: moment$
|
|
10538
|
+
lastSyncDate: moment$4().toISOString()
|
|
10500
10539
|
};
|
|
10501
10540
|
}
|
|
10502
10541
|
else {
|
|
10503
|
-
feature.lastSyncDate = moment$
|
|
10542
|
+
feature.lastSyncDate = moment$4().toISOString();
|
|
10504
10543
|
}
|
|
10505
10544
|
this.saveOfflineFeature(feature);
|
|
10506
10545
|
}
|
|
@@ -10661,7 +10700,7 @@ class LocalSettingsService extends StartableService {
|
|
|
10661
10700
|
if (!page || !page.title || !page.path)
|
|
10662
10701
|
throw Error('Missing required argument \'page\', \'page.path\' or \'page.title\'');
|
|
10663
10702
|
// Set time
|
|
10664
|
-
page.time = page.time || moment$
|
|
10703
|
+
page.time = page.time || moment$4();
|
|
10665
10704
|
// Clean the title (remove <small> tags)
|
|
10666
10705
|
if (!opts || opts.removeTitleSmallTag !== false) {
|
|
10667
10706
|
const tagIndex = page.title.indexOf('</small>');
|
|
@@ -15488,7 +15527,7 @@ ConfigService.ctorParameters = () => [
|
|
|
15488
15527
|
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [APP_CONFIG_OPTIONS,] }] }
|
|
15489
15528
|
];
|
|
15490
15529
|
|
|
15491
|
-
const moment$
|
|
15530
|
+
const moment$3 = momentImported;
|
|
15492
15531
|
class PlatformService extends StartableService {
|
|
15493
15532
|
constructor(platform, cdkPlatform, toastController, translate, dateAdapter, entitiesStorage, settings, networkService, accountService, configService, cache, storage, audioProvider, environment, statusBar, keyboard, splashScreen, browser, downloader) {
|
|
15494
15533
|
super(platform);
|
|
@@ -15712,16 +15751,16 @@ class PlatformService extends StartableService {
|
|
|
15712
15751
|
}
|
|
15713
15752
|
// config moment lib
|
|
15714
15753
|
try {
|
|
15715
|
-
moment$
|
|
15754
|
+
moment$3.locale(event.lang);
|
|
15716
15755
|
console.debug('[platform] Use locale {' + event.lang + '}');
|
|
15717
15756
|
}
|
|
15718
15757
|
// If error, fallback to en
|
|
15719
15758
|
catch (err) {
|
|
15720
|
-
moment$
|
|
15759
|
+
moment$3.locale('en');
|
|
15721
15760
|
console.warn('[platform] Unknown local for moment lib. Using default [en]');
|
|
15722
15761
|
}
|
|
15723
15762
|
// Config date adapter
|
|
15724
|
-
this.dateAdapter.setLocale(moment$
|
|
15763
|
+
this.dateAdapter.setLocale(moment$3.locale());
|
|
15725
15764
|
}
|
|
15726
15765
|
});
|
|
15727
15766
|
this.settings.onChange.subscribe(data => {
|
|
@@ -25808,13 +25847,13 @@ LatLongTestPage.ctorParameters = () => [
|
|
|
25808
25847
|
{ type: FormBuilder }
|
|
25809
25848
|
];
|
|
25810
25849
|
|
|
25811
|
-
const moment$
|
|
25850
|
+
const moment$2 = momentImported;
|
|
25812
25851
|
class SwipeTestPage {
|
|
25813
25852
|
constructor(formBuilder, dateFormatPipe) {
|
|
25814
25853
|
this.formBuilder = formBuilder;
|
|
25815
25854
|
this.dateFormatPipe = dateFormatPipe;
|
|
25816
25855
|
this.$dates = new BehaviorSubject(undefined);
|
|
25817
|
-
this._today = moment$
|
|
25856
|
+
this._today = moment$2().startOf('day');
|
|
25818
25857
|
this.form = formBuilder.group({
|
|
25819
25858
|
empty: [null, Validators.required],
|
|
25820
25859
|
date: [null, Validators.compose([Validators.required, SharedValidators.validDate])],
|
|
@@ -25827,7 +25866,7 @@ class SwipeTestPage {
|
|
|
25827
25866
|
ngOnInit() {
|
|
25828
25867
|
const dates = [];
|
|
25829
25868
|
for (let d = 0; d < 7; d++) {
|
|
25830
|
-
dates[d] = moment$
|
|
25869
|
+
dates[d] = moment$2(this._today).add(d - 3, 'day');
|
|
25831
25870
|
}
|
|
25832
25871
|
this.$dates.next(dates);
|
|
25833
25872
|
this.loadData();
|
|
@@ -25868,7 +25907,7 @@ SwipeTestPage.ctorParameters = () => [
|
|
|
25868
25907
|
{ type: DateFormatPipe }
|
|
25869
25908
|
];
|
|
25870
25909
|
|
|
25871
|
-
const moment = momentImported;
|
|
25910
|
+
const moment$1 = momentImported;
|
|
25872
25911
|
class DateTimeTestPage {
|
|
25873
25912
|
constructor(platform, formBuilder, cd) {
|
|
25874
25913
|
this.platform = platform;
|
|
@@ -25900,7 +25939,7 @@ class DateTimeTestPage {
|
|
|
25900
25939
|
// Load the form with data
|
|
25901
25940
|
loadData() {
|
|
25902
25941
|
return __awaiter(this, void 0, void 0, function* () {
|
|
25903
|
-
const now = moment();
|
|
25942
|
+
const now = moment$1();
|
|
25904
25943
|
const data = {
|
|
25905
25944
|
empty: toDateISOString(now.clone().add(2, 'hours')),
|
|
25906
25945
|
enable: toDateISOString(now),
|
|
@@ -26144,9 +26183,110 @@ NumpadTestPage.ctorParameters = () => [
|
|
|
26144
26183
|
{ type: FormBuilder }
|
|
26145
26184
|
];
|
|
26146
26185
|
|
|
26186
|
+
const moment = momentImported;
|
|
26187
|
+
class DateTestPage {
|
|
26188
|
+
constructor(platform, formBuilder, cd) {
|
|
26189
|
+
this.platform = platform;
|
|
26190
|
+
this.formBuilder = formBuilder;
|
|
26191
|
+
this.cd = cd;
|
|
26192
|
+
this.showLogPanel = true;
|
|
26193
|
+
this.logContent = '';
|
|
26194
|
+
this.memoryHide = false;
|
|
26195
|
+
this.memoryMobile = true;
|
|
26196
|
+
this.timezone = 'Indian/Mahe';
|
|
26197
|
+
this.stringify = JSON.stringify;
|
|
26198
|
+
this.form = formBuilder.group({
|
|
26199
|
+
empty: [null, Validators.required],
|
|
26200
|
+
enable: [null, Validators.required],
|
|
26201
|
+
disable: [null, Validators.required],
|
|
26202
|
+
readonly: [null],
|
|
26203
|
+
timezone: [null]
|
|
26204
|
+
}, {
|
|
26205
|
+
validators: SharedFormGroupValidators.dateRange('empty', 'enable')
|
|
26206
|
+
});
|
|
26207
|
+
const disableControl = this.form.get('disable');
|
|
26208
|
+
disableControl.disable();
|
|
26209
|
+
// Copy the 'enable' value, into the disable control
|
|
26210
|
+
this.form.get('enable').valueChanges.subscribe(value => disableControl.setValue(value));
|
|
26211
|
+
const mobile = platform.is('mobile');
|
|
26212
|
+
this.showLogPanel = this.showLogPanel || mobile;
|
|
26213
|
+
}
|
|
26214
|
+
ngOnInit() {
|
|
26215
|
+
setTimeout(() => this.loadData(), 250);
|
|
26216
|
+
}
|
|
26217
|
+
// Load the form with data
|
|
26218
|
+
loadData() {
|
|
26219
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
26220
|
+
const now = moment();
|
|
26221
|
+
const nowAtMahe = now.clone().tz(this.timezone).startOf('day');
|
|
26222
|
+
const data = {
|
|
26223
|
+
empty: toDateISOString(now.clone().add(2, 'hours')),
|
|
26224
|
+
enable: toDateISOString(now),
|
|
26225
|
+
disable: now.clone(),
|
|
26226
|
+
readonly: now.clone(),
|
|
26227
|
+
timezone: nowAtMahe
|
|
26228
|
+
};
|
|
26229
|
+
this.form.setValue(data);
|
|
26230
|
+
this.log('[test-page] Data loaded: ' + JSON.stringify(data));
|
|
26231
|
+
this.form.get('empty').valueChanges
|
|
26232
|
+
.pipe(debounceTime(300))
|
|
26233
|
+
.subscribe(value => this.log('[test-page] Value n°1: ' + JSON.stringify(value)));
|
|
26234
|
+
this.form.get('enable').valueChanges
|
|
26235
|
+
.pipe(debounceTime(300))
|
|
26236
|
+
.subscribe(value => this.log('[test-page] Value n°2: ' + JSON.stringify(value)));
|
|
26237
|
+
this.form.get('timezone').valueChanges
|
|
26238
|
+
.pipe(debounceTime(300))
|
|
26239
|
+
.subscribe(value => this.log('[test-page] Value with timezone: ' + JSON.stringify(value)));
|
|
26240
|
+
});
|
|
26241
|
+
}
|
|
26242
|
+
doSubmit(event) {
|
|
26243
|
+
this.form.markAllAsTouched();
|
|
26244
|
+
this.log('[test-page] Form content: ' + JSON.stringify(this.form.value));
|
|
26245
|
+
this.log('[test-page] Form status: ' + this.form.status);
|
|
26246
|
+
if (this.form.invalid) {
|
|
26247
|
+
this.log('[test-page] Form errors: ' + JSON.stringify(this.form.errors));
|
|
26248
|
+
// DEBUG
|
|
26249
|
+
AppFormUtils.logFormErrors(this.form);
|
|
26250
|
+
}
|
|
26251
|
+
}
|
|
26252
|
+
log(message) {
|
|
26253
|
+
console.debug(message);
|
|
26254
|
+
if (this.showLogPanel) {
|
|
26255
|
+
this.logContent += message + '<br/>';
|
|
26256
|
+
this.cd.markForCheck();
|
|
26257
|
+
}
|
|
26258
|
+
}
|
|
26259
|
+
clearLogPanel() {
|
|
26260
|
+
this.logContent = '';
|
|
26261
|
+
this.cd.markForCheck();
|
|
26262
|
+
}
|
|
26263
|
+
startMemoryTimer() {
|
|
26264
|
+
this.memoryTimer = setInterval(() => {
|
|
26265
|
+
this.memoryHide = !this.memoryHide;
|
|
26266
|
+
}, 50);
|
|
26267
|
+
}
|
|
26268
|
+
stopMemoryTimer() {
|
|
26269
|
+
clearInterval(this.memoryTimer);
|
|
26270
|
+
this.memoryTimer = null;
|
|
26271
|
+
this.memoryHide = false;
|
|
26272
|
+
}
|
|
26273
|
+
}
|
|
26274
|
+
DateTestPage.decorators = [
|
|
26275
|
+
{ type: Component, args: [{
|
|
26276
|
+
selector: 'app-data-test',
|
|
26277
|
+
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>Date/Time field test page</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\">\n\n <form class=\"form-container\" [formGroup]=\"form\" (ngSubmit)=\"doSubmit($event)\">\n\n <ion-grid>\n\n <!-- debugging memory leak -->\n <ion-row><ion-col><ion-text><h4>Debug memory leak</h4></ion-text></ion-col></ion-row>\n <ion-row>\n <ion-col size=\"2\">\n <ion-button *ngIf=\"!memoryTimer\" (click)=\"startMemoryTimer()\">Start timer</ion-button>\n <ion-button *ngIf=\"memoryTimer\" (click)=\"stopMemoryTimer()\">Stop timer</ion-button>\n </ion-col>\n <ion-col size=\"2\">\n <mat-form-field floatLabel=\"never\">\n <input matInput type=\"text\" hidden>\n <mat-checkbox (change)=\"memoryMobile=$event.checked\" [value]=\"memoryMobile\">\n Mobile ?\n </mat-checkbox>\n </mat-form-field>\n </ion-col>\n <ion-col>\n <mat-date-field formControlName=\"empty\"\n *ngIf=\"!memoryHide\"\n placeholder=\"Date/Time\"\n [required]=\"true\"\n [mobile]=\"memoryMobile\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n </ion-col>\n </ion-row>\n\n <!-- Mobile mode -->\n <ion-row><ion-col><ion-text><h4>Mobile mode</h4></ion-text></ion-col></ion-row>\n <ion-row>\n <ion-col>\n\n <!-- Empty value -->\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Empty value\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.empty.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-field formControlName=\"empty\"\n placeholder=\"Date/Time\"\n [required]=\"true\"\n [mobile]=\"true\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Enable -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n With value\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.enable.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-field formControlName=\"enable\"\n placeholder=\"Date/Time\"\n [required]=\"true\"\n [mobile]=\"true\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Disable -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Disable\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.disable.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-field formControlName=\"disable\"\n placeholder=\"Date/Time\"\n [required]=\"true\"\n [mobile]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n <!-- debug console -->\n <ion-row>\n <!-- buttons -->\n <ion-col size=\"2\">\n <!-- submit form -->\n <ion-button (click)=\"doSubmit($event)\"\n fill=\"outline\">\n <ion-icon name=\"checkmark\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n\n <!-- clear log -->\n <ion-button (click)=\"clearLogPanel()\"\n fill=\"outline\">\n <ion-icon name=\"trash\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-col>\n <ion-col size=\"10\" *ngIf=\"showLogPanel\">\n <ion-text color=\"primary\">Log:<br/></ion-text>\n <div class=\"ion-padding-start\">\n <ion-text color=\"medium\">\n <small [innerHTML]=\"logContent\"></small>\n </ion-text>\n </div>\n </ion-col>\n </ion-row>\n\n <!-- Desktop mode -->\n <ion-row><ion-col><ion-text><h4>Desktop mode</h4></ion-text></ion-col></ion-row>\n <ion-row>\n <ion-col>\n\n <!-- Empty value -->\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Empty value\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.empty.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-field formControlName=\"empty\"\n placeholder=\"Date/Time\"\n [required]=\"true\"\n [mobile]=\"false\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Enable -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n With value\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.enable.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-field formControlName=\"enable\"\n placeholder=\"Date/Time\"\n [required]=\"true\"\n [mobile]=\"false\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Disable -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Disable\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.disable.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-field formControlName=\"disable\"\n placeholder=\"Date/Time\"\n [required]=\"true\"\n [mobile]=\"false\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- TimeZone -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n TimeZone\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>timezone=\"{{timezone}}\" value=\"{{stringify(form.controls.timezone.value)}}\"</pre></small>\n <pre>Should display using the browser TZ,<br/>but serialize/deserialize for the given TZ</pre>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-field #readonlyField formControlName=\"timezone\"\n placeholder=\"Date\"\n [mobile]=\"false\"\n [clearable]=\"true\"\n timezone=\"Indian/Mahe\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Readonly -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Readonly toggle\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.readonly.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-checkbox (change)=\"readonlyField.readonly=$event.checked\" [checked]=\"readonlyField.readonly\">\n </mat-checkbox>\n\n <mat-date-field #readonlyField formControlName=\"readonly\"\n placeholder=\"Date/Time\"\n [readonly]=\"true\"\n [mobile]=\"false\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n </ion-row>\n </ion-grid>\n </form>\n\n</ion-content>\n"
|
|
26278
|
+
},] }
|
|
26279
|
+
];
|
|
26280
|
+
DateTestPage.ctorParameters = () => [
|
|
26281
|
+
{ type: Platform },
|
|
26282
|
+
{ type: FormBuilder },
|
|
26283
|
+
{ type: ChangeDetectorRef }
|
|
26284
|
+
];
|
|
26285
|
+
|
|
26147
26286
|
const SHARED_MATERIAL_TESTING_PAGES = [
|
|
26148
26287
|
{ label: 'Shared Material components', divider: true },
|
|
26149
26288
|
{ label: 'Date/Time field', page: '/testing/shared/datetime' },
|
|
26289
|
+
{ label: 'Date field', page: '/testing/shared/date' },
|
|
26150
26290
|
{ label: 'Autocomplete field', page: '/testing/shared/autocomplete' },
|
|
26151
26291
|
{ label: 'Lat/Long field', page: '/testing/shared/latlong' },
|
|
26152
26292
|
{ label: 'Numeric pad component', page: '/testing/shared/numpad' },
|
|
@@ -26171,6 +26311,11 @@ const routes$4 = [
|
|
|
26171
26311
|
pathMatch: 'full',
|
|
26172
26312
|
component: DateTimeTestPage
|
|
26173
26313
|
},
|
|
26314
|
+
{
|
|
26315
|
+
path: 'date',
|
|
26316
|
+
pathMatch: 'full',
|
|
26317
|
+
component: DateTestPage
|
|
26318
|
+
},
|
|
26174
26319
|
{
|
|
26175
26320
|
path: 'latlong',
|
|
26176
26321
|
pathMatch: 'full',
|
|
@@ -26211,6 +26356,7 @@ MaterialTestingModule.decorators = [
|
|
|
26211
26356
|
],
|
|
26212
26357
|
declarations: [
|
|
26213
26358
|
DateTimeTestPage,
|
|
26359
|
+
DateTestPage,
|
|
26214
26360
|
AutocompleteTestPage,
|
|
26215
26361
|
LatLongTestPage,
|
|
26216
26362
|
NumpadTestPage,
|
|
@@ -26222,6 +26368,7 @@ MaterialTestingModule.decorators = [
|
|
|
26222
26368
|
SharedMaterialModule,
|
|
26223
26369
|
RouterModule,
|
|
26224
26370
|
DateTimeTestPage,
|
|
26371
|
+
DateTestPage,
|
|
26225
26372
|
AutocompleteTestPage,
|
|
26226
26373
|
LatLongTestPage,
|
|
26227
26374
|
NumpadTestPage,
|
|
@@ -26816,5 +26963,5 @@ CoreTestingModule.decorators = [
|
|
|
26816
26963
|
* Generated bundle index. Do not edit.
|
|
26817
26964
|
*/
|
|
26818
26965
|
|
|
26819
|
-
export { APP_ABOUT_DEVELOPERS, APP_ABOUT_PARTNERS, APP_CONFIG_OPTIONS, APP_FORM_ERROR_I18N_KEYS, APP_GRAPHQL_TYPE_POLICIES, APP_HOME_BUTTONS, APP_LOCALES, APP_LOCAL_SETTINGS, APP_LOCAL_SETTINGS_OPTIONS, APP_LOCAL_STORAGE_TYPE_POLICIES, APP_MENU_ITEMS, APP_TESTING_PAGES, AboutModal, Account, AccountPage, AccountService, AccountToStringPipe, ActionsColumnComponent, AdminModule, AdminRoutingModule, Alerts, AnimationState, 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, 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, isDesktop, isEmptyArray, isIOS, isInputElement, isInstanceOf, isInt, isMobile, isNil, isNilOrBlank, isNilOrNaN, isNotEmptyArray, isNotNil, isNotNilOrBlank, isNotNilOrNaN, isNotNilString, isNumber, isNumberRange, isProgressEvent, isResponseEvent, isTouchUi, isWindow, 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,
|
|
26966
|
+
export { APP_ABOUT_DEVELOPERS, APP_ABOUT_PARTNERS, APP_CONFIG_OPTIONS, APP_FORM_ERROR_I18N_KEYS, APP_GRAPHQL_TYPE_POLICIES, APP_HOME_BUTTONS, APP_LOCALES, APP_LOCAL_SETTINGS, APP_LOCAL_SETTINGS_OPTIONS, APP_LOCAL_STORAGE_TYPE_POLICIES, APP_MENU_ITEMS, APP_TESTING_PAGES, AboutModal, Account, AccountPage, AccountService, AccountToStringPipe, ActionsColumnComponent, AdminModule, AdminRoutingModule, Alerts, AnimationState, 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, 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, isDesktop, isEmptyArray, isIOS, isInputElement, isInstanceOf, isInt, isMobile, isNil, isNilOrBlank, isNilOrNaN, isNotEmptyArray, isNotNil, isNotNilOrBlank, isNotNilOrNaN, isNotNilString, isNumber, isNumberRange, isProgressEvent, isResponseEvent, isTouchUi, isWindow, 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 };
|
|
26820
26967
|
//# sourceMappingURL=sumaris-net.ngx-components.js.map
|