"use strict";

var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = void 0;

var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));

var _react = require("react");

/*
 * @Author: Jiangang LU
 * @Date: 2021-01-15 15:50:37
 * @LastEditors: Jiangang Lu
 * @LastEditTime: 2021-01-15 17:25:49
 * @Description: localStorage hooks
 * 例子：
 * const [state, updateState] = useLocalStorageState(key, defaultValue);
 */
var isString = function isString(str) {
  return typeof str === 'string';
};

var isFunction = function isFunction(obj) {
  return typeof obj === 'function';
};

var useLocalStorageState = function useLocalStorageState(key, defaultValue) {
  var getStoredValue = function getStoredValue() {
    var raw = window.localStorage.getItem(key); // 使用此hooks可以去掉

    if (isString(raw)) {
      return raw;
    }

    if (raw) {
      try {
        return JSON.parse(raw);
      } catch (error) {
        throw new Error(error);
      }
    }

    if (isFunction(defaultValue)) {
      return defaultValue();
    }

    return defaultValue;
  };

  var _useState = (0, _react.useState)(function () {
    return getStoredValue();
  }),
      _useState2 = (0, _slicedToArray2.default)(_useState, 2),
      state = _useState2[0],
      setState = _useState2[1];

  var updateState = (0, _react.useCallback)(function (value) {
    if (typeof value === 'undefined') {
      window.localStorage.removeItem(key);
      setState(undefined);
    } else if (isFunction(value)) {
      var previousState = getStoredValue();
      var currentState = value(previousState);
      window.localStorage.setItem(key, JSON.stringify(currentState));
      setState(currentState);
    } else {
      window.localStorage.setItem(key, JSON.stringify(value));
      setState(value);
    } // eslint-disable-next-line react-hooks/exhaustive-deps

  }, [key]);
  return [state, updateState];
};

var _default = useLocalStorageState;
exports.default = _default;