From 14ed7454fc69e476f21ad136587b40ff22c0eb32 Mon Sep 17 00:00:00 2001 From: nishthaAhujaa Date: Thu, 8 Jan 2026 12:59:40 +0530 Subject: [PATCH] format fix --- src/Common/SearchableDropdown.tsx | 330 +++++++++++++++--------------- 1 file changed, 170 insertions(+), 160 deletions(-) diff --git a/src/Common/SearchableDropdown.tsx b/src/Common/SearchableDropdown.tsx index f6e9d90ec..f740f7973 100644 --- a/src/Common/SearchableDropdown.tsx +++ b/src/Common/SearchableDropdown.tsx @@ -3,182 +3,192 @@ import * as React from "react"; import { useCallback, useRef, useState } from "react"; interface SearchableDropdownProps { - label: string; - items: T[]; - selectedItem: T | null; - onSelect: (item: T) => void; - getKey: (item: T) => string; - getDisplayText: (item: T) => string; - placeholder?: string; - filterPlaceholder?: string; - className?: string; - disabled?: boolean; - onDismiss?: () => void; - buttonStyles?: React.CSSProperties; - searchBoxStyles?: Partial; - listStyles?: React.CSSProperties; - itemStyles?: React.CSSProperties; + label: string; + items: T[]; + selectedItem: T | null; + onSelect: (item: T) => void; + getKey: (item: T) => string; + getDisplayText: (item: T) => string; + placeholder?: string; + filterPlaceholder?: string; + className?: string; + disabled?: boolean; + onDismiss?: () => void; + buttonStyles?: React.CSSProperties; + searchBoxStyles?: Partial; + listStyles?: React.CSSProperties; + itemStyles?: React.CSSProperties; } export const SearchableDropdown = ({ - label, - items, - selectedItem, - onSelect, - getKey, - getDisplayText, - placeholder = "Select an item", - filterPlaceholder = "Filter items", - className, - disabled = false, - onDismiss, - buttonStyles: customButtonStyles, - searchBoxStyles: customSearchBoxStyles, - listStyles: customListStyles, - itemStyles: customItemStyles, + label, + items, + selectedItem, + onSelect, + getKey, + getDisplayText, + placeholder = "Select an item", + filterPlaceholder = "Filter items", + className, + disabled = false, + onDismiss, + buttonStyles: customButtonStyles, + searchBoxStyles: customSearchBoxStyles, + listStyles: customListStyles, + itemStyles: customItemStyles, }: SearchableDropdownProps): React.ReactElement => { - const [isOpen, setIsOpen] = useState(false); - const [filterText, setFilterText] = useState(""); - const buttonRef = useRef(null); + const [isOpen, setIsOpen] = useState(false); + const [filterText, setFilterText] = useState(""); + const buttonRef = useRef(null); - const defaultButtonStyles: React.CSSProperties = { - width: "100%", - height: "32px", - padding: "0 28px 0 8px", - border: "1px solid #8a8886", - background: "#fff", - color: "#323130", - textAlign: "left", - cursor: disabled ? "not-allowed" : "pointer", - position: "relative", - fontFamily: "inherit", - fontSize: "14px", - }; + const defaultButtonStyles: React.CSSProperties = { + width: "100%", + height: "32px", + padding: "0 28px 0 8px", + border: "1px solid #8a8886", + background: "#fff", + color: "#323130", + textAlign: "left", + cursor: disabled ? "not-allowed" : "pointer", + position: "relative", + fontFamily: "inherit", + fontSize: "14px", + }; - const defaultListStyles: React.CSSProperties = { - maxHeight: "300px", - overflowY: "auto", - }; + const defaultListStyles: React.CSSProperties = { + maxHeight: "300px", + overflowY: "auto", + }; - const defaultItemStyles: React.CSSProperties = { - padding: "8px 12px", - cursor: "pointer", - fontSize: "14px", - }; + const defaultItemStyles: React.CSSProperties = { + padding: "8px 12px", + cursor: "pointer", + fontSize: "14px", + }; - // Merge custom styles with defaults - const buttonStyles = { ...defaultButtonStyles, ...customButtonStyles }; - const listStyles = { ...defaultListStyles, ...customListStyles }; - const itemStyles = { ...defaultItemStyles, ...customItemStyles }; + // Merge custom styles with defaults + const buttonStyles = { ...defaultButtonStyles, ...customButtonStyles }; + const listStyles = { ...defaultListStyles, ...customListStyles }; + const itemStyles = { ...defaultItemStyles, ...customItemStyles }; - const closeDropdown = useCallback(() => { - setIsOpen(false); - setFilterText(""); - }, []); + const closeDropdown = useCallback(() => { + setIsOpen(false); + setFilterText(""); + }, []); - const filteredItems = items?.filter((item) => - getDisplayText(item).toLowerCase().includes(filterText.toLowerCase()), - ); + const filteredItems = items?.filter((item) => getDisplayText(item).toLowerCase().includes(filterText.toLowerCase())); - const handleDismiss = useCallback(() => { + const handleDismiss = useCallback(() => { + closeDropdown(); + onDismiss?.(); + }, [closeDropdown, onDismiss]); + + const handleButtonClick = useCallback( + (event: React.MouseEvent) => { + if (disabled) { + return; + } + event.preventDefault(); + event.stopPropagation(); + + if (isOpen) { closeDropdown(); - onDismiss?.(); - }, [closeDropdown, onDismiss]); + return; + } - const handleButtonClick = useCallback( - (event: React.MouseEvent) => { - if (disabled) { - return; - } - event.preventDefault(); - event.stopPropagation(); + setIsOpen(true); + return; + }, + [isOpen, closeDropdown, disabled], + ); - if (isOpen) { - closeDropdown(); - return; - } + const handleSelect = useCallback( + (item: T) => { + onSelect(item); + closeDropdown(); + }, + [onSelect, closeDropdown], + ); - setIsOpen(true); - return; - }, - [isOpen, closeDropdown, disabled], - ); + const buttonLabel = selectedItem + ? getDisplayText(selectedItem) + : items?.length === 0 + ? `No ${label}s Found` + : placeholder; - const handleSelect = useCallback( - (item: T) => { - onSelect(item); - closeDropdown(); - }, - [onSelect, closeDropdown], - ); + const buttonId = `${className}-button`; - const buttonLabel = - selectedItem ? getDisplayText(selectedItem) : items?.length === 0 ? `No ${label}s Found` : placeholder; - - return ( -
- - - {isOpen && ( - -
- setFilterText(newValue || "")} - styles={customSearchBoxStyles} - /> -
- {filteredItems && filteredItems.length > 0 ? ( - filteredItems.map((item) => { - const key = getKey(item); - const isSelected = selectedItem ? getKey(selectedItem) === key : false; - return ( -
handleSelect(item)} - style={{ - ...itemStyles, - backgroundColor: isSelected ? "#e6e6e6" : "transparent", - }} - onMouseEnter={(e) => (e.currentTarget.style.backgroundColor = "#f3f2f1")} - onMouseLeave={(e) => - (e.currentTarget.style.backgroundColor = isSelected ? "#e6e6e6" : "transparent") - } - > - {getDisplayText(item)} -
- ); - }) - ) : ( -
No items found
- )} -
+ return ( +
+ + + {isOpen && ( + +
+ setFilterText(newValue || "")} + styles={customSearchBoxStyles} + /> +
+ {filteredItems && filteredItems.length > 0 ? ( + filteredItems.map((item) => { + const key = getKey(item); + const isSelected = selectedItem ? getKey(selectedItem) === key : false; + return ( +
handleSelect(item)} + style={{ + ...itemStyles, + backgroundColor: isSelected ? "#e6e6e6" : "transparent", + }} + onMouseEnter={(e) => (e.currentTarget.style.backgroundColor = "#f3f2f1")} + onMouseLeave={(e) => + (e.currentTarget.style.backgroundColor = isSelected ? "#e6e6e6" : "transparent") + } + > + {getDisplayText(item)}
- - )} -
- ); + ); + }) + ) : ( +
No items found
+ )} +
+
+ + )} +
+ ); };