Skip to content

Commit 41331ae

Browse files
authored
Merge pull request #1476 from interactivellama/vertical-navigation
Move Navigation to VerticalNavigation
2 parents 2d91f63 + 64b8506 commit 41331ae

File tree

18 files changed

+177
-167
lines changed

18 files changed

+177
-167
lines changed

components/index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,5 +238,8 @@ export UtilityIcon from './utilities/utility-icon';
238238
export SLDSTree from './tree';
239239
export Tree from './tree';
240240

241+
export SLDSVerticalNavigation from './vertical-navigation';
242+
export VerticalNavigation from './vertical-navigation';
243+
241244
// Library utilities
242245
export log from '../utilities/log';

components/navigation/index.jsx

Lines changed: 3 additions & 138 deletions
Original file line numberDiff line numberDiff line change
@@ -1,142 +1,7 @@
11
/* Copyright (c) 2015-present, salesforce.com, inc. All rights reserved */
22
/* Licensed under BSD 3-Clause - see LICENSE.txt or git.io/sfdc-license */
33

4-
// Implements the [Navigation design pattern](https://lightningdesignsystem.com/components/navigation/) in React.
5-
// Based on SLDS v2.2.1
4+
// Alias
5+
import VerticalNavigation from '../vertical-navigation';
66

7-
import React from 'react';
8-
import createReactClass from 'create-react-class';
9-
import PropTypes from 'prop-types';
10-
11-
// ### classNames
12-
// [github.com/JedWatson/classnames](https://github.com/JedWatson/classnames)
13-
// This project uses `classnames`, 'a simple javascript utility for conditionally
14-
// joining classNames together.'
15-
import classNames from 'classnames';
16-
17-
// ### shortid
18-
// [npmjs.com/package/shortid](https://www.npmjs.com/package/shortid)
19-
// shortid is a short, non-sequential, url-friendly, unique id generator
20-
import shortid from 'shortid';
21-
22-
import { NAVIGATION } from '../../utilities/constants';
23-
24-
// Child components
25-
import Item from './private/item';
26-
27-
/**
28-
* Navigation represents a list of links that either take the user to another page or parts of the page the user is in.
29-
*/
30-
const Navigation = createReactClass({
31-
displayName: NAVIGATION,
32-
33-
propTypes: {
34-
/**
35-
* HTML id for component. _Tested with snapshot testing._
36-
*/
37-
id: PropTypes.string,
38-
/**
39-
* CSS class names to be added to the container element. _Tested with snapshot testing._
40-
*/
41-
className: PropTypes.oneOfType([
42-
PropTypes.array,
43-
PropTypes.object,
44-
PropTypes.string,
45-
]),
46-
/**
47-
* Array of categories. The required shape is: `{id: string, label: string, items: array}`. The required shape of an item is `{id: string, label: string, url: string}`. All item ids are expected to be unique. _Tested with snapshot testing._
48-
*/
49-
categories: PropTypes.array,
50-
/**
51-
* The ID of the item that is currently selected. Defaults to the ID of the first item. _Tested with Mocha framework._
52-
*/
53-
selectedId: PropTypes.string,
54-
/**
55-
* Triggered when the selection changes. It receives an event and an item object in the shape: `event, {item: [object] }`. _Tested with Mocha framework._
56-
*/
57-
onSelect: PropTypes.func,
58-
/**
59-
* Determines component style. _Tested with snapshot testing._
60-
*/
61-
variant: PropTypes.oneOf(['default', 'shade']),
62-
},
63-
64-
getDefaultProps () {
65-
return {
66-
variant: 'default',
67-
};
68-
},
69-
70-
componentWillMount () {
71-
this.generatedId = shortid.generate();
72-
},
73-
74-
getId () {
75-
return this.props.id || this.generatedId;
76-
},
77-
78-
getVariant () {
79-
return this.props.variant === 'shade' ? 'shade' : 'default';
80-
},
81-
82-
getSelectedId () {
83-
const categories = this.props.categories;
84-
let selectedId;
85-
if (this.props.selectedId) {
86-
selectedId = this.props.selectedId;
87-
} else if (
88-
categories.length > 0 &&
89-
categories[0].items &&
90-
categories[0].items.length > 0
91-
) {
92-
selectedId = categories[0].items[0].id;
93-
}
94-
return selectedId;
95-
},
96-
97-
render () {
98-
const rootId = this.getId();
99-
const variant = this.getVariant();
100-
return (
101-
<div
102-
id={rootId}
103-
className={classNames(
104-
'slds-grid',
105-
'slds-grid--vertical',
106-
'slds-navigation-list--vertical',
107-
{
108-
'slds-navigation-list--vertical-inverse': variant === 'shade',
109-
},
110-
this.props.className
111-
)}
112-
>
113-
{this.props.categories.map((category) => {
114-
const categoryId = `${rootId}-${category.id}`;
115-
const selectedId = this.getSelectedId();
116-
return [
117-
<h2
118-
id={categoryId}
119-
key={`${categoryId}-header`}
120-
className="slds-text-title--caps slds-p-around--medium"
121-
>
122-
{category.label}
123-
</h2>,
124-
<ul key={categoryId}>
125-
{category.items.map((item) => (
126-
<Item
127-
key={item.id}
128-
item={item}
129-
isSelected={item.id === selectedId}
130-
categoryId={categoryId}
131-
onSelect={this.props.onSelect}
132-
/>
133-
))}
134-
</ul>,
135-
];
136-
})}
137-
</div>
138-
);
139-
},
140-
});
141-
142-
export default Navigation;
7+
export default VerticalNavigation;

