{"version":3,"sources":["Themes/Default/Content/ts/Shared/Controls/DateTime/Services/dateTimePickerValidationServices.ts"],"names":[],"mappings":"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","file":"dateTimePickerValidationServices.js","sourcesContent":["import * as ko from \"knockout\";\nimport * as moment from \"moment\";\nimport * as localisationHelper from \"localisationHelper\";\n\n// Types\nimport Moment = moment.Moment;\n\n// Enums\nimport { DateTimeWorkflowStates } from \"Content/ts/Shared/Controls/DateTime/Services/workflowStates\";\n\n// Models\nimport { DateTimeValidationConfiguration } from \"Content/ts/Models/Shared/DateTime/dateTimePickerConfiguration\";\n\n// Services\nimport { DateTimeFormatterService } from \"Content/ts/Shared/Controls/DateTime/Services/dateTimeFormatterService\";\n\nexport const Deps = {\n LocalisationHelper: localisationHelper\n}\n\nexport namespace DateTimePickerValidationServices {\n export function ConfigureValidationRules(validationConfiguration: DateTimeValidationConfiguration): Array {\n return [\n {\n validator: (value?: Moment) => {\n return HasDateAndTimeBeenSet(value, validationConfiguration);\n },\n message: Deps.LocalisationHelper.getString(\"DateTimeResources\", \"EnsureDateTimeIsProvided\")\n },\n {\n validator: (value?: Moment) => {\n return HasDateBeenSet(value, validationConfiguration);\n },\n message: Deps.LocalisationHelper.getString(\"DateTimeResources\", \"EnsureDateIsProvided\")\n },\n {\n validator: (value?: Moment) => {\n return HasTimeBeenSet(value, validationConfiguration);\n },\n message: Deps.LocalisationHelper.getString(\"DateTimeResources\", \"EnsureTimeIsProvided\")\n },\n {\n validator: (value?: Moment) => {\n return IsDateTimeSelectionValid(value, validationConfiguration);\n },\n message: (validationDateTime: Moment | KnockoutObservable): string => {\n if (!validationDateTime) {\n return null;\n }\n\n const unwrappedDateTime = ko.unwrap(validationDateTime);\n\n return Deps.LocalisationHelper.getString(\"DateTimeResources\", \"DateTimeInvalidMessage\")\n .replace(\"{0}\", unwrappedDateTime.format(DateTimeFormatterService.LocalisedMomentLongDateFormat));\n },\n params: validationConfiguration.ValidationDateTime\n },\n {\n validator: (value?: Moment) => {\n return IsValidMinute(value, validationConfiguration);\n },\n message: () => {\n if (!validationConfiguration.AllowedMinutes) {\n return \"\";\n }\n \n if (!validationConfiguration.AllowedMinutesValidationMessage) {\n return Deps.LocalisationHelper.getString(\"DateTimeResources\", \"MinuteValueNotAllowed\")\n .replace(\"{0}\", validationConfiguration.AllowedMinutes.join(\", \"));\n }\n\n return validationConfiguration.AllowedMinutesValidationMessage\n }\n }\n ];\n }\n\n function IsDateTimeSelectionValid(value: string | Moment, validationConfiguration: DateTimeValidationConfiguration): boolean {\n // Purpose : If no date/time has been provided to validate against then return true and carry on as normal\n if (!value || !ko.unwrap(validationConfiguration.ValidationDateTime)) {\n return true;\n }\n\n // Purpose : If the 'value' is before the 'ValidationDateTime' property then return false. Where the 'value' is \n // equal to or before the 'ValidationDateTime' property return true.\n const validationDateTime = ko.unwrap(validationConfiguration.ValidationDateTime);\n if (validationDateTime) { \n let parsedDateTime = value;\n\n // Purpose : There are occasions where the passed in value is in a string format not a date. This validates the\n // configuration is in the correct format and if not will enforce that it is changed accordingly.\n if (!moment.isMoment(parsedDateTime)) {\n parsedDateTime = moment(value);\n }\n\n return parsedDateTime.isSameOrBefore(validationDateTime);\n }\n\n return true;\n };\n\n function HasDateAndTimeBeenSet(value: Moment, validationConfiguration: DateTimeValidationConfiguration): boolean {\n if (!ko.unwrap(validationConfiguration.IsDateRequired) && !ko.unwrap(validationConfiguration.IsTimeRequired)) {\n return true;\n }\n\n if (validationConfiguration.ComponentState != DateTimeWorkflowStates.DateTimeMode) {\n return true;\n }\n\n return value != null && value != undefined && validationConfiguration.HasSetDateProperty() && validationConfiguration.HasSetTimeProperty();\n };\n\n function HasDateBeenSet(value: Moment, validationConfiguration: DateTimeValidationConfiguration): boolean {\n if (!ko.unwrap(validationConfiguration.IsDateRequired) || validationConfiguration.ComponentState != DateTimeWorkflowStates.DateMode) {\n return true;\n }\n\n return value != null && value != undefined && validationConfiguration.HasSetDateProperty();\n };\n\n function HasTimeBeenSet(value: Moment, validationConfiguration: DateTimeValidationConfiguration): boolean {\n if (!ko.unwrap(validationConfiguration.IsTimeRequired) || validationConfiguration.ComponentState != DateTimeWorkflowStates.TimeMode) {\n return true;\n }\n\n return value != null && value != undefined && validationConfiguration.HasSetTimeProperty();\n };\n\n function IsValidMinute(value: Moment, validationConfiguration: DateTimeValidationConfiguration) : boolean {\n const allowedMinutes = ko.unwrap(validationConfiguration.AllowedMinutes);\n\n if (!allowedMinutes) {\n return true;\n }\n\n return allowedMinutes.indexOf(value.minute()) >= 0;\n }\n}\n"]}