Skip to content

Commit

Permalink
Merge 8b83ab3 into 1da24ce
Browse files Browse the repository at this point in the history
  • Loading branch information
jeffredodd committed Jan 29, 2019
2 parents 1da24ce + 8b83ab3 commit 4bc960c
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 28 deletions.
35 changes: 24 additions & 11 deletions src/Breadcrumb/Breadcrumb.Component.js
Original file line number Diff line number Diff line change
@@ -1,18 +1,25 @@
import { Link } from 'react-router-dom';
import React from 'react';
import { Breadcrumb, BreadcrumbItem } from '../';
import { Description, DocsText, DocsTile, Header, Import, Properties, Separator } from '../_playground';

export const BreadcrumbComponent = () => {
const breadcrumbHrefCode = `<Breadcrumb>
<BreadcrumbItem url="#" name="Link Text"/>
<BreadcrumbItem url="#" name="Link Text"/>
<BreadcrumbItem url="#" name="Link Text"/>
<BreadcrumbItem name='Link Text' url='#' />
<BreadcrumbItem name='Link Text' url='#' />
<BreadcrumbItem name='Link Text' url='#' />
</Breadcrumb>`;

const breadcrumbLinkCode = ` <Breadcrumb>
<BreadcrumbItem link="/" name="Link Text" />
<BreadcrumbItem link="/" name="Link Text" />
<BreadcrumbItem link="/" name="Link Text" />
const breadcrumbLinkCode = `<Breadcrumb>
<BreadcrumbItem>
<Link to='#'>Link Text</Link>
</BreadcrumbItem>
<BreadcrumbItem>
<Link to='#'>Link Text</Link>
</BreadcrumbItem>
<BreadcrumbItem>
<Link to='#'>Link Text</Link>
</BreadcrumbItem>
</Breadcrumb>`;

return (
Expand Down Expand Up @@ -43,12 +50,18 @@ export const BreadcrumbComponent = () => {

<Separator />

<h2>Using link (routerLink)</h2>
<h2>Using Link from React Router</h2>
<DocsTile>
<Breadcrumb>
<BreadcrumbItem link='/' name='Link Text' />
<BreadcrumbItem link='/' name='Link Text' />
<BreadcrumbItem link='/' name='Link Text' />
<BreadcrumbItem>
<Link to='#'>Link Text</Link>
</BreadcrumbItem>
<BreadcrumbItem>
<Link to='#'>Link Text</Link>
</BreadcrumbItem>
<BreadcrumbItem>
<Link to='#'>Link Text</Link>
</BreadcrumbItem>
</Breadcrumb>
</DocsTile>
<DocsText>{breadcrumbLinkCode}</DocsText>
Expand Down
32 changes: 19 additions & 13 deletions src/Breadcrumb/Breadcrumb.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import classnames from 'classnames';
import PropTypes from 'prop-types';
import React from 'react';
import { BrowserRouter, Link } from 'react-router-dom';

export const Breadcrumb = ({ children, ...props }) => {
return <ul {...props} className='fd-breadcrumb'>{children}</ul>;
Expand All @@ -15,30 +14,37 @@ Breadcrumb.propDescriptions = {
children: 'List item (`BreadcrumbItem`) nodes.'
};

export const BreadcrumbItem = ({ url, link, name, className, ...props }) => {
export const BreadcrumbItem = ({ url, name, className, children, ...props }) => {
const renderLink = () => {
if (!children && url) {
return (
<a className='fd-breadcrumb__link' href={url}>{name}</a>
);
} else if (children) {
return React.cloneElement(children, {
'className': 'fd-breadcrumb__link'
});
}
};

const breadcrumbItemClasses = classnames(
'fd-breadcrumb__item',
className
);

return (
<BrowserRouter>
<li {...props} className={breadcrumbItemClasses}>
{link && <Link className='fd-breadcrumb__link' to={{ pathname: link }}>{name}</Link>}
{url && <a className='fd-breadcrumb__link' href={url}>{name}</a>}
</li>
</BrowserRouter>
<li {...props} className={breadcrumbItemClasses}>
{renderLink()}
</li>
);
};

BreadcrumbItem.propTypes = {
name: PropTypes.string.isRequired,
link: PropTypes.string,
name: PropTypes.string,
url: PropTypes.string
};

BreadcrumbItem.propDescriptions = {
name: 'Localized display text of the link (for either `link` or `url`).',
link: 'Enables use of react-router `Link` component. Path name to be applied to Link\'s `to` prop. Should use either `link` or `url`, but not both.',
url: 'Enables use of `<a>` element. Value to be applied to the anchor\'s `href` attribute. Should use either `link` or `url`, but not both.'
name: 'Text for the internal anchor tag.',
url: 'An anchor tag will be generated and set to the url prop. Name or child text must be provided.'
};
12 changes: 8 additions & 4 deletions src/Breadcrumb/Breadcrumb.test.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { MemoryRouter } from 'react-router-dom';
import { mount } from 'enzyme';
import React from 'react';
import renderer from 'react-test-renderer';
import { Breadcrumb, BreadcrumbItem } from './Breadcrumb';
import { Link, MemoryRouter } from 'react-router-dom';

describe('<Breadcrumb />', () => {
const defaultBreadCrumb = (
Expand All @@ -16,9 +16,13 @@ describe('<Breadcrumb />', () => {
const breadCrumbRouterLink = (
<MemoryRouter>
<Breadcrumb className='blue'>
<BreadcrumbItem className='blue' name='Link Text' />
<BreadcrumbItem link='/' name='Link Text' />
<BreadcrumbItem link='/' name='Link Text' />
<BreadcrumbItem className='blue' />
<BreadcrumbItem>
<Link to='/'>Link Text</Link>
</BreadcrumbItem>
<BreadcrumbItem>
<Link to='/'>Link Text</Link>
</BreadcrumbItem>
</Breadcrumb>
</MemoryRouter>
);
Expand Down

0 comments on commit 4bc960c

Please sign in to comment.