1
- import type { Dispatch , SetStateAction } from "react" ;
1
+ import type { SetStateAction } from "react" ;
2
2
import { useCallback , useMemo , useState , useSyncExternalStore } from "react" ;
3
3
import { DbStorage } from "local-db-storage" ;
4
4
@@ -16,8 +16,8 @@ export type StorageStateOptions<T> = {
16
16
// - first two values are the same as `useState`
17
17
export type DbState < T > = [
18
18
state : T ,
19
- setState : Dispatch < SetStateAction < T > > ,
20
- removeItem : ( ) => void ,
19
+ setState : ( value : SetStateAction < T > ) => Promise < void > ,
20
+ removeItem : ( ) => Promise < void > ,
21
21
] ;
22
22
23
23
export default function useDb (
@@ -74,17 +74,17 @@ function useStorage<T>(
74
74
) ;
75
75
76
76
const setState = useCallback (
77
- ( newValue : SetStateAction < T | undefined > ) : void => {
77
+ ( newValue : SetStateAction < T | undefined > ) : Promise < void > => {
78
78
const hasPrev = syncData . has ( key ) ;
79
- const prev = hasPrev
79
+ const prev = syncData . has ( key )
80
80
? ( syncData . get ( key ) as T | undefined )
81
81
: defaultValue ;
82
82
const next =
83
83
newValue instanceof Function ? newValue ( prev ) : newValue ;
84
84
if ( optimistic ) {
85
85
syncData . set ( key , next ) ;
86
86
triggerCallbacks ( key ) ;
87
- dbStorage . setItem ( key , next ) . catch ( ( ) => {
87
+ return dbStorage . setItem ( key , next ) . catch ( ( ) => {
88
88
if ( hasPrev ) {
89
89
syncData . set ( key , prev ) ;
90
90
} else {
@@ -93,7 +93,7 @@ function useStorage<T>(
93
93
triggerCallbacks ( key ) ;
94
94
} ) ;
95
95
} else {
96
- dbStorage . setItem ( key , next ) . then ( ( ) => {
96
+ return dbStorage . setItem ( key , next ) . then ( ( ) => {
97
97
syncData . set ( key , next ) ;
98
98
triggerCallbacks ( key ) ;
99
99
} ) ;
@@ -108,14 +108,14 @@ function useStorage<T>(
108
108
if ( optimistic ) {
109
109
syncData . delete ( key ) ;
110
110
triggerCallbacks ( key ) ;
111
- dbStorage . removeItem ( key ) . catch ( ( ) => {
111
+ return dbStorage . removeItem ( key ) . catch ( ( ) => {
112
112
if ( hasPrev ) {
113
113
syncData . set ( key , prev ) ;
114
114
triggerCallbacks ( key ) ;
115
115
}
116
116
} ) ;
117
117
} else {
118
- dbStorage . removeItem ( key ) . then ( ( ) => {
118
+ return dbStorage . removeItem ( key ) . then ( ( ) => {
119
119
syncData . delete ( key ) ;
120
120
triggerCallbacks ( key ) ;
121
121
} ) ;
0 commit comments