{"version":3,"file":"DateTimeField.cjs","names":["_xDatePickers","require","_react","_Field","_i18n","_jsxRuntime","_interopRequireDefault","e","__esModule","default","useOdysseyDateError","t","useTranslation","Map","formatDateTimeToUtcIsoDateString","value","toUTC","toISO","DateTimeField","defaultValue","endAdornment","errorMessage","hasInitialFocus","hint","HintLinkComponent","id","idOverride","inputRef","isDisabled","isOptional","isReadOnly","label","minDate","maxDate","onBlur","onChange","onFocus","timezone","errorMap","displayedErrorMessage","setDisplayedErrorMessage","useState","internalValidationError","useRef","localInputRef","useImperativeHandle","focus","current","checkMinMaxValidity","useCallback","hasMinError","hasMaxError","get","useEffect","clearErrorMessages","undefined","validateAndCallOnChange","validationContext","validationError","hasEnteredFullYear","year","toString","length","odysseyValidationError","isValid","dateStringFromDateTime","checkFieldValidityAndSetError","event","hasVisibleAdornment","renderFieldComponent","ariaDescribedBy","errorMessageElementId","labelElementId","jsx","autoFocus","disabled","inputProps","InputProps","error","Boolean","Fragment","children","_InputAdornment2","position","name","readOnly","variant","Field","fieldType","hasVisibleLabel","MemoizedDateTimeField","exports","memo","displayName"],"sources":["../../../../src/labs/DatePickers/DateTimeField.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2022-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { InputAdornment } from \"@mui/material\";\nimport {\n  DateTimeValidationError,\n  DateTimeField as MuiDateTimeField,\n  DateTimeFieldProps as MuiDateTimeFieldProps,\n} from \"@mui/x-date-pickers\";\nimport { DateTime } from \"luxon\";\nimport {\n  FocusEventHandler,\n  memo,\n  useCallback,\n  useEffect,\n  useImperativeHandle,\n  useRef,\n  useState,\n} from \"react\";\n\nimport { Field, RenderFieldComponentProps } from \"../../Field.js\";\nimport { useTranslation } from \"../../i18n.generated/i18n.js\";\nimport { TextFieldProps } from \"../../TextField.js\";\n\nexport type DateTimeFieldProps = {\n  onChange?: (value: string) => void;\n} & Pick<\n  MuiDateTimeFieldProps<DateTime>,\n  \"defaultValue\" | \"inputRef\" | \"minDate\" | \"maxDate\" | \"timezone\" | \"value\"\n> &\n  Pick<\n    TextFieldProps,\n    | \"endAdornment\"\n    | \"errorMessage\"\n    | \"hasInitialFocus\"\n    | \"hint\"\n    | \"HintLinkComponent\"\n    | \"id\"\n    | \"isDisabled\"\n    | \"isOptional\"\n    | \"isReadOnly\"\n    | \"label\"\n    | \"onBlur\"\n    | \"onFocus\"\n  >;\n\nconst useOdysseyDateError = () => {\n  const { t } = useTranslation();\n\n  return new Map<DateTimeValidationError, string>([\n    [\"invalidDate\", t(\"picker.error.invalid\")],\n    [\"maxDate\", t(\"picker.error.maxdate\")],\n    [\"minDate\", t(\"picker.error.mindate\")],\n  ]);\n};\n\nconst formatDateTimeToUtcIsoDateString = (value: DateTime) =>\n  value.toUTC().toISO();\n\nconst DateTimeField = ({\n  defaultValue,\n  endAdornment,\n  errorMessage,\n  hasInitialFocus,\n  hint,\n  HintLinkComponent,\n  id: idOverride,\n  inputRef,\n  isDisabled = false,\n  isOptional = false,\n  isReadOnly,\n  label,\n  minDate,\n  maxDate,\n  onBlur,\n  onChange,\n  onFocus,\n  timezone,\n  value,\n}: DateTimeFieldProps) => {\n  const errorMap = useOdysseyDateError();\n  const [displayedErrorMessage, setDisplayedErrorMessage] =\n    useState(errorMessage);\n\n  const internalValidationError = useRef<string | undefined>();\n  const localInputRef = useRef<HTMLInputElement>(null);\n\n  useImperativeHandle(inputRef, () => {\n    return {\n      focus: () => {\n        localInputRef.current?.focus();\n      },\n    };\n  }, []);\n\n  const checkMinMaxValidity = useCallback(\n    (value: DateTime) => {\n      const hasMinError = minDate && value.toUTC() < minDate.toUTC();\n      const hasMaxError = maxDate && value.toUTC() > maxDate.toUTC();\n\n      if (hasMinError || hasMaxError) {\n        if (hasMinError) {\n          setDisplayedErrorMessage(errorMap.get(\"minDate\"));\n        }\n\n        if (hasMaxError) {\n          setDisplayedErrorMessage(errorMap.get(\"maxDate\"));\n        }\n\n        return false;\n      }\n\n      return true;\n    },\n    [errorMap, minDate, maxDate],\n  );\n\n  useEffect(() => {\n    if (value) {\n      checkMinMaxValidity(value);\n    }\n\n    if (defaultValue) {\n      checkMinMaxValidity(defaultValue);\n    }\n  }, [checkMinMaxValidity, defaultValue, minDate, maxDate, value]);\n\n  const clearErrorMessages = useCallback(() => {\n    setDisplayedErrorMessage(undefined);\n    internalValidationError.current = undefined;\n  }, [internalValidationError, setDisplayedErrorMessage]);\n\n  const validateAndCallOnChange = useCallback<\n    NonNullable<MuiDateTimeFieldProps<DateTime>[\"onChange\"]>\n  >(\n    (value, validationContext) => {\n      clearErrorMessages();\n      const { validationError } = validationContext;\n      const hasEnteredFullYear = value?.year.toString().length === 4;\n\n      if (validationError) {\n        const odysseyValidationError = errorMap.get(validationError);\n\n        if (odysseyValidationError) {\n          internalValidationError.current = odysseyValidationError;\n\n          if (value?.isValid && hasEnteredFullYear) {\n            setDisplayedErrorMessage(odysseyValidationError);\n          }\n        }\n      }\n\n      if (value?.isValid && !validationError) {\n        const dateStringFromDateTime = formatDateTimeToUtcIsoDateString(value);\n\n        if (dateStringFromDateTime && checkMinMaxValidity(value)) {\n          onChange?.(dateStringFromDateTime);\n        }\n      }\n    },\n    [checkMinMaxValidity, clearErrorMessages, errorMap, onChange],\n  );\n\n  const checkFieldValidityAndSetError = useCallback<\n    FocusEventHandler<HTMLInputElement>\n  >(\n    (event) => {\n      if (internalValidationError?.current && !displayedErrorMessage) {\n        setDisplayedErrorMessage(internalValidationError.current);\n      }\n      onBlur?.(event);\n    },\n    [displayedErrorMessage, internalValidationError, onBlur],\n  );\n\n  const hasVisibleAdornment = !isReadOnly && !isDisabled;\n\n  const renderFieldComponent = useCallback(\n    ({\n      ariaDescribedBy,\n      errorMessageElementId,\n      id,\n      labelElementId,\n    }: RenderFieldComponentProps) => (\n      <MuiDateTimeField\n        /* eslint-disable-next-line jsx-a11y/no-autofocus */\n        autoFocus={hasInitialFocus}\n        defaultValue={defaultValue}\n        disabled={isDisabled}\n        id={id}\n        inputProps={{\n          \"aria-describedby\": ariaDescribedBy,\n          \"aria-errormessage\": errorMessageElementId,\n          \"aria-labelledby\": labelElementId,\n          \"aria-readonly\": isReadOnly,\n        }}\n        InputProps={{\n          error: Boolean(displayedErrorMessage || errorMessage),\n          endAdornment: (\n            <>\n              {hasVisibleAdornment && (\n                <InputAdornment position=\"end\">{endAdornment}</InputAdornment>\n              )}\n            </>\n          ),\n        }}\n        inputRef={localInputRef}\n        maxDate={maxDate}\n        minDate={minDate}\n        name={id}\n        onBlur={checkFieldValidityAndSetError}\n        onChange={validateAndCallOnChange}\n        onFocus={onFocus}\n        readOnly={isReadOnly}\n        timezone={timezone}\n        value={value}\n        variant=\"standard\"\n      />\n    ),\n    [\n      checkFieldValidityAndSetError,\n      defaultValue,\n      displayedErrorMessage,\n      endAdornment,\n      errorMessage,\n      hasInitialFocus,\n      hasVisibleAdornment,\n      isDisabled,\n      localInputRef,\n      minDate,\n      maxDate,\n      onFocus,\n      isReadOnly,\n      timezone,\n      validateAndCallOnChange,\n      value,\n    ],\n  );\n\n  return (\n    <Field\n      errorMessage={displayedErrorMessage || errorMessage}\n      fieldType=\"single\"\n      hasVisibleLabel\n      hint={hint}\n      HintLinkComponent={HintLinkComponent}\n      id={idOverride}\n      isDisabled={isDisabled}\n      isOptional={isOptional}\n      isReadOnly={isReadOnly}\n      label={label}\n      renderFieldComponent={renderFieldComponent}\n    />\n  );\n};\n\nconst MemoizedDateTimeField = memo(DateTimeField);\nMemoizedDateTimeField.displayName = \"DateTimeField\";\n\nexport { MemoizedDateTimeField as DateTimeField };\n"],"mappings":"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","ignoreList":[]}