From c2a82d2db61260d16dd25b3b50b4edb747d6a946 Mon Sep 17 00:00:00 2001 From: Charles Burgess Date: Tue, 13 Aug 2019 16:41:27 -0400 Subject: [PATCH 1/3] add support for dynamic page titles --- src/BreadcrumbsItem.js | 6 +++++- src/index.js | 5 ++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/BreadcrumbsItem.js b/src/BreadcrumbsItem.js index 013c70a..3a99fff 100644 --- a/src/BreadcrumbsItem.js +++ b/src/BreadcrumbsItem.js @@ -5,7 +5,7 @@ import PropTypes from 'prop-types'; export const isDefined = v => (v !== undefined && v !== null && v !== false && String(v).length > 0); const BreadcrumbsItem = (props) => { const {match, name, mappedRoutes} = props; - const {ActiveLinkComponent, LinkComponent, routeMatcherRegex} = props.parentProps; + const {ActiveLinkComponent, LinkComponent, routeMatcherRegex, titleFn} = props.parentProps; const placeholderMatcher = /:[^\s/]+/g; const getPlaceholderVars = (url, key) => { @@ -75,6 +75,10 @@ const BreadcrumbsItem = (props) => { if (routeName !== null) routeName = routeName || name; + if (titleFn && isDefined(routeName) && match.isExact) { + document.title = titleFn(routeName); + } + if (isDefined(routeName)) return match.isExact ? {routeName} diff --git a/src/index.js b/src/index.js index 2d98cbf..6c453d7 100644 --- a/src/index.js +++ b/src/index.js @@ -13,6 +13,7 @@ const BreadcrumbsWrapper = (props) => { LinkComponent={props.LinkComponent} rootName={props.rootName} routeMatcherRegex={props.routeMatcherRegex} + titleFn={props.titleFn} {...rest} />} /> @@ -24,7 +25,8 @@ BreadcrumbsWrapper.defaultProps = { WrapperComponent: (props) =>
    {props.children}
, ActiveLinkComponent: (props) =>
  • {props.children}
  • , LinkComponent: (props) =>
  • {props.children}
  • , - rootName:'' + rootName:'', + titleFn: undefined, }; BreadcrumbsWrapper.propTypes = { @@ -34,6 +36,7 @@ BreadcrumbsWrapper.propTypes = { LinkComponent: PropTypes.func, rootName: PropTypes.oneOfType([PropTypes.string,PropTypes.func]), routeMatcherRegex: PropTypes.string, + titleFn: PropTypes.func, }; export default BreadcrumbsWrapper; From 56235b1c7d19fe693457282a94cdc4d87d030c7d Mon Sep 17 00:00:00 2001 From: Charles Burgess Date: Tue, 13 Aug 2019 16:55:35 -0400 Subject: [PATCH 2/3] match codebase style --- src/BreadcrumbsItem.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/BreadcrumbsItem.js b/src/BreadcrumbsItem.js index 3a99fff..b02630d 100644 --- a/src/BreadcrumbsItem.js +++ b/src/BreadcrumbsItem.js @@ -75,9 +75,8 @@ const BreadcrumbsItem = (props) => { if (routeName !== null) routeName = routeName || name; - if (titleFn && isDefined(routeName) && match.isExact) { + if (titleFn && isDefined(routeName) && match.isExact) document.title = titleFn(routeName); - } if (isDefined(routeName)) return match.isExact From 315adade15974b613506d1603a0fc94e826ccdd8 Mon Sep 17 00:00:00 2001 From: Charles Burgess Date: Wed, 21 Aug 2019 15:43:25 -0400 Subject: [PATCH 3/3] build artifacts --- dist/BreadcrumbsItem.js | 5 ++++- dist/index.js | 9 ++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/dist/BreadcrumbsItem.js b/dist/BreadcrumbsItem.js index aede81a..41e32e3 100644 --- a/dist/BreadcrumbsItem.js +++ b/dist/BreadcrumbsItem.js @@ -29,7 +29,8 @@ var BreadcrumbsItem = function BreadcrumbsItem(props) { var _props$parentProps = props.parentProps, ActiveLinkComponent = _props$parentProps.ActiveLinkComponent, LinkComponent = _props$parentProps.LinkComponent, - routeMatcherRegex = _props$parentProps.routeMatcherRegex; + routeMatcherRegex = _props$parentProps.routeMatcherRegex, + titleFn = _props$parentProps.titleFn; var placeholderMatcher = /:[^\s/]+/g; @@ -125,6 +126,8 @@ var BreadcrumbsItem = function BreadcrumbsItem(props) { var routeName = matchRouteName(match.url, mappedRoutes); if (routeName !== null) routeName = routeName || name; + if (titleFn && isDefined(routeName) && match.isExact) document.title = titleFn(routeName); + if (isDefined(routeName)) return match.isExact ? _react2.default.createElement( ActiveLinkComponent, null, diff --git a/dist/index.js b/dist/index.js index cc43b31..a5475cb 100644 --- a/dist/index.js +++ b/dist/index.js @@ -31,7 +31,8 @@ var BreadcrumbsWrapper = function BreadcrumbsWrapper(props) { ActiveLinkComponent: props.ActiveLinkComponent, LinkComponent: props.LinkComponent, rootName: props.rootName, - routeMatcherRegex: props.routeMatcherRegex + routeMatcherRegex: props.routeMatcherRegex, + titleFn: props.titleFn }, rest)); } }); @@ -59,7 +60,8 @@ BreadcrumbsWrapper.defaultProps = { props.children ); }, - rootName: '' + rootName: '', + titleFn: undefined }; BreadcrumbsWrapper.propTypes = { @@ -68,7 +70,8 @@ BreadcrumbsWrapper.propTypes = { ActiveLinkComponent: _propTypes2.default.func, LinkComponent: _propTypes2.default.func, rootName: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), - routeMatcherRegex: _propTypes2.default.string + routeMatcherRegex: _propTypes2.default.string, + titleFn: _propTypes2.default.func }; exports.default = BreadcrumbsWrapper; \ No newline at end of file