feat: add Edit contact button to email viewer contact sidebar

Clicking an email address in the viewer already shows a contact detail
sidebar. An "Edit" button now appears there (for known contacts) that
navigates directly to the contact edit form via the existing URL-param
intent system (?contactId=…&view=edit), removing the need to open the
Contacts page manually and search for the contact.
This commit is contained in:
Stefan Hildebrandt
2026-06-15 15:06:35 +02:00
committed by Linus Rath
parent 798a33495e
commit aee4bd78db
21 changed files with 484 additions and 35 deletions
+19 -1
View File
@@ -544,7 +544,25 @@
"reschedule_prompt": "Zadejte nové datum/čas, např. 2026-05-04T15:30",
"scheduled_actions_only": "Zobrazení Naplánováno podporuje pouze akce plánování",
"undo_send_scheduled": "Zpráva je naplánována k odeslání",
"undo_send": "Vrátit odeslání"
"undo_send": "Vrátit odeslání",
"contact_sidebar": {
"title": "Contact",
"close": "Close sidebar",
"action_email": "Email",
"action_email_title": "Send email",
"action_copy": "Copy",
"action_copy_title": "Copy email",
"action_edit_title": "Edit contact",
"section_emails": "Emails",
"section_phones": "Phones",
"section_organizations": "Organizations",
"section_addresses": "Addresses",
"section_notes": "Notes",
"not_in_contacts": "Not in your contacts",
"add_to_contacts": "Add to contacts",
"copied": "Copied!",
"copy_failed": "Failed to copy"
}
},
"email_composer": {
"read_receipt_on": "Vyžádáno potvrzení o přečtení (kliknutím vypnete)",
+19 -1
View File
@@ -544,7 +544,25 @@
"reschedule_prompt": "Indtast en ny dato/tid, f.eks. 2026-05-04T15:30",
"scheduled_actions_only": "Planlagt-visningen understøtter kun planlagte handlinger",
"undo_send_scheduled": "Besked planlagt til afsendelse",
"undo_send": "Fortryd afsendelse"
"undo_send": "Fortryd afsendelse",
"contact_sidebar": {
"title": "Contact",
"close": "Close sidebar",
"action_email": "Email",
"action_email_title": "Send email",
"action_copy": "Copy",
"action_copy_title": "Copy email",
"action_edit_title": "Edit contact",
"section_emails": "Emails",
"section_phones": "Phones",
"section_organizations": "Organizations",
"section_addresses": "Addresses",
"section_notes": "Notes",
"not_in_contacts": "Not in your contacts",
"add_to_contacts": "Add to contacts",
"copied": "Copied!",
"copy_failed": "Failed to copy"
}
},
"email_composer": {
"read_receipt_on": "Læsekvittering anmodet (klik for at deaktivere)",
+19 -1
View File
@@ -544,7 +544,25 @@
"reschedule_prompt": "Neues Datum/Uhrzeit eingeben, z. B. 2026-05-04T15:30",
"scheduled_actions_only": "Die Geplant-Ansicht unterstützt nur Planungsaktionen",
"undo_send_scheduled": "Nachricht ist zum Senden geplant",
"undo_send": "Senden rückgängig"
"undo_send": "Senden rückgängig",
"contact_sidebar": {
"title": "Kontakt",
"close": "Seitenleiste schließen",
"action_email": "E-Mail",
"action_email_title": "E-Mail senden",
"action_copy": "Kopieren",
"action_copy_title": "E-Mail-Adresse kopieren",
"action_edit_title": "Kontakt bearbeiten",
"section_emails": "E-Mail-Adressen",
"section_phones": "Telefonnummern",
"section_organizations": "Organisationen",
"section_addresses": "Adressen",
"section_notes": "Notizen",
"not_in_contacts": "Nicht in Ihren Kontakten",
"add_to_contacts": "Zu Kontakten hinzufügen",
"copied": "Kopiert!",
"copy_failed": "Kopieren fehlgeschlagen"
}
},
"email_composer": {
"read_receipt_on": "Lesebestätigung angefordert (klicken zum Deaktivieren)",
+19 -1
View File
@@ -544,7 +544,25 @@
"reschedule_prompt": "Enter a new date/time, e.g. 2026-05-04T15:30",
"scheduled_actions_only": "Scheduled view supports scheduled actions only",
"undo_send_scheduled": "Message scheduled for sending",
"undo_send": "Undo send"
"undo_send": "Undo send",
"contact_sidebar": {
"title": "Contact",
"close": "Close sidebar",
"action_email": "Email",
"action_email_title": "Send email",
"action_copy": "Copy",
"action_copy_title": "Copy email",
"action_edit_title": "Edit contact",
"section_emails": "Emails",
"section_phones": "Phones",
"section_organizations": "Organizations",
"section_addresses": "Addresses",
"section_notes": "Notes",
"not_in_contacts": "Not in your contacts",
"add_to_contacts": "Add to contacts",
"copied": "Copied!",
"copy_failed": "Failed to copy"
}
},
"email_composer": {
"read_receipt_on": "Read receipt requested (click to disable)",
+19 -1
View File
@@ -544,7 +544,25 @@
"reschedule_prompt": "Introduce una nueva fecha/hora, p. ej. 2026-05-04T15:30",
"scheduled_actions_only": "La vista Programados solo admite acciones de programación",
"undo_send_scheduled": "Mensaje programado para envío",
"undo_send": "Deshacer envío"
"undo_send": "Deshacer envío",
"contact_sidebar": {
"title": "Contacto",
"close": "Cerrar panel",
"action_email": "Correo",
"action_email_title": "Enviar correo",
"action_copy": "Copiar",
"action_copy_title": "Copiar correo electrónico",
"action_edit_title": "Editar contacto",
"section_emails": "Correos electrónicos",
"section_phones": "Teléfonos",
"section_organizations": "Organizaciones",
"section_addresses": "Direcciones",
"section_notes": "Notas",
"not_in_contacts": "No está en sus contactos",
"add_to_contacts": "Añadir a contactos",
"copied": "¡Copiado!",
"copy_failed": "Error al copiar"
}
},
"email_composer": {
"read_receipt_on": "Confirmación de lectura solicitada (haz clic para desactivar)",
+19 -1
View File
@@ -544,7 +544,25 @@
"reschedule_prompt": "Saisissez une nouvelle date/heure, p. ex. 2026-05-04T15:30",
"scheduled_actions_only": "La vue Planifiés prend uniquement en charge les actions de planification",
"undo_send_scheduled": "Message planifié pour envoi",
"undo_send": "Annuler lenvoi"
"undo_send": "Annuler lenvoi",
"contact_sidebar": {
"title": "Contact",
"close": "Fermer le panneau",
"action_email": "E-mail",
"action_email_title": "Envoyer un e-mail",
"action_copy": "Copier",
"action_copy_title": "Copier l'adresse e-mail",
"action_edit_title": "Modifier le contact",
"section_emails": "E-mails",
"section_phones": "Téléphones",
"section_organizations": "Organisations",
"section_addresses": "Adresses",
"section_notes": "Notes",
"not_in_contacts": "Pas dans vos contacts",
"add_to_contacts": "Ajouter aux contacts",
"copied": "Copié !",
"copy_failed": "Échec de la copie"
}
},
"email_composer": {
"read_receipt_on": "Accusé de lecture demandé (cliquez pour désactiver)",
+19 -1
View File
@@ -544,7 +544,25 @@
"reschedule_prompt": "Adj meg egy új dátumot/időpontot, pl. 2026-05-04T15:30",
"scheduled_actions_only": "Az ütemezett nézet csak ütemezett műveleteket támogat",
"undo_send_scheduled": "Üzenet ütemezve a küldéshez",
"undo_send": "Küldés visszavonása"
"undo_send": "Küldés visszavonása",
"contact_sidebar": {
"title": "Contact",
"close": "Close sidebar",
"action_email": "Email",
"action_email_title": "Send email",
"action_copy": "Copy",
"action_copy_title": "Copy email",
"action_edit_title": "Edit contact",
"section_emails": "Emails",
"section_phones": "Phones",
"section_organizations": "Organizations",
"section_addresses": "Addresses",
"section_notes": "Notes",
"not_in_contacts": "Not in your contacts",
"add_to_contacts": "Add to contacts",
"copied": "Copied!",
"copy_failed": "Failed to copy"
}
},
"email_composer": {
"read_receipt_on": "Olvasási visszaigazolás kérve (kattints a letiltáshoz)",
+19 -1
View File
@@ -544,7 +544,25 @@
"reschedule_prompt": "Inserisci una nuova data/ora, ad es. 2026-05-04T15:30",
"scheduled_actions_only": "La vista Programmate supporta solo azioni di programmazione",
"undo_send_scheduled": "Messaggio programmato per linvio",
"undo_send": "Annulla invio"
"undo_send": "Annulla invio",
"contact_sidebar": {
"title": "Contact",
"close": "Close sidebar",
"action_email": "Email",
"action_email_title": "Send email",
"action_copy": "Copy",
"action_copy_title": "Copy email",
"action_edit_title": "Edit contact",
"section_emails": "Emails",
"section_phones": "Phones",
"section_organizations": "Organizations",
"section_addresses": "Addresses",
"section_notes": "Notes",
"not_in_contacts": "Not in your contacts",
"add_to_contacts": "Add to contacts",
"copied": "Copied!",
"copy_failed": "Failed to copy"
}
},
"email_composer": {
"read_receipt_on": "Conferma di lettura richiesta (clicca per disattivare)",
+19 -1
View File
@@ -544,7 +544,25 @@
"reschedule_prompt": "新しい日時を入力してください。例: 2026-05-04T15:30",
"scheduled_actions_only": "予約済みビューでは予約アクションのみ利用できます",
"undo_send_scheduled": "メッセージは送信予約されています",
"undo_send": "送信を取り消す"
"undo_send": "送信を取り消す",
"contact_sidebar": {
"title": "Contact",
"close": "Close sidebar",
"action_email": "Email",
"action_email_title": "Send email",
"action_copy": "Copy",
"action_copy_title": "Copy email",
"action_edit_title": "Edit contact",
"section_emails": "Emails",
"section_phones": "Phones",
"section_organizations": "Organizations",
"section_addresses": "Addresses",
"section_notes": "Notes",
"not_in_contacts": "Not in your contacts",
"add_to_contacts": "Add to contacts",
"copied": "Copied!",
"copy_failed": "Failed to copy"
}
},
"email_composer": {
"read_receipt_on": "開封確認を要求中(クリックで無効化)",
+19 -1
View File
@@ -544,7 +544,25 @@
"reschedule_prompt": "새 날짜/시간을 입력하세요. 예: 2026-05-04T15:30",
"scheduled_actions_only": "예약됨 보기에서는 예약 작업만 사용할 수 있습니다",
"undo_send_scheduled": "메시지가 보내기로 예약되었습니다",
"undo_send": "보내기 실행 취소"
"undo_send": "보내기 실행 취소",
"contact_sidebar": {
"title": "Contact",
"close": "Close sidebar",
"action_email": "Email",
"action_email_title": "Send email",
"action_copy": "Copy",
"action_copy_title": "Copy email",
"action_edit_title": "Edit contact",
"section_emails": "Emails",
"section_phones": "Phones",
"section_organizations": "Organizations",
"section_addresses": "Addresses",
"section_notes": "Notes",
"not_in_contacts": "Not in your contacts",
"add_to_contacts": "Add to contacts",
"copied": "Copied!",
"copy_failed": "Failed to copy"
}
},
"email_composer": {
"read_receipt_on": "읽음 확인 요청됨 (클릭하여 해제)",
+19 -1
View File
@@ -544,7 +544,25 @@
"reschedule_prompt": "Ievadiet jaunu datumu/laiku, piem. 2026-05-04T15:30",
"scheduled_actions_only": "Ieplānoto skatā ir pieejamas tikai ieplānošanas darbības",
"undo_send_scheduled": "Ziņojums ir ieplānots nosūtīšanai",
"undo_send": "Atsaukt sūtīšanu"
"undo_send": "Atsaukt sūtīšanu",
"contact_sidebar": {
"title": "Contact",
"close": "Close sidebar",
"action_email": "Email",
"action_email_title": "Send email",
"action_copy": "Copy",
"action_copy_title": "Copy email",
"action_edit_title": "Edit contact",
"section_emails": "Emails",
"section_phones": "Phones",
"section_organizations": "Organizations",
"section_addresses": "Addresses",
"section_notes": "Notes",
"not_in_contacts": "Not in your contacts",
"add_to_contacts": "Add to contacts",
"copied": "Copied!",
"copy_failed": "Failed to copy"
}
},
"email_composer": {
"read_receipt_on": "Pieprasīts lasīšanas apstiprinājums (noklikšķiniet, lai atspējotu)",
+19 -1
View File
@@ -544,7 +544,25 @@
"reschedule_prompt": "Voer een nieuwe datum/tijd in, bijv. 2026-05-04T15:30",
"scheduled_actions_only": "De geplande weergave ondersteunt alleen geplande acties",
"undo_send_scheduled": "Bericht gepland voor verzending",
"undo_send": "Verzenden ongedaan maken"
"undo_send": "Verzenden ongedaan maken",
"contact_sidebar": {
"title": "Contact",
"close": "Close sidebar",
"action_email": "Email",
"action_email_title": "Send email",
"action_copy": "Copy",
"action_copy_title": "Copy email",
"action_edit_title": "Edit contact",
"section_emails": "Emails",
"section_phones": "Phones",
"section_organizations": "Organizations",
"section_addresses": "Addresses",
"section_notes": "Notes",
"not_in_contacts": "Not in your contacts",
"add_to_contacts": "Add to contacts",
"copied": "Copied!",
"copy_failed": "Failed to copy"
}
},
"email_composer": {
"read_receipt_on": "Leesbevestiging aangevraagd (klik om uit te schakelen)",
+19 -1
View File
@@ -544,7 +544,25 @@
"reschedule_prompt": "Wprowadź nową datę/godzinę, np. 2026-05-04T15:30",
"scheduled_actions_only": "Widok Zaplanowane obsługuje tylko akcje planowania",
"undo_send_scheduled": "Wiadomość zaplanowana do wysłania",
"undo_send": "Cofnij wysyłkę"
"undo_send": "Cofnij wysyłkę",
"contact_sidebar": {
"title": "Contact",
"close": "Close sidebar",
"action_email": "Email",
"action_email_title": "Send email",
"action_copy": "Copy",
"action_copy_title": "Copy email",
"action_edit_title": "Edit contact",
"section_emails": "Emails",
"section_phones": "Phones",
"section_organizations": "Organizations",
"section_addresses": "Addresses",
"section_notes": "Notes",
"not_in_contacts": "Not in your contacts",
"add_to_contacts": "Add to contacts",
"copied": "Copied!",
"copy_failed": "Failed to copy"
}
},
"email_composer": {
"read_receipt_on": "Zażądano potwierdzenia przeczytania (kliknij, aby wyłączyć)",
+19 -1
View File
@@ -544,7 +544,25 @@
"reschedule_prompt": "Informe uma nova data/hora, ex. 2026-05-04T15:30",
"scheduled_actions_only": "A visualização Agendados permite apenas ações de agendamento",
"undo_send_scheduled": "Mensagem agendada para envio",
"undo_send": "Desfazer envio"
"undo_send": "Desfazer envio",
"contact_sidebar": {
"title": "Contact",
"close": "Close sidebar",
"action_email": "Email",
"action_email_title": "Send email",
"action_copy": "Copy",
"action_copy_title": "Copy email",
"action_edit_title": "Edit contact",
"section_emails": "Emails",
"section_phones": "Phones",
"section_organizations": "Organizations",
"section_addresses": "Addresses",
"section_notes": "Notes",
"not_in_contacts": "Not in your contacts",
"add_to_contacts": "Add to contacts",
"copied": "Copied!",
"copy_failed": "Failed to copy"
}
},
"email_composer": {
"read_receipt_on": "Confirmação de leitura solicitada (clique para desativar)",
+19 -1
View File
@@ -544,7 +544,25 @@
"reschedule_prompt": "Введите новую дату/время, например 2026-05-04T15:30",
"scheduled_actions_only": "В представлении запланированных доступны только действия планирования",
"undo_send_scheduled": "Сообщение запланировано к отправке",
"undo_send": "Отменить отправку"
"undo_send": "Отменить отправку",
"contact_sidebar": {
"title": "Contact",
"close": "Close sidebar",
"action_email": "Email",
"action_email_title": "Send email",
"action_copy": "Copy",
"action_copy_title": "Copy email",
"action_edit_title": "Edit contact",
"section_emails": "Emails",
"section_phones": "Phones",
"section_organizations": "Organizations",
"section_addresses": "Addresses",
"section_notes": "Notes",
"not_in_contacts": "Not in your contacts",
"add_to_contacts": "Add to contacts",
"copied": "Copied!",
"copy_failed": "Failed to copy"
}
},
"email_composer": {
"read_receipt_on": "Запрошено уведомление о прочтении (нажмите, чтобы отключить)",
+19 -1
View File
@@ -544,7 +544,25 @@
"reschedule_prompt": "Yeni tarih/saat girin, ör. 2026-05-04T15:30",
"scheduled_actions_only": "Zamanlandı görünümü yalnızca zamanlama işlemlerini destekler",
"undo_send_scheduled": "İleti gönderim için zamanlandı",
"undo_send": "Göndermeyi geri al"
"undo_send": "Göndermeyi geri al",
"contact_sidebar": {
"title": "Contact",
"close": "Close sidebar",
"action_email": "Email",
"action_email_title": "Send email",
"action_copy": "Copy",
"action_copy_title": "Copy email",
"action_edit_title": "Edit contact",
"section_emails": "Emails",
"section_phones": "Phones",
"section_organizations": "Organizations",
"section_addresses": "Addresses",
"section_notes": "Notes",
"not_in_contacts": "Not in your contacts",
"add_to_contacts": "Add to contacts",
"copied": "Copied!",
"copy_failed": "Failed to copy"
}
},
"email_composer": {
"read_receipt_on": "Okundu bilgisi istendi (devre dışı bırakmak için tıklayın)",
+19 -1
View File
@@ -544,7 +544,25 @@
"reschedule_prompt": "Введіть нову дату/час, напр. 2026-05-04T15:30",
"scheduled_actions_only": "У поданні Заплановано доступні лише дії планування",
"undo_send_scheduled": "Повідомлення заплановано до надсилання",
"undo_send": "Скасувати надсилання"
"undo_send": "Скасувати надсилання",
"contact_sidebar": {
"title": "Contact",
"close": "Close sidebar",
"action_email": "Email",
"action_email_title": "Send email",
"action_copy": "Copy",
"action_copy_title": "Copy email",
"action_edit_title": "Edit contact",
"section_emails": "Emails",
"section_phones": "Phones",
"section_organizations": "Organizations",
"section_addresses": "Addresses",
"section_notes": "Notes",
"not_in_contacts": "Not in your contacts",
"add_to_contacts": "Add to contacts",
"copied": "Copied!",
"copy_failed": "Failed to copy"
}
},
"email_composer": {
"read_receipt_on": "Запитано сповіщення про прочитання (натисніть, щоб вимкнути)",
+19 -1
View File
@@ -544,7 +544,25 @@
"reschedule_prompt": "输入新的日期/时间,例如 2026-05-04T15:30",
"scheduled_actions_only": "计划发送视图仅支持计划操作",
"undo_send_scheduled": "邮件已计划发送",
"undo_send": "撤销发送"
"undo_send": "撤销发送",
"contact_sidebar": {
"title": "Contact",
"close": "Close sidebar",
"action_email": "Email",
"action_email_title": "Send email",
"action_copy": "Copy",
"action_copy_title": "Copy email",
"action_edit_title": "Edit contact",
"section_emails": "Emails",
"section_phones": "Phones",
"section_organizations": "Organizations",
"section_addresses": "Addresses",
"section_notes": "Notes",
"not_in_contacts": "Not in your contacts",
"add_to_contacts": "Add to contacts",
"copied": "Copied!",
"copy_failed": "Failed to copy"
}
},
"email_composer": {
"read_receipt_on": "已请求已读回执(点击以关闭)",