Implement display_name field with migration and API support

Co-authored-by: elisiariocouto <818914+elisiariocouto@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2025-09-15 22:57:51 +00:00
committed by Elisiário Couto
parent 3352e110b8
commit 33a7ad5ad2
9 changed files with 177 additions and 24 deletions

View File

@@ -81,8 +81,8 @@ export default function AccountsOverview() {
const queryClient = useQueryClient();
const updateAccountMutation = useMutation({
mutationFn: ({ id, name }: { id: string; name: string }) =>
apiClient.updateAccount(id, { name }),
mutationFn: ({ id, display_name }: { id: string; display_name: string }) =>
apiClient.updateAccount(id, { display_name }),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ["accounts"] });
setEditingAccountId(null);
@@ -95,14 +95,15 @@ export default function AccountsOverview() {
const handleEditStart = (account: Account) => {
setEditingAccountId(account.id);
setEditingName(account.name || "");
// Use display_name if available, otherwise fall back to name
setEditingName(account.display_name || account.name || "");
};
const handleEditSave = () => {
if (editingAccountId && editingName.trim()) {
updateAccountMutation.mutate({
id: editingAccountId,
name: editingName.trim(),
display_name: editingName.trim(),
});
}
};
@@ -267,7 +268,7 @@ export default function AccountsOverview() {
setEditingName(e.target.value)
}
className="flex-1 px-3 py-1 text-base sm:text-lg font-medium border border-input rounded-md bg-background focus:outline-none focus:ring-2 focus:ring-ring focus:border-ring"
placeholder="Account name"
placeholder="Custom account name"
name="search"
autoComplete="off"
onKeyDown={(e) => {
@@ -303,7 +304,7 @@ export default function AccountsOverview() {
<div>
<div className="flex items-center space-x-2 min-w-0">
<h4 className="text-base sm:text-lg font-medium text-foreground truncate">
{account.name || "Unnamed Account"}
{account.display_name || account.name || "Unnamed Account"}
</h4>
<button
onClick={() => handleEditStart(account)}

View File

@@ -38,7 +38,7 @@ export function AccountCombobox({
);
const formatAccountName = (account: Account) => {
const displayName = account.name || "Unnamed Account";
const displayName = account.display_name || account.name || "Unnamed Account";
return `${displayName} (${account.institution_id})`;
};
@@ -89,7 +89,7 @@ export function AccountCombobox({
{accounts.map((account) => (
<CommandItem
key={account.id}
value={`${account.name} ${account.institution_id}`}
value={`${account.display_name || account.name} ${account.institution_id}`}
onSelect={() => {
onAccountChange(account.id);
setOpen(false);
@@ -105,7 +105,7 @@ export function AccountCombobox({
/>
<div className="flex flex-col">
<span className="font-medium">
{account.name || "Unnamed Account"}
{account.display_name || account.name || "Unnamed Account"}
</span>
<span className="text-xs text-gray-500">
{account.institution_id}

View File

@@ -41,8 +41,8 @@ export const apiClient = {
updateAccount: async (
id: string,
updates: AccountUpdate,
): Promise<{ id: string; name?: string }> => {
const response = await api.put<ApiResponse<{ id: string; name?: string }>>(
): Promise<{ id: string; display_name?: string }> => {
const response = await api.put<ApiResponse<{ id: string; display_name?: string }>>(
`/accounts/${id}`,
updates,
);

View File

@@ -11,6 +11,7 @@ export interface Account {
status: string;
iban?: string;
name?: string;
display_name?: string;
currency?: string;
created: string;
last_accessed?: string;
@@ -18,7 +19,7 @@ export interface Account {
}
export interface AccountUpdate {
name?: string;
display_name?: string;
}
export interface RawTransactionData {