pooppy
Version:
A state management portfolio for personal use only
71 lines • 2.4 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
var React = require("react");
var immer_1 = require("immer");
var constate_1 = require("constate");
exports.createContainer = constate_1.default;
/**
* immer: https://github.com/mweststrate/immer
*/
var useImmer = function (initialState) {
var _a = React.useState(initialState), state = _a[0], setState = _a[1];
return [
state,
function (updater) {
setState(immer_1.default(updater));
}
];
};
exports.useImmer = useImmer;
/**
* like recompose#nest
* nest(MainCounter.Provider, DynamicImportedRoutePage)
*/
var nest = function () {
var components = [];
for (var _i = 0; _i < arguments.length; _i++) {
components[_i] = arguments[_i];
}
return function (props) {
return components.reduceRight(function (children, Current) { return React.createElement(Current, __assign({}, props), children); }, props.children);
};
};
exports.nest = nest;
/**
* Some useful collections Hooks!
*/
// thanks the idea and the original code! https://twitter.com/brunolemos/status/1090377532845801473
var useWhyDidYouUpdate = function (name, props) {
var previousProps = React.useRef(null);
React.useEffect(function () {
if (previousProps.current) {
var allKeys = Object.keys(__assign({}, previousProps.current, props));
var changesObj_1 = {};
allKeys.forEach(function (key) {
if (previousProps.current[key] !== props[key]) {
changesObj_1[key] = {
from: previousProps.current[key],
to: props[key]
};
}
});
if (Object.keys(changesObj_1).length) {
console.log("[why-did-you-update]", name, changesObj_1);
}
}
previousProps.current = props;
});
};
exports.useWhyDidYouUpdate = useWhyDidYouUpdate;
//# sourceMappingURL=pooppy.js.map