Skip to content

Commit 3f953ae

Browse files
committed
✨ return Promise when setting or removing state
1 parent 448deab commit 3f953ae

File tree

1 file changed

+9
-9
lines changed

1 file changed

+9
-9
lines changed

Diff for: index.ts

+9-9
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { Dispatch, SetStateAction } from "react";
1+
import type { SetStateAction } from "react";
22
import { useCallback, useMemo, useState, useSyncExternalStore } from "react";
33
import { DbStorage } from "local-db-storage";
44

@@ -16,8 +16,8 @@ export type StorageStateOptions<T> = {
1616
// - first two values are the same as `useState`
1717
export type DbState<T> = [
1818
state: T,
19-
setState: Dispatch<SetStateAction<T>>,
20-
removeItem: () => void,
19+
setState: (value: SetStateAction<T>) => Promise<void>,
20+
removeItem: () => Promise<void>,
2121
];
2222

2323
export default function useDb(
@@ -74,17 +74,17 @@ function useStorage<T>(
7474
);
7575

7676
const setState = useCallback(
77-
(newValue: SetStateAction<T | undefined>): void => {
77+
(newValue: SetStateAction<T | undefined>): Promise<void> => {
7878
const hasPrev = syncData.has(key);
79-
const prev = hasPrev
79+
const prev = syncData.has(key)
8080
? (syncData.get(key) as T | undefined)
8181
: defaultValue;
8282
const next =
8383
newValue instanceof Function ? newValue(prev) : newValue;
8484
if (optimistic) {
8585
syncData.set(key, next);
8686
triggerCallbacks(key);
87-
dbStorage.setItem(key, next).catch(() => {
87+
return dbStorage.setItem(key, next).catch(() => {
8888
if (hasPrev) {
8989
syncData.set(key, prev);
9090
} else {
@@ -93,7 +93,7 @@ function useStorage<T>(
9393
triggerCallbacks(key);
9494
});
9595
} else {
96-
dbStorage.setItem(key, next).then(() => {
96+
return dbStorage.setItem(key, next).then(() => {
9797
syncData.set(key, next);
9898
triggerCallbacks(key);
9999
});
@@ -108,14 +108,14 @@ function useStorage<T>(
108108
if (optimistic) {
109109
syncData.delete(key);
110110
triggerCallbacks(key);
111-
dbStorage.removeItem(key).catch(() => {
111+
return dbStorage.removeItem(key).catch(() => {
112112
if (hasPrev) {
113113
syncData.set(key, prev);
114114
triggerCallbacks(key);
115115
}
116116
});
117117
} else {
118-
dbStorage.removeItem(key).then(() => {
118+
return dbStorage.removeItem(key).then(() => {
119119
syncData.delete(key);
120120
triggerCallbacks(key);
121121
});

0 commit comments

Comments
 (0)