ivt
Version:
Ivt Components Library
1 lines • 8.69 kB
Source Map (JSON)
{"version":3,"file":"CalendarRange-BCcF9etO.mjs","sources":["../../src/components/default/base/CalendarRange.tsx"],"sourcesContent":["\"use client\";\n\nimport { addMonths, format } from \"date-fns\";\nimport { ptBR } from \"date-fns/locale\";\nimport { CalendarDaysIcon } from \"lucide-react\";\nimport * as React from \"react\";\nimport { type DateRange } from \"react-day-picker\";\nimport { Button, type ButtonProps } from \"@/components/ui/button\";\nimport { Calendar } from \"@/components/ui/calendar\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"@/components/ui/popover\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface CalendarRangeProps\n\textends Omit<React.ComponentProps<typeof Calendar>, \"mode\" | \"selected\" | \"onSelect\"> {\n\t/** Intervalo de datas selecionado (com `from` e `to`) */\n\tvalue: DateRange | undefined;\n\t/** Função chamada ao alterar o intervalo de datas selecionado */\n\tonChange: (range: DateRange | undefined) => void;\n\t/** Texto exibido quando não há intervalo selecionado */\n\tplaceholder?: string;\n\t/** ID opcional do botão */\n\tid?: string;\n\t/** Props extras para o botão */\n\tbuttonProps?: ButtonProps;\n\t/** Props extras para o popover */\n\tpopoverProps?: React.ComponentProps<typeof Popover>;\n\t/** Classe extra para o conteúdo do popover */\n\tpopoverContentClassName?: string;\n\t/** Classe extra para o botão */\n\tclassName?: string;\n\t/** Desabilita o botão e impede a seleção de datas */\n\tdisabled?: boolean;\n\t/**\n\t * Mês padrão a ser mostrado (caso nenhuma data esteja selecionada)\n\t * Por padrão, será o mês atual.\n\t */\n\tdefaultMonth?: Date;\n}\n\nexport function CalendarRange({\n\tvalue,\n\tonChange,\n\tplaceholder = \"Selecione uma data\",\n\tid = \"date\",\n\tbuttonProps,\n\tpopoverProps,\n\tpopoverContentClassName,\n\tclassName,\n\tdisabled,\n\t...props\n}: CalendarRangeProps) {\n\tconst [open, setOpen] = React.useState(false);\n\n\tconst [leftMonth, setLeftMonth] = React.useState<Date>(\n\t\tvalue?.from ?? props.defaultMonth ?? new Date(),\n\t);\n\tconst [rightMonth, setRightMonth] = React.useState<Date>(\n\t\tvalue?.to ?? addMonths(value?.from ?? props.defaultMonth ?? new Date(), 1),\n\t);\n\n\t// Ao abrir o popover, ajusta os meses para refletir a seleção atual\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: <useEffect>\n\tReact.useEffect(() => {\n\t\tif (open) {\n\t\t\tconst left = value?.from ?? props.defaultMonth ?? new Date();\n\t\t\tconst right = value?.to ?? addMonths(left, 1);\n\t\t\tsetLeftMonth(left);\n\t\t\tsetRightMonth(right);\n\t\t}\n\t\t// NÃO colocamos value como dependência isolada aqui para evitar piscar enquanto já aberto\n\t\t// queremos apenas \"resetar\" quando o popover for aberto\n\t}, [open]);\n\n\t// Se a seleção mudar enquanto o popover estiver fechado, atualizar os meses iniciais\n\tReact.useEffect(() => {\n\t\tif (!open) {\n\t\t\tsetLeftMonth(value?.from ?? props.defaultMonth ?? new Date());\n\t\t\tsetRightMonth(value?.to ?? addMonths(value?.from ?? props.defaultMonth ?? new Date(), 1));\n\t\t}\n\t}, [value?.from, value?.to, open, props.defaultMonth]);\n\n\treturn (\n\t\t<Popover {...popoverProps} open={open} onOpenChange={setOpen}>\n\t\t\t<PopoverTrigger asChild>\n\t\t\t\t<Button\n\t\t\t\t\tid={id}\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"hover:foreground justify-start text-left font-normal\",\n\t\t\t\t\t\t!value && \"text-muted-foreground hover:text-muted-foreground\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t{...buttonProps}\n\t\t\t\t>\n\t\t\t\t\t<CalendarDaysIcon className=\"size-4\" />\n\t\t\t\t\t{value?.from ? (\n\t\t\t\t\t\tvalue.to ? (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t{format(value.from, \"P\", { locale: ptBR })} -{\" \"}\n\t\t\t\t\t\t\t\t{format(value.to, \"P\", { locale: ptBR })}\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\tformat(value.from, \"P\")\n\t\t\t\t\t\t)\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<span>{placeholder}</span>\n\t\t\t\t\t)}\n\t\t\t\t</Button>\n\t\t\t</PopoverTrigger>\n\n\t\t\t<PopoverContent className={cn(\"w-auto p-3\", popoverContentClassName)} align=\"start\">\n\t\t\t\t<div className=\"flex gap-4\">\n\t\t\t\t\t<Calendar\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t\tautoFocus={false}\n\t\t\t\t\t\tcaptionLayout=\"dropdown\"\n\t\t\t\t\t\tselected={value}\n\t\t\t\t\t\tonSelect={(r) => onChange(r)}\n\t\t\t\t\t\tlocale={ptBR}\n\t\t\t\t\t\tnumberOfMonths={1}\n\t\t\t\t\t\tmonth={leftMonth}\n\t\t\t\t\t\tonMonthChange={(m) => setLeftMonth(m)}\n\t\t\t\t\t\tmode=\"range\"\n\t\t\t\t\t/>\n\n\t\t\t\t\t<Calendar\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t\tautoFocus={false}\n\t\t\t\t\t\tcaptionLayout=\"dropdown\"\n\t\t\t\t\t\tselected={value}\n\t\t\t\t\t\tonSelect={(r) => onChange(r)}\n\t\t\t\t\t\tlocale={ptBR}\n\t\t\t\t\t\tnumberOfMonths={1}\n\t\t\t\t\t\tmonth={rightMonth}\n\t\t\t\t\t\tonMonthChange={(m) => setRightMonth(m)}\n\t\t\t\t\t\tmode=\"range\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</PopoverContent>\n\t\t</Popover>\n\t);\n}\n"],"names":["CalendarRange","value","onChange","placeholder","id","buttonProps","popoverProps","popoverContentClassName","className","disabled","props","open","setOpen","React","useState","leftMonth","setLeftMonth","from","defaultMonth","Date","rightMonth","setRightMonth","to","addMonths","useEffect","left","right","Popover","onOpenChange","PopoverTrigger","asChild","Button","variant","cn","CalendarDaysIcon","format","locale","ptBR","span","PopoverContent","align","div","Calendar","autoFocus","captionLayout","selected","onSelect","r","numberOfMonths","month","onMonthChange","m","mode"],"mappings":"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"}