react-with-hoc
Version:
Work with React and HOCs (Higher-Order Components)
33 lines • 4.32 kB
JavaScript
import React from "react";
import { newHoc } from "../utils/newHoc";
/**
* adds a prop value to the component, the given value can not be override, which means the given value overrides others
* @see {@link withOverrides} {@link withFactory} {@link withDefault} {@link withDefaults}
* @example
* function CardWithIcon({ content, icon }: {
* content: string;
* icon: "star" | "heart" | ...;
* }) {
* return <>...</>
* }
* const StandardCard = withOverride("icon", "star")(CardWithIcon);
*
* <StandardCard content="some content" />
* // is equivalent to
* <CardWithIcon content="some content" icon="star" />
*
* // and
* <StandardCard content="some content" icon="heart" /> // ❌ is a typescript error, but even though
* // is equivalent to
* <CardWithIcon content="some content" icon="star" />
*/
export const withOverride = newHoc(function withOverride(Component, propName, value) {
return function WithOverride(props) {
return /*#__PURE__*/React.createElement(Component, {
...props,
[propName]: value
});
};
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm5ld0hvYyIsIndpdGhPdmVycmlkZSIsIkNvbXBvbmVudCIsInByb3BOYW1lIiwidmFsdWUiLCJXaXRoT3ZlcnJpZGUiLCJwcm9wcyIsImNyZWF0ZUVsZW1lbnQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9jcy93aXRoT3ZlcnJpZGUudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnRUeXBlLCBGdW5jdGlvbkNvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgSGFzQWxsUHJvcHNGbixcbiAgSWZUaGVuRm4sXG4gIEludGVyc2VjdGlvbkZuLFxuICBLZWVwTmV2ZXJzRm4sXG4gIE9taXRGbixcbn0gZnJvbSBcIi4uL3R5cGVzL0ZuXCI7XG5pbXBvcnQgeyBIb2MgfSBmcm9tIFwiLi4vdHlwZXMvSG9jXCI7XG5pbXBvcnQgeyBuZXdIb2MgfSBmcm9tIFwiLi4vdXRpbHMvbmV3SG9jXCI7XG5cbnR5cGUgV2l0aE92ZXJyaWRlSG9jID0gPFByb3BWYWx1ZSwgUHJvcE5hbWUgZXh0ZW5kcyBzdHJpbmc+KFxuICBwcm9wTmFtZTogUHJvcE5hbWUsXG4gIHZhbHVlOiBQcm9wVmFsdWUsXG4pID0+IEhvYzxcbiAgW1xuICAgIElmVGhlbkZuPFxuICAgICAgSGFzQWxsUHJvcHNGbjxQcm9wTmFtZT4sXG4gICAgICBbXG4gICAgICAgIC4uLihQcm9wVmFsdWUgZXh0ZW5kcyAoLi4uYXJnczogYW55W10pID0+IGFueVxuICAgICAgICAgID8gW11cbiAgICAgICAgICA6IFtJbnRlcnNlY3Rpb25GbjxbUHJvcE5hbWUsIFByb3BWYWx1ZV0+XSksXG4gICAgICAgIEtlZXBOZXZlcnNGbjxPbWl0Rm48UHJvcE5hbWU+PixcbiAgICAgIF1cbiAgICA+LFxuICBdXG4+O1xuXG4vKipcbiAqIGFkZHMgYSBwcm9wIHZhbHVlIHRvIHRoZSBjb21wb25lbnQsIHRoZSBnaXZlbiB2YWx1ZSBjYW4gbm90IGJlIG92ZXJyaWRlLCB3aGljaCBtZWFucyB0aGUgZ2l2ZW4gdmFsdWUgb3ZlcnJpZGVzIG90aGVyc1xuICogQHNlZSB7QGxpbmsgd2l0aE92ZXJyaWRlc30ge0BsaW5rIHdpdGhGYWN0b3J5fSB7QGxpbmsgd2l0aERlZmF1bHR9IHtAbGluayB3aXRoRGVmYXVsdHN9XG4gKiBAZXhhbXBsZVxuICogZnVuY3Rpb24gQ2FyZFdpdGhJY29uKHsgY29udGVudCwgaWNvbiB9OiB7XG4gKiAgIGNvbnRlbnQ6IHN0cmluZztcbiAqICAgaWNvbjogXCJzdGFyXCIgfCBcImhlYXJ0XCIgfCAuLi47XG4gKiB9KSB7XG4gKiAgIHJldHVybiA8Pi4uLjwvPlxuICogfVxuICogY29uc3QgU3RhbmRhcmRDYXJkID0gd2l0aE92ZXJyaWRlKFwiaWNvblwiLCBcInN0YXJcIikoQ2FyZFdpdGhJY29uKTtcbiAqXG4gKiA8U3RhbmRhcmRDYXJkIGNvbnRlbnQ9XCJzb21lIGNvbnRlbnRcIiAvPlxuICogLy8gaXMgZXF1aXZhbGVudCB0b1xuICogPENhcmRXaXRoSWNvbiBjb250ZW50PVwic29tZSBjb250ZW50XCIgaWNvbj1cInN0YXJcIiAvPlxuICpcbiAqIC8vIGFuZFxuICogPFN0YW5kYXJkQ2FyZCBjb250ZW50PVwic29tZSBjb250ZW50XCIgaWNvbj1cImhlYXJ0XCIgLz4gLy8g4p2MIGlzIGEgdHlwZXNjcmlwdCBlcnJvciwgYnV0IGV2ZW4gdGhvdWdoXG4gKiAvLyBpcyBlcXVpdmFsZW50IHRvXG4gKiA8Q2FyZFdpdGhJY29uIGNvbnRlbnQ9XCJzb21lIGNvbnRlbnRcIiBpY29uPVwic3RhclwiIC8+XG4gKi9cbmV4cG9ydCBjb25zdCB3aXRoT3ZlcnJpZGUgPSBuZXdIb2M8V2l0aE92ZXJyaWRlSG9jPihmdW5jdGlvbiB3aXRoT3ZlcnJpZGUoXG4gIENvbXBvbmVudDogQ29tcG9uZW50VHlwZSxcbiAgcHJvcE5hbWU6IHN0cmluZyxcbiAgdmFsdWU6IGFueSxcbik6IEZ1bmN0aW9uQ29tcG9uZW50IHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFdpdGhPdmVycmlkZShwcm9wczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiA8Q29tcG9uZW50IHsuLi5wcm9wc30gey4uLnsgW3Byb3BOYW1lXTogdmFsdWUgfX0gLz47XG4gIH07XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsS0FBSyxNQUE0QyxPQUFPO0FBUy9ELFNBQVNDLE1BQU0sUUFBUSxpQkFBaUI7QUFtQnhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sTUFBTUMsWUFBWSxHQUFHRCxNQUFNLENBQWtCLFNBQVNDLFlBQVlBLENBQ3ZFQyxTQUF3QixFQUN4QkMsUUFBZ0IsRUFDaEJDLEtBQVUsRUFDUztFQUNuQixPQUFPLFNBQVNDLFlBQVlBLENBQUNDLEtBQVUsRUFBZTtJQUNwRCxvQkFBT1AsS0FBQSxDQUFBUSxhQUFBLENBQUNMLFNBQVM7TUFBQSxHQUFLSSxLQUFLO01BQVEsQ0FBQ0gsUUFBUSxHQUFHQztJQUFLLENBQUssQ0FBQztFQUM1RCxDQUFDO0FBQ0gsQ0FBQyxDQUFDIn0=
//# sourceMappingURL=withOverride.js.map