UNPKG

ivt

Version:

Ivt Components Library

1 lines 6.4 kB
{"version":3,"file":"ComboboxField-C5LrSTQf.mjs","sources":["../../src/components/default/form-fields/ComboboxField.tsx"],"sourcesContent":["\"use client\";\n\nimport { Check, ChevronsUpDown, X } from \"lucide-react\";\nimport React from \"react\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n\tCommand,\n\tCommandEmpty,\n\tCommandGroup,\n\tCommandInput,\n\tCommandItem,\n\tCommandList,\n} from \"@/components/ui/command\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"@/components/ui/popover\";\nimport { cn } from \"@/lib/utils\";\n\ninterface ComboboxFieldProps {\n\titems: string[];\n\tvalue: string[];\n\tonChange: (value: string[]) => void;\n\tplaceholder?: string;\n\tclassName?: string;\n\tclassNamePopover?: string;\n}\n\nexport const ComboboxField: React.FC<ComboboxFieldProps> = ({\n\titems,\n\tvalue,\n\tonChange,\n\tplaceholder,\n\tclassName,\n\tclassNamePopover,\n}) => {\n\tconst [open, setOpen] = React.useState(false);\n\n\tconst toggleValue = (item: string) => {\n\t\tif (value.includes(item)) {\n\t\t\tonChange(value.filter((v) => v !== item));\n\t\t} else {\n\t\t\tonChange([...value, item]);\n\t\t}\n\t};\n\n\tconst uniqueItems = Array.from(new Set(items));\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-2\">\n\t\t\t<Popover open={open} onOpenChange={setOpen}>\n\t\t\t\t<PopoverTrigger asChild>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\taria-expanded={open}\n\t\t\t\t\t\tclassName={cn(\"justify-between font-normal\", className)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{value.length > 0 ? `${value.length} selecionado(s)` : (placeholder ?? \"Selecione\")}\n\t\t\t\t\t\t<ChevronsUpDown className=\"ml-2 h-4 w-4 shrink-0 opacity-50\" />\n\t\t\t\t\t</Button>\n\t\t\t\t</PopoverTrigger>\n\t\t\t\t<PopoverContent className={cn(\"p-0\", classNamePopover)}>\n\t\t\t\t\t<Command>\n\t\t\t\t\t\t<CommandInput placeholder=\"Filtrar...\" />\n\t\t\t\t\t\t<CommandEmpty>Nenhuma opção encontrada.</CommandEmpty>\n\t\t\t\t\t\t<CommandList className=\"max-h-60 overflow-y-auto\">\n\t\t\t\t\t\t\t<CommandGroup>\n\t\t\t\t\t\t\t\t{uniqueItems.map((item) => (\n\t\t\t\t\t\t\t\t\t<CommandItem\n\t\t\t\t\t\t\t\t\t\tkey={item}\n\t\t\t\t\t\t\t\t\t\tvalue={item}\n\t\t\t\t\t\t\t\t\t\tonSelect={() => toggleValue(item)}\n\t\t\t\t\t\t\t\t\t\tclassName=\"cursor-pointer\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Check\n\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\"mr-2 h-4 w-4\",\n\t\t\t\t\t\t\t\t\t\t\t\tvalue.includes(item) ? \"opacity-100\" : \"opacity-0\",\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t{item}\n\t\t\t\t\t\t\t\t\t</CommandItem>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</CommandGroup>\n\t\t\t\t\t\t</CommandList>\n\t\t\t\t\t</Command>\n\t\t\t\t</PopoverContent>\n\t\t\t</Popover>\n\n\t\t\t{value.length > 0 && (\n\t\t\t\t<div className=\"flex max-h-32 flex-wrap gap-2 overflow-auto\">\n\t\t\t\t\t{value.map((val) => (\n\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\tkey={val}\n\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\tclassName=\"flex h-6 w-fit items-center gap-1 px-2 py-1\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{val}\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\tonClick={() => toggleValue(val)}\n\t\t\t\t\t\t\t\tclassName=\"h-5 w-5 p-0\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<X className=\"size-3\" />\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</Badge>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n"],"names":["ComboboxField","items","value","onChange","placeholder","className","classNamePopover","open","setOpen","React","useState","toggleValue","item","includes","filter","v","uniqueItems","Array","from","Set","div","Popover","onOpenChange","PopoverTrigger","asChild","Button","variant","aria-expanded","cn","length","ChevronsUpDown","PopoverContent","Command","CommandInput","CommandEmpty","CommandList","CommandGroup","map","CommandItem","key","onSelect","Check","val","Badge","size","onClick","X"],"mappings":"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"}