@1771technologies/lytenyte-pro
Version:
Blazingly fast headless React data grid with 100s of features.
40 lines (39 loc) • 1.65 kB
JavaScript
import { useCallback } from "react";
import { useControlled, useEvent } from "@1771technologies/lytenyte-core/internal";
export function useSourceState({ onRowGroupExpansionChange, rowGroupExpansions, rowGroupDefaultExpansion = false, }, controlled) {
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]);
const onPivotExpansionsChange = useEvent((delta) => {
controlled.onPivotRowGroupChange({ ...controlled.pivotRowGroupExpansions, ...delta });
});
const pivotExpandedFn = useCallback((id, depth) => {
const s = controlled.pivotRowGroupExpansions[id];
if (s != null)
return s;
if (typeof rowGroupDefaultExpansion === "boolean")
return rowGroupDefaultExpansion;
return rowGroupDefaultExpansion >= depth;
}, [controlled.pivotRowGroupExpansions, rowGroupDefaultExpansion]);
return {
expansions,
onExpansionsChange,
expandedFn,
pivotExpandedFn,
pivotRowGroupExpansions: controlled.pivotRowGroupExpansions,
onPivotExpansionsChange,
};
}