@quarkly/atomize
Version:
Library for creating atomic react components
38 lines (36 loc) • 1.13 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import _isObject from "lodash/fp/isObject";
import _isString from "lodash/fp/isString";
import React from 'react';
import { useTheme } from 'styled-components';
var normalizeMap = {
as: function as(value) {
return _isString(value) || _isObject(value);
}
};
export var applynormalizer = function applynormalizer(key, value) {
if (!normalizeMap[key]) return value;
if (normalizeMap[key](value)) return value;
return null;
};
export var normalizer = function normalizer(props) {
return Object.keys(props).reduce(function (acc, key) {
acc[key] = applynormalizer(key, props[key]);
return acc;
}, {});
};
export default (function (Tag, cb, cleanProps) {
return React.forwardRef(function (props, ref) {
var theme = useTheme(props);
var _cb = cb(_extends({
theme: theme
}, props)),
cssObject = _cb.cssObject,
cleanedProps = _cb.cleanedProps;
return React.createElement(Tag, _extends(_extends({
ref: ref
}, normalizer(cleanProps ? cleanedProps : props)), {}, {
cssObject: cssObject
}));
});
});