'use client' import type { ReactNode } from 'react' import { Controller, type Control } from 'react-hook-form' import ConsumerFieldShell from '@/components/consumer/input/ConsumerFieldShell' import type { ConsumerInputRadius, ConsumerInputSize, ConsumerInputTone } from '@/components/consumer/input/consumerInputTypes' import { CONSUMER_FIELD_SELECT_PLACEHOLDER_CLASS, CONSUMER_FIELD_SELECT_POPOVER_CLASS, CONSUMER_FIELD_SELECT_VALUE_CLASS, buildConsumerFieldWrapper, resolveConsumerTone, withConsumerFieldError, } from '@/components/consumer/input/consumerInputStyles' import { Select, SelectItem } from '@/components/heroui/Select' import { getOptionValue, type SelectOptionItem } from '@/components/formElements/input/inputUtils' import { useDialogPortalContainer } from '@/components/formElements/input/useDialogPortalContainer' import { coerceToString } from '@/helpers' import { cn } from '@/lib/cn' interface Props { ariaLabel?: string autoFocus?: boolean className?: string radius: ConsumerInputRadius size: ConsumerInputSize control: Control description?: ReactNode disabled?: boolean iconEnd?: ReactNode iconStart?: ReactNode inputWrapper?: string label?: string multiple?: boolean name: string options: SelectOptionItem[] placeholder?: string readonly?: boolean required?: boolean selectKey: string selectValue: string tone?: ConsumerInputTone } export default function ConsumerSelectField({ ariaLabel, autoFocus, className, radius, size, control, description, disabled, iconEnd, iconStart, label, multiple, name, options, placeholder, readonly: _readonly, required, selectKey, selectValue, tone, inputWrapper, }: Props) { const { portalContainer, setHostEl } = useDialogPortalContainer() const resolvedTone = resolveConsumerTone('select', tone) const wrapper = cn( buildConsumerFieldWrapper({ radius: radius, size: size, tone: resolvedTone, }), inputWrapper ) return ( { const invalid = !!error const triggerWrapper = invalid ? withConsumerFieldError(wrapper) : wrapper const selectedKeys = multiple ? field.value : field.value !== undefined && field.value !== null && field.value !== '' ? [String(field.value)] : [] return (
) }} /> ) }