import * as React from 'react';
import { CheckIcon, CloseButton, Combobox, Group, Input, InputBase, ScrollArea, Stack, Text, Tooltip, useCombobox } from '@mantine/core';
import { ColumnInfo, EColumnTypes, VisColumn } from '../interfaces';
export function SingleSelect({
callback,
columns,
currentSelected,
columnType,
label,
disabledTooltip,
isClearable = true,
disabled = false,
}: {
callback: (value: ColumnInfo) => void;
columns: VisColumn[];
currentSelected: ColumnInfo;
/** If null, all columns are selectable */
columnType: EColumnTypes[] | null;
label: string;
isClearable?: boolean;
disabled?: boolean;
disabledTooltip?: string;
}) {
const filteredColumns = React.useMemo(() => {
return columnType ? columns.filter((c) => columnType.includes(c.type)) : columns;
}, [columnType, columns]);
const combobox = useCombobox({
onDropdownClose: () => combobox.resetSelectedOption(),
onDropdownOpen: () => combobox.updateSelectedOptionIndex('active'),
});
const options = filteredColumns.map((item) => (
{item.info?.name}
{item.info?.description}
}
position="left"
withArrow
>
{item.info.id === currentSelected?.id && (
)}
{item.info?.name}
{item.info?.description}
));
return (
{
callback(filteredColumns.find((c) => c.info.id === id)?.info);
combobox.closeDropdown();
}}
>
{label}
}
disabled={disabled}
pointer
onClick={() => combobox.toggleDropdown()}
rightSectionPointerEvents={currentSelected === null ? 'none' : 'all'}
rightSection={
disabled ? null : currentSelected !== null && isClearable ? (
event.preventDefault()}
onClick={() => callback(null)}
aria-label="Clear value"
/>
) : (
)
}
>
{currentSelected?.name ? (
{currentSelected?.name}
{currentSelected.description ? (
{currentSelected.description}
) : null}
) : (
Select a column
)}
{options}
);
}