@onextech/react-semantic-booster
Version:
Extended components for react-semantic-ui
165 lines (157 loc) • 5.57 kB
JavaScript
import React from 'react';
import { storiesOf } from '@storybook/react';
import { Container, Menu, Card, Grid } from 'semantic-ui-react';
import Sider from '.';
import Block from '../../atoms/Block';
import MenuLink from '../../atoms/MenuLink';
import { testCardImage } from '../../../../test/placeholders';
export const CardExampleColored = () => (<Card.Group itemsPerRow={4}>
<Grid stackable>
<Grid.Row columns="equal">
<Grid.Column>
<Card fluid image={testCardImage} />
</Grid.Column>
<Grid.Column>
<Card fluid image={testCardImage} />
</Grid.Column>
<Grid.Column>
<Card fluid image={testCardImage} />
</Grid.Column>
</Grid.Row>
<Grid.Row columns="equal">
<Grid.Column>
<Card fluid image={testCardImage} />
</Grid.Column>
<Grid.Column>
<Card fluid image={testCardImage} />
</Grid.Column>
<Grid.Column>
<Card fluid image={testCardImage} />
</Grid.Column>
</Grid.Row>
<Grid.Row columns="equal">
<Grid.Column>
<Card fluid image={testCardImage} />
</Grid.Column>
<Grid.Column>
<Card fluid image={testCardImage} />
</Grid.Column>
<Grid.Column>
<Card fluid image={testCardImage} />
</Grid.Column>
</Grid.Row>
<Grid.Row columns="equal">
<Grid.Column>
<Card fluid image={testCardImage} />
</Grid.Column>
<Grid.Column>
<Card fluid image={testCardImage} />
</Grid.Column>
<Grid.Column>
<Card fluid image={testCardImage} />
</Grid.Column>
</Grid.Row>
</Grid>
</Card.Group>);
export class ExampleMenu extends React.Component {
state = { activeItem: 'closest' }
handleItemClick = (e, { name }) => this.setState({ activeItem: name })
render() {
const { activeItem } = this.state;
return (
<div style={{ padding: '1.3em' }}>
<Menu text vertical fluid>
<Menu.Item header>Sort By</Menu.Item>
<Menu.Item name='closest' active={activeItem === 'closest'} onClick={this.handleItemClick} />
<Menu.Item name='mostComments' active={activeItem === 'mostComments'} onClick={this.handleItemClick} />
<Menu.Item name='mostPopular' active={activeItem === 'mostPopular'} onClick={this.handleItemClick} />
</Menu>
<Menu text vertical fluid>
<Menu.Item header>Filter By</Menu.Item>
<Menu.Item name='price' active={activeItem === 'price'} onClick={this.handleItemClick} />
<Menu.Item name='dateAdded' active={activeItem === 'dateAdded'} onClick={this.handleItemClick} />
<Menu.Item name='lame' active={activeItem === 'lame'} onClick={this.handleItemClick} />
</Menu>
<Menu text vertical fluid>
<Menu.Item header>Categories</Menu.Item>
<Menu.Item name='chocolate' active={activeItem === 'chocolate'} onClick={this.handleItemClick} />
<Menu.Item name='milo' active={activeItem === 'milo'} onClick={this.handleItemClick} />
<Menu.Item name='latte' active={activeItem === 'latte'} onClick={this.handleItemClick} />
</Menu>
</div>
);
}
}
export const ExampleContent = () => (<Block attached inverted textAlign="center" style={{ padding: '2em' }}>
<Container>
<CardExampleColored />
</Container>
</Block>);
export const ExampleMenuItems = () => ([
<Menu.Menu key="left" position="left">
<MenuLink key={1} to="/1">One</MenuLink>
<MenuLink key={2} to="/2">Two</MenuLink>
<MenuLink key={3} to="/3">Three</MenuLink>
</Menu.Menu>,
<Menu.Menu key="right" position="right">
<MenuLink key={4} to="/4">Four</MenuLink>
<MenuLink key={5} to="/5">Five</MenuLink>
<MenuLink key={6} to="/6">Six</MenuLink>
</Menu.Menu>,
]);
storiesOf('Sider', module)
.add('Filter', () => (
<div>
<Block secondary attached>
<Container>
<h1>Hello World</h1>
</Container>
</Block>
<Sider
navScroll
toggleProps={{ name: 'Filter', icon: 'filter', button: { primary: true } }}
sidebar={<ExampleMenu />}
menuItems={<ExampleMenuItems />}>
<ExampleContent />
</Sider>
<Block secondary>
<Container>
<h3>Hello World</h3>
</Container>
</Block>
</div>
))
.add('Dashboard', () => {
const DashboardMenu = () => (
<Menu vertical fluid inverted style={{ height: '100%', borderRadius: 0 }}>
<Menu.Item header>Sort By</Menu.Item>
<Menu.Item name='closest' />
<Menu.Item name='mostComments' />
<Menu.Item name='mostPopular' />
</Menu>
);
const DashboardNav = () => ([
<Menu.Menu key="left" position="left">
<MenuLink key={1} to="/1">One</MenuLink>
</Menu.Menu>,
<Menu.Menu key="right" position="right">
<MenuLink key={5} to="/5">Five</MenuLink>
<MenuLink key={6} to="/6">Six</MenuLink>
</Menu.Menu>,
]);
return (
<div>
<Sider
showDesktopToggle={false}
toggleProps={{ icon: 'content', button: { primary: true } }}
sidebar={<DashboardMenu />}
menuItems={<DashboardNav />}>
<Block attached secondary textAlign="center" style={{ padding: '2em' }}>
<Container>
<CardExampleColored />
</Container>
</Block>
</Sider>
</div>
);
});