If you have technical questions, please create a support ticket in the DevExpress Support Center.
import React from 'react';
import List from 'devextreme-react/list';
import { employees } from './data.ts';
const GroupTemplate = (item) => <div>Assigned: {item.key}</div>;
const App = () => (
<div className="list-container">
<List
dataSource={employees}
height="100%"
grouped={true}
collapsibleGroups={true}
groupRender={GroupTemplate} />
</div>
);
export default App;
xxxxxxxxxx
import React from 'react';
import List from 'devextreme-react/list';
import { employees } from './data.js';
const GroupTemplate = (item) => <div>Assigned: {item.key}</div>;
const App = () => (
<div className="list-container">
<List
dataSource={employees}
height="100%"
grouped={true}
collapsibleGroups={true}
groupRender={GroupTemplate}
/>
</div>
);
export default App;
xxxxxxxxxx
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.tsx';
ReactDOM.render(
<App />,
document.getElementById('app'),
);
xxxxxxxxxx
export const employees = [{
key: 'Mr. John Heart',
items: ['Choose between PPO and HMO Health Plan', 'Google AdWords Strategy', 'New Brochures', 'Update NDA Agreement', 'Review Product Recall Report by Engineering Team'],
}, {
key: 'Mrs. Olivia Peyton',
items: ['Update Personnel Files', 'Review Health Insurance Options Under the Affordable Care Act', 'Non-Compete Agreements'],
}, {
key: 'Mr. Robert Reagan',
items: ['Deliver R&D Plans for 2013', 'Decide on Mobile Devices to Use in the Field', 'Try New Touch-Enabled WinForms Apps', 'Approval on Converting to New HDMI Specification'],
}, {
key: 'Ms. Greta Sims',
items: ['Approve Hiring of John Jeffers', 'Update Employee Files with New NDA', 'Give Final Approval for Refunds'],
}, {
key: 'Mr. Brett Wade',
items: ['Prepare 3013 Marketing Plan', 'Rollout of New Website and Marketing Brochures', 'Review 2012 Sales Report and Approve 2013 Plans', 'Review Site Up-Time Report'],
}, {
key: 'Mrs. Sandra Johnson',
items: ['Provide New Health Insurance Docs', 'Review HR Budget Company Wide', 'Final Budget Review'],
}, {
key: 'Mr. Kevin Carter',
items: ['Sign Updated NDA', 'Review Overtime Report', 'Upgrade Server Hardware', 'Upgrade Personal Computers'],
}, {
key: 'Ms. Cynthia Stanwick',
items: ['Prepare 2013 Financial', 'Update Revenue Projections', 'Submit D&B Number to ISP for Credit Approval'],
}, {
key: 'Dr. Kent Samuelson',
items: ['Update Sales Strategy Documents', 'Review Revenue Projections', 'Refund Request Template'],
}];
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 employees = [
{
key: 'Mr. John Heart',
items: [
'Choose between PPO and HMO Health Plan',
'Google AdWords Strategy',
'New Brochures',
'Update NDA Agreement',
'Review Product Recall Report by Engineering Team',
],
},
{
key: 'Mrs. Olivia Peyton',
items: [
'Update Personnel Files',
'Review Health Insurance Options Under the Affordable Care Act',
'Non-Compete Agreements',
],
},
{
key: 'Mr. Robert Reagan',
items: [
'Deliver R&D Plans for 2013',
'Decide on Mobile Devices to Use in the Field',
'Try New Touch-Enabled WinForms Apps',
'Approval on Converting to New HDMI Specification',
],
},
{
key: 'Ms. Greta Sims',
items: [
'Approve Hiring of John Jeffers',
'Update Employee Files with New NDA',
'Give Final Approval for Refunds',
],
},
{
key: 'Mr. Brett Wade',
items: [
'Prepare 3013 Marketing Plan',
'Rollout of New Website and Marketing Brochures',
'Review 2012 Sales Report and Approve 2013 Plans',
'Review Site Up-Time Report',
],
},
{
key: 'Mrs. Sandra Johnson',
items: [
'Provide New Health Insurance Docs',
'Review HR Budget Company Wide',
'Final Budget Review',
],
},
{
key: 'Mr. Kevin Carter',
items: [
'Sign Updated NDA',
'Review Overtime Report',
'Upgrade Server Hardware',
'Upgrade Personal Computers',
],
},
{
key: 'Ms. Cynthia Stanwick',
items: [
'Prepare 2013 Financial',
'Update Revenue Projections',
'Submit D&B Number to ISP for Credit Approval',
],
},
{
key: 'Dr. Kent Samuelson',
items: [
'Update Sales Strategy Documents',
'Review Revenue Projections',
'Refund Request Template',
],
},
];
xxxxxxxxxx
<html lang="en">
<head></head>
<body class="dx-viewport">
<div class="demo-container">
<div id="app"></div>
</div>
</body>
</html>
xxxxxxxxxx
.list-container {
min-height: 440px;
width: 100%;
height: auto;
position: absolute;
top: 0;
bottom: 0;
}
Hierarchical Data Source Structure
You can use a dataSource where each entry is an object that contains the key and items fields. The key field specifies the group header (parent), and the items field holds an array of child items. This demo shows how to use this type of data source.
A data source can specify different field names if the data is structured in the same way. In this case, implement the DataSource's map function to create key and items field mappings. Refer to the following help topic for more information: Item Mapping.
Grouping Field
The data source can contain a plain list of objects with multiple fields. Assign a field to the DataSource's group property to create a hierarchical display. Parent items display unique values from the specified field, and Child items display grouped values.
Group Display Settings
If you need to make the groups collapsible, set the collapsibleGroups to true.
You can also use the groupTemplate property to customize the appearance of group headers.