@sumaris-net/ngx-components 1.6.7 → 1.6.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/bundles/sumaris-net.ngx-components.umd.js +125 -117
  2. package/bundles/sumaris-net.ngx-components.umd.js.map +1 -1
  3. package/bundles/sumaris-net.ngx-components.umd.min.js +2 -2
  4. package/bundles/sumaris-net.ngx-components.umd.min.js.map +1 -1
  5. package/esm2015/public_api.js +3 -3
  6. package/esm2015/src/app/core/auth/form/form-auth.js +2 -2
  7. package/esm2015/src/app/core/services/model/filter.model.js +1 -1
  8. package/esm2015/src/app/core/services/model/referential.model.js +1 -1
  9. package/esm2015/src/app/core/table/table.class.js +8 -8
  10. package/esm2015/src/app/shared/material/autocomplete/material.autocomplete.js +25 -22
  11. package/esm2015/src/app/shared/material/boolean/material.boolean.js +3 -4
  12. package/esm2015/src/app/shared/material/chips/material.chips.js +21 -9
  13. package/esm2015/src/app/shared/material/datetime/material.date.js +41 -41
  14. package/esm2015/src/app/shared/material/datetime/material.datetime.js +29 -29
  15. package/esm2015/src/app/shared/pipes/translate-context.pipe.js +3 -5
  16. package/fesm2015/sumaris-net.ngx-components.js +123 -111
  17. package/fesm2015/sumaris-net.ngx-components.js.map +1 -1
  18. package/package.json +1 -1
  19. package/public_api.d.ts +2 -2
  20. package/src/app/core/services/model/filter.model.d.ts +1 -1
  21. package/src/app/core/services/model/referential.model.d.ts +3 -3
  22. package/src/app/core/table/table.class.d.ts +4 -4
  23. package/src/app/shared/material/boolean/material.boolean.d.ts +0 -1
  24. package/src/app/shared/material/datetime/material.date.d.ts +6 -6
  25. package/src/app/shared/material/datetime/material.datetime.d.ts +9 -9
  26. package/src/app/shared/pipes/translate-context.pipe.d.ts +1 -1
  27. package/sumaris-net.ngx-components.metadata.json +1 -1
