ecabs-components 1.1.66 → 1.1.67

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.
@@ -8688,6 +8688,7 @@ class EcabsTimeRangeInputV2Component extends EcabsElementBaseComponent {
8688
8688
  separatorLabel = 'to';
8689
8689
  startTimePlaceholder;
8690
8690
  endTimePlaceholder;
8691
+ allowCrossMidnight = false;
8691
8692
  val;
8692
8693
  _timeFrom;
8693
8694
  _timeTo;
@@ -8736,6 +8737,9 @@ class EcabsTimeRangeInputV2Component extends EcabsElementBaseComponent {
8736
8737
  this.control.valueChanges
8737
8738
  .pipe(takeUntilDestroyed(this.destroyRef))
8738
8739
  .subscribe(() => this.timeRangeValidator(this.control));
8740
+ setTimeout(() => {
8741
+ this.timeRangeValidator(this.control);
8742
+ });
8739
8743
  }
8740
8744
  }
8741
8745
  onChange = () => { };
@@ -8763,31 +8767,35 @@ class EcabsTimeRangeInputV2Component extends EcabsElementBaseComponent {
8763
8767
  }
8764
8768
  timeRangeValidator(control) {
8765
8769
  const required = control.hasValidator(Validators.required);
8766
- if (control.value) {
8767
- const { timeFrom, timeTo } = control.value;
8768
- control.setErrors(null);
8769
- if (required &&
8770
- (!timeFrom || timeFrom?.length === 0) &&
8771
- (!timeTo || timeTo?.length === 0)) {
8772
- control.setErrors({ required: true });
8773
- return;
8774
- }
8775
- if (!timeFrom && timeTo) {
8776
- control.setErrors({ timeFromRangeRequired: true });
8777
- return;
8778
- }
8779
- if (timeFrom && !timeTo) {
8780
- control.setErrors({ timeToRangeRequired: true });
8781
- return;
8782
- }
8783
- if (timeFrom > timeTo) {
8784
- control.setErrors({ timeFromMoreThanTimeTo: true });
8785
- return;
8786
- }
8770
+ if (!control.value && !required) {
8771
+ return;
8772
+ }
8773
+ if (!control.value) {
8774
+ control.setErrors({ required: true });
8775
+ return;
8776
+ }
8777
+ const { timeFrom, timeTo } = control.value;
8778
+ control.setErrors(null);
8779
+ if (required &&
8780
+ (!timeFrom || timeFrom?.length === 0) &&
8781
+ (!timeTo || timeTo?.length === 0)) {
8782
+ control.setErrors({ required: true });
8783
+ }
8784
+ else if (!timeFrom && timeTo) {
8785
+ control.setErrors({ rangeFrom: true });
8786
+ }
8787
+ else if (timeFrom && !timeTo) {
8788
+ control.setErrors({ rangeTo: true });
8789
+ }
8790
+ else if (timeFrom &&
8791
+ timeTo &&
8792
+ timeFrom > timeTo &&
8793
+ !this.allowCrossMidnight) {
8794
+ control.setErrors({ rangeOrder: true });
8787
8795
  }
8788
8796
  }
8789
8797
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsTimeRangeInputV2Component, deps: [{ token: i0.Injector }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component });
8790
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EcabsTimeRangeInputV2Component, selector: "ecabs-time-range-input-v2", inputs: { showCloseIcon: "showCloseIcon", listPlacement: "listPlacement", appendTo: "appendTo", min: "min", max: "max", showDayStart: "showDayStart", showDayEnd: "showDayEnd", addSecond: "addSecond", dayStartLabel: "dayStartLabel", dayEndLabel: "dayEndLabel", separatorLabel: "separatorLabel", startTimePlaceholder: "startTimePlaceholder", endTimePlaceholder: "endTimePlaceholder" }, providers: [
8798
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EcabsTimeRangeInputV2Component, selector: "ecabs-time-range-input-v2", inputs: { showCloseIcon: "showCloseIcon", listPlacement: "listPlacement", appendTo: "appendTo", min: "min", max: "max", showDayStart: "showDayStart", showDayEnd: "showDayEnd", addSecond: "addSecond", dayStartLabel: "dayStartLabel", dayEndLabel: "dayEndLabel", separatorLabel: "separatorLabel", startTimePlaceholder: "startTimePlaceholder", endTimePlaceholder: "endTimePlaceholder", allowCrossMidnight: "allowCrossMidnight" }, providers: [
8791
8799
  {
8792
8800
  provide: NG_VALUE_ACCESSOR,
8793
8801
  useExisting: forwardRef(() => EcabsTimeRangeInputV2Component),
@@ -8830,6 +8838,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
8830
8838
  type: Input
8831
8839
  }], endTimePlaceholder: [{
8832
8840
  type: Input
8841
+ }], allowCrossMidnight: [{
8842
+ type: Input
8833
8843
  }] } });
