From 3ae765b75a95ff5c1942162780a6f8da35800ba2 Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Wed, 25 Jan 2017 13:42:49 +0200 Subject: [PATCH 1/2] Expand NamedLink to handle location descriptors --- src/components/NamedLink/NamedLink.js | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/components/NamedLink/NamedLink.js b/src/components/NamedLink/NamedLink.js index 2faaafe1..413a7dbf 100644 --- a/src/components/NamedLink/NamedLink.js +++ b/src/components/NamedLink/NamedLink.js @@ -1,20 +1,31 @@ +/** + * This component wraps React-Router's Link by providing name-based routing. + * This is also special component that gets routes from context. + * (Helps to narrow down the scope of possible format changes to routes.) + */ import React, { PropTypes } from 'react'; import { Link } from 'react-router'; import { pathByRouteName } from '../../routesConfiguration'; const NamedLink = (props, context) => { - const { name, params, ...rest } = props; - const path = pathByRouteName(name, context.routes, params); - - return ; + const { name, params, query, hash, state, ...rest } = props; + const pathname = pathByRouteName(name, context.routes, params); + const locationDescriptor = { pathname, query, hash, state }; + return ; }; const { array, object, string } = PropTypes; NamedLink.contextTypes = { routes: array }; -NamedLink.defaultProps = { params: {} }; +NamedLink.defaultProps = { hash: '', params: {}, query: {}, state: {} }; -NamedLink.propTypes = { name: string.isRequired, params: object }; +NamedLink.propTypes = { + hash: string, + name: string.isRequired, + params: object, + query: object, + state: object, +}; export default NamedLink; From e1295ba2b8843e49261db57b3f7cb958eadc0e74 Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Wed, 25 Jan 2017 18:33:09 +0200 Subject: [PATCH 2/2] NamedLink used with query --- src/containers/LandingPage/LandingPage.js | 7 +++---- src/containers/LandingPage/LandingPage.test.js | 6 +++++- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/containers/LandingPage/LandingPage.js b/src/containers/LandingPage/LandingPage.js index 1ea32d03..c08581dd 100644 --- a/src/containers/LandingPage/LandingPage.js +++ b/src/containers/LandingPage/LandingPage.js @@ -1,15 +1,14 @@ import React from 'react'; import { FormattedMessage } from 'react-intl'; -import { Link } from 'react-router'; -import { PageLayout } from '../../components'; +import { NamedLink, PageLayout } from '../../components'; export default () => ( - + - + ) diff --git a/src/containers/LandingPage/LandingPage.test.js b/src/containers/LandingPage/LandingPage.test.js index 3e8b7f7f..eb61d60b 100644 --- a/src/containers/LandingPage/LandingPage.test.js +++ b/src/containers/LandingPage/LandingPage.test.js @@ -2,13 +2,17 @@ import React from 'react'; import renderer from 'react-test-renderer'; import { TestProvider } from '../../util/test-helpers'; import LandingPage from './LandingPage'; +import { RoutesProvider } from '../../components'; +import routesConfiguration from '../../routesConfiguration'; describe('LandingPage', () => { it('matches snapshot', () => { const component = renderer.create( ( - + + + ), );