const fs = require('fs'); const path = 'C:/Users/CSH12/Desktop/AI_Pharamcy_Frontend/AI_Pharmacy_Application/src/pages/Inventory.tsx'; let content = fs.readFileSync(path, 'utf8'); if (!content.includes('isProductDropdownOpen')) { // 1. Add state & memo const stateSearch = `const [supplierOptions, setSupplierOptions] = useState([]);`; const stateReplace = `const [supplierOptions, setSupplierOptions] = useState([]); const [isProductDropdownOpen, setIsProductDropdownOpen] = useState(false); const [productSearchQuery, setProductSearchQuery] = useState(''); const filteredProductOptions = useMemo(() => { if (!productSearchQuery || productSearchQuery.trim() === '') { return drugOptions; } const q = productSearchQuery.toLowerCase().trim(); return drugOptions.filter(d => (d.product_id && String(d.product_id).toLowerCase().includes(q)) || (d.brand_name && String(d.brand_name).toLowerCase().includes(q)) || (d.generic_name && String(d.generic_name).toLowerCase().includes(q)) || (d.manufacturer && String(d.manufacturer).toLowerCase().includes(q)) ); }, [drugOptions, productSearchQuery]);`; content = content.replace(stateSearch, stateReplace); // 2. Replace datalist input block with modern searchable dropdown const oldBlock = `
setFormData({ ...formData, product_id: e.target.value })} placeholder="Select or enter Product ID..." className="w-full bg-slate-50 border border-slate-200 rounded-xl focus:bg-white focus:outline-none focus:ring-4 focus:ring-blue-500/10 focus:border-blue-500 text-[15px] font-medium text-slate-800 transition-all hover:bg-slate-100 hover:border-slate-300 placeholder:text-slate-400" style={{ padding: '12px 16px', paddingLeft: '44px' }} /> {drugOptions.map(d => ( ))}
`; const newBlock = `
setIsProductDropdownOpen(true)} onChange={(e) => { setProductSearchQuery(e.target.value); setFormData({ ...formData, product_id: e.target.value }); setIsProductDropdownOpen(true); }} placeholder="Type medicine name, generic name or Product ID..." className="w-full bg-slate-50 border border-slate-200 rounded-xl focus:bg-white focus:outline-none focus:ring-4 focus:ring-blue-500/10 focus:border-blue-500 text-[15px] font-medium text-slate-800 transition-all hover:bg-slate-100 hover:border-slate-300 placeholder:text-slate-400" style={{ padding: '12px 16px', paddingLeft: '44px', paddingRight: '40px' }} />
setIsProductDropdownOpen(!isProductDropdownOpen)} >
{/* Searchable Custom Dropdown Menu */} {isProductDropdownOpen && (
{filteredProductOptions.length > 0 ? ( filteredProductOptions.map((d: any) => (
{ setFormData({ ...formData, product_id: d.product_id }); setProductSearchQuery(\`\${d.brand_name} (\${d.product_id})\`); setIsProductDropdownOpen(false); }} className="p-3 hover:bg-blue-50/80 cursor-pointer flex items-center justify-between transition-colors group" >
{d.brand_name} {d.generic_name || 'Generic Medicine'} {d.manufacturer ? \`• \${d.manufacturer}\` : ''}
{d.product_id}
)) ) : (
No matching medicines found
)}
)}
`; content = content.replace(oldBlock, newBlock); fs.writeFileSync(path, content); console.log("Patched Inventory.tsx successfully!"); } else { console.log("Already patched Inventory.tsx"); }