@1771technologies/lytenyte-pro
Version:
Blazingly fast headless React data grid with 100s of features.
22 lines (21 loc) • 942 B
JavaScript
import { useControlled, useEvent } from "@1771technologies/lytenyte-core/internal";
import { useCallback } from "react";
export function useControlledState({ onRowGroupExpansionChange, rowGroupDefaultExpansion = false, rowGroupExpansions, }) {
const [expansions, setExpansions] = useControlled({
controlled: rowGroupExpansions,
default: {},
});
const onExpansionsChange = useEvent((delta) => {
setExpansions({ ...expansions, ...delta });
onRowGroupExpansionChange?.({ ...expansions, ...delta });
});
const expandedFn = useCallback((id, depth) => {
const s = expansions[id];
if (s != null)
return s;
if (typeof rowGroupDefaultExpansion === "boolean")
return rowGroupDefaultExpansion;
return depth <= rowGroupDefaultExpansion;
}, [expansions, rowGroupDefaultExpansion]);
return { expansions, onExpansionsChange, expandedFn };
}