@surglogs/with-connected-handler
Version:
HOC for easy event handler creation
89 lines (61 loc) • 5.24 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _recompose = require("recompose");
var _reactRedux = require("react-redux");
var _map = _interopRequireDefault(require("ramda/src/map"));
var _mapObjIndexed = _interopRequireDefault(require("ramda/src/mapObjIndexed"));
var _ifElse = _interopRequireDefault(require("ramda/src/ifElse"));
var _omit = _interopRequireDefault(require("ramda/src/omit"));
var _flip = _interopRequireDefault(require("ramda/src/flip"));
var _apply = _interopRequireDefault(require("ramda/src/apply"));
var _prop = _interopRequireDefault(require("ramda/src/prop"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { keys.push.apply(keys, Object.getOwnPropertySymbols(object)); } if (enumerableOnly) keys = keys.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
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; }
var flippedApply = (0, _flip["default"])(_apply["default"]);
var lookup = (0, _flip["default"])(_prop["default"]);
var isFunction = function isFunction(value) {
return typeof value === 'function';
};
var omitProps = function omitProps(keys) {
return (0, _recompose.mapProps)(function (props) {
return (0, _omit["default"])(keys, props);
});
};
var CONNECTED_PROPS = '$WITH_CONNECTED_HANDLER_CONNECTED_PROPS';
var withConnectedHandler = function withConnectedHandler(_ref) {
var handler = _ref.handler,
name = _ref.name,
_ref$actions = _ref.actions,
actions = _ref$actions === void 0 ? {} : _ref$actions,
_ref$args = _ref.args,
args = _ref$args === void 0 ? {} : _ref$args;
return (0, _recompose.compose)((0, _reactRedux.connect)(function (state, props) {
return _defineProperty({}, CONNECTED_PROPS, (0, _map["default"])((0, _ifElse["default"])(isFunction, flippedApply([state, props]), lookup(props)))(args));
}, actions), (0, _reactRedux.connect)(null), // get dispatch
(0, _recompose.withHandlers)(_defineProperty({}, name, function (_ref3) {
var connectedProps = _ref3[CONNECTED_PROPS],
dispatch = _ref3.dispatch,
rest = _objectWithoutProperties(_ref3, [CONNECTED_PROPS, "dispatch"].map(_toPropertyKey));
return function () {
var connectedActions = (0, _mapObjIndexed["default"])(function (_, actionName) {
return rest[actionName];
}, actions);
var passedProps = _objectSpread({}, connectedProps, {}, connectedActions, {
dispatch: dispatch
});
return handler(passedProps).apply(void 0, arguments);
};
})), omitProps([CONNECTED_PROPS]), _recompose.pure);
};
var _default = withConnectedHandler;
exports["default"] = _default;