26 lines
1.1 KiB
JavaScript
26 lines
1.1 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var react_1 = require("react");
|
|
var useMethods = function (createMethods, initialState) {
|
|
var reducer = react_1.useMemo(function () { return function (reducerState, action) {
|
|
var _a;
|
|
return (_a = createMethods(reducerState))[action.type].apply(_a, action.payload);
|
|
}; }, [createMethods]);
|
|
var _a = react_1.useReducer(reducer, initialState), state = _a[0], dispatch = _a[1];
|
|
var wrappedMethods = react_1.useMemo(function () {
|
|
var actionTypes = Object.keys(createMethods(initialState));
|
|
return actionTypes.reduce(function (acc, type) {
|
|
acc[type] = function () {
|
|
var payload = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
payload[_i] = arguments[_i];
|
|
}
|
|
return dispatch({ type: type, payload: payload });
|
|
};
|
|
return acc;
|
|
}, {});
|
|
}, [createMethods, initialState]);
|
|
return [state, wrappedMethods];
|
|
};
|
|
exports.default = useMethods;
|