React Lookup - Enable Grouping
The Lookup can organize items in groups. If you use a simple array as a data source, its objects must have the key and items fields.
- import React from 'react';
- import 'devextreme/dist/css/dx.light.css';
- import { Lookup } from 'devextreme-react/lookup';
- const lookupData = [{
- key: 'Mr. John Heart',
- items: ['Google AdWords Strategy', 'New Brochures', 'Update NDA Agreement']
- }, {
- key: 'Mrs. Olivia Peyton',
- items: ['Update Personnel Files', 'Non-Compete Agreements', 'Give Final Approval for Refunds']
- }, // ...
- ];
- class App extends React.Component {
- render() {
- return (
- <Lookup
- dataSource={lookupData}
- grouped={true}
- />
- );
- }
- }
- export default App;
If you use the DevExtreme DataSource, specify its group property. In both cases, you need to make the Lookup know that its data source is grouped by assigning true to the grouped property.
- import React from 'react';
- import 'devextreme/dist/css/dx.light.css';
- import { Lookup } from 'devextreme-react/lookup';
- import DataSource from "devextreme/data/data_source";
- const lookupData = [
- { name: 'Amelia', birthYear: 1991, gender: 'female' },
- { name: 'Benjamin', birthYear: 1983, gender: 'male' },
- { name: 'Andrew', birthYear: 1991, gender: 'male' },
- { name: 'Daniela', birthYear: 1983, gender: 'female' },
- { name: 'Lee', birthYear: 1983, gender: 'male' },
- { name: 'Betty', birthYear: 1983, gender: 'female' }
- ];
- class App extends React.Component {
- constructor(props) {
- super(props);
- this.dataSource = new DataSource({
- store: lookupData,
- group: 'gender'
- });
- }
- render() {
- return (
- <Lookup
- dataSource={this.dataSource}
- grouped={true}
- displayExpr="name"
- valueExpr="name"
- />
- );
- }
- }
- export default App;
To customize group headers, specify a groupTemplate. In Angular and Vue, you can declare it in the markup. In React, you can use a rendering function (shown in the code below) or component:
- import React from 'react';
- import 'devextreme/dist/css/dx.light.css';
- import { Lookup } from 'devextreme-react/lookup';
- import DataSource from "devextreme/data/data_source";
- const renderGroup = (data, index) => {
- return (
- <div>[{index + 1}] Assigned: {data.key}</div>
- );
- }
- class App extends React.Component {
- constructor(props) {
- super(props);
- this.dataSource = [{
- key: "Mr. John Heart",
- items: ["Google AdWords Strategy", "New Brochures", "Update NDA Agreement"]
- }, {
- key: "Mrs. Olivia Peyton",
- items: ["Update Personnel Files", "Non-Compete Agreements", "Give Final Approval for Refunds"]
- }, // ...
- ];
- }
- render() {
- return (
- <Lookup
- dataSource={this.dataSource}
- grouped={true}
- groupRender={renderGroup}
- />
- );
- }
- }
- export default App;
If you use jQuery alone, use DOM manipulation methods to combine the HTML markup for items. To apply this markup, use the itemTemplate callback function as shown in the following code.
- const lookupData = [{
- key: "Mr. John Heart",
- items: ["Google AdWords Strategy", "New Brochures", "Update NDA Agreement"]
- }, {
- key: "Mrs. Olivia Peyton",
- items: ["Update Personnel Files", "Non-Compete Agreements", "Give Final Approval for Refunds"]
- }, // ...
- ];
- $(function() {
- $("#lookupContainer").dxLookup({
- dataSource: lookupData,
- grouped: true,
- groupTemplate: function (data) {
- return $("<div>Assigned: " + data.key + "</div>");
- }
- });
- });
See Also
If you have technical questions, please create a support ticket in the DevExpress Support Center.