From 0dda4d376b0f3739429b8ea3c6585baa33e561cd Mon Sep 17 00:00:00 2001 From: Jason Quense Date: Fri, 25 May 2018 13:17:51 -0400 Subject: [PATCH 1/3] chore: update repo link --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2476c57..861043f 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "jsnext:main": "es/index.js", "repository": { "type": "git", - "url": "https://github.com/4Catalyzer/context.git" + "url": "https://github.com/4Catalyzer/react-context-toolbox.git" }, "author": "4Catalyzer", "license": "MIT", From 758daa8ec9d23dd6caf99545671ae4975e42f7bd Mon Sep 17 00:00:00 2001 From: Jason Quense Date: Wed, 30 May 2018 14:33:07 -0400 Subject: [PATCH 2/3] feat: Add transformContext HoC --- src/forwardRef.js | 11 +++++++++ src/mapContextToProps.js | 6 +++-- src/transformContext.js | 17 ++++++++++++++ test/transformContext.test.js | 43 +++++++++++++++++++++++++++++++++++ 4 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 src/forwardRef.js create mode 100644 src/transformContext.js create mode 100644 test/transformContext.test.js diff --git a/src/forwardRef.js b/src/forwardRef.js new file mode 100644 index 0000000..827ea32 --- /dev/null +++ b/src/forwardRef.js @@ -0,0 +1,11 @@ +import React from 'react'; + +export default function forwardRef( + renderFn, + { displayName, propTypes, defaultProps }, +) { + const render = (...args) => renderFn(...args); + + Object.assign(render, { displayName, propTypes, defaultProps }); + return React.forwardRef(render); +} diff --git a/src/mapContextToProps.js b/src/mapContextToProps.js index a8fdbc5..8177227 100644 --- a/src/mapContextToProps.js +++ b/src/mapContextToProps.js @@ -1,4 +1,5 @@ import React from 'react'; +import forwardRef from './forwardRef'; const getDisplayName = Component => { const name = @@ -47,9 +48,10 @@ function $mapContextToProps( } const contextTransform = consumers.length === 1 ? singleRender : multiRender; - contextTransform.displayName = displayName || getDisplayName(Component); - return React.forwardRef(contextTransform); + return forwardRef(contextTransform, { + displayName: displayName || getDisplayName(Component), + }); } export default function mapContextToProps(maybeOpts, mapToProps, Component) { diff --git a/src/transformContext.js b/src/transformContext.js new file mode 100644 index 0000000..9f4470b --- /dev/null +++ b/src/transformContext.js @@ -0,0 +1,17 @@ +import React from 'react'; +import forwardRef from './forwardRef'; + +export default function transformContext(Context) { + return forwardRef( + props => ( + + {context => ( + + {props.children} + + )} + + ), + { displayName: `ContextTransformer` }, + ); +} diff --git a/test/transformContext.test.js b/test/transformContext.test.js new file mode 100644 index 0000000..b909541 --- /dev/null +++ b/test/transformContext.test.js @@ -0,0 +1,43 @@ +import React from 'react'; +import { mount } from 'enzyme'; + +import transformContext from '../src/transformContext'; + +describe('transformContext', () => { + it('should transform a context value', () => { + const Context = React.createContext('foo'); + const Transformer = transformContext(Context); + + const mapper = jest.fn(value => (value === 'foo' ? value : 'baz')); + + function Inner() { + return {v =>
{v}
}
; + } + function Wrapper() { + return ( + + + + ); + } + + function Nested() { + return ( + + + + ); + } + expect( + mount() + .find('div') + .text(), + ).toEqual('foo'); + + expect( + mount() + .find('div') + .text(), + ).toEqual('baz'); + }); +}); From 8042f0793047fab4b866ebd61209b21727db1a1b Mon Sep 17 00:00:00 2001 From: Jason Quense Date: Wed, 30 May 2018 14:45:24 -0400 Subject: [PATCH 3/3] backtick --- src/transformContext.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/transformContext.js b/src/transformContext.js index 9f4470b..bb705cf 100644 --- a/src/transformContext.js +++ b/src/transformContext.js @@ -12,6 +12,6 @@ export default function transformContext(Context) { )} ), - { displayName: `ContextTransformer` }, + { displayName: 'ContextTransformer' }, ); }