All files / src/hooks/useHistoryState useHistoryState.ts

0% Statements 0/9
0% Branches 0/2
0% Functions 0/3
0% Lines 0/9

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25                                                 
import { useState } from "react";
import { useHistory } from "react-router-dom";
 
export const useHistoryState = <T>(
  key: string,
  initialValue: T
): [T, (t: T) => void] => {
  const history = useHistory();
  const [rawState, rawSetState] = useState<T>(() => {
    const value = (history.location.state as any)?.[key];
    return value ?? initialValue;
  });
  const setState = (value: T) => {
    history.replace({
      ...history.location,
      state: {
        ...(history.location.state as any),
        [key]: value,
      },
    });
    rawSetState(value);
  };
  return [rawState, setState];
};