@1771technologies/lytenyte-pro
Version:
Blazingly fast headless React data grid with 100s of features.
39 lines (38 loc) • 2.25 kB
JavaScript
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import { forwardRef, useMemo, useState } from "react";
import { useSmartSelect } from "../context.js";
import { useCombinedRefs } from "@1771technologies/lytenyte-core/internal";
import { useSlot } from "../../../hooks/use-slot/use-slot.js";
import { useComboControls } from "./use-combo-controls.js";
import { ChipContextProvider } from "../chip-context.js";
function MultiComboBase({ renderInput, children, ...props }, ref) {
const { kindAndValue, comboState, setTrigger, query, inputRef, open } = useSmartSelect();
const { __is_trigger, ...p } = props;
if ((__is_trigger && kindAndValue.kind !== "multi") ||
(!__is_trigger && kindAndValue.kind !== "multi-combo")) {
throw new Error(`Cannot use ${__is_trigger ? "MultiTrigger" : "MultiComboTrigger"} when SmartSelect kind is not "${__is_trigger ? "multi" : "multi-combo"}". Found: ${kindAndValue.kind}`);
}
const [activeChip, setActiveChip] = useState(null);
const controls = useComboControls(setActiveChip, true);
const slot = useSlot({
props: [controls],
slot: renderInput ??
(__is_trigger ? (_jsx("button", { style: {
padding: 0,
width: 0,
height: 0,
background: "transparent",
border: "0px solid transparent",
} })) : (_jsx("input", {}))),
ref: inputRef,
state: __is_trigger
? {}
: { query, onChange: controls.onChange, loading: comboState.loading, error: comboState.error },
});
const combined = useCombinedRefs(setTrigger, ref);
return (_jsx(ChipContextProvider, { value: useMemo(() => ({ activeChip, setActiveChip }), [activeChip]), children: _jsxs("div", { ...p, ref: combined, "data-ln-smart-select-trigger": true, "data-ln-open": open, "data-ln-smart-select-loading": comboState.loading, "data-ln-smart-select-error": !!comboState.error, onBlur: () => setActiveChip(null), onClick: () => {
controls.onClick();
inputRef.current?.focus();
}, children: [children, slot] }) }));
}
export const MultiComboTrigger = forwardRef(MultiComboBase);