'use client';
import * as React from 'react';
import { useStableCallback } from '../../../hooks/useStableCallback';
import { DropdownIcon } from '../../DropdownIcon/DropdownIcon';
import { type NativeSelectValue, NOT_SELECTED } from '../../NativeSelect/NativeSelect';
import { type SelectProps } from '../CustomSelect';
import { CustomSelectClearButton } from '../CustomSelectClearButton';
import styles from '../CustomSelect.module.css';
/* eslint-disable jsdoc/require-jsdoc */
interface UseAfterItemsProps
extends Pick<
SelectProps,
| 'value'
| 'allowClearButton'
| 'icon'
| 'readOnly'
| 'disabled'
| 'ClearButton'
| 'clearButtonTestId'
> {
isControlledOutside: boolean;
nativeSelectValue: NativeSelectValue;
opened: boolean;
onClearButtonClick: () => void;
}
/* eslint-enable jsdoc/require-jsdoc */
export function useAfterItems({
value,
nativeSelectValue,
isControlledOutside,
opened,
allowClearButton,
ClearButton = CustomSelectClearButton,
onClearButtonClick,
clearButtonTestId,
disabled,
readOnly,
icon: iconProp,
}: UseAfterItemsProps) {
const onClearButtonClickCb = useStableCallback(onClearButtonClick);
const controlledValueSet = isControlledOutside && value !== NOT_SELECTED.CUSTOM;
const uncontrolledValueSet = !isControlledOutside && nativeSelectValue !== NOT_SELECTED.NATIVE;
const clearButtonShown =
allowClearButton && !opened && (controlledValueSet || uncontrolledValueSet);
const clearButton = React.useMemo(() => {
if (!clearButtonShown) {
return null;
}
return (
);
}, [clearButtonShown, ClearButton, iconProp, onClearButtonClickCb, disabled, clearButtonTestId]);
const icon = React.useMemo(() => {
if (iconProp !== undefined) {
return iconProp;
}
return (
);
}, [clearButtonShown, iconProp, opened]);
return React.useMemo(
() =>
!readOnly &&
(icon || clearButtonShown) && (
{clearButton}
{icon}
),
[clearButton, clearButtonShown, icon, readOnly],
);
}