material-components
Version:
Stateless UI components for react that follow material design
151 lines (144 loc) • 4.03 kB
JavaScript
import React from 'react';
import { connect } from '@cerebral/react';
import Example from './example';
import { Col, Row, Select } from '../../lib';
import { state, signal } from 'cerebral/tags';
const options = [
{ value: 0, label: 'Option 1' },
{ value: 1, label: 'Option 2' },
{ value: 2, label: 'Option 3' },
{ value: 3, label: 'Option 4' }
];
const SelectDemo = ({
select,
selectOpened,
selectChanged,
selectClosed,
selectSuccessOpened,
selectSuccessClosed,
selectErrorOpened,
selectErrorClosed,
selectLargeOpened,
selectLargeChanged,
selectLargeClosed
}) => (
<div>
<Example
code={`
import { Select } from 'material-components';
`}
/>
<Example
code={`
let options = [
{ value: 0, label: 'Option 1' },
{ value: 1, label: 'Option 2' },
{ value: 2, label: 'Option 3' }
];
<Select
label="option"
selected={selectedObject}
options={options}
isOpen={isSelectOpen}
onOpen={setOpenState}
onChange={optionSelected}
onClose={setClosedState}/>
<Select
label="Success option"
selected={selectedObject}
options={options}
isSuccess
isOpen={isSelectOpen}
onOpen={setOpenState}
onChange={optionSelected}
onClose={setClosedState}/>
// note that this version uses value instead of a selected object
<Select
label="Error option"
value={selectedObject.value}
options={options}
isError
message="fix me"
isOpen={isSelectOpen}
onOpen={setOpenState}
onChange={optionSelected}
onClose={setClosedState}/>
`}
/>
<div style={{ margin: '16px 0' }}>
<Row>
<Col type="md-4">
<Select
label="option"
selected={select.selected}
options={options}
isOpen={select.selectOpen}
onOpen={e => selectOpened()}
onChange={e => selectChanged({ value: e.target })}
onClose={e => selectClosed()}
/>
</Col>
<Col type="md-4">
<Select
label="Success option"
selected={select.selected}
options={options}
isSuccess
isOpen={select.selectSuccessOpen}
onOpen={e => selectSuccessOpened()}
onChange={e => selectChanged({ value: e.target })}
onClose={e => selectSuccessClosed()}
/>
</Col>
<Col type="md-4">
<Select
label="Error option"
value={select.selected && select.selected.value}
options={options}
isError
message="fix me"
isOpen={select.selectErrorOpen}
onOpen={e => selectErrorOpened()}
onChange={e => selectChanged({ value: e.target })}
onClose={e => selectErrorClosed()}
/>
</Col>
</Row>
<Row>
<Col type="md-4 md-offset-4">
<Select
label="large list of items"
value={select.largeSelectedValue}
options={(() => {
let options = [];
for (let i = 0; i < 100; i++) {
options.push({ value: i, label: `Option ${i + 1}` });
}
return options;
})()}
isOpen={select.largeSelectOpen}
onOpen={e => selectLargeOpened()}
onChange={e => selectLargeChanged({ value: e.target.value })}
onClose={e => selectLargeClosed()}
/>
</Col>
</Row>
</div>
</div>
);
export default connect(
{
select: state`demos.select`,
selectOpened: signal`selectOpened`,
selectChanged: signal`selectChanged`,
selectClosed: signal`selectClosed`,
selectSuccessOpened: signal`selectSuccessOpened`,
selectSuccessClosed: signal`selectSuccessClosed`,
selectErrorOpened: signal`selectErrorOpened`,
selectErrorClosed: signal`selectErrorClosed`,
selectLargeOpened: signal`selectLargeOpened`,
selectLargeChanged: signal`selectLargeChanged`,
selectLargeClosed: signal`selectLargeClosed`
},
SelectDemo
);