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