@1771technologies/lytenyte-pro
Version:
Blazingly fast headless React data grid with 100s of features.
41 lines (40 loc) • 1.6 kB
JavaScript
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,
};
}