'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
var react = require('react');

function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }

var _slicedToArray__default = /*#__PURE__*/_interopDefaultCompat(_slicedToArray);

/**
 * Reack hook
 */
var useDebounce = function useDebounce(value, delay) {
  // State and setters for debounced value
  var _useState = react.useState(value),
    _useState2 = _slicedToArray__default.default(_useState, 2),
    debouncedValue = _useState2[0],
    setDebouncedValue = _useState2[1];
  react.useEffect(function () {
    // Update debounced value after delay
    var handler = setTimeout(function () {
      setDebouncedValue(value);
    }, delay);

    // Cancel the timeout if value changes (also on delay change or unmount)
    // This is how we prevent debounced value from updating if value is changed ...
    // .. within the delay period. Timeout gets cleared and restarted.
    return function () {
      clearTimeout(handler);
    };
  }, [value, delay] // Only re-call effect if value or delay changes
  );
  return debouncedValue;
};

exports.useDebounce = useDebounce;
