@dereekb/dbx-form 9.23.9 → 9.23.11

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.
@@ -20,6 +20,7 @@ export class DbxFormCalendarDateScheduleRangeFieldComponent extends FieldType {
20
20
  this._syncSub = new SubscriptionObject();
21
21
  this._valueSub = new SubscriptionObject();
22
22
  this._filterSub = new SubscriptionObject();
23
+ this._exclusionsSub = new SubscriptionObject();
23
24
  this._formControlObs = new BehaviorSubject(undefined);
24
25
  this.formControl$ = this._formControlObs.pipe(filterMaybe());
25
26
  this.value$ = this.formControl$.pipe(switchMap((control) => control.valueChanges.pipe(startWith(control.value))), shareReplay(1));
@@ -45,6 +46,15 @@ export class DbxFormCalendarDateScheduleRangeFieldComponent extends FieldType {
45
46
  get filter() {
46
47
  return this.props.filter;
47
48
  }
49
+ get exclusions() {
50
+ return this.props.exclusions;
51
+ }
52
+ get initialSelectionState() {
53
+ return this.props.initialSelectionState;
54
+ }
55
+ get computeSelectionResultRelativeToFilter() {
56
+ return this.props.computeSelectionResultRelativeToFilter;
57
+ }
48
58
  ngOnInit() {
49
59
  this._formControlObs.next(this.formControl);
50
60
  this._syncSub.subscription = this.value$.pipe(distinctUntilChanged(isSameDateScheduleRange)).subscribe((x) => {
@@ -53,17 +63,28 @@ export class DbxFormCalendarDateScheduleRangeFieldComponent extends FieldType {
53
63
  this._valueSub.subscription = this.dbxCalendarScheduleSelectionStore.currentDateScheduleRangeValue$.subscribe((x) => {
54
64
  this.formControl.setValue(x);
55
65
  });
56
- const filter = this.filter;
66
+ const { filter, exclusions } = this;
57
67
  if (filter != null) {
58
68
  this._filterSub.subscription = this.dbxCalendarScheduleSelectionStore.setFilter(asObservable(filter));
59
69
  }
70
+ if (exclusions != null) {
71
+ this._exclusionsSub.subscription = this.dbxCalendarScheduleSelectionStore.setExclusions(asObservable(exclusions));
72
+ }
73
+ if (this.initialSelectionState !== undefined) {
74
+ this.dbxCalendarScheduleSelectionStore.setInitialSelectionState(this.initialSelectionState);
75
+ }
76
+ if (this.computeSelectionResultRelativeToFilter != null) {
77
+ this.dbxCalendarScheduleSelectionStore.setComputeSelectionResultRelativeToFilter(this.computeSelectionResultRelativeToFilter);
78
+ }
79
+ // TODO: Also add ability to set min/max dates independent of the filter
60
80
  }
61
81
  ngOnDestroy() {
62
82
  super.ngOnDestroy();
63
83
  this._syncSub.destroy();
64
84
  this._valueSub.destroy();
65
- this._formControlObs.complete();
66
85
  this._filterSub.destroy();
86
+ this._exclusionsSub.destroy();
87
+ this._formControlObs.complete();
67
88
  }
68
89
  }
69
90
  DbxFormCalendarDateScheduleRangeFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxFormCalendarDateScheduleRangeFieldComponent, deps: [{ token: i1.CompactContextStore, optional: true }, { token: i2.DbxCalendarScheduleSelectionStore }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
@@ -89,4 +110,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
89
110
  }], ctorParameters: function () { return [{ type: i1.CompactContextStore, decorators: [{
90
111
  type: Optional
91
112
  }] }, { type: i2.DbxCalendarScheduleSelectionStore }, { type: i0.NgZone }]; } });
92
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuc2NoZWR1bGUuZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZvcm0vY2FsZW5kYXIvc3JjL2xpYi9maWVsZC9zY2hlZHVsZS9jYWxlbmRhci5zY2hlZHVsZS5maWVsZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQXFCLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcvRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFnQixTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUcsT0FBTyxFQUFFLFdBQVcsRUFBcUIsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pHLE9BQU8sRUFBZ0MsdUJBQXVCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEYsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDNUYsT0FBTyxFQUFFLDBEQUEwRCxFQUFFLE1BQU0saURBQWlELENBQUM7Ozs7OztBQW1CN0gsTUFBTSxPQUFPLDhDQUFrSixTQUFRLFNBQTZCO0lBYWxNLFlBQWlDLE9BQTRCLEVBQVcsaUNBQW9FLEVBQVcsTUFBYztRQUNuSyxLQUFLLEVBQUUsQ0FBQztRQUR1QixZQUFPLEdBQVAsT0FBTyxDQUFxQjtRQUFXLHNDQUFpQyxHQUFqQyxpQ0FBaUMsQ0FBbUM7UUFBVyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBWjdKLGFBQVEsR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDcEMsY0FBUyxHQUFHLElBQUksa0JB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U0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUU7Ozs7OztHQU1UO29CQUNELFNBQVMsRUFBRSxDQUFDLDBEQUEwRCxFQUFFLENBQUM7aUJBQzFFOzswQkFjYyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb21wYWN0Q29udGV4dFN0b3JlIH0gZnJvbSAnQGRlcmVla2IvZGJ4LXdlYic7XG5pbXBvcnQgeyBDb21wb25lbnQsIE5nWm9uZSwgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGaWVsZFR5cGVDb25maWcsIEZvcm1seUZpZWxkUHJvcHMgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IE1heWJlIH0gZnJvbSAnQGRlcmVla2IvdXRpbCc7XG5pbXBvcnQgeyBGaWVsZFR5cGUgfSBmcm9tICdAbmd4LWZvcm1seS9tYXRlcmlhbCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBzaGFyZVJlcGxheSwgc3RhcnRXaXRoLCBTdWJzY3JpcHRpb24sIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyTWF5YmUsIE9ic2VydmFibGVPclZhbHVlLCBTdWJzY3JpcHRpb25PYmplY3QsIGFzT2JzZXJ2YWJsZSB9IGZyb20gJ0BkZXJlZWtiL3J4anMnO1xuaW1wb3J0IHsgRGF0ZVNjaGVkdWxlRGF0ZUZpbHRlckNvbmZpZywgaXNTYW1lRGF0ZVNjaGVkdWxlUmFuZ2UgfSBmcm9tICdAZGVyZWVrYi9kYXRlJztcbmltcG9ydCB7IERieENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdG9yZSB9IGZyb20gJy4uLy4uL2NhbGVuZGFyLnNjaGVkdWxlLnNlbGVjdGlvbi5zdG9yZSc7XG5pbXBvcnQgeyBwcm92aWRlQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlSWZQYXJlbnRJc1VuYXZhaWxhYmxlIH0gZnJvbSAnLi4vLi4vY2FsZW5kYXIuc2NoZWR1bGUuc2VsZWN0aW9uLnN0b3JlLnByb3ZpZGUnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERieEZvcm1DYWxlbmRhckRhdGVTY2hlZHVsZVJhbmdlRmllbGRQcm9wcyBleHRlbmRzIFBpY2s8Rm9ybWx5RmllbGRQcm9wcywgJ2xhYmVsJyB8ICdkZXNjcmlwdGlvbicgfCAncmVhZG9ubHknIHwgJ3JlcXVpcmVkJz4ge1xuICBhcHBlYXJhbmNlPzogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZTtcbiAgaGlkZUN1c3RvbWl6ZT86IGJvb2xlYW47XG4gIGZpbHRlcj86IE9ic2VydmFibGVPclZhbHVlPE1heWJlPERhdGVTY2hlZHVsZURhdGVGaWx0ZXJDb25maWc+Pjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImRieC1zY2hlZHVsZS1zZWxlY3Rpb24tZmllbGRcIj5cbiAgICAgIDxkYngtc2NoZWR1bGUtc2VsZWN0aW9uLWNhbGVuZGFyLWRhdGUtcmFuZ2UgW3Nob3dDdXN0b21pemVdPVwic2hvd0N1c3RvbWl6ZVwiIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiIFtkaXNhYmxlZF09XCJpc1JlYWRvbmx5T3JEaXNhYmxlZFwiIFtsYWJlbF09XCJsYWJlbFwiIFtoaW50XT1cImRlc2NyaXB0aW9uXCI+XG4gICAgICAgIDxkYngtc2NoZWR1bGUtc2VsZWN0aW9uLWNhbGVuZGFyLWRhdGUtZGlhbG9nLWJ1dHRvbiBjdXN0b21pemVCdXR0b24+PC9kYngtc2NoZWR1bGUtc2VsZWN0aW9uLWNhbGVuZGFyLWRhdGUtZGlhbG9nLWJ1dHRvbj5cbiAgICAgIDwvZGJ4LXNjaGVkdWxlLXNlbGVjdGlvbi1jYWxlbmRhci1kYXRlLXJhbmdlPlxuICAgIDwvZGl2PlxuICBgLFxuICBwcm92aWRlcnM6IFtwcm92aWRlQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlSWZQYXJlbnRJc1VuYXZhaWxhYmxlKCldXG59KVxuZXhwb3J0IGNsYXNzIERieEZvcm1DYWxlbmRhckRhdGVTY2hlZHVsZVJhbmdlRmllbGRDb21wb25lbnQ8VCBleHRlbmRzIERieEZvcm1DYWxlbmRhckRhdGVTY2hlZHVsZVJhbmdlRmllbGRQcm9wcyA9IERieEZvcm1DYWxlbmRhckRhdGVTY2hlZHVsZVJhbmdlRmllbGRQcm9wcz4gZXh0ZW5kcyBGaWVsZFR5cGU8RmllbGRUeXBlQ29uZmlnPFQ+PiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBfc3luY1N1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcbiAgcHJpdmF0ZSBfdmFsdWVTdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG4gIHByaXZhdGUgX2ZpbHRlclN1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcblxuICBwcml2YXRlIF9mb3JtQ29udHJvbE9icyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF5YmU8QWJzdHJhY3RDb250cm9sPj4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgZm9ybUNvbnRyb2wkID0gdGhpcy5fZm9ybUNvbnRyb2xPYnMucGlwZShmaWx0ZXJNYXliZSgpKTtcblxuICByZWFkb25seSB2YWx1ZSQgPSB0aGlzLmZvcm1Db250cm9sJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoY29udHJvbCkgPT4gY29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShzdGFydFdpdGgoY29udHJvbC52YWx1ZSkpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIHJlYWRvbmx5IGNvbXBhY3Q6IENvbXBhY3RDb250ZXh0U3RvcmUsIHJlYWRvbmx5IGRieENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdG9yZTogRGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlLCByZWFkb25seSBuZ1pvbmU6IE5nWm9uZSkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBnZXQgZm9ybUdyb3VwTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLmtleSBhcyBzdHJpbmc7XG4gIH1cblxuICBnZXQgZm9ybUdyb3VwKCk6IEZvcm1Hcm91cCB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybSBhcyBGb3JtR3JvdXA7XG4gIH1cblxuICBnZXQgbGFiZWwoKTogTWF5YmU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHM/LmxhYmVsO1xuICB9XG5cbiAgZ2V0IGRlc2NyaXB0aW9uKCk6IE1heWJlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRlc2NyaXB0aW9uO1xuICB9XG5cbiAgZ2V0IGlzUmVhZG9ubHlPckRpc2FibGVkKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnJlYWRvbmx5IHx8IHRoaXMuZGlzYWJsZWQ7XG4gIH1cblxuICBnZXQgc2hvd0N1c3RvbWl6ZSgpIHtcbiAgICByZXR1cm4gIXRoaXMucHJvcHMuaGlkZUN1c3RvbWl6ZTtcbiAgfVxuXG4gIGdldCBmaWx0ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZmlsdGVyO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fZm9ybUNvbnRyb2xPYnMubmV4dCh0aGlzLmZvcm1Db250cm9sKTtcblxuICAgIHRoaXMuX3N5bmNTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy52YWx1ZSQucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlU2NoZWR1bGVSYW5nZSkpLnN1YnNjcmliZSgoeCkgPT4ge1xuICAgICAgdGhpcy5kYnhDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmUuc2V0RGF0ZVNjaGVkdWxlUmFuZ2VWYWx1ZSh4KTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3ZhbHVlU3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMuZGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlLmN1cnJlbnREYXRlU2NoZWR1bGVSYW5nZVZhbHVlJC5zdWJzY3JpYmUoKHgpID0+IHtcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoeCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmZpbHRlcjtcblxuICAgIGlmIChmaWx0ZXIgIT0gbnVsbCkge1xuICAgICAgdGhpcy5fZmlsdGVyU3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMuZGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlLnNldEZpbHRlcihhc09ic2VydmFibGUoZmlsdGVyKSkgYXMgU3Vic2NyaXB0aW9uO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgdGhpcy5fc3luY1N1Yi5kZXN0cm95KCk7XG4gICAgdGhpcy5fdmFsdWVTdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX2Zvcm1Db250cm9sT2JzLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fZmlsdGVyU3ViLmRlc3Ryb3koKTtcbiAgfVxufVxuIl19
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuc2NoZWR1bGUuZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZvcm0vY2FsZW5kYXIvc3JjL2xpYi9maWVsZC9zY2hlZHVsZS9jYWxlbmRhci5zY2hlZHVsZS5maWVsZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQXFCLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcvRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFnQixTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUcsT0FBTyxFQUFFLFdBQVcsRUFBcUIsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pHLE9BQU8sRUFBaUcsdUJBQXVCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkosT0FBTyxFQUFrQyxpQ0FBaUMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzVILE9BQU8sRUFBRSwwREFBMEQsRUFBRSxNQUFNLGlEQUFpRCxDQUFDOzs7Ozs7QUFvQjdILE1BQU0sT0FBTyw4Q0FBa0osU0FBUSxTQUE2QjtJQWNsTSxZQUFpQyxPQUE0QixFQUFXLGlDQUFvRSxFQUFXLE1BQWM7UUFDbkssS0FBSyxFQUFFLENBQUM7UUFEdUIsWUFBTyxHQUFQLE9BQU8sQ0FBcUI7UUFBVyxzQ0FBaUMsR0FBakMsaUNBQWlDLENBQW1DO1FBQVcsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQWI3SixhQUFRLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQ3BDLGNBQVMsR0FBRyxJQUFJLGtC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QUcsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQWlCLENBQUM7U0FDbkk7UUFFRCxJQUFJLElBQUksQ0FBQyxxQkFBcUIsS0FBSyxTQUFTLEVBQUU7WUFDNUMsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1NBQzdGO1FBRUQsSUFBSSxJQUFJLENBQUMsc0NBQXNDLElBQUksSUFBSSxFQUFFO1lBQ3ZELElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyx5Q0FBeUMsQ0FBQyxJQUFJLENBQUMsc0NBQXNDLENBQUMsQ0FBQztTQUMvSDtRQUVELHdFQUF3RTtJQUMxRSxDQUFDO0lBRVEsV0FBVztRQUNsQixLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xDLENBQUM7OzRJQWpHVSw4Q0FBOEM7Z0lBQTlDLDhDQUE4Qyx1Q0FGOUMsQ0FBQywwREFBMEQsRUFBRSxDQUFDLGlEQVAvRDs7Ozs7O0dBTVQ7NEZBR1UsOENBQThDO2tCQVYxRCxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRTs7Ozs7O0dBTVQ7b0JBQ0QsU0FBUyxFQUFFLENBQUMsMERBQTBELEVBQUUsQ0FBQztpQkFDMUU7OzBCQWVjLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvbXBhY3RDb250ZXh0U3RvcmUgfSBmcm9tICdAZGVyZWVrYi9kYngtd2ViJztcbmltcG9ydCB7IENvbXBvbmVudCwgTmdab25lLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZpZWxkVHlwZUNvbmZpZywgRm9ybWx5RmllbGRQcm9wcyB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgQWxsT3JOb25lU2VsZWN0aW9uLCBBcnJheU9yVmFsdWUsIE1heWJlIH0gZnJvbSAnQGRlcmVla2IvdXRpbCc7XG5pbXBvcnQgeyBGaWVsZFR5cGUgfSBmcm9tICdAbmd4LWZvcm1seS9tYXRlcmlhbCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBzaGFyZVJlcGxheSwgc3RhcnRXaXRoLCBTdWJzY3JpcHRpb24sIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyTWF5YmUsIE9ic2VydmFibGVPclZhbHVlLCBTdWJzY3JpcHRpb25PYmplY3QsIGFzT2JzZXJ2YWJsZSB9IGZyb20gJ0BkZXJlZWtiL3J4anMnO1xuaW1wb3J0IHsgRGF0ZUJsb2NrSW5kZXgsIERhdGVPckRhdGVSYW5nZU9yRGF0ZUJsb2NrSW5kZXhPckRhdGVCbG9ja1JhbmdlLCBEYXRlU2NoZWR1bGVEYXRlRmlsdGVyQ29uZmlnLCBpc1NhbWVEYXRlU2NoZWR1bGVSYW5nZSB9IGZyb20gJ0BkZXJlZWtiL2RhdGUnO1xuaW1wb3J0IHsgQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCBEYnhDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmUgfSBmcm9tICcuLi8uLi9jYWxlbmRhci5zY2hlZHVsZS5zZWxlY3Rpb24uc3RvcmUnO1xuaW1wb3J0IHsgcHJvdmlkZUNhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdG9yZUlmUGFyZW50SXNVbmF2YWlsYWJsZSB9IGZyb20gJy4uLy4uL2NhbGVuZGFyLnNjaGVkdWxlLnNlbGVjdGlvbi5zdG9yZS5wcm92aWRlJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcblxuZXhwb3J0IGludGVyZmFjZSBEYnhGb3JtQ2FsZW5kYXJEYXRlU2NoZWR1bGVSYW5nZUZpZWxkUHJvcHMgZXh0ZW5kcyBQaWNrPEZvcm1seUZpZWxkUHJvcHMsICdsYWJlbCcgfCAnZGVzY3JpcHRpb24nIHwgJ3JlYWRvbmx5JyB8ICdyZXF1aXJlZCc+LCBQaWNrPENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgJ2NvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyJyB8ICdpbml0aWFsU2VsZWN0aW9uU3RhdGUnPiB7XG4gIGFwcGVhcmFuY2U/OiBNYXRGb3JtRmllbGRBcHBlYXJhbmNlO1xuICBoaWRlQ3VzdG9taXplPzogYm9vbGVhbjtcbiAgZmlsdGVyPzogT2JzZXJ2YWJsZU9yVmFsdWU8TWF5YmU8RGF0ZVNjaGVkdWxlRGF0ZUZpbHRlckNvbmZpZz4+O1xuICBleGNsdXNpb25zPzogT2JzZXJ2YWJsZU9yVmFsdWU8TWF5YmU8QXJyYXlPclZhbHVlPERhdGVPckRhdGVSYW5nZU9yRGF0ZUJsb2NrSW5kZXhPckRhdGVCbG9ja1JhbmdlPj4+O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiZGJ4LXNjaGVkdWxlLXNlbGVjdGlvbi1maWVsZFwiPlxuICAgICAgPGRieC1zY2hlZHVsZS1zZWxlY3Rpb24tY2FsZW5kYXItZGF0ZS1yYW5nZSBbc2hvd0N1c3RvbWl6ZV09XCJzaG93Q3VzdG9taXplXCIgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCIgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHlPckRpc2FibGVkXCIgW2xhYmVsXT1cImxhYmVsXCIgW2hpbnRdPVwiZGVzY3JpcHRpb25cIj5cbiAgICAgICAgPGRieC1zY2hlZHVsZS1zZWxlY3Rpb24tY2FsZW5kYXItZGF0ZS1kaWFsb2ctYnV0dG9uIGN1c3RvbWl6ZUJ1dHRvbj48L2RieC1zY2hlZHVsZS1zZWxlY3Rpb24tY2FsZW5kYXItZGF0ZS1kaWFsb2ctYnV0dG9uPlxuICAgICAgPC9kYngtc2NoZWR1bGUtc2VsZWN0aW9uLWNhbGVuZGFyLWRhdGUtcmFuZ2U+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHByb3ZpZGVyczogW3Byb3ZpZGVDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmVJZlBhcmVudElzVW5hdmFpbGFibGUoKV1cbn0pXG5leHBvcnQgY2xhc3MgRGJ4Rm9ybUNhbGVuZGFyRGF0ZVNjaGVkdWxlUmFuZ2VGaWVsZENvbXBvbmVudDxUIGV4dGVuZHMgRGJ4Rm9ybUNhbGVuZGFyRGF0ZVNjaGVkdWxlUmFuZ2VGaWVsZFByb3BzID0gRGJ4Rm9ybUNhbGVuZGFyRGF0ZVNjaGVkdWxlUmFuZ2VGaWVsZFByb3BzPiBleHRlbmRzIEZpZWxkVHlwZTxGaWVsZFR5cGVDb25maWc8VD4+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9zeW5jU3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuICBwcml2YXRlIF92YWx1ZVN1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcbiAgcHJpdmF0ZSBfZmlsdGVyU3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuICBwcml2YXRlIF9leGNsdXNpb25zU3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuXG4gIHByaXZhdGUgX2Zvcm1Db250cm9sT2JzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXliZTxBYnN0cmFjdENvbnRyb2w+Pih1bmRlZmluZWQpO1xuICByZWFkb25seSBmb3JtQ29udHJvbCQgPSB0aGlzLl9mb3JtQ29udHJvbE9icy5waXBlKGZpbHRlck1heWJlKCkpO1xuXG4gIHJlYWRvbmx5IHZhbHVlJCA9IHRoaXMuZm9ybUNvbnRyb2wkLnBpcGUoXG4gICAgc3dpdGNoTWFwKChjb250cm9sKSA9PiBjb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aChjb250cm9sLnZhbHVlKSkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgcmVhZG9ubHkgY29tcGFjdDogQ29tcGFjdENvbnRleHRTdG9yZSwgcmVhZG9ubHkgZGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlOiBEYnhDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmUsIHJlYWRvbmx5IG5nWm9uZTogTmdab25lKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGdldCBmb3JtR3JvdXBOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQua2V5IGFzIHN0cmluZztcbiAgfVxuXG4gIGdldCBmb3JtR3JvdXAoKTogRm9ybUdyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtIGFzIEZvcm1Hcm91cDtcbiAgfVxuXG4gIGdldCBsYWJlbCgpOiBNYXliZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcz8ubGFiZWw7XG4gIH1cblxuICBnZXQgZGVzY3JpcHRpb24oKTogTWF5YmU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGVzY3JpcHRpb247XG4gIH1cblxuICBnZXQgaXNSZWFkb25seU9yRGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucmVhZG9ubHkgfHwgdGhpcy5kaXNhYmxlZDtcbiAgfVxuXG4gIGdldCBzaG93Q3VzdG9taXplKCkge1xuICAgIHJldHVybiAhdGhpcy5wcm9wcy5oaWRlQ3VzdG9taXplO1xuICB9XG5cbiAgZ2V0IGZpbHRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5maWx0ZXI7XG4gIH1cblxuICBnZXQgZXhjbHVzaW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5leGNsdXNpb25zO1xuICB9XG5cbiAgZ2V0IGluaXRpYWxTZWxlY3Rpb25TdGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pbml0aWFsU2VsZWN0aW9uU3RhdGU7XG4gIH1cblxuICBnZXQgY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXI7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9mb3JtQ29udHJvbE9icy5uZXh0KHRoaXMuZm9ybUNvbnRyb2wpO1xuXG4gICAgdGhpcy5fc3luY1N1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLnZhbHVlJC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGVTY2hlZHVsZVJhbmdlKSkuc3Vic2NyaWJlKCh4KSA9PiB7XG4gICAgICB0aGlzLmRieENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdG9yZS5zZXREYXRlU2NoZWR1bGVSYW5nZVZhbHVlKHgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fdmFsdWVTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy5kYnhDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmUuY3VycmVudERhdGVTY2hlZHVsZVJhbmdlVmFsdWUkLnN1YnNjcmliZSgoeCkgPT4ge1xuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh4KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHsgZmlsdGVyLCBleGNsdXNpb25zIH0gPSB0aGlzO1xuXG4gICAgaWYgKGZpbHRlciAhPSBudWxsKSB7XG4gICAgICB0aGlzLl9maWx0ZXJTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy5kYnhDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmUuc2V0RmlsdGVyKGFzT2JzZXJ2YWJsZShmaWx0ZXIpKSBhcyBTdWJzY3JpcHRpb247XG4gICAgfVxuXG4gICAgaWYgKGV4Y2x1c2lvbnMgIT0gbnVsbCkge1xuICAgICAgdGhpcy5fZXhjbHVzaW9uc1N1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLmRieENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdG9yZS5zZXRFeGNsdXNpb25zKGFzT2JzZXJ2YWJsZShleGNsdXNpb25zKSkgYXMgU3Vic2NyaXB0aW9uO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmluaXRpYWxTZWxlY3Rpb25TdGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmRieENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdG9yZS5zZXRJbml0aWFsU2VsZWN0aW9uU3RhdGUodGhpcy5pbml0aWFsU2VsZWN0aW9uU3RhdGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyICE9IG51bGwpIHtcbiAgICAgIHRoaXMuZGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlLnNldENvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyKHRoaXMuY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIpO1xuICAgIH1cblxuICAgIC8vIFRPRE86IEFsc28gYWRkIGFiaWxpdHkgdG8gc2V0IG1pbi9tYXggZGF0ZXMgaW5kZXBlbmRlbnQgb2YgdGhlIGZpbHRlclxuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB0aGlzLl9zeW5jU3ViLmRlc3Ryb3koKTtcbiAgICB0aGlzLl92YWx1ZVN1Yi5kZXN0cm95KCk7XG4gICAgdGhpcy5fZmlsdGVyU3ViLmRlc3Ryb3koKTtcbiAgICB0aGlzLl9leGNsdXNpb25zU3ViLmRlc3Ryb3koKTtcbiAgICB0aGlzLl9mb3JtQ29udHJvbE9icy5jb21wbGV0ZSgpO1xuICB9XG59XG4iXX0=
@@ -1,16 +1,19 @@
1
1
  import { formlyField, propsAndConfigForFieldConfig } from '@dereekb/dbx-form';
2
2
  export function dateScheduleRangeField(config = {}) {
3
- const { key = 'schedule', filter } = config;
3
+ const { key = 'schedule', filter, initialSelectionState, computeSelectionResultRelativeToFilter, exclusions } = config;
4
4
  const fieldConfig = {
5
5
  ...formlyField({
6
6
  key,
7
7
  type: 'date-schedule-range',
8
8
  ...propsAndConfigForFieldConfig(config, {
9
9
  label: config.label ?? 'Schedule',
10
- filter
10
+ filter,
11
+ computeSelectionResultRelativeToFilter,
12
+ initialSelectionState,
13
+ exclusions
11
14
  })
12
15
  })
13
16
  };
14
17
  return fieldConfig;
15
18
  }
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuc2NoZWR1bGUuZmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZm9ybS9jYWxlbmRhci9zcmMvbGliL2ZpZWxkL3NjaGVkdWxlL2NhbGVuZGFyLnNjaGVkdWxlLmZpZWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBdUMsV0FBVyxFQUFzQiw0QkFBNEIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBTXZJLE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxTQUF1QyxFQUFFO0lBQzlFLE1BQU0sRUFBRSxHQUFHLEdBQUcsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUM1QyxNQUFNLFdBQVcsR0FBc0I7UUFDckMsR0FBRyxXQUFXLENBQUM7WUFDYixHQUFHO1lBQ0gsSUFBSSxFQUFFLHFCQUFxQjtZQUMzQixHQUFHLDRCQUE0QixDQUFDLE1BQU0sRUFBRTtnQkFDdEMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLElBQUksVUFBVTtnQkFDakMsTUFBTTthQUNQLENBQUM7U0FDSCxDQUFDO0tBQ0gsQ0FBQztJQUVGLE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZXNjcmlwdGlvbkZpZWxkQ29uZmlnLCBGaWVsZENvbmZpZywgZm9ybWx5RmllbGQsIExhYmVsZWRGaWVsZENvbmZpZywgcHJvcHNBbmRDb25maWdGb3JGaWVsZENvbmZpZyB9IGZyb20gJ0BkZXJlZWtiL2RieC1mb3JtJztcbmltcG9ydCB7IEZvcm1seUZpZWxkQ29uZmlnIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQgeyBEYnhGb3JtQ2FsZW5kYXJEYXRlU2NoZWR1bGVSYW5nZUZpZWxkUHJvcHMgfSBmcm9tICcuL2NhbGVuZGFyLnNjaGVkdWxlLmZpZWxkLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0ZVNjaGVkdWxlUmFuZ2VGaWVsZENvbmZpZyBleHRlbmRzIE9taXQ8TGFiZWxlZEZpZWxkQ29uZmlnLCAna2V5JyB8ICdwbGFjZWhvbGRlcic+LCBEZXNjcmlwdGlvbkZpZWxkQ29uZmlnLCBQYXJ0aWFsPEZpZWxkQ29uZmlnPiwgRGJ4Rm9ybUNhbGVuZGFyRGF0ZVNjaGVkdWxlUmFuZ2VGaWVsZFByb3BzIHt9XG5cbmV4cG9ydCBmdW5jdGlvbiBkYXRlU2NoZWR1bGVSYW5nZUZpZWxkKGNvbmZpZzogRGF0ZVNjaGVkdWxlUmFuZ2VGaWVsZENvbmZpZyA9IHt9KTogRm9ybWx5RmllbGRDb25maWcge1xuICBjb25zdCB7IGtleSA9ICdzY2hlZHVsZScsIGZpbHRlciB9ID0gY29uZmlnO1xuICBjb25zdCBmaWVsZENvbmZpZzogRm9ybWx5RmllbGRDb25maWcgPSB7XG4gICAgLi4uZm9ybWx5RmllbGQoe1xuICAgICAga2V5LFxuICAgICAgdHlwZTogJ2RhdGUtc2NoZWR1bGUtcmFuZ2UnLFxuICAgICAgLi4ucHJvcHNBbmRDb25maWdGb3JGaWVsZENvbmZpZyhjb25maWcsIHtcbiAgICAgICAgbGFiZWw6IGNvbmZpZy5sYWJlbCA/PyAnU2NoZWR1bGUnLFxuICAgICAgICBmaWx0ZXJcbiAgICAgIH0pXG4gICAgfSlcbiAgfTtcblxuICByZXR1cm4gZmllbGRDb25maWc7XG59XG4iXX0=
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuc2NoZWR1bGUuZmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZm9ybS9jYWxlbmRhci9zcmMvbGliL2ZpZWxkL3NjaGVkdWxlL2NhbGVuZGFyLnNjaGVkdWxlLmZpZWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBdUMsV0FBVyxFQUFzQiw0QkFBNEIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBTXZJLE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxTQUF1QyxFQUFFO0lBQzlFLE1BQU0sRUFBRSxHQUFHLEdBQUcsVUFBVSxFQUFFLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxzQ0FBc0MsRUFBRSxVQUFVLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFDdkgsTUFBTSxXQUFXLEdBQXNCO1FBQ3JDLEdBQUcsV0FBVyxDQUFDO1lBQ2IsR0FBRztZQUNILElBQUksRUFBRSxxQkFBcUI7WUFDM0IsR0FBRyw0QkFBNEIsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3RDLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxJQUFJLFVBQVU7Z0JBQ2pDLE1BQU07Z0JBQ04sc0NBQXNDO2dCQUN0QyxxQkFBcUI7Z0JBQ3JCLFVBQVU7YUFDWCxDQUFDO1NBQ0gsQ0FBQztLQUNILENBQUM7SUFFRixPQUFPLFdBQVcsQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzY3JpcHRpb25GaWVsZENvbmZpZywgRmllbGRDb25maWcsIGZvcm1seUZpZWxkLCBMYWJlbGVkRmllbGRDb25maWcsIHByb3BzQW5kQ29uZmlnRm9yRmllbGRDb25maWcgfSBmcm9tICdAZGVyZWVrYi9kYngtZm9ybSc7XG5pbXBvcnQgeyBGb3JtbHlGaWVsZENvbmZpZyB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgRGJ4Rm9ybUNhbGVuZGFyRGF0ZVNjaGVkdWxlUmFuZ2VGaWVsZFByb3BzIH0gZnJvbSAnLi9jYWxlbmRhci5zY2hlZHVsZS5maWVsZC5jb21wb25lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERhdGVTY2hlZHVsZVJhbmdlRmllbGRDb25maWcgZXh0ZW5kcyBPbWl0PExhYmVsZWRGaWVsZENvbmZpZywgJ2tleScgfCAncGxhY2Vob2xkZXInPiwgRGVzY3JpcHRpb25GaWVsZENvbmZpZywgUGFydGlhbDxGaWVsZENvbmZpZz4sIERieEZvcm1DYWxlbmRhckRhdGVTY2hlZHVsZVJhbmdlRmllbGRQcm9wcyB7fVxuXG5leHBvcnQgZnVuY3Rpb24gZGF0ZVNjaGVkdWxlUmFuZ2VGaWVsZChjb25maWc6IERhdGVTY2hlZHVsZVJhbmdlRmllbGRDb25maWcgPSB7fSk6IEZvcm1seUZpZWxkQ29uZmlnIHtcbiAgY29uc3QgeyBrZXkgPSAnc2NoZWR1bGUnLCBmaWx0ZXIsIGluaXRpYWxTZWxlY3Rpb25TdGF0ZSwgY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIsIGV4Y2x1c2lvbnMgfSA9IGNvbmZpZztcbiAgY29uc3QgZmllbGRDb25maWc6IEZvcm1seUZpZWxkQ29uZmlnID0ge1xuICAgIC4uLmZvcm1seUZpZWxkKHtcbiAgICAgIGtleSxcbiAgICAgIHR5cGU6ICdkYXRlLXNjaGVkdWxlLXJhbmdlJyxcbiAgICAgIC4uLnByb3BzQW5kQ29uZmlnRm9yRmllbGRDb25maWcoY29uZmlnLCB7XG4gICAgICAgIGxhYmVsOiBjb25maWcubGFiZWwgPz8gJ1NjaGVkdWxlJyxcbiAgICAgICAgZmlsdGVyLFxuICAgICAgICBjb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlcixcbiAgICAgICAgaW5pdGlhbFNlbGVjdGlvblN0YXRlLFxuICAgICAgICBleGNsdXNpb25zXG4gICAgICB9KVxuICAgIH0pXG4gIH07XG5cbiAgcmV0dXJuIGZpZWxkQ29uZmlnO1xufVxuIl19
@@ -5,10 +5,10 @@ import { Injectable, SkipSelf, Directive, Injector, Optional, Component, Inject,
5
5
  import { FieldType } from '@ngx-formly/material';
6
6
  import { map, distinctUntilChanged, shareReplay, BehaviorSubject, switchMap, of, startWith, filter, throttleTime, first } from 'rxjs';
7
7
  import { filterMaybe, SubscriptionObject, asObservable } from '@dereekb/rxjs';
8
- import { DateScheduleDayCode, expandDateScheduleDayCodesToDayOfWeekSet, dateTimingRelativeIndexFactory, dateBlockDayOfWeekFactory, isSameDate, isSameDateRange, isSameDateScheduleRange, findMaxDate, isSameDateDay, findMinDate, dateScheduleDateFilter, dateScheduleDayCodes, isDateInDateRangeFunction, isDateWithinDateBlockRangeFunction, dateScheduleEncodedWeek, dateBlockTimingDateFactory, enabledDaysFromDateScheduleDayCodes, dateScheduleDayCodesFromEnabledDays, formatToMonthDayString } from '@dereekb/date';
9
- import { setsAreEquivalent, iterableToArray, toggleInSet, addToSet, isIndexNumberInIndexRangeFunction, range, minAndMaxNumber, randomNumberFactory, getDaysOfWeekNames } from '@dereekb/util';
8
+ import { DateScheduleDayCode, expandDateScheduleDayCodesToDayOfWeekSet, dateTimingRelativeIndexFactory, dateBlockDayOfWeekFactory, findMaxDate, findMinDate, isSameDate, isSameDateRange, isSameDateScheduleRange, isSameDateDay, dateTimingRelativeIndexArrayFactory, copyDateScheduleDateFilterConfig, dateScheduleDateFilter, expandDateScheduleDayCodes, isDateInDateRangeFunction, isDateWithinDateBlockRangeFunction, dateScheduleEncodedWeek, dateBlockTimingDateFactory, enabledDaysFromDateScheduleDayCodes, dateScheduleDayCodesFromEnabledDays, formatToMonthDayString } from '@dereekb/date';
9
+ import { setsAreEquivalent, unique, mergeArrays, range, iterableToArray, toggleInSet, addToSet, isIndexNumberInIndexRangeFunction, minAndMaxNumber, randomNumberFactory, getDaysOfWeekNames } from '@dereekb/util';
10
10
  import { ComponentStore } from '@ngrx/component-store';
11
- import { startOfDay, startOfYear, addYears } from 'date-fns';
11
+ import { startOfDay } from 'date-fns';
12
12
  import * as i1$1 from '@dereekb/dbx-web';
13
13
  import { AbstractPopoverDirective, AbstractDialogDirective, DbxActionModule, DbxButtonModule, DbxDialogInteractionModule, DbxPopoverInteractionModule, DbxTextModule } from '@dereekb/dbx-web';
14
14
  import * as i3 from '@angular/forms';
@@ -37,10 +37,13 @@ import { FlexLayoutModule } from '@angular/flex-layout';
37
37
 
38
38
  function dateScheduleRangeField(config = {}) {
39
39
  var _a;
40
- const { key = 'schedule', filter } = config;
40
+ const { key = 'schedule', filter, initialSelectionState, computeSelectionResultRelativeToFilter, exclusions } = config;
41
41
  const fieldConfig = Object.assign({}, formlyField(Object.assign({ key, type: 'date-schedule-range' }, propsAndConfigForFieldConfig(config, {
42
42
  label: (_a = config.label) !== null && _a !== void 0 ? _a : 'Schedule',
43
- filter
43
+ filter,
44
+ computeSelectionResultRelativeToFilter,
45
+ initialSelectionState,
46
+ exclusions
44
47
  }))));
45
48
  return fieldConfig;
46
49
  }
@@ -91,11 +94,26 @@ function initialCalendarScheduleSelectionState() {
91
94
  indexDayOfWeek,
92
95
  isEnabledFilterDay: () => true,
93
96
  isEnabledDay: () => false,
94
- minDate: new Date(0),
95
- maxDate: startOfYear(addYears(new Date(), 100)),
97
+ minDate: null,
98
+ maxDate: null,
99
+ computeSelectionResultRelativeToFilter: true,
96
100
  cellContentFactory: defaultCalendarScheduleSelectionCellContentFactory
97
101
  };
98
102
  }
103
+ function calendarScheduleMinDate(x) {
104
+ var _a;
105
+ return findMaxDate([(_a = x.filter) === null || _a === void 0 ? void 0 : _a.start, x.minDate]);
106
+ }
107
+ function calendarScheduleMaxDate(x) {
108
+ var _a;
109
+ return findMinDate([(_a = x.filter) === null || _a === void 0 ? void 0 : _a.end, x.maxDate]);
110
+ }
111
+ function calendarScheduleMinAndMaxDate(x) {
112
+ return {
113
+ minDate: calendarScheduleMinDate(x),
114
+ maxDate: calendarScheduleMaxDate(x)
115
+ };
116
+ }
99
117
  class DbxCalendarScheduleSelectionStore extends ComponentStore {
100
118
  constructor() {
101
119
  super(initialCalendarScheduleSelectionState());
@@ -116,18 +134,22 @@ class DbxCalendarScheduleSelectionStore extends ComponentStore {
116
134
  this.isEnabledFilterDayFunction$ = this.state$.pipe(map((x) => x.isEnabledFilterDay), shareReplay(1));
117
135
  this.isEnabledDayFunction$ = this.state$.pipe(map((x) => x.isEnabledDay), shareReplay(1));
118
136
  this.currentDateRange$ = this.state$.pipe(map(computeCalendarScheduleSelectionRange), distinctUntilChanged((a, b) => isSameDateRange(a, b)), shareReplay(1));
137
+ this.computeSelectionResultRelativeToFilter$ = this.state$.pipe(map((x) => x.computeSelectionResultRelativeToFilter), shareReplay(1));
138
+ this.startBeingUsedFromFilter$ = this.state$.pipe(map((x) => { var _a; return x.computeSelectionResultRelativeToFilter && ((_a = x.filter) === null || _a === void 0 ? void 0 : _a.start) != null; }), shareReplay(1));
119
139
  this.dateRange$ = this.currentDateRange$.pipe(filterMaybe(), shareReplay(1));
120
140
  this.scheduleDays$ = this.state$.pipe(map((x) => x.scheduleDays), distinctUntilChanged(setsAreEquivalent), shareReplay(1));
121
141
  this.currentSelectionValue$ = this.state$.pipe(map((x) => x.currentSelectionValue), shareReplay(1));
122
142
  this.selectionValue$ = this.currentSelectionValue$.pipe(filterMaybe(), shareReplay(1));
123
143
  this.currentDateScheduleRangeValue$ = this.currentSelectionValue$.pipe(map((x) => x === null || x === void 0 ? void 0 : x.dateScheduleRange), distinctUntilChanged(isSameDateScheduleRange), shareReplay(1));
124
144
  this.dateScheduleRangeValue$ = this.currentDateScheduleRangeValue$.pipe(filterMaybe(), shareReplay(1));
125
- this.minDate$ = this.state$.pipe(map((x) => { var _a; return findMaxDate([(_a = x.filter) === null || _a === void 0 ? void 0 : _a.start, x.minDate]); }), distinctUntilChanged(isSameDateDay), shareReplay(1));
126
- this.maxDate$ = this.state$.pipe(map((x) => { var _a; return findMinDate([(_a = x.filter) === null || _a === void 0 ? void 0 : _a.end, x.maxDate]); }), distinctUntilChanged(isSameDateDay), shareReplay(1));
145
+ this.minDate$ = this.state$.pipe(map(calendarScheduleMinDate), distinctUntilChanged(isSameDateDay), shareReplay(1));
146
+ this.maxDate$ = this.state$.pipe(map(calendarScheduleMaxDate), distinctUntilChanged(isSameDateDay), shareReplay(1));
127
147
  this.cellContentFactory$ = this.state$.pipe(map((x) => x.cellContentFactory), distinctUntilChanged(), shareReplay(1));
128
148
  this.isCustomized$ = this.state$.pipe(map((x) => x.selectedIndexes.size > 0), distinctUntilChanged(), shareReplay(1));
129
149
  // MARK: State Changes
130
150
  this.setFilter = this.updater((state, filter) => updateStateWithFilter(state, filter));
151
+ this.setExclusions = this.updater((state, exclusions) => updateStateWithExclusions(state, exclusions));
152
+ this.setComputeSelectionResultRelativeToFilter = this.updater((state, computeSelectionResultRelativeToFilter) => updateStateWithComputeSelectionResultRelativeToFilter(state, computeSelectionResultRelativeToFilter));
131
153
  this.clearFilter = this.updater((state) => updateStateWithFilter(state, undefined));
132
154
  this.setTimezone = this.updater((state, timezone) => (Object.assign(Object.assign({}, state), { timezone })));
133
155
  this.setInputRange = this.updater((state, range) => updateStateWithChangedRange(state, range));
@@ -135,6 +157,8 @@ class DbxCalendarScheduleSelectionStore extends ComponentStore {
135
157
  this.addSelectedDates = this.updater((state, add) => updateStateWithChangedDates(state, { add }));
136
158
  this.removeSelectedDates = this.updater((state, remove) => updateStateWithChangedDates(state, { remove }));
137
159
  this.setSelectedDates = this.updater((state, set) => updateStateWithChangedDates(state, { set }));
160
+ this.selectAllDates = this.updater((state, selectAll = 'all') => updateStateWithChangedDates(state, { selectAll }));
161
+ this.setInitialSelectionState = this.updater((state, initialSelectionState) => updateStateWithInitialSelectionState(state, initialSelectionState));
138
162
  this.setScheduleDays = this.updater((state, scheduleDays) => updateStateWithChangedScheduleDays(state, scheduleDays));
139
163
  this.setAllowAllScheduleDays = this.updater((state) => updateStateWithChangedScheduleDays(state, null));
140
164
  this.setDateScheduleRangeValue = this.updater((state, value) => updateStateWithDateScheduleRangeValue(state, value));
@@ -146,12 +170,64 @@ DbxCalendarScheduleSelectionStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersi
146
170
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxCalendarScheduleSelectionStore, decorators: [{
147
171
  type: Injectable
148
172
  }], ctorParameters: function () { return []; } });
149
- function updateStateWithFilter(state, filter) {
173
+ function updateStateWithInitialSelectionState(state, initialSelectionState) {
174
+ const { selectedIndexes } = state;
175
+ if (selectedIndexes.size === 0 && initialSelectionState === 'all') {
176
+ state = updateStateWithChangedDates(state, { selectAll: initialSelectionState });
177
+ }
178
+ return Object.assign(Object.assign({}, state), { initialSelectionState });
179
+ }
180
+ function updateStateWithComputeSelectionResultRelativeToFilter(currentState, computeSelectionResultRelativeToFilter) {
181
+ let state = Object.assign(Object.assign({}, currentState), { computeSelectionResultRelativeToFilter });
182
+ if (Boolean(currentState.computeSelectionResultRelativeToFilter) !== Boolean(computeSelectionResultRelativeToFilter)) {
183
+ state = updateStateWithChangedDates(state, {}); // recalculate if change occurs as it will affect the output value
184
+ }
185
+ return state;
186
+ }
187
+ function updateStateWithExclusions(state, inputExclusions) {
188
+ let computedExclusions;
189
+ if (inputExclusions) {
190
+ const { indexFactory } = state;
191
+ const indexArrayFactory = dateTimingRelativeIndexArrayFactory(indexFactory);
192
+ computedExclusions = indexArrayFactory(inputExclusions);
193
+ }
194
+ state = Object.assign(Object.assign({}, state), { inputExclusions, computedExclusions });
195
+ return updateStateWithFilter(state, state.filter);
196
+ }
197
+ function updateStateWithFilter(state, inputFilter) {
198
+ const { computedExclusions: exclusions } = state;
150
199
  let isEnabledFilterDay = () => true;
151
- if (filter) {
152
- isEnabledFilterDay = dateScheduleDateFilter(filter);
200
+ let filter = null;
201
+ if (inputFilter || (exclusions === null || exclusions === void 0 ? void 0 : exclusions.length)) {
202
+ let enabledFilter;
203
+ if (inputFilter) {
204
+ filter = copyDateScheduleDateFilterConfig(inputFilter); // copy filter
205
+ if (exclusions === null || exclusions === void 0 ? void 0 : exclusions.length) {
206
+ enabledFilter = Object.assign(Object.assign({}, filter), { ex: unique(mergeArrays([filter.ex, exclusions])) });
207
+ }
208
+ else {
209
+ enabledFilter = filter;
210
+ }
211
+ }
212
+ else {
213
+ enabledFilter = {
214
+ w: '89',
215
+ ex: exclusions
216
+ };
217
+ }
218
+ isEnabledFilterDay = dateScheduleDateFilter(enabledFilter);
153
219
  }
154
- return Object.assign(Object.assign({}, state), { filter, isEnabledFilterDay });
220
+ state = Object.assign(Object.assign({}, state), { filter, isEnabledFilterDay });
221
+ // attempt to re-apply the initial selection state once filter is applied
222
+ if (state.initialSelectionState) {
223
+ state = updateStateWithInitialSelectionState(state, state.initialSelectionState);
224
+ }
225
+ // re-calculate the selection given the filter
226
+ const { inputStart, inputEnd } = state;
227
+ if (inputStart && inputEnd) {
228
+ state = updateStateWithChangedRange(state, { inputStart, inputEnd });
229
+ }
230
+ return state;
155
231
  }
156
232
  function updateStateWithDateScheduleRangeValue(state, change) {
157
233
  var _a;
@@ -162,7 +238,7 @@ function updateStateWithDateScheduleRangeValue(state, change) {
162
238
  else {
163
239
  if (change != null) {
164
240
  const nextState = Object.assign(Object.assign({}, state), { inputStart: change.start, inputEnd: change.end, selectedIndexes: new Set(change.ex) });
165
- return updateStateWithChangedScheduleDays(finalizeNewCalendarScheduleSelectionState(nextState), dateScheduleDayCodes(change.w));
241
+ return updateStateWithChangedScheduleDays(finalizeNewCalendarScheduleSelectionState(nextState), expandDateScheduleDayCodes(change.w));
166
242
  }
167
243
  else {
168
244
  return noSelectionCalendarScheduleSelectionState(state); // clear selection, retain disabled days
@@ -182,10 +258,26 @@ function updateStateWithChangedScheduleDays(state, change) {
182
258
  }
183
259
  }
184
260
  function updateStateWithChangedDates(state, change) {
261
+ var _a;
185
262
  const { indexFactory, allowedDaysOfWeek, indexDayOfWeek } = state;
263
+ const { minDate, maxDate } = calendarScheduleMinAndMaxDate(state);
186
264
  let selectedIndexes;
187
- if (change.set) {
188
- selectedIndexes = new Set(iterableToArray(change.set).map(indexFactory));
265
+ if (change.reset || change.selectAll != null || change.set) {
266
+ let set = (_a = change.set) !== null && _a !== void 0 ? _a : [];
267
+ let selectAll = change.reset === true ? state.initialSelectionState : change.selectAll;
268
+ switch (selectAll) {
269
+ case 'all':
270
+ if (minDate != null && maxDate != null) {
271
+ const minIndex = indexFactory(minDate);
272
+ const maxIndex = indexFactory(maxDate);
273
+ set = range(minIndex, maxIndex);
274
+ }
275
+ break;
276
+ case 'none':
277
+ set = [];
278
+ break;
279
+ }
280
+ selectedIndexes = new Set(iterableToArray(set).map(indexFactory));
189
281
  }
190
282
  else {
191
283
  selectedIndexes = new Set(state.selectedIndexes);
@@ -211,22 +303,22 @@ function updateStateWithChangedDates(state, change) {
211
303
  }
212
304
  else {
213
305
  // no selected days
214
- return noSelectionCalendarScheduleSelectionState(state);
306
+ return noSelectionCalendarScheduleSelectionState(nextState);
215
307
  }
216
308
  }
217
309
  function noSelectionCalendarScheduleSelectionState(state) {
218
310
  return finalizeNewCalendarScheduleSelectionState(Object.assign(Object.assign({}, state), { selectedIndexes: new Set(), inputStart: null, inputEnd: null }));
219
311
  }
220
312
  function updateStateWithChangedRange(state, change) {
221
- const { inputStart: currentInputStart, inputEnd: currentInputEnd, indexFactory, minDate, maxDate } = state;
222
- const inputStart = startOfDay(change.inputStart);
223
- const inputEnd = startOfDay(change.inputEnd);
313
+ const { inputStart: currentInputStart, inputEnd: currentInputEnd, indexFactory, minDate, maxDate, filter, computeSelectionResultRelativeToFilter } = state;
314
+ let inputStart = startOfDay(change.inputStart);
315
+ let inputEnd = startOfDay(change.inputEnd);
224
316
  const isValidRange = minDate != null || maxDate != null ? isDateInDateRangeFunction({ start: minDate !== null && minDate !== void 0 ? minDate : undefined, end: maxDate !== null && maxDate !== void 0 ? maxDate : undefined }) : () => true;
225
317
  if (!isValidRange(inputStart) || !isValidRange(inputEnd) || (isSameDateDay(inputStart, currentInputStart) && isSameDateDay(inputEnd, currentInputEnd))) {
226
318
  return state; // if no change, return the current state.
227
319
  }
228
320
  // retain all indexes that are within the new range
229
- const minIndex = indexFactory(inputStart);
321
+ const minIndex = computeSelectionResultRelativeToFilter && (filter === null || filter === void 0 ? void 0 : filter.start) ? indexFactory(filter === null || filter === void 0 ? void 0 : filter.start) : indexFactory(inputStart);
230
322
  const maxIndex = indexFactory(inputEnd) + 1;
231
323
  const currentIndexes = Array.from(state.selectedIndexes);
232
324
  const isInCurrentRange = isIndexNumberInIndexRangeFunction({ minIndex, maxIndex });
@@ -259,19 +351,30 @@ function isEnabledDayInCalendarScheduleSelectionState(state) {
259
351
  };
260
352
  }
261
353
  function computeScheduleSelectionValue(state) {
262
- const { scheduleDays, allowedDaysOfWeek, indexDayOfWeek } = state;
354
+ const { indexFactory, scheduleDays, allowedDaysOfWeek, indexDayOfWeek, computeSelectionResultRelativeToFilter, filter } = state;
263
355
  const rangeAndExclusion = computeScheduleSelectionRangeAndExclusion(state);
264
356
  if (rangeAndExclusion == null) {
265
357
  return null;
266
358
  }
267
- const { start, end, excluded, dateBlockRange } = rangeAndExclusion;
268
- const indexOffset = dateBlockRange.i;
269
- const ex = excluded
270
- .filter((x) => {
271
- const isExcludedIndex = allowedDaysOfWeek.has(indexDayOfWeek(x));
272
- return isExcludedIndex;
273
- })
274
- .map((x) => x - indexOffset); // set to the proper offset
359
+ const { start: rangeStart, end, excluded: allExcluded, dateBlockRange } = rangeAndExclusion;
360
+ let filterOffsetExcludedRange = [];
361
+ let indexOffset = dateBlockRange.i;
362
+ let start = rangeStart;
363
+ // If computeSelectionResultRelativeToFilter is true, then we need to offset the values to be relative to that start.
364
+ if (computeSelectionResultRelativeToFilter && (filter === null || filter === void 0 ? void 0 : filter.start)) {
365
+ start = filter.start;
366
+ const filterStartIndexOffset = indexFactory(rangeStart) - indexFactory(start);
367
+ filterOffsetExcludedRange = range(0, filterStartIndexOffset);
368
+ indexOffset = indexOffset - filterStartIndexOffset;
369
+ }
370
+ const excluded = computeSelectionResultRelativeToFilter
371
+ ? allExcluded.filter((x) => {
372
+ const isExcludedIndex = allowedDaysOfWeek.has(indexDayOfWeek(x)); // ???
373
+ return isExcludedIndex;
374
+ })
375
+ : allExcluded;
376
+ const offsetExcluded = excluded.map((x) => x - indexOffset); // set to the proper offset
377
+ const ex = [...filterOffsetExcludedRange, ...offsetExcluded];
275
378
  const w = dateScheduleEncodedWeek(scheduleDays);
276
379
  const d = []; // "included" blocks are never used/calculated.
277
380
  const dateScheduleRange = {
@@ -287,7 +390,7 @@ function computeScheduleSelectionValue(state) {
287
390
  };
288
391
  }
289
392
  function computeScheduleSelectionRangeAndExclusion(state) {
290
- const { isEnabledDay } = state;
393
+ const { isEnabledDay, isEnabledFilterDay } = state;
291
394
  const dateFactory = dateBlockTimingDateFactory(state);
292
395
  const dateBlockRange = computeCalendarScheduleSelectionDateBlockRange(state);
293
396
  if (dateBlockRange == null) {
@@ -296,7 +399,7 @@ function computeScheduleSelectionRangeAndExclusion(state) {
296
399
  const start = dateFactory(dateBlockRange.i);
297
400
  const end = dateFactory(dateBlockRange.to);
298
401
  const excluded = range(dateBlockRange.i, dateBlockRange.to + 1).filter((x) => {
299
- const isExcludedIndex = !isEnabledDay(x);
402
+ const isExcludedIndex = !isEnabledDay(x) || !isEnabledFilterDay(x);
300
403
  return isExcludedIndex;
301
404
  });
302
405
  const result = {
@@ -310,12 +413,8 @@ function computeScheduleSelectionRangeAndExclusion(state) {
310
413
  function computeCalendarScheduleSelectionRange(state) {
311
414
  const dateFactory = dateBlockTimingDateFactory(state);
312
415
  const dateBlockRange = computeCalendarScheduleSelectionDateBlockRange(state);
313
- if (dateBlockRange != null) {
314
- return { start: dateFactory(dateBlockRange.i), end: dateFactory(dateBlockRange.to) };
315
- }
316
- else {
317
- return undefined;
318
- }
416
+ const dateRange = dateBlockRange != null ? { start: dateFactory(dateBlockRange.i), end: dateFactory(dateBlockRange.to) } : undefined;
417
+ return dateRange;
319
418
  }
320
419
  function computeCalendarScheduleSelectionDateBlockRange(state) {
321
420
  const { indexFactory, inputStart, inputEnd, allowedDaysOfWeek, indexDayOfWeek, isEnabledDay, isEnabledFilterDay } = state;
@@ -823,6 +922,7 @@ class DbxFormCalendarDateScheduleRangeFieldComponent extends FieldType {
823
922
  this._syncSub = new SubscriptionObject();
824
923
  this._valueSub = new SubscriptionObject();
825
924
  this._filterSub = new SubscriptionObject();
925
+ this._exclusionsSub = new SubscriptionObject();
826
926
  this._formControlObs = new BehaviorSubject(undefined);
827
927
  this.formControl$ = this._formControlObs.pipe(filterMaybe());
828
928
  this.value$ = this.formControl$.pipe(switchMap((control) => control.valueChanges.pipe(startWith(control.value))), shareReplay(1));
@@ -849,6 +949,15 @@ class DbxFormCalendarDateScheduleRangeFieldComponent extends FieldType {
849
949
  get filter() {
850
950
  return this.props.filter;
851
951
  }
952
+ get exclusions() {
953
+ return this.props.exclusions;
954
+ }
955
+ get initialSelectionState() {
956
+ return this.props.initialSelectionState;
957
+ }
958
+ get computeSelectionResultRelativeToFilter() {
959
+ return this.props.computeSelectionResultRelativeToFilter;
960
+ }
852
961
  ngOnInit() {
853
962
  this._formControlObs.next(this.formControl);
854
963
  this._syncSub.subscription = this.value$.pipe(distinctUntilChanged(isSameDateScheduleRange)).subscribe((x) => {
@@ -857,17 +966,28 @@ class DbxFormCalendarDateScheduleRangeFieldComponent extends FieldType {
857
966
  this._valueSub.subscription = this.dbxCalendarScheduleSelectionStore.currentDateScheduleRangeValue$.subscribe((x) => {
858
967
  this.formControl.setValue(x);
859
968
  });
860
- const filter = this.filter;
969
+ const { filter, exclusions } = this;
861
970
  if (filter != null) {
862
971
  this._filterSub.subscription = this.dbxCalendarScheduleSelectionStore.setFilter(asObservable(filter));
863
972
  }
973
+ if (exclusions != null) {
974
+ this._exclusionsSub.subscription = this.dbxCalendarScheduleSelectionStore.setExclusions(asObservable(exclusions));
975
+ }
976
+ if (this.initialSelectionState !== undefined) {
977
+ this.dbxCalendarScheduleSelectionStore.setInitialSelectionState(this.initialSelectionState);
978
+ }
979
+ if (this.computeSelectionResultRelativeToFilter != null) {
980
+ this.dbxCalendarScheduleSelectionStore.setComputeSelectionResultRelativeToFilter(this.computeSelectionResultRelativeToFilter);
981
+ }
982
+ // TODO: Also add ability to set min/max dates independent of the filter
864
983
  }
865
984
  ngOnDestroy() {
866
985
  super.ngOnDestroy();
867
986
  this._syncSub.destroy();
868
987
  this._valueSub.destroy();
869
- this._formControlObs.complete();
870
988
  this._filterSub.destroy();
989
+ this._exclusionsSub.destroy();
990
+ this._formControlObs.complete();
871
991
  }
872
992
  }
873
993
  DbxFormCalendarDateScheduleRangeFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxFormCalendarDateScheduleRangeFieldComponent, deps: [{ token: i1$1.CompactContextStore, optional: true }, { token: DbxCalendarScheduleSelectionStore }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
@@ -1061,5 +1181,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
1061
1181
  * Generated bundle index. Do not edit.
1062
1182
  */
1063
1183
 
1064
- export { CalendarScheduleSelectionDayState, DEFAULT_SCHEDULE_SELECTION_CALENDAR_DATE_POPOVER_KEY, DbxCalendarScheduleSelectionStore, DbxCalendarScheduleSelectionStoreInjectionBlockDirective, DbxCalendarScheduleSelectionStoreProviderBlock, DbxFormCalendarDateScheduleRangeFieldComponent, DbxFormCalendarModule, DbxFormDateScheduleRangeFieldModule, DbxScheduleSelectionCalendarCellComponent, DbxScheduleSelectionCalendarComponent, DbxScheduleSelectionCalendarDateDaysComponent, DbxScheduleSelectionCalendarDateDaysFormComponent, DbxScheduleSelectionCalendarDateDialogButtonComponent, DbxScheduleSelectionCalendarDateDialogComponent, DbxScheduleSelectionCalendarDatePopoverButtonComponent, DbxScheduleSelectionCalendarDatePopoverComponent, DbxScheduleSelectionCalendarDatePopoverContentComponent, DbxScheduleSelectionCalendarDateRangeComponent, computeCalendarScheduleSelectionDateBlockRange, computeCalendarScheduleSelectionRange, computeScheduleSelectionRangeAndExclusion, computeScheduleSelectionValue, dateScheduleRangeField, dbxScheduleSelectionCalendarDateDaysFormDayFields, dbxScheduleSelectionCalendarDateDaysFormFields, defaultCalendarScheduleSelectionCellContentFactory, finalizeNewCalendarScheduleSelectionState, initialCalendarScheduleSelectionState, isEnabledDayInCalendarScheduleSelectionState, noSelectionCalendarScheduleSelectionState, provideCalendarScheduleSelectionStoreIfParentIsUnavailable, updateStateWithChangedDates, updateStateWithChangedRange, updateStateWithChangedScheduleDays, updateStateWithDateScheduleRangeValue, updateStateWithFilter };
1184
+ export { CalendarScheduleSelectionDayState, DEFAULT_SCHEDULE_SELECTION_CALENDAR_DATE_POPOVER_KEY, DbxCalendarScheduleSelectionStore, DbxCalendarScheduleSelectionStoreInjectionBlockDirective, DbxCalendarScheduleSelectionStoreProviderBlock, DbxFormCalendarDateScheduleRangeFieldComponent, DbxFormCalendarModule, DbxFormDateScheduleRangeFieldModule, DbxScheduleSelectionCalendarCellComponent, DbxScheduleSelectionCalendarComponent, DbxScheduleSelectionCalendarDateDaysComponent, DbxScheduleSelectionCalendarDateDaysFormComponent, DbxScheduleSelectionCalendarDateDialogButtonComponent, DbxScheduleSelectionCalendarDateDialogComponent, DbxScheduleSelectionCalendarDatePopoverButtonComponent, DbxScheduleSelectionCalendarDatePopoverComponent, DbxScheduleSelectionCalendarDatePopoverContentComponent, DbxScheduleSelectionCalendarDateRangeComponent, calendarScheduleMaxDate, calendarScheduleMinAndMaxDate, calendarScheduleMinDate, computeCalendarScheduleSelectionDateBlockRange, computeCalendarScheduleSelectionRange, computeScheduleSelectionRangeAndExclusion, computeScheduleSelectionValue, dateScheduleRangeField, dbxScheduleSelectionCalendarDateDaysFormDayFields, dbxScheduleSelectionCalendarDateDaysFormFields, defaultCalendarScheduleSelectionCellContentFactory, finalizeNewCalendarScheduleSelectionState, initialCalendarScheduleSelectionState, isEnabledDayInCalendarScheduleSelectionState, noSelectionCalendarScheduleSelectionState, provideCalendarScheduleSelectionStoreIfParentIsUnavailable, updateStateWithChangedDates, updateStateWithChangedRange, updateStateWithChangedScheduleDays, updateStateWithComputeSelectionResultRelativeToFilter, updateStateWithDateScheduleRangeValue, updateStateWithExclusions, updateStateWithFilter, updateStateWithInitialSelectionState };
1065
1185
  //# sourceMappingURL=dereekb-dbx-form-calendar.mjs.map