discourse/app/assets/javascripts/discourse-common/addon/lib/debounce.js
Joffrey JAFFEUX c8beefc1ee
FIX: reimplements chat audio into a service (#18983)
This implementation attempts to be more resilient to background tab.

Notes:
- adds support for immediate arg in @debounce decorators
- fixes a bug in discourseDebounce which was not supporting immediate arg in tests
- chat-audio-manager has no tests as audio requires real user interaction and is hard to test reliably
2022-11-11 13:11:41 +01:00

29 lines
872 B
JavaScript

import { debounce } from "@ember/runloop";
import { isTesting } from "discourse-common/config/environment";
/**
Debounce a Javascript function. This means if it's called many times in a time limit it
should only be executed once (at the end of the limit counted from the last call made).
Original function will be called with the context and arguments from the last call made.
**/
export default function () {
if (isTesting()) {
const lastArgument = arguments[arguments.length - 1];
const hasImmediateArgument = typeof lastArgument === "boolean";
let args = [].slice.call(arguments, 0, hasImmediateArgument ? -2 : -1);
// Replace the time argument with 10ms
args.push(10);
if (hasImmediateArgument) {
args.push(lastArgument);
}
return debounce.apply(undefined, args);
} else {
return debounce(...arguments);
}
}