From 6541521ec996de5082b1a4b9b9d8a581bff93115 Mon Sep 17 00:00:00 2001 From: Mathieu Masy Date: Thu, 15 Nov 2018 00:03:49 -0500 Subject: [PATCH 1/2] Add recompose/toRenderProps & fromRenderProps --- types/recompose/index.d.ts | 23 ++++++++++++++ types/recompose/recompose-tests.tsx | 48 ++++++++++++++++++++++++++++- 2 files changed, 70 insertions(+), 1 deletion(-) diff --git a/types/recompose/index.d.ts b/types/recompose/index.d.ts index 7a7bf3a411..4a430a7ef5 100644 --- a/types/recompose/index.d.ts +++ b/types/recompose/index.d.ts @@ -266,6 +266,17 @@ declare module 'recompose' { // toClass: https://github.com/acdlite/recompose/blob/master/docs/API.md#toClass export const toClass: InferableComponentEnhancer<{}>; + // toRenderProps: https://github.com/acdlite/recompose/blob/master/docs/API.md#torenderprops + export function toRenderProps( + hoc: InferableComponentEnhancerWithProps + ): StatelessComponent React.ReactElement }>; + + // fromRenderProps: https://github.com/acdlite/recompose/blob/master/docs/API.md#fromrenderprops + export function fromRenderProps( + RenderPropsComponent: StatelessComponent, + propsMapper: (props: TRenderProps) => Partial, + renderPropName?: string + ): ComponentEnhancer; // Static property helpers: https://github.com/acdlite/recompose/blob/master/docs/API.md#static-property-helpers @@ -587,6 +598,18 @@ declare module 'recompose/toClass' { export default toClass; } +// https://github.com/acdlite/recompose/blob/master/docs/API.md#torenderprops +declare module 'recompose/toRenderProps' { + import { toRenderProps } from 'recompose'; + export default toRenderProps; +} + +// https://github.com/acdlite/recompose/blob/master/docs/API.md#fromrenderprops +declare module 'recompose/fromRenderProps' { + import { fromRenderProps } from 'recompose'; + export default fromRenderProps; +} + // https://github.com/acdlite/recompose/blob/master/docs/API.md#setstatic declare module 'recompose/setStatic' { import { setStatic } from 'recompose'; diff --git a/types/recompose/recompose-tests.tsx b/types/recompose/recompose-tests.tsx index 4958f32e48..a0ba38a87a 100644 --- a/types/recompose/recompose-tests.tsx +++ b/types/recompose/recompose-tests.tsx @@ -7,7 +7,7 @@ import { withState, withReducer, branch, renderComponent, renderNothing, shouldUpdate, pure, onlyUpdateForKeys, onlyUpdateForPropTypes, withContext, getContext, - lifecycle, toClass, withStateHandlers, + lifecycle, toClass, toRenderProps, fromRenderProps, withStateHandlers, // Static property helpers setStatic, setPropTypes, setDisplayName, // Utilities @@ -51,6 +51,8 @@ import withContextStandalone from "recompose/withContext"; import getContextStandalone from "recompose/getContext"; import lifecycleStandalone from "recompose/lifecycle"; import toClassStandalone from "recompose/toClass"; +import toRenderPropsStandalone from "recompose/toRenderProps"; +import fromRenderPropsStandalone from "recompose/fromRenderProps"; import setStaticStandalone from "recompose/setStatic"; import setPropTypesStandalone from "recompose/setPropTypes"; import setDisplayNameStandalone from "recompose/setDisplayName"; @@ -496,3 +498,47 @@ function testSetDisplayName() { ClassResult = hoc(ClassComp); ClassResult = hoc(SfcComp); // $ExpectError } + +function testToRenderProps() { + interface OutterProps { + foo: number; + } + + interface InnerProps { + fooPlusOne: number; + } + + const enhance = withProps(({ foo }) => ({ fooPlusOne: foo + 1 })); + const Enhanced = toRenderProps(enhance); + + return {({ fooPlusOne }) =>

{fooPlusOne}

}
; +} + +function testFromRenderProps() { + interface RenderProps { + value: string; + } + + interface InnerProps { + renderValue: string; + outterValue: number; + } + + interface OutterProps { + outterValue: number; + } + + const RenderPropComponent: React.StatelessComponent<{ + render: (renderProps: RenderProps) => React.ReactElement; + }> = ({ render }) => render({ value: 'test' }); + + const component: React.StatelessComponent = ({ renderValue }) =>
{renderValue}
; + + const Enhanced = fromRenderProps( + RenderPropComponent, + ({ value }) => ({ renderValue: value }), + 'render' + )(component); + + return ; +} From 71ad01c972a6fe35871462c61a2db14d5b078f9d Mon Sep 17 00:00:00 2001 From: Mathieu Masy Date: Thu, 15 Nov 2018 00:52:35 -0500 Subject: [PATCH 2/2] Update recompose@0.30 --- types/recompose/index.d.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/types/recompose/index.d.ts b/types/recompose/index.d.ts index 4a430a7ef5..d3ef2ab85b 100644 --- a/types/recompose/index.d.ts +++ b/types/recompose/index.d.ts @@ -1,4 +1,4 @@ -// Type definitions for Recompose 0.27 +// Type definitions for Recompose 0.30 // Project: https://github.com/acdlite/recompose // Definitions by: Iskander Sierra // Samuel DeSota @@ -6,6 +6,7 @@ // Rasmus Eneman // Lucas Terra // Brian Adams +// Mathieu Masy // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.8