diff --git a/src/index.tsx b/src/index.tsx index d584f8f..51bb893 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -84,6 +84,121 @@ export const useWorker = ( return { callback, error, isLoading, setError, setIsLoading }; }; +/** + * Executes a effect and sends to its callback the previous state. + * + * @param effect The effect to be executed. Receives the dependencies' previous state as arguments. + * @param dependencies The effect's dependencies. + */ +export function useEffectUpdate( + effect: (oldState: [T1]) => void | (() => void), + dependencies: [T1], +): void; + +/** + * Executes a effect and sends to its callback the previous state. + * + * @param effect The effect to be executed. Receives the dependencies' previous state as arguments. + * @param dependencies The effect's dependencies. + */ +export function useEffectUpdate( + effect: (oldState: [T1, T2]) => void | (() => void), + dependencies: [T1, T2], +): void; + +/** + * Executes a effect and sends to its callback the previous state. + * + * @param effect The effect to be executed. Receives the dependencies' previous state as arguments. + * @param dependencies The effect's dependencies. + */ +export function useEffectUpdate( + effect: (oldState: [T1, T2, T3]) => void | (() => void), + dependencies: [T1, T2, T3], +): void; + +/** + * Executes a effect and sends to its callback the previous state. + * + * @param effect The effect to be executed. Receives the dependencies' previous state as arguments. + * @param dependencies The effect's dependencies. + * @category Effects + */ +export function useEffectUpdate( + effect: (oldState: [T1, T2, T3, T4]) => void | (() => void), + dependencies: [T1, T2, T3, T4], +): void; + +/** + * Executes a effect and sends to its callback the previous state. + * + * @param effect The effect to be executed. Receives the dependencies' previous state as arguments. + * @param dependencies The effect's dependencies. + */ +export function useEffectUpdate( + effect: (oldState: [T1, T2, T3, T4, T5]) => void | (() => void), + dependencies: [T1, T2, T3, T4, T5], +): void; + +/** + * Executes a effect and sends to its callback the previous state. + * + * @param effect The effect to be executed. Receives the dependencies' previous state as arguments. + * @param dependencies The effect's dependencies. + */ +export function useEffectUpdate( + effect: (oldState: [T1, T2, T3, T4, T5, T6]) => void | (() => void), + dependencies: [T1, T2, T3, T4, T5, T6], +): void; + +/** + * Executes a effect and sends to its callback the previous state. + * + * @param effect The effect to be executed. Receives the dependencies' previous state as arguments. + * @param dependencies The effect's dependencies. + */ +export function useEffectUpdate( + effect: (oldState: [T1, T2, T3, T4, T5, T6, T7]) => void | (() => void), + dependencies: [T1, T2, T3, T4, T5, T6, T7], +): void; + +/** + * Executes a effect and sends to its callback the previous state. + * + * @param effect The effect to be executed. Receives the dependencies' previous state as arguments. + * @param dependencies The effect's dependencies. + */ +export function useEffectUpdate( + effect: (oldState: [T1, T2, T3, T4, T5, T6, T7, T8]) => void | (() => void), + dependencies: [T1, T2, T3, T4, T5, T6, T7, T8], +): void; + +/** + * Executes a effect and sends to its callback the previous state. + * + * @param effect The effect to be executed. Receives the dependencies' previous state as arguments. + * @param dependencies The effect's dependencies. + */ +export function useEffectUpdate( + effect: ( + oldState: [T1, T2, T3, T4, T5, T6, T7, T8, T9], + ) => void | (() => void), + dependencies: [T1, T2, T3, T4, T5, T6, T7, T8, T9], +): void; + +/** + * Executes a effect and sends to its callback the previous state. + * + * @param effect The effect to be executed. Receives the dependencies' previous state as arguments. + * @param dependencies The effect's dependencies. + */ +export function useEffectUpdate( + effect: ( + oldState: [T1, T2, T3, T4, T5, T6, T7, T8, T9, T10], + ) => void | (() => void), + dependencies: [T1, T2, T3, T4, T5, T6, T7, T8, T9, T10], +): void; + /** * Executes a effect and sends to its callback the previous state. * @@ -93,10 +208,15 @@ export const useWorker = ( * the effect is executed. * @category Effects */ -export const useEffectUpdate = ( +export function useEffectUpdate( effect: (oldState: Dependencies) => void | (() => void), dependencies: Dependencies, -) => { +): void; + +export function useEffectUpdate( + effect: (oldState: Dependencies) => void | (() => void), + dependencies: Dependencies, +): void { const oldState = useRef([] as any); useEffect(() => { try { @@ -105,7 +225,149 @@ export const useEffectUpdate = ( oldState.current = dependencies; } }, dependencies); -}; +} + +/** + * Conditionally executes an effect. + * + * @param evalCondition A function that receives the dependencies' previous state as argument and + * returns a boolean defining if the effect should be executed. + * @param effect The effect callback to be executed. + * @param dependencies The effect's dependencies. + */ +export function useConditionalEffect( + evalCondition: (oldState: [T1]) => boolean, + effect: () => (() => void) | void, + dependencies: [T1], +): void; + +/** + * Conditionally executes an effect. + * + * @param evalCondition A function that receives the dependencies' previous state as argument and + * returns a boolean defining if the effect should be executed. + * @param effect The effect callback to be executed. + * @param dependencies The effect's dependencies. + */ +export function useConditionalEffect( + evalCondition: (oldState: [T1, T2]) => boolean, + effect: () => (() => void) | void, + dependencies: [T1, T2], +): void; + +/** + * Conditionally executes an effect. + * + * @param evalCondition A function that receives the dependencies' previous state as argument and + * returns a boolean defining if the effect should be executed. + * @param effect The effect callback to be executed. + * @param dependencies The effect's dependencies. + */ +export function useConditionalEffect( + evalCondition: (oldState: [T1, T2, T3]) => boolean, + effect: () => (() => void) | void, + dependencies: [T1, T2, T3], +): void; + +/** + * Conditionally executes an effect. + * + * @param evalCondition A function that receives the dependencies' previous state as argument and + * returns a boolean defining if the effect should be executed. + * @param effect The effect callback to be executed. + * @param dependencies The effect's dependencies. + */ +export function useConditionalEffect( + evalCondition: (oldState: [T1, T2, T3, T4]) => boolean, + effect: () => (() => void) | void, + dependencies: [T1, T2, T3, T4], +): void; + +/** + * Conditionally executes an effect. + * + * @param evalCondition A function that receives the dependencies' previous state as argument and + * returns a boolean defining if the effect should be executed. + * @param effect The effect callback to be executed. + * @param dependencies The effect's dependencies. + */ +export function useConditionalEffect( + evalCondition: (oldState: [T1, T2, T3, T4, T5]) => boolean, + effect: () => (() => void) | void, + dependencies: [T1, T2, T3, T4, T5], +): void; + +/** + * Conditionally executes an effect. + * + * @param evalCondition A function that receives the dependencies' previous state as argument and + * returns a boolean defining if the effect should be executed. + * @param effect The effect callback to be executed. + * @param dependencies The effect's dependencies. + */ +export function useConditionalEffect( + evalCondition: (oldState: [T1, T2, T3, T4, T5, T6]) => boolean, + effect: () => (() => void) | void, + dependencies: [T1, T2, T3, T4, T5, T6], +): void; + +/** + * Conditionally executes an effect. + * + * @param evalCondition A function that receives the dependencies' previous state as argument and + * returns a boolean defining if the effect should be executed. + * @param effect The effect callback to be executed. + * @param dependencies The effect's dependencies. + */ +export function useConditionalEffect( + evalCondition: (oldState: [T1, T2, T3, T4, T5, T6, T7]) => boolean, + effect: () => (() => void) | void, + dependencies: [T1, T2, T3, T4, T5, T6, T7], +): void; + +/** + * Conditionally executes an effect. + * + * @param evalCondition A function that receives the dependencies' previous state as argument and + * returns a boolean defining if the effect should be executed. + * @param effect The effect callback to be executed. + * @param dependencies The effect's dependencies. + */ +export function useConditionalEffect( + evalCondition: (oldState: [T1, T2, T3, T4, T5, T6, T7, T8]) => boolean, + effect: () => (() => void) | void, + dependencies: [T1, T2, T3, T4, T5, T6, T7, T8], +): void; + +/** + * Conditionally executes an effect. + * + * @param evalCondition A function that receives the dependencies' previous state as argument and + * returns a boolean defining if the effect should be executed. + * @param effect The effect callback to be executed. + * @param dependencies The effect's dependencies. + */ +export function useConditionalEffect( + evalCondition: (oldState: [T1, T2, T3, T4, T5, T6, T7, T8, T9]) => boolean, + effect: () => (() => void) | void, + dependencies: [T1, T2, T3, T4, T5, T6, T7, T8, T9], +): void; + +/** + * Conditionally executes an effect. + * + * @param evalCondition A function that receives the dependencies' previous state as argument and + * returns a boolean defining if the effect should be executed. + * @param effect The effect callback to be executed. + * @param dependencies The effect's dependencies. + */ +export function useConditionalEffect( + evalCondition: ( + oldState: [T1, T2, T3, T4, T5, T6, T7, T8, T9, T10], + ) => boolean, + effect: () => (() => void) | void, + dependencies: [T1, T2, T3, T4, T5, T6, T7, T8, T9, T10], +): void; /** * Conditionally executes an effect. @@ -118,16 +380,21 @@ export const useEffectUpdate = ( * the effect is evaluating if it should be executed. * @category Effects */ -export const useConditionalEffect = ( +export function useConditionalEffect( evalCondition: (oldState: Dependencies) => boolean, effect: () => (() => void) | void, dependencies: Dependencies, -) => { +): void; +export function useConditionalEffect( + evalCondition: (oldState: Dependencies) => boolean, + effect: () => (() => void) | void, + dependencies: Dependencies, +): void { useEffectUpdate( oldState => (evalCondition(oldState) ? effect() : undefined), dependencies, ); -}; +} /** * Runs an effect when the component gets mounted.