Skip to content

Commit 29e8df5

Browse files
authored
feat: Remove React Router from Breadcrumbs (#294)
* Saving state * Updating menu to factor out react-router * Update linting * Reverting menu for easier PR * Update breadcrumb documentation * Fix doc issue * PR feedback * Removing unused prop * Updating desc text * Update documentation
1 parent 76123a9 commit 29e8df5

File tree

3 files changed

+49
-25
lines changed

3 files changed

+49
-25
lines changed

src/Breadcrumb/Breadcrumb.Component.js

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,25 @@
1+
import { Link } from 'react-router-dom';
12
import React from 'react';
23
import { Breadcrumb, BreadcrumbItem } from '../';
34
import { Description, DocsText, DocsTile, Header, Import, Properties, Separator } from '../_playground';
45

56
export const BreadcrumbComponent = () => {
67
const breadcrumbHrefCode = `<Breadcrumb>
7-
<BreadcrumbItem url="#" name="Link Text"/>
8-
<BreadcrumbItem url="#" name="Link Text"/>
9-
<BreadcrumbItem url="#" name="Link Text"/>
8+
<BreadcrumbItem name='Link Text' url='#' />
9+
<BreadcrumbItem name='Link Text' url='#' />
10+
<BreadcrumbItem name='Link Text' url='#' />
1011
</Breadcrumb>`;
1112

12-
const breadcrumbLinkCode = ` <Breadcrumb>
13-
<BreadcrumbItem link="/" name="Link Text" />
14-
<BreadcrumbItem link="/" name="Link Text" />
15-
<BreadcrumbItem link="/" name="Link Text" />
13+
const breadcrumbLinkCode = `<Breadcrumb>
14+
<BreadcrumbItem>
15+
<Link to='#'>Link Text</Link>
16+
</BreadcrumbItem>
17+
<BreadcrumbItem>
18+
<Link to='#'>Link Text</Link>
19+
</BreadcrumbItem>
20+
<BreadcrumbItem>
21+
<Link to='#'>Link Text</Link>
22+
</BreadcrumbItem>
1623
</Breadcrumb>`;
1724

1825
return (
@@ -43,12 +50,18 @@ export const BreadcrumbComponent = () => {
4350

4451
<Separator />
4552

46-
<h2>Using link (routerLink)</h2>
53+
<h2>Using Link from React Router</h2>
4754
<DocsTile>
4855
<Breadcrumb>
49-
<BreadcrumbItem link='/' name='Link Text' />
50-
<BreadcrumbItem link='/' name='Link Text' />
51-
<BreadcrumbItem link='/' name='Link Text' />
56+
<BreadcrumbItem>
57+
<Link to='#'>Link Text</Link>
58+
</BreadcrumbItem>
59+
<BreadcrumbItem>
60+
<Link to='#'>Link Text</Link>
61+
</BreadcrumbItem>
62+
<BreadcrumbItem>
63+
<Link to='#'>Link Text</Link>
64+
</BreadcrumbItem>
5265
</Breadcrumb>
5366
</DocsTile>
5467
<DocsText>{breadcrumbLinkCode}</DocsText>

src/Breadcrumb/Breadcrumb.js

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import classnames from 'classnames';
22
import PropTypes from 'prop-types';
33
import React from 'react';
4-
import { BrowserRouter, Link } from 'react-router-dom';
54

65
export const Breadcrumb = ({ children, ...props }) => {
76
return <ul {...props} className='fd-breadcrumb'>{children}</ul>;
@@ -15,25 +14,33 @@ Breadcrumb.propDescriptions = {
1514
children: 'List item (`BreadcrumbItem`) nodes.'
1615
};
1716

18-
export const BreadcrumbItem = ({ url, link, name, className, ...props }) => {
17+
export const BreadcrumbItem = ({ url, name, className, children, ...props }) => {
18+
const renderLink = () => {
19+
if (!children && url) {
20+
return (
21+
<a className='fd-breadcrumb__link' href={url}>{name}</a>
22+
);
23+
} else if (children) {
24+
return React.cloneElement(children, {
25+
'className': 'fd-breadcrumb__link'
26+
});
27+
}
28+
};
29+
1930
const breadcrumbItemClasses = classnames(
2031
'fd-breadcrumb__item',
2132
className
2233
);
2334

2435
return (
25-
<BrowserRouter>
26-
<li {...props} className={breadcrumbItemClasses}>
27-
{link && <Link className='fd-breadcrumb__link' to={{ pathname: link }}>{name}</Link>}
28-
{url && <a className='fd-breadcrumb__link' href={url}>{name}</a>}
29-
</li>
30-
</BrowserRouter>
36+
<li {...props} className={breadcrumbItemClasses}>
37+
{renderLink()}
38+
</li>
3139
);
3240
};
3341

3442
BreadcrumbItem.propTypes = {
35-
name: PropTypes.string.isRequired,
36-
link: PropTypes.string,
43+
name: PropTypes.string,
3744
url: PropTypes.string
3845
};
3946

src/Breadcrumb/Breadcrumb.test.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import { MemoryRouter } from 'react-router-dom';
21
import { mount } from 'enzyme';
32
import React from 'react';
43
import renderer from 'react-test-renderer';
54
import { Breadcrumb, BreadcrumbItem } from './Breadcrumb';
5+
import { Link, MemoryRouter } from 'react-router-dom';
66

77
describe('<Breadcrumb />', () => {
88
const defaultBreadCrumb = (
@@ -16,9 +16,13 @@ describe('<Breadcrumb />', () => {
1616
const breadCrumbRouterLink = (
1717
<MemoryRouter>
1818
<Breadcrumb className='blue'>
19-
<BreadcrumbItem className='blue' name='Link Text' />
20-
<BreadcrumbItem link='/' name='Link Text' />
21-
<BreadcrumbItem link='/' name='Link Text' />
19+
<BreadcrumbItem className='blue' />
20+
<BreadcrumbItem>
21+
<Link to='/'>Link Text</Link>
22+
</BreadcrumbItem>
23+
<BreadcrumbItem>
24+
<Link to='/'>Link Text</Link>
25+
</BreadcrumbItem>
2226
</Breadcrumb>
2327
</MemoryRouter>
2428
);

0 commit comments

Comments
 (0)