diff --git a/.size-snapshot.json b/.size-snapshot.json index 0d6593cf..7490a07b 100644 --- a/.size-snapshot.json +++ b/.size-snapshot.json @@ -1,18 +1,18 @@ { "lib/packages/recompose/dist/Recompose.umd.js": { - "bundled": 85956, - "minified": 31664, - "gzipped": 10060 + "bundled": 85972, + "minified": 31684, + "gzipped": 10057 }, "lib/packages/recompose/dist/Recompose.min.js": { - "bundled": 82334, - "minified": 30381, - "gzipped": 9668 + "bundled": 82350, + "minified": 30401, + "gzipped": 9666 }, "lib/packages/recompose/dist/Recompose.esm.js": { - "bundled": 32320, - "minified": 16089, - "gzipped": 3579, + "bundled": 32336, + "minified": 16109, + "gzipped": 3577, "treeshaked": { "rollup": 601, "webpack": 1863 diff --git a/docs/API.md b/docs/API.md index 5fc18f45..374626a5 100644 --- a/docs/API.md +++ b/docs/API.md @@ -590,7 +590,7 @@ const Enhanced = toRenderProps(enhance) ```js fromRenderProps( RenderPropsComponent: ReactClass | ReactFunctionalComponent, - propsMapper: (props: Object) => Object, + propsMapper: (...props: any[]) => Object, renderPropName?: string ): HigherOrderComponent ``` diff --git a/src/packages/recompose/__tests__/fromRenderProps-test.js b/src/packages/recompose/__tests__/fromRenderProps-test.js index aca3efff..df032c8f 100644 --- a/src/packages/recompose/__tests__/fromRenderProps-test.js +++ b/src/packages/recompose/__tests__/fromRenderProps-test.js @@ -70,3 +70,19 @@ test('fromRenderProps meet toRenderProps', () => { const div = mount() expect(div.html()).toBe(`
`) }) + +test('fromRenderProps with multiple arguments #693', () => { + const RenderPropsComponent = ({ children }) => + children({ theme: 'dark' }, { data: 'data' }) + const EnhancedComponent = compose( + fromRenderProps( + RenderPropsComponent, + ({ theme }, { data }) => ({ theme, data }), + 'children' + ) + )('div') + expect(EnhancedComponent.displayName).toBe('fromRenderProps(div)') + + const div = mount() + expect(div.html()).toBe(`
`) +}) diff --git a/src/packages/recompose/__tests__/types/test_fromRenderProps.js b/src/packages/recompose/__tests__/types/test_fromRenderProps.js index 97d22901..f13b8470 100644 --- a/src/packages/recompose/__tests__/types/test_fromRenderProps.js +++ b/src/packages/recompose/__tests__/types/test_fromRenderProps.js @@ -6,13 +6,16 @@ import type { HOC } from '../..' const RenderPropsComponent1 = ({ children }) => children({ theme: 'dark' }) const RenderPropsComponent2 = ({ render }) => render({ i18n: 'zh-TW' }) +const RenderPropsComponent3 = ({ children }) => + children({ theme: 'dark' }, { data: 'data' }) type EnhancedCompProps = {||} -const Comp = ({ i18n, theme }) => +const Comp = ({ i18n, theme, data }) =>
{i18n} {theme} + {data} { // $ExpectError (i18n: number) @@ -21,6 +24,10 @@ const Comp = ({ i18n, theme }) => // $ExpectError (theme: number) } + { + // $ExpectError + (data: number) + }
const enhancer: HOC<*, EnhancedCompProps> = compose( @@ -37,7 +44,13 @@ const enhancer: HOC<*, EnhancedCompProps> = compose( err: props.iMNotExists, }), 'render' - ) + ), + fromRenderProps(RenderPropsComponent3, (props, data) => ({ + theme: props.theme, + data: data.data, + // $ExpectError property not found + err: data.iMNotExists, + })) ) const EnhancedComponent = enhancer(Comp) diff --git a/src/packages/recompose/fromRenderProps.js b/src/packages/recompose/fromRenderProps.js index 6f4f6465..9fe6db97 100644 --- a/src/packages/recompose/fromRenderProps.js +++ b/src/packages/recompose/fromRenderProps.js @@ -12,8 +12,8 @@ const fromRenderProps = ( const FromRenderProps = ownerProps => renderPropsFactory({ - [renderPropName]: props => - baseFactory({ ...ownerProps, ...propsMapper(props) }), + [renderPropName]: (...props) => + baseFactory({ ...ownerProps, ...propsMapper(...props) }), }) if (process.env.NODE_ENV !== 'production') { diff --git a/src/packages/recompose/index.js.flow b/src/packages/recompose/index.js.flow index 344523db..86eff111 100644 --- a/src/packages/recompose/index.js.flow +++ b/src/packages/recompose/index.js.flow @@ -271,8 +271,8 @@ declare export function toRenderProps( declare export function fromRenderProps( RenderPropsComponent: Component<{ - [RenderPropName]: (Props) => React$Node, + [RenderPropName]: (...props: Props) => React$Node, }>, - propsMapper: ((props: Props) => B), + propsMapper: ((...props: Props) => B), renderPropName?: RenderPropName ): HOC<{ ...$Exact, ...B }, E>