UNPKG

react-with-hoc

Version:

Work with React and HOCs (Higher-Order Components)

90 lines (89 loc) 11.6 kB
"use strict"; var _react = require("react"); var _newHoc = require("../utils/newHoc"); /** * Wraps the component with the provided Component Wrapper * * @example * const NewComponent = withWrapper(Wrapper)(Component) * <NewComponent a="a" b="b" c="c" /> * // is equivalent to * <Wrapper> // by default, it does not bring any prop * <Component a="a" b="b" c="c" /> * </Wrapper> * * @example * const NewComponent = withWrapper(Wrapper, { pickProps: ['a', 'b'] })(Component) * <NewComponent a="a" b="b" c="c" /> * // is equivalent to * <Wrapper a="a" b="b"> * <Component a="a" b="b" c="c" /> * </Wrapper> * * @example * const NewComponent = withWrapper(Wrapper, { omitProps: ['a', 'b'] })(Component) * <NewComponent a="a" b="b" c="c" /> * // is equivalent to * <Wrapper c="c"> * <Component a="a" b="b" c="c" /> * </Wrapper> * * @example * // to carry all props, use omitProps with empty array * const NewComponent = withWrapper(Wrapper, { omitProps: [] })(Component) * <NewComponent a="a" b="b" c="c" /> * // is equivalent to * <Wrapper a="a" b="b" c="c"> * <Component a="a" b="b" c="c" /> * </Wrapper> */ const withWrapper = exports.withWrapper = (0, _newHoc.newHoc)(function withWrapper(Component, Wrapper, { pickProps, omitProps } = { pickProps: [] }) { if (process.env.NODE_ENV !== "production") { const bothAssigned = pickProps && omitProps; const noneAssigned = !pickProps && !omitProps; if (bothAssigned || noneAssigned) { throw new Error("withWrapper should have either pickProps or omitProps assigned"); } } const set = new Set(pickProps || omitProps); return function WithWrapper(props) { if (set.size === 0 && pickProps) { return /*#__PURE__*/_react.default.createElement(Wrapper, null, /*#__PURE__*/_react.default.createElement(Component, { ...props })); } if (set.size === 0 && omitProps) { return /*#__PURE__*/_react.default.createElement(Wrapper, { ...props }, /*#__PURE__*/_react.default.createElement(Component, { ...props })); } const parentProps = {}; if (pickProps) { for (const prop in props) { if (set.has(prop)) { parentProps[prop] = props[prop]; } } } else if (omitProps) { for (const prop in props) { if (!set.has(prop)) { parentProps[prop] = props[prop]; } } } return /*#__PURE__*/_react.default.createElement(Wrapper, { ...parentProps }, /*#__PURE__*/_react.default.createElement(Component, { ...props })); }; }); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJyZXF1aXJlIiwiX25ld0hvYyIsIndpdGhXcmFwcGVyIiwiZXhwb3J0cyIsIm5ld0hvYyIsIkNvbXBvbmVudCIsIldyYXBwZXIiLCJwaWNrUHJvcHMiLCJvbWl0UHJvcHMiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJib3RoQXNzaWduZWQiLCJub25lQXNzaWduZWQiLCJFcnJvciIsInNldCIsIlNldCIsIldpdGhXcmFwcGVyIiwicHJvcHMiLCJzaXplIiwiZGVmYXVsdCIsImNyZWF0ZUVsZW1lbnQiLCJwYXJlbnRQcm9wcyIsInByb3AiLCJoYXMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9jcy93aXRoV3JhcHBlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudFR5cGUsIEZ1bmN0aW9uQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBJbnRlcnNlY3Rpb25GbiwgVG9TY2hlbWEgfSBmcm9tIFwiLi4vdHlwZXMvRm5cIjtcbmltcG9ydCB7IEhvYyB9IGZyb20gXCIuLi90eXBlcy9Ib2NcIjtcbmltcG9ydCB7IG5ld0hvYyB9IGZyb20gXCIuLi91dGlscy9uZXdIb2NcIjtcblxuZXhwb3J0IGludGVyZmFjZSBXaXRoV3JhcHBlckhvYyB7XG4gIDxcbiAgICBjb25zdCBXcmFwcGVyUHJvcHMsXG4gICAgY29uc3QgUGlja09wdGlvbnMgZXh0ZW5kcyBzdHJpbmdbXSA9IFtuZXZlcl0sXG4gICAgY29uc3QgT21pdE9wdGlvbnMgZXh0ZW5kcyBzdHJpbmdbXSA9IFtuZXZlcl0sXG4gID4oXG4gICAgV3JhcHBlcjogQ29tcG9uZW50VHlwZTxXcmFwcGVyUHJvcHM+LFxuICAgIG9wdGlvbnM/OlxuICAgICAgfCB7XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICAgKiBjb25zdCBOZXdDb21wb25lbnQgPSB3aXRoV3JhcHBlcihXcmFwcGVyLCB7IHBpY2tQcm9wczogWydhJywgJ2InXSB9KShDb21wb25lbnQpXG4gICAgICAgICAgICogPE5ld0NvbXBvbmVudCBhPVwiYVwiIGI9XCJiXCIgYz1cImNcIiAvPlxuICAgICAgICAgICAqIC8vIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgICAgKiA8V3JhcHBlciBhPVwiYVwiIGI9XCJiXCI+XG4gICAgICAgICAgICogICA8Q29tcG9uZW50IGE9XCJhXCIgYj1cImJcIiBjPVwiY1wiIC8+XG4gICAgICAgICAgICogPC9XcmFwcGVyPlxuICAgICAgICAgICAqL1xuICAgICAgICAgIHBpY2tQcm9wczogUGlja09wdGlvbnM7XG4gICAgICAgICAgb21pdFByb3BzPzogdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB8IHtcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgICAqIGNvbnN0IE5ld0NvbXBvbmVudCA9IHdpdGhXcmFwcGVyKFdyYXBwZXIsIHsgb21pdFByb3BzOiBbJ2EnLCAnYiddIH0pKENvbXBvbmVudClcbiAgICAgICAgICAgKiA8TmV3Q29tcG9uZW50IGE9XCJhXCIgYj1cImJcIiBjPVwiY1wiIC8+XG4gICAgICAgICAgICogLy8gaXMgZXF1aXZhbGVudCB0b1xuICAgICAgICAgICAqIDxXcmFwcGVyIGM9XCJjXCI+XG4gICAgICAgICAgICogICA8Q29tcG9uZW50IGE9XCJhXCIgYj1cImJcIiBjPVwiY1wiIC8+XG4gICAgICAgICAgICogPC9XcmFwcGVyPlxuICAgICAgICAgICAqL1xuICAgICAgICAgIG9taXRQcm9wczogT21pdE9wdGlvbnM7XG4gICAgICAgICAgcGlja1Byb3BzPzogdW5kZWZpbmVkO1xuICAgICAgICB9LFxuICApOiBQaWNrT3B0aW9ucyBleHRlbmRzIFtuZXZlcl1cbiAgICA/IE9taXRPcHRpb25zIGV4dGVuZHMgW25ldmVyXVxuICAgICAgPyAvLyBoYXMgbm9uZVxuICAgICAgICBIb2M8W10+XG4gICAgICA6IC8vIGhhcyBvbWl0XG4gICAgICAgIEhvYzxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBJbnRlcnNlY3Rpb25GbjxcbiAgICAgICAgICAgICAgRXhjbHVkZTxcbiAgICAgICAgICAgICAgICBUb1NjaGVtYTxXcmFwcGVyUHJvcHM+LFxuICAgICAgICAgICAgICAgIFtPbWl0T3B0aW9uc1tudW1iZXJdIHwgXCJjaGlsZHJlblwiLCBhbnldXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgID4sXG4gICAgICAgICAgXVxuICAgICAgICA+XG4gICAgOiAvLyBoYXMgcGlja1xuICAgICAgSG9jPFxuICAgICAgICBbXG4gICAgICAgICAgSW50ZXJzZWN0aW9uRm48XG4gICAgICAgICAgICBFeHRyYWN0PFxuICAgICAgICAgICAgICBFeGNsdWRlPFRvU2NoZW1hPFdyYXBwZXJQcm9wcz4sIFtcImNoaWxkcmVuXCIsIGFueV0+LFxuICAgICAgICAgICAgICBbUGlja09wdGlvbnNbbnVtYmVyXSwgYW55XVxuICAgICAgICAgICAgPlxuICAgICAgICAgID4sXG4gICAgICAgIF1cbiAgICAgID47XG59XG5cbi8qKlxuICogV3JhcHMgdGhlIGNvbXBvbmVudCB3aXRoIHRoZSBwcm92aWRlZCBDb21wb25lbnQgV3JhcHBlclxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBOZXdDb21wb25lbnQgPSB3aXRoV3JhcHBlcihXcmFwcGVyKShDb21wb25lbnQpXG4gKiA8TmV3Q29tcG9uZW50IGE9XCJhXCIgYj1cImJcIiBjPVwiY1wiIC8+XG4gKiAvLyBpcyBlcXVpdmFsZW50IHRvXG4gKiA8V3JhcHBlcj4gLy8gYnkgZGVmYXVsdCwgaXQgZG9lcyBub3QgYnJpbmcgYW55IHByb3BcbiAqICAgPENvbXBvbmVudCBhPVwiYVwiIGI9XCJiXCIgYz1cImNcIiAvPlxuICogPC9XcmFwcGVyPlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBOZXdDb21wb25lbnQgPSB3aXRoV3JhcHBlcihXcmFwcGVyLCB7IHBpY2tQcm9wczogWydhJywgJ2InXSB9KShDb21wb25lbnQpXG4gKiA8TmV3Q29tcG9uZW50IGE9XCJhXCIgYj1cImJcIiBjPVwiY1wiIC8+XG4gKiAvLyBpcyBlcXVpdmFsZW50IHRvXG4gKiA8V3JhcHBlciBhPVwiYVwiIGI9XCJiXCI+XG4gKiAgIDxDb21wb25lbnQgYT1cImFcIiBiPVwiYlwiIGM9XCJjXCIgLz5cbiAqIDwvV3JhcHBlcj5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgTmV3Q29tcG9uZW50ID0gd2l0aFdyYXBwZXIoV3JhcHBlciwgeyBvbWl0UHJvcHM6IFsnYScsICdiJ10gfSkoQ29tcG9uZW50KVxuICogPE5ld0NvbXBvbmVudCBhPVwiYVwiIGI9XCJiXCIgYz1cImNcIiAvPlxuICogLy8gaXMgZXF1aXZhbGVudCB0b1xuICogPFdyYXBwZXIgYz1cImNcIj5cbiAqICAgPENvbXBvbmVudCBhPVwiYVwiIGI9XCJiXCIgYz1cImNcIiAvPlxuICogPC9XcmFwcGVyPlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyB0byBjYXJyeSBhbGwgcHJvcHMsIHVzZSBvbWl0UHJvcHMgd2l0aCBlbXB0eSBhcnJheVxuICogY29uc3QgTmV3Q29tcG9uZW50ID0gd2l0aFdyYXBwZXIoV3JhcHBlciwgeyBvbWl0UHJvcHM6IFtdIH0pKENvbXBvbmVudClcbiAqIDxOZXdDb21wb25lbnQgYT1cImFcIiBiPVwiYlwiIGM9XCJjXCIgLz5cbiAqIC8vIGlzIGVxdWl2YWxlbnQgdG9cbiAqIDxXcmFwcGVyIGE9XCJhXCIgYj1cImJcIiBjPVwiY1wiPlxuICogICA8Q29tcG9uZW50IGE9XCJhXCIgYj1cImJcIiBjPVwiY1wiIC8+XG4gKiA8L1dyYXBwZXI+XG4gKi9cbmV4cG9ydCBjb25zdCB3aXRoV3JhcHBlciA9IG5ld0hvYzxXaXRoV3JhcHBlckhvYz4oZnVuY3Rpb24gd2l0aFdyYXBwZXIoXG4gIENvbXBvbmVudDogQ29tcG9uZW50VHlwZTxhbnk+LFxuICBXcmFwcGVyOiBDb21wb25lbnRUeXBlPGFueT4sXG4gIHtcbiAgICBwaWNrUHJvcHMsXG4gICAgb21pdFByb3BzLFxuICB9OiB7XG4gICAgcGlja1Byb3BzPzogc3RyaW5nW107XG4gICAgb21pdFByb3BzPzogc3RyaW5nW107XG4gIH0gPSB7IHBpY2tQcm9wczogW10gfSxcbik6IEZ1bmN0aW9uQ29tcG9uZW50IHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIGNvbnN0IGJvdGhBc3NpZ25lZCA9IHBpY2tQcm9wcyAmJiBvbWl0UHJvcHM7XG4gICAgY29uc3Qgbm9uZUFzc2lnbmVkID0gIXBpY2tQcm9wcyAmJiAhb21pdFByb3BzO1xuICAgIGlmIChib3RoQXNzaWduZWQgfHwgbm9uZUFzc2lnbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwid2l0aFdyYXBwZXIgc2hvdWxkIGhhdmUgZWl0aGVyIHBpY2tQcm9wcyBvciBvbWl0UHJvcHMgYXNzaWduZWRcIixcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2V0ID0gbmV3IFNldChwaWNrUHJvcHMgfHwgb21pdFByb3BzKTtcblxuICByZXR1cm4gZnVuY3Rpb24gV2l0aFdyYXBwZXIocHJvcHM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoc2V0LnNpemUgPT09IDAgJiYgcGlja1Byb3BzKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8V3JhcHBlcj5cbiAgICAgICAgICA8Q29tcG9uZW50IHsuLi5wcm9wc30gLz5cbiAgICAgICAgPC9XcmFwcGVyPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoc2V0LnNpemUgPT09IDAgJiYgb21pdFByb3BzKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8V3JhcHBlciB7Li4ucHJvcHN9PlxuICAgICAgICAgIDxDb21wb25lbnQgey4uLnByb3BzfSAvPlxuICAgICAgICA8L1dyYXBwZXI+XG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudFByb3BzID0ge30gYXMgYW55O1xuICAgIGlmIChwaWNrUHJvcHMpIHtcbiAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBwcm9wcykge1xuICAgICAgICBpZiAoc2V0Lmhhcyhwcm9wKSkge1xuICAgICAgICAgIHBhcmVudFByb3BzW3Byb3BdID0gcHJvcHNbcHJvcF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9taXRQcm9wcykge1xuICAgICAgZm9yIChjb25zdCBwcm9wIGluIHByb3BzKSB7XG4gICAgICAgIGlmICghc2V0Lmhhcyhwcm9wKSkge1xuICAgICAgICAgIHBhcmVudFByb3BzW3Byb3BdID0gcHJvcHNbcHJvcF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFdyYXBwZXIgey4uLnBhcmVudFByb3BzfT5cbiAgICAgICAgPENvbXBvbmVudCB7Li4ucHJvcHN9IC8+XG4gICAgICA8L1dyYXBwZXI+XG4gICAgKTtcbiAgfTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBLElBQUFBLE1BQUEsR0FBQUMsT0FBQTtBQUdBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQWdFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxNQUFNRSxXQUFXLEdBQUFDLE9BQUEsQ0FBQUQsV0FBQSxHQUFHLElBQUFFLGNBQU0sRUFBaUIsU0FBU0YsV0FBV0EsQ0FDcEVHLFNBQTZCLEVBQzdCQyxPQUEyQixFQUMzQjtFQUNFQyxTQUFTO0VBQ1RDO0FBSUYsQ0FBQyxHQUFHO0VBQUVELFNBQVMsRUFBRTtBQUFHLENBQUMsRUFDRjtFQUNuQixJQUFJRSxPQUFPLENBQUNDLEdBQUcsQ0FBQ0MsUUFBUSxLQUFLLFlBQVksRUFBRTtJQUN6QyxNQUFNQyxZQUFZLEdBQUdMLFNBQVMsSUFBSUMsU0FBUztJQUMzQyxNQUFNSyxZQUFZLEdBQUcsQ0FBQ04sU0FBUyxJQUFJLENBQUNDLFNBQVM7SUFDN0MsSUFBSUksWUFBWSxJQUFJQyxZQUFZLEVBQUU7TUFDaEMsTUFBTSxJQUFJQyxLQUFLLENBQ2IsZ0VBQ0YsQ0FBQztJQUNIO0VBQ0Y7RUFFQSxNQUFNQyxHQUFHLEdBQUcsSUFBSUMsR0FBRyxDQUFDVCxTQUFTLElBQUlDLFNBQVMsQ0FBQztFQUUzQyxPQUFPLFNBQVNTLFdBQVdBLENBQUNDLEtBQVUsRUFBZTtJQUNuRCxJQUFJSCxHQUFHLENBQUNJLElBQUksS0FBSyxDQUFDLElBQUlaLFNBQVMsRUFBRTtNQUMvQixvQkFDRVIsTUFBQSxDQUFBcUIsT0FBQSxDQUFBQyxhQUFBLENBQUNmLE9BQU8scUJBQ05QLE1BQUEsQ0FBQXFCLE9BQUEsQ0FBQUMsYUFBQSxDQUFDaEIsU0FBUztRQUFBLEdBQUthO01BQUssQ0FBRyxDQUNoQixDQUFDO0lBRWQ7SUFFQSxJQUFJSCxHQUFHLENBQUNJLElBQUksS0FBSyxDQUFDLElBQUlYLFNBQVMsRUFBRTtNQUMvQixvQkFDRVQsTUFBQSxDQUFBcUIsT0FBQSxDQUFBQyxhQUFBLENBQUNmLE9BQU87UUFBQSxHQUFLWTtNQUFLLGdCQUNoQm5CLE1BQUEsQ0FBQXFCLE9BQUEsQ0FBQUMsYUFBQSxDQUFDaEIsU0FBUztRQUFBLEdBQUthO01BQUssQ0FBRyxDQUNoQixDQUFDO0lBRWQ7SUFFQSxNQUFNSSxXQUFXLEdBQUcsQ0FBQyxDQUFRO0lBQzdCLElBQUlmLFNBQVMsRUFBRTtNQUNiLEtBQUssTUFBTWdCLElBQUksSUFBSUwsS0FBSyxFQUFFO1FBQ3hCLElBQUlILEdBQUcsQ0FBQ1MsR0FBRyxDQUFDRCxJQUFJLENBQUMsRUFBRTtVQUNqQkQsV0FBVyxDQUFDQyxJQUFJLENBQUMsR0FBR0wsS0FBSyxDQUFDSyxJQUFJLENBQUM7UUFDakM7TUFDRjtJQUNGLENBQUMsTUFBTSxJQUFJZixTQUFTLEVBQUU7TUFDcEIsS0FBSyxNQUFNZSxJQUFJLElBQUlMLEtBQUssRUFBRTtRQUN4QixJQUFJLENBQUNILEdBQUcsQ0FBQ1MsR0FBRyxDQUFDRCxJQUFJLENBQUMsRUFBRTtVQUNsQkQsV0FBVyxDQUFDQyxJQUFJLENBQUMsR0FBR0wsS0FBSyxDQUFDSyxJQUFJLENBQUM7UUFDakM7TUFDRjtJQUNGO0lBRUEsb0JBQ0V4QixNQUFBLENBQUFxQixPQUFBLENBQUFDLGFBQUEsQ0FBQ2YsT0FBTztNQUFBLEdBQUtnQjtJQUFXLGdCQUN0QnZCLE1BQUEsQ0FBQXFCLE9BQUEsQ0FBQUMsYUFBQSxDQUFDaEIsU0FBUztNQUFBLEdBQUthO0lBQUssQ0FBRyxDQUNoQixDQUFDO0VBRWQsQ0FBQztBQUNILENBQUMsQ0FBQyJ9 //# sourceMappingURL=withWrapper.js.map