'use client'; import { Button } from '@workspace/ui/components/button'; import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, } from '@workspace/ui/components/command'; import { Popover, PopoverContent, PopoverTrigger } from '@workspace/ui/components/popover'; import { Icon } from '@workspace/ui/custom-components/icon'; import { cn } from '@workspace/ui/lib/utils'; import { countries, type ICountry } from '@workspace/ui/utils/countries'; import { BoxIcon, Check, ChevronsUpDown } from 'lucide-react'; import { useEffect, useState } from 'react'; interface AreaCodeSelectProps { value?: string; onChange?: (value: ICountry) => void; className?: string; placeholder?: string; simple?: boolean; whitelist?: string[]; } const filterItems = (whitelist?: string[]) => { const baseItems = countries .filter((item) => !!item.phone) .map((item) => { const phones = item.phone!.split(','); if (phones.length > 1) { return [...phones].map((phone) => ({ ...item, phone, })); } return item; }) .flat(); if (!whitelist?.length) return baseItems; return baseItems.filter((item) => whitelist.includes(item.phone!)); }; export const AreaCodeSelect = ({ value, onChange, className, placeholder = 'Select Area Code', simple = false, whitelist, }: AreaCodeSelectProps) => { const [open, setOpen] = useState(false); const [selectedItem, setSelectedItem] = useState(); const items = filterItems(whitelist); useEffect(() => { if (value !== selectedItem?.phone) { const found = items.find((item) => item.phone === value); setSelectedItem(found); } }, [selectedItem?.phone, value, items]); return ( {items.map((item) => ( { setSelectedItem(item); onChange?.(item); setOpen(false); }} >
+ {item.phone} ({item.name})
))}
); };