feature/fetch-fonts #14
@@ -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;
|
||||||
|
// },
|
||||||
|
// };
|
||||||
|
// }
|
||||||
Reference in New Issue
Block a user