@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
56 lines • 1.6 kB
JavaScript
import React from 'react';
import { toCamelCase } from "../component-helper.js";
export function withSnakeCaseProps(Base) {
const Component = Base;
const Derived = props => {
return React.createElement(Component, convertSnakeCaseProps(props));
};
Object.defineProperty(Derived, 'name', {
value: Base.name
});
for (const name in Base) {
Object.defineProperty(Derived, name, {
value: Base[name]
});
}
return Derived;
}
export function classWithSnakeCaseProps(Base) {
const Component = Base;
class Derived extends Base {
componentDidMount() {}
render() {
if (this.props !== this._prevProps) {
this._prevProps = this.props;
this._elem = React.createElement(Component, convertSnakeCaseProps(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 convertSnakeCaseProps(props, {
overrideExistingValue = true
} = {}) {
const isFrozen = Object.isFrozen(props);
const newProps = isFrozen ? {
...props
} : props;
for (const key in props) {
if (key.includes('_') && /^[a-z]+/.test(key) && !/[A-Z]/.test(key)) {
const newKey = toCamelCase(key);
if (overrideExistingValue || newProps[newKey] === undefined) {
newProps[toCamelCase(key)] = props[key];
}
delete newProps[key];
}
}
return isFrozen ? Object.freeze(newProps) : newProps;
}
//# sourceMappingURL=withSnakeCaseProps.js.map