From 1a76e9387aed2518fd3d57e8c14d7e21d1a69274 Mon Sep 17 00:00:00 2001 From: Ilia Mashkov Date: Tue, 13 Jan 2026 19:51:41 +0300 Subject: [PATCH] feat(createDebouncedState): create helper for managing state with debounce --- .../createDebouncedState.svelte.ts | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/shared/lib/helpers/createDebouncedState/createDebouncedState.svelte.ts diff --git a/src/shared/lib/helpers/createDebouncedState/createDebouncedState.svelte.ts b/src/shared/lib/helpers/createDebouncedState/createDebouncedState.svelte.ts new file mode 100644 index 0000000..2093514 --- /dev/null +++ b/src/shared/lib/helpers/createDebouncedState/createDebouncedState.svelte.ts @@ -0,0 +1,58 @@ +import { debounce } from '$shared/lib/utils'; + +export function createDebouncedState(initialValue: T, wait: number = 300) { + let immediate = $state(initialValue); + let debounced = $state(initialValue); + + const updateDebounced = debounce((value: T) => { + debounced = value; + }, wait); + + return { + get immediate() { + return immediate; + }, + set immediate(value: T) { + immediate = value; + updateDebounced(value); // Manually trigger the debounce on write + }, + get debounced() { + return debounced; + }, + reset(value?: T) { + const resetValue = value ?? initialValue; + immediate = resetValue; + debounced = resetValue; + }, + }; +} + +// export function createDebouncedState(initialValue: T, wait: number = 300) { +// let immediate = $state(initialValue); +// let debounced = $state(initialValue); + +// const updateDebounced = debounce((value: T) => { +// debounced = value; +// }, wait); + +// $effect(() => { +// updateDebounced(immediate); +// }); + +// return { +// get immediate() { +// return immediate; +// }, +// set immediate(value: T) { +// immediate = value; +// }, +// get debounced() { +// return debounced; +// }, +// reset(value?: T) { +// const resetValue = value ?? initialValue; +// immediate = resetValue; +// debounced = resetValue; +// }, +// }; +// }