react-with-hoc
Version:
Work with React and HOCs (Higher-Order Components)
29 lines • 3.92 kB
JavaScript
import React from "react";
import { newHoc } from "../utils/newHoc";
/**
* Start receiving an object and spread all properties to Component
*
* @experimental It uses the same mechanism as {@link withDefaults} but it could also have the same mechanism as {@link withOverrides}
*
* @example
* function Profile({ name, age, city }: {...}) {
* ...
* }
* const NewProfile = withSpread<"profile", "name" | "age" | "city">("profile")(Profile)
* <NewProfile profile={{ name: "Some Name", age: 20, city: "Some City" }} />
* // is equivalent to
* <Profile name="Some Name" age={20} city="Some City" />
*/
export const withSpread = newHoc(function withSpread(Component, key) {
return function WithObject(props) {
const newProps = {
...props[key],
...props
};
return /*#__PURE__*/React.createElement(Component, {
...newProps
});
};
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm5ld0hvYyIsIndpdGhTcHJlYWQiLCJDb21wb25lbnQiLCJrZXkiLCJXaXRoT2JqZWN0IiwicHJvcHMiLCJuZXdQcm9wcyIsImNyZWF0ZUVsZW1lbnQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9jcy93aXRoU3ByZWFkLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50VHlwZSwgRnVuY3Rpb25Db21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIEZuLFxuICBGcm9tU2NoZW1hLFxuICBJbnRlcnNlY3Rpb25GbixcbiAgUGlwZSxcbiAgU2V0T3B0aW9uYWxGbixcbn0gZnJvbSBcIi4uL3R5cGVzL0ZuXCI7XG5pbXBvcnQgeyBIb2MgfSBmcm9tIFwiLi4vdHlwZXMvSG9jXCI7XG5pbXBvcnQgeyBuZXdIb2MgfSBmcm9tIFwiLi4vdXRpbHMvbmV3SG9jXCI7XG5cbmludGVyZmFjZSBXaXRoU3ByZWFkRm48UHJvcE5hbWUgZXh0ZW5kcyBzdHJpbmcsIE5hbWVzIGV4dGVuZHMgc3RyaW5nPlxuICBleHRlbmRzIEZuIHtcbiAgcmV0dXJuOiBQaXBlPFxuICAgIHRoaXNbXCJhcmcwXCJdLFxuICAgIFtcbiAgICAgIEludGVyc2VjdGlvbkZuPFxuICAgICAgICBbUHJvcE5hbWUsIEZyb21TY2hlbWE8RXh0cmFjdDx0aGlzW1wiYXJnMFwiXSwgW05hbWVzLCBhbnldPj5dXG4gICAgICA+LFxuICAgICAgU2V0T3B0aW9uYWxGbjxOYW1lcz4sXG4gICAgXVxuICA+O1xufVxuXG5pbnRlcmZhY2UgV2l0aFNwcmVhZEhvYyB7XG4gIDxQcm9wTmFtZSBleHRlbmRzIHN0cmluZywgTmFtZXMgZXh0ZW5kcyBzdHJpbmc+KFxuICAgIHByb3BOYW1lOiBQcm9wTmFtZSxcbiAgKTogSG9jPFtXaXRoU3ByZWFkRm48UHJvcE5hbWUsIE5hbWVzPl0+O1xufVxuXG4vKipcbiAqIFN0YXJ0IHJlY2VpdmluZyBhbiBvYmplY3QgYW5kIHNwcmVhZCBhbGwgcHJvcGVydGllcyB0byBDb21wb25lbnRcbiAqXG4gKiBAZXhwZXJpbWVudGFsIEl0IHVzZXMgdGhlIHNhbWUgbWVjaGFuaXNtIGFzIHtAbGluayB3aXRoRGVmYXVsdHN9IGJ1dCBpdCBjb3VsZCBhbHNvIGhhdmUgdGhlIHNhbWUgbWVjaGFuaXNtIGFzIHtAbGluayB3aXRoT3ZlcnJpZGVzfVxuICpcbiAqIEBleGFtcGxlXG4gKiBmdW5jdGlvbiBQcm9maWxlKHsgbmFtZSwgYWdlLCBjaXR5IH06IHsuLi59KSB7XG4gKiAgIC4uLlxuICogfVxuICogY29uc3QgTmV3UHJvZmlsZSA9IHdpdGhTcHJlYWQ8XCJwcm9maWxlXCIsIFwibmFtZVwiIHwgXCJhZ2VcIiB8IFwiY2l0eVwiPihcInByb2ZpbGVcIikoUHJvZmlsZSlcbiAqIDxOZXdQcm9maWxlIHByb2ZpbGU9e3sgbmFtZTogXCJTb21lIE5hbWVcIiwgYWdlOiAyMCwgY2l0eTogXCJTb21lIENpdHlcIiB9fSAvPlxuICogLy8gaXMgZXF1aXZhbGVudCB0b1xuICogPFByb2ZpbGUgbmFtZT1cIlNvbWUgTmFtZVwiIGFnZT17MjB9IGNpdHk9XCJTb21lIENpdHlcIiAvPlxuICovXG5leHBvcnQgY29uc3Qgd2l0aFNwcmVhZCA9IG5ld0hvYzxXaXRoU3ByZWFkSG9jPihmdW5jdGlvbiB3aXRoU3ByZWFkKFxuICBDb21wb25lbnQ6IENvbXBvbmVudFR5cGUsXG4gIGtleTogc3RyaW5nLFxuKTogRnVuY3Rpb25Db21wb25lbnQge1xuICByZXR1cm4gZnVuY3Rpb24gV2l0aE9iamVjdChwcm9wczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IG5ld1Byb3BzOiBhbnkgPSB7XG4gICAgICAuLi5wcm9wc1trZXldLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcblxuICAgIHJldHVybiA8Q29tcG9uZW50IHsuLi5uZXdQcm9wc30gLz47XG4gIH07XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsS0FBSyxNQUE0QyxPQUFPO0FBUy9ELFNBQVNDLE1BQU0sUUFBUSxpQkFBaUI7QUFxQnhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLE1BQU1DLFVBQVUsR0FBR0QsTUFBTSxDQUFnQixTQUFTQyxVQUFVQSxDQUNqRUMsU0FBd0IsRUFDeEJDLEdBQVcsRUFDUTtFQUNuQixPQUFPLFNBQVNDLFVBQVVBLENBQUNDLEtBQVUsRUFBZTtJQUNsRCxNQUFNQyxRQUFhLEdBQUc7TUFDcEIsR0FBR0QsS0FBSyxDQUFDRixHQUFHLENBQUM7TUFDYixHQUFHRTtJQUNMLENBQUM7SUFFRCxvQkFBT04sS0FBQSxDQUFBUSxhQUFBLENBQUNMLFNBQVM7TUFBQSxHQUFLSTtJQUFRLENBQUcsQ0FBQztFQUNwQyxDQUFDO0FBQ0gsQ0FBQyxDQUFDIn0=
//# sourceMappingURL=withSpread.js.map