react-with-hoc
Version:
Work with React and HOCs (Higher-Order Components)
34 lines • 4.25 kB
JavaScript
import React from "react";
import { newHoc } from "../utils/newHoc";
/**
* adds default values to many props, so they can still receive values but they now have a default
* @see {@link withDefault} {@link withFactory} {@link withOverrides} {@link withOverride}
* @example
* function Card({ content, icon, border }: {
* content: string;
* icon: "star" | "heart" | ...;
* border: "none" | "dashed" | ...
* }) {
* return <>...</>
* }
* const StandardCard = withDefaults({icon: "star", border: "rounded"})(Card);
*
* <StandardCard content="some content" />
* // is equivalent to
* <CardWithIcon icon="star" border="rounded" content="some content" />
*
* // but
* <StandardCard content="some content" icon="heart" border="dashed" />
* // is equivalent to
* <CardWithIcon content="some content" icon="heart" border="dashed" /> // it propagates the new value
*/
export const withDefaults = newHoc(function withDefaults(Component, map) {
return function WithDefaults(props) {
return /*#__PURE__*/React.createElement(Component, {
...map,
...props
});
};
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm5ld0hvYyIsIndpdGhEZWZhdWx0cyIsIkNvbXBvbmVudCIsIm1hcCIsIldpdGhEZWZhdWx0cyIsInByb3BzIiwiY3JlYXRlRWxlbWVudCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob2NzL3dpdGhEZWZhdWx0cy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudFR5cGUsIEZ1bmN0aW9uQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBGbiwgSW50ZXJzZWN0aW9uRm4sIFBpcGUsIFNldE9wdGlvbmFsRm4sIFRvU2NoZW1hIH0gZnJvbSBcIi4uL3R5cGVzL0ZuXCI7XG5pbXBvcnQgeyBIb2MgfSBmcm9tIFwiLi4vdHlwZXMvSG9jXCI7XG5pbXBvcnQgeyBuZXdIb2MgfSBmcm9tIFwiLi4vdXRpbHMvbmV3SG9jXCI7XG5cbmludGVyZmFjZSBXaXRoRGVmYXVsdHNGbjxTY2hlbWEgZXh0ZW5kcyBbc3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sLCBhbnldPlxuICBleHRlbmRzIEZuIHtcbiAgcmV0dXJuOiBQaXBlPFxuICAgIHRoaXNbXCJhcmcwXCJdLFxuICAgIFtJbnRlcnNlY3Rpb25GbjxTY2hlbWE+LCBTZXRPcHRpb25hbEZuPFNjaGVtYVswXT5dXG4gID47XG59XG5cbnR5cGUgV2l0aERlZmF1bHRzSG9jID0gPE1hcCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgbWFwOiBNYXAsXG4pID0+IEhvYzxbV2l0aERlZmF1bHRzRm48VG9TY2hlbWE8TWFwPj5dPjtcblxuLyoqXG4gKiBhZGRzIGRlZmF1bHQgdmFsdWVzIHRvIG1hbnkgcHJvcHMsIHNvIHRoZXkgY2FuIHN0aWxsIHJlY2VpdmUgdmFsdWVzIGJ1dCB0aGV5IG5vdyBoYXZlIGEgZGVmYXVsdFxuICogQHNlZSB7QGxpbmsgd2l0aERlZmF1bHR9IHtAbGluayB3aXRoRmFjdG9yeX0ge0BsaW5rIHdpdGhPdmVycmlkZXN9IHtAbGluayB3aXRoT3ZlcnJpZGV9XG4gKiBAZXhhbXBsZVxuICogZnVuY3Rpb24gQ2FyZCh7IGNvbnRlbnQsIGljb24sIGJvcmRlciB9OiB7XG4gKiAgIGNvbnRlbnQ6IHN0cmluZztcbiAqICAgaWNvbjogXCJzdGFyXCIgfCBcImhlYXJ0XCIgfCAuLi47XG4gKiAgIGJvcmRlcjogXCJub25lXCIgfCBcImRhc2hlZFwiIHwgLi4uXG4gKiB9KSB7XG4gKiAgIHJldHVybiA8Pi4uLjwvPlxuICogfVxuICogY29uc3QgU3RhbmRhcmRDYXJkID0gd2l0aERlZmF1bHRzKHtpY29uOiBcInN0YXJcIiwgYm9yZGVyOiBcInJvdW5kZWRcIn0pKENhcmQpO1xuICpcbiAqIDxTdGFuZGFyZENhcmQgY29udGVudD1cInNvbWUgY29udGVudFwiIC8+XG4gKiAvLyBpcyBlcXVpdmFsZW50IHRvXG4gKiA8Q2FyZFdpdGhJY29uIGljb249XCJzdGFyXCIgYm9yZGVyPVwicm91bmRlZFwiIGNvbnRlbnQ9XCJzb21lIGNvbnRlbnRcIiAvPlxuICpcbiAqIC8vIGJ1dFxuICogPFN0YW5kYXJkQ2FyZCBjb250ZW50PVwic29tZSBjb250ZW50XCIgaWNvbj1cImhlYXJ0XCIgYm9yZGVyPVwiZGFzaGVkXCIgLz5cbiAqIC8vIGlzIGVxdWl2YWxlbnQgdG9cbiAqIDxDYXJkV2l0aEljb24gY29udGVudD1cInNvbWUgY29udGVudFwiIGljb249XCJoZWFydFwiIGJvcmRlcj1cImRhc2hlZFwiIC8+IC8vIGl0IHByb3BhZ2F0ZXMgdGhlIG5ldyB2YWx1ZVxuICovXG5leHBvcnQgY29uc3Qgd2l0aERlZmF1bHRzID0gbmV3SG9jPFdpdGhEZWZhdWx0c0hvYz4oZnVuY3Rpb24gd2l0aERlZmF1bHRzKFxuICBDb21wb25lbnQ6IENvbXBvbmVudFR5cGUsXG4gIG1hcDogb2JqZWN0LFxuKTogRnVuY3Rpb25Db21wb25lbnQge1xuICByZXR1cm4gZnVuY3Rpb24gV2l0aERlZmF1bHRzKHByb3BzOiBvYmplY3QpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIDxDb21wb25lbnQgey4uLm1hcH0gey4uLnByb3BzfSAvPjtcbiAgfTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxLQUFLLE1BQTRDLE9BQU87QUFHL0QsU0FBU0MsTUFBTSxRQUFRLGlCQUFpQjtBQWN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sTUFBTUMsWUFBWSxHQUFHRCxNQUFNLENBQWtCLFNBQVNDLFlBQVlBLENBQ3ZFQyxTQUF3QixFQUN4QkMsR0FBVyxFQUNRO0VBQ25CLE9BQU8sU0FBU0MsWUFBWUEsQ0FBQ0MsS0FBYSxFQUFlO0lBQ3ZELG9CQUFPTixLQUFBLENBQUFPLGFBQUEsQ0FBQ0osU0FBUztNQUFBLEdBQUtDLEdBQUc7TUFBQSxHQUFNRTtJQUFLLENBQUcsQ0FBQztFQUMxQyxDQUFDO0FBQ0gsQ0FBQyxDQUFDIn0=
//# sourceMappingURL=withDefaults.js.map