Skip to content

Instantly share code, notes, and snippets.

@longdog
Created October 6, 2021 06:32
Show Gist options
  • Save longdog/562552b3e3993da562f20303cb50e259 to your computer and use it in GitHub Desktop.
Save longdog/562552b3e3993da562f20303cb50e259 to your computer and use it in GitHub Desktop.
import { debounce } from "patronum";
import {
Effect,
Event,
guard,
} from "effector";
/**
* отложенный запрос для поиска: ждет 1 сек после последнего события
* и если символов > 2 или 0 передает запрос
* @param searchEvent событие, которое надо дебаунсить
* @param searchUnit эфеект с запросом на сервер
*/
export const searchDebouncer = (
searchEvent: Event<string>,
searchUnit: Effect<string, any, Error> | Event<string>
) => {
// начинаем поиск только через секунду, как пользователь прекратил ввод
const searchTarget = debounce({ source: searchEvent, timeout: 1000 });
// делаем запрос, если строка поиска > 2 символов или пустой
guard({
clock: searchTarget,
filter: (search: string) => search.length > 2 || search.length === 0,
target: searchUnit,
});
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment