/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
 * You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";

const { actions } = require("resource://devtools/client/memory/constants.js");
const {
  refresh,
} = require("resource://devtools/client/memory/actions/refresh.js");
const { debounce } = require("resource://devtools/shared/debounce.js");

const setFilterString = (exports.setFilterString = function (filterString) {
  return {
    type: actions.SET_FILTER_STRING,
    filter: filterString,
  };
});

// The number of milliseconds we should wait before kicking off a new census
// when the filter string is updated. This helps us avoid doing any work while
// the user is still typing.
const FILTER_INPUT_DEBOUNCE_MS = 250;
const debouncedRefreshDispatcher = debounce(
  (dispatch, heapWorker) => dispatch(refresh(heapWorker)),
  FILTER_INPUT_DEBOUNCE_MS
);

exports.setFilterStringAndRefresh = function (filterString, heapWorker) {
  return ({ dispatch, getState }) => {
    dispatch(setFilterString(filterString));
    debouncedRefreshDispatcher(dispatch, heapWorker);
  };
};
