@1771technologies/lytenyte-pro
Version:
Blazingly fast headless React data grid with 100s of features.
29 lines (28 loc) • 1.07 kB
JavaScript
import { jsx as _jsx } from "react/jsx-runtime";
import { cloneElement } from "react";
import { mergeProps } from "./merge-props.js";
import { getElementRef } from "./get-element-ref.js";
import { useCombinedRefs } from "@1771technologies/lytenyte-core/internal";
/**
* A React hook to support slots in components.
*/
export function useSlot({ props = {}, slot = _jsx("div", {}), state, ref: forwardedRef }) {
const el = typeof slot === "function" ? slot(state) : slot;
let merged = {};
if (Array.isArray(props)) {
for (let i = 0; i < props.length; i++)
merged = mergeProps(merged, props[i]);
}
else {
merged = props;
}
const mergedProps = mergeProps(merged, el.props);
const ref = getElementRef(el);
const mergedRefs = useCombinedRefs(forwardedRef, ref);
// One of the refs should be fined. We have to check for this since
// not all elements accept a ref (e.g. Fragments)
if (ref || forwardedRef) {
mergedProps.ref = mergedRefs;
}
return cloneElement(el, mergedProps);
}