Preview: http://dashboards.webkom.co/react/airframe
This commit is contained in:
Tomasz Owczarczyk
2019-08-15 00:54:44 +02:00
parent f975443095
commit 37092d1d6c
626 changed files with 56691 additions and 0 deletions

View File

@@ -0,0 +1,500 @@
import React from 'react';
import PropTypes from 'prop-types';
import Slider, { Range } from 'rc-slider';
import colors from './../../../colors';
import {
Form,
FormGroup,
Card,
CardBody,
CardTitle,
Label,
Input,
Button,
Row,
Col,
Container
} from './../../../components';
import { HeaderMain } from "../../components/HeaderMain";
import { HeaderDemo } from "../../components/HeaderDemo";
import classes from './Sliders.scss';
const marks = {
'-10': '-10°C',
0: <strong>0°C</strong>,
26: '26°C',
37: '37°C',
50: '50°C',
100: {
style: {
color: colors['danger'],
},
label: <strong>100°C</strong>,
},
}
class CustomizedRange extends React.Component {
constructor(props) {
super(props);
this.state = {
lowerBound: 20,
upperBound: 40,
value: [20, 40]
};
}
onLowerBoundChange(e) {
this.setState({ lowerBound: +e.target.value });
}
onUpperBoundChange(e) {
this.setState({ upperBound: +e.target.value });
}
onSliderChange(value) {
this.setState({
value,
});
}
handleApply() {
const { lowerBound, upperBound } = this.state;
this.setState({ value: [lowerBound, upperBound] });
}
render() {
return (
<div>
<Form inline className='mb-3 d-flex justify-content-between'>
<div className="d-flex">
<FormGroup className='mr-3'>
<Label>
Lower Bound
</Label>
<Input
type="number"
bsSize="sm"
className={ classes.inlineInput }
value={this.state.lowerBound}
onChange={this.onLowerBoundChange.bind(this)}
/>
</FormGroup>
<FormGroup>
<Label>
Upper Bound
</Label>
<Input
type="number"
bsSize="sm"
className={ classes.inlineInput }
value={this.state.upperBound}
onChange={this.onUpperBoundChange.bind(this)}
/>
</FormGroup>
</div>
<FormGroup>
<Button
onClick={this.handleApply.bind(this)}
type="button"
color="primary"
size="sm"
block
>
Apply
</Button>
</FormGroup>
</Form>
<div className={ classes.sliderWrap }>
<Range allowCross={false} value={this.state.value} onChange={this.onSliderChange.bind(this)} />
</div>
</div>
);
}
}
class DynamicBounds extends React.Component {
static propTypes = {
children: PropTypes.node.isRequired
}
constructor(props) {
super(props);
this.state = {
min: 0,
max: 100,
};
}
onMinChange(e) {
this.setState({
min: +e.target.value || 0,
});
}
onMaxChange(e) {
this.setState({
max: +e.target.value || 100,
});
}
render() {
const { children } = this.props;
const updatedChild = React.cloneElement(React.Children.only(children), {
min: this.state.min,
max: this.state.max
});
return (
<div>
<Form inline className="mb-3">
<FormGroup className="mr-3">
<Label>
Min
</Label>
<Input
className={ classes.inlineInput }
type="number"
value={this.state.min}
onChange={this.onMinChange.bind(this)}
bsSize="sm"
/>
</FormGroup>
<FormGroup>
<Label>
Max
</Label>
<Input
className={ classes.inlineInput }
type="number"
value={this.state.max}
onChange={this.onMaxChange.bind(this)}
bsSize="sm"
/>
</FormGroup>
</Form>
<div className={ classes.sliderWrap }>
{ updatedChild }
</div>
</div>
);
}
}
class ControlledRange extends React.Component {
constructor(props) {
super(props);
this.state = {
value: [20, 40, 60, 80],
};
}
handleChange = (value) => {
this.setState({
value,
});
}
render() {
return (
<Range value={this.state.value} onChange={this.handleChange}/>
);
}
}
class CustomizedSlider extends React.Component {
constructor() {
super();
this.state = {
value: 50
}
}
onSliderChange(value) {
this.setState({
value
});
}
render() {
return(
<Slider value={this.state.value} onChange={this.onSliderChange.bind(this)} />
)
}
}
export class Sliders extends React.Component {
render() {
return (
<Container>
<HeaderMain
title="Sliders"
className="mb-5 mt-4"
/>
<Row>
<Col>
{ /* START Header 1 */}
<HeaderDemo
no={1}
title="Marks"
subTitle={(
<React.Fragment>
See 6 examples below:
</React.Fragment>
)}
/>
{ /* END Header 1 */}
{ /* START Card Example */}
<Card>
<CardBody>
<Row>
<Col lg={ 6 }>
<p>Slider with marks, <code>step=null</code></p>
<div className={ classes.markedSliderWrap }>
<Slider min={-10} marks={marks} step={null} defaultValue={20} />
</div>
</Col>
<Col lg={ 6 }>
<p>Slider with marks, <code>included=false</code></p>
<div className={ classes.markedSliderWrap }>
<Slider min={-10} marks={marks} included={false} defaultValue={20} />
</div>
</Col>
<Col lg={ 6 }>
<p>Slider with marks and steps</p>
<div className={ classes.markedSliderWrap }>
<Slider dots min={-10} marks={marks} step={10} defaultValue={20} />
</div>
</Col>
<Col lg={ 6 }>
<p>Slider with marks and steps, <code>included=false</code></p>
<div className={ classes.markedSliderWrap }>
<Slider min={-10} marks={marks} step={10} included={false} defaultValue={20} />
</div>
</Col>
<Col lg={ 6 }>
<p>Range with marks</p>
<div className={ classes.markedSliderWrap }>
<Range min={-10} marks={marks} defaultValue={[20, 40]} />
</div>
</Col>
<Col lg={ 6 }>
<p>Range with marks and steps</p>
<div className={ classes.markedSliderWrap }>
<Range min={-10} marks={marks} step={10} defaultValue={[20, 40]} />
</div>
</Col>
</Row>
</CardBody>
</Card>
{ /* END Card Example */}
{ /* START Header 2 */}
<HeaderDemo
no={2}
title="Range"
className="mt-5"
subTitle={(
<React.Fragment>
See 8 examples below:
</React.Fragment>
)}
/>
{ /* END Header 2 */}
{ /* START Card Example */}
<Card>
<CardBody>
<Row>
<Col lg={ 6 }>
<p>Basic Range<code>allowCross=false</code></p>
<div className={ classes.rangeSliderWrap }>
<Range allowCross={false} defaultValue={[0, 20]} />
</div>
</Col>
<Col lg={ 6 }>
<p>Basic Range<code>disabled</code></p>
<div className={ classes.rangeSliderWrap }>
<Range allowCross={false} defaultValue={[0, 20]} disabled />
</div>
</Col>
<Col lg={ 6 }>
<p>Basic Range<code>step=20</code> </p>
<div className={ classes.rangeSliderWrap }>
<Range step={20} defaultValue={[20, 20]} />
</div>
</Col>
<Col lg={ 6 }>
<p>Basic Range<code>step=20, dots</code> </p>
<div className={ classes.rangeSliderWrap }>
<Range dots step={20} defaultValue={[20, 40]} />
</div>
</Col>
<Col lg={ 6 }>
<p>Controlled Range</p>
<div className={ classes.rangeSliderWrap }>
<ControlledRange />
</div>
</Col>
<Col lg={ 6 }>
<p>Multi Range</p>
<div className={ classes.rangeSliderWrap }>
<Range count={3} defaultValue={[20, 40, 60, 80]} pushable />
</div>
</Col>
<Col lg={ 6 }>
<p>Customized Range</p>
<div className={ classes.rangeSliderWrap }>
<CustomizedRange />
</div>
</Col>
<Col lg={ 6 }>
<p>Range with dynamic <code>max</code> <code>min</code></p>
<div className={ classes.rangeSliderWrap }>
<DynamicBounds>
<Range defaultValue={[20, 50]} />
</DynamicBounds>
</div>
</Col>
</Row>
</CardBody>
</Card>
{ /* END Card Example */}
{ /* START Header 3 */}
<HeaderDemo
no={3}
title="Sliders"
className="mt-5"
subTitle={(
<React.Fragment>
See 7 examples below:
</React.Fragment>
)}
/>
{ /* END Header 3 */}
{ /* START Card Example */}
<Card>
<CardBody>
<Row>
<Col lg={ 6 }>
<p>Basic Slider</p>
<div className={ classes.rangeSliderWrap }>
<Slider tipTransitionName="rc-slider-tooltip-zoom-down" />
</div>
</Col>
<Col lg={ 6 }>
<p>Basic Slider, <code>disabled</code></p>
<div className={ classes.rangeSliderWrap }>
<Slider tipTransitionName="rc-slider-tooltip-zoom-down" disabled />
</div>
</Col>
<Col lg={ 6 }>
<p>Basic Slider<code>step=20</code></p>
<div className={ classes.rangeSliderWrap }>
<Slider step={20} defaultValue={50} />
</div>
</Col>
<Col lg={ 6 }>
<p>Basic Slider<code>step=20, dots</code></p>
<div className={ classes.rangeSliderWrap }>
<Slider dots step={20} defaultValue={100} />
</div>
</Col>
<Col lg={ 6 }>
<p>Controlled Slider</p>
<div className={ classes.rangeSliderWrap }>
<Slider value={50} />
</div>
</Col>
<Col lg={ 6 }>
<p>Customized Slider</p>
<div className={ classes.rangeSliderWrap }>
<CustomizedSlider />
</div>
</Col>
<Col lg={ 6 }>
<p>Slider with dynamic <code>min</code>, <code>max</code></p>
<div className={ classes.rangeSliderWrap }>
<DynamicBounds>
<Slider defaultValue={50} />
</DynamicBounds>
</div>
</Col>
</Row>
</CardBody>
</Card>
{ /* START Header 4 */}
<HeaderDemo
no={4}
title="Vertical Sliders"
className="mt-5"
subTitle={(
<React.Fragment>
See 6 examples below:
</React.Fragment>
)}
/>
{ /* END Header 4 */}
{ /* START Card Example */}
<Card>
<CardBody>
<Row>
<Col lg={ 3 }>
<p>Slider with marks, <code>step=null</code></p>
<div className={ classes.markedSliderVerticalWrap }>
<Slider vertical min={-10} marks={marks} step={null} defaultValue={20} />
</div>
</Col>
<Col lg={ 3 }>
<p>Slider with marks and steps</p>
<div className={ classes.markedSliderVerticalWrap }>
<Slider vertical dots min={-10} marks={marks} step={10} defaultValue={20} />
</div>
</Col>
<Col lg={ 3 }>
<p>Slider with marks, <code>included=false</code></p>
<div className={ classes.markedSliderVerticalWrap }>
<Slider vertical min={-10} marks={marks} included={false} defaultValue={20} />
</div>
</Col>
<Col lg={ 3 }>
<p>Slider with marks and steps, <code>included=false</code></p>
<div className={ classes.markedSliderVerticalWrap }>
<Slider vertical min={-10} marks={marks} step={10} included={false} defaultValue={20} />
</div>
</Col>
<Col lg={ 3 }>
<p>Range with marks</p>
<div className={ classes.markedSliderVerticalWrap }>
<Range vertical min={-10} marks={marks} defaultValue={[20, 40]} />
</div>
</Col>
<Col lg={ 3 }>
<p>Range with marks and steps</p>
<div className={ classes.markedSliderVerticalWrap }>
<Range vertical min={-10} marks={marks} step={10}
defaultValue={[20, 40]}
/>
</div>
</Col>
</Row>
</CardBody>
</Card>
{ /* END Card Example */}
</Col>
</Row>
</Container>
);
}
}