@@ -1,7 +1,7 @@
1
1
  (function (global, factory) {
2
2
  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/common'), require('@angular/cdk/table'), require('@angular/cdk/a11y'), require('@angular/cdk/overlay'), require('@angular/cdk/scrolling'), require('@angular/material/core'), require('@angular/material/table'), require('@angular/material/sort'), require('@angular/material/paginator'), require('@angular/material/form-field'), require('@angular/material/input'), require('@angular/material/checkbox'), require('@angular/material/expansion'), require('@angular/material/toolbar'), require('@angular/material/icon'), require('@angular/material/button'), require('@angular/material/menu'), require('@angular/material/select'), require('@angular/material/card'), require('@angular/material/tabs'), require('@angular/material/stepper'), require('@angular/material/list'), require('@angular/material/button-toggle'), require('@angular/material/progress-spinner'), require('@angular/material/progress-bar'), require('@angular/material/radio'), require('@angular/material/badge'), require('@angular/material/slide-toggle'), require('@angular/material/dialog'), require('@angular/material/autocomplete'), require('@angular/forms'), require('rxjs'), require('rxjs/operators'), require('@ngx-translate/core'), require('@ionic/angular'), require('moment'), require('@angular/material-moment-adapter'), require('@ionic-native/keyboard/ngx'), require('angular2-text-mask'), require('ngx-material-timepicker'), require('@angular/material/datepicker'), require('@angular/animations'), require('@angular/material/divider'), require('@angular/material/tooltip'), require('@angular/material/chips'), require('@angular/router'), require('@angular/platform-browser'), require('@angular/common/http'), require('ngx-color-picker'), require('@ionic-native/native-audio/ngx'), require('@ionic-native/vibration/ngx'), require('@ionic-native/audio-management/ngx'), require('@ionic-native/native-audio/ngx/index'), require('@ionic-native/vibration/ngx/index'), require('@ionic-native/audio-management/ngx/index'), require('uuid/v4'), require('@angular/cdk/drag-drop'), require('ngx-markdown'), require('tweetnacl'), require('@ionic/storage'), require('zone.js/dist/zone-error'), require('@ionic-native/splash-screen/ngx'), require('@ionic-native/network/ngx'), require('ionic-cache'), require('ionic-cache/dist/cache.service'), require('@ionic-native/network/ngx/index'), require('@ionic-native/splash-screen/ngx/index'), require('@ionic-native/status-bar/ngx'), require('@angular/cdk/platform'), require('@ionic-native/in-app-browser/ngx'), require('@apollo/client/core'), require('apollo-angular'), require('@apollo/client/link/ws'), require('@apollo/client/utilities'), require('@apollo/client/link/retry'), require('apollo-link-queue'), require('apollo-link-serialize'), require('apollo-link-logger'), require('apollo-angular/http'), require('apollo3-cache-persist'), require('@ionic-native/downloader/ngx'), require('@ionic-native/status-bar/ngx/index'), require('@ionic-native/keyboard/ngx/index'), require('@ionic-native/in-app-browser/ngx/index'), require('@ionic-native/downloader/ngx/index'), require('@e-is/ngx-material-table'), require('@angular/cdk/collections'), require('ngx-jdenticon'), require('tweetnacl-util'), require('scrypt-async'), require('hammerjs')) :
3
3
  typeof define === 'function' && define.amd ? define('@sumaris-net/ngx-components', ['exports', '@angular/core', '@angular/common', '@angular/cdk/table', '@angular/cdk/a11y', '@angular/cdk/overlay', '@angular/cdk/scrolling', '@angular/material/core', '@angular/material/table', '@angular/material/sort', '@angular/material/paginator', '@angular/material/form-field', '@angular/material/input', '@angular/material/checkbox', '@angular/material/expansion', '@angular/material/toolbar', '@angular/material/icon', '@angular/material/button', '@angular/material/menu', '@angular/material/select', '@angular/material/card', '@angular/material/tabs', '@angular/material/stepper', '@angular/material/list', '@angular/material/button-toggle', '@angular/material/progress-spinner', '@angular/material/progress-bar', '@angular/material/radio', '@angular/material/badge', '@angular/material/slide-toggle', '@angular/material/dialog', '@angular/material/autocomplete', '@angular/forms', 'rxjs', 'rxjs/operators', '@ngx-translate/core', '@ionic/angular', 'moment', '@angular/material-moment-adapter', '@ionic-native/keyboard/ngx', 'angular2-text-mask', 'ngx-material-timepicker', '@angular/material/datepicker', '@angular/animations', '@angular/material/divider', '@angular/material/tooltip', '@angular/material/chips', '@angular/router', '@angular/platform-browser', '@angular/common/http', 'ngx-color-picker', '@ionic-native/native-audio/ngx', '@ionic-native/vibration/ngx', '@ionic-native/audio-management/ngx', '@ionic-native/native-audio/ngx/index', '@ionic-native/vibration/ngx/index', '@ionic-native/audio-management/ngx/index', 'uuid/v4', '@angular/cdk/drag-drop', 'ngx-markdown', 'tweetnacl', '@ionic/storage', 'zone.js/dist/zone-error', '@ionic-native/splash-screen/ngx', '@ionic-native/network/ngx', 'ionic-cache', 'ionic-cache/dist/cache.service', '@ionic-native/network/ngx/index', '@ionic-native/splash-screen/ngx/index', '@ionic-native/status-bar/ngx', '@angular/cdk/platform', '@ionic-native/in-app-browser/ngx', '@apollo/client/core', 'apollo-angular', '@apollo/client/link/ws', '@apollo/client/utilities', '@apollo/client/link/retry', 'apollo-link-queue', 'apollo-link-serialize', 'apollo-link-logger', 'apollo-angular/http', 'apollo3-cache-persist', '@ionic-native/downloader/ngx', '@ionic-native/status-bar/ngx/index', '@ionic-native/keyboard/ngx/index', '@ionic-native/in-app-browser/ngx/index', '@ionic-native/downloader/ngx/index', '@e-is/ngx-material-table', '@angular/cdk/collections', 'ngx-jdenticon', 'tweetnacl-util', 'scrypt-async', 'hammerjs'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global["sumaris-net"] = global["sumaris-net"] || {}, global["sumaris-net"]["ngx-components"] = {}), global.ng.core, global.ng.common, global.ng.cdk.table, global.ng.cdk.a11y, global.ng.cdk.overlay, global.ng.cdk.scrolling, global.ng.material.core, global.ng.material.table, global.ng.material.sort, global.ng.material.paginator, global.ng.material.formField, global.ng.material.input, global.ng.material.checkbox, global.ng.material.expansion, global.ng.material.toolbar, global.ng.material.icon, global.ng.material.button, global.ng.material.menu, global.ng.material.select, global.ng.material.card, global.ng.material.tabs, global.ng.material.stepper, global.ng.material.list, global.ng.material.buttonToggle, global.ng.material.progressSpinner, global.ng.material.progressBar, global.ng.material.radio, global.ng.material.badge, global.ng.material.slideToggle, global.ng.material.dialog, global.ng.material.autocomplete, global.ng.forms, global.rxjs, global.rxjs.operators, global["ngx-translate"].core, global.ionic.angular, global.moment, global.ng.materialMomentAdapter, global["ionic-native"].keyboard.ngx, global["angular2-text-mask"], global["ngx-material-timepicker"], global.ng.material.datepicker, global.ng.animations, global.ng.material.divider, global.ng.material.tooltip, global.ng.material.chips, global.ng.router, global.ng.platformBrowser, global.ng.common.http, global["ngx-color-picker"], global["ionic-native"]["native-audio"].ngx, global["ionic-native"].vibration.ngx, global["ionic-native"]["audio-management"].ngx, global["ionic-native"]["native-audio"].ngx.index, global["ionic-native"].vibration.ngx.index, global["ionic-native"]["audio-management"].ngx.index, global.uuid.v4, global.ng.cdk.dragDrop, global["ngx-markdown"], global.tweetnacl, global.ionic.storage, null, global["ionic-native"]["splash-screen"].ngx, global["ionic-native"].network.ngx, global["ionic-cache"], global["ionic-cache/dist/cache"].service, global["ionic-native"].network.ngx.index, global["ionic-native"]["splash-screen"].ngx.index, global["ionic-native"]["status-bar"].ngx, global.ng.cdk.platform, global["ionic-native"]["in-app-browser"].ngx, global.apollo.client.core, global["apollo-angular"], global.apollo.client.link.ws, global.apollo.client.utilities, global.apollo.client.link.retry, global["apollo-link-queue"], global["apollo-link-serialize"], global["apollo-link-logger"], global["apollo-angular"].http, global["apollo3-cache-persist"], global.ngx$6, global["ionic-native"]["status-bar"].ngx.index, global["ionic-native"].keyboard.ngx.index, global["ionic-native"]["in-app-browser"].ngx.index, global.i18, global["e-is"]["ngx-material-table"], global.ng.cdk.collections, global["ngx-jdenticon"]));
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global["sumaris-net"] = global["sumaris-net"] || {}, global["sumaris-net"]["ngx-components"] = {}), global.ng.core, global.ng.common, global.ng.cdk.table, global.ng.cdk.a11y, global.ng.cdk.overlay, global.ng.cdk.scrolling, global.ng.material.core, global.ng.material.table, global.ng.material.sort, global.ng.material.paginator, global.ng.material.formField, global.ng.material.input, global.ng.material.checkbox, global.ng.material.expansion, global.ng.material.toolbar, global.ng.material.icon, global.ng.material.button, global.ng.material.menu, global.ng.material.select, global.ng.material.card, global.ng.material.tabs, global.ng.material.stepper, global.ng.material.list, global.ng.material.buttonToggle, global.ng.material.progressSpinner, global.ng.material.progressBar, global.ng.material.radio, global.ng.material.badge, global.ng.material.slideToggle, global.ng.material.dialog, global.ng.material.autocomplete, global.ng.forms, global.rxjs, global.rxjs.operators, global["ngx-translate"].core, global.ionic.angular, global.moment, global.ng.materialMomentAdapter, global["ionic-native"].keyboard.ngx, global["angular2-text-mask"], global["ngx-material-timepicker"], global.ng.material.datepicker, global.ng.animations, global.ng.material.divider, global.ng.material.tooltip, global.ng.material.chips, global.ng.router, global.ng.platformBrowser, global.ng.common.http, global["ngx-color-picker"], global["ionic-native"]["native-audio"].ngx, global["ionic-native"].vibration.ngx, global["ionic-native"]["audio-management"].ngx, global["ionic-native"]["native-audio"].ngx.index, global["ionic-native"].vibration.ngx.index, global["ionic-native"]["audio-management"].ngx.index, global.uuid.v4, global.ng.cdk.dragDrop, global["ngx-markdown"], global.tweetnacl, global.ionic.storage, null, global["ionic-native"]["splash-screen"].ngx, global["ionic-native"].network.ngx, global["ionic-cache"], global["ionic-cache/dist/cache"].service, global["ionic-native"].network.ngx.index, global["ionic-native"]["splash-screen"].ngx.index, global["ionic-native"]["status-bar"].ngx, global.ng.cdk.platform, global["ionic-native"]["in-app-browser"].ngx, global.apollo.client.core, global["apollo-angular"], global.apollo.client.link.ws, global.apollo.client.utilities, global.apollo.client.link.retry, global["apollo-link-queue"], global["apollo-link-serialize"], global["apollo-link-logger"], global["apollo-angular"].http, global["apollo3-cache-persist"], global["ionic-native"].downloader.ngx, global["ionic-native"]["status-bar"].ngx.index, global["ionic-native"].keyboard.ngx.index, global["ionic-native"]["in-app-browser"].ngx.index, global["ionic-native"].downloader.ngx.index, global["e-is"]["ngx-material-table"], global.ng.cdk.collections, global["ngx-jdenticon"]));
5
5
  })(this, (function (exports, i0, i1$4, table$1, a11y, overlay, scrolling, i1$3, table, sort$1, paginator, formField, input, checkbox, expansion, toolbar, icon, button, menu, select, card, tabs, stepper, list, buttonToggle, progressSpinner, progressBar, radio, badge, slideToggle, i2, autocomplete, i1, rxjs, operators, i1$2, i1$5, momentImported, i1$1, ngx, angular2TextMask, ngxMaterialTimepicker, datepicker, animations, divider, tooltip, chips, i3, i1$6, i2$1, ngxColorPicker, ngx$2, ngx$3, ngx$1, i2$2, i3$1, i4, uuidv4Imported, dragDrop, ngxMarkdown, tweetnacl, i3$2, zoneError, ngx$5, ngx$4, ionicCache, i6, i9, i10, ngx$7, i2$4, ngx$8, core, i2$3, ws, utilities, retry, QueueLink, SerializingLink, loggerLink, i3$3, apollo3CachePersist, ngx$6, i14, i15, i17, i18, ngxMaterialTable, collections, ngxJdenticon) { 'use strict';
6
6
 
7
7
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -1528,9 +1528,10 @@
1528
1528
  // Filter if not enough character
1529
1529
  operators.filter(function (value) { return value.length >= _this.suggestLengthThreshold; }),
1530
1530
  // Wait a debounce time
1531
- operators.debounceTime(this.debounceTime),
1531
+ operators.debounceTime(this.debounceTime)
1532
1532
  // DEBUG
1533
- operators.tap(function (value) { return console.debug(_this.logPrefix + ' Search text changes:', value); })),
1533
+ //,tap((value) => this.debug && console.debug(this.logPrefix + ' Search text changes:', value))
1534
+ ),
1534
1535
  // Object set: use it (no distinctUntilChanged() pipe need)
1535
1536
  this.formControl.valueChanges
1536
1537
  .pipe(operators.startWith(this.formControl.value), operators.filter(function (value) { return (_this.searchable && isNotNil(value) && typeof value === 'object'); }), operators.tap(function (value) {
@@ -1546,35 +1547,38 @@
1546
1547
  _this.matInputText.nativeElement.value = _this.displayValue;
1547
1548
  }
1548
1549
  }
1549
- }),
1550
+ })
1550
1551
  // DEBUG
