import React, { useCallback, useMemo, useState } from 'react';
import DateBox, { DateBoxTypes } from 'devextreme-react/date-box';
import service from './data.ts';
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' };
function App() {
const [value, setValue] = useState(new Date(1981, 3, 27));
const now = new Date();
const firstWorkDay2017 = new Date(2017, 0, 3);
const min = new Date(1900, 0, 1);
const dateClear = new Date(2015, 11, 1, 6);
const disabledDates = service.getFederalHolidays();
const diffInDay = useMemo(
() =>
`${Math.floor(
Math.abs((new Date().getTime() - value.getTime()) / (24 * 60 * 60 * 1000)),
)} days`,
[value],
);
const onValueChanged = useCallback((e: DateBoxTypes.ValueChangedEvent) => {
setValue(e.value);
}, []);
return (
<div>
<div className="dx-fieldset">
<div className="dx-field">
<div className="dx-field-label">Date</div>
<div className="dx-field-value">
<DateBox
defaultValue={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={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={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={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={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={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={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={firstWorkDay2017}
type="date"
pickerType="calendar"
inputAttr={disabledLabel}
disabledDates={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={value}
min={min}
max={now}
inputAttr={birthDateLabel}
onValueChanged={onValueChanged}
/>
</div>
</div>
<div className="dx-field">
<div className="dx-field-value">
Your age is <div id="age">{diffInDay}</div>
</div>
</div>
</div>
</div>
);
}
export default App;
import React, { useCallback, useMemo, useState } 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' };
function App() {
const [value, setValue] = useState(new Date(1981, 3, 27));
const now = new Date();
const firstWorkDay2017 = new Date(2017, 0, 3);
const min = new Date(1900, 0, 1);
const dateClear = new Date(2015, 11, 1, 6);
const disabledDates = service.getFederalHolidays();
const diffInDay = useMemo(
() =>
`${Math.floor(
Math.abs((new Date().getTime() - value.getTime()) / (24 * 60 * 60 * 1000)),
)} days`,
[value],
);
const onValueChanged = useCallback((e) => {
setValue(e.value);
}, []);
return (
<div>
<div className="dx-fieldset">
<div className="dx-field">
<div className="dx-field-label">Date</div>
<div className="dx-field-value">
<DateBox
defaultValue={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={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={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={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={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={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={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={firstWorkDay2017}
type="date"
pickerType="calendar"
inputAttr={disabledLabel}
disabledDates={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={value}
min={min}
max={now}
inputAttr={birthDateLabel}
onValueChanged={onValueChanged}
/>
</div>
</div>
<div className="dx-field">
<div className="dx-field-value">
Your age is <div id="age">{diffInDay}</div>
</div>
</div>
</div>
</div>
);
}
export default App;
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.tsx';
ReactDOM.render(<App />, document.getElementById('app'));
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.exports = window.exports || {};
window.config = {
transpiler: 'ts',
typescriptOptions: {
module: 'system',
emitDecoratorMetadata: true,
experimentalDecorators: true,
jsx: 'react',
},
meta: {
'react': {
'esModule': true,
},
'typescript': {
'exports': 'ts',
},
'devextreme/time_zone_utils.js': {
'esModule': true,
},
'devextreme/localization.js': {
'esModule': true,
},
'devextreme/viz/palette.js': {
'esModule': true,
},
'openai': {
'esModule': true,
},
},
paths: {
'npm:': 'https://unpkg.com/',
'bundles:': '../../../../bundles/',
'externals:': '../../../../bundles/externals/',
},
defaultExtension: 'js',
map: {
'ts': 'npm:plugin-typescript@8.0.0/lib/plugin.js',
'typescript': 'npm:typescript@4.2.4/lib/typescript.js',
'jszip': 'npm:jszip@3.10.1/dist/jszip.min.js',
'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/prop-types.js',
'rrule': 'npm:rrule@2.6.4/dist/es5/rrule.js',
'luxon': 'npm:luxon@3.4.4/build/global/luxon.min.js',
'es6-object-assign': 'npm:es6-object-assign',
'devextreme': 'npm:devextreme@link:../../packages/devextreme/artifacts/npm/devextreme/cjs',
'devextreme-react': 'npm:devextreme-react@link:../../packages/devextreme-react/npm/cjs',
'devextreme-quill': 'npm:devextreme-quill@1.7.1/dist/dx-quill.min.js',
'devexpress-diagram': 'npm:devexpress-diagram@2.2.5/dist/dx-diagram.js',
'devexpress-gantt': 'npm:devexpress-gantt@4.1.54/dist/dx-gantt.js',
'@devextreme/runtime': 'npm:@devextreme/runtime@3.0.12',
'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/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',
'devextreme-cldr-data': 'npm:devextreme-cldr-data@1.0.3',
// 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.8/standalone.js',
'prettier/parser-html': 'npm:prettier@2.8.8/parser-html.js',
},
packages: {
'devextreme': {
defaultExtension: 'js',
},
'devextreme-react': {
main: 'index.js',
},
'devextreme/events/utils': {
main: 'index',
},
'devextreme/localization/messages': {
format: 'json',
defaultExtension: 'json',
},
'devextreme/events': {
main: 'index',
},
'es6-object-assign': {
main: './index.js',
defaultExtension: 'js',
},
},
packageConfigPaths: [
'npm:@devextreme/*/package.json',
'npm:@devextreme/runtime@3.0.12/inferno/package.json',
],
babelOptions: {
sourceMaps: false,
stage0: true,
react: true,
},
};
System.config(window.config);
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.js';
ReactDOM.render(<App />, document.getElementById('app'));
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;
},
};
<!DOCTYPE html>
<html lang="en">
<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=5.0" />
<link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/24.2.3/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.tsx");
</script>
</head>
<body class="dx-viewport">
<div class="demo-container">
<div id="app"></div>
</div>
</body>
</html>
#age {
display: inline-block;
}