react-with-hoc
Version:
Work with React and HOCs (Higher-Order Components)
33 lines • 4.18 kB
JavaScript
import React from "react";
import { newHoc } from "../utils/newHoc";
/**
* adds default value to a prop, so it can still receive a value but it now has a default one
* @see {@link withDefaults} {@link withFactory} {@link withOverride} {@link withOverrides}
* @example
* function CardWithIcon({ content, icon }: {
* content: string;
* icon: "star" | "heart" | ...;
* }) {
* return <>...</>
* }
* const StandardCard = withDefault("icon", "star")(CardWithIcon);
*
* <StandardCard content="some content" />
* // is equivalent to
* <CardWithIcon icon="star" content="some content" />
*
* // but
* <StandardCard content="some content" icon="heart" />
* // is equivalent to
* <CardWithIcon content="some content" icon="heart" /> // it propagates the new value
*/
export const withDefault = newHoc(function withDefault(Component, propName, value) {
return function WithDefault(props) {
return /*#__PURE__*/React.createElement(Component, {
[propName]: value,
...props
});
};
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm5ld0hvYyIsIndpdGhEZWZhdWx0IiwiQ29tcG9uZW50IiwicHJvcE5hbWUiLCJ2YWx1ZSIsIldpdGhEZWZhdWx0IiwicHJvcHMiLCJjcmVhdGVFbGVtZW50Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvY3Mvd2l0aERlZmF1bHQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnRUeXBlLCBGdW5jdGlvbkNvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgSGFzQWxsUHJvcHNGbixcbiAgSWZUaGVuRm4sXG4gIEludGVyc2VjdGlvbkZuLFxuICBTZXRPcHRpb25hbEZuLFxufSBmcm9tIFwiLi4vdHlwZXMvRm5cIjtcbmltcG9ydCB7IEhvYyB9IGZyb20gXCIuLi90eXBlcy9Ib2NcIjtcbmltcG9ydCB7IG5ld0hvYyB9IGZyb20gXCIuLi91dGlscy9uZXdIb2NcIjtcblxudHlwZSBXaXRoRGVmYXVsdEhvYyA9IDxQcm9wVmFsdWUsIFByb3BOYW1lIGV4dGVuZHMgc3RyaW5nPihcbiAgcHJvcE5hbWU6IFByb3BOYW1lLFxuICB2YWx1ZTogUHJvcFZhbHVlLFxuKSA9PiBIb2M8XG4gIFtcbiAgICBJZlRoZW5GbjxcbiAgICAgIEhhc0FsbFByb3BzRm48UHJvcE5hbWU+LFxuICAgICAgW1xuICAgICAgICAuLi4oUHJvcFZhbHVlIGV4dGVuZHMgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnlcbiAgICAgICAgICA/IFtdXG4gICAgICAgICAgOiBbSW50ZXJzZWN0aW9uRm48W1Byb3BOYW1lLCBQcm9wVmFsdWVdPl0pLFxuICAgICAgICBTZXRPcHRpb25hbEZuPFByb3BOYW1lPixcbiAgICAgIF1cbiAgICA+LFxuICBdXG4+O1xuXG4vKipcbiAqIGFkZHMgZGVmYXVsdCB2YWx1ZSB0byBhIHByb3AsIHNvIGl0IGNhbiBzdGlsbCByZWNlaXZlIGEgdmFsdWUgYnV0IGl0IG5vdyBoYXMgYSBkZWZhdWx0IG9uZVxuICogQHNlZSB7QGxpbmsgd2l0aERlZmF1bHRzfSB7QGxpbmsgd2l0aEZhY3Rvcnl9IHtAbGluayB3aXRoT3ZlcnJpZGV9IHtAbGluayB3aXRoT3ZlcnJpZGVzfVxuICogQGV4YW1wbGVcbiAqIGZ1bmN0aW9uIENhcmRXaXRoSWNvbih7IGNvbnRlbnQsIGljb24gfToge1xuICogICBjb250ZW50OiBzdHJpbmc7XG4gKiAgIGljb246IFwic3RhclwiIHwgXCJoZWFydFwiIHwgLi4uO1xuICogfSkge1xuICogICByZXR1cm4gPD4uLi48Lz5cbiAqIH1cbiAqIGNvbnN0IFN0YW5kYXJkQ2FyZCA9IHdpdGhEZWZhdWx0KFwiaWNvblwiLCBcInN0YXJcIikoQ2FyZFdpdGhJY29uKTtcbiAqXG4gKiA8U3RhbmRhcmRDYXJkIGNvbnRlbnQ9XCJzb21lIGNvbnRlbnRcIiAvPlxuICogLy8gaXMgZXF1aXZhbGVudCB0b1xuICogPENhcmRXaXRoSWNvbiBpY29uPVwic3RhclwiIGNvbnRlbnQ9XCJzb21lIGNvbnRlbnRcIiAvPlxuICpcbiAqIC8vIGJ1dFxuICogPFN0YW5kYXJkQ2FyZCBjb250ZW50PVwic29tZSBjb250ZW50XCIgaWNvbj1cImhlYXJ0XCIgLz5cbiAqIC8vIGlzIGVxdWl2YWxlbnQgdG9cbiAqIDxDYXJkV2l0aEljb24gY29udGVudD1cInNvbWUgY29udGVudFwiIGljb249XCJoZWFydFwiIC8+IC8vIGl0IHByb3BhZ2F0ZXMgdGhlIG5ldyB2YWx1ZVxuICovXG5leHBvcnQgY29uc3Qgd2l0aERlZmF1bHQgPSBuZXdIb2M8V2l0aERlZmF1bHRIb2M+KGZ1bmN0aW9uIHdpdGhEZWZhdWx0KFxuICBDb21wb25lbnQ6IENvbXBvbmVudFR5cGUsXG4gIHByb3BOYW1lOiBzdHJpbmcsXG4gIHZhbHVlOiBhbnksXG4pOiBGdW5jdGlvbkNvbXBvbmVudCB7XG4gIHJldHVybiBmdW5jdGlvbiBXaXRoRGVmYXVsdChwcm9wczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiA8Q29tcG9uZW50IHsuLi57IFtwcm9wTmFtZV06IHZhbHVlIH19IHsuLi5wcm9wc30gLz47XG4gIH07XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsS0FBSyxNQUE0QyxPQUFPO0FBUS9ELFNBQVNDLE1BQU0sUUFBUSxpQkFBaUI7QUFtQnhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sTUFBTUMsV0FBVyxHQUFHRCxNQUFNLENBQWlCLFNBQVNDLFdBQVdBLENBQ3BFQyxTQUF3QixFQUN4QkMsUUFBZ0IsRUFDaEJDLEtBQVUsRUFDUztFQUNuQixPQUFPLFNBQVNDLFdBQVdBLENBQUNDLEtBQVUsRUFBZTtJQUNuRCxvQkFBT1AsS0FBQSxDQUFBUSxhQUFBLENBQUNMLFNBQVM7TUFBTyxDQUFDQyxRQUFRLEdBQUdDLEtBQUs7TUFBQSxHQUFRRTtJQUFLLENBQUcsQ0FBQztFQUM1RCxDQUFDO0FBQ0gsQ0FBQyxDQUFDIn0=
//# sourceMappingURL=withDefault.js.map