1551
- operators.tap(function (value) { return _this.debug && console.debug(_this.logPrefix + ' Received an object value: ', value); })),
1552
+ //,tap(value => this.debug && console.debug(this.logPrefix + ' Received an object value: ', value))
1553
+ ),
1552
1554
  // On dropdown button click (no distinctUntilChanged(), nor debounceTime)
1553
1555
  this.dropButtonClick
1554
1556
  .pipe(operators.filter(function (event) { return _this.searchable && _this.enabled && (!event || !event.defaultPrevented); }), operators.map(function (_) { return _this.showAllOnFocus ? '*' : _this.formControl.value; }),
1555
- // Make enough characters
1557
+ // Make sure there is enough characters
1556
1558
  operators.filter(thresholdFilterFn)),
1557
1559
  // Merge some observables, with a common distinctUntilChanged() pipe, and NO debounceTime
1558
1560
  rxjs.merge(
1559
1561
  // Focus or click => Load all
1560
1562
  rxjs.merge(this.focused, this.clicked)
1561
- .pipe(operators.filter(function (_) { return _this.enabled && _this.searchable; }), operators.map(function (_) { return _this.showAllOnFocus ? '*' : _this.formControl.value; }),
1562
- // DEBUG
1563
- operators.tap(function (value) { return _this.debug && console.debug(_this.logPrefix + ' Received focused or clicked event: ', value); })), rxjs.merge(this.$inputItems, this._$filter)
1564
- .pipe(operators.filter(function (_) { return _this.searchable && _this.enabled; }), operators.map(function (_) { return _this.formControl.value; }),
1563
+ .pipe(operators.filter(function (_) { return _this.enabled && _this.searchable; }), operators.map(function (_) { return _this.showAllOnFocus ? '*' : _this.formControl.value; })
1565
1564
  // DEBUG
1566
- operators.tap(function (value) { return _this.debug && console.debug(_this.logPrefix + ' Received $inputItems or filter event: ', value); })))
1565
+ //,tap(value => this.debug && console.debug(this.logPrefix + ' Received focused or clicked event: ', value))
1566
+ ), rxjs.merge(this.$inputItems, this._$filter)
1567
+ .pipe(operators.filter(function (_) { return _this.searchable && _this.enabled; }), operators.map(function (_) { return _this.formControl.value; })))
1567
1568
  .pipe(
1568
1569
  // Make sure there is enough characters
1569
1570
  operators.filter(thresholdFilterFn),
1570
1571
  // Distinguish changes
1571
1572
  // - do NOT filter if loading, to force update after a blur event
1572
- operators.distinctUntilChanged(function (v1, v2) { return !_this.loading && (v1 === v2 || _this.equals(v1, v2)); })))
1573
+ operators.distinctUntilChanged(function (v1, v2) { return !_this.loading && (v1 === v2 || _this.equals(v1, v2)); })
1574
+ // DEBUG
1575
+ //,tap(value => this.debug && console.debug(this.logPrefix + ' Received update event: ', value))
1576
+ ))
1573
1577
  .pipe(
1574
1578
  // Suggest values
1575
1579
  operators.mergeMap(function (value) { return _this.suggest(value, _this.filter); }),
1576
1580
  // DEBUG
1577
- operators.tap(function (items) { return _this.debug && console.debug(_this.logPrefix + ' Received from suggest: ', items); }),
1581
+ //tap(items => this.debug && console.debug(this.logPrefix + ' Received from suggest: ', items)),
1578
1582
  // Store implicit value (will use it onBlur if not other value selected)
1579
1583
  operators.tap(function (items) { return _this.updateImplicitValue(items); }));
