← Back to Exercises
Dropdown
Dropdown Component
A reusable dropdown component with search functionality.
Single Select
Multiple Select
"use client"; import React, { useState } from 'react'; const DropDown = ({ isMulitpleSelect, name, items = {}, Label }) => { const [search, setSearch] = useState(''); const searchItems = (item) => { setSearch(item); }; // Ensure items is an object before trying to get keys const safeItems = items || {}; const filteredItems = Object.keys(safeItems).filter((key) => { const itemLabel = safeItems[key]; return itemLabel.toLowerCase().includes(search.toLowerCase()); }); return ( <div className="p-4 border rounded"> <label className="form-label fw-bold">{Label}</label> <input type="text" className='form-control mt-1 mb-3' placeholder='Search...' onChange={(e) => searchItems(e.target.value)} /> <select className='form-control' multiple={isMulitpleSelect} name={name} style={{ minHeight: isMulitpleSelect ? '100px' : 'auto' }}> {filteredItems.map((key) => { return <option key={key} value={key}>{safeItems[key]}</option> })} </select> </div> ); }; export default function DropDownDemo() { const countries = { "us": "United States", "cn": "Canada", "gb": "United Kingdom", "de": "Germany", "in": "India", "jp": "Japan", "fr": "France", "au": "Australia" }; return ( <div className="container"> <h3>Dropdown Component</h3> <p className="text-secondary mb-4">A reusable dropdown component with search functionality.</p> <div className="row"> <div className="col-md-6 mb-4"> <h5>Single Select</h5> <DropDown items={countries} Label="Select Country" name="country" isMulitpleSelect={false} /> </div> <div className="col-md-6 mb-4"> <h5>Multiple Select</h5> <DropDown items={countries} Label="Select Countries (Hold Ctrl/Cmd)" name="countries" isMulitpleSelect={true} /> </div> </div> </div> ); }