components/site-stories.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ const documentationSiteLiveExamples = {
3232
'menu-dropdown': require('@salesforce/design-system-react/components/menu-dropdown/__docs__/site-stories.js'),
3333
'menu-picklist': require('@salesforce/design-system-react/components/menu-picklist/__docs__/site-stories.js'),
3434
modal: require('@salesforce/design-system-react/components/modal/__docs__/site-stories.js'),
35-
navigation: require('@salesforce/design-system-react/components/navigation/__docs__/site-stories.js'),
3635
notification: require('@salesforce/design-system-react/components/notification/__docs__/site-stories.js'),
3736
'page-header': require('@salesforce/design-system-react/components/page-header/__docs__/site-stories.js'),
3837
panel: require('@salesforce/design-system-react/components/panel/__docs__/site-stories.js'),
@@ -51,6 +50,7 @@ const documentationSiteLiveExamples = {
5150
toast: require('@salesforce/design-system-react/components/toast/__docs__/site-stories.js'),
5251
tooltip: require('@salesforce/design-system-react/components/tooltip/__docs__/site-stories.js'),
5352
tree: require('@salesforce/design-system-react/components/tree/__docs__/site-stories.js'),
53+
'vertical-navigation': require('@salesforce/design-system-react/components/vertical-navigation/__docs__/site-stories.js'),
5454
};
5555

5656
module.exports = documentationSiteLiveExamples;

components/story-based-tests.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ export Icon from '../components/icon/__docs__/storybook-stories';
3636
export Illustration from '../components/illustration/__docs__/storybook-stories';
3737
// export Lookup from '../components/lookup/__docs__/storybook-stories';
3838
// export MediaObject from '../components/media-object/__docs__/storybook-stories';
39-
// export Navigation from '../components/navigation/__docs__/storybook-stories';
4039
// export PageHeader from '../components/page-header/__docs__/storybook-stories';
4140
// export Pill from '../components/pill/__docs__/storybook-stories';
4241
// export ProgressRing from '../components/progress-ring/__docs__/storybook-stories';
@@ -48,6 +47,7 @@ export Illustration from '../components/illustration/__docs__/storybook-stories'
4847
// export Toast from '../components/toast/__docs__/storybook-stories';
4948
// export Tooltip from '../components/tooltip/__docs__/storybook-stories';
5049
export Tree from '../components/tree/__docs__/storybook-stories';
50+
// export VerticalNavigation from '../components/vertical-navigation/__docs__/storybook-stories';
5151

5252
/*
5353
* The following components are not compatible Jest testing because

components/storybook-stories.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ export Illustration from '../components/illustration/__docs__/storybook-stories'
3737
export Lookup from '../components/lookup/__docs__/storybook-stories';
3838
export MediaObject from '../components/media-object/__docs__/storybook-stories';
3939
export Modal from '../components/modal/__docs__/storybook-stories';
40-
export Navigation from '../components/navigation/__docs__/storybook-stories';
4140
export Notification from '../components/notification/__docs__/storybook-stories';
4241
export PageHeader from '../components/page-header/__docs__/storybook-stories';
4342
export Panel from '../components/panel/__docs__/storybook-stories';
@@ -56,3 +55,4 @@ export TimePicker from '../components/time-picker/__docs__/storybook-stories';
5655
export Toast from '../components/toast/__docs__/storybook-stories';
5756
export Tooltip from '../components/tooltip/__docs__/storybook-stories';
5857
export Tree from '../components/tree/__docs__/storybook-stories';
58+
export VerticalNavigation from '../components/vertical-navigation/__docs__/storybook-stories';

components/navigation/__docs__/site-stories.js renamed to components/vertical-navigation/__docs__/site-stories.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
/* eslint-disable global-require */
55

66
const siteStories = [
7-
require('raw-loader!@salesforce/design-system-react/components/navigation/__examples__/default.jsx'),
8-
require('raw-loader!@salesforce/design-system-react/components/navigation/__examples__/shade.jsx'),
7+
require('raw-loader!@salesforce/design-system-react/components/vertical-navigation/__examples__/default.jsx'),
8+
require('raw-loader!@salesforce/design-system-react/components/vertical-navigation/__examples__/shade.jsx'),
99
];
1010

1111
module.exports = siteStories;

components/navigation/__docs__/storybook-stories.jsx renamed to components/vertical-navigation/__docs__/storybook-stories.jsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ import React from 'react';
22
import { storiesOf, action } from '@storybook/react';
33
import IconSettings from '../../icon-settings';
44

5-
import { NAVIGATION } from '../../../utilities/constants';
5+
import { VERTICAL_NAVIGATION } from '../../../utilities/constants';
66

77
import Default from '../__examples__/default';
88
import Shade from '../__examples__/shade';
99
import SnaphotDefault from '../__examples__/snapshot-default';
1010

11-
storiesOf(NAVIGATION, module)
11+
storiesOf(VERTICAL_NAVIGATION, module)
1212
.addDecorator((getStory) => (
1313
<div className="slds-p-around--medium">
1414
<IconSettings iconPath="/assets/icons">{getStory()}</IconSettings>

components/navigation/__examples__/default.jsx renamed to components/vertical-navigation/__examples__/default.jsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import React from 'react';
33
import createReactClass from 'create-react-class';
44
import IconSettings from '~/components/icon-settings';
5-
import Navigation from '~/components/navigation';
5+
import VerticalNavigation from '~/components/vertical-navigation';
66

77
const sampleReportCategories = [
88
{
@@ -40,7 +40,7 @@ const Example = createReactClass({
4040
return (
4141
<IconSettings iconPath="/assets/icons">
4242
<div style={{ width: '320px' }}>
43-
<Navigation
43+
<VerticalNavigation
4444
id="sample-navigation"
4545
categories={sampleReportCategories}
4646
selectedId={this.state.selectedId}

components/navigation/__examples__/shade.jsx renamed to components/vertical-navigation/__examples__/shade.jsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import React from 'react';
33
import createReactClass from 'create-react-class';
44
import IconSettings from '~/components/icon-settings';
5-
import Navigation from '~/components/navigation';
5+
import VerticalNavigation from '~/components/vertical-navigation';
66

77
const sampleSearchCategories = [
88
{
@@ -45,7 +45,7 @@ const Example = createReactClass({
4545
return (
4646
<IconSettings iconPath="/assets/icons">
4747
<div style={{ width: '320px', backgroundColor: '#FAFAFB' }}>
48-
<Navigation
48+
<VerticalNavigation
4949
id="sample-navigation"
5050
variant="shade"
5151
categories={sampleSearchCategories}

components/navigation/__examples__/snapshot-default.jsx renamed to components/vertical-navigation/__examples__/snapshot-default.jsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,18 @@ import React from 'react';
33
import createReactClass from 'create-react-class';
44

55
// Higher Order Components such as `react-onclickoutside` use the DOM and Jest snapshot testing must be DOMless
6-
import Navigation from '~/components/navigation';
6+
import VerticalNavigation from '~/components/vertical-navigation';
77
import IconSettings from '~/components/icon-settings';
88

9-
import { sampleReportCategories } from '~/utilities/sample-data/navigation';
9+
import { sampleReportCategories } from '~/utilities/sample-data/vertical-navigation';
1010

1111
const Example = createReactClass({
1212
displayName: 'NavigationExample',
1313

1414
render () {
1515
return (
1616
<IconSettings iconPath="/assets/icons">
17-
<Navigation
17+
<VerticalNavigation
1818
id="sample-navigation"
1919
categories={sampleReportCategories}
2020
{...this.props}

components/navigation/__tests__/navigation.browser-test.jsx renamed to components/vertical-navigation/__tests__/navigation.browser-test.jsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ import {
2323
unmountComponent,
2424
} from '../../../tests/enzyme-helpers';
2525

26-
import { sampleReportCategories } from '../../../utilities/sample-data/navigation';
27-
import Navigation from '../../navigation';
26+
import { sampleReportCategories } from '../../../utilities/sample-data/vertical-navigation';
27+
import VerticalNavigation from '../../vertical-navigation';
2828

2929
// shim for PhantomJS
3030
if (!Object.entries) {
@@ -63,11 +63,11 @@ const DemoComponent = createReactClass({
6363
// event handlers
6464

6565
render () {
66-
return <Navigation {...this.props} />;
66+
return <VerticalNavigation {...this.props} />;
6767
},
6868
});
6969

70-
describe('SLDSNavigation', () => {
70+
describe('SLDSVerticalNavigation', () => {
7171
describe('Assistive technology', () => {
7272
/* Detect if presence of accessibility features such as ARIA
7373
* roles and screen reader text is present in the DOM.

0 commit comments

Comments
 (0)