@salesforce/design-system-react
Version:
Salesforce Lightning Design System for React
356 lines (343 loc) • 9.96 kB
JSX
import React from 'react';
import { storiesOf, action } from '@storybook/react';
import IconSettings from '../../icon-settings';
import { GLOBAL_NAVIGATION_BAR } from '../../../utilities/constants';
import { propSets } from '../../../utilities/sample-data/global-navigation-bar';
import GlobalNavigationBar from '../../global-navigation-bar';
import GlobalNavigationBarRegion from '../../global-navigation-bar/region';
import GlobalNavigationBarDropdown from '../../global-navigation-bar/dropdown';
import GlobalNavigationBarLink from '../../global-navigation-bar/link';
import GlobalNavigationBarLabel from '../../global-navigation-bar/label';
import GlobalNavigationBarButton from '../../global-navigation-bar/button';
import AppLauncher from '../../app-launcher';
import AppLauncherSection from '../../app-launcher/section';
import AppLauncherTile from '../../app-launcher/tile';
// aliased to allow copy and paste from component tests
const buttonClicked = action;
const dropdownItemClicked = action;
const linkClicked = action;
const searchClicked = action;
const dropdownCollection = [
{
label: 'Main action',
value: '0',
iconCategory: 'utility',
iconName: 'table',
href: 'http://www.google.com',
},
{
label: 'Menu Header',
type: 'header',
divider: 'top',
},
{
label: 'Menu Item One',
value: '1',
iconCategory: 'utility',
iconName: 'kanban',
href: 'http://www.google.com',
},
{
label: 'Menu Item Two',
value: '2',
iconCategory: 'utility',
iconName: 'kanban',
href: 'http://www.google.com',
},
{
label: 'Menu Item Three',
value: '3',
iconCategory: 'utility',
iconName: 'side_list',
href: 'http://www.google.com',
},
{
label: 'Menu Item Four',
value: '4',
iconCategory: 'utility',
iconName: 'side_list',
href: 'http://www.google.com',
},
{
type: 'divider',
},
{
label: 'Menu Item Five',
value: '5',
iconCategory: 'utility',
iconName: 'side_list',
href: 'http://www.google.com',
},
];
/* eslint-disable react/display-name */
const getGlobalNavigationBar = (props, primaryRegionProps) => (
<GlobalNavigationBar {...props}>
<GlobalNavigationBarRegion region="primary" {...primaryRegionProps}>
<AppLauncher
onSearch={searchClicked('App Launcher searched')}
assistiveText="Open App Launcher"
id="app-launcher-trigger"
triggerName="App Name"
>
<AppLauncherSection title="All Items">
<AppLauncherTile
title="Marketing Cloud"
iconText="MC"
description="Send emails, track emails, read emails! Emails!"
onClick={action('Tile clicked!')}
/>
</AppLauncherSection>
</AppLauncher>
</GlobalNavigationBarRegion>
<GlobalNavigationBarRegion region="secondary" navigation>
<GlobalNavigationBarLink
href="https://www.lightningdesignsystem.com/"
label="Home"
id="home-link"
onClick={linkClicked(
'Home link clicked. Actual href should be ignored'
)}
onKeyDown={(e) => {
console.log(e.target);
}}
/>
<GlobalNavigationBarDropdown
assistiveText="Open Menu Item 1"
id="primaryDropdown"
label="Menu Item"
openOn={props.openOn || undefined}
onSelect={dropdownItemClicked('Dropdown Menu Item clicked')}
options={dropdownCollection}
/>
<GlobalNavigationBarLink
// will actually go to website
href="https://www.lightningdesignsystem.com/"
label="Menu Item"
/>
<GlobalNavigationBarLink
active
label="Menu Item"
onClick={linkClicked('Link clicked')}
/>
<GlobalNavigationBarLink
label="Menu Item"
onClick={linkClicked('Link clicked')}
/>
</GlobalNavigationBarRegion>
<GlobalNavigationBarRegion region="tertiary">
<GlobalNavigationBarButton
label="Button"
onClick={buttonClicked('Button clicked')}
/>
<GlobalNavigationBarLink
label="Actions"
onClick={buttonClicked('Link clicked')}
/>
<GlobalNavigationBarLabel
dividerPosition="left"
label="Vandelay Enterprises"
/>
</GlobalNavigationBarRegion>
</GlobalNavigationBar>
);
const getGlobalNavigationBarCustomCloud = (props, primaryRegionProps) => (
<GlobalNavigationBar {...props}>
<GlobalNavigationBarRegion region="primary" {...primaryRegionProps}>
<AppLauncher
onSearch={searchClicked('App Launcher searched')}
{...primaryRegionProps.appLauncher}
>
<AppLauncherSection title="All Items">
<AppLauncherTile
title="Marketing Cloud"
iconText="MC"
description="Send emails, track emails, read emails! Emails!"
onClick={action('Tile clicked!')}
/>
</AppLauncherSection>
</AppLauncher>
</GlobalNavigationBarRegion>
<GlobalNavigationBarRegion region="secondary" navigation>
<GlobalNavigationBarLink
label="Overview"
id="overview-link"
onClick={linkClicked('Overview link clicked')}
/>
<GlobalNavigationBarDropdown
id="contentDropdown"
label="Content"
onSelect={dropdownItemClicked('Content Menu Item clicked')}
options={dropdownCollection}
/>
<GlobalNavigationBarDropdown
id="subscribersDropdown"
label="Subscribers"
onSelect={dropdownItemClicked('Subscribers Menu Item clicked')}
options={dropdownCollection}
/>
<GlobalNavigationBarDropdown
id="interactionDropdown"
label="Interaction"
onSelect={dropdownItemClicked('Interaction Menu Item clicked')}
options={dropdownCollection}
/>
<GlobalNavigationBarLink
label="A/B Testing"
onClick={linkClicked('A/B Testing Link clicked')}
/>
<GlobalNavigationBarDropdown
id="trackingDropdown"
label="Tracking"
onSelect={dropdownItemClicked('Tracking Menu Item clicked')}
options={dropdownCollection}
/>
<GlobalNavigationBarLink
label="Admin"
onClick={linkClicked('Admin Link clicked')}
/>
<GlobalNavigationBarLink
label="Audience Builder"
onClick={linkClicked('Audience Builder Link clicked')}
/>
</GlobalNavigationBarRegion>
<GlobalNavigationBarRegion region="tertiary">
<GlobalNavigationBarLink
label="Actions"
onClick={linkClicked('Link clicked')}
/>
</GlobalNavigationBarRegion>
</GlobalNavigationBar>
);
const getGlobalNavigationBarCustomCloudOverviewActive = (
props,
primaryRegionProps
) => (
<GlobalNavigationBar {...props}>
<GlobalNavigationBarRegion region="primary">
<AppLauncher
onSearch={searchClicked('App Launcher searched')}
{...primaryRegionProps.appLauncher}
>
<AppLauncherSection title="All Items">
<AppLauncherTile
title="Marketing Cloud"
iconText="MC"
description="Send emails, track emails, read emails! Emails!"
onClick={action('Tile clicked!')}
/>
</AppLauncherSection>
</AppLauncher>
</GlobalNavigationBarRegion>
<GlobalNavigationBarRegion region="secondary" navigation>
<GlobalNavigationBarLink
label="Overview"
id="overview-link"
active
activeBackgroundColor="#ffffff"
onClick={linkClicked('Overview link clicked')}
/>
<GlobalNavigationBarDropdown
id="contentDropdown"
label="Content"
onSelect={dropdownItemClicked('Content Menu Item clicked')}
options={dropdownCollection}
/>
<GlobalNavigationBarDropdown
id="subscribersDropdown"
label="Subscribers"
onSelect={dropdownItemClicked('Subscribers Menu Item clicked')}
options={dropdownCollection}
/>
<GlobalNavigationBarDropdown
active
activeBackgroundColor="#ffffff"
id="interactionDropdown"
label="Interaction"
onSelect={dropdownItemClicked('Interaction Menu Item clicked')}
options={dropdownCollection}
/>
<GlobalNavigationBarLink
label="A/B Testing"
onClick={linkClicked('A/B Testing Link clicked')}
/>
<GlobalNavigationBarDropdown
id="trackingDropdown"
label="Tracking"
onSelect={dropdownItemClicked('Tracking Menu Item clicked')}
options={dropdownCollection}
/>
<GlobalNavigationBarLink
label="Admin"
onClick={linkClicked('Admin Link clicked')}
/>
<GlobalNavigationBarLink
label="Audience Builder"
onClick={linkClicked('Audience Builder Link clicked')}
/>
</GlobalNavigationBarRegion>
<GlobalNavigationBarRegion region="tertiary">
<GlobalNavigationBarLink
label="Actions"
onClick={linkClicked('Link clicked')}
/>
</GlobalNavigationBarRegion>
</GlobalNavigationBar>
);
const getGlobalNavigationBarNoNav = (props, primaryRegionProps) => (
<GlobalNavigationBar {...props}>
<GlobalNavigationBarRegion region="primary" {...primaryRegionProps}>
<AppLauncher
onSearch={searchClicked('App Launcher searched')}
assistiveText="Open App Launcher"
id="app-launcher-trigger"
triggerName="App Name"
>
<AppLauncherSection title="All Items">
<AppLauncherTile
title="Marketing Cloud"
iconText="MC"
description="Send emails, track emails, read emails! Emails!"
onClick={action('Tile clicked!')}
/>
</AppLauncherSection>
</AppLauncher>
</GlobalNavigationBarRegion>
</GlobalNavigationBar>
);
storiesOf(GLOBAL_NAVIGATION_BAR, module)
.addDecorator((getStory) => (
<div className="slds-p-around--medium">
<IconSettings iconPath="/assets/icons">{getStory()}</IconSettings>
</div>
))
.add('Base', () =>
getGlobalNavigationBar(
propSets.base.props,
propSets.base.primaryRegionProps
)
)
.add('Custom Cloud', () =>
getGlobalNavigationBarCustomCloud(
propSets.customCloud.props,
propSets.customCloud.primaryRegionProps
)
)
.add('Custom Cloud (Multiple active and white)', () =>
getGlobalNavigationBarCustomCloudOverviewActive(
propSets.customCloud.props,
propSets.customCloud.primaryRegionProps
)
)
.add('No Secondary Navigation', () =>
getGlobalNavigationBarNoNav(
propSets.noNav.props,
propSets.noNav.primaryRegionProps
)
)
.add('Hybrid Dropdown', () =>
getGlobalNavigationBar(
propSets.hybrid.props,
propSets.base.primaryRegionProps
)
);
export default getGlobalNavigationBar;