UNPKG

@1771technologies/lytenyte-pro

Version:

Blazingly fast headless React data grid with 100s of features.

39 lines (38 loc) 2.25 kB
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);