feat(createDebouncedState): create helper for managing state with debounce

This commit is contained in:
Ilia Mashkov
2026-01-13 19:51:41 +03:00
parent 0f1eb489ed
commit 1a76e9387a

View File

@@ -0,0 +1,58 @@
import { debounce } from '$shared/lib/utils';
export function createDebouncedState<T>(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<T>(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;
// },
// };
// }