@1771technologies/lytenyte-pro
Version:
Blazingly fast headless React data grid with 100s of features.
37 lines (36 loc) • 1.36 kB
JavaScript
import { forwardRef } from "react";
import { useSlot } from "../../hooks/use-slot/index.js";
import { useSmartSelect } from "./context.js";
function OptionBase({ render, option, active, selected, closeOnSelect: closeOverride, ...props }, ref) {
const { onOptionSelect, setActiveId, closeOnSelect, onOpenChange, inputRef } = useSmartSelect();
const closeOnSelectFinal = closeOverride ?? closeOnSelect;
const r = useSlot({
props: [
{
"data-ln-selected": selected,
"data-ln-active": active,
"data-ln-smart-option": option.id,
"data-ln-selectable": option.selectable ?? true,
"data-ln-close-on-select": closeOnSelectFinal,
},
{
onMouseDown: () => {
onOptionSelect(option);
},
onClick: () => {
inputRef.current?.focus();
if (closeOnSelectFinal)
onOpenChange(false);
},
onMouseEnter: () => setActiveId(option.id),
onMouseLeave: () => setActiveId(null),
},
props,
],
ref,
slot: render,
state: { option, selected, active },
});
return r;
}
export const Option = forwardRef(OptionBase);