UNPKG

@ariakit/react-core

Version:

Ariakit React core

109 lines (107 loc) 3.07 kB
"use client"; import { useSelectContext } from "../__chunks/DG5U6ZEL.js"; import { useCompositeRenderer } from "../__chunks/FD7WTSJR.js"; import { getCollectionRendererItem, getCollectionRendererItemId } from "../__chunks/AELVTXWA.js"; import "../__chunks/MTZPJQMC.js"; import "../__chunks/RS7LB2H4.js"; import "../__chunks/S6EF7IVO.js"; import "../__chunks/P7GR5CS5.js"; import { useStoreState } from "../__chunks/YV4JVR4I.js"; import "../__chunks/VDHZ5F7K.js"; import { createElement, forwardRef } from "../__chunks/LMDWO4NN.js"; import "../__chunks/ABQUS43J.js"; import "../__chunks/SK3NAZA3.js"; import { __objRest, __spreadValues } from "../__chunks/3YLGPPWQ.js"; // src/select/select-renderer.tsx import { toArray } from "@ariakit/core/utils/array"; import { useMemo } from "react"; var TagName = "div"; function getItemObject(item) { if (!item || typeof item !== "object") { return { value: `${item}` }; } return item; } function findIndicesByValue(items, value) { var _a; const values = toArray(value); const indices = []; for (const [index, item] of items.entries()) { if (indices.length === values.length) break; const object = getItemObject(item); if (object.value != null && values.includes(object.value)) { indices.push(index); } else if ((_a = object.items) == null ? void 0 : _a.length) { const childIndices = findIndicesByValue(object.items, value); if (childIndices.length) { indices.push(index); } } } return indices; } function useSelectRenderer(_a) { var _b = _a, { store, orientation: orientationProp, persistentIndices: persistentIndicesProp, items: itemsProp, value: valueProp } = _b, props = __objRest(_b, [ "store", "orientation", "persistentIndices", "items", "value" ]); const context = useSelectContext(); store = store || context; const items = useStoreState(store, (state) => { if (!state) return itemsProp; if (!state.mounted) return 0; return itemsProp != null ? itemsProp : state.items; }); const value = useStoreState(store, (state) => valueProp != null ? valueProp : state == null ? void 0 : state.value); const valueIndices = useMemo(() => { if (!items) return []; if (value == null) return []; if (typeof items === "number") return []; if (!items.length) return []; return findIndicesByValue(items, value); }, [items, value]); const persistentIndices = useMemo(() => { if (persistentIndicesProp) { return [...persistentIndicesProp, ...valueIndices]; } return valueIndices; }, [valueIndices, persistentIndicesProp]); return useCompositeRenderer(__spreadValues({ store, items, persistentIndices }, props)); } var SelectRenderer = forwardRef(function SelectRenderer2(props) { const htmlProps = useSelectRenderer(props); return createElement(TagName, htmlProps); }); export { SelectRenderer, getCollectionRendererItem as getSelectRendererItem, getCollectionRendererItemId as getSelectRendererItemId };