timhaley94/holdem

View on GitHub
client/src/hooks/useStoredState.js

Summary

Maintainability
A
0 mins
Test Coverage
F
0%
import {
  useCallback,
  useState,
} from 'react';

function getItem(key) {
  return JSON.parse(
    localStorage.getItem(key),
  );
}

function setItem(key, value) {
  localStorage.setItem(
    key,
    JSON.stringify(value),
  );
}

export default function useStoredState(key, defaultValue) {
  const [value, _setValue] = useState(() => {
    const storedData = getItem(key);
    return storedData || defaultValue;
  });

  const setValue = useCallback((data) => {
    const next = {
      ...value,
      ...data,
    };

    _setValue(next);
    setItem(key, next);
  }, [key, value]);

  return [
    value || defaultValue,
    setValue,
  ];
}