UNPKG

@1771technologies/lytenyte-pro

Version:

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

41 lines (40 loc) 1.6 kB
import { useControlled, useEvent } from "@1771technologies/lytenyte-core/internal"; import { useMemo } from "react"; export function usePivotState(state, onPivotStateChange) { const [pivotState, setPivotState] = useControlled({ controlled: state, default: { columnState: { ordering: [], pinning: {}, resizing: {} }, columnGroupState: {}, rowGroupExpansions: {}, }, }); const pivotColumnState = useMemo(() => pivotState.columnState, [pivotState.columnState]); const onPivotColumnStateChange = useEvent((change) => { const next = { ...pivotState, columnState: change }; setPivotState(next); onPivotStateChange?.(next); }); const pivotGroupState = useMemo(() => pivotState.columnGroupState, [pivotState.columnGroupState]); const onPivotGroupStateChange = useEvent((change) => { const next = { ...pivotState, pivotGroupState: change }; setPivotState(next); onPivotStateChange?.(next); }); const pivotRowGroupExpansions = useMemo(() => pivotState.rowGroupExpansions, [pivotState.rowGroupExpansions]); const onPivotRowGroupChange = useEvent((change) => { const next = { ...pivotState, rowGroupExpansions: change }; setPivotState(next); onPivotStateChange?.(next); }); return { state: pivotState, setState: setPivotState, pivotColumnState, onPivotColumnStateChange, pivotGroupState, onPivotGroupStateChange, pivotRowGroupExpansions, onPivotRowGroupChange, }; }