diff --git a/src/app/admin/investors/[id]/page.tsx b/src/app/admin/investors/[id]/page.tsx index 251c1b8..7748b27 100644 --- a/src/app/admin/investors/[id]/page.tsx +++ b/src/app/admin/investors/[id]/page.tsx @@ -98,7 +98,10 @@ export default function InvestorDetailPage() { const [showMobileBankingModal, setShowMobileBankingModal] = useState(false); const [showTaxModal, setShowTaxModal] = useState(false); const [showDocModal, setShowDocModal] = useState(false); - const [editingBank, setEditingBank] = useState({ bankName: '', bankAccountName: '', bankAccountNumber: '', bankBranch: '', bankRouting: '' }); + const [editingBankAccount, setEditingBankAccount] = useState({ id: '', bankName: '', accountName: '', accountNumber: '', branch: '', routing: '', isPrimary: false }); + const [bankSaveSuccess, setBankSaveSuccess] = useState(false); + const [showDeleteBankModal, setShowDeleteBankModal] = useState(false); + const [bankErrors, setBankErrors] = useState<{ bankName?: string; accountName?: string; accountNumber?: string }>({}); const [editingMobileBanking, setEditingMobileBanking] = useState({ provider: '', number: '', isPrimary: false }); const [editingTax, setEditingTax] = useState({ tinNumber: '', passportNumber: '' }); const [newDoc, setNewDoc] = useState({ type: 'nid', number: '', url: '' }); @@ -1108,45 +1111,68 @@ setInvestorJournals([journalEntry, ...investorJournals]);
-

Bank Details

+

Bank Accounts ({investor.bankAccounts?.length || 0})

- {investor.bankName ? ( - <> -
- -
-

Bank

-

{investor.bankName}

-

{investor.bankBranch}

+ {investor.bankAccounts && investor.bankAccounts.length > 0 ? ( + investor.bankAccounts.map((account: any) => ( +
+
+
+
+ +
+
+

{account.bankName}

+

{account.branch}

+
+
+
+ {account.isPrimary && ( + Primary + )} + +
+
+
+
+ Account Name + {account.accountName} +
+
+ Account Number + {account.accountNumber} +
+ {account.routing && ( +
+ Routing + {account.routing} +
+ )}
-
- -
-

Account

-

{investor.bankAccountName}

-

{investor.bankAccountNumber}

- {investor.bankRouting &&

Routing: {investor.bankRouting}

} -
-
- + )) ) : ( -
- -

No bank details added

+
+ +

No bank accounts added

+
)}
@@ -1787,41 +1813,119 @@ setInvestorJournals([journalEntry, ...investorJournals]);
-

Bank Details

+

{editingBankAccount.id ? 'Edit' : 'Add'} Bank Account

-
- - setEditingBank({ ...editingBank, bankName: e.target.value })} className="w-full px-3 py-2 border border-slate-200 rounded-lg text-sm" placeholder="e.g., Standard Chartered Bank" /> -
-
- - setEditingBank({ ...editingBank, bankBranch: e.target.value })} className="w-full px-3 py-2 border border-slate-200 rounded-lg text-sm" placeholder="e.g., Gulshan Branch" /> -
-
- - setEditingBank({ ...editingBank, bankAccountName: e.target.value })} className="w-full px-3 py-2 border border-slate-200 rounded-lg text-sm" placeholder="Account holder name" /> -
-
- - setEditingBank({ ...editingBank, bankAccountNumber: e.target.value })} className="w-full px-3 py-2 border border-slate-200 rounded-lg text-sm" placeholder="Account number" /> -
-
- - setEditingBank({ ...editingBank, bankRouting: e.target.value })} className="w-full px-3 py-2 border border-slate-200 rounded-lg text-sm" placeholder="Routing number" /> -
+ {bankSaveSuccess ? ( +
+
+ +
+

Bank Account Saved!

+

+ {editingBankAccount.isPrimary ? 'Primary account has been updated.' : 'Bank account has been saved successfully.'} +

+
+ ) : ( + <> +
+ + { + setEditingBankAccount({ ...editingBankAccount, bankName: e.target.value }); + setBankErrors({ ...bankErrors, bankName: '' }); + }} + className={`w-full px-3 py-2 border rounded-lg text-sm ${bankErrors.bankName ? 'border-red-300 bg-red-50' : 'border-slate-200'}`} + placeholder="e.g., Standard Chartered Bank" + /> + {bankErrors.bankName &&

{bankErrors.bankName}

} +
+
+ + setEditingBankAccount({ ...editingBankAccount, branch: e.target.value })} className="w-full px-3 py-2 border border-slate-200 rounded-lg text-sm" placeholder="e.g., Gulshan Branch" /> +
+
+ + { + setEditingBankAccount({ ...editingBankAccount, accountName: e.target.value }); + setBankErrors({ ...bankErrors, accountName: '' }); + }} + className={`w-full px-3 py-2 border rounded-lg text-sm ${bankErrors.accountName ? 'border-red-300 bg-red-50' : 'border-slate-200'}`} + placeholder="Account holder name" + /> + {bankErrors.accountName &&

{bankErrors.accountName}

} +
+
+ + { + setEditingBankAccount({ ...editingBankAccount, accountNumber: e.target.value }); + setBankErrors({ ...bankErrors, accountNumber: '' }); + }} + className={`w-full px-3 py-2 border rounded-lg text-sm ${bankErrors.accountNumber ? 'border-red-300 bg-red-50' : 'border-slate-200'}`} + placeholder="Account number" + /> + {bankErrors.accountNumber &&

{bankErrors.accountNumber}

} +
+
+ + setEditingBankAccount({ ...editingBankAccount, routing: e.target.value })} className="w-full px-3 py-2 border border-slate-200 rounded-lg text-sm" placeholder="Routing number" /> +
+
+ setEditingBankAccount({ ...editingBankAccount, isPrimary: e.target.checked })} + className="w-4 h-4 text-investor rounded border-slate-300" + /> + +
+ + )}
- {investor.bankName && ( - + {bankSaveSuccess ? ( +
+ +
+ ) : ( + <> + {editingBankAccount.id && ( + + )} +
+ + +
+ )} -
- - -
@@ -1864,6 +1968,55 @@ setInvestorJournals([journalEntry, ...investorJournals]);
)} + {showDeleteBankModal && ( +
+
+
+

+ Delete Bank Account +

+ +
+
+

Are you sure you want to delete this bank account?

+
+
+ Bank + {editingBankAccount.bankName} +
+
+ Account + {editingBankAccount.accountNumber} +
+
+ {editingBankAccount.isPrimary && ( +
+ +

This is the primary account. Deleting it may affect withdrawal settings.

+
+ )} +
+
+ + +
+
+
+ )} + {showTaxModal && (
diff --git a/src/data/mockData.ts b/src/data/mockData.ts index eecc48b..ee43a1b 100644 --- a/src/data/mockData.ts +++ b/src/data/mockData.ts @@ -111,6 +111,7 @@ export interface Investor { bankAccountNumber?: string; bankBranch?: string; bankRouting?: string; + bankAccounts?: { id: string; bankName: string; accountName: string; accountNumber: string; branch?: string; routing?: string; isPrimary: boolean }[]; mobileBanking?: string; mobileBankingNumber?: string; additionalMobileBanking?: { provider: string; number: string; verified: boolean }[]; @@ -312,6 +313,10 @@ export const investors: Investor[] = [ bankAccountNumber: '2050 1500 2345', bankBranch: 'Dhanmondi Branch', bankRouting: '140', + bankAccounts: [ + { id: 'ba1', bankName: 'Islami Bank Bangladesh Ltd', accountName: 'Hasan Mahmud', accountNumber: '205015002345', branch: 'Dhanmondi Branch', routing: '140', isPrimary: true }, + { id: 'ba2', bankName: 'Dutch-Bangla Bank', accountName: 'Hasan Mahmud', accountNumber: '1203456789012', branch: 'Gulshan Branch', routing: '090', isPrimary: false }, + ], mobileBanking: 'Bkash', mobileBankingNumber: '01712345678', additionalMobileBanking: [