@quarkly/atomize
Version:
Library for creating atomic react components
59 lines (43 loc) • 1.7 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports["default"] = exports.normalizer = exports.applynormalizer = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _isObject2 = _interopRequireDefault(require("lodash/fp/isObject"));
var _isString2 = _interopRequireDefault(require("lodash/fp/isString"));
var _react = _interopRequireDefault(require("react"));
var _styledComponents = require("styled-components");
var normalizeMap = {
as: function as(value) {
return (0, _isString2["default"])(value) || (0, _isObject2["default"])(value);
}
};
var applynormalizer = function applynormalizer(key, value) {
if (!normalizeMap[key]) return value;
if (normalizeMap[key](value)) return value;
return null;
};
exports.applynormalizer = applynormalizer;
var normalizer = function normalizer(props) {
return Object.keys(props).reduce(function (acc, key) {
acc[key] = applynormalizer(key, props[key]);
return acc;
}, {});
};
exports.normalizer = normalizer;
var _default = function _default(Tag, cb, cleanProps) {
return _react["default"].forwardRef(function (props, ref) {
var theme = (0, _styledComponents.useTheme)(props);
var _cb = cb((0, _extends2["default"])({
theme: theme
}, props)),
cssObject = _cb.cssObject,
cleanedProps = _cb.cleanedProps;
return _react["default"].createElement(Tag, (0, _extends2["default"])((0, _extends2["default"])({
ref: ref
}, normalizer(cleanProps ? cleanedProps : props)), {}, {
cssObject: cssObject
}));
});
};
exports["default"] = _default;