UNPKG

@microsoft/windows-admin-center-sdk

Version:

Microsoft - Windows Admin Center Shell

540 lines 82.8 kB
import { __decorate, __metadata } from "tslib"; import { Component, ContentChildren, ElementRef, EventEmitter, Injector, Input, Output, QueryList, ViewChild } from '@angular/core'; import { DateRange } from '@microsoft/windows-admin-center-sdk/core/base/date/date-range'; import { Yield } from '@microsoft/windows-admin-center-sdk/core/base/decorators/yield.decorator'; import { KeyCode } from '@microsoft/windows-admin-center-sdk/core/data/accessibility-manager'; import { Dom } from '@microsoft/windows-admin-center-sdk/core/dom/dom'; import { DropdownComponent } from '../../../dropdown/dropdown.component'; import { DropdownService } from '../../../dropdown/dropdown.service'; import { ValidationAlertSeverity } from '../../validation-alert/validation-alert'; import { DateTimeFormFieldComponent } from '../datetime/datetime-form-field.component'; import { SmeInternalFormFieldComponent } from '../form-field.component'; import { DateTimeRangeOptionComponent } from './datetime-range-option.component'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "@angular/forms"; import * as i3 from "../../../dropdown/dropdown.component"; import * as i4 from "../datetime/datetime-form-field.component"; import * as i5 from "../../validation-alert/validation-alert.component"; import * as i6 from "../form-field-accessor.directive"; import * as i7 from "../form-field-validator.directive"; import * as i8 from "../../fieldset/fieldset.directive"; import * as i9 from "../../form-field-layout/form-field-layout.component"; const _c0 = ["listbox"]; const _c1 = ["dropDown"]; const _c2 = ["startFormField"]; const _c3 = ["endFormField"]; const _c4 = ["type", "datetimerange"]; function DateTimeRangeFormFieldComponent_ng_container_11_ng_container_1_Template(rf, ctx) { if (rf & 1) { const _r11 = i0.ɵɵgetCurrentView(); i0.ɵɵelementContainerStart(0); i0.ɵɵelementStart(1, "div", 16)(2, "label")(3, "input", 17); i0.ɵɵlistener("click", function DateTimeRangeFormFieldComponent_ng_container_11_ng_container_1_Template_input_click_3_listener() { const restoredCtx = i0.ɵɵrestoreView(_r11); const option_r8 = restoredCtx.$implicit; const ctx_r10 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r10.updateValue(option_r8.dateRange)); })("keydown", function DateTimeRangeFormFieldComponent_ng_container_11_ng_container_1_Template_input_keydown_3_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r12 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r12.onRadioGroupOptionKeydown($event)); }); i0.ɵɵelementEnd(); i0.ɵɵelementStart(4, "span", 18); i0.ɵɵtext(5); i0.ɵɵelementEnd()()(); i0.ɵɵelementContainerEnd(); } if (rf & 2) { const option_r8 = ctx.$implicit; const ctx_r7 = i0.ɵɵnextContext(2); i0.ɵɵadvance(3); i0.ɵɵproperty("checked", ctx_r7.isSelected(option_r8.dateRange))("name", ctx_r7.idBag.groupName)("disabled", ctx_r7.loadingOrDisabled); i0.ɵɵattribute("aria-label", option_r8.label)("name", ctx_r7.idBag.groupName)("aria-checked", ctx_r7.isSelected(option_r8.dateRange))("aria-required", ctx_r7.required); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate(option_r8.label); } } function DateTimeRangeFormFieldComponent_ng_container_11_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainerStart(0); i0.ɵɵtemplate(1, DateTimeRangeFormFieldComponent_ng_container_11_ng_container_1_Template, 6, 8, "ng-container", 15); i0.ɵɵelementContainerEnd(); } if (rf & 2) { const ctx_r4 = i0.ɵɵnextContext(); i0.ɵɵadvance(1); i0.ɵɵproperty("ngForOf", ctx_r4.options); } } function DateTimeRangeFormFieldComponent_div_12_Template(rf, ctx) { if (rf & 1) { const _r14 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "div", 19)(1, "label")(2, "input", 20); i0.ɵɵlistener("click", function DateTimeRangeFormFieldComponent_div_12_Template_input_click_2_listener() { i0.ɵɵrestoreView(_r14); const ctx_r13 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r13.updateValue(ctx_r13.customDateRange)); })("keydown", function DateTimeRangeFormFieldComponent_div_12_Template_input_keydown_2_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r15 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r15.onRadioGroupOptionKeydown($event)); }); i0.ɵɵelementEnd(); i0.ɵɵelementStart(3, "span", 18); i0.ɵɵtext(4); i0.ɵɵelementEnd()()(); } if (rf & 2) { const ctx_r5 = i0.ɵɵnextContext(); i0.ɵɵadvance(2); i0.ɵɵproperty("name", ctx_r5.idBag.groupName)("checked", ctx_r5.isSelected(ctx_r5.customDateRange))("disabled", ctx_r5.loadingOrDisabled); i0.ɵɵattribute("aria-label", ctx_r5.customText)("aria-checked", ctx_r5.isSelected(ctx_r5.customDateRange))("name", ctx_r5.idBag.groupName)("aria-required", ctx_r5.required); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate(ctx_r5.customText); } } const _c5 = function () { return { standalone: true }; }; function DateTimeRangeFormFieldComponent_fieldset_13_sme_form_field_1_Template(rf, ctx) { if (rf & 1) { const _r20 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "sme-form-field", 23, 24); i0.ɵɵlistener("ngModelChange", function DateTimeRangeFormFieldComponent_fieldset_13_sme_form_field_1_Template_sme_form_field_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r19 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r19.onCustomDateRangeChanged("start", $event)); })("customValidate", function DateTimeRangeFormFieldComponent_fieldset_13_sme_form_field_1_Template_sme_form_field_customValidate_0_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r21 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r21.onCustomValidate($event, "start")); })("keydown", function DateTimeRangeFormFieldComponent_fieldset_13_sme_form_field_1_Template_sme_form_field_keydown_0_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r22 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r22.onDatePickerKeydown($event, "start")); }); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r16 = i0.ɵɵnextContext(2); i0.ɵɵproperty("label", ctx_r16.startTimeText)("ngModelOptions", i0.ɵɵpureFunction0(4, _c5))("ngModel", ctx_r16.customDateRangeStart)("id", ctx_r16.idBag.startTimeInput); } } function DateTimeRangeFormFieldComponent_fieldset_13_sme_form_field_2_Template(rf, ctx) { if (rf & 1) { const _r25 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "sme-form-field", 23, 25); i0.ɵɵlistener("ngModelChange", function DateTimeRangeFormFieldComponent_fieldset_13_sme_form_field_2_Template_sme_form_field_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r25); const ctx_r24 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r24.onCustomDateRangeChanged("end", $event)); })("customValidate", function DateTimeRangeFormFieldComponent_fieldset_13_sme_form_field_2_Template_sme_form_field_customValidate_0_listener($event) { i0.ɵɵrestoreView(_r25); const ctx_r26 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r26.onCustomValidate($event, "end")); })("keydown", function DateTimeRangeFormFieldComponent_fieldset_13_sme_form_field_2_Template_sme_form_field_keydown_0_listener($event) { i0.ɵɵrestoreView(_r25); const ctx_r27 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r27.onDatePickerKeydown($event, "end")); }); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r17 = i0.ɵɵnextContext(2); i0.ɵɵproperty("label", ctx_r17.endTimeText)("ngModelOptions", i0.ɵɵpureFunction0(4, _c5))("ngModel", ctx_r17.customDateRangeEnd)("id", ctx_r17.idBag.endTimeInput); } } function DateTimeRangeFormFieldComponent_fieldset_13_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "fieldset", 21); i0.ɵɵtemplate(1, DateTimeRangeFormFieldComponent_fieldset_13_sme_form_field_1_Template, 2, 5, "sme-form-field", 22); i0.ɵɵtemplate(2, DateTimeRangeFormFieldComponent_fieldset_13_sme_form_field_2_Template, 2, 5, "sme-form-field", 22); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r6 = i0.ɵɵnextContext(); i0.ɵɵclassProp("sme-subform-indent-none", !ctx_r6.options || ctx_r6.options.length === 0); i0.ɵɵproperty("disabled", ctx_r6.loadingOrDisabled); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx_r6.customDateRange && ctx_r6.customDateRange.start); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx_r6.customDateRange && ctx_r6.customDateRange.end); } } const _c6 = function (a0) { return { "max-width.px": a0 }; }; const _c7 = function () { return { "max-width": "initial" }; }; export class DateTimeRangeFormFieldComponent extends SmeInternalFormFieldComponent { constructor(injector) { super(injector); this.customText = this.strings.MsftSmeShell.Angular.Form.DateTimeRange.Custom.label; this.startTimeText = this.strings.MsftSmeShell.Angular.Form.DateTimeRange.StartTime.label; this.endTimeText = this.strings.MsftSmeShell.Angular.Form.DateTimeRange.EndTime.label; this.invalidStartTimeText = this.strings.MsftSmeShell.Angular.Form.DateTimeRange.Invalid.StartTime; this.invalidEndTimeText = this.strings.MsftSmeShell.Angular.Form.DateTimeRange.Invalid.EndTime; this.showCustomDisplayText = true; this.customLabelEmitter = new EventEmitter(); // Deal with scalability // Do not need to call duplicated function again and again // Pool size for now set at 100 this.timeISOHistory = []; this.dropdownService = injector.get(DropdownService); this.dropdownApplyFormFieldOffsetWidth = true; this.showCustomOption = true; const now = Date.now(); this.customDateRange = new DateRange(now, now + (60 * 60 * 1000)); // now to now + 1 hour } /** * The source name to use for logging */ get logSourceName() { return 'DateTimeRangeFormFieldComponent'; } // TODO: need to update the date picker to deal with timezone get customDateRangeStart() { return this.timeISOTranslator(this.customDateRange.start); } get customDateRangeEnd() { return this.timeISOTranslator(this.customDateRange.end); } getTimeHistory(input) { let res = ''; const history = this.timeISOHistory.filter((item) => { if (item.key === input.getTime().toString()) { return item; } })[0]; if (history) { res = history.value; } return res; } setTimeHistory(key, value) { const history = this.timeISOHistory.filter((item) => { if (item.key === key.getTime().toString()) { return item; } })[0]; if (!history) { if (this.timeISOHistory && this.timeISOHistory.length >= DateTimeRangeFormFieldComponent.timeISOHistoryLength) { this.timeISOHistory.unshift(); } this.timeISOHistory.push({ key: key.getTime().toString(), value: value }); } } // TODO: need support for 24 hours vs 12 hours with am/pm. timeISOTranslator(input) { let res = this.getTimeHistory(input); if (res) { return res; } const rawYear = input.getFullYear(); const rawMonth = input.getMonth() + 1; const month = rawMonth < 10 ? DateTimeRangeFormFieldComponent.twoDigitPattern.format(rawMonth) : rawMonth; const rawDay = input.getDate(); const day = rawDay < 10 ? DateTimeRangeFormFieldComponent.twoDigitPattern.format(rawDay) : rawDay; const rawHour = input.getHours(); const hour = rawHour < 10 ? DateTimeRangeFormFieldComponent.twoDigitPattern.format(rawHour) : rawHour; const rawMinute = input.getMinutes(); const minute = rawMinute < 10 ? DateTimeRangeFormFieldComponent.twoDigitPattern.format(rawMinute) : rawMinute; const rawSecond = input.getSeconds(); const second = rawSecond < 10 ? DateTimeRangeFormFieldComponent.twoDigitPattern.format(rawSecond) : rawSecond; res = DateTimeRangeFormFieldComponent.timeISOPattern.format(rawYear, month, day, hour, minute, second); this.setTimeHistory(input, res); return res; } get displayValue() { if (this.showCustomDisplayText && (this.isSelected(this.customDateRange) || !this.options.length)) { return this.customText; } const selectedOption = this.options.find(option => this.isSelected(option.dateRange)); if (selectedOption) { return selectedOption.label; } else if (this.showCustomDisplayText) { return this.customText; } return this.value ? this.value.toString() : ''; } isSelected(dateRange) { if (!this.options || !this.options.length) { return true; } if (dateRange && dateRange.start && dateRange.end) { return dateRange.isEqualTo(this.value); } else { return false; } } updateValue(value) { this.value = value; this.updateDropdownPosition(); } ngAfterContentInit() { this.subscriptions.push(this.options.changes.subscribe(val => { if (this.options.length === 0) { this.value = this.customDateRange; } })); if (this.options.length === 0) { this.value = this.customDateRange; } } onCustomDateRangeChanged(fieldName, value) { switch (fieldName) { case DateTimeRangeFormFieldComponent.startProperty: { this.customDateRange.start = new Date(value); break; } case DateTimeRangeFormFieldComponent.endProperty: { this.customDateRange.end = new Date(value); break; } } // Always notify the change to the parent this.value = this.customDateRange; } updateDropdownPosition() { this.dropdownService.updatePosition(this.dropDown); } onValueChanged(value) { if (!this.options) { return; } if (value && !this.options.some(option => option.dateRange.isEqualTo(value))) { this.customDateRange.start = value.start; this.customDateRange.end = value.end; } const selectedOption = this.options.find((item) => { return item.dateRange.isEqualTo(value); }); if (selectedOption) { this.customLabelEmitter.emit(selectedOption.label); } else { this.customLabelEmitter.emit(this.customText); } super.onValueChanged(value); } /** * Creates the idBag used by this component to store unique element ids. * id values will be assigned be the @see BaseComponent super class. */ createIdBag() { return { detailsSpan: '', groupName: '', dropDownContent: '', startTimeInput: '', endTimeInput: '' }; } /** * Performs validation that is internal to this control * @param c The form control attached to this instance */ validate(c) { if (this.required) { if (MsftSme.isNullOrUndefined(this.value)) { return { required: true }; } } if (this.value && this.value.isValid()) { let alert = this.validateStartDate(); if (alert) { return { invalidTimerange: alert }; } alert = this.validateEndDate(); if (alert) { return { invalidTimerange: alert }; } } return super.validate(c); } onCustomValidate(event, name, value) { const alerts = {}; if (name === DateTimeRangeFormFieldComponent.startProperty) { const alert = this.validateStartDate(new Date(event.formControl.value)); if (alert) { alerts['invalidDateRange'] = alert; } else { if ((this.endFormField && !this.endFormField.ngModel.valid) && (this.startFormField && this.startFormField.ngModel.control.errors)) { this.endFormField.ngModel.control.setErrors(null); } } } else if (name === DateTimeRangeFormFieldComponent.endProperty) { const alert = this.validateEndDate(new Date(event.formControl.value)); if (alert) { alerts['invalidDateRange'] = alert; } else { if (this.startFormField && !this.startFormField.ngModel.valid && this.startFormField.ngModel.control.errors) { this.startFormField.ngModel.control.setErrors(null); } } } MsftSme.deepAssign(event.alerts, alerts); } validateStartDate(startDate) { if (!this.value || MsftSme.isNullOrUndefined(this.value.start)) { return null; } let startTime = this.value.start; if (startDate) { startTime = startDate; } if (startTime && this.value.end && startTime.valueOf() > this.value.end.valueOf()) { return { valid: false, message: this.invalidStartTimeText, severity: ValidationAlertSeverity.Error }; } return null; } validateEndDate(endDate) { if (!this.value || MsftSme.isNullOrUndefined(this.value.end)) { return null; } let endTime = this.value.end; if (endDate) { endTime = endDate; } if (this.value.start && endTime && this.value.start.valueOf() > endTime.valueOf()) { return { valid: false, message: this.invalidEndTimeText, severity: ValidationAlertSeverity.Error }; } return null; } // accessibility onToggleKeydown(event) { switch (event.keyCode) { case KeyCode.Enter: case KeyCode.Space: { this.dropDown.onToggleClick(event, true); break; } case KeyCode.DownArrow: { if (event.altKey) { this.dropDown.onToggleClick(event, true); } return; } default: { return; } } // handle all keys event.stopImmediatePropagation(); event.stopPropagation(); event.preventDefault(); } onRadioGroupOptionKeydown(event) { switch (event.keyCode) { // overrides the tab function case KeyCode.Tab: { // prevent focus on the next element in the parent trap if (!this.canFocusOnStartTimeRangePicker()) { event.preventDefault(); } event.stopImmediatePropagation(); event.stopPropagation(); break; } default: { return; } } } onDatePickerKeydown(event, input) { // allow escape and alt arrow up to retract the datetime range fields as well. Only remove if the datetime controls are not open. if ((event.keyCode === KeyCode.Escape) || (event.keyCode === KeyCode.UpArrow && event.altKey)) { if (!this.startFormField.dropDown.isOpen && !this.endFormField.dropDown.isOpen) { if (this.dropDown && this.dropDown.contentElement) { const nextElement = Dom.getNextFocusableElement(this.dropDown.contentElement.nativeElement); if (nextElement) { nextElement.focus(); } } this.dropDown.onToggleClick(event, true); } } // allow shift+tab to take focus back to startFormField while at endFormField if (event.shiftKey && event.keyCode === KeyCode.Tab || event.keyCode !== KeyCode.Tab) { return; } else { // prevent focus on the next element in the parent trap if (this.checkIsLastElementInDataRangePickerTrap()) { event.preventDefault(); } event.stopImmediatePropagation(); } } checkIsLastElementInDataRangePickerTrap() { const dom = Dom; const currentFocus = document.activeElement; const nextElement = dom.getNextFocusableElementInTrap(currentFocus); // The last item inside of the dropdown, expected to stay at the last item if (currentFocus === nextElement) { return true; } return false; } canFocusOnStartTimeRangePicker() { if (this.startFormField && this.endFormField) { return true; } return false; } } DateTimeRangeFormFieldComponent.timeISOPattern = `{0}-{1}-{2}T{3}:{4}:{5}`; DateTimeRangeFormFieldComponent.twoDigitPattern = `0{0}`; DateTimeRangeFormFieldComponent.timeISOHistoryLength = 100; DateTimeRangeFormFieldComponent.startProperty = 'start'; DateTimeRangeFormFieldComponent.endProperty = 'end'; /** @nocollapse */ DateTimeRangeFormFieldComponent.ɵfac = function DateTimeRangeFormFieldComponent_Factory(t) { return new (t || DateTimeRangeFormFieldComponent)(i0.ɵɵdirectiveInject(i0.Injector)); }; /** @nocollapse */ DateTimeRangeFormFieldComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: DateTimeRangeFormFieldComponent, selectors: [["sme-form-field", "type", "datetimerange"]], contentQueries: function DateTimeRangeFormFieldComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) { i0.ɵɵcontentQuery(dirIndex, DateTimeRangeOptionComponent, 4); } if (rf & 2) { let _t; i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.options = _t); } }, viewQuery: function DateTimeRangeFormFieldComponent_Query(rf, ctx) { if (rf & 1) { i0.ɵɵviewQuery(_c0, 5); i0.ɵɵviewQuery(_c1, 5); i0.ɵɵviewQuery(_c2, 5); i0.ɵɵviewQuery(_c3, 5); } if (rf & 2) { let _t; i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.listboxElement = _t.first); i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.dropDown = _t.first); i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.startFormField = _t.first); i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.endFormField = _t.first); } }, inputs: { dropdownApplyFormFieldOffsetWidth: "dropdownApplyFormFieldOffsetWidth", showCustomOption: "showCustomOption", customDateRange: "customDateRange", showCustomDisplayText: "showCustomDisplayText" }, outputs: { customLabelEmitter: "customLabelEmitter" }, features: [i0.ɵɵInheritDefinitionFeature], attrs: _c4, decls: 15, vars: 26, consts: [[3, "formField"], [1, "sme-combobox", "sme-focus-zone", 3, "autoToggle", "disabled", "dropdownApplyFormFieldOffsetWidth"], ["dropDown", ""], [1, "sme-combobox-header", "sme-dropdown-toggle", 3, "keydown"], ["dropdownHeader", ""], ["type", "text", "role", "combobox", "readonly", "", "spellcheck", "false", "autocapitalize", "off", "autocomplete", "off", 3, "value", "placeholder", "click"], ["textInput", ""], ["type", "button", "tabindex", "-1", "role", "presentation", "aria-hidden", "true", 1, "sme-button-trigger", "sme-button-auto-width", 3, "click"], [1, "sme-icon", "sme-icon-chevronDown"], ["role", "listbox", 1, "sme-dropdown-content", "sme-dropdown-interaction-enabled", "sme-padding-squish-v-sm", 3, "ngStyle", "id"], ["listbox", ""], [4, "ngIf"], ["class", "sme-radio sme-dropdown-interaction-enabled", 4, "ngIf"], ["class", "sme-focus-trap", 3, "sme-subform-indent-none", "disabled", 4, "ngIf"], [3, "alert"], [4, "ngFor", "ngForOf"], [1, "sme-radio"], ["type", "radio", 3, "checked", "name", "disabled", "click", "keydown"], ["aria-hidden", "true"], [1, "sme-radio", "sme-dropdown-interaction-enabled"], ["type", "radio", 3, "name", "checked", "disabled", "click", "keydown"], [1, "sme-focus-trap", 3, "disabled"], ["class", "sme-dropdown-interaction-enabled", "type", "datetime", 3, "label", "ngModelOptions", "ngModel", "id", "ngModelChange", "customValidate", "keydown", 4, "ngIf"], ["type", "datetime", 1, "sme-dropdown-interaction-enabled", 3, "label", "ngModelOptions", "ngModel", "id", "ngModelChange", "customValidate", "keydown"], ["startFormField", ""], ["endFormField", ""]], template: function DateTimeRangeFormFieldComponent_Template(rf, ctx) { if (rf & 1) { const _r28 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "sme-form-field-layout", 0)(1, "sme-dropdown", 1, 2)(3, "div", 3, 4); i0.ɵɵlistener("keydown", function DateTimeRangeFormFieldComponent_Template_div_keydown_3_listener($event) { return ctx.onToggleKeydown($event); }); i0.ɵɵelementStart(5, "input", 5, 6); i0.ɵɵlistener("click", function DateTimeRangeFormFieldComponent_Template_input_click_5_listener($event) { i0.ɵɵrestoreView(_r28); const _r0 = i0.ɵɵreference(2); return i0.ɵɵresetView(_r0.onToggleClick($event, true)); }); i0.ɵɵelementEnd(); i0.ɵɵelementStart(7, "button", 7); i0.ɵɵlistener("click", function DateTimeRangeFormFieldComponent_Template_button_click_7_listener($event) { i0.ɵɵrestoreView(_r28); const _r0 = i0.ɵɵreference(2); return i0.ɵɵresetView(_r0.onToggleClick($event, true)); }); i0.ɵɵelement(8, "span", 8); i0.ɵɵelementEnd()(); i0.ɵɵelementStart(9, "div", 9, 10); i0.ɵɵtemplate(11, DateTimeRangeFormFieldComponent_ng_container_11_Template, 2, 1, "ng-container", 11); i0.ɵɵtemplate(12, DateTimeRangeFormFieldComponent_div_12_Template, 5, 8, "div", 12); i0.ɵɵtemplate(13, DateTimeRangeFormFieldComponent_fieldset_13_Template, 3, 5, "fieldset", 13); i0.ɵɵelementEnd()(); i0.ɵɵelement(14, "sme-validation-alert", 14); i0.ɵɵelementEnd(); } if (rf & 2) { const _r0 = i0.ɵɵreference(2); const _r1 = i0.ɵɵreference(4); i0.ɵɵproperty("formField", ctx); i0.ɵɵadvance(1); i0.ɵɵproperty("autoToggle", false)("disabled", ctx.loadingOrDisabled)("dropdownApplyFormFieldOffsetWidth", ctx.dropdownApplyFormFieldOffsetWidth); i0.ɵɵadvance(4); i0.ɵɵproperty("value", ctx.displayValue)("placeholder", ctx.placeholder); i0.ɵɵattribute("aria-controls", ctx.idBag.dropDownContent)("aria-label", ctx.label)("aria-required", ctx.required)("disabled", ctx.loadingOrDisabled ? true : null)("aria-owns", ctx.idBag.dropDownContent)("aria-expanded", _r0.isOpen)("aria-autocomplete", "none"); i0.ɵɵadvance(2); i0.ɵɵclassProp("sme-toggled", _r0.isOpen); i0.ɵɵattribute("disabled", ctx.loadingOrDisabled ? true : null)("aria-pressed", _r0.isOpen); i0.ɵɵadvance(2); i0.ɵɵproperty("ngStyle", ctx.dropdownApplyFormFieldOffsetWidth && i0.ɵɵpureFunction1(23, _c6, _r1.offsetWidth > 220 ? _r1.offsetWidth : 220) || !ctx.dropdownApplyFormFieldOffsetWidth && i0.ɵɵpureFunction0(25, _c7))("id", ctx.idBag.dropDownContent); i0.ɵɵadvance(2); i0.ɵɵproperty("ngIf", ctx.options && ctx.options.length); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx.showCustomOption && ctx.options && ctx.options.length > 0); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx.isSelected(ctx.customDateRange) || !ctx.options || ctx.options.length === 0); i0.ɵɵadvance(1); i0.ɵɵproperty("alert", ctx.alert); } }, dependencies: [i1.NgForOf, i1.NgIf, i1.NgStyle, i2.NgControlStatus, i2.NgModel, i3.DropdownComponent, i4.DateTimeFormFieldComponent, i5.ValidationAlertComponent, i6.FormFieldAccessorDirective, i7.FormFieldValidatorDirective, i8.FieldsetDirective, i9.FormFieldLayoutComponent], encapsulation: 2 }); __decorate([ Yield(), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", void 0) ], DateTimeRangeFormFieldComponent.prototype, "updateDropdownPosition", null); (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DateTimeRangeFormFieldComponent, [{ type: Component, args: [{ selector: 'sme-form-field[type="datetimerange"]', template: "<sme-form-field-layout [formField]=\"this\">\r\n <sme-dropdown #dropDown [autoToggle]=\"false\" class=\"sme-combobox sme-focus-zone\" [disabled]=\"loadingOrDisabled\"\r\n [dropdownApplyFormFieldOffsetWidth]=\"dropdownApplyFormFieldOffsetWidth\">\r\n <div #dropdownHeader class=\"sme-combobox-header sme-dropdown-toggle\" (keydown)=\"onToggleKeydown($event)\">\r\n <input #textInput type=\"text\" role=\"combobox\" [value]=\"displayValue\" readonly\r\n [attr.aria-controls]=\"idBag.dropDownContent\"\r\n [attr.aria-label]=\"label\"\r\n [attr.aria-required]='required'\r\n [attr.disabled]=\"loadingOrDisabled ? true : null\" \r\n [attr.aria-owns]=\"idBag.dropDownContent\" [attr.aria-expanded]=\"dropDown.isOpen\"\r\n [attr.aria-autocomplete]=\"'none'\" (click)=\"dropDown.onToggleClick($event, true)\" spellcheck=\"false\"\r\n autocapitalize=\"off\" autocomplete=\"off\" [placeholder]=\"placeholder\" />\r\n <button type=\"button\" [attr.disabled]=\"loadingOrDisabled ? true : null\" tabindex=\"-1\" role=\"presentation\"\r\n aria-hidden=\"true\" [attr.aria-pressed]=\"dropDown.isOpen\" [class.sme-toggled]=\"dropDown.isOpen\"\r\n class=\"sme-button-trigger sme-button-auto-width\" (click)=\"dropDown.onToggleClick($event, true)\">\r\n <span class=\"sme-icon sme-icon-chevronDown\"></span>\r\n </button>\r\n </div>\r\n <!-- The minimum of width that a dropdown can be is set at 220px -->\r\n <!-- Guarantee dropdown content width can not go below this value no matter how small the window is set at -->\r\n <!-- Otherwise will display gray margin to the right of the dropdown content on small window -->\r\n <div #listbox role=\"listbox\" class=\"sme-dropdown-content sme-dropdown-interaction-enabled sme-padding-squish-v-sm\"\r\n [ngStyle]=\"dropdownApplyFormFieldOffsetWidth && { 'max-width.px': dropdownHeader.offsetWidth > 220 ? dropdownHeader.offsetWidth : 220} || !dropdownApplyFormFieldOffsetWidth && { 'max-width': 'initial' }\"\r\n [id]=\"idBag.dropDownContent\">\r\n <ng-container *ngIf=\"options && options.length\">\r\n <ng-container *ngFor=\"let option of options; let optionIndex = index\">\r\n <div class=\"sme-radio\">\r\n <label>\r\n <input type=\"radio\" [attr.aria-label]=\"option.label\" [attr.name]=\"idBag.groupName\"\r\n [checked]=\"isSelected(option.dateRange)\" (click)=\"updateValue(option.dateRange)\"\r\n [attr.aria-checked]=\"isSelected(option.dateRange)\" [name]=\"idBag.groupName\"\r\n [attr.aria-required]=\"required\" [disabled]=\"loadingOrDisabled\"\r\n (keydown)=\"onRadioGroupOptionKeydown($event)\">\r\n <span aria-hidden=\"true\">{{option.label}}</span>\r\n </label>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <div class=\"sme-radio sme-dropdown-interaction-enabled\" *ngIf=\"showCustomOption && options && options.length > 0\">\r\n <label>\r\n <input type=\"radio\" [attr.aria-label]=\"customText\" [attr.aria-checked]=\"isSelected(customDateRange)\"\r\n [attr.name]=\"idBag.groupName\" [name]=\"idBag.groupName\" [checked]=\"isSelected(customDateRange)\"\r\n (click)=\"updateValue(customDateRange)\" [attr.aria-required]=\"required\" [disabled]=\"loadingOrDisabled\"\r\n (keydown)=\"onRadioGroupOptionKeydown($event)\">\r\n <span aria-hidden=\"true\">{{this.customText}}</span>\r\n </label>\r\n </div>\r\n\r\n <fieldset *ngIf=\"isSelected(customDateRange) || !options || options.length === 0\" class=\"sme-focus-trap\"\r\n [class.sme-subform-indent-none]=\"!options || options.length === 0\" [disabled]=\"loadingOrDisabled\">\r\n <sme-form-field #startFormField *ngIf=\"customDateRange && customDateRange.start\"\r\n class=\"sme-dropdown-interaction-enabled\" type=\"datetime\" [label]=\"startTimeText\"\r\n [ngModelOptions]=\"{standalone: true}\" [ngModel]=\"customDateRangeStart\"\r\n (ngModelChange)=\"onCustomDateRangeChanged('start', $event)\" [id]=\"idBag.startTimeInput\"\r\n (customValidate)=\"onCustomValidate($event, 'start')\" (keydown)=\"onDatePickerKeydown($event, 'start')\">\r\n </sme-form-field>\r\n <sme-form-field #endFormField *ngIf=\"customDateRange && customDateRange.end\"\r\n class=\"sme-dropdown-interaction-enabled\" type=\"datetime\" [label]=\"endTimeText\"\r\n [ngModelOptions]=\"{standalone: true}\" [ngModel]=\"customDateRangeEnd\"\r\n (ngModelChange)=\"onCustomDateRangeChanged('end', $event)\" [id]=\"idBag.endTimeInput\"\r\n (customValidate)=\"onCustomValidate($event, 'end')\" (keydown)=\"onDatePickerKeydown($event, 'end')\">\r\n </sme-form-field>\r\n </fieldset>\r\n </div>\r\n </sme-dropdown>\r\n <sme-validation-alert [alert]=\"alert\"></sme-validation-alert>\r\n</sme-form-field-layout>\r\n" }] }], function () { return [{ type: i0.Injector }]; }, { listboxElement: [{ type: ViewChild, args: ['listbox'] }], dropDown: [{ type: ViewChild, args: ['dropDown'] }], startFormField: [{ type: ViewChild, args: ['startFormField'] }], endFormField: [{ type: ViewChild, args: ['endFormField'] }], options: [{ type: ContentChildren, args: [DateTimeRangeOptionComponent] }], dropdownApplyFormFieldOffsetWidth: [{ type: Input }], showCustomOption: [{ type: Input }], customDateRange: [{ type: Input }], showCustomDisplayText: [{ type: Input }], customLabelEmitter: [{ type: Output }], updateDropdownPosition: [] }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUtcmFuZ2UtZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvZGF0ZXRpbWUtcmFuZ2UvZGF0ZXRpbWUtcmFuZ2UtZm9ybS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvZGF0ZXRpbWUtcmFuZ2UvZGF0ZXRpbWUtcmFuZ2UtZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixRQUFRLEVBQ1IsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUMxRixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMEVBQTBFLENBQUM7QUFDakcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBQzlGLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN2RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDckUsT0FBTyxFQUFxQyx1QkFBdUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3JILE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRXZGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSw0QkFBNEIs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