react-with-hoc
Version:
Work with React and HOCs (Higher-Order Components)
41 lines • 4.79 kB
JavaScript
import React from "react";
import { newHoc } from "../utils/newHoc";
/**
* Pick, which is actually ignore other props
*
* @see {@link withOmit}
* @example
* const user = {
* username: "Some username",
* password: "s0m3 p4ssw0rd",
* vitalSecretInfo: "..."
* };
* function RevealInfo(
* { username, password, vitalSecretInfo }:
* { username: string; password?: string; vitalSecretInfo: string }
* ) {
* ...
* }
* const SafeRevealInfo = withPick(["username"])(RevealInfo);
* <SafeRevealInfo {...user} />
* // is equivalent to
* <RevealInfo username={user.username} /> // password and vitalSecretInfo is not included
*/
export const withPick = newHoc(function withPick(Component, pickNames) {
const pickSet = new Set(pickNames);
return function WithPick(props) {
const newProps = {
...props
};
for (const key in newProps) {
if (!pickSet.has(key) && key in newProps) {
delete newProps[key];
}
}
return /*#__PURE__*/React.createElement(Component, {
...newProps
});
};
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm5ld0hvYyIsIndpdGhQaWNrIiwiQ29tcG9uZW50IiwicGlja05hbWVzIiwicGlja1NldCIsIlNldCIsIldpdGhQaWNrIiwicHJvcHMiLCJuZXdQcm9wcyIsImtleSIsImhhcyIsImNyZWF0ZUVsZW1lbnQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9jcy93aXRoUGljay50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudFR5cGUsIEZ1bmN0aW9uQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBDYWxsLCBGbiwgS2VlcE5ldmVyc0ZuLCBQaWNrRm4gfSBmcm9tIFwiLi4vdHlwZXMvRm5cIjtcbmltcG9ydCB7IEhvYyB9IGZyb20gXCIuLi90eXBlcy9Ib2NcIjtcbmltcG9ydCB7IG5ld0hvYyB9IGZyb20gXCIuLi91dGlscy9uZXdIb2NcIjtcblxuaW50ZXJmYWNlIFdpdGhQaWNrRm48UGlja05hbWVzIGV4dGVuZHMgc3RyaW5nPiBleHRlbmRzIEZuIHtcbiAgcmV0dXJuOiBDYWxsPFxuICAgIEtlZXBOZXZlcnNGbjxQaWNrRm48UGlja05hbWVzPj4sXG4gICAge1xuICAgICAgW0sgaW4gRXh0cmFjdDx0aGlzW1wiYXJnMFwiXSwgYW55W10+WzBdXTogW1xuICAgICAgICBLLFxuICAgICAgICBLIGV4dGVuZHMgUGlja05hbWVzXG4gICAgICAgICAgPyBFeHRyYWN0PHRoaXNbXCJhcmcwXCJdLCBbSywgYW55XT5bMV1cbiAgICAgICAgICA6IHVuZGVmaW5lZCBleHRlbmRzIEV4dHJhY3Q8dGhpc1tcImFyZzBcIl0sIFtLLCBhbnldPlsxXVxuICAgICAgICAgICAgPyBFeHRyYWN0PHRoaXNbXCJhcmcwXCJdLCBbSywgYW55XT5bMV1cbiAgICAgICAgICAgIDogbmV2ZXIsXG4gICAgICBdO1xuICAgIH1bRXh0cmFjdDx0aGlzW1wiYXJnMFwiXSwgYW55W10+WzBdXVxuICA+O1xufVxuXG50eXBlIFdpdGhQaWNrSG9jID0gPFBpY2tOYW1lcyBleHRlbmRzIHN0cmluZz4oXG4gIHBpY2tOYW1lczogUGlja05hbWVzW10sXG4pID0+IEhvYzxbV2l0aFBpY2tGbjxQaWNrTmFtZXM+XT47XG5cbi8qKlxuICogUGljaywgd2hpY2ggaXMgYWN0dWFsbHkgaWdub3JlIG90aGVyIHByb3BzXG4gKlxuICogQHNlZSB7QGxpbmsgd2l0aE9taXR9XG4gKiBAZXhhbXBsZVxuICogY29uc3QgdXNlciA9IHtcbiAqICAgdXNlcm5hbWU6IFwiU29tZSB1c2VybmFtZVwiLFxuICogICBwYXNzd29yZDogXCJzMG0zIHA0c3N3MHJkXCIsXG4gKiAgIHZpdGFsU2VjcmV0SW5mbzogXCIuLi5cIlxuICogfTtcbiAqIGZ1bmN0aW9uIFJldmVhbEluZm8oXG4gKiAgIHsgdXNlcm5hbWUsIHBhc3N3b3JkLCB2aXRhbFNlY3JldEluZm8gfTpcbiAqICAgeyB1c2VybmFtZTogc3RyaW5nOyBwYXNzd29yZD86IHN0cmluZzsgdml0YWxTZWNyZXRJbmZvOiBzdHJpbmcgfVxuICogKSB7XG4gKiAgIC4uLlxuICogfVxuICogY29uc3QgU2FmZVJldmVhbEluZm8gPSB3aXRoUGljayhbXCJ1c2VybmFtZVwiXSkoUmV2ZWFsSW5mbyk7XG4gKiA8U2FmZVJldmVhbEluZm8gey4uLnVzZXJ9IC8+XG4gKiAvLyBpcyBlcXVpdmFsZW50IHRvXG4gKiA8UmV2ZWFsSW5mbyB1c2VybmFtZT17dXNlci51c2VybmFtZX0gLz4gLy8gcGFzc3dvcmQgYW5kIHZpdGFsU2VjcmV0SW5mbyBpcyBub3QgaW5jbHVkZWRcbiAqL1xuZXhwb3J0IGNvbnN0IHdpdGhQaWNrID0gbmV3SG9jPFdpdGhQaWNrSG9jPihmdW5jdGlvbiB3aXRoUGljayhcbiAgQ29tcG9uZW50OiBDb21wb25lbnRUeXBlLFxuICBwaWNrTmFtZXM6IHN0cmluZ1tdLFxuKTogRnVuY3Rpb25Db21wb25lbnQge1xuICBjb25zdCBwaWNrU2V0ID0gbmV3IFNldChwaWNrTmFtZXMpO1xuXG4gIHJldHVybiBmdW5jdGlvbiBXaXRoUGljayhwcm9wczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IG5ld1Byb3BzID0geyAuLi5wcm9wcyB9O1xuICAgIGZvciAoY29uc3Qga2V5IGluIG5ld1Byb3BzKSB7XG4gICAgICBpZiAoIXBpY2tTZXQuaGFzKGtleSkgJiYga2V5IGluIG5ld1Byb3BzKSB7XG4gICAgICAgIGRlbGV0ZSBuZXdQcm9wc1trZXldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiA8Q29tcG9uZW50IHsuLi5uZXdQcm9wc30gLz47XG4gIH07XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsS0FBSyxNQUE0QyxPQUFPO0FBRy9ELFNBQVNDLE1BQU0sUUFBUSxpQkFBaUI7QUFzQnhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sTUFBTUMsUUFBUSxHQUFHRCxNQUFNLENBQWMsU0FBU0MsUUFBUUEsQ0FDM0RDLFNBQXdCLEVBQ3hCQyxTQUFtQixFQUNBO0VBQ25CLE1BQU1DLE9BQU8sR0FBRyxJQUFJQyxHQUFHLENBQUNGLFNBQVMsQ0FBQztFQUVsQyxPQUFPLFNBQVNHLFFBQVFBLENBQUNDLEtBQVUsRUFBZTtJQUNoRCxNQUFNQyxRQUFRLEdBQUc7TUFBRSxHQUFHRDtJQUFNLENBQUM7SUFDN0IsS0FBSyxNQUFNRSxHQUFHLElBQUlELFFBQVEsRUFBRTtNQUMxQixJQUFJLENBQUNKLE9BQU8sQ0FBQ00sR0FBRyxDQUFDRCxHQUFHLENBQUMsSUFBSUEsR0FBRyxJQUFJRCxRQUFRLEVBQUU7UUFDeEMsT0FBT0EsUUFBUSxDQUFDQyxHQUFHLENBQUM7TUFDdEI7SUFDRjtJQUVBLG9CQUFPVixLQUFBLENBQUFZLGFBQUEsQ0FBQ1QsU0FBUztNQUFBLEdBQUtNO0lBQVEsQ0FBRyxDQUFDO0VBQ3BDLENBQUM7QUFDSCxDQUFDLENBQUMifQ==
//# sourceMappingURL=withPick.js.map