UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

62 lines 1.78 kB
import React from 'react'; import { toSnakeCase } from "../component-helper.js"; export function withCamelCaseProps(Base) { const Component = Base; const Derived = props => { return React.createElement(Component, convertCamelCasePropsToSnakeCase(props)); }; Object.defineProperty(Derived, 'name', { value: Base.name }); for (const name in Base) { Object.defineProperty(Derived, name, { value: Base[name] }); } return Derived; } export function classWithCamelCaseProps(Base) { const Component = Base; class Derived extends Base { componentDidMount() {} render() { if (this.props !== this._prevProps) { this._prevProps = this.props; this._elem = React.createElement(Component, convertCamelCasePropsToSnakeCase(this.props)); } return this._elem; } } Object.defineProperty(Derived, 'name', { value: Base.name }); Object.defineProperty(Derived, 'displayName', { value: Base.displayName || Base.name }); return Derived; } export function convertCamelCasePropsToSnakeCase(props, validProperties) { const isFrozen = Object.isFrozen(props); const newProps = isFrozen ? { ...props } : props; const hasValidProperties = Array.isArray(validProperties); for (const key in props) { switch (key) { case 'className': { continue; } } if (/^[a-z]+[A-Z]/.test(key)) { const name = toSnakeCase(key); if (hasValidProperties && !(validProperties !== null && validProperties !== void 0 && validProperties.includes(name))) { continue; } newProps[name] = props[key]; delete newProps[key]; } } return isFrozen ? Object.freeze(newProps) : newProps; } //# sourceMappingURL=withCamelCaseProps.js.map