Implementing Dropdown Tree
The Dropdown Tree component displays hierarchical data in a collapsible tree structure within a dropdown interface. It combines tree navigation with dropdown accessibility, supporting multi-selection via checkboxes, lazy loading for large datasets, comprehensive customization through templates and events, filtering, and full accessibility with RTL and localization support.
When to Use This Skill
Use Dropdown Tree immediately when you need to:
- Display hierarchical data - Show nested categories, organizational structures, file trees, or department hierarchies
- Enable multi-selection - Allow users to select multiple items with checkbox support or keyboard modifiers
- Support lazy loading - Optimize performance with large datasets by loading children on demand
- Customize display - Use templates to format items, headers, footers, selected values, or error states
- Implement filtering - Enable search functionality with configurable filter types (StartsWith, EndsWith, Contains)
- Ensure accessibility - Provide WAI-ARIA compliance, keyboard navigation, and screen reader support
- Support multiple languages - Localize UI with customizable keys and RTL support
- Bind remote data - Integrate with OData, OData V4, Web APIs, or other remote data services
- Handle complex selection logic - Use events, auto-check hierarchy, or selective node disabling
Component Overview
The Dropdown Tree features:
- Hierarchical display: Local (hierarchical/self-referential) and remote data sources with flexible binding
- Multi-selection modes: Checkboxes with auto-check, multi-select with Ctrl/Shift keys, single select (default)
- Flexible templates: Item, value, header, footer, noRecords, and actionFailure templates for custom rendering
- Performance optimization: Lazy loading (load-on-demand) for efficient large dataset handling
- Search & filtering: Built-in filter bar with configurable filter types and case sensitivity options
- Comprehensive events: change, select, dataBound, filtering, beforeOpen, focus, keyPress, and popup events
- Accessibility: Full WAI-ARIA (roles, attributes), keyboard navigation, screen reader support, WCAG 2.2 compliance
- Localization: Multi-language support with 4 customizable keys and locale override
- RTL support: Right-to-left layout rendering
- Tree settings: Advanced configuration (expandOn, autoCheck, loadOnDemand, checkDisabledChildren)
- Field mapping: Flexible data structure support (value, text, child, parentValue, expanded, hasChildren, selectable, iconCss, imageUrl, htmlAttributes)
- Display modes: Default, Delimiter, and Custom modes for selected items
Documentation and Navigation Guide
Getting Started
📄 Read: references/getting-started.md
- Installation and package dependencies (npm install command)
- React/TypeScript project setup (Vite and Create React App)
- Basic component implementation and initialization
- CSS imports and theme configuration
- First render and minimal working example
Data Binding
📄 Read: references/data-binding.md
- Local data binding (hierarchical and self-referential structures)
- Remote data with DataManager and various adaptors (OData, OData V4, WebAPI, URL)
- Field mapping for value, text, child, parentValue, expanded, hasChildren
- Load on demand (lazy loading) for large datasets
- Preventing node selection with selectable field
- Query configuration for remote data services
Checkbox & Multi-Selection
📄 Read: references/checkbox-selection.md
- Enabling checkbox support with
showCheckBox property
- Multi-selection workflow and accessing selected values
- Auto-check hierarchical behavior (parent-child synchronization)
- Select All feature with customizable
selectAllText and unSelectAllText
- Intermediate checkbox states for partial selection
- CheckDisabledChildren behavior for disabled nodes
Templates
📄 Read: references/templates.md
- Item template for custom list item rendering
- Value template for selected display customization
- Header template for static content above items
- Footer template for static content below items
- NoRecords template for empty state handling
- ActionFailure template for error state handling
- CustomTemplate for multi-select display customization
- Template expression syntax and data access patterns
Multi-Selection & Filtering
📄 Read: references/multi-selection-filtering.md
allowMultiSelection property and Ctrl/Shift keyboard interaction
- Display modes: Default, Delimiter, Custom
delimiterChar and mode configuration
allowFiltering and filter bar implementation
- Filter types: StartsWith, EndsWith, Contains
filterBarPlaceholder customization
ignoreCase and ignoreAccent options
Tree Settings & Configuration
📄 Read: references/tree-settings.md
loadOnDemand for lazy loading implementation
autoCheck for hierarchical checkbox synchronization
expandOn behavior (Auto, Click, DblClick, None)
checkDisabledChildren for disabled node handling
- Tree expansion and collapse control
Field Mapping & Custom Data Structures
📄 Read: references/field-mapping.md
- Core fields: value, text, dataSource, child, parentValue
- Node state fields: expanded, hasChildren, selected, selectable
- Display enhancement fields: iconCss, imageUrl, htmlAttributes
- Query and tableName for remote data
- Nested field mapping for hierarchical data
Advanced Features & API Reference
📄 Read: references/advanced-features.md
- Properties (60+ properties with descriptions and examples)
- Methods (getSelectedNodes, getCheckedNodes, setCheckedNodes, etc.)
- Events (change, select, dataBound, filtering, beforeOpen, focus, keyPress, popup)
- Event arguments (EventArgs structures with property descriptions)
- Styling and CSS customization
- Performance optimization techniques
Accessibility & Localization
📄 Read: references/accessibility-localization.md
- WCAG 2.2 and Section 508 compliance standards
- WAI-ARIA attributes and roles (listbox, treeitem, checkbox, group, etc.)
- Keyboard navigation shortcuts (Alt+Down, Arrow keys, Enter, Space, etc.)
- Screen reader and assistive technology support
- Localization keys (noRecordsTemplate, actionFailureTemplate, overflowCountTemplate, totalCountTemplate)
- Culture customization with locale property
- RTL (Right-to-Left) language support with enableRtl
Quick Start
Basic Dropdown Tree with Hierarchical Data
import { DropDownTreeComponent } from '@syncfusion/ej2-react-dropdowns';
import '@syncfusion/ej2-dropdowns/styles/material.css';
function App() {
const data = [
{ id: '1', name: 'Electronics', expanded: true },
{ id: '2', name: 'Laptops', parentId: '1' },
{ id: '3', name: 'Phones', parentId: '1' },
{ id: '4', name: 'Appliances' },
];
return (
<DropDownTreeComponent
id="dropdowntree"
fields={{ dataSource: data, value: 'id', text: 'name', parentValue: 'parentId', hasChildren: 'hasChild' }}
placeholder="Select an item"
/>
);
}
export default App;
With Checkboxes and Auto-Check
<DropDownTreeComponent
id="dropdowntree"
fields={{ dataSource: data, value: 'id', text: 'name', parentValue: 'parentId', hasChildren: 'hasChild' }}
showCheckBox={true}
showSelectAll={true}
treeSettings={{ autoCheck: true }}
placeholder="Select items"
/>
With Filtering
<DropDownTreeComponent
id="dropdowntree"
fields={{ dataSource: data, value: 'id', text: 'name', parentValue: 'parentId' }}
allowFiltering={true}
filterType="Contains"
filterBarPlaceholder="Search items..."
placeholder="Select an item"
/>
With Custom Templates
<DropDownTreeComponent
id="dropdowntree"
fields={{ dataSource: data, value: 'id', text: 'name', parentValue: 'parentId' }}
itemTemplate={(props) => (
<div style={{ display: 'flex', gap: '8px', alignItems: 'center' }}>
<span>{props.name}</span>
<small style={{ color: '#999' }}>({props.category})</small>
</div>
)}
valueTemplate={(props) => <span>{props.name}</span>}
placeholder="Select item"
/>
Common Patterns
Pattern 1: Self-Referential Data Binding
For flat data structures with parent references:
const data = [
{ id: 1, name: 'Discover Music', hasChild: true, expanded: true },
{ id: 2, pid: 1, name: 'Hot Singles' },
{ id: 3, pid: 1, name: 'Rising Artists' },
{ id: 7, name: 'Sales and Events', hasChild: true },
{ id: 8, pid: 7, name: '100 Albums' },
];
<DropDownTreeComponent
id="dropdowntree"
fields={{
dataSource: data,
value: 'id',
text: 'name',
parentValue: 'pid',
hasChildren: 'hasChild',
}}
/>
Pattern 2: Event Handling for Selection Changes
const handleChange = (args) => {
console.log('Old values:', args.oldValue); // string[]
console.log('New values:', args.value); // string[]
console.log('User interaction:', args.isInteracted); // boolean
};
const handleSelect = (args) => {
console.log('Action:', args.action); // 'select' or 'unselect'
console.log('Item data:', args.itemData); // object
};
<DropDownTreeComponent
id="dropdowntree"
fields={fields}
/>
Pattern 3: Multi-Select with Auto-Check
<DropDownTreeComponent
id="dropdowntree"
fields={fields}
showCheckBox={true}
treeSettings={{ autoCheck: true }}
mode="Default"
delimiterChar=", "
placeholder="Select multiple items"
/>
Pattern 4: Lazy Loading for Large Datasets
const remoteData = new DataManager({
url: 'url',
adaptor: new UrlAdaptor(),
});
<DropDownTreeComponent
id="dropdowntree"
fields={{ dataSource: remoteData, value: 'id', text: 'name', hasChildren: 'hasChild' }}
treeSettings={{ loadOnDemand: true }}
placeholder="Loading..."
/>
Pattern 5: Custom Item Styling with IconCss
const data = [
{ id: 1, name: 'Documents', iconCss: 'e-folder', hasChild: true },
{ id: 2, pid: 1, name: 'Resume.pdf', iconCss: 'e-pdf' },
{ id: 3, pid: 1, name: 'Report.docx', iconCss: 'e-docx' },
];
<DropDownTreeComponent
id="dropdowntree"
fields={{
dataSource: data,
value: 'id',
text: 'name',
iconCss: 'iconCss',
parentValue: 'pid',
hasChildren: 'hasChild',
}}
/>
Pattern 6: RTL & Localization Support
<DropDownTreeComponent
id="dropdowntree"
fields={fields}
enableRtl={true}
locale="ar"
placeholder="اختر عنصرا"
/>
Key Props Overview
| Property |
Type |
Description |
| Core |
|
|
id |
string |
Unique identifier for the component |
fields |
FieldsModel |
Data source and field mapping configuration |
placeholder |
string |
Input placeholder text |
enabled |
boolean |
Enable/disable component (default: true) |
| Selection |
|
|
showCheckBox |
boolean |
Enable checkbox multi-selection (default: false) |
showSelectAll |
boolean |
Show Select All checkbox (default: false) |
selectAllText |
string |
"Select All" label text |
unSelectAllText |
string |
"Unselect All" label text |
allowMultiSelection |
boolean |
Enable multi-selection with Ctrl/Shift keys |
| Templates |
|
|
itemTemplate |
string | Function |
Custom item rendering |
valueTemplate |
string | Function |
Custom selected value display |
headerTemplate |
string | Function |
Custom header content |
footerTemplate |
string | Function |
Custom footer content |
noRecordsTemplate |
string | Function |
Empty state template |
actionFailureTemplate |
string | Function |
Error state template |
| Filtering |
|
|
allowFiltering |
boolean |
Enable search/filter bar (default: false) |
filterType |
TreeFilterType |
Filter type: StartsWith, EndsWith, Contains |
filterBarPlaceholder |
string |
Filter bar placeholder text |
ignoreCase |
boolean |
Case-insensitive filtering (default: true) |
ignoreAccent |
boolean |
Ignore diacritics in filtering |
| Tree Settings |
|
|
treeSettings |
TreeSettingsModel |
Tree behavior configuration (autoCheck, loadOnDemand, expandOn) |
| Display |
|
|
mode |
string |
Display mode: Default, Delimiter, Custom |
delimiterChar |
string |
Delimiter for multi-select (default: ", ") |
customTemplate |
string |
Custom multi-select display template |
| Localization & RTL |
|
|
locale |
string |
Culture code (default: "en") |
enableRtl |
boolean |
Enable Right-to-Left layout |
enablePersistence |
boolean |
Persist state between page reloads |
| Styling |
|
|
cssClass |
string |
CSS class for root and popup |
width |
string | number |
Component width |
popupHeight |
string | number |
Popup height |
htmlAttributes |
object |
HTML attributes for the component |
Decision Guide
Choosing Data Binding:
- Local hierarchical - Nested JSON objects with
child property for small-to-medium datasets
- Local self-referential - Flat arrays with
parentValue field for structured data
- Remote with DataManager - OData/Web API for large datasets, dynamic loading, real-time data
Choosing Selection Mode:
- Single select - Default (no checkboxes, no multi-select), read-only visual selection
- Checkboxes -
showCheckBox={true} for explicit multi-selection
- Multi-select -
allowMultiSelection={true} for Ctrl/Shift keyboard selection
- Auto-check - Combine checkboxes with
treeSettings={{ autoCheck: true }} for hierarchy sync
Choosing Template:
- itemTemplate - Custom formatting per tree item (name + description, icons, badges)
- valueTemplate - Custom display in input field (combined text, formatted values)
- headerTemplate - Static controls above list (instructions, search help, custom controls)
- footerTemplate - Static content below list (count summary, action buttons)
- noRecordsTemplate - Empty state when no data or search yields no results
- actionFailureTemplate - Error message when data fetch fails
When to Use Lazy Loading:
- Large datasets (1000+ items)
- Performance-critical applications
- Data fetched from remote API with pagination
- Hierarchies with many levels
When to Use Filtering:
- Large datasets requiring search
- User-friendly discovery of items
- Reducing cognitive load for selection
Next Steps
- Get started → Read getting-started.md
- Bind data → Read data-binding.md
- Add checkboxes → Read checkbox-selection.md
- Enable filtering → Read multi-selection-filtering.md
- Configure trees → Read tree-settings.md
- Map fields → Read field-mapping.md
- Customize → Read templates.md
- Access APIs → Read advanced-features.md
- Enhance UX → Read accessibility-localization.md
1---2name: syncfusion-react-dropdown-tree3description: Implement Syncfusion React Dropdown Tree component for hierarchical data selection with dropdown interaction. Use this when working with multi-select checkboxes, lazy loading, remote OData integration, custom templates, keyboard navigation, RTL support, or localized interfaces. Supports auto-check hierarchy, filtering, tree settings, comprehensive event handling, and full accessibility.4---5
6# Implementing Dropdown Tree
7
8The Dropdown Tree component displays hierarchical data in a collapsible tree structure within a dropdown interface. It combines tree navigation with dropdown accessibility, supporting multi-selection via checkboxes, lazy loading for large datasets, comprehensive customization through templates and events, filtering, and full accessibility with RTL and localization support.
9
10## When to Use This Skill
11
12Use Dropdown Tree **immediately** when you need to:
13
14- **Display hierarchical data** - Show nested categories, organizational structures, file trees, or department hierarchies
15- **Enable multi-selection** - Allow users to select multiple items with checkbox support or keyboard modifiers
16- **Support lazy loading** - Optimize performance with large datasets by loading children on demand
17- **Customize display** - Use templates to format items, headers, footers, selected values, or error states
18- **Implement filtering** - Enable search functionality with configurable filter types (StartsWith, EndsWith, Contains)
19- **Ensure accessibility** - Provide WAI-ARIA compliance, keyboard navigation, and screen reader support
20- **Support multiple languages** - Localize UI with customizable keys and RTL support
21- **Bind remote data** - Integrate with OData, OData V4, Web APIs, or other remote data services
22- **Handle complex selection logic** - Use events, auto-check hierarchy, or selective node disabling
23
24## Component Overview
25
26The Dropdown Tree features:
27
28- **Hierarchical display**: Local (hierarchical/self-referential) and remote data sources with flexible binding
29- **Multi-selection modes**: Checkboxes with auto-check, multi-select with Ctrl/Shift keys, single select (default)
30- **Flexible templates**: Item, value, header, footer, noRecords, and actionFailure templates for custom rendering
31- **Performance optimization**: Lazy loading (load-on-demand) for efficient large dataset handling
32- **Search & filtering**: Built-in filter bar with configurable filter types and case sensitivity options
33- **Comprehensive events**: change, select, dataBound, filtering, beforeOpen, focus, keyPress, and popup events
34- **Accessibility**: Full WAI-ARIA (roles, attributes), keyboard navigation, screen reader support, WCAG 2.2 compliance
35- **Localization**: Multi-language support with 4 customizable keys and locale override
36- **RTL support**: Right-to-left layout rendering
37- **Tree settings**: Advanced configuration (expandOn, autoCheck, loadOnDemand, checkDisabledChildren)
38- **Field mapping**: Flexible data structure support (value, text, child, parentValue, expanded, hasChildren, selectable, iconCss, imageUrl, htmlAttributes)
39- **Display modes**: Default, Delimiter, and Custom modes for selected items
40
41## Documentation and Navigation Guide
42
43### Getting Started
44📄 **Read:** [references/getting-started.md](references/getting-started.md)
45- Installation and package dependencies (npm install command)
46- React/TypeScript project setup (Vite and Create React App)
47- Basic component implementation and initialization
48- CSS imports and theme configuration
49- First render and minimal working example
50
51### Data Binding
52📄 **Read:** [references/data-binding.md](references/data-binding.md)
53- Local data binding (hierarchical and self-referential structures)
54- Remote data with DataManager and various adaptors (OData, OData V4, WebAPI, URL)
55- Field mapping for value, text, child, parentValue, expanded, hasChildren
56- Load on demand (lazy loading) for large datasets
57- Preventing node selection with selectable field
58- Query configuration for remote data services
59
60### Checkbox & Multi-Selection
61📄 **Read:** [references/checkbox-selection.md](references/checkbox-selection.md)
62- Enabling checkbox support with `showCheckBox` property
63- Multi-selection workflow and accessing selected values
64- Auto-check hierarchical behavior (parent-child synchronization)
65- Select All feature with customizable `selectAllText` and `unSelectAllText`
66- Intermediate checkbox states for partial selection
67- CheckDisabledChildren behavior for disabled nodes
68
69### Templates
70📄 **Read:** [references/templates.md](references/templates.md)
71- Item template for custom list item rendering
72- Value template for selected display customization
73- Header template for static content above items
74- Footer template for static content below items
75- NoRecords template for empty state handling
76- ActionFailure template for error state handling
77- CustomTemplate for multi-select display customization
78- Template expression syntax and data access patterns
79
80### Multi-Selection & Filtering
81📄 **Read:** [references/multi-selection-filtering.md](references/multi-selection-filtering.md)
82- `allowMultiSelection` property and Ctrl/Shift keyboard interaction
83- Display modes: Default, Delimiter, Custom
84- `delimiterChar` and `mode` configuration
85- `allowFiltering` and filter bar implementation
86- Filter types: StartsWith, EndsWith, Contains
87- `filterBarPlaceholder` customization
88- `ignoreCase` and `ignoreAccent` options
89
90### Tree Settings & Configuration
91📄 **Read:** [references/tree-settings.md](references/tree-settings.md)
92- `loadOnDemand` for lazy loading implementation
93- `autoCheck` for hierarchical checkbox synchronization
94- `expandOn` behavior (Auto, Click, DblClick, None)
95- `checkDisabledChildren` for disabled node handling
96- Tree expansion and collapse control
97
98### Field Mapping & Custom Data Structures
99📄 **Read:** [references/field-mapping.md](references/field-mapping.md)
100- Core fields: value, text, dataSource, child, parentValue
101- Node state fields: expanded, hasChildren, selected, selectable
102- Display enhancement fields: iconCss, imageUrl, htmlAttributes
103- Query and tableName for remote data
104- Nested field mapping for hierarchical data
105
106### Advanced Features & API Reference
107📄 **Read:** [references/advanced-features.md](references/advanced-features.md)
108- Properties (60+ properties with descriptions and examples)
109- Methods (getSelectedNodes, getCheckedNodes, setCheckedNodes, etc.)
110- Events (change, select, dataBound, filtering, beforeOpen, focus, keyPress, popup)
111- Event arguments (EventArgs structures with property descriptions)
112- Styling and CSS customization
113- Performance optimization techniques
114
115### Accessibility & Localization
116📄 **Read:** [references/accessibility-localization.md](references/accessibility-localization.md)
117- WCAG 2.2 and Section 508 compliance standards
118- WAI-ARIA attributes and roles (listbox, treeitem, checkbox, group, etc.)
119- Keyboard navigation shortcuts (Alt+Down, Arrow keys, Enter, Space, etc.)
120- Screen reader and assistive technology support
121- Localization keys (noRecordsTemplate, actionFailureTemplate, overflowCountTemplate, totalCountTemplate)
122- Culture customization with locale property
123- RTL (Right-to-Left) language support with enableRtl
124
125## Quick Start
126
127### Basic Dropdown Tree with Hierarchical Data
128
129```jsx
130import { DropDownTreeComponent } from '@syncfusion/ej2-react-dropdowns';
131import '@syncfusion/ej2-dropdowns/styles/material.css';
132
133function App() {
134 const data = [
135 { id: '1', name: 'Electronics', expanded: true },
136 { id: '2', name: 'Laptops', parentId: '1' },
137 { id: '3', name: 'Phones', parentId: '1' },
138 { id: '4', name: 'Appliances' },
139 ];
140
141 return (
142 <DropDownTreeComponent
143 id="dropdowntree"
144 fields={{ dataSource: data, value: 'id', text: 'name', parentValue: 'parentId', hasChildren: 'hasChild' }}
145 placeholder="Select an item"
146 />
147 );
148}
149
150export default App;
151```
152
153### With Checkboxes and Auto-Check
154
155```jsx
156<DropDownTreeComponent
157 id="dropdowntree"
158 fields={{ dataSource: data, value: 'id', text: 'name', parentValue: 'parentId', hasChildren: 'hasChild' }}
159 showCheckBox={true}
160 showSelectAll={true}
161 treeSettings={{ autoCheck: true }}
162 placeholder="Select items"
163/>
164```
165
166### With Filtering
167
168```jsx
169<DropDownTreeComponent
170 id="dropdowntree"
171 fields={{ dataSource: data, value: 'id', text: 'name', parentValue: 'parentId' }}
172 allowFiltering={true}
173 filterType="Contains"
174 filterBarPlaceholder="Search items..."
175 placeholder="Select an item"
176/>
177```
178
179### With Custom Templates
180
181```jsx
182<DropDownTreeComponent
183 id="dropdowntree"
184 fields={{ dataSource: data, value: 'id', text: 'name', parentValue: 'parentId' }}
185 itemTemplate={(props) => (
186 <div style={{ display: 'flex', gap: '8px', alignItems: 'center' }}>
187 <span>{props.name}</span>
188 <small style={{ color: '#999' }}>({props.category})</small>
189 </div>
190 )}
191 valueTemplate={(props) => <span>{props.name}</span>}
192 placeholder="Select item"
193/>
194```
195
196## Common Patterns
197
198### Pattern 1: Self-Referential Data Binding
199
200For flat data structures with parent references:
201
202```jsx
203const data = [
204 { id: 1, name: 'Discover Music', hasChild: true, expanded: true },
205 { id: 2, pid: 1, name: 'Hot Singles' },
206 { id: 3, pid: 1, name: 'Rising Artists' },
207 { id: 7, name: 'Sales and Events', hasChild: true },
208 { id: 8, pid: 7, name: '100 Albums' },
209];
210
211<DropDownTreeComponent
212 id="dropdowntree"
213 fields={{
214 dataSource: data,
215 value: 'id',
216 text: 'name',
217 parentValue: 'pid',
218 hasChildren: 'hasChild',
219 }}
220/>
221```
222
223### Pattern 2: Event Handling for Selection Changes
224
225```jsx
226const handleChange = (args) => {
227 console.log('Old values:', args.oldValue); // string[]
228 console.log('New values:', args.value); // string[]
229 console.log('User interaction:', args.isInteracted); // boolean
230};
231
232const handleSelect = (args) => {
233 console.log('Action:', args.action); // 'select' or 'unselect'
234 console.log('Item data:', args.itemData); // object
235};
236
237<DropDownTreeComponent
238 id="dropdowntree"
239 fields={fields}
240 onChange={handleChange}
241 onSelect={handleSelect}
242/>
243```
244
245### Pattern 3: Multi-Select with Auto-Check
246
247```jsx
248<DropDownTreeComponent
249 id="dropdowntree"
250 fields={fields}
251 showCheckBox={true}
252 treeSettings={{ autoCheck: true }}
253 mode="Default"
254 delimiterChar=", "
255 placeholder="Select multiple items"
256/>
257```
258
259### Pattern 4: Lazy Loading for Large Datasets
260
261```jsx
262const remoteData = new DataManager({
263 url: 'url',
264 adaptor: new UrlAdaptor(),
265});
266
267<DropDownTreeComponent
268 id="dropdowntree"
269 fields={{ dataSource: remoteData, value: 'id', text: 'name', hasChildren: 'hasChild' }}
270 treeSettings={{ loadOnDemand: true }}
271 placeholder="Loading..."
272/>
273```
274
275### Pattern 5: Custom Item Styling with IconCss
276
277```jsx
278const data = [
279 { id: 1, name: 'Documents', iconCss: 'e-folder', hasChild: true },
280 { id: 2, pid: 1, name: 'Resume.pdf', iconCss: 'e-pdf' },
281 { id: 3, pid: 1, name: 'Report.docx', iconCss: 'e-docx' },
282];
283
284<DropDownTreeComponent
285 id="dropdowntree"
286 fields={{
287 dataSource: data,
288 value: 'id',
289 text: 'name',
290 iconCss: 'iconCss',
291 parentValue: 'pid',
292 hasChildren: 'hasChild',
293 }}
294/>
295```
296
297### Pattern 6: RTL & Localization Support
298
299```jsx
300<DropDownTreeComponent
301 id="dropdowntree"
302 fields={fields}
303 enableRtl={true}
304 locale="ar"
305 placeholder="اختر عنصرا"
306/>
307```
308
309## Key Props Overview
310
311| Property | Type | Description |
312|----------|------|-------------|
313| **Core** |
314| `id` | string | Unique identifier for the component |
315| `fields` | FieldsModel | Data source and field mapping configuration |
316| `placeholder` | string | Input placeholder text |
317| `enabled` | boolean | Enable/disable component (default: true) |
318| **Selection** |
319| `showCheckBox` | boolean | Enable checkbox multi-selection (default: false) |
320| `showSelectAll` | boolean | Show Select All checkbox (default: false) |
321| `selectAllText` | string | "Select All" label text |
322| `unSelectAllText` | string | "Unselect All" label text |
323| `allowMultiSelection` | boolean | Enable multi-selection with Ctrl/Shift keys |
324| **Templates** |
325| `itemTemplate` | string \| Function | Custom item rendering |
326| `valueTemplate` | string \| Function | Custom selected value display |
327| `headerTemplate` | string \| Function | Custom header content |
328| `footerTemplate` | string \| Function | Custom footer content |
329| `noRecordsTemplate` | string \| Function | Empty state template |
330| `actionFailureTemplate` | string \| Function | Error state template |
331| **Filtering** |
332| `allowFiltering` | boolean | Enable search/filter bar (default: false) |
333| `filterType` | TreeFilterType | Filter type: StartsWith, EndsWith, Contains |
334| `filterBarPlaceholder` | string | Filter bar placeholder text |
335| `ignoreCase` | boolean | Case-insensitive filtering (default: true) |
336| `ignoreAccent` | boolean | Ignore diacritics in filtering |
337| **Tree Settings** |
338| `treeSettings` | TreeSettingsModel | Tree behavior configuration (autoCheck, loadOnDemand, expandOn) |
339| **Display** |
340| `mode` | string | Display mode: Default, Delimiter, Custom |
341| `delimiterChar` | string | Delimiter for multi-select (default: ", ") |
342| `customTemplate` | string | Custom multi-select display template |
343| **Localization & RTL** |
344| `locale` | string | Culture code (default: "en") |
345| `enableRtl` | boolean | Enable Right-to-Left layout |
346| `enablePersistence` | boolean | Persist state between page reloads |
347| **Styling** |
348| `cssClass` | string | CSS class for root and popup |
349| `width` | string \| number | Component width |
350| `popupHeight` | string \| number | Popup height |
351| `htmlAttributes` | object | HTML attributes for the component |
352
353## Decision Guide
354
355**Choosing Data Binding:**
356- **Local hierarchical** - Nested JSON objects with `child` property for small-to-medium datasets
357- **Local self-referential** - Flat arrays with `parentValue` field for structured data
358- **Remote with DataManager** - OData/Web API for large datasets, dynamic loading, real-time data
359
360**Choosing Selection Mode:**
361- **Single select** - Default (no checkboxes, no multi-select), read-only visual selection
362- **Checkboxes** - `showCheckBox={true}` for explicit multi-selection
363- **Multi-select** - `allowMultiSelection={true}` for Ctrl/Shift keyboard selection
364- **Auto-check** - Combine checkboxes with `treeSettings={{ autoCheck: true }}` for hierarchy sync
365
366**Choosing Template:**
367- **itemTemplate** - Custom formatting per tree item (name + description, icons, badges)
368- **valueTemplate** - Custom display in input field (combined text, formatted values)
369- **headerTemplate** - Static controls above list (instructions, search help, custom controls)
370- **footerTemplate** - Static content below list (count summary, action buttons)
371- **noRecordsTemplate** - Empty state when no data or search yields no results
372- **actionFailureTemplate** - Error message when data fetch fails
373
374**When to Use Lazy Loading:**
375- Large datasets (1000+ items)
376- Performance-critical applications
377- Data fetched from remote API with pagination
378- Hierarchies with many levels
379
380**When to Use Filtering:**
381- Large datasets requiring search
382- User-friendly discovery of items
383- Reducing cognitive load for selection
384
385## Next Steps
386
387- **Get started** → Read [getting-started.md](references/getting-started.md)
388- **Bind data** → Read [data-binding.md](references/data-binding.md)
389- **Add checkboxes** → Read [checkbox-selection.md](references/checkbox-selection.md)
390- **Enable filtering** → Read [multi-selection-filtering.md](references/multi-selection-filtering.md)
391- **Configure trees** → Read [tree-settings.md](references/tree-settings.md)
392- **Map fields** → Read [field-mapping.md](references/field-mapping.md)
393- **Customize** → Read [templates.md](references/templates.md)
394- **Access APIs** → Read [advanced-features.md](references/advanced-features.md)
395- **Enhance UX** → Read [accessibility-localization.md](references/accessibility-localization.md)