react-with-hoc
Version:
Work with React and HOCs (Higher-Order Components)
41 lines • 4.86 kB
JavaScript
import React from "react";
import { newHoc } from "../utils/newHoc";
/**
* Omit, which is actually ignore mentioned props
*
* @see {@link withPick}
* @example
* const user = {
* username: "Some username",
* password: "s0m3 p4ssw0rd",
* vitalSecretInfo: "..."
* };
* function RevealInfo(
* { username, password, vitalSecretInfo }:
* { username: string; password?: string; vitalSecretInfo: string }
* ) {
* ...
* }
* const SafeRevealInfo = withOmit(["password"])(RevealInfo);
* <SafeRevealInfo {...user} />
* // is equivalent to
* <RevealInfo username={user.username} vitalSecretInfo={user.vitalSecretInfo} /> // password is not included, but you can still see vitalSecretInfo
*/
export const withOmit = newHoc(function withOmit(Component, omitNames) {
const omitSet = new Set(omitNames);
return function WithOmit(props) {
const newProps = {
...props
};
for (const key in newProps) {
if (omitSet.has(key)) {
delete newProps[key];
}
}
return /*#__PURE__*/React.createElement(Component, {
...newProps
});
};
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm5ld0hvYyIsIndpdGhPbWl0IiwiQ29tcG9uZW50Iiwib21pdE5hbWVzIiwib21pdFNldCIsIlNldCIsIldpdGhPbWl0IiwicHJvcHMiLCJuZXdQcm9wcyIsImtleSIsImhhcyIsImNyZWF0ZUVsZW1lbnQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9jcy93aXRoT21pdC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudFR5cGUsIEZ1bmN0aW9uQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBDYWxsLCBGbiwgS2VlcE5ldmVyc0ZuLCBPbWl0Rm4gfSBmcm9tIFwiLi4vdHlwZXMvRm5cIjtcbmltcG9ydCB7IEhvYyB9IGZyb20gXCIuLi90eXBlcy9Ib2NcIjtcbmltcG9ydCB7IG5ld0hvYyB9IGZyb20gXCIuLi91dGlscy9uZXdIb2NcIjtcblxuaW50ZXJmYWNlIFdpdGhPbWl0Rm48T21pdE5hbWVzIGV4dGVuZHMgc3RyaW5nPiBleHRlbmRzIEZuIHtcbiAgcmV0dXJuOiBDYWxsPFxuICAgIEtlZXBOZXZlcnNGbjxPbWl0Rm48T21pdE5hbWVzPj4sXG4gICAge1xuICAgICAgW0sgaW4gRXh0cmFjdDx0aGlzW1wiYXJnMFwiXSwgYW55W10+WzBdXTogW1xuICAgICAgICBLLFxuICAgICAgICBLIGV4dGVuZHMgT21pdE5hbWVzXG4gICAgICAgICAgPyB1bmRlZmluZWQgZXh0ZW5kcyBFeHRyYWN0PHRoaXNbXCJhcmcwXCJdLCBbSywgYW55XT5bMV1cbiAgICAgICAgICAgID8gRXh0cmFjdDx0aGlzW1wiYXJnMFwiXSwgW0ssIGFueV0+WzFdXG4gICAgICAgICAgICA6IG5ldmVyXG4gICAgICAgICAgOiBFeHRyYWN0PHRoaXNbXCJhcmcwXCJdLCBbSywgYW55XT5bMV0sXG4gICAgICBdO1xuICAgIH1bRXh0cmFjdDx0aGlzW1wiYXJnMFwiXSwgYW55W10+WzBdXVxuICA+O1xufVxuXG50eXBlIFdpdGhPbWl0SG9jID0gPE9taXROYW1lcyBleHRlbmRzIHN0cmluZz4oXG4gIG9taXROYW1lczogT21pdE5hbWVzW10sXG4pID0+IEhvYzxbV2l0aE9taXRGbjxPbWl0TmFtZXM+XT47XG5cbi8qKlxuICogT21pdCwgd2hpY2ggaXMgYWN0dWFsbHkgaWdub3JlIG1lbnRpb25lZCBwcm9wc1xuICpcbiAqIEBzZWUge0BsaW5rIHdpdGhQaWNrfVxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHVzZXIgPSB7XG4gKiAgIHVzZXJuYW1lOiBcIlNvbWUgdXNlcm5hbWVcIixcbiAqICAgcGFzc3dvcmQ6IFwiczBtMyBwNHNzdzByZFwiLFxuICogICB2aXRhbFNlY3JldEluZm86IFwiLi4uXCJcbiAqIH07XG4gKiBmdW5jdGlvbiBSZXZlYWxJbmZvKFxuICogICB7IHVzZXJuYW1lLCBwYXNzd29yZCwgdml0YWxTZWNyZXRJbmZvIH06XG4gKiAgIHsgdXNlcm5hbWU6IHN0cmluZzsgcGFzc3dvcmQ/OiBzdHJpbmc7IHZpdGFsU2VjcmV0SW5mbzogc3RyaW5nIH1cbiAqICkge1xuICogICAuLi5cbiAqIH1cbiAqIGNvbnN0IFNhZmVSZXZlYWxJbmZvID0gd2l0aE9taXQoW1wicGFzc3dvcmRcIl0pKFJldmVhbEluZm8pO1xuICogPFNhZmVSZXZlYWxJbmZvIHsuLi51c2VyfSAvPlxuICogLy8gaXMgZXF1aXZhbGVudCB0b1xuICogPFJldmVhbEluZm8gdXNlcm5hbWU9e3VzZXIudXNlcm5hbWV9IHZpdGFsU2VjcmV0SW5mbz17dXNlci52aXRhbFNlY3JldEluZm99IC8+IC8vIHBhc3N3b3JkIGlzIG5vdCBpbmNsdWRlZCwgYnV0IHlvdSBjYW4gc3RpbGwgc2VlIHZpdGFsU2VjcmV0SW5mb1xuICovXG5leHBvcnQgY29uc3Qgd2l0aE9taXQgPSBuZXdIb2M8V2l0aE9taXRIb2M+KGZ1bmN0aW9uIHdpdGhPbWl0KFxuICBDb21wb25lbnQ6IENvbXBvbmVudFR5cGUsXG4gIG9taXROYW1lczogc3RyaW5nW10sXG4pOiBGdW5jdGlvbkNvbXBvbmVudCB7XG4gIGNvbnN0IG9taXRTZXQgPSBuZXcgU2V0KG9taXROYW1lcyk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIFdpdGhPbWl0KHByb3BzOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgbmV3UHJvcHMgPSB7IC4uLnByb3BzIH07XG4gICAgZm9yIChjb25zdCBrZXkgaW4gbmV3UHJvcHMpIHtcbiAgICAgIGlmIChvbWl0U2V0LmhhcyhrZXkpKSB7XG4gICAgICAgIGRlbGV0ZSBuZXdQcm9wc1trZXldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiA8Q29tcG9uZW50IHsuLi5uZXdQcm9wc30gLz47XG4gIH07XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsS0FBSyxNQUE0QyxPQUFPO0FBRy9ELFNBQVNDLE1BQU0sUUFBUSxpQkFBaUI7QUFzQnhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sTUFBTUMsUUFBUSxHQUFHRCxNQUFNLENBQWMsU0FBU0MsUUFBUUEsQ0FDM0RDLFNBQXdCLEVBQ3hCQyxTQUFtQixFQUNBO0VBQ25CLE1BQU1DLE9BQU8sR0FBRyxJQUFJQyxHQUFHLENBQUNGLFNBQVMsQ0FBQztFQUVsQyxPQUFPLFNBQVNHLFFBQVFBLENBQUNDLEtBQVUsRUFBZTtJQUNoRCxNQUFNQyxRQUFRLEdBQUc7TUFBRSxHQUFHRDtJQUFNLENBQUM7SUFDN0IsS0FBSyxNQUFNRSxHQUFHLElBQUlELFFBQVEsRUFBRTtNQUMxQixJQUFJSixPQUFPLENBQUNNLEdBQUcsQ0FBQ0QsR0FBRyxDQUFDLEVBQUU7UUFDcEIsT0FBT0QsUUFBUSxDQUFDQyxHQUFHLENBQUM7TUFDdEI7SUFDRjtJQUVBLG9CQUFPVixLQUFBLENBQUFZLGFBQUEsQ0FBQ1QsU0FBUztNQUFBLEdBQUtNO0lBQVEsQ0FBRyxDQUFDO0VBQ3BDLENBQUM7QUFDSCxDQUFDLENBQUMifQ==
//# sourceMappingURL=withOmit.js.map