{"version":3,"file":"CustomRangePicker.mjs","sources":["../../../../src/lib/nextGenComponents/components/CustomRangePicker/CustomRangePicker.tsx"],"sourcesContent":["import { AlertCircle } from 'lucide-react'\nimport { useMemo, useState } from 'react'\nimport type { DateRange } from 'react-day-picker'\n\nimport { DateTimePickerPanel } from '@/components/CustomRangePicker/DateTimePickerPanel'\nimport { Button } from '@/components/ui/button'\nimport { FILTER_BUTTON_APPLY, RESET } from '@/constants'\nimport type { CustomDateRange } from '@/types/table/timeFilter'\nimport {\n  applyHourToDate,\n  getDefaultSinceHour,\n  getDefaultUntilHour,\n  isoToHour,\n  isoToLocalDate,\n  toUTCISO\n} from '@/utils/date.utils'\n\ntype Props = {\n  onApply?: (range: CustomDateRange) => void\n  singleDate?: boolean\n  onReset?: () => void\n  initialRange?: CustomDateRange\n}\n\nconst INITIAL_RANGE: DateRange = { from: undefined, to: undefined }\nconst FROM_AFTER_TO_ERROR = '\"To\" must be later than \"From\"'\n\nconst CustomRangePicker = ({ onApply, singleDate = false, onReset, initialRange }: Props) => {\n  const defaultSinceHour = getDefaultSinceHour()\n  const defaultUntilHour = getDefaultUntilHour()\n\n  const [date, setDate] = useState<DateRange>({\n    from: isoToLocalDate(initialRange?.since ?? ''),\n    to: isoToLocalDate(initialRange?.until ?? '')\n  })\n  const [hours, setHours] = useState<{ from: string; to: string }>({\n    from: isoToHour(initialRange?.since ?? '') || defaultSinceHour,\n    to: isoToHour(initialRange?.until ?? '') || (singleDate ? '' : defaultUntilHour)\n  })\n\n  const errorMessage = useMemo(() => {\n    if (singleDate || !date.from || !date.to) return ''\n\n    const fromDate = applyHourToDate(date.from, hours.from, defaultSinceHour)\n    const toDate = applyHourToDate(date.to, hours.to, defaultUntilHour)\n\n    if (fromDate.getTime() > toDate.getTime()) {\n      return FROM_AFTER_TO_ERROR\n    }\n\n    return ''\n  }, [date.from, date.to, hours.from, hours.to, singleDate, defaultSinceHour, defaultUntilHour])\n\n  const handleReset = () => {\n    setDate(INITIAL_RANGE)\n    setHours({ from: defaultSinceHour, to: singleDate ? '' : defaultUntilHour })\n    onReset?.()\n  }\n\n  const handleSelectDateFrom = (selectedDate?: Date) =>\n    setDate(prev => ({ from: selectedDate, to: prev.to }))\n\n  const handleSelectDateTo = (selectedDate?: Date) =>\n    setDate(prev => ({ from: prev.from, to: selectedDate }))\n\n  const handleFromHourChange = (hour: string) => {\n    setHours(prev => ({ ...prev, from: hour }))\n  }\n\n  const handleToHourChange = (hour: string) => {\n    setHours(prev => ({ ...prev, to: hour }))\n  }\n\n  const hasNoDateSelected = !date.from && !date.to\n  const isApplyDisabled = (singleDate ? !date.from : !date.from || !date.to) || !!errorMessage\n\n  const handleApply = () => {\n    if (errorMessage) return\n    if (!date.from) return\n\n    const since = applyHourToDate(date.from, hours.from, defaultSinceHour)\n\n    if (singleDate) {\n      onApply?.({ since: toUTCISO(since), until: '' })\n      return\n    }\n\n    if (!date.to) return\n    const until = applyHourToDate(date.to, hours.to, defaultUntilHour)\n\n    onApply?.({ since: toUTCISO(since), until: toUTCISO(until) })\n  }\n\n  return (\n    <div className=\"flex flex-col gap-6 bg-white p-6 w-fit\">\n      <div className={singleDate ? '' : 'grid grid-cols-2 gap-8'}>\n        <DateTimePickerPanel\n          label={singleDate ? '' : 'From:'}\n          side=\"start\"\n          dateValue={date.from}\n          range={date}\n          hourValue={hours.from}\n          singleDate={singleDate}\n          onHourChange={handleFromHourChange}\n          onSelectDate={handleSelectDateFrom}\n        />\n\n        {!singleDate && (\n          <DateTimePickerPanel\n            label=\"To:\"\n            side=\"end\"\n            dateValue={date.to}\n            range={date}\n            hourValue={hours.to}\n            onHourChange={handleToHourChange}\n            onSelectDate={handleSelectDateTo}\n          />\n        )}\n      </div>\n\n      {errorMessage && (\n        <div\n          className=\"flex items-center gap-3 rounded-md border border-red-300 bg-red-50 px-4 py-3\"\n          data-testid=\"custom-date-error\"\n        >\n          <AlertCircle className=\"h-5 w-5 shrink-0 text-red-500\" />\n          <span className=\"text-sm font-medium text-red-600\">{errorMessage}</span>\n        </div>\n      )}\n\n      <div className=\"flex justify-end gap-3 pt-4\">\n        <Button\n          variant=\"secondary\"\n          className=\"px-6 py-2 bg-white w-[90px] border-[1.5px] border-igz-gray text-[#4B4760] rounded-md hover:bg-[#483F561F]\"\n          data-testid=\"custom-date-reset-btn\"\n          onClick={handleReset}\n          disabled={hasNoDateSelected}\n        >\n          {RESET}\n        </Button>\n        <Button\n          className=\"px-6 py-2 bg-igz-light-purple w-[90px] text-white hover:bg-igz-dark-purple rounded-md\"\n          data-testid=\"custom-date-apply-btn\"\n          onClick={handleApply}\n          disabled={isApplyDisabled}\n        >\n          {FILTER_BUTTON_APPLY}\n        </Button>\n      </div>\n    </div>\n  )\n}\n\nexport default CustomRangePicker\n"],"names":["INITIAL_RANGE","FROM_AFTER_TO_ERROR","CustomRangePicker","onApply","singleDate","onReset","initialRange","defaultSinceHour","getDefaultSinceHour","defaultUntilHour","getDefaultUntilHour","date","setDate","useState","isoToLocalDate","hours","setHours","isoToHour","errorMessage","useMemo","fromDate","applyHourToDate","toDate","handleReset","handleSelectDateFrom","selectedDate","prev","handleSelectDateTo","handleFromHourChange","hour","handleToHourChange","hasNoDateSelected","isApplyDisabled","handleApply","since","toUTCISO","until","jsxs","jsx","DateTimePickerPanel","AlertCircle","Button","RESET","FILTER_BUTTON_APPLY"],"mappings":"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"}