If you have technical questions, please create a support ticket in the DevExpress Support Center.
import React, { useCallback, useState } from 'react';
import { Button } from 'devextreme-react/button';
import { CheckBox, ICheckBoxOptions } from 'devextreme-react/check-box';
import { LoadPanel } from 'devextreme-react/load-panel';
import { employee } from './data.ts';
const position = { of: '#employee' };
const defaultEmployeeInfo: Partial<typeof employee> = {};
export default function App() {
const [employeeInfo, setEmployeeInfo] = useState(defaultEmployeeInfo);
const [loadPanelVisible, setLoadPanelVisible] = useState(false);
const [showIndicator, setShowIndicator] = useState(true);
const [shading, setShading] = useState(true);
const [showPane, setShowPane] = useState(true);
const [hideOnOutsideClick, setHideOnOutsideClick] = useState(false);
const hideLoadPanel = useCallback(() => {
setLoadPanelVisible(false);
setEmployeeInfo(employee);
}, [setLoadPanelVisible, setEmployeeInfo]);
const onClick = useCallback(() => {
setEmployeeInfo({});
setLoadPanelVisible(true);
setTimeout(hideLoadPanel, 3000);
}, [setEmployeeInfo, setLoadPanelVisible]);
const onShowIndicatorChange = useCallback((e: { value: any; }) => {
setShowIndicator(e.value);
}, [setShowIndicator]) as ICheckBoxOptions['onValueChanged'];
const onShadingChange = useCallback((e: { value: any; }) => {
setShading(e.value);
}, [setShading]) as ICheckBoxOptions['onValueChanged'];
const onShowPaneChange = useCallback((e: { value: any; }) => {
setShowPane(e.value);
}, [setShowPane]) as ICheckBoxOptions['onValueChanged'];
const onHideOnOutsideClickChange = useCallback((e: { value: any; }) => {
setHideOnOutsideClick(e.value);
}, [setHideOnOutsideClick]) as ICheckBoxOptions['onValueChanged'];
return (
<React.Fragment>
<div className="header">John Heart</div>
<Button text="Load Data" onClick={onClick}></Button>
<div id="employee">
<p>
Birth date: <b>{employeeInfo.Birth_Date}</b>
</p>
<p className="address">
Address:<br />
<b>{employeeInfo.City}</b><br />
<span>{employeeInfo.Zipcode}</span>
<span>{employeeInfo.Address}</span>
</p>
<p>
Phone: <b>{employeeInfo.Mobile_Phone}</b><br />
Email: <b>{employeeInfo.Email}</b>
</p>
</div>
<LoadPanel
shadingColor="rgba(0,0,0,0.4)"
position={position}
onHiding={hideLoadPanel}
visible={loadPanelVisible}
showIndicator={showIndicator}
shading={shading}
showPane={showPane}
hideOnOutsideClick={hideOnOutsideClick}
/>
<div className="options">
<div className="caption">Options</div>
<div className="option">
<CheckBox
text="With indicator"
value={showIndicator}
onValueChanged={onShowIndicatorChange}
/>
</div>
<div className="option">
<CheckBox
text="With overlay"
value={shading}
onValueChanged={onShadingChange}
/>
</div>
<div className="option">
<CheckBox
text="With pane"
value={showPane}
onValueChanged={onShowPaneChange}
/>
</div>
<div className="option">
<CheckBox
text="Hide on outside click"
value={hideOnOutsideClick}
onValueChanged={onHideOnOutsideClickChange}
/>
</div>
</div>
</React.Fragment>
);
}
xxxxxxxxxx
import React, { useCallback, useState } from 'react';
import { Button } from 'devextreme-react/button';
import { CheckBox } from 'devextreme-react/check-box';
import { LoadPanel } from 'devextreme-react/load-panel';
import { employee } from './data.js';
const position = { of: '#employee' };
const defaultEmployeeInfo = {};
export default function App() {
const [employeeInfo, setEmployeeInfo] = useState(defaultEmployeeInfo);
const [loadPanelVisible, setLoadPanelVisible] = useState(false);
const [showIndicator, setShowIndicator] = useState(true);
const [shading, setShading] = useState(true);
const [showPane, setShowPane] = useState(true);
const [hideOnOutsideClick, setHideOnOutsideClick] = useState(false);
const hideLoadPanel = useCallback(() => {
setLoadPanelVisible(false);
setEmployeeInfo(employee);
}, [setLoadPanelVisible, setEmployeeInfo]);
const onClick = useCallback(() => {
setEmployeeInfo({});
setLoadPanelVisible(true);
setTimeout(hideLoadPanel, 3000);
}, [setEmployeeInfo, setLoadPanelVisible]);
const onShowIndicatorChange = useCallback(
(e) => {
setShowIndicator(e.value);
},
[setShowIndicator],
);
const onShadingChange = useCallback(
(e) => {
setShading(e.value);
},
[setShading],
);
const onShowPaneChange = useCallback(
(e) => {
setShowPane(e.value);
},
[setShowPane],
);
const onHideOnOutsideClickChange = useCallback(
(e) => {
setHideOnOutsideClick(e.value);
},
[setHideOnOutsideClick],
);
return (
<React.Fragment>
<div className="header">John Heart</div>
<Button
text="Load Data"
onClick={onClick}
></Button>
<div id="employee">
<p>
Birth date: <b>{employeeInfo.Birth_Date}</b>
</p>
<p className="address">
Address:
<br />
<b>{employeeInfo.City}</b>
<br />
<span>{employeeInfo.Zipcode}</span>
<span>{employeeInfo.Address}</span>
</p>
<p>
Phone: <b>{employeeInfo.Mobile_Phone}</b>
<br />
Email: <b>{employeeInfo.Email}</b>
</p>
</div>
<LoadPanel
shadingColor="rgba(0,0,0,0.4)"
position={position}
onHiding={hideLoadPanel}
visible={loadPanelVisible}
showIndicator={showIndicator}
shading={shading}
showPane={showPane}
hideOnOutsideClick={hideOnOutsideClick}
/>
<div className="options">
<div className="caption">Options</div>
<div className="option">
<CheckBox
text="With indicator"
value={showIndicator}
onValueChanged={onShowIndicatorChange}
/>
</div>
<div className="option">
<CheckBox
text="With overlay"
value={shading}
onValueChanged={onShadingChange}
/>
</div>
<div className="option">
<CheckBox
text="With pane"
value={showPane}
onValueChanged={onShowPaneChange}
/>
</div>
<div className="option">
<CheckBox
text="Hide on outside click"
value={hideOnOutsideClick}
onValueChanged={onHideOnOutsideClickChange}
/>
</div>
</div>
</React.Fragment>
);
}
xxxxxxxxxx
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.tsx';
ReactDOM.render(
<App />,
document.getElementById('app'),
);
xxxxxxxxxx
export const employee = {
Full_Name: 'John Heart',
Title: 'CEO',
Birth_Date: '03/16/1964',
Prefix: 'Mr.',
Address: '351 S Hill St.',
City: 'Los Angeles',
Zipcode: 90013,
Email: 'jheart@dx-email.com',
Skype: 'jheart_DX_skype',
Home_Phone: '(213) 555-9208',
Mobile_Phone: '(213) 555-9392',
};
xxxxxxxxxx
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);
xxxxxxxxxx
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.js';
ReactDOM.render(<App />, document.getElementById('app'));
xxxxxxxxxx
export const employee = {
Full_Name: 'John Heart',
Title: 'CEO',
Birth_Date: '03/16/1964',
Prefix: 'Mr.',
Address: '351 S Hill St.',
City: 'Los Angeles',
Zipcode: 90013,
Email: 'jheart@dx-email.com',
Skype: 'jheart_DX_skype',
Home_Phone: '(213) 555-9208',
Mobile_Phone: '(213) 555-9392',
};
xxxxxxxxxx
<html lang="en">
<head></head>
<body class="dx-viewport">
<div class="demo-container">
<div id="app"></div>
</div>
</body>
</html>
xxxxxxxxxx
.header {
font-size: 34px;
display: inline-block;
vertical-align: middle;
padding: 10px;
margin: 0;
}
#employee {
margin: 20px 0;
touch-callout: none;
user-select: none;
user-select: none;
user-select: none;
user-select: none;
user-select: none;
border-top: 1px solid lightgray;
border-bottom: 1px solid lightgray;
}
#employee > p {
padding: 10px 20px;
margin: 0;
}
.address {
height: 60px;
}
.options {
padding: 20px;
background-color: rgba(191, 191, 191, 0.15);
margin-top: 20px;
}
.caption {
font-size: 18px;
font-weight: 500;
}
.option {
margin-top: 10px;
}
Show and Hide the Indicator and Pane
LoadPanel elements (a message and an animated load indicator) are displayed on a pane. If you want to hide it, set the showPane property to false. You can also disable the showIndicator property to hide the animated load indicator. In this case, the LoadPanel displays only the message. In this demo, you can use the "With indicator" and "With pane" checkboxes to change the visibility of the load indicator and pane.
Configure the Background Shade
When LoadPanel is displayed, it shades the background. Use the shadingColor property to specify the color of the shade. You can also specify the element that should be shaded. For this, assign the element's CSS selector to the container property. If you do not want to shade the background, disable the shading property. In this demo, you can uncheck the "With overlay" checkbox to do it.
Show and Hide LoadPanel
To change the LoadPanel visibility in code, use the visible property. Alternatively, you can call the show() and hide() or toggle(showing) methods.
Users can hide LoadPanel when they click outside it if you enable the hideOnOutsideClick property. Use the "Hide on outside click" checkbox to control this functionality in this demo.
LoadPanel also allows you to handle the show and hide events. Use the onShowing and onHiding functions to handle the events before they occur and possibily cancel them. Use the onShown and onHidden functions to perform required actions after the events are raised.