Repository URL to install this package:
|
Version:
1.2.12 ▾
|
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.withRemapProps = withRemapProps;
exports.remapProps = exports.remap = remap;
exports.default = void 0;
var _react = _interopRequireDefault(require("react"));
var _mobxReact = require("xmobx/mobx-react");
var _exotic = require("exotic");
var _observableUtils = require("../observable-utils");
var _jsxFileName = "state-tree/remapProps.js";
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }
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; }
// const withContext = (childContextTypes, getChildContext) => Target => {
// const factory = observer(Target)
// class WithContext extends React.Component {
// static childContextTypes = childContextTypes
// getChildContext = () => getChildContext(this.props)
// render() {
// return <Target {...this.props} />
// }
// }
// return WithContext
// }
// const mapKeys = (obj, func) =>
// Object.keys(obj).reduce((result, key) => {
// const val = obj[key]
// result[func(val, key)] = val
// return result
// }, {})
/**
* @desc remap properties from 1 to another, for example, apis with inconsistent naming
* @symb 🗺
*
* @param {string | Object} from property name string, or {[from]: to}
* @param {string} [to=undefined] property name to change key to
*
* @example
* const disToDat = remap({dis: 'dat'})
* disToDat({dis: 1, other: true})
* //=> {dist: 1, other: true}
*
*/
function remap(from, to) {
const remapFromTo = (0, _exotic.isObj)(from) ? from : {
[from]: to
};
const keys = Object.keys(remapFromTo);
/**
* @param {React.Props | Object} props
* @return {React.Props | Object}
*/
return function remapObjCurried(props) {
// ensure they are not frozen
const remapped = _objectSpread({}, props); // can add for perf if needed
// let didChange = false
// if hasOwnProp ? didChange = true
for (let index = 0; index < keys.length; index++) {
const fromKey = keys[index];
if ((0, _exotic.hasOwnProp)(props, fromKey)) {
const toKey = remapFromTo[fromKey];
remapped[toKey] = remapFromTo[fromKey];
}
}
return remapped;
};
}
function toDocumentObjectModelAttributes(props) {
const validProps = {};
for (const key in props) {
if (/^(data-|aria-)/.test(key)) {
validProps[key] = props[key];
}
if (/^(data-|aria-)/.test(key)) {
validProps[key] = props[key];
}
}
}
/**
* @see remapProps
*
* only problem with this is the Refs
* @see https://stackoverflow.com/questions/42980402/react-passing-ref-from-dumb-componentchild-to-smart-componentparent
*/
function withRemapProps(from, to) {
const remapPropsFor = remap(from, to);
return function remapPropsDecorator(Target) {
var _class;
let RemappedPropsComponent = (0, _mobxReact.observer)(_class = class RemappedPropsComponent extends _react.default.Component {
// @computed
get attributes() {
return remapPropsFor(this.props);
}
render() {
return _react.default.createElement(Target, _extends({}, this.attributes, {
__source: {
fileName: _jsxFileName,
lineNumber: 97
},
__self: this
}));
}
}) || _class;
(0, _observableUtils.decorateComponentStatics)(RemappedPropsComponent, Target);
return RemappedPropsComponent;
};
}
var _default = remap;
exports.default = _default;