8834
8844
 
8835
8845
  class EcabsTimeRangeInputV2Module {
@@ -9147,7 +9157,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
9147
9157
  class EcabsDateRangePickerComponentV2 extends EcabsElementBaseComponent {
9148
9158
  injector;
9149
9159
  ecabsDatePickerHeaderService;
9150
- unsubscribeService;
9160
+ destroyRef;
9151
9161
  minDate;
9152
9162
  maxDate;
9153
9163
  touchUi = false;
@@ -9160,6 +9170,7 @@ class EcabsDateRangePickerComponentV2 extends EcabsElementBaseComponent {
9160
9170
  excludeWeekends;
9161
9171
  specificDates;
9162
9172
  holidayOptions;
9173
+ dateToOptional = false;
9163
9174
  onblur = new EventEmitter();
9164
9175
  val;
9165
9176
  pickerTo;
@@ -9194,28 +9205,42 @@ class EcabsDateRangePickerComponentV2 extends EcabsElementBaseComponent {
9194
9205
  }
9195
9206
  //eslint-disable-next-line
9196
9207
  set dateFrom(val) {
9197
- if (this._dateFrom !== val && isValid(new Date(val))) {
9208
+ if (this._dateFrom === val) {
9209
+ return;
9210
+ }
9211
+ if (val && isValid(new Date(val))) {
9198
9212
  this._dateFrom = val;
9199
9213
  this.minDateTo = new Date(val);
9200
- if (!this.dateTo) {
9214
+ if (!this.dateTo && !this.dateToOptional) {
9201
9215
  this.pickerTo?.open();
9202
9216
  }
9203
- this.onApply();
9204
9217
  }
9218
+ else if (!val) {
9219
+ this._dateFrom = val;
9220
+ this.minDateTo = this.minDate;
9221
+ }
9222
+ this.onApply();
9205
9223
  }
9206
9224
  //eslint-disable-next-line
9207
9225
  set dateTo(val) {
9208
- if (this._dateTo !== val && isValid(new Date(val))) {
9226
+ if (this._dateTo === val) {
9227
+ return;
9228
+ }
9229
+ if (val && isValid(new Date(val))) {
9209
9230
  this._dateTo = val;
9210
9231
  this.maxDateFrom = new Date(val);
9211
- this.onApply();
9212
9232
  }
9233
+ else if (!val) {
9234
+ this._dateTo = val;
9235
+ this.maxDateFrom = this.maxDate;
9236
+ }
9237
+ this.onApply();
9213
9238
  }
9214
- constructor(injector, ecabsDatePickerHeaderService, unsubscribeService) {
9239
+ constructor(injector, ecabsDatePickerHeaderService, destroyRef) {
9215
9240
  super();
9216
9241
  this.injector = injector;
9217
9242
  this.ecabsDatePickerHeaderService = ecabsDatePickerHeaderService;
9218
- this.unsubscribeService = unsubscribeService;
9243
+ this.destroyRef = destroyRef;
9219
9244
  }
9220
9245
  ngOnChanges(changes) {
9221
9246
  const { minDate, maxDate } = changes;
@@ -9231,7 +9256,7 @@ class EcabsDateRangePickerComponentV2 extends EcabsElementBaseComponent {
9231
9256
  ngOnInit() {
9232
9257
  this.ecabsDatePickerHeaderService
9233
9258
  .getConfig()
9234
- .pipe(takeUntil(this.unsubscribeService.subscription()))
9259
+ .pipe(takeUntilDestroyed(this.destroyRef))
9235
9260
  .subscribe((config) => (this.translationConfig = config));
9236
9261
  if (this.holidayOptions?.countryCode) {
9237
9262
  this.holidayInstance = new Holidays(this.holidayOptions.countryCode.toUpperCase());
@@ -9242,17 +9267,15 @@ class EcabsDateRangePickerComponentV2 extends EcabsElementBaseComponent {
9242
9267
  if (ngControl) {
9243
9268
  this.control = ngControl.control;
9244
9269
  this.control.valueChanges
9245
- .pipe(takeUntil(this.unsubscribeService.subscription()))
9270
+ .pipe(takeUntilDestroyed(this.destroyRef))
9246
9271
  .subscribe(() => this.dateRangeValidator(this.control));
9247
9272
  setTimeout(() => {
9248
9273
  this.dateFrom = this.value.dateFrom;
9249
9274
  this.dateTo = this.value.dateTo;
9275
+ this.dateRangeValidator(this.control);
9250
9276
  });
9251
9277
  }
9252
9278
  }
9253
- ngOnDestroy() {
9254
- this.unsubscribeService.destroy();
9255
- }
9256
9279
  onChange = () => { };
9257
9280
  onTouch = () => { };
9258
9281
  writeValue(value) {
@@ -9311,37 +9334,36 @@ class EcabsDateRangePickerComponentV2 extends EcabsElementBaseComponent {
9311
9334
  }
9312
9335
  dateRangeValidator(control) {
9313
9336
  const required = control?.hasValidator(Validators.required);
9314
- if (control.value) {
9315
- const { dateFrom, dateTo } = control.value;
9316
- control.setErrors(null);
9317
- if (required &&
9318
- (!dateFrom || dateFrom?.length === 0) &&
9319
- (!dateTo || dateTo?.length === 0)) {
9337
+ if (!control.value) {
9338
+ if (required) {
9320
9339
  control.setErrors({ required: true });
9321
- return;
9322
- }
9323
- if (!dateFrom && dateTo) {
9324
- control.setErrors({ dateFromRangeRequired: true });
9325
- return;
9326
- }
9327
- if (dateFrom && !dateTo) {
9328
- control.setErrors({ dateToRangeRequired: true });
9329
- return;
9330
- }
9331
- if (new Date(dateFrom) > new Date(dateTo)) {
9332
- control.setErrors({ dateFromMoreThanDateTo: true });
9333
- return;
9334
9340
  }
9341
+ return;
9342
+ }
9343
+ const { dateFrom, dateTo } = control.value;
9344
+ control.setErrors(null);
9345
+ if (required &&
9346
+ (!dateFrom || dateFrom?.length === 0) &&
9347
+ (!dateTo || dateTo?.length === 0)) {
9348
+ control.setErrors({ required: true });
9349
+ }
9350
+ else if (!dateFrom && dateTo) {
9351
+ control.setErrors({ rangeFrom: true });
9352
+ }
9353
+ else if (dateFrom && !dateTo && !this.dateToOptional) {
9354
+ control.setErrors({ rangeTo: true });
9355
+ }
9356
+ else if (dateFrom && dateTo && new Date(dateFrom) > new Date(dateTo)) {
9357
+ control.setErrors({ rangeOrder: true });
9335
9358
  }
9336
9359
  }
9337
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsDateRangePickerComponentV2, deps: [{ token: i0.Injector }, { token: EcabsDatePickerHeaderService }, { token: UnsubscribeService }], target: i0.ɵɵFactoryTarget.Component });
9338
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EcabsDateRangePickerComponentV2, selector: "ecabs-date-range-picker-v2", inputs: { minDate: "minDate", maxDate: "maxDate", touchUi: "touchUi", cancelLabel: "cancelLabel", applyLabel: "applyLabel", startDatePlaceholder: "startDatePlaceholder", endDatePlaceholder: "endDatePlaceholder", separatorLabel: "separatorLabel", excludeHolidays: "excludeHolidays", excludeWeekends: "excludeWeekends", specificDates: "specificDates", holidayOptions: "holidayOptions" }, outputs: { onblur: "onblur" }, providers: [
9360
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsDateRangePickerComponentV2, deps: [{ token: i0.Injector }, { token: EcabsDatePickerHeaderService }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component });
9361
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EcabsDateRangePickerComponentV2, selector: "ecabs-date-range-picker-v2", inputs: { minDate: "minDate", maxDate: "maxDate", touchUi: "touchUi", cancelLabel: "cancelLabel", applyLabel: "applyLabel", startDatePlaceholder: "startDatePlaceholder", endDatePlaceholder: "endDatePlaceholder", separatorLabel: "separatorLabel", excludeHolidays: "excludeHolidays", excludeWeekends: "excludeWeekends", specificDates: "specificDates", holidayOptions: "holidayOptions", dateToOptional: "dateToOptional" }, outputs: { onblur: "onblur" }, providers: [
9339
9362
  {
9340
9363
  provide: NG_VALUE_ACCESSOR,
9341
9364
  useExisting: EcabsDateRangePickerComponentV2,
9342
9365
  multi: true,
9343
9366
  },
9344
- UnsubscribeService,
9345
9367
  ], viewQueries: [{ propertyName: "pickerTo", first: true, predicate: ["pickerTo"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ecabs-element-wrapper [data]=\"getData()\">\r\n <div class=\"form-field__range--wrapper\">\r\n <div class=\"form-field__range\">\r\n <input\r\n class=\"border-none w-full\"\r\n id=\"{{ name + 'dateFrom' }}\"\r\n [(ngModel)]=\"dateFrom\"\r\n [placeholder]=\"startDatePlaceholder ?? translationConfig?.startDatePlaceholder\"\r\n [disabled]=\"disabled\"\r\n [matDatepicker]=\"pickerFrom\"\r\n [min]=\"minDateFrom\"\r\n [max]=\"maxDateFrom\"\r\n [matDatepickerFilter]=\"filterDateRange\"\r\n ecabsMaskDate\r\n (blur)=\"onTouch()\"\r\n (click)=\"pickerFrom.open()\"\r\n />\r\n <mat-datepicker #pickerFrom\r\n [panelClass]=\"panelClass\"\r\n [calendarHeaderComponent]=\"header\"\r\n [touchUi]=\"touchUi\">\r\n </mat-datepicker>\r\n </div>\r\n\r\n <span class=\"text-gray-400 px-3 text-sm\">{{ separatorLabel }}</span>\r\n <div class=\"form-field__range\">\r\n <input\r\n class=\"border-none w-full\"\r\n id=\"{{ name + 'dateTo' }}\"\r\n [(ngModel)]=\"dateTo\"\r\n [placeholder]=\"endDatePlaceholder ?? translationConfig?.endDatePlaceholder\"\r\n [disabled]=\"disabled\"\r\n [matDatepicker]=\"pickerTo\"\r\n [min]=\"minDateTo\"\r\n [max]=\"maxDateTo\"\r\n [matDatepickerFilter]=\"filterDateRange\"\r\n ecabsMaskDate\r\n (blur)=\"onTouch()\"\r\n (click)=\"pickerTo.open()\"\r\n />\r\n <mat-datepicker #pickerTo\r\n [panelClass]=\"panelClass\"\r\n [calendarHeaderComponent]=\"header\"\r\n [touchUi]=\"touchUi\">\r\n </mat-datepicker>\r\n </div>\r\n </div>\r\n</ecabs-element-wrapper>\r\n", styles: [""], dependencies: [{ kind: "component", type: EcabsElementWrapperComponent, selector: "ecabs-element-wrapper", inputs: ["data", "showCloseIcon", "focusedFlag", "showPassword", "control"], outputs: ["showHidePassword", "clear", "increase", "decrease"] }, { kind: "component", type: i6.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i6.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: EcabsMaskDateDirective, selector: "[ecabsMaskDate]", inputs: ["isDateTimeMask", "considerSeconds"] }] });
9346
9368
  }
9347
9369
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsDateRangePickerComponentV2, decorators: [{
@@ -9352,9 +9374,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
9352
9374
  useExisting: EcabsDateRangePickerComponentV2,
9353
9375
  multi: true,
9354
9376
  },
9355
- UnsubscribeService,
9356
9377
  ], template: "<ecabs-element-wrapper [data]=\"getData()\">\r\n <div class=\"form-field__range--wrapper\">\r\n <div class=\"form-field__range\">\r\n <input\r\n class=\"border-none w-full\"\r\n id=\"{{ name + 'dateFrom' }}\"\r\n [(ngModel)]=\"dateFrom\"\r\n [placeholder]=\"startDatePlaceholder ?? translationConfig?.startDatePlaceholder\"\r\n [disabled]=\"disabled\"\r\n [matDatepicker]=\"pickerFrom\"\r\n [min]=\"minDateFrom\"\r\n [max]=\"maxDateFrom\"\r\n [matDatepickerFilter]=\"filterDateRange\"\r\n ecabsMaskDate\r\n (blur)=\"onTouch()\"\r\n (click)=\"pickerFrom.open()\"\r\n />\r\n <mat-datepicker #pickerFrom\r\n [panelClass]=\"panelClass\"\r\n [calendarHeaderComponent]=\"header\"\r\n [touchUi]=\"touchUi\">\r\n </mat-datepicker>\r\n </div>\r\n\r\n <span class=\"text-gray-400 px-3 text-sm\">{{ separatorLabel }}</span>\r\n <div class=\"form-field__range\">\r\n <input\r\n class=\"border-none w-full\"\r\n id=\"{{ name + 'dateTo' }}\"\r\n [(ngModel)]=\"dateTo\"\r\n [placeholder]=\"endDatePlaceholder ?? translationConfig?.endDatePlaceholder\"\r\n [disabled]=\"disabled\"\r\n [matDatepicker]=\"pickerTo\"\r\n [min]=\"minDateTo\"\r\n [max]=\"maxDateTo\"\r\n [matDatepickerFilter]=\"filterDateRange\"\r\n ecabsMaskDate\r\n (blur)=\"onTouch()\"\r\n (click)=\"pickerTo.open()\"\r\n />\r\n <mat-datepicker #pickerTo\r\n [panelClass]=\"panelClass\"\r\n [calendarHeaderComponent]=\"header\"\r\n [touchUi]=\"touchUi\">\r\n </mat-datepicker>\r\n </div>\r\n </div>\r\n</ecabs-element-wrapper>\r\n" }]
9357
- }], ctorParameters: function () { return [{ type: i0.Injector }, { type: EcabsDatePickerHeaderService }, { type: UnsubscribeService }]; }, propDecorators: { minDate: [{
9378
+ }], ctorParameters: function () { return [{ type: i0.Injector }, { type: EcabsDatePickerHeaderService }, { type: i0.DestroyRef }]; }, propDecorators: { minDate: [{
9358
9379
  type: Input
9359
9380
  }], maxDate: [{
9360
9381
  type: Input
@@ -9378,6 +9399,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
9378
9399
  type: Input
9379
9400
  }], holidayOptions: [{
9380
9401
  type: Input
9402
+ }], dateToOptional: [{
9403
+ type: Input
9381
9404
  }], onblur: [{
9382
9405
  type: Output
9383
9406
  }], pickerTo: [{