feat: add external URL support for bank accounts, allowing users to link to their bank's portal

This commit is contained in:
Julien Froidefond
2025-11-27 11:50:09 +01:00
parent b2efade4d5
commit 5eb37e631f
6 changed files with 38 additions and 1 deletions

View File

@@ -36,6 +36,7 @@ import {
Wallet,
PiggyBank,
RefreshCw,
ExternalLink,
} from "lucide-react";
import type { Account } from "@/lib/types";
import { cn } from "@/lib/utils";
@@ -55,13 +56,14 @@ const accountTypeLabels = {
};
export default function AccountsPage() {
const { data, isLoading, refresh, update } = useBankingData();
const { data, isLoading, refresh } = useBankingData();
const [editingAccount, setEditingAccount] = useState<Account | null>(null);
const [isDialogOpen, setIsDialogOpen] = useState(false);
const [formData, setFormData] = useState({
name: "",
type: "CHECKING" as Account["type"],
folderId: "folder-root",
externalUrl: "",
});
if (isLoading || !data) {
@@ -88,6 +90,7 @@ export default function AccountsPage() {
name: account.name,
type: account.type,
folderId: account.folderId || "folder-root",
externalUrl: account.externalUrl || "",
});
setIsDialogOpen(true);
};
@@ -101,6 +104,7 @@ export default function AccountsPage() {
name: formData.name,
type: formData.type,
folderId: formData.folderId,
externalUrl: formData.externalUrl || null,
};
await updateAccount(updatedAccount);
refresh();
@@ -244,6 +248,17 @@ export default function AccountsPage() {
)}
</p>
)}
{account.externalUrl && (
<a
href={account.externalUrl}
target="_blank"
rel="noopener noreferrer"
className="inline-flex items-center gap-1 text-xs text-primary hover:underline mt-2"
>
<ExternalLink className="w-3 h-3" />
Accéder au portail banque
</a>
)}
</CardContent>
</Card>
);
@@ -306,6 +321,19 @@ export default function AccountsPage() {
</SelectContent>
</Select>
</div>
<div className="space-y-2">
<Label>Lien externe (portail banque)</Label>
<Input
value={formData.externalUrl}
onChange={(e) =>
setFormData({ ...formData, externalUrl: e.target.value })
}
placeholder="https://..."
/>
<p className="text-xs text-muted-foreground">
URL personnalisée vers le portail de votre banque
</p>
</div>
<div className="flex justify-end gap-2">
<Button variant="outline" onClick={() => setIsDialogOpen(false)}>
Annuler