import { IEquatableError, PromiseResult } from '@lens-protocol/shared-kernel'; /** * An deferrable task is a function that can be executed multiple times and that can be in a pending state. * * @internal */ export type DeferrableTask = (input: TInput) => PromiseResult; /** * The initial state of a deferred task. */ export type DeferredTaskIdle = { called: boolean; loading: false; data: undefined; error: undefined; }; /** * The state of a deferred task during the loading. */ export type DeferredTaskLoading = { called: true; loading: true; data: TData | undefined; error: undefined; }; /** * The state of a deferred task after a successful call. */ export type DeferredTaskSuccess = { called: true; loading: false; data: TData; error: undefined; }; /** * The state of a deferred task after a failed call. */ export type DeferredTaskFailed = { called: true; loading: false; data: undefined; error: TError; }; /** * @deprecated Use DeferredTaskLoading instead. Removal slated for v2.0.0. */ export type DeferredTaskFirstCall = DeferredTaskLoading; /** * @deprecated Use DeferredTaskLoading instead. Removal slated for v2.0.0. */ export type DeferredTaskNthCall = DeferredTaskLoading; /** * The possible statuses of a deferred task. */ export type DeferredTaskState = DeferredTaskIdle | DeferredTaskLoading | DeferredTaskSuccess | DeferredTaskFailed; /** * A deferred task React Hook is a lightweight wrapper for an asynchronous function. * It allows tracking of the task's execution status and provides access to the * last error that occurred during the task's execution, if any. * * ```ts * const { called, loading, data, error, execute }: UseDeferredTask = useAnyDeferredTask(); * * if (!called) { * // data === undefined * // error === undefined * return

Click the button to execute the task

; * } * * if (loading) { * // data === undefined on first call * // data === TData from previous successful call * // error === undefined * return ; * } * * if (error) { * // data === undefined * // error === TError * return

Something went wrong: {error.message}

; * } * * // called === true * // data === TData * // error === undefined * return

Task completed: {data}

; * ``` */ export type UseDeferredTask = DeferredTaskState & { execute: DeferrableTask; }; /** * @internal */ export declare function useDeferredTask(handler: DeferrableTask): UseDeferredTask;