1580
1584
  // Fetch more events
@@ -1607,9 +1611,10 @@
1607
1611
  this._subscription.add(this.blurred
1608
1612
  .pipe(
1609
1613
  // Skip if not searchable
1610
- operators.filter(function (_) { return _this.searchable; }), operators.map(function (_) { return _this.formControl.value; }),
1614
+ operators.filter(function (_) { return _this.searchable; }), operators.map(function (_) { return _this.formControl.value; })
1611
1615
  // DEBUG
1612
- operators.tap(function (value) { return console.debug(_this.logPrefix + ' Received blurred event: ', value); }))
1616
+ //,tap(value => this.debug && console.debug(this.logPrefix + ' Received blurred event: ', value)),
1617
+ )
1613
1618
  .subscribe(function (value) {
1614
1619
  // When leave component without object, use implicit value if :
1615
1620
  // - an explicit value
@@ -1695,7 +1700,7 @@
1695
1700
  };
1696
1701
  MatAutocompleteField.prototype.writeValue = function (value) {
1697
1702
  // DEBUG
1698
- // console.debug(this.logPrefix + ' Writing value: ', value);
1703
+ // if (this.debug) console.debug(this.logPrefix + ' Writing value: ', value);
1699
1704
  if (value !== this.formControl.value) {
1700
1705
  this.formControl.patchValue(value, { emitEvent: false });
1701
1706
  this._onChangeCallback(value);
@@ -1733,18 +1738,16 @@
1733
1738
  event.stopPropagation();
1734
1739
  event.returnValue = false;
1735
1740
  // DEBUG
1736
- if (this.debug)
1737
- console.debug(this.logPrefix + ' Cancelling focus event');
1741
+ //if (this.debug) console.debug(this.logPrefix + ' Cancelling focus event');
1738
1742
  return false;
1739
1743
  }
1740
- if (this.debug)
1741
- console.debug(this.logPrefix + ' Select input content');
1744
+ // DEBUG
1745
+ //if (this.debug) console.debug(this.logPrefix + ' Select input content');
1742
1746
  var hasContent = true; // selectInputContent(event);
1743
1747
  // If combo is empty, or if has content but should force to show panel on focus
1744
1748
  if (!hasContent || this.showPanelOnFocus || this.showAllOnFocus) {
1745
1749
  // DEBUG
1746
- if (this.debug)
1747
- console.debug(this.logPrefix + ' Emit focus event');
1750
+ //if (this.debug) console.debug(this.logPrefix + ' Emit focus event');
1748
1751
  this.focused.emit();
1749
1752
  return true;
1750
1753
  }
@@ -3049,16 +3052,10 @@
3049
3052
  function TranslateContextPipe(translate) {
3050
3053
  this.translate = translate;
3051
3054
  }
3052
- TranslateContextPipe.prototype.transform = function (query) {
3053
- var params = [];
3054
- for (var _i = 1; _i < arguments.length; _i++) {
3055
- params[_i - 1] = arguments[_i];
3056
- }
3055
+ TranslateContextPipe.prototype.transform = function (query, context, interpolateParams) {
3057
3056
  if (!query || !query.length)
3058
3057
  return query;
3059
- var suffix = params && params.length ? params[0] : '';
3060
- params = suffix && params.slice(1);
3061
- return this.translate.instant(query, suffix, params);
3058
+ return this.translate.instant(query, context, interpolateParams);
3062
3059
  };
3063
3060
  return TranslateContextPipe;
3064
3061
  }());
@@ -5188,44 +5185,6 @@
5188
5185
  this.markForCheck();
5189
5186
  this._onChangeCallback(dateStr);
5190
5187
  };
