1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 | import * as React from "react";
|
18 | import { polyfill } from "react-lifecycles-compat";
|
19 |
|
20 | import { AbstractPureComponent2, Intent } from "../../common";
|
21 | import * as Errors from "../../common/errors";
|
22 | import { DISPLAYNAME_PREFIX } from "../../common/props";
|
23 | import { ISliderBaseProps, MultiSlider } from "./multiSlider";
|
24 |
|
25 | export type NumberRange = [number, number];
|
26 |
|
27 | enum RangeIndex {
|
28 | START = 0,
|
29 | END = 1,
|
30 | }
|
31 |
|
32 |
|
33 | export type RangeSliderProps = IRangeSliderProps;
|
34 |
|
35 | export interface IRangeSliderProps extends ISliderBaseProps {
|
36 | |
37 |
|
38 |
|
39 |
|
40 |
|
41 | value?: NumberRange;
|
42 |
|
43 |
|
44 | onChange?(value: NumberRange): void;
|
45 |
|
46 |
|
47 | onRelease?(value: NumberRange): void;
|
48 | }
|
49 |
|
50 | @polyfill
|
51 | export class RangeSlider extends AbstractPureComponent2<RangeSliderProps> {
|
52 | public static defaultProps: RangeSliderProps = {
|
53 | ...MultiSlider.defaultSliderProps,
|
54 | intent: Intent.PRIMARY,
|
55 | value: [0, 10],
|
56 | };
|
57 |
|
58 | public static displayName = `${DISPLAYNAME_PREFIX}.RangeSlider`;
|
59 |
|
60 | public render() {
|
61 | const { value, ...props } = this.props;
|
62 | return (
|
63 | <MultiSlider {...props}>
|
64 | <MultiSlider.Handle value={value![RangeIndex.START]} type="start" intentAfter={props.intent} />
|
65 | <MultiSlider.Handle value={value![RangeIndex.END]} type="end" />
|
66 | </MultiSlider>
|
67 | );
|
68 | }
|
69 |
|
70 | protected validateProps(props: RangeSliderProps) {
|
71 | const { value } = props;
|
72 | if (value == null || value[RangeIndex.START] == null || value[RangeIndex.END] == null) {
|
73 | throw new Error(Errors.RANGESLIDER_NULL_VALUE);
|
74 | }
|
75 | }
|
76 | }
|