UNPKG

@1771technologies/lytenyte-pro

Version:

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

40 lines (39 loc) 1.65 kB
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, }; }