Files
DefinitelyTyped/react-daterange-picker/react-daterange-picker-tests.tsx
Shinya Ohyanagi 2364c306eb Add definitions for react-daterange-picker (#10983)
* Add react-daterange-picker

* Fix 2-space to 4-space and add semicolon

DefinitelyTyped contributing says 'use tabs or 4-space indentation'.

* Remove declare var

declare var did not effected to build and run application.

* Add comment

Use Literal Types after TypeScript 2.0 GA released.

* Fix file name

Change react-daterange-picker-test.tsx to react-daterange-picker-tests.tsx
2016-09-07 20:15:23 +09:00

179 lines
5.6 KiB
TypeScript

/// <reference path="react-daterange-picker.d.ts" />
/// <reference path="../react/react-global.d.ts" />
// Test app from https://github.com/onefinestay/react-daterange-picker/blob/master/example/index.jsx
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import * as moment from 'moment';
import 'moment-range';
import * as DateRangePicker from 'react-daterange-picker';
interface AppProps extends ReactDateRangePicker.Props {
}
class App extends React.Component<AppProps, any> {
constructor(props: AppProps, context: any) {
super(props, context);
this.state = {};
}
handleSelect(value: AppProps, states: any): void {
this.setState({value, states});
}
render(): any {
return (
<div>
<DateRangePicker {...this.props}
onSelect={this.handleSelect.bind(this)}
value={this.state.value} />
<div>
<input type="text"
value={this.state.value ? this.state.value.start.format('LL') : ""}
readOnly={true}
placeholder="Start date"/>
<input type="text"
value={this.state.value ? this.state.value.end.format('LL') : ""}
readOnly={true}
placeholder="End date" />
</div>
</div>
);
}
}
class DateSinglePicker extends React.Component<AppProps, any> {
constructor(props : AppProps, context: any) {
super(props, context);
this.state = {};
}
handleSelect(value: AppProps) {
this.setState({value: value});
}
render() {
return (
<div>
<DateRangePicker {...this.props} onSelect={this.handleSelect.bind(this)}
value={this.state.value} />
<div>
<input type="text"
value={this.state.value ? this.state.value.format('LL') : ""}
readOnly={true} />
</div>
</div>
);
}
}
export class Main extends React.Component<any, any> {
render() {
const stateDefinitions: ReactDateRangePicker.StateDefinitions = {
available: {
color: '#ffffff',
label: 'Available',
},
enquire: {
color: '#ffd200',
label: 'Enquire',
},
unavailable: {
selectable: false,
color: '#78818b',
label: 'Unavailable',
}
};
const dateRanges = [
{
state: 'enquire',
range: moment.range(
moment().add(2, 'weeks').subtract(5, 'days'),
moment().add(2, 'weeks').add(6, 'days')
),
},
{
state: 'unavailable',
range: moment.range(
moment().add(3, 'weeks'),
moment().add(3, 'weeks').add(5, 'days')
),
},
];
const initialStart = moment().add(1, 'weeks').startOf('day');
const initialEnd = moment().add(1, 'weeks').add(3, 'days').startOf('day');
const range = moment.range(initialStart, initialEnd);
return (
<div className="content">
<div className="example">
<App
firstOfWeek={1}
numberOfCalendars={2}
selectionType='range'
minimumDate={new Date()}
maximumDate={moment().add(2, 'years').toDate()}
stateDefinitions={stateDefinitions}
dateStates={dateRanges}
defaultState="available"
value={range}
showLegend={true}
/>
</div>
<div className="examples">
<h2>Examples</h2>
<div className="example">
<h4>Range with no date states</h4>
<App
numberOfCalendars={2}
selectionType="range"
minimumDate={new Date()}
/>
</div>
<div className="example">
<h4>Range with day-long ranges allowed</h4>
<App
numberOfCalendars={2}
selectionType="range"
singleDateRange={true}
minimumDate={new Date()}
/>
</div>
<div className="example">
<h4>Range with no minimum date</h4>
<App
numberOfCalendars={2}
selectionType="range"
singleDateRange={true}
/>
</div>
<div className="example">
<h4>Single with no date states</h4>
<DateSinglePicker
numberOfCalendars={2}
selectionType="single"
minimumDate={new Date()}
/>
</div>
</div>
</div>
);
}
}
const MainFactory = React.createFactory(Main);
ReactDOM.render(
MainFactory(),
document.getElementById('app')
);