UNPKG

@solid-primitives/scheduled

Version:

Primitives for creating scheduled — throttled or debounced — callbacks.

129 lines (128 loc) 4.92 kB
import { type Accessor } from "solid-js"; export type ScheduleCallback = <Args extends unknown[]>(callback: (...args: Args) => void, wait?: number) => Scheduled<Args>; export interface Scheduled<Args extends unknown[]> { (...args: Args): void; clear: VoidFunction; } /** * Creates a callback that is debounced and cancellable. The debounced callback is called on **trailing** edge. * * The timeout will be automatically cleared on root dispose. * * @param callback The callback to debounce * @param wait The duration to debounce in milliseconds * @returns The debounced function * * @see https://github.com/solidjs-community/solid-primitives/tree/main/packages/scheduled#debounce * * @example * ```ts * const fn = debounce((message: string) => console.log(message), 250); * fn('Hello!'); * fn.clear() // clears a timeout in progress * ``` */ export declare const debounce: ScheduleCallback; /** * Creates a callback that is throttled and cancellable. The throttled callback is called on **trailing** edge. * * The timeout will be automatically cleared on root dispose. * * @param callback The callback to throttle * @param wait The duration to throttle * @returns The throttled callback trigger * * @see https://github.com/solidjs-community/solid-primitives/tree/main/packages/scheduled#throttle * * @example * ```ts * const trigger = throttle((val: string) => console.log(val), 250); * trigger('my-new-value'); * trigger.clear() // clears a timeout in progress * ``` */ export declare const throttle: ScheduleCallback; /** * Creates a callback throttled using `window.requestIdleCallback()`. ([MDN reference](https://developer.mozilla.org/en-US/docs/Web/API/Window/requestIdleCallback)) * * The throttled callback is called on **trailing** edge. * * The timeout will be automatically cleared on root dispose. * * @param callback The callback to throttle * @param maxWait maximum wait time in milliseconds until the callback is called * @returns The throttled callback trigger * * @see https://github.com/solidjs-community/solid-primitives/tree/main/packages/scheduled#scheduleidle * * @example * ```ts * const trigger = scheduleIdle((val: string) => console.log(val), 250); * trigger('my-new-value'); * trigger.clear() // clears a timeout in progress * ``` */ export declare const scheduleIdle: ScheduleCallback; /** * Creates a scheduled and cancellable callback that will be called on **leading** edge. * * The timeout will be automatically cleared on root dispose. * * @param schedule {@link debounce} or {@link throttle} * @param callback The callback to debounce/throttle * @param wait timeout duration * @returns The scheduled callback trigger * * @see https://github.com/solidjs-community/solid-primitives/tree/main/packages/scheduled#leading * * @example * ```ts * const trigger = leading(throttle, (val: string) => console.log(val), 250); * trigger('my-new-value'); * trigger.clear() // clears a timeout in progress * ``` */ export declare function leading<Args extends unknown[]>(schedule: ScheduleCallback, callback: (...args: Args) => void, wait?: number): Scheduled<Args>; /** * Creates a scheduled and cancellable callback that will be called on the **leading** edge for the first call, and **trailing** edge for other calls. * * The timeout will be automatically cleared on root dispose. * * @param schedule {@link debounce} or {@link throttle} * @param callback The callback to debounce/throttle * @param wait timeout duration * @returns The scheduled callback trigger * * @see https://github.com/solidjs-community/solid-primitives/tree/main/packages/scheduled#leadingAndTrailing * * @example * ```ts * const trigger = leadingAndTrailing(throttle, (val: string) => console.log(val), 250); * trigger('my-new-value'); * trigger.clear() // clears a timeout in progress * ``` */ export declare function leadingAndTrailing<Args extends unknown[]>(schedule: ScheduleCallback, callback: (...args: Args) => void, wait?: number): Scheduled<Args>; /** * Creates a signal used for scheduling execution of solid computations by tracking. * * @param schedule Schedule the invalidate function (can be {@link debounce} or {@link throttle}) * @returns A function used to track the signal. It returns `true` if the signal is dirty *(callback should be called)* and `false` otherwise. * * @see https://github.com/solidjs-community/solid-primitives/tree/main/packages/scheduled#createScheduled * * @example * ```ts * const debounced = createScheduled(fn => debounce(fn, 250)); * * createEffect(() => { * // track source signal * const value = count(); * // track the debounced signal and check if it's dirty * if (debounced()) { * console.log('count', value); * } * }); * ``` */ export declare function createScheduled(schedule: (callback: VoidFunction) => VoidFunction): Accessor<boolean>;