use-typed-reducer 3.2.2 → 3.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +7 -4
- package/dist/index.es.js +25 -9
- package/dist/index.js +26 -8
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import { MutableRefObject } from "react";
|
|
2
2
|
declare type VoidableFn<Fn extends (...any: any[]) => any> = ReturnType<Fn> extends Promise<any> ? (...a: Parameters<Fn>) => Promise<void> : (...a: Parameters<Fn>) => void;
|
|
3
3
|
declare type Action<State> = (...args: any) => Promise<(state: State) => State> | ((state: State) => State);
|
|
4
4
|
declare type Actions<Actions, State> = {
|
|
@@ -15,11 +15,14 @@ declare type FnMap<State> = {
|
|
|
15
15
|
[k: string]: (...args: any[]) => Partial<State> | Promise<Partial<State>>;
|
|
16
16
|
};
|
|
17
17
|
declare type MappedReducers<State extends {}, Fns extends FnMap<State>> = {
|
|
18
|
-
[F in keyof Fns]: (...args: Parameters<Fns[F]>) =>
|
|
18
|
+
[F in keyof Fns]: (...args: Parameters<Fns[F]>) => Promise<Partial<State>> | Partial<State>;
|
|
19
19
|
};
|
|
20
20
|
declare type MapReducerReturn<State extends {}, Fns extends FnMap<State>> = {
|
|
21
21
|
[F in keyof Fns]: VoidableFn<Fns[F]>;
|
|
22
22
|
};
|
|
23
|
-
export declare const useMutable: <T extends {}>(state: T) =>
|
|
24
|
-
export declare const
|
|
23
|
+
export declare const useMutable: <T extends {}>(state: T) => MutableRefObject<T>;
|
|
24
|
+
export declare const dispatchCallback: <Prev extends unknown, T extends Prev | ((prev: Prev) => Prev)>(prev: Prev, setter: T) => any;
|
|
25
|
+
export declare type DispatchCallback<T extends any> = T | ((prev: T) => T);
|
|
26
|
+
export declare const useReducer: <State extends {}, Reducers extends (getState: () => State, getProps: () => Props, initialState: State) => MappedReducers<State, FnMap<State>>, Props extends {}, Middlewares extends ((state: State, key: keyof ReturnType<Reducers>) => State)[]>(initialState: State, reducer: Reducers, props?: Props | undefined, middlewares?: Middlewares | undefined) => readonly [state: State, dispatchers: MapReducerReturn<State, ReturnType<Reducers>>];
|
|
27
|
+
export declare const createReducer: <State extends {} = {}, Props extends {} = {}>() => <Reducer extends (getState: () => State, getProps: () => Props, initialState: State) => MappedReducers<State, FnMap<State>>>(reducer: Reducer) => Reducer;
|
|
25
28
|
export default useTypedReducer;
|
package/dist/index.es.js
CHANGED
|
@@ -121,13 +121,18 @@ var useMutable = function (state) {
|
|
|
121
121
|
useEffect(function () { return void (mutable.current = state); }, [state]);
|
|
122
122
|
return mutable;
|
|
123
123
|
};
|
|
124
|
-
var
|
|
124
|
+
var dispatchCallback = function (prev, setter) {
|
|
125
|
+
return typeof setter === "function" ? setter(prev) : setter;
|
|
126
|
+
};
|
|
127
|
+
var useReducer = function (initialState, reducer, props, middlewares) {
|
|
125
128
|
var _a = __read(useState(function () { return initialState; }), 2), state = _a[0], setState = _a[1];
|
|
126
129
|
var mutableState = useMutable(state);
|
|
127
130
|
var mutableProps = useMutable(props !== null && props !== void 0 ? props : {});
|
|
128
131
|
var mutableReducer = useMutable(reducer);
|
|
132
|
+
var middleware = useMutable(middlewares !== null && middlewares !== void 0 ? middlewares : []);
|
|
133
|
+
var savedInitialState = useRef(initialState);
|
|
129
134
|
var dispatchers = useMemo(function () {
|
|
130
|
-
var reducers = mutableReducer.current(function () { return mutableState.current; }, function () { var _a; return (_a = mutableProps.current) !== null && _a !== void 0 ? _a : {}; });
|
|
135
|
+
var reducers = mutableReducer.current(function () { return mutableState.current; }, function () { var _a; return (_a = mutableProps.current) !== null && _a !== void 0 ? _a : {}; }, savedInitialState.current);
|
|
131
136
|
return entries(reducers).reduce(function (acc, _a) {
|
|
132
137
|
var _b;
|
|
133
138
|
var _c = __read(_a, 2), name = _c[0], dispatch = _c[1];
|
|
@@ -136,15 +141,26 @@ var useReducer = function (initialState, reducer, props) {
|
|
|
136
141
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
137
142
|
params[_i] = arguments[_i];
|
|
138
143
|
}
|
|
139
|
-
var
|
|
140
|
-
return
|
|
141
|
-
? void
|
|
142
|
-
|
|
144
|
+
var st = dispatch.apply(void 0, __spread(params));
|
|
145
|
+
return st instanceof Promise
|
|
146
|
+
? void st.then(function (state) {
|
|
147
|
+
return setState(function (prev) {
|
|
148
|
+
return middleware.current.reduce(function (acc, fn) { return fn(acc, name); }, __assign(__assign({}, prev), { state: state }));
|
|
149
|
+
});
|
|
150
|
+
})
|
|
151
|
+
: setState(function (prev) {
|
|
152
|
+
return middleware.current.reduce(function (acc, fn) { return fn(acc, name); }, __assign(__assign({}, prev), st));
|
|
153
|
+
});
|
|
143
154
|
}, _b)));
|
|
144
|
-
},
|
|
145
|
-
}, []);
|
|
155
|
+
}, {});
|
|
156
|
+
}, [mutableProps, mutableReducer, mutableState]);
|
|
146
157
|
return [state, dispatchers];
|
|
158
|
+
};
|
|
159
|
+
var createReducer = function () {
|
|
160
|
+
return function (reducer) {
|
|
161
|
+
return reducer;
|
|
162
|
+
};
|
|
147
163
|
};
|
|
148
164
|
|
|
149
165
|
export default useTypedReducer;
|
|
150
|
-
export { useMutable, useReducer, useTypedReducer };
|
|
166
|
+
export { createReducer, dispatchCallback, useMutable, useReducer, useTypedReducer };
|
package/dist/index.js
CHANGED
|
@@ -125,13 +125,18 @@ var useMutable = function (state) {
|
|
|
125
125
|
react.useEffect(function () { return void (mutable.current = state); }, [state]);
|
|
126
126
|
return mutable;
|
|
127
127
|
};
|
|
128
|
-
var
|
|
128
|
+
var dispatchCallback = function (prev, setter) {
|
|
129
|
+
return typeof setter === "function" ? setter(prev) : setter;
|
|
130
|
+
};
|
|
131
|
+
var useReducer = function (initialState, reducer, props, middlewares) {
|
|
129
132
|
var _a = __read(react.useState(function () { return initialState; }), 2), state = _a[0], setState = _a[1];
|
|
130
133
|
var mutableState = useMutable(state);
|
|
131
134
|
var mutableProps = useMutable(props !== null && props !== void 0 ? props : {});
|
|
132
135
|
var mutableReducer = useMutable(reducer);
|
|
136
|
+
var middleware = useMutable(middlewares !== null && middlewares !== void 0 ? middlewares : []);
|
|
137
|
+
var savedInitialState = react.useRef(initialState);
|
|
133
138
|
var dispatchers = react.useMemo(function () {
|
|
134
|
-
var reducers = mutableReducer.current(function () { return mutableState.current; }, function () { var _a; return (_a = mutableProps.current) !== null && _a !== void 0 ? _a : {}; });
|
|
139
|
+
var reducers = mutableReducer.current(function () { return mutableState.current; }, function () { var _a; return (_a = mutableProps.current) !== null && _a !== void 0 ? _a : {}; }, savedInitialState.current);
|
|
135
140
|
return entries(reducers).reduce(function (acc, _a) {
|
|
136
141
|
var _b;
|
|
137
142
|
var _c = __read(_a, 2), name = _c[0], dispatch = _c[1];
|
|
@@ -140,17 +145,30 @@ var useReducer = function (initialState, reducer, props) {
|
|
|
140
145
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
141
146
|
params[_i] = arguments[_i];
|
|
142
147
|
}
|
|
143
|
-
var
|
|
144
|
-
return
|
|
145
|
-
? void
|
|
146
|
-
|
|
148
|
+
var st = dispatch.apply(void 0, __spread(params));
|
|
149
|
+
return st instanceof Promise
|
|
150
|
+
? void st.then(function (state) {
|
|
151
|
+
return setState(function (prev) {
|
|
152
|
+
return middleware.current.reduce(function (acc, fn) { return fn(acc, name); }, __assign(__assign({}, prev), { state: state }));
|
|
153
|
+
});
|
|
154
|
+
})
|
|
155
|
+
: setState(function (prev) {
|
|
156
|
+
return middleware.current.reduce(function (acc, fn) { return fn(acc, name); }, __assign(__assign({}, prev), st));
|
|
157
|
+
});
|
|
147
158
|
}, _b)));
|
|
148
|
-
},
|
|
149
|
-
}, []);
|
|
159
|
+
}, {});
|
|
160
|
+
}, [mutableProps, mutableReducer, mutableState]);
|
|
150
161
|
return [state, dispatchers];
|
|
162
|
+
};
|
|
163
|
+
var createReducer = function () {
|
|
164
|
+
return function (reducer) {
|
|
165
|
+
return reducer;
|
|
166
|
+
};
|
|
151
167
|
};
|
|
152
168
|
|
|
169
|
+
exports.createReducer = createReducer;
|
|
153
170
|
exports.default = useTypedReducer;
|
|
171
|
+
exports.dispatchCallback = dispatchCallback;
|
|
154
172
|
exports.useMutable = useMutable;
|
|
155
173
|
exports.useReducer = useReducer;
|
|
156
174
|
exports.useTypedReducer = useTypedReducer;
|