@wordpress/compose
Version:
WordPress higher-order components (HOCs).
38 lines (37 loc) • 1.33 kB
JavaScript
/**
* External dependencies
*/
import { pascalCase } from 'change-case';
/**
* Given a function mapping a component to an enhanced component and modifier
* name, returns the enhanced component augmented with a generated displayName.
*
* @param mapComponent Function mapping component to enhanced component.
* @param modifierName Seed name from which to generated display name.
*
* @return Component class with generated display name assigned.
*/
export function createHigherOrderComponent(mapComponent, modifierName) {
return Inner => {
const Outer = mapComponent(Inner);
Outer.displayName = hocName(modifierName, Inner);
return Outer;
};
}
/**
* Returns a displayName for a higher-order component, given a wrapper name.
*
* @example
* hocName( 'MyMemo', Widget ) === 'MyMemo(Widget)';
* hocName( 'MyMemo', <div /> ) === 'MyMemo(Component)';
*
* @param name Name assigned to higher-order component's wrapper component.
* @param Inner Wrapped component inside higher-order component.
* @return Wrapped name of higher-order component.
*/
const hocName = (name, Inner) => {
const inner = Inner.displayName || Inner.name || 'Component';
const outer = pascalCase(name !== null && name !== void 0 ? name : '');
return `${outer}(${inner})`;
};
//# sourceMappingURL=index.js.map