All files / Rindu/hooks useToggle.ts

54.54% Statements 6/11
100% Branches 1/1
28.57% Functions 2/7
60% Lines 6/10

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 2519x                 125x 125x   125x 124x                 125x    
import { useMemo, useState } from "react";
 
export interface IUseToggleHandlers {
  on: () => void;
  off: () => void;
  toggle: () => void;
  reset: () => void;
}
 
export function useToggle(initialValue = false): [boolean, IUseToggleHandlers] {
  const [value, setValue] = useState(initialValue);
 
  const handlers: IUseToggleHandlers = useMemo(
    () => ({
      on: () => setValue(true),
      off: () => setValue(false),
      toggle: () => setValue((value) => !value),
      reset: () => setValue(initialValue),
    }),
    [initialValue]
  );
 
  return [value, handlers];
}