{"version":3,"sources":["Themes/Default/Content/ts/Shared/KnockoutBindings/DateTime/Services/datePickerServices.ts"],"names":[],"mappings":";;;;IAaa,QAAA,IAAI,GAAG;QAChB,kBAAkB,EAAE,kBAAkB;KACzC,CAAC;IAEF,IAAc,kBAAkB,CA6G/B;IA7GD,WAAc,kBAAkB;QAC5B,IAAM,yBAAyB,GAAG,mDAAwB,CAAC,8BAA8B,CAAC;QAE1F,SAAgB,gBAAgB,CAAC,OAAoB,EAAE,WAA2C,EAAE,KAA+B;YAC/H,IAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EACjC,cAAc,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAA4B,CAAC;YAGpF,IAAI,KAAK,EAAE,EAAE;gBACT,IAAI,YAAY,GAAG,KAAK,EAAE,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;gBAE7D,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,sBAAsB,CAAC,WAAW,CAAC,IAAI,KAAK,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;oBACxF,YAAY,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;iBAC5E;gBAED,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;aACzC;QACL,CAAC;QAde,mCAAgB,mBAc/B,CAAA;QAAA,CAAC;QAKF,SAAgB,uBAAuB,CAAC,OAAoB,EAAE,WAA2C,EAAE,aAAuC;YAC9I,IAAM,cAAc,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAA4B,CAAC;YAEtF,CAAC,CAAC,OAAO,CAAC;iBACL,EAAE,CAAC,MAAM,EAAE;gBACR,IAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAY,EACxC,eAAe,GAAG,aAAa,EAAY,CAAC;gBAEhD,IAAI,CAAC,CAAC,eAAe,IAAI,YAAY,KAAK,EAAE,CAAC,IAAI,CAAC,eAAe,IAAI,YAAY,IAAI,eAAe,CAAC,MAAM,CAAC,mDAAwB,CAAC,8BAA8B,CAAC,CAAC,EAAE;oBACnK,YAAY,CAAC,CAAC;wBACV,UAAU,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC;wBAC/D,cAAc,CAAC,UAAU,EAAE,CAAC;iBACnC;YACL,CAAC,CAAC;iBACD,EAAE,CAAC,SAAS,EAAE,UAAU,KAAwB;gBAC7C,IAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAY,EACxC,eAAe,GAAG,aAAa,EAAY,CAAC;gBAMhD,IAAI,KAAK,CAAC,GAAG,IAAI,OAAO,EAAE;oBACtB,IAAI,CAAC,CAAC,eAAe,IAAI,YAAY,KAAK,EAAE,CAAC,IAAI,CAAC,eAAe,IAAI,YAAY,IAAI,eAAe,CAAC,MAAM,CAAC,mDAAwB,CAAC,8BAA8B,CAAC,CAAC,EAAE;wBACnK,YAAY,CAAC,CAAC;4BACV,UAAU,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC;4BAC/D,cAAc,CAAC,UAAU,EAAE,CAAC;qBACnC;iBACJ;YACL,CAAC,CAAC,CAAC;YAEP,CAAC,CAAC,OAAO,CAAC,CAAC;QACf,CAAC;QAhCe,0CAAuB,0BAgCtC,CAAA;QAAA,CAAC;QAEF,SAAgB,wBAAwB,CAAC,WAA2C;YAEhF,IAAI,WAAW,CAAC,aAAa,CAAC,YAAY,EAAE;gBACxC,OAAO,WAAW,CAAC,aAAa,CAAC,YAAY,CAAC;aACjD;YAED,IAAI,WAAW,CAAC,aAAa,CAAC,SAAS,EAAE;gBACrC,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,yBAAyB,CAAC,EAAE,KAAK,CAAC,CAAC;aACzF;YAED,IAAI,WAAW,CAAC,aAAa,CAAC,OAAO,EAAE;gBACnC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC;aACvF;YAGD,OAAO,CAAC,CAAC;QACb,CAAC;QAhBe,2CAAwB,2BAgBvC,CAAA;QAAA,CAAC;QAEF,SAAS,UAAU,CAAC,OAAoB,EAAE,WAA2C,EAAE,KAAU,EAAE,aAAuC;YACtI,IAAM,cAAc,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAA4B,CAAC;YAEtF,IAAI,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC;YAEpD,IAAI,WAAW,CAAC,aAAa,CAAC,YAAY,EAAE;gBACxC,IAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,yBAAyB,CAAC,EACxF,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,yBAAyB,CAAC,CAAC;gBAE7F,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;oBACpF,IAAI,GAAG,SAAS,CAAC;iBACpB;aACJ;iBAAM,IAAI,sBAAsB,CAAC,WAAW,CAAC,EAAE;gBAC5C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE;oBACvE,IAAI,GAAG,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC;iBAC9C;aACJ;YAED,aAAa,CAAC,IAAI,CAAC,CAAC;YAEpB,IAAI,IAAI,EAAE;gBACN,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC;aACnE;iBAAM;gBACH,cAAc,CAAC,UAAU,EAAE,CAAC;aAC/B;QACL,CAAC;QAAA,CAAC;QAEF,SAAS,sBAAsB,CAAC,WAA2C;YACvE,IAAI,WAAW,CAAC,aAAa,CAAC,SAAS,EAAE;gBACrC,IAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACtC,OAAO,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aAC3E;YAED,OAAO,KAAK,CAAC;QACjB,CAAC;QAAA,CAAC;IACN,CAAC,EA7Ga,kBAAkB,GAAlB,0BAAkB,KAAlB,0BAAkB,QA6G/B","file":"datePickerServices.js","sourcesContent":["import * as $ from \"jquery\";\nimport * as moment from \"moment\";\nimport * as localisationHelper from \"localisationHelper\";\n\n// Types\nimport Moment = moment.Moment;\n\n// Models\nimport { DatePickerBindingConfiguration, DatePickerLibraryEvents } from \"Content/ts/Models/Shared/DateTime/datePickerConfiguration\";\n\n// Services\nimport { DateTimeFormatterService } from \"Content/ts/Shared/Controls/DateTime/Services/dateTimeFormatterService\";\n\nexport const Deps = {\n LocalisationHelper: localisationHelper\n};\n\nexport module DatePickerServices {\n const LocalisedMomentDateFormat = DateTimeFormatterService.LocalisedMomentShortDateFormat;\n\n export function DatePickerOnLoad(element: HTMLElement, allBindings: DatePickerBindingConfiguration, value: KnockoutComputed): void {\n const today = moment().startOf(\"day\"),\n dateTimePicker = $(element).data(\"Zebra_DatePicker\") as DatePickerLibraryEvents;\n\n // Purpose : Will bind the value to the component text box at binding load if a value has been provided.\n if (value()) {\n let currentValue = value().format(LocalisedMomentDateFormat);\n\n if (!value().isValid() || (CurrentFutureDatesOnly(allBindings) && value().isBefore(today))) {\n currentValue = moment().startOf(\"day\").format(LocalisedMomentDateFormat);\n }\n\n dateTimePicker.set_date(currentValue);\n }\n };\n\n // Important: Cannot be done via a standard subscribe due to the way Zebra works. When the datepicker is initialised the Knockout context \n // is mostly destroyed so you lose some visibility on the HTML element. Due to this a couple of change events are bound to the \n // object so these are detected without the user having to unfocus from the element when dealing with a form.\n export function ConfigureKeyPressEvents(element: HTMLElement, allBindings: DatePickerBindingConfiguration, valueToUpdate: KnockoutComputed): void {\n const dateTimePicker = $(element).data(\"Zebra_DatePicker\") as DatePickerLibraryEvents;\n\n $(element)\n .on(\"blur\", function () {\n const currentValue = $(this).val() as string,\n observableValue = valueToUpdate() as Moment;\n\n if ((!observableValue && currentValue !== \"\") || (observableValue && currentValue != observableValue.format(DateTimeFormatterService.LocalisedMomentShortDateFormat))) {\n currentValue ?\n UpdateDate(element, allBindings, currentValue, valueToUpdate) :\n dateTimePicker.clear_date();\n }\n })\n .on(\"keydown\", function (event: JQueryEventObject) {\n const currentValue = $(this).val() as string,\n observableValue = valueToUpdate() as Moment;\n\n // Important: 'keyCode' and 'which' have been deprecated across all browsers. Said codes didn't have a consistent implementation\n // across all browsers so we've gone for this implementation as it seems to be more stable.\n // Sources : https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode\n // https://stackoverflow.com/questions/56771542/how-to-call-the-jquery-click-method-when-pressing-enter-on-the-keyboard\n if (event.key == \"Enter\") {\n if ((!observableValue && currentValue !== \"\") || (observableValue && currentValue != observableValue.format(DateTimeFormatterService.LocalisedMomentShortDateFormat))) {\n currentValue ?\n UpdateDate(element, allBindings, currentValue, valueToUpdate) :\n dateTimePicker.clear_date();\n }\n }\n });\n\n $(element);\n };\n\n export function ConfigurePickerDirection(allBindings: DatePickerBindingConfiguration): string | number | boolean | Array {\n // Example : '[\"01/02/2020\", \"01/06/2020\"]' - Starts on 1 February 2020 & Ends on 1 June 2020\n if (allBindings.configuration.BetweenDates) {\n return allBindings.configuration.BetweenDates;\r\n }\n\n if (allBindings.configuration.StartDate) {\n return [allBindings.configuration.StartDate.format(LocalisedMomentDateFormat), false];\n }\n\n if (allBindings.configuration.EndDate) {\n return [false, allBindings.configuration.EndDate.format(LocalisedMomentDateFormat)];\n }\n\n // Purpose : Default Behaviour - Calendar has no restrictions\n return 0;\n };\n\n function UpdateDate(element: HTMLElement, allBindings: DatePickerBindingConfiguration, value: any, valueToUpdate: KnockoutComputed): void {\n const dateTimePicker = $(element).data(\"Zebra_DatePicker\") as DatePickerLibraryEvents;\n\n let date = moment(value, LocalisedMomentDateFormat);\n\n if (allBindings.configuration.BetweenDates) {\n const endDate = moment(allBindings.configuration.BetweenDates[1], LocalisedMomentDateFormat),\n startDate = moment(allBindings.configuration.BetweenDates[0], LocalisedMomentDateFormat);\n\n if (!date.isValid() || !date.isSameOrAfter(startDate) || !date.isSameOrBefore(endDate)) {\n date = startDate;\r\n }\r\n } else if (CurrentFutureDatesOnly(allBindings)) {\n if (!date.isValid() || date.isBefore(allBindings.configuration.StartDate)) {\n date = allBindings.configuration.StartDate;\r\n }\r\n }\n\n valueToUpdate(date);\n\n if (date) {\n dateTimePicker.set_date(date.format(LocalisedMomentDateFormat));\r\n } else {\n dateTimePicker.clear_date();\r\n }\n };\n\n function CurrentFutureDatesOnly(allBindings: DatePickerBindingConfiguration): Array | boolean {\n if (allBindings.configuration.StartDate) {\n const today = moment().startOf(\"day\");\n return allBindings.configuration.StartDate.startOf(\"day\").isSame(today);\n }\n\n return false;\n };\n}\n"]}