UNPKG

@focuson/redux

Version:

The tools needed to bind to redux, doesn't actually have a version of redux

85 lines (84 loc) 5.41 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.makeLs = exports.makeFocusOnReduxStore = exports.focusOnMiddleware = exports.FocusOnReducer = exports.isFocusOnMassTxsAction = exports.isFocusOnSetMainAction = void 0; const lens_1 = require("@focuson/lens"); const common_1 = require("exampleapp/src/common"); const focuson_1 = require("@focuson/focuson"); const utils_1 = require("@focuson/utils"); const pages_1 = require("@focuson/pages"); const toolkit_1 = require("@reduxjs/toolkit"); const redux_1 = require("redux"); const state_1 = require("@focuson/state"); function isFocusOnSetMainAction(f) { return f.type === 'setMain'; } exports.isFocusOnSetMainAction = isFocusOnSetMainAction; function isFocusOnMassTxsAction(f) { return f.type === 'massTxs'; } exports.isFocusOnMassTxsAction = isFocusOnMassTxsAction; const FocusOnReducer = (state, action) => { var _a; // @ts-ignore const debug = (_a = state.debug) === null || _a === void 0 ? void 0 : _a.reduxDebug; if (isFocusOnSetMainAction(action)) return action.s; if (isFocusOnMassTxsAction(action)) { if (debug) console.log("FocusOnReducer- action is massTxs", action.type, action.txs.map(t => [t[0].description, t[1](t[0].getOption(action.s))])); let result = (0, lens_1.massTransform)(action.s, ...action.txs); if (debug) console.log('finished FocusOnReducer/massTxs', result); return result; } if (debug) console.log('in reducer. I dont know what action it is', action); return state; }; exports.FocusOnReducer = FocusOnReducer; function traceTransform(trace, s) { // @ts-ignore const debug = s.debug; return (debug === null || debug === void 0 ? void 0 : debug.recordTrace) ? [[(0, focuson_1.traceL)(), old => [...old ? old : [], trace]]] : []; } const focusOnMiddleware = (config, context) => (store) => (dispatch) => (action) => __awaiter(void 0, void 0, void 0, function* () { var _a, _b, _c; if (!isFocusOnSetMainAction(action)) return dispatch(action); const deleteRestCommands = [config.restL, () => []]; const { preMutate, postMutate, onError } = config; const { s, reason } = action; const debug = ((_a = s.debug) === null || _a === void 0 ? void 0 : _a.restDebug) === true || ((_b = s.debug) === null || _b === void 0 ? void 0 : _b.fetcherDebug) || ((_c = s.debug) === null || _c === void 0 ? void 0 : _c.reduxDebug); const restCommands = (0, utils_1.safeArray)(config.restL.getOption(s)); (0, utils_1.errorMonad)(s, debug, onError, ['preMutateForPages', (0, pages_1.preMutateForPages)(context)], ['preMutate', preMutate], ['dispatch pre rests', s => dispatch({ type: 'massTxs', s, txs: [...traceTransform(reason, s), deleteRestCommands], comment: 'dispatchPreRests' })] //This updates the gui 'now' pre rest/fetcher goodness. We need to kill the rest commands to stop them being sent twice ); const stateAfterImmediate = store.getState(); const focusOnDispatcher = (preTxs, rests) => (originalS) => { dispatch({ type: 'massTxs', txs: [...preTxs, ...rests.flatMap(x => x.txs)], s: originalS, comment: 'fromFocusOnDispatcher' }); console.log('ending focusonDistpatcher', store.getState()); return store.getState(); }; let finalResultFn = (start, restCommands) => (0, utils_1.errorPromiseMonad)(onError)(start, debug, ['dispatchRestAndFetchCommands', (0, focuson_1.dispatchRestAndFetchCommands)(config, context, focusOnDispatcher)(restCommands)], ['postMutate', postMutate]); const res = yield finalResultFn(stateAfterImmediate, restCommands); const restsLoaded = config.restCountL.getOption(res); if (debug) console.log('restsLoaded were ', restsLoaded, (restsLoaded === null || restsLoaded === void 0 ? void 0 : restsLoaded.loopCount) === 0 ? 'will stop looping' : 'need to loop'); const finalResult = (restsLoaded === null || restsLoaded === void 0 ? void 0 : restsLoaded.loopCount) === 0 ? res : finalResultFn(res, []); if (debug) console.log('finalResult is ', finalResult); return res; }); exports.focusOnMiddleware = focusOnMiddleware; const makeFocusOnReduxStore = (config, context) => (0, toolkit_1.legacy_createStore)(exports.FocusOnReducer, undefined, (0, redux_1.applyMiddleware)((0, exports.focusOnMiddleware)(config, context))); exports.makeFocusOnReduxStore = makeFocusOnReduxStore; function makeLs(store, desc) { return (0, state_1.lensState)(store.getState(), (s, reason) => store.dispatch({ type: 'setMain', s, reason }), desc, common_1.context); } exports.makeLs = makeLs;