import React, { RefObject, useEffect, useState } from 'react' import cc from 'classcat' import { color } from '../_utils/branding' import { A11yProps, CommonFieldsProps, pickA11yProps } from '../_utils/interfaces' import { OnChangeParameters } from '../_utils/onChange' import { ChevronIcon, ChevronIconDirections } from '../icon/chevronIcon' import { StyledSelectField } from './SelectField.style' export type SelectFieldItem = A11yProps & Readonly<{ value: string | number label: string }> export type SelectFieldProps = Partial & A11yProps & Readonly<{ options: Array defaultValue?: string onChange?: (obj: OnChangeParameters) => void onFocus?: (event: React.FocusEvent) => void onBlur?: (event: React.FocusEvent) => void focus?: boolean focusBorder?: boolean autoFocus?: boolean autoComplete?: string }> export const SelectField = React.forwardRef( (props: SelectFieldProps, ref: RefObject) => { const { name, className, defaultValue, options, onChange, onFocus = () => {}, onBlur = () => {}, disabled, required, focus, autoFocus, autoComplete, focusBorder = true, } = props const a11yAttrs = pickA11yProps(props) const baseClassName = 'kirk-selectField' const [hasFocus, setFocus] = useState(false) const [previousDefaultValue, setPreviousDefaultValue] = useState(defaultValue) const [currentValue, setCurrentValue] = useState(defaultValue) useEffect(() => { if (ref && !disabled && focus) { ref.current.focus() } // eslint-disable-next-line react-hooks/exhaustive-deps }, [disabled, focus]) useEffect(() => { if (defaultValue !== previousDefaultValue) { setPreviousDefaultValue(defaultValue) setCurrentValue(defaultValue) } // eslint-disable-next-line react-hooks/exhaustive-deps }, [defaultValue]) return (
) }, )