react-elmish 2.2.0 → 3.0.0
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/README.md +265 -155
- package/dist/ElmUtilities.d.ts +3 -0
- package/dist/ElmUtilities.js +11 -2
- package/dist/Testing/index.js +3 -3
- package/dist/index.d.ts +1 -2
- package/dist/index.js +1 -9
- package/dist/legacy/useElmish.d.ts +15 -0
- package/dist/legacy/useElmish.js +132 -0
- package/dist/legacy/useElmishMap.d.ts +14 -0
- package/dist/legacy/useElmishMap.js +134 -0
- package/dist/useElmish.d.ts +19 -3
- package/dist/useElmish.js +33 -6
- package/package.json +1 -1
- package/dist/useElmishMap.d.ts +0 -5
- package/dist/useElmishMap.js +0 -128
package/dist/useElmishMap.js
DELETED
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.callUpdateMap = callUpdateMap;
|
|
7
|
-
exports.useElmishMap = useElmishMap;
|
|
8
|
-
|
|
9
|
-
var _Init = require("./Init");
|
|
10
|
-
|
|
11
|
-
var _react = require("react");
|
|
12
|
-
|
|
13
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
14
|
-
|
|
15
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
16
|
-
|
|
17
|
-
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
18
|
-
|
|
19
|
-
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
20
|
-
|
|
21
|
-
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
22
|
-
|
|
23
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
24
|
-
|
|
25
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
26
|
-
|
|
27
|
-
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
28
|
-
|
|
29
|
-
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
30
|
-
|
|
31
|
-
function useElmishMap(props, init, updateMap, name) {
|
|
32
|
-
var reentered = false;
|
|
33
|
-
var buffer = [];
|
|
34
|
-
var currentModel = {};
|
|
35
|
-
|
|
36
|
-
var _useState = (0, _react.useState)(null),
|
|
37
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
38
|
-
model = _useState2[0],
|
|
39
|
-
setModel = _useState2[1];
|
|
40
|
-
|
|
41
|
-
var initializedModel = model;
|
|
42
|
-
var execCmd = (0, _react.useCallback)(function (cmd) {
|
|
43
|
-
cmd.forEach(function (call) {
|
|
44
|
-
try {
|
|
45
|
-
call(dispatch);
|
|
46
|
-
} catch (ex) {
|
|
47
|
-
_Init.LoggerService === null || _Init.LoggerService === void 0 ? void 0 : _Init.LoggerService.error(ex);
|
|
48
|
-
}
|
|
49
|
-
});
|
|
50
|
-
}, []);
|
|
51
|
-
var dispatch = (0, _react.useCallback)(function (msg) {
|
|
52
|
-
if (!initializedModel) {
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
var modelHasChanged = function modelHasChanged(updatedModel) {
|
|
57
|
-
return updatedModel !== initializedModel && Object.getOwnPropertyNames(updatedModel).length > 0;
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
if (_Init.dispatchMiddleware) {
|
|
61
|
-
(0, _Init.dispatchMiddleware)(msg);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
if (reentered) {
|
|
65
|
-
buffer.push(msg);
|
|
66
|
-
} else {
|
|
67
|
-
reentered = true;
|
|
68
|
-
var nextMsg = msg;
|
|
69
|
-
var modified = false;
|
|
70
|
-
|
|
71
|
-
while (nextMsg) {
|
|
72
|
-
_Init.LoggerService === null || _Init.LoggerService === void 0 ? void 0 : _Init.LoggerService.info("Elm", "message from", name, nextMsg.name);
|
|
73
|
-
_Init.LoggerService === null || _Init.LoggerService === void 0 ? void 0 : _Init.LoggerService.debug("Elm", "message from", name, nextMsg);
|
|
74
|
-
|
|
75
|
-
try {
|
|
76
|
-
var _callUpdateMap = callUpdateMap(updateMap, nextMsg, _objectSpread(_objectSpread({}, initializedModel), currentModel), props),
|
|
77
|
-
_callUpdateMap2 = _slicedToArray(_callUpdateMap, 2),
|
|
78
|
-
newModel = _callUpdateMap2[0],
|
|
79
|
-
cmd = _callUpdateMap2[1];
|
|
80
|
-
|
|
81
|
-
if (modelHasChanged(newModel)) {
|
|
82
|
-
currentModel = _objectSpread(_objectSpread({}, currentModel), newModel);
|
|
83
|
-
modified = true;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
if (cmd) {
|
|
87
|
-
execCmd(cmd);
|
|
88
|
-
}
|
|
89
|
-
} catch (ex) {
|
|
90
|
-
_Init.LoggerService === null || _Init.LoggerService === void 0 ? void 0 : _Init.LoggerService.error(ex);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
nextMsg = buffer.shift();
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
reentered = false;
|
|
97
|
-
|
|
98
|
-
if (modified) {
|
|
99
|
-
setModel(function (prevModel) {
|
|
100
|
-
var updatedModel = _objectSpread(_objectSpread({}, prevModel), currentModel);
|
|
101
|
-
|
|
102
|
-
_Init.LoggerService === null || _Init.LoggerService === void 0 ? void 0 : _Init.LoggerService.debug("Elm", "update model for", name, updatedModel);
|
|
103
|
-
return updatedModel;
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
}, []);
|
|
108
|
-
|
|
109
|
-
if (!initializedModel) {
|
|
110
|
-
var _init = init(props),
|
|
111
|
-
_init2 = _slicedToArray(_init, 2),
|
|
112
|
-
initModel = _init2[0],
|
|
113
|
-
initCmd = _init2[1];
|
|
114
|
-
|
|
115
|
-
initializedModel = initModel;
|
|
116
|
-
setModel(initializedModel);
|
|
117
|
-
execCmd(initCmd);
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
return [initializedModel, dispatch];
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
function callUpdateMap(updateMap, msg, model, props) {
|
|
124
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
125
|
-
// @ts-expect-error -- We know that nextMsg fits
|
|
126
|
-
return updateMap[msg.name](msg, model, props);
|
|
127
|
-
}
|
|
128
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91c2VFbG1pc2hNYXAudHMiXSwibmFtZXMiOlsidXNlRWxtaXNoTWFwIiwicHJvcHMiLCJpbml0IiwidXBkYXRlTWFwIiwibmFtZSIsInJlZW50ZXJlZCIsImJ1ZmZlciIsImN1cnJlbnRNb2RlbCIsIm1vZGVsIiwic2V0TW9kZWwiLCJpbml0aWFsaXplZE1vZGVsIiwiZXhlY0NtZCIsImNtZCIsImZvckVhY2giLCJjYWxsIiwiZGlzcGF0Y2giLCJleCIsIkxvZ2dlclNlcnZpY2UiLCJlcnJvciIsIm1zZyIsIm1vZGVsSGFzQ2hhbmdlZCIsInVwZGF0ZWRNb2RlbCIsIk9iamVjdCIsImdldE93blByb3BlcnR5TmFtZXMiLCJsZW5ndGgiLCJkaXNwYXRjaE1pZGRsZXdhcmUiLCJwdXNoIiwibmV4dE1zZyIsIm1vZGlmaWVkIiwiaW5mbyIsImRlYnVnIiwiY2FsbFVwZGF0ZU1hcCIsIm5ld01vZGVsIiwic2hpZnQiLCJwcmV2TW9kZWwiLCJpbml0TW9kZWwiLCJpbml0Q21kIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUNBOztBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdPLFNBQVNBLFlBQVQsQ0FBaUVDLEtBQWpFLEVBQWdGQyxJQUFoRixFQUE4SEMsU0FBOUgsRUFBMEtDLElBQTFLLEVBQWtOO0FBQ3JOLE1BQUlDLFNBQVMsR0FBRyxLQUFoQjtBQUNBLE1BQU1DLE1BQWUsR0FBRyxFQUF4QjtBQUNBLE1BQUlDLFlBQTZCLEdBQUcsRUFBcEM7O0FBRUEsa0JBQTBCLHFCQUEyQixJQUEzQixDQUExQjtBQUFBO0FBQUEsTUFBT0MsS0FBUDtBQUFBLE1BQWNDLFFBQWQ7O0FBQ0EsTUFBSUMsZ0JBQWdCLEdBQUdGLEtBQXZCO0FBRUEsTUFBTUcsT0FBTyxHQUFHLHdCQUFZLFVBQUNDLEdBQUQsRUFBMEI7QUFDbERBLElBQUFBLEdBQUcsQ0FBQ0MsT0FBSixDQUFZLFVBQUFDLElBQUksRUFBSTtBQUNoQixVQUFJO0FBQ0FBLFFBQUFBLElBQUksQ0FB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QUF1TTtBQUMxTTtBQUNBO0FBQ0EsU0FBT0UsU0FBUyxDQUFDZ0IsR0FBRyxDQUFDZixJQUFMLENBQVQsQ0FBd0NlLEdBQXhDLEVBQTZDWCxLQUE3QyxFQUFvRFAsS0FBcEQsQ0FBUDtBQUNIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ21kLCBEaXNwYXRjaCB9IGZyb20gXCIuL0NtZFwiO1xuaW1wb3J0IHsgZGlzcGF0Y2hNaWRkbGV3YXJlLCBMb2dnZXJTZXJ2aWNlIH0gZnJvbSBcIi4vSW5pdFwiO1xuaW1wb3J0IHsgTWVzc2FnZUJhc2UsIE51bGxhYmxlLCBVcGRhdGVNYXAgfSBmcm9tIFwiLi9FbG1VdGlsaXRpZXNcIjtcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgVXBkYXRlUmV0dXJuVHlwZSB9IGZyb20gXCIuL0VsbUNvbXBvbmVudFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlRWxtaXNoTWFwPFRQcm9wcywgVE1vZGVsLCBUTXNnIGV4dGVuZHMgTWVzc2FnZUJhc2U+IChwcm9wczogVFByb3BzLCBpbml0OiAocHJvcHM6IFRQcm9wcykgPT4gW1RNb2RlbCwgQ21kPFRNc2c+XSwgdXBkYXRlTWFwOiBVcGRhdGVNYXA8VFByb3BzLCBUTW9kZWwsIFRNc2c+LCBuYW1lOiBzdHJpbmcpOiBbVE1vZGVsLCBEaXNwYXRjaDxUTXNnPl0ge1xuICAgIGxldCByZWVudGVyZWQgPSBmYWxzZTtcbiAgICBjb25zdCBidWZmZXI6IFRNc2cgW10gPSBbXTtcbiAgICBsZXQgY3VycmVudE1vZGVsOiBQYXJ0aWFsPFRNb2RlbD4gPSB7fTtcblxuICAgIGNvbnN0IFttb2RlbCwgc2V0TW9kZWxdID0gdXNlU3RhdGU8TnVsbGFibGU8VE1vZGVsPj4obnVsbCk7XG4gICAgbGV0IGluaXRpYWxpemVkTW9kZWwgPSBtb2RlbDtcblxuICAgIGNvbnN0IGV4ZWNDbWQgPSB1c2VDYWxsYmFjaygoY21kOiBDbWQ8VE1zZz4pOiB2b2lkID0+IHtcbiAgICAgICAgY21kLmZvckVhY2goY2FsbCA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNhbGwoZGlzcGF0Y2gpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXg6IHVua25vd24pIHtcbiAgICAgICAgICAgICAgICBMb2dnZXJTZXJ2aWNlPy5lcnJvcihleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlQ2FsbGJhY2soKG1zZzogVE1zZyk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoIWluaXRpYWxpemVkTW9kZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1vZGVsSGFzQ2hhbmdlZCA9ICh1cGRhdGVkTW9kZWw6IFBhcnRpYWw8VE1vZGVsPik6IGJvb2xlYW4gPT4gdXBkYXRlZE1vZGVsICE9PSBpbml0aWFsaXplZE1vZGVsICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHVwZGF0ZWRNb2RlbCkubGVuZ3RoID4gMDtcblxuICAgICAgICBpZiAoZGlzcGF0Y2hNaWRkbGV3YXJlKSB7XG4gICAgICAgICAgICBkaXNwYXRjaE1pZGRsZXdhcmUobXNnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZWVudGVyZWQpIHtcbiAgICAgICAgICAgIGJ1ZmZlci5wdXNoKG1zZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWVudGVyZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICBsZXQgbmV4dE1zZzogVE1zZyB8IHVuZGVmaW5lZCA9IG1zZztcbiAgICAgICAgICAgIGxldCBtb2RpZmllZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICB3aGlsZSAobmV4dE1zZykge1xuICAgICAgICAgICAgICAgIExvZ2dlclNlcnZpY2U/LmluZm8oXCJFbG1cIiwgXCJtZXNzYWdlIGZyb21cIiwgbmFtZSwgbmV4dE1zZy5uYW1lKTtcbiAgICAgICAgICAgICAgICBMb2dnZXJTZXJ2aWNlPy5kZWJ1ZyhcIkVsbVwiLCBcIm1lc3NhZ2UgZnJvbVwiLCBuYW1lLCBuZXh0TXNnKTtcblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IFtuZXdNb2RlbCwgY21kXSA9IGNhbGxVcGRhdGVNYXAodXBkYXRlTWFwLCBuZXh0TXNnLCB7IC4uLmluaXRpYWxpemVkTW9kZWwsIC4uLmN1cnJlbnRNb2RlbCB9LCBwcm9wcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGVsSGFzQ2hhbmdlZChuZXdNb2RlbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRNb2RlbCA9IHsgLi4uY3VycmVudE1vZGVsLCAuLi5uZXdNb2RlbCB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoY21kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjQ21kKGNtZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChleDogdW5rbm93bikge1xuICAgICAgICAgICAgICAgICAgICBMb2dnZXJTZXJ2aWNlPy5lcnJvcihleCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbmV4dE1zZyA9IGJ1ZmZlci5zaGlmdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVlbnRlcmVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChtb2RpZmllZCkge1xuICAgICAgICAgICAgICAgIHNldE1vZGVsKHByZXZNb2RlbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRNb2RlbCA9IHsgLi4ucHJldk1vZGVsIGFzIFRNb2RlbCwgLi4uY3VycmVudE1vZGVsIH07XG5cbiAgICAgICAgICAgICAgICAgICAgTG9nZ2VyU2VydmljZT8uZGVidWcoXCJFbG1cIiwgXCJ1cGRhdGUgbW9kZWwgZm9yXCIsIG5hbWUsIHVwZGF0ZWRNb2RlbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZWRNb2RlbDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIFtdKTtcblxuICAgIGlmICghaW5pdGlhbGl6ZWRNb2RlbCkge1xuICAgICAgICBjb25zdCBbaW5pdE1vZGVsLCBpbml0Q21kXSA9IGluaXQocHJvcHMpO1xuXG4gICAgICAgIGluaXRpYWxpemVkTW9kZWwgPSBpbml0TW9kZWw7XG4gICAgICAgIHNldE1vZGVsKGluaXRpYWxpemVkTW9kZWwpO1xuXG4gICAgICAgIGV4ZWNDbWQoaW5pdENtZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtpbml0aWFsaXplZE1vZGVsLCBkaXNwYXRjaF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxsVXBkYXRlTWFwPFRQcm9wcywgVE1vZGVsLCBUTWVzc2FnZSBleHRlbmRzIE1lc3NhZ2VCYXNlPiAodXBkYXRlTWFwOiBVcGRhdGVNYXA8VFByb3BzLCBUTW9kZWwsIFRNZXNzYWdlPiwgbXNnOiBUTWVzc2FnZSwgbW9kZWw6IFRNb2RlbCwgcHJvcHM6IFRQcm9wcyk6IFVwZGF0ZVJldHVyblR5cGU8VE1vZGVsLCBUTWVzc2FnZT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0tIFdlIGtub3cgdGhhdCBuZXh0TXNnIGZpdHNcbiAgICByZXR1cm4gdXBkYXRlTWFwW21zZy5uYW1lIGFzIFRNZXNzYWdlW1wibmFtZVwiXV0obXNnLCBtb2RlbCwgcHJvcHMpO1xufSJdfQ==
|