@dabapps/roe
Version:
A collection of React components, styles, mixins, and atomic CSS classes to aid with the development of web applications.
205 lines (179 loc) • 5.44 kB
Markdown
#### Example
ModalRenderer is required to render modals.
Place ModalRenderer in the root component of your app.
```js
import {
Modal,
ModalHeader,
ModalCloseIcon,
ModalBody,
ModalFooter,
ModalRenderer,
SpacedGroup,
Button,
DabIpsum,
} from '@dabapps/roe';
const X_CHAR = String.fromCharCode(215);
class ModalExample extends React.Component {
constructor(props) {
super(props);
this.state = {
modals: [],
};
this.onClickOpenModal = this.onClickOpenModal.bind(this);
this.onClickOpenScrollableModal = this.onClickOpenScrollableModal.bind(
this
);
this.onClickOpenSmallModal = this.onClickOpenSmallModal.bind(this);
this.onClickOpenLargeModal = this.onClickOpenLargeModal.bind(this);
this.onClickCloseModal = this.onClickCloseModal.bind(this);
}
onClickCloseModal() {
this.setState({
modals: [],
});
}
onClickOpenModal() {
this.setState({
modals: [
<Modal onClickOutside={this.onClickCloseModal}>
<ModalHeader>
<ModalCloseIcon onClick={this.onClickCloseModal}>
{/* Replace this char with an icon */}
{X_CHAR}
</ModalCloseIcon>
<h5>Header</h5>
</ModalHeader>
<ModalBody>
<DabIpsum />
</ModalBody>
<ModalFooter>
<SpacedGroup block className="margin-vertical-base">
<Button onClick={this.onClickCloseModal}>Cancel</Button>
<Button className="primary" onClick={this.onClickCloseModal}>
Done
</Button>
</SpacedGroup>
</ModalFooter>
</Modal>,
],
});
}
onClickOpenScrollableModal() {
this.setState({
modals: [
<Modal scrollable onClickOutside={this.onClickCloseModal}>
<ModalHeader>
<ModalCloseIcon onClick={this.onClickCloseModal}>
{/* Replace this char with an icon */}
{X_CHAR}
</ModalCloseIcon>
<h5>Header</h5>
</ModalHeader>
<ModalBody>
<DabIpsum count={20} />
</ModalBody>
<ModalFooter>
<SpacedGroup block className="margin-vertical-base">
<Button onClick={this.onClickCloseModal}>Cancel</Button>
<Button className="primary" onClick={this.onClickCloseModal}>
Done
</Button>
</SpacedGroup>
</ModalFooter>
</Modal>,
],
});
}
onClickOpenSmallModal() {
this.setState({
modals: [
<Modal small scrollable onClickOutside={this.onClickCloseModal}>
<ModalHeader>
<ModalCloseIcon onClick={this.onClickCloseModal}>
{/* Replace this char with an icon */}
{X_CHAR}
</ModalCloseIcon>
<h5>Header</h5>
</ModalHeader>
<ModalBody>
<DabIpsum count={1} />
</ModalBody>
<ModalFooter>
<SpacedGroup block className="margin-vertical-base">
<Button onClick={this.onClickCloseModal}>Cancel</Button>
<Button className="primary" onClick={this.onClickCloseModal}>
Done
</Button>
</SpacedGroup>
</ModalFooter>
</Modal>,
],
});
}
onClickOpenLargeModal() {
this.setState({
modals: [
<Modal large scrollable onClickOutside={this.onClickCloseModal}>
<ModalHeader>
<ModalCloseIcon onClick={this.onClickCloseModal}>
{/* Replace this char with an icon */}
{X_CHAR}
</ModalCloseIcon>
<h5>Header</h5>
</ModalHeader>
<ModalBody>
<DabIpsum count={30} />
</ModalBody>
<ModalFooter>
<SpacedGroup block className="margin-vertical-base">
<Button onClick={this.onClickCloseModal}>Cancel</Button>
<Button className="primary" onClick={this.onClickCloseModal}>
Done
</Button>
</SpacedGroup>
</ModalFooter>
</Modal>,
],
});
}
render() {
const { modals } = this.state;
return (
<div>
<Button block onClick={this.onClickOpenModal}>
Open modal example
</Button>
<Button block onClick={this.onClickOpenScrollableModal}>
Open scrollable modal example
</Button>
<Button block onClick={this.onClickOpenSmallModal}>
Open small modal example
</Button>
<Button block onClick={this.onClickOpenLargeModal}>
Open large modal example
</Button>
<ModalRenderer modals={modals} />
</div>
);
}
}
<ModalExample />;
```
#### Less variables
```css
-overlay-background: -background;
-background: -box-background;
-header-background: -box-header-background;
-header-border: -box-header-border;
-footer-background: -header-background;
-footer-border: -header-border;
-margin-vertical: -width / 2;
-margin-horizontal: -width / 2;
-width-base-sm: -sm;
-width-base-md: -md;
-width-small-md: -sm;
-width-large-lg: -lg;
-width-large-xl: -xl;
-z-index: 1100;
```