59 lines
1.5 KiB
TypeScript
59 lines
1.5 KiB
TypeScript
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;
|
|
// },
|
|
// };
|
|
// }
|