{"version":3,"file":"DatePickerFastNav.mjs","sources":[""],"sourcesContent":["import { isValidDate } from \"@web3r/flowerkit/date\";\r\nimport { getStrWithZeroFromNum } from \"@web3r/flowerkit/str\";\r\nimport type { ReactNode } from \"react\";\r\nimport { useCallback, useContext, useMemo } from \"react\";\r\nimport type { ReactDatePickerCustomHeaderProps } from \"react-datepicker\";\r\nimport { Locale } from \"../../locale\";\r\nimport { Select } from \"../../select\";\r\nimport type { TOnChangeParams } from \"../../select/config/types\";\r\nimport type {\r\n  THeaderStateActions, IDatePicker, TDatePickerCustomHeaderProps, TValidDateSingleStamp, TValidDateUnionStamp,\r\n} from \"../config/types\";\r\nimport { DatePickerContext } from \"../context\";\r\nimport { getYearsRange } from \"../lib\";\r\n\r\ntype TDatePickerFastNavProps = {\r\n  stateActions: THeaderStateActions;\r\n  isPrevMonthDisabled: ReactDatePickerCustomHeaderProps[\"prevMonthButtonDisabled\"];\r\n  isNextMonthDisabled: ReactDatePickerCustomHeaderProps[\"nextMonthButtonDisabled\"];\r\n  onCtrlChange: IDatePicker[\"onCtrlChange\"];\r\n  minDate: TValidDateSingleStamp;\r\n  maxDate: TValidDateSingleStamp;\r\n  date: Date;\r\n} & Pick<TDatePickerCustomHeaderProps, \"dateInputValue\" | \"pickerRef\" | \"name\">;\r\n\r\n/**\r\n * Блок выстрой навигации\r\n * @returns {ReactNode}\r\n */\r\nexport const DatePickerFastNav = ({\r\n  stateActions,\r\n  date,\r\n  onCtrlChange,\r\n  isPrevMonthDisabled,\r\n  isNextMonthDisabled,\r\n  maxDate,\r\n  minDate,\r\n  name,\r\n  dateInputValue,\r\n  pickerRef,\r\n}: TDatePickerFastNavProps): ReactNode => {\r\n\r\n  const { getCN } = useContext(DatePickerContext);\r\n\r\n  const months = useMemo(() => {\r\n    return [ ...Array(12).keys() ].map((index) => {\r\n      return {\r\n        label: getStrWithZeroFromNum(index + 1),\r\n        value: index.toString(),\r\n      };\r\n    });\r\n  }, []);\r\n\r\n  const years = useMemo(() => {\r\n    if (isValidDate(minDate) && isValidDate(maxDate)) {\r\n      return getYearsRange(minDate as Date, maxDate as Date)\r\n        .map((date) => {\r\n          const yyyy = date.getFullYear().toString();\r\n          return {\r\n            label: yyyy,\r\n            value: yyyy,\r\n          };\r\n        }).reverse();\r\n    } else {\r\n      console.error(`[DatePickerFastNav] Something wrong with \"minDate\" or \"maxDate\" from year select`, [ minDate, maxDate ]);\r\n      return [];\r\n    }\r\n  }, [ minDate, maxDate ]);\r\n\r\n  const onChangeYear = useCallback((params: TOnChangeParams) => {\r\n    const { data } = params;\r\n    if (typeof onCtrlChange === \"function\") {\r\n      onCtrlChange({\r\n        data: {\r\n          name,\r\n          dateInputValue,\r\n          value: (data.value as { value?: string; } | null)?.value as unknown as TValidDateUnionStamp,\r\n          type: \"changeYear\",\r\n        },\r\n        event: new Event(\"change\"),\r\n        stateActions,\r\n        ref: pickerRef,\r\n      });\r\n    } else {\r\n      const yyyy = Number((data.value as { value?: string; } | null)?.value);\r\n      if (Number.isNaN(yyyy)) {\r\n        console.error(`[DatePickerFastNav] Something wrong with value from year select`, data);\r\n      } else {\r\n        stateActions.changeYear(yyyy);\r\n      }\r\n    }\r\n  }, [ onCtrlChange, date, stateActions ]);\r\n\r\n  const onChangeMonth = useCallback((params: TOnChangeParams) => {\r\n    const { data } = params;\r\n    if (typeof onCtrlChange === \"function\") {\r\n      onCtrlChange({\r\n        data: {\r\n          name,\r\n          dateInputValue,\r\n          value: (data.value as { value?: string; } | null)?.value as unknown as TValidDateUnionStamp,\r\n          type: \"changeMonth\",\r\n        },\r\n        event: new Event(\"change\"),\r\n        stateActions,\r\n        ref: pickerRef,\r\n      });\r\n    } else {\r\n      const mm = Number((data.value as { value?: string; } | null)?.value);\r\n      if (Number.isNaN(mm)) {\r\n        console.error(`[DatePickerFastNav] Something wrong with value from month select`, data);\r\n      } else {\r\n        stateActions.changeMonth(mm);\r\n      }\r\n    }\r\n  }, [ onCtrlChange, date, stateActions ]);\r\n\r\n  const currentMonth = useMemo(() => isValidDate(date) ? date.getMonth().toString() : null, [ date ]);\r\n  const currentYear = useMemo(() => isValidDate(date) ? date.getFullYear().toString() : null, [ date ]);\r\n\r\n  return (\r\n    <div className={getCN(\"fastNav\")}>\r\n      <div className={getCN(\"fastNavMonths\")}>\r\n        <Locale code={\"datePicker.month\"} />\r\n        <Select isDisabled={isPrevMonthDisabled && isNextMonthDisabled} value={currentMonth} onChange={onChangeMonth}\r\n          options={months} />\r\n      </div>\r\n      <div className={getCN(\"fastNavYears\")}>\r\n        <Locale code={\"datePicker.year\"} />\r\n        <Select isDisabled={isPrevMonthDisabled && isNextMonthDisabled} onChange={onChangeYear} value={currentYear}\r\n          options={years} />\r\n      </div>\r\n    </div>\r\n  );\r\n\r\n};\r\n"],"names":["DatePickerFastNav","stateActions","date","onCtrlChange","isPrevMonthDisabled","isNextMonthDisabled","maxDate","minDate","name","dateInputValue","pickerRef","getCN","useContext","DatePickerContext","months","useMemo","Array","keys","map","index","label","getStrWithZeroFromNum","value","toString","years","isValidDate","getYearsRange","yyyy","getFullYear","reverse","console","error","onChangeYear","useCallback","params","data","type","event","Event","ref","Number","isNaN","changeYear","onChangeMonth","mm","changeMonth","currentMonth","getMonth","currentYear","_jsxs","className","children","_jsx","Locale","code","Select","isDisabled","onChange","options"],"mappings":";;;;GA4BO,MAAMA,kBAAoB,EAC/BC,0BACAC,UACAC,0BACAC,wCACAC,wCACAC,gBACAC,gBACAC,UACAC,8BACAC,wBAGA,MAAMC,MAAEA,OAAUC,WAAWC,mBAE7B,MAAMC,OAASC,QAAQ,IACd,IAAKC,MAAM,IAAIC,QAASC,IAAKC,QAC3B,CACLC,MAAOC,sBAAsBF,MAAQ,GACrCG,MAAOH,MAAMI,cAGhB,IAEH,MAAMC,MAAQT,QAAQ,KACpB,GAAIU,YAAYlB,UAAYkB,YAAYnB,SACtC,OAAOoB,cAAcnB,QAAiBD,SACnCY,IAAKhB,OACJ,MAAMyB,KAAOzB,KAAK0B,cAAcL,WAChC,MAAO,CACLH,MAAOO,KACPL,MAAOK,QAERE,cACA,CACLC,QAAQC,MAAM,mFAAoF,CAAExB,QAASD,UAC7G,MAAO,EACT,GACC,CAAEC,QAASD,UAEd,MAAM0B,aAAeC,YAAaC,SAChC,MAAMC,KAAEA,MAASD,OACjB,UAAW/B,eAAiB,WAC1BA,aAAa,CACXgC,KAAM,CACJ3B,UACAC,8BACAa,MAAQa,KAAKb,OAAsCA,MACnDc,KAAM,cAERC,MAAO,IAAIC,MAAM,UACjBrC,0BACAsC,IAAK7B,gBAEF,CACL,MAAMiB,KAAOa,OAAQL,KAAKb,OAAsCA,OAChE,GAAIkB,OAAOC,MAAMd,MACfG,QAAQC,MAAM,kEAAmEI,WAEjFlC,aAAayC,WAAWf,KAE5B,GACC,CAAExB,aAAcD,KAAMD,eAEzB,MAAM0C,cAAgBV,YAAaC,SACjC,MAAMC,KAAEA,MAASD,OACjB,UAAW/B,eAAiB,WAC1BA,aAAa,CACXgC,KAAM,CACJ3B,UACAC,8BACAa,MAAQa,KAAKb,OAAsCA,MACnDc,KAAM,eAERC,MAAO,IAAIC,MAAM,UACjBrC,0BACAsC,IAAK7B,gBAEF,CACL,MAAMkC,GAAKJ,OAAQL,KAAKb,OAAsCA,OAC9D,GAAIkB,OAAOC,MAAMG,IACfd,QAAQC,MAAM,mEAAoEI,WAElFlC,aAAa4C,YAAYD,GAE7B,GACC,CAAEzC,aAAcD,KAAMD,eAEzB,MAAM6C,aAAe/B,QAAQ,IAAMU,YAAYvB,MAAQA,KAAK6C,WAAWxB,WAAa,KAAM,CAAErB,OAC5F,MAAM8C,YAAcjC,QAAQ,IAAMU,YAAYvB,MAAQA,KAAK0B,cAAcL,WAAa,KAAM,CAAErB;AAE9F,OACE+C,KAAA,MAAA,CAAKC,UAAWvC,MAAM,WAAWwC,SAAA,CAC/BF,KAAA,MAAA,CAAKC,UAAWvC,MAAM,iBAAiBwC,SAAA,CACrCC,IAACC,OAAM,CAACC,KAAM,qBACdF,IAACG,SAAM,CAACC,WAAYpD,qBAAuBC,oBAAqBiB,MAAOwB,aAAcW,SAAUd,cAC7Fe,QAAS5C,YAEbmC,KAAA,MAAA,CAAKC,UAAWvC,MAAM,gBAAgBwC,SAAA,CACpCC,IAACC,OAAM,CAACC,KAAM,oBACdF,IAACG,SAAM,CAACC,WAAYpD,qBAAuBC,oBAAqBoD,SAAUzB,aAAcV,MAAO0B,YAC7FU,QAASlC"}