5191
- MatDate.prototype.updatePattern = function (pattern) {
5192
- pattern = pattern !== 'COMMON.DATE_PATTERN' ? pattern : 'L';
5193
- if (this.displayPattern !== pattern) {
5194
- this.displayPattern = pattern;
5195
- this.dayPattern = pattern;
5196
- this.markForCheck();
5197
- }
5198
- };
5199
- MatDate.prototype.onFormChange = function (dayValue) {
5200
- if (this.writing)
5201
- return; // Skip if call by self
5202
- this.writing = true;
5203
- // Make to remove placeholder chars
5204
- while (dayValue && dayValue.indexOf(this.placeholderChar) !== -1) {
5205
- dayValue = dayValue.replace(this.placeholderChar, '');
5206
- }
5207
- var date;
5208
- // Parse day string
5209
- date = dayValue && this.dateAdapter.parse(dayValue, this.dayPattern) || null;
5210
- // Reset time
5211
- date = date && date.utc(true).hour(0).minute(0).seconds(0).millisecond(0);
5212
- // update date picker
5213
- this._value = date && this.dateAdapter.parse(date.clone(), DATE_ISO_PATTERN);
5214
- // Get the model value
5215
- var dateStr = date && date.isValid() && this.dateAdapter.format(date, DATE_ISO_PATTERN).replace('+00:00', 'Z') || date;
5216
- //console.debug("[mat-date-time] Setting date: ", dateStr);
5217
- this.formControl.patchValue(dateStr, { emitEvent: false });
5218
- //this.formControl.updateValueAndValidity();
5219
- this.writing = false;
5220
- this.markForCheck();
5221
- this._onChangeCallback(dateStr);
5222
- };
5223
- MatDate.prototype.checkIfTouched = function () {
5224
- if (this.dayControl.touched) {
5225
- this.markForCheck();
5226
- this._onTouchedCallback();
5227
- }
5228
- };
5229
5188
  MatDate.prototype.openDatePickerIfMobile = function (event, datePicker) {
5230
5189
  return __awaiter(this, void 0, void 0, function () {
5231
5190
  return __generator(this, function (_a) {
@@ -5275,7 +5234,45 @@
5275
5234
  }
5276
5235
  });
5277
5236
  };
5278
- /* -- protected method -- */
5237
+ /* -- private method -- */
5238
+ MatDate.prototype.updatePattern = function (pattern) {
5239
+ pattern = pattern !== 'COMMON.DATE_PATTERN' ? pattern : 'L';
5240
+ if (this.displayPattern !== pattern) {
5241
+ this.displayPattern = pattern;
5242
+ this.dayPattern = pattern;
5243
+ this.markForCheck();
5244
+ }
5245
+ };
5246
+ MatDate.prototype.onFormChange = function (dayValue) {
5247
+ if (this.writing)
5248
+ return; // Skip if call by self
5249
+ this.writing = true;
5250
+ // Make to remove placeholder chars
5251
+ while (dayValue && dayValue.indexOf(this.placeholderChar) !== -1) {
5252
+ dayValue = dayValue.replace(this.placeholderChar, '');
5253
+ }
5254
+ var date;
5255
+ // Parse day string
5256
+ date = dayValue && this.dateAdapter.parse(dayValue, this.dayPattern) || null;
5257
+ // Reset time
5258
+ date = date && date.utc(true).hour(0).minute(0).seconds(0).millisecond(0);
5259
+ // update date picker
5260
+ this._value = date && this.dateAdapter.parse(date.clone(), DATE_ISO_PATTERN);
5261
+ // Get the model value
5262
+ var dateStr = date && date.isValid() && this.dateAdapter.format(date, DATE_ISO_PATTERN).replace('+00:00', 'Z') || date;
5263
+ //console.debug("[mat-date-time] Setting date: ", dateStr);
5264
+ this.formControl.patchValue(dateStr, { emitEvent: false });
5265
+ //this.formControl.updateValueAndValidity();
5266
+ this.writing = false;
5267
+ this.markForCheck();
5268
+ this._onChangeCallback(dateStr);
5269
+ };
5270
+ MatDate.prototype.checkIfTouched = function () {
5271
+ if (this.dayControl.touched) {
5272
+ this.markForCheck();
5273
+ this._onTouchedCallback();
5274
+ }
5275
+ };
5279
5276
  MatDate.prototype.waitKeyboardHide = function (waitKeyboardDelay) {
5280
5277
  return __awaiter(this, void 0, void 0, function () {
5281
5278
  return __generator(this, function (_a) {
@@ -5426,7 +5423,7 @@
5426
5423
  MatDateTime.prototype.ngOnInit = function () {
5427
5424
  var _this = this;
5428
5425
  this.mobile = isNil(this.mobile) ? this.platform.is('mobile') : this.mobile;
5429
- this.waitHideKeyboardDelay = this.mobile && KEYBOARD_HIDE_DELAY_MS || 0;
5426
+ this.keyboardHideDelay = this.mobile && KEYBOARD_HIDE_DELAY_MS || 0;
5430
5427
  this.formControl = this.formControl || this.formControlName && this.formGroupDir && this.formGroupDir.form.get(this.formControlName);
5431
5428
  if (!this.formControl)
5432
5429
  throw new Error('Missing mandatory attribute \'formControl\' or \'formControlName\' in <mat-date-time-field>.');
@@ -5550,10 +5547,6 @@
5550
5547
  this.disabling = false;
5551
5548
  this.markForCheck();
5552
5549
  };
5553
- MatDateTime.prototype.updatePattern = function (patterns) {
5554
- this.displayPattern = (patterns['COMMON.DATE_TIME_PATTERN'] !== 'COMMON.DATE_TIME_PATTERN' ? patterns['COMMON.DATE_TIME_PATTERN'] : 'L LT');
5555
- this.dayPattern = (patterns['COMMON.DATE_PATTERN'] !== 'COMMON.DATE_PATTERN' ? patterns['COMMON.DATE_PATTERN'] : 'L');
5556
- };
5557
5550
  MatDateTime.prototype.onDatePickerChange = function (event) {
5558
5551
  // Make sure event is valid
5559
5552
  if (!event || (event.value !== null && !momentImported.isMoment(event.value))) {
@@ -5594,7 +5587,7 @@
5594
5587
  return [2 /*return*/];
5595
5588
  this.preventEvent(event);
5596
5589
  // Make sure the keyboard is closed
5597
- return [4 /*yield*/, this.hideKeyboard(false)];
5590
+ return [4 /*yield*/, this.waitKeyboardHide(false)];
5598
5591
  case 1:
5599
5592
  // Make sure the keyboard is closed
5600
5593
  _a.sent();
@@ -5624,7 +5617,7 @@
5624
5617
  return [2 /*return*/];
5625
5618
  this.preventEvent(event);
5626
5619
  // Make sure the keyboard is closed
5627
- return [4 /*yield*/, this.hideKeyboard(true)];
5620
+ return [4 /*yield*/, this.waitKeyboardHide(true)];
5628
5621
  case 1:
5629
5622
  // Make sure the keyboard is closed
5630
5623
  _a.sent();
@@ -5649,12 +5642,6 @@
5649
5642
  event.stopPropagation();
5650
5643
  event.returnValue = false;
5651
5644
  };
5652
- MatDateTime.prototype.checkIfTouched = function () {
5653
- if (this.dateFormControl.touched || this.timeFormControl.touched) {
5654
- this._onTouchedCallback();
5655
- this.markForCheck();
5656
- }
5657
- };
5658
5645
  MatDateTime.prototype.focus = function () {
5659
5646
  var _this = this;
5660
5647
  if (!this.matInputs.length)
@@ -5671,26 +5658,24 @@
5671
5658
  this.markAsTouched();
5672
5659
  this.markAsDirty();
5673
5660
  };
5674
- /* -- protected method -- */
5675
- MatDateTime.prototype.emitChange = function (value) {
5676
- // Get the model value
5677
- var dateStr = toDateISOString(value) || null;
5678
- if (this.formControl.value !== dateStr) {
5679
- // DEBUG
5680
- //console.debug('[matèdate-time] Emit new value: ' + dateStr);
5681
- // Changes comes from inside function: use the callback
5682
- this._onChangeCallback(dateStr);
5683
- // Check if need to update controls
5684
- this.checkIfTouched();
5661
+ /* -- private method -- */
5662
+ MatDateTime.prototype.updatePattern = function (patterns) {
5663
+ this.displayPattern = (patterns['COMMON.DATE_TIME_PATTERN'] !== 'COMMON.DATE_TIME_PATTERN' ? patterns['COMMON.DATE_TIME_PATTERN'] : 'L LT');
5664
+ this.dayPattern = (patterns['COMMON.DATE_PATTERN'] !== 'COMMON.DATE_PATTERN' ? patterns['COMMON.DATE_PATTERN'] : 'L');
5665
+ };
5666
+ MatDateTime.prototype.checkIfTouched = function () {
5667
+ if (this.dateFormControl.touched || this.timeFormControl.touched) {
5668
+ this._onTouchedCallback();
5669
+ this.markForCheck();
5685
5670
  }
5686
5671
  };
5687
- MatDateTime.prototype.hideKeyboard = function (waitIsHidden) {
5672
+ MatDateTime.prototype.waitKeyboardHide = function (waitKeyboardDelay) {
5688
5673
  return __awaiter(this, void 0, void 0, function () {
5689
5674
  return __generator(this, function (_a) {
5690
5675
  switch (_a.label) {
5691
5676
  case 0:
5692
- if (!this.keyboard.isVisible)
5693
- return [2 /*return*/]; // ok, already hidden
5677
+ if (!this.keyboard || !this.keyboard.isVisible)
5678
+ return [2 /*return*/]; // ok, already hidden (or not accessible)
5694
5679
  // Force keyboard to be hide
5695
5680
  this.keyboard.hide();
5696
5681
  // Wait hide occur
@@ -5698,8 +5683,8 @@
5698
5683
  case 1:
5699
5684
  // Wait hide occur
5700
5685
  _a.sent();
5701
- if (!(this.waitHideKeyboardDelay > 0 && waitIsHidden)) return [3 /*break*/, 3];
5702
- return [4 /*yield*/, sleep(this.waitHideKeyboardDelay)];
5686
+ if (!(this.keyboardHideDelay > 0 && waitKeyboardDelay)) return [3 /*break*/, 3];
5687
+ return [4 /*yield*/, sleep(this.keyboardHideDelay)];
5703
5688
  case 2:
5704
5689
  _a.sent();
5705
5690
  _a.label = 3;
@@ -5708,6 +5693,18 @@
5708
5693
  });
5709
5694
  });
5710
5695
  };
5696
+ MatDateTime.prototype.emitChange = function (value) {
5697
+ // Get the model value
5698
+ var dateStr = toDateISOString(value) || null;
5699
+ if (this.formControl.value !== dateStr) {
5700
+ // DEBUG
5701
+ //console.debug('[matèdate-time] Emit new value: ' + dateStr);
5702
+ // Changes comes from inside function: use the callback
5703
+ this._onChangeCallback(dateStr);
5704
+ // Check if need to update controls
5705
+ this.checkIfTouched();
5706
+ }
5707
+ };
5711
5708
  MatDateTime.prototype.updateTabIndex = function () {
5712
5709
  var _this = this;
5713
5710
  if (isNil(this._tabindex) || this._tabindex === -1)
@@ -6605,7 +6602,7 @@
6605
6602
  MatBooleanField.decorators = [
6606
6603
  { type: i0.Component, args: [{
6607
6604
  selector: 'mat-boolean-field',
6608
- 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>&nbsp;\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>&nbsp;</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 <div class=\"cdk-visually-hidden\">\n <div #suffix><ng-content select=\"[matSuffix]\"></ng-content></div>\n </div>\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",
6605
+ 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>&nbsp;\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>&nbsp;</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",
6609
6606
  providers: [
6610
6607
  DEFAULT_VALUE_ACCESSOR$1
6611
6608
  ],
@@ -6643,8 +6640,7 @@
6643
6640
  yesButton: [{ type: i0.ViewChild, args: ['yesButton',] }],
6644
6641
  noButton: [{ type: i0.ViewChild, args: ['noButton',] }],
6645
6642
  checkboxButton: [{ type: i0.ViewChild, args: ['checkboxButton',] }],
6646
- fakeInput: [{ type: i0.ViewChild, args: ['fakeInput',] }],
6647
- suffixDiv: [{ type: i0.ViewChild, args: ['suffix', { static: false },] }]
6643
+ fakeInput: [{ type: i0.ViewChild, args: ['fakeInput',] }]
6648
6644
  };
6649
6645
 
6650
6646
  var SharedMatBooleanModule = /** @class */ (function () {
@@ -7882,7 +7878,7 @@
7882
7878
  // Wait a debounce time
7883
7879
  operators.debounceTime(this.debounceTime)
7884
7880
  // DEBUG
7885
- //tap((value) => console.debug(this.logPrefix + ' Search text changes:', value))
7881
+ //,tap((value) => this.debug && console.debug(this.logPrefix + ' Search text changes:', value))
7886
7882
  ),
7887
7883
  // Object set: use it (no distinctUntilChanged() pipe need)
7888
7884
  this.inputControl.valueChanges
@@ -7898,18 +7894,25 @@
7898
7894
  rxjs.merge(
7899
7895
  // Focus or click => Load all
7900
7896
  rxjs.merge(this.focused, this.clicked)
7901
- .pipe(operators.filter(function (_) { return _this.enabled; }), operators.map(function (_) { return _this.showAllOnFocus ? '*' : _this.inputControl.value; })), rxjs.merge(this.$inputItems, this._$filter)
7897
+ .pipe(operators.filter(function (_) { return _this.enabled; }), operators.map(function (_) { return _this.showAllOnFocus ? '*' : _this.inputControl.value; })
7898
+ // DEBUG
7899
+ //,tap(value => this.debug && console.debug(this.logPrefix + ' Received focused or clicked event: ', value))
7900
+ ), rxjs.merge(this.$inputItems, this._$filter)
7902
7901
  .pipe(operators.filter(function (_) { return _this.enabled; }), operators.map(function (_) { return _this.inputControl.value; })))
7903
7902
  .pipe(
7904
7903
  // Make sure there is enough characters
7905
7904
  operators.filter(thresholdFilterFn),
7906
7905
  // Distinguish changes
7907
- operators.distinctUntilChanged()))
7906
+ // - do NOT filter if loading, to force update after a blur event
7907
+ operators.distinctUntilChanged(function (v1, v2) { return !_this.loading && (v1 === v2 || _this.equals(v1, v2)); })
7908
+ // DEBUG
7909
+ //,tap(value => this.debug && console.debug(this.logPrefix + ' Received update event: ', value))
7910
+ ))
7908
7911
  .pipe(
7909
7912
  // Suggest values
7910
7913
  operators.mergeMap(function (value) { return _this.suggest(value, _this.filter); }),
7911
7914
  // DEBUG
7912
- //tap(items => console.debug(this.logPrefix + ' Received from suggest: ', items)),
7915
+ //tap(items => this.debug && console.debug(this.logPrefix + ' Received from suggest: ', items)),
7913
7916
  // Store implicit value (will use it onBlur if not other value selected)
7914
7917
  operators.tap(function (items) { return _this.updateImplicitValue(items); }));
7915
7918
  // Fetch more events
@@ -7930,7 +7933,10 @@
7930
7933
  .subscribe(function (items) { return _this.$filteredItems.next(items); }));
7931
7934
  // Applying implicit value, on blur
7932
7935
  this._subscription.add(this.blurred
7933
- .pipe(operators.map(function (_) { return _this.formControl.value; }))
7936
+ .pipe(operators.map(function (_) { return _this.formControl.value; })
7937
+ // DEBUG
7938
+ //,tap(value => this.debug && console.debug(this.logPrefix + ' Received blurred event: ', value)),
7939
+ )
7934
7940
  .subscribe(function (value) {
7935
7941
  // When leave component without object, use implicit value if :
7936
7942
  // - an explicit value
@@ -8042,6 +8048,8 @@
8042
8048
  this._reload$.next(value || '*');
8043
8049
  };
8044
8050
  MatChipsField.prototype.writeValue = function (value) {
8051
+ // DEBUG
8052
+ // if (this.debug) console.debug(this.logPrefix + ' Writing value: ', value);
8045
8053
  if (value && !Array.isArray(value)) {
8046
8054
  value = [value];
8047
8055
  }
@@ -8312,9 +8320,9 @@
8312
8320
  showLoadingSpinner: [{ type: i0.Input }],
8313
8321
  chipColor: [{ type: i0.Input }],
8314
8322
  debug: [{ type: i0.Input }],
8315
- clicked: [{ type: i0.Output }],
8316
- blurred: [{ type: i0.Output }],
8317
- focused: [{ type: i0.Output }],
8323
+ clicked: [{ type: i0.Output, args: ['click',] }],
8324
+ blurred: [{ type: i0.Output, args: ['blur',] }],
8325
+ focused: [{ type: i0.Output, args: ['focus',] }],
8318
8326
  dropButtonClick: [{ type: i0.Output }],
8319
8327
  keydownEscape: [{ type: i0.Output, args: ['keydown.escape',] }],
8320
8328
  keyupEnter: [{ type: i0.Output, args: ['keyup.enter',] }],
@@ -20107,7 +20115,7 @@
20107
20115
  _this.form.get('username').setValidators(i1.Validators.required);
20108
20116
  }
20109
20117
  // Enable/disable registration link
20110
- _this.canRegister = config.getProperty(CORE_CONFIG_OPTIONS.REGISTRATION_ENABLE);
20118
+ _this.canRegister = config.getPropertyAsBoolean(CORE_CONFIG_OPTIONS.REGISTRATION_ENABLE);
20111
20119
  _this.markForCheck();
20112
20120
  }));
20113
20121
  // For DEV only
@@ -24724,13 +24732,6 @@
24724
24732
  AppTable.prototype.markAsLoaded = function (opts) {
24725
24733
  this.setLoading(false, opts);
24726
24734
  };
24727
- AppTable.prototype.markRowAsDirty = function (row, opts) {
24728
- var _a;
24729
- row = row || this.editedRow;
24730
- if (row)
24731
- (_a = row.validator) === null || _a === void 0 ? void 0 : _a.markAsDirty(opts);
24732
- this.markAsDirty(opts);
24733
- };
24734
24735
  AppTable.prototype.markAsReady = function (opts) {
24735
24736
  if (this.readySubject.value !== true) {
24736
24737
  this.readySubject.next(true);
@@ -26083,6 +26084,13 @@
26083
26084
  AppTable.prototype.equals = function (d1, d2) {
26084
26085
  return EntityUtils.equals(d1, d2, 'id');
26085
26086
  };
26087
+ AppTable.prototype.markRowAsDirty = function (row, opts) {
26088
+ var _a;
26089
+ row = row || this.editedRow;
26090
+ if (row)
26091
+ (_a = row.validator) === null || _a === void 0 ? void 0 : _a.markAsDirty(opts);
26092
+ this.markAsDirty(opts);
26093
+ };
26086
26094
  /* -- private method -- */
26087
26095
  AppTable.prototype.setLoading = function (value, opts) {
26088
26096
  if (this.loadingSubject.value !== value) {