{"version":3,"file":"react-flatpickr.cjs","sources":["../lib/DateTimePicker.tsx"],"sourcesContent":["import React, {useEffect, useRef, FC, useMemo, useCallback, useImperativeHandle, ChangeEventHandler} from 'react';\nimport flatpickr from 'flatpickr';\nimport {Options, DateOption, Plugin, ParsedOptions} from 'flatpickr/dist/types/options';\nimport {DateTimePickerProps} from '../types/react-flatpickr';\nimport type {OptionsType} from '../types/react-flatpickr';\n\nconst callbacks = ['onCreate', 'onDestroy'] as const;\nconst hooks = [\n  'onChange',\n  'onOpen',\n  'onClose',\n  'onMonthChange',\n  'onYearChange',\n  'onReady',\n  'onValueUpdate',\n  'onDayCreate'\n] as const;\n\nconst mergeHooks = (inputOptions: flatpickr.Options.Options, props: DateTimePickerProps): OptionsType => {\n  hooks.forEach((hook: string) => {\n    const hookFn = props[hook as keyof DateTimePickerProps];\n    const existingHookFn = inputOptions[hook as keyof Options];\n    if (hookFn) {\n      if (existingHookFn && !Array.isArray(existingHookFn)) {\n        (inputOptions as any)[hook] = [(inputOptions as any)[hook]];\n      } else if (!(inputOptions as any)[hook]) {\n        (inputOptions as any)[hook] = [];\n      }\n\n      const propHook = Array.isArray(hookFn) ? hookFn : [hookFn];\n      if ((inputOptions as any)[hook].length === 0) {\n        (inputOptions as any)[hook] = propHook;\n      } else {\n        (inputOptions as any)[hook].push(...propHook);\n      }\n    }\n  });\n\n  hooks.forEach((hook) => {\n    delete (props as any)[hook];\n  });\n  callbacks.forEach((callback) => {\n    delete (props as any)[callback];\n  });\n\n  return inputOptions;\n};\n\nexport const DateTimePicker: FC<DateTimePickerProps> = (defaultProps) => {\n  const props = useMemo(() => ({...defaultProps}), [defaultProps]);\n  const {defaultValue, options = {}, value, children, render} = props;\n  const mergedOptions = useMemo(() => mergeHooks(options, props), [options, props]);\n  const nodeRef = useRef<HTMLElement | null>(null);\n  const flatpickrRef = useRef<flatpickr.Instance>(undefined);\n\n  useImperativeHandle(\n    defaultProps.ref,\n    () => {\n      return {\n        get flatpickr() {\n          return flatpickrRef.current;\n        }\n      };\n    },\n    []\n  );\n\n  useEffect(() => {\n    const createFlatpickrInstance = () => {\n      mergedOptions.onClose =\n        mergedOptions.onClose ||\n        (() => {\n          if (nodeRef.current?.blur) nodeRef.current.blur();\n        });\n\n      // @ts-expect-error for some reason the default import isnt working correctly\n      flatpickrRef.current = (flatpickr?.default || flatpickr)(nodeRef.current as HTMLElement, mergedOptions);\n\n      if (flatpickrRef.current && value !== undefined) {\n        flatpickrRef.current.setDate(value, false);\n      }\n\n      if (defaultProps.onCreate) defaultProps.onCreate(flatpickrRef.current);\n    };\n\n    const destroyFlatpickrInstance = () => {\n      if (defaultProps.onDestroy) defaultProps.onDestroy(flatpickrRef.current);\n      if (flatpickrRef.current) {\n        flatpickrRef.current.destroy();\n      }\n      flatpickrRef.current = undefined;\n    };\n\n    createFlatpickrInstance();\n\n    if (flatpickrRef.current) {\n      const optionsKeys = Object.getOwnPropertyNames(mergedOptions);\n      for (let index = optionsKeys.length - 1; index >= 0; index--) {\n        const key = optionsKeys[index];\n        let optionValue = mergedOptions[key as keyof OptionsType];\n\n        if (optionValue?.toString() !== flatpickrRef.current.config[key as keyof ParsedOptions]?.toString()) {\n          if (hooks.includes(key as any) && !Array.isArray(optionValue)) {\n            optionValue = [optionValue] as unknown as Plugin;\n          }\n\n          flatpickrRef.current.set(key as any, optionValue);\n        }\n      }\n\n      if (value !== undefined && value !== flatpickrRef.current.input.value) {\n        flatpickrRef.current.setDate(value as DateOption | DateOption[], false);\n      }\n    }\n\n    return () => {\n      destroyFlatpickrInstance();\n    };\n  }, [mergedOptions, options, props, value, defaultProps]);\n\n  const handleNodeChange = useCallback((node: HTMLElement | null) => {\n    nodeRef.current = node;\n  }, []);\n\n  if (render) {\n    return render({...props, defaultValue, value}, handleNodeChange);\n  }\n\n  const onChange: ChangeEventHandler<HTMLInputElement> = useCallback(\n    (e) => {\n      if (defaultProps && defaultProps.onChange) {\n        if (Array.isArray(defaultProps?.onChange)) {\n          defaultProps?.onChange?.forEach(() => [new Date(e.target.value)], value?.toString() || '');\n        } else if (typeof defaultProps.onChange === 'function') {\n          defaultProps?.onChange?.([new Date(e.target.value)], value?.toString() || '', flatpickrRef.current!);\n        }\n      }\n    },\n    [defaultProps, value]\n  );\n\n  return options.wrap ? (\n    <div className=\"flatpickr\" ref={handleNodeChange}>\n      {children}\n    </div>\n  ) : (\n    <input\n      // @ts-expect-error just allow all the passed props to be passed to the input\n      onChange={onChange}\n      {...props}\n      value={value?.toString()}\n      defaultValue={defaultValue}\n      ref={handleNodeChange}\n    />\n  );\n};\n"],"names":["callbacks","hooks","mergeHooks","inputOptions","props","hook","hookFn","existingHookFn","propHook","callback","DateTimePicker","defaultProps","useMemo","defaultValue","options","value","children","render","mergedOptions","nodeRef","useRef","flatpickrRef","useImperativeHandle","useEffect","createFlatpickrInstance","_a","flatpickr","destroyFlatpickrInstance","optionsKeys","index","key","optionValue","handleNodeChange","useCallback","node","onChange","e","_b","jsx"],"mappings":"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"}