diff --git "a/src/app/components/\"use clients\".js" "b/src/app/components/\"use clients\".js"
deleted file mode 100644
index f12cd60..0000000
--- "a/src/app/components/\"use clients\".js"
+++ /dev/null
@@ -1,404 +0,0 @@
-"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 [showFilters, setShowFilters] = useState(false);
- const [filters, setFilters] = useState({ broker: '', status: '', dateFrom: '', dateTo: '' });
- 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 handleFilterChange = (e) => {
- const { name, value } = e.target;
- setFilters(prev => ({ ...prev, [name]: value }));
- };
-
- const clearFilters = () => {
- setFilters({ broker: '', status: '', dateFrom: '', dateTo: '' });
- };
-
- 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 exportToCSV = () => {
- const headers = ['Name', 'API ID', 'Broker', 'Date Added', 'Status', 'Balance', 'On/Off'];
- const csvData = filtered.map(b => [
- b.name,
- b.apiId,
- b.broker,
- b.date,
- b.status,
- b.balance,
- b.on ? 'On' : 'Off'
- ]);
-
- const csvContent = [
- headers.join(','),
- ...csvData.map(row => row.join(','))
- ].join('\n');
-
- const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });
- const link = document.createElement('a');
- const url = URL.createObjectURL(blob);
- link.setAttribute('href', url);
- link.setAttribute('download', `brokers_${new Date().toISOString().split('T')[0]}.csv`);
- link.style.visibility = 'hidden';
- document.body.appendChild(link);
- link.click();
- document.body.removeChild(link);
- };
-
- 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;
- const matchBrokerFilter = !filters.broker || b.broker === filters.broker;
- const matchStatusFilter = !filters.status || b.status === filters.status;
-
- let matchDateFilter = true;
- if (filters.dateFrom || filters.dateTo) {
- const brokerDate = new Date(b.date);
- if (filters.dateFrom) matchDateFilter = matchDateFilter && brokerDate >= new Date(filters.dateFrom);
- if (filters.dateTo) matchDateFilter = matchDateFilter && brokerDate <= new Date(filters.dateTo);
- }
-
- return matchSearch && matchTab && matchBrokerFilter && matchStatusFilter && matchDateFilter && !hiddenRows.includes(b.id);
- });
-
- return (
-
-
-
-
-
-
-
-
-
-
-
-
- NSE
- 📊
-
-
-
-
-
-
-
- {route === 'brokers' ? (
-
-
-
-
- 👥
- Brokers / API Management
-
-
-
-
-
-
-
-
-
-
-
- setSearch(e.target.value)}
- className="pl-10 pr-4 py-2 border border-gray-200 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-teal-500" />
-
-
-
- {['active', 'inactive', 'expired'].map(t => (
-
- ))}
-
-
-
-
-
-
-
-
-
- {showFilters && (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- )}
-
-
-
-
-
- {['Name', 'API ID', 'Broker', 'Date Added', 'Status', 'Balance', 'Action', 'On/Off'].map(h => (
- | {h} |
- ))}
-
-
-
- {filtered.map(b => (
-
- | {b.name} |
- {b.apiId} |
-
-
- {b.broker[0]}
- {b.broker}
-
- |
- {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
- )}
-
-
-
-
-
-
-
-
-
-
-
- );
-}
\ No newline at end of file
diff --git a/src/app/components/BrokerManagement.jsx b/src/app/components/BrokerManagement.jsx
index cfc02ea..fd105cd 100644
--- a/src/app/components/BrokerManagement.jsx
+++ b/src/app/components/BrokerManagement.jsx
@@ -13,7 +13,7 @@ export default function BrokerManagementApp() {
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 },
+ 'Tradeweb Market', 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 },