{"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, onCreate, onDestroy} = 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      onCreate?.(flatpickrRef.current);\n    };\n\n    const destroyFlatpickrInstance = () => {\n      onDestroy?.(flatpickrRef.current);\n      if (flatpickrRef.current) {\n        flatpickrRef.current.destroy();\n      }\n      flatpickrRef.current = undefined;\n    };\n\n    createFlatpickrInstance();\n\n    return () => {\n      destroyFlatpickrInstance();\n    };\n  }, [mergedOptions, onCreate, onDestroy]);\n\n  useEffect(() => {\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  }, [mergedOptions, value]);\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","onCreate","onDestroy","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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"}