UNPKG

@undp/design-system-react

Version:

React based design system for UNDP

1 lines 5.97 kB
{"version":3,"file":"DateTimeRangePicker.cjs","names":[],"sources":["../src/components/ui/date-time-range-picker.tsx"],"sourcesContent":["import { ArrowRight } from 'lucide-react';\nimport { useEffect, useState } from 'react';\nimport type { Matcher } from 'react-day-picker';\nimport { DateTimePicker } from './date-time-picker';\n\nexport function DateTimeRangePicker({\n disablePopover,\n classNames,\n variant,\n inputSize,\n rounded,\n onValueChange,\n value,\n defaultValue,\n disabled,\n}: {\n variant?: 'light' | 'normal';\n inputSize?: 'sm' | 'base';\n rounded?: 'base' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full';\n classNames?: {\n popOverTrigger?: string;\n popOverContent?: string;\n popOverTriggerIcon?: string;\n };\n onValueChange?: (dates?: { startDate?: Date; endDate?: Date }) => void;\n value?: {\n startDate?: Date;\n endDate?: Date;\n };\n defaultValue?: {\n startDate?: Date;\n endDate?: Date;\n };\n disablePopover?: boolean;\n disabled?: Matcher | Matcher[];\n}) {\n const [startDate, setStartDate] = useState<Date | undefined>(\n value?.startDate || defaultValue?.startDate || undefined,\n );\n const [endDate, setEndDate] = useState<Date | undefined>(\n value?.endDate || defaultValue?.endDate || undefined,\n );\n useEffect(() => {\n onValueChange?.({ startDate, endDate });\n }, [startDate, endDate, onValueChange]);\n\n return (\n <div className='flex w-full items-center gap-2'>\n <DateTimePicker\n onValueChange={(value: Date | undefined) => {\n setStartDate(value);\n }}\n placeHolder='Start date and time'\n rounded={rounded}\n disablePopover={disablePopover}\n variant={variant}\n inputSize={inputSize}\n classNames={classNames}\n disabled={(date: Date) => {\n const isAfterEndDate = endDate ? date.getDate() > endDate.getDate() : false;\n\n if (typeof disabled === 'function') {\n return disabled(date) || isAfterEndDate;\n }\n\n if (Array.isArray(disabled)) {\n return (\n disabled.some((matcher) => (typeof matcher === 'function' ? matcher(date) : false)) ||\n isAfterEndDate\n );\n }\n\n return isAfterEndDate;\n }}\n disabledHours={\n endDate && endDate?.getDate() === startDate?.getDate()\n ? Array.from({ length: 24 }, (_, i) => i).filter((hour) => hour > endDate.getHours())\n : []\n }\n disabledMinutes={\n endDate && endDate?.getDate() === startDate?.getDate()\n ? Array.from({ length: 60 }, (_, i) => i).filter(\n (minute) => minute > endDate.getMinutes(),\n )\n : []\n }\n />\n <div className='size-4 text-input-border'>\n <ArrowRight size={16} />\n </div>\n <DateTimePicker\n onValueChange={(value: Date | undefined) => {\n setEndDate(value);\n }}\n placeHolder='End date and time'\n rounded={rounded}\n disablePopover={disablePopover}\n variant={variant}\n inputSize={inputSize}\n classNames={classNames}\n disabled={(date: Date) => {\n const isBeforeStartDate = startDate ? date.getDate() < startDate.getDate() : false;\n\n if (typeof disabled === 'function') {\n return disabled(date) || isBeforeStartDate;\n }\n\n if (Array.isArray(disabled)) {\n return (\n disabled.some((matcher) => (typeof matcher === 'function' ? matcher(date) : false)) ||\n isBeforeStartDate\n );\n }\n\n return isBeforeStartDate;\n }}\n disabledHours={\n startDate && endDate?.getDate() === startDate.getDate()\n ? Array.from({ length: 24 }, (_, i) => i).filter((hour) => hour < startDate.getHours())\n : []\n }\n disabledMinutes={\n startDate && endDate?.getDate() === startDate.getDate()\n ? Array.from({ length: 60 }, (_, i) => i).filter(\n (minute) => minute < startDate.getMinutes(),\n )\n : []\n }\n />\n </div>\n );\n}\n"],"mappings":"yMAKA,SAAgB,EAAoB,CAClC,iBACA,aACA,UACA,YACA,UACA,gBACA,QACA,eACA,YAqBC,CACD,GAAM,CAAC,EAAW,IAAA,EAAA,EAAA,SAAA,CAChB,GAAO,WAAa,GAAc,WAAa,IAAA,EACjD,EACM,CAAC,EAAS,IAAA,EAAA,EAAA,SAAA,CACd,GAAO,SAAW,GAAc,SAAW,IAAA,EAC7C,EAKA,OAJA,EAAA,EAAA,UAAA,KAAgB,CACd,IAAgB,CAAE,YAAW,SAAQ,CAAC,CACxC,EAAG,CAAC,EAAW,EAAS,CAAa,CAAC,GAGpC,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,0CAAf,EACE,EAAA,EAAA,IAAA,CAAC,EAAA,eAAD,CACE,cAAgB,GAA4B,CAC1C,EAAa,CAAK,CACpB,EACA,YAAY,sBACH,UACO,iBACP,UACE,YACC,aACZ,SAAW,GAAe,CACxB,IAAM,EAAiB,EAAU,EAAK,QAAQ,EAAI,EAAQ,QAAQ,EAAI,GAatE,OAXI,OAAO,GAAa,WACf,EAAS,CAAI,GAAK,EAGvB,MAAM,QAAQ,CAAQ,GAEtB,EAAS,KAAM,GAAa,OAAO,GAAY,YAAa,EAAQ,CAAI,CAAU,GAK/E,CACT,EACA,cACE,GAAW,GAAS,QAAQ,IAAM,GAAW,QAAQ,EACjD,MAAM,KAAK,CAAE,OAAQ,EAAG,GAAI,EAAG,IAAM,CAAC,CAAC,CAAC,OAAQ,GAAS,EAAO,EAAQ,SAAS,CAAC,EAClF,CAAC,EAEP,gBACE,GAAW,GAAS,QAAQ,IAAM,GAAW,QAAQ,EACjD,MAAM,KAAK,CAAE,OAAQ,EAAG,GAAI,EAAG,IAAM,CAAC,CAAC,CAAC,OACrC,GAAW,EAAS,EAAQ,WAAW,CAC1C,EACA,CAAC,CAER,CAAA,GACD,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,qCACb,EAAA,EAAA,IAAA,CAAC,EAAA,EAAD,CAAY,KAAM,EAAK,CAAA,CACpB,CAAA,GACL,EAAA,EAAA,IAAA,CAAC,EAAA,eAAD,CACE,cAAgB,GAA4B,CAC1C,EAAW,CAAK,CAClB,EACA,YAAY,oBACH,UACO,iBACP,UACE,YACC,aACZ,SAAW,GAAe,CACxB,IAAM,EAAoB,EAAY,EAAK,QAAQ,EAAI,EAAU,QAAQ,EAAI,GAa7E,OAXI,OAAO,GAAa,WACf,EAAS,CAAI,GAAK,EAGvB,MAAM,QAAQ,CAAQ,GAEtB,EAAS,KAAM,GAAa,OAAO,GAAY,YAAa,EAAQ,CAAI,CAAU,GAK/E,CACT,EACA,cACE,GAAa,GAAS,QAAQ,IAAM,EAAU,QAAQ,EAClD,MAAM,KAAK,CAAE,OAAQ,EAAG,GAAI,EAAG,IAAM,CAAC,CAAC,CAAC,OAAQ,GAAS,EAAO,EAAU,SAAS,CAAC,EACpF,CAAC,EAEP,gBACE,GAAa,GAAS,QAAQ,IAAM,EAAU,QAAQ,EAClD,MAAM,KAAK,CAAE,OAAQ,EAAG,GAAI,EAAG,IAAM,CAAC,CAAC,CAAC,OACrC,GAAW,EAAS,EAAU,WAAW,CAC5C,EACA,CAAC,CAER,CAAA,CACE,GAET"}