UNPKG

@quarkly/atomize

Version:

Library for creating atomic react components

59 lines (43 loc) 1.7 kB
"use strict"; 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;