"use client";
import React, { useState } from 'react';
import { Search, Filter, Plus, X, Edit2, Trash2, Copy, Eye, EyeOff } from 'lucide-react';
export default function BrokerManagementApp() {
const [route, setRoute] = useState('brokers');
const [modal, setModal] = useState({ show: false, mode: 'add', data: null });
const [search, setSearch] = useState('');
const [tab, setTab] = useState('active');
const [errors, setErrors] = useState({});
const [hiddenRows, setHiddenRows] = useState([]);
const [form, setForm] = useState({ name: '', broker: '', apiKey: '', secretKey: '', balance: '' });
const [brokers, setBrokers] = useState([
{ id: 1, name: 'MarketAxess', apiId: '88234', broker: 'Meta5', date: 'Feb 14, 2025', status: 'active', balance: '$150.25', on: true },
{ id: 2, name:
'Tradeweb Markets', apiId: '89245', broker: 'Angel One', date: 'Mar 01, 2025', status: 'inactive', balance: '$175.50', on: true },
{ id: 3, name: 'MarketAxess', apiId: '88234', broker: 'Meta5', date: 'Feb 14, 2025', status: 'active', balance: '$150.25', on: false },
{ id: 4, name: 'Tradeweb Markets', apiId: '89245', broker: 'Zerodha', date: 'Mar 01, 2025', status: 'warning', balance: '$175.50', on: true },
{ id: 5, name: 'MarketAxess', apiId: '88234', broker: 'Dhan', date: 'Feb 14, 2025', status: 'active', balance: '$150.25', on: true },
]);
const brokerList = ['Meta5', 'Angel One', 'Zerodha', 'Dhan', 'Upstox'];
const routes = ['Dashboard', 'Brokers', 'Scan & Trade', 'Positions', 'AI Strategy Builder'];
const handleChange = (e) => {
const { name, value } = e.target;
setForm(prev => ({ ...prev, [name]: value }));
if (errors[name]) setErrors(prev => ({ ...prev, [name]: '' }));
};
const validate = () => {
const err = {};
if (!form.name.trim()) err.name = 'Name required';
if (!form.broker) err.broker = 'Select broker';
if (!form.apiKey.trim()) err.apiKey = 'API Key required';
if (!form.secretKey.trim()) err.secretKey = 'Secret Key required';
if (form.balance && isNaN(parseFloat(form.balance))) err.balance = 'Invalid balance';
setErrors(err);
return Object.keys(err).length === 0;
};
const openAdd = () => {
setModal({ show: true, mode: 'add', data: null });
setForm({ name: '', broker: '', apiKey: '', secretKey: '', balance: '' });
setErrors({});
};
const openEdit = (broker) => {
setModal({ show: true, mode: 'edit', data: broker });
setForm({ name: broker.name, broker: broker.broker, apiKey: broker.apiId, secretKey: 'sk-41Z8kLjY...', balance: broker.balance.replace('$', '') });
setErrors({});
};
const deleteBroker = (id) => {
if (confirm('Delete this broker?')) setBrokers(brokers.filter(b => b.id !== id));
};
const submit = () => {
if (!validate()) return;
if (modal.mode === 'add') {
const newBroker = {
id: Date.now(), name: form.name, apiId: Math.floor(10000 + Math.random() * 90000).toString(),
broker: form.broker, date: new Date().toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' }),
status: 'active', balance: `$${parseFloat(form.balance || 0).toFixed(2)}`, on: true
};
setBrokers([...brokers, newBroker]);
} else {
setBrokers(brokers.map(b => b.id === modal.data.id ? { ...b, name: form.name, broker: form.broker, balance: `$${parseFloat(form.balance || 0).toFixed(2)}` } : b));
}
setModal({ show: false, mode: 'add', data: null });
};
const toggle = (id) => setBrokers(brokers.map(b => b.id === id ? { ...b, on: !b.on } : b));
const toggleVisibility = (id) => {
setHiddenRows(prev => prev.includes(id) ? prev.filter(i => i !== id) : [...prev, id]);
};
const statusIcon = (status) => {
const colors = { active: 'bg-green-500', inactive: 'bg-red-500', warning: 'bg-yellow-500' };
return
;
};
const filtered = brokers.filter(b => {
const matchSearch = b.name.toLowerCase().includes(search.toLowerCase()) || b.broker.toLowerCase().includes(search.toLowerCase());
const matchTab = tab === 'active' ? b.status === 'active' : tab === 'inactive' ? b.status === 'inactive' : tab === 'expired' ? b.status === 'expired' : true;
return matchSearch && matchTab && !hiddenRows.includes(b.id);
});
return (
{route === 'brokers' ? (
👥
Brokers / API Management
{['Name', 'API ID', 'Broker', 'Date Added', 'Status', 'Balance', 'Action', 'On/Off'].map(h => (
| {h} |
))}
{filtered.map(b => (
| {b.name} |
{b.apiId} |
|
{b.date} |
{statusIcon(b.status)} |
{b.balance} |
|
|
))}
) : (
{routes.find(r => route === r.toLowerCase().replace(/ & /g, '-').replace(/ /g, '-'))}
This page is under construction
)}
setModal({ show: false, mode: 'add', data: null })}>
{modal.mode === 'add' ? 'Add Broker' : 'Edit Broker'}
Choose your preferred exchange to add a broker.
Broker Details
{errors.name &&
{errors.name}
}
{errors.broker &&
{errors.broker}
}
API Details
{modal.mode === 'edit' && (
)}
{errors.apiKey &&
{errors.apiKey}
}
Date {modal.mode === 'add' ? 'Created' : 'Modified'}: {modal.mode === 'add' ? new Date().toLocaleDateString() : '30/12/2025'}
{errors.secretKey &&
{errors.secretKey}
}
{errors.balance &&
{errors.balance}
}
{modal.mode === 'add' && form.broker && (
Help me connect to the API
)}
);
}