import React from 'react';
import DateBox from 'devextreme-react/date-box';
import service from './data.js';
const dateTimeLabel = { 'aria-label': 'Date Time' };
const dateLabel = { 'aria-label': 'Date' };
const timeLabel = { 'aria-label': 'Time' };
const disabledLabel = { 'aria-label': 'Disabled' };
const pickerLabel = { 'aria-label': 'Picker' };
const clearLabel = { 'aria-label': 'Clear' };
const customFormatLabel = { 'aria-label': 'Custom Format' };
const birthDateLabel = { 'aria-label': 'Birth Date' };
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
value: new Date(1981, 3, 27),
};
this.now = new Date();
this.firstWorkDay2017 = new Date(2017, 0, 3);
this.min = new Date(1900, 0, 1);
this.dateClear = new Date(2015, 11, 1, 6);
this.disabledDates = service.getFederalHolidays();
this.onValueChanged = this.onValueChanged.bind(this);
}
get diffInDay() {
return `${Math.floor(Math.abs(((new Date()).getTime() - this.state.value.getTime()) / (24 * 60 * 60 * 1000)))} days`;
}
onValueChanged(e) {
this.setState({
value: e.value,
});
}
render() {
return (
<div>
<div className="dx-fieldset">
<div className="dx-field">
<div className="dx-field-label">Date</div>
<div className="dx-field-value">
<DateBox defaultValue={this.now}
inputAttr={dateLabel}
type="date" />
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">Time</div>
<div className="dx-field-value">
<DateBox defaultValue={this.now}
inputAttr={timeLabel}
type="time" />
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">Date and time</div>
<div className="dx-field-value">
<DateBox defaultValue={this.now}
inputAttr={dateTimeLabel}
type="datetime" />
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">Custom format</div>
<div className="dx-field-value">
<DateBox defaultValue={this.now}
inputAttr={customFormatLabel}
displayFormat="EEEE, MMM dd" />
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">Date picker</div>
<div className="dx-field-value">
<DateBox defaultValue={this.now}
inputAttr={pickerLabel}
pickerType="rollers" />
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">Clear button</div>
<div className="dx-field-value">
<DateBox defaultValue={this.dateClear}
type="time"
inputAttr={clearLabel}
showClearButton={true} />
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">Disabled</div>
<div className="dx-field-value">
<DateBox defaultValue={this.now}
type="datetime"
inputAttr={disabledLabel}
disabled={true} />
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">Disable certain dates</div>
<div className="dx-field-value">
<DateBox defaultValue={this.firstWorkDay2017}
type="date"
pickerType="calendar"
inputAttr={disabledLabel}
disabledDates={this.disabledDates} />
</div>
</div>
</div>
<div className="dx-fieldset">
<div className="dx-fieldset-header">Event Handling</div>
<div className="dx-field">
<div className="dx-field-label">Set Birthday</div>
<div className="dx-field-value">
<DateBox applyValueMode="useButtons"
value={this.state.value}
min={this.min}
max={this.now}
inputAttr={birthDateLabel}
onValueChanged={this.onValueChanged} />
</div>
</div>
<div className="dx-field">
<div className="dx-field-value">
Your age is <div id="age">{this.diffInDay}</div>
</div>
</div>
</div>
</div>
);
}
}
export default App;
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.js';
ReactDOM.render(
<App />,
document.getElementById('app'),
);
<!DOCTYPE html>
<html>
<head>
<title>DevExtreme Demo</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
<link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/23.1.5/css/dx.light.css" />
<link rel="stylesheet" type="text/css" href="styles.css" />
<script src="https://unpkg.com/core-js@2.6.12/client/shim.min.js"></script>
<script src="https://unpkg.com/systemjs@0.21.3/dist/system.js"></script>
<script type="text/javascript" src="config.js"></script>
<script type="text/javascript">
System.import("./index.js");
</script>
</head>
<body class="dx-viewport">
<div class="demo-container">
<div id="app"></div>
</div>
</body>
</html>
#age {
display: inline-block;
}
const federalHolidays = [
new Date(2017, 0, 1),
new Date(2017, 0, 2),
new Date(2017, 0, 16),
new Date(2017, 1, 20),
new Date(2017, 4, 29),
new Date(2017, 6, 4),
new Date(2017, 8, 4),
new Date(2017, 9, 9),
new Date(2017, 10, 11),
new Date(2017, 10, 23),
new Date(2017, 11, 25),
];
export default {
getFederalHolidays() {
return federalHolidays;
},
};
window.config = {
transpiler: 'plugin-babel',
meta: {
'devextreme/localization.js': {
'esModule': true,
},
},
paths: {
'npm:': 'https://unpkg.com/',
},
defaultExtension: 'js',
map: {
'react': 'npm:react@17.0.2/umd/react.development.js',
'react-dom': 'npm:react-dom@17.0.2/umd/react-dom.development.js',
'prop-types': 'npm:prop-types@15.8.1/prop-types.js',
'rrule': 'npm:rrule@2.6.4/dist/es5/rrule.js',
'luxon': 'npm:luxon@1.28.1/build/global/luxon.min.js',
'es6-object-assign': 'npm:es6-object-assign@1.1.0',
'devextreme': 'npm:devextreme@23.1.5/cjs',
'devextreme-react': 'npm:devextreme-react@23.1.5',
'jszip': 'npm:jszip@3.7.1/dist/jszip.min.js',
'devextreme-quill': 'npm:devextreme-quill@1.6.2/dist/dx-quill.min.js',
'devexpress-diagram': 'npm:devexpress-diagram@2.2.1/dist/dx-diagram.js',
'devexpress-gantt': 'npm:devexpress-gantt@4.1.48/dist/dx-gantt.js',
'@devextreme/runtime': 'npm:@devextreme/runtime@3.0.11',
'inferno': 'npm:inferno@7.4.11/dist/inferno.min.js',
'inferno-compat': 'npm:inferno-compat/dist/inferno-compat.min.js',
'inferno-create-element': 'npm:inferno-create-element@7.4.11/dist/inferno-create-element.min.js',
'inferno-dom': 'npm:inferno-dom/dist/inferno-dom.min.js',
'inferno-hydrate': 'npm:inferno-hydrate@7.4.11/dist/inferno-hydrate.min.js',
'inferno-clone-vnode': 'npm:inferno-clone-vnode/dist/inferno-clone-vnode.min.js',
'inferno-create-class': 'npm:inferno-create-class/dist/inferno-create-class.min.js',
'inferno-extras': 'npm:inferno-extras/dist/inferno-extras.min.js',
// SystemJS plugins
'plugin-babel': 'npm:systemjs-plugin-babel@0.0.25/plugin-babel.js',
'systemjs-babel-build': 'npm:systemjs-plugin-babel@0.0.25/systemjs-babel-browser.js',
// Prettier
'prettier/standalone': 'npm:prettier@2.8.4/standalone.js',
'prettier/parser-html': 'npm:prettier@2.8.4/parser-html.js',
},
packages: {
'devextreme': {
defaultExtension: 'js',
},
'devextreme-react': {
main: 'index.js',
},
'devextreme/events/utils': {
main: 'index',
},
'devextreme/events': {
main: 'index',
},
'es6-object-assign': {
main: './index.js',
defaultExtension: 'js',
},
},
packageConfigPaths: [
'npm:@devextreme/*/package.json',
'npm:@devextreme/runtime@3.0.11/inferno/package.json',
],
babelOptions: {
sourceMaps: false,
stage0: true,
react: true,
},
};
System.config(window.config);