Skip to content

Commit c347eaa

Browse files
jbpenrathsylvinus
andcommitted
✨(frontend) add admin pages
Add pages to administrate maildomains and mailboxes Co-authored-by: Sylvain Zimmer <[email protected]>
1 parent 5cb0db5 commit c347eaa

File tree

22 files changed

+1567
-17
lines changed

22 files changed

+1567
-17
lines changed
69.4 KB
Binary file not shown.

src/frontend/src/features/forms/components/message-form/index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,8 +129,8 @@ export const MessageForm = ({
129129
const getDefaultSubject = () => {
130130
if (draft?.subject) return draft.subject
131131
if (parentMessage) {
132-
if (mode === "forward") return MailHelper.prefixSubjectIfNeeded(parentMessage.subject, "Fwd:");
133-
if (mode.startsWith("reply")) return MailHelper.prefixSubjectIfNeeded(parentMessage.subject, "Re:");
132+
if (mode === "forward") return MailHelper.prefixSubjectIfNeeded(parentMessage.subject ?? "", "Fwd:");
133+
if (mode.startsWith("reply")) return MailHelper.prefixSubjectIfNeeded(parentMessage.subject ?? "", "Re:");
134134
}
135135

136136
return '';

src/frontend/src/features/forms/components/react-hook-form/rhf-checkbox.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { Checkbox, InputProps } from "@openfun/cunningham-react";
33

44
/**
55
* A wrapper component for the Checkbox component that integrates with react-hook-form.
6-
*
6+
*
77
* This component allows you to use the Checkbox component as a controlled component
88
* with react-hook-form's form state management.
99
*/
@@ -16,7 +16,7 @@ export const RhfCheckbox = (props: InputProps & { name: string }) => {
1616
render={({ field, fieldState }) => {
1717
return (
1818
<Checkbox
19-
{...props}
19+
{...props}
2020
aria-invalid={!!fieldState.error}
2121
state={fieldState.error ? "error" : "default"}
2222
onBlur={(event) => {

src/frontend/src/features/i18n/translations.json

Lines changed: 227 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,16 @@
44
"app_title": "Messaging",
55
"app_description": "Messaging",
66
"welcome": "Welcome",
7-
"logout": "Logout",
87
"my_account": "My Account",
98
"no_mailbox": "No mailbox.",
109
"no_threads": "No threads.",
1110
"mailbox": "Mailbox",
1211
"new_message_form": {
1312
"title": "New message"
1413
},
14+
"user_menu": {
15+
"logout": "Logout"
16+
},
1517
"aria": {
1618
"labels": {
1719
"banner": {
@@ -63,7 +65,11 @@
6365
"import_messages": "Import messages",
6466
"show": "Show",
6567
"add_label": "Add label",
66-
"forward": "Forward"
68+
"forward": "Forward",
69+
"create": "Create",
70+
"creating": "Creating...",
71+
"save": "Save",
72+
"saving": "Saving..."
6773
},
6874
"tooltips": {
6975
"has_attachments": "This email has an attachment",
@@ -260,6 +266,110 @@
260266
},
261267
"message_body": {
262268
"show_embedded_message": "Show embedded message"
269+
},
270+
"create_address_modal": {
271+
"title": "Create a new address @{{domain}}",
272+
"success": {
273+
"personal": "The personal mailbox <strong>{{mailbox}}</strong> has been created successfully.",
274+
"shared": "The shared mailbox <strong>{{mailbox}}</strong> has been created successfully.",
275+
"redirect": "The redirect mailbox <strong>{{mailbox}}</strong> has been created successfully.",
276+
"credential_identity": "Identity",
277+
"credential_password": "Temporary password",
278+
"shared_password_info": "Share the credentials of this mailbox with its user. You must transfer them securely, preferably physically.",
279+
"credential_info": "You can now inform the person that their mailbox is ready to be used and communicate the instructions for authentication."
280+
},
281+
"tabs": {
282+
"personal": "Create a new personal mailbox",
283+
"shared": "Create a new shared mailbox",
284+
"redirect": "Create a simple redirect"
285+
},
286+
"form": {
287+
"labels": {
288+
"name": "Name",
289+
"first_name": "First name",
290+
"last_name": "Last name",
291+
"prefix": "Prefix",
292+
"address": "Address",
293+
"description": "Description",
294+
"target_email": "Target email",
295+
"confirmation_accepted": "I confirm that this address corresponds to the real identity of a colleague, and I commit to deactivating it when their position ends."
296+
},
297+
"placeholders": {
298+
"name": "Name...",
299+
"prefix": "Prefix...",
300+
"shared_name": "Shared mailbox name...",
301+
"description": "Description...",
302+
"target_email": "[email protected]"
303+
},
304+
"confirmation_text": "I confirm that this address corresponds to the identity of a physical person working in {{location}}, and I commit to deactivating it when their position ends.",
305+
"errors": {
306+
"name_required": "Name is required.",
307+
"first_name_required": "First name is required.",
308+
"last_name_required": "Last name is required.",
309+
"prefix_required": "Prefix is required.",
310+
"prefix_invalid": "Prefix can only contain letters, numbers, dots, underscores and hyphens.",
311+
"target_email_invalid": "Please enter a valid email address.",
312+
"confirmation_required": "You must confirm this statement",
313+
"validation_failed": "Please fill in all required fields correctly."
314+
}
315+
},
316+
"api_errors": {
317+
"prefix_exists": "An address with this prefix already exists in this domain.",
318+
"default": "An error occurred while creating the address."
319+
}
320+
},
321+
"manage_accesses_modal": {
322+
"title": "Manage accesses",
323+
"roles": {
324+
"admin": "Administrateur",
325+
"editor": "Editor",
326+
"viewer": "Viewer"
327+
}
328+
},
329+
"admin_layout": {
330+
"breadcrumbs": {
331+
"back": "Back to your inbox",
332+
"maildomains_management": "Maildomains management",
333+
"maildomains_details": "Maildomains details"
334+
},
335+
"tabs": {
336+
"addresses": "Addresses",
337+
"dns": "DNS",
338+
"signatures": "Signatures"
339+
}
340+
},
341+
"admin_maildomains_list": {
342+
"title": "Maildomains management",
343+
"datagrid_headers": {
344+
"name": "Domain",
345+
"created_at": "Created at",
346+
"updated_at": "Updated at"
347+
},
348+
"loading": "Loading maildomains...",
349+
"loading_error": "An error occurred while loading maildomains."
350+
},
351+
"admin_maildomains_details": {
352+
"errors": {
353+
"domain_not_found": "Domain not found",
354+
"failed_to_load_adresses": "Error while loading addresses"
355+
},
356+
"datagrid_headers": {
357+
"type": "Type",
358+
"email": "Email address",
359+
"accesses": "Accesses",
360+
"actions": "Actions"
361+
},
362+
"datagrid_row_labels": {
363+
"no_accesses": "No accesses",
364+
"unknown_user": "Unknown user",
365+
"alias": "Alias",
366+
"mailbox": "Mailbox"
367+
},
368+
"actions": {
369+
"manage_accesses": "Manage accesses",
370+
"new_address": "New address"
371+
},
372+
"loading": "Loading addresses..."
263373
}
264374
}
265375
},
@@ -268,14 +378,16 @@
268378
"app_title": "Messages",
269379
"app_description": "Messages",
270380
"welcome": "Bienvenue",
271-
"logout": "Déconnexion",
272381
"my_account": "Mon Compte",
273382
"no_mailbox": "Aucune boîte aux lettres.",
274383
"no_threads": "Aucune conversation.",
275384
"mailbox": "Boîte aux lettres",
276385
"new_message_form": {
277386
"title": "Nouveau message"
278387
},
388+
"user_menu": {
389+
"logout": "Déconnexion"
390+
},
279391
"aria": {
280392
"labels": {
281393
"banner": {
@@ -327,7 +439,11 @@
327439
"import": "Importer",
328440
"import_messages": "Importer des messages",
329441
"show": "Afficher",
330-
"add_label": "Ajouter un libellé"
442+
"add_label": "Ajouter un libellé",
443+
"create": "Créer",
444+
"creating": "Création en cours...",
445+
"save": "Enregistrer",
446+
"saving": "Enregistrement en cours..."
331447
},
332448
"tooltips": {
333449
"has_attachments": "Cette email contient une pièce jointe",
@@ -516,6 +632,113 @@
516632
},
517633
"message_body": {
518634
"show_embedded_message": "Afficher le message inclus"
635+
},
636+
"create_address_modal": {
637+
"title": "Création d'une nouvelle adresse @{{domain}}",
638+
"tabs": {
639+
"personal": "Créer une nouvelle boîte personnelle",
640+
"shared": "Créer une nouvelle boîte partagée",
641+
"redirect": "Créer une simple redirection"
642+
},
643+
"success": {
644+
"personal": "L'adresse de messagerie personnelle <strong>{{mailbox}}</strong> a été créée avec succès.",
645+
"shared": "L'adresse de messagerie partagée <strong>{{mailbox}}</strong> a été créée avec succès.",
646+
"redirect": "L'adresse de redirection <strong>{{mailbox}}</strong> a été créée avec succès.",
647+
"credential_identity": "Identifiant",
648+
"credential_password": "Mot de passe temporaire",
649+
"shared_password_info": "Partager les identifiants de cette boîte mail avec son utilisateur. Vous devez le lui transmettre de façon sécurisée, de préférence physiquement.",
650+
"credential_info": "Vous pouvez désormais prévenir la personne que sa boîte mail est prête à être utilisée et lui communiquer les instructions pour s'authentifier."
651+
},
652+
"form": {
653+
"labels": {
654+
"name": "Nom",
655+
"first_name": "Prénom",
656+
"last_name": "Nom",
657+
"prefix": "Préfixe",
658+
"address": "Adresse",
659+
"description": "Description",
660+
"target_email": "Adresse de destination",
661+
"confirmation_accepted": "Je confirme que cette adresse correspond à l'identité d'une personne physique travaillant avec moi, et m'engage à la désactiver quand son poste prendra fin."
662+
},
663+
"placeholders": {
664+
"name": "Nom...",
665+
"prefix": "Préfixe...",
666+
"shared_name": "Nom de la boîte partagée...",
667+
"description": "Description...",
668+
"target_email": "[email protected]"
669+
},
670+
"confirmation_text": "Je confirme que cette adresse correspond à l'identité d'une personne physique travaillant à {{location}}, et m'engage à la désactiver quand son poste prendra fin.",
671+
"errors": {
672+
"name_required": "Le nom est requis.",
673+
"first_name_required": "Le prénom est requis.",
674+
"last_name_required": "Le nom est requis.",
675+
"prefix_required": "Le préfixe est requis.",
676+
"prefix_invalid": "Le préfixe ne peut contenir que des lettres, chiffres, points, tirets bas et tirets.",
677+
"target_email_invalid": "Veuillez saisir une adresse email valide.",
678+
"confirmation_required": "Vous devez confirmer cette déclaration",
679+
"validation_failed": "Veuillez remplir tous les champs requis correctement."
680+
}
681+
},
682+
"api_errors": {
683+
"prefix_exists": "Une adresse avec ce préfixe existe déjà dans ce domaine.",
684+
"default": "Une erreur est survenue lors de la création de l'adresse."
685+
}
686+
},
687+
"manage_accesses_modal": {
688+
"title": "Gérer les accès à {{mailbox}}",
689+
"roles": {
690+
"admin": "Administrateur",
691+
"editor": "Éditeur",
692+
"viewer": "Lecteur"
693+
}
694+
},
695+
"admin_layout": {
696+
"breadcrumbs": {
697+
"back": "Retour à votre messagerie",
698+
"maildomains_management": "Gestion des domaines",
699+
"maildomains_details": "Détails du domaine"
700+
},
701+
"tabs": {
702+
"addresses": "Adresses",
703+
"dns": "DNS",
704+
"signatures": "Signatures"
705+
}
706+
},
707+
"admin_maildomains_list": {
708+
"title": "Gestion des domaines",
709+
"datagrid_headers": {
710+
"name": "Domaine",
711+
"created_at": "Créé le",
712+
"updated_at": "Modifié le"
713+
},
714+
"actions": {
715+
"manage_access": "Gérer les accès"
716+
},
717+
"loading": "Chargement des domaines...",
718+
"loading_error": "Une erreur est survenue lors du chargement des domaines."
719+
},
720+
"admin_maildomains_details": {
721+
"errors": {
722+
"domain_not_found": "Domaine non trouvé",
723+
"failed_to_load_adresses": "Erreur lors du chargement des adresses"
724+
},
725+
"datagrid_headers": {
726+
"type": "Type",
727+
"email": "Adresse email",
728+
"accesses": "Accès",
729+
"actions": "Actions"
730+
},
731+
"datagrid_row_labels": {
732+
"no_accesses": "Aucun accès",
733+
"unknown_user": "Utilisateur inconnu",
734+
"alias": "Alias",
735+
"mailbox": "Boîte"
736+
},
737+
"actions": {
738+
"manage_accesses": "Gérer les accès",
739+
"new_address": "Nouvelle adresse"
740+
},
741+
"loading": "Chargement des adresses..."
519742
}
520743
}
521744
}

0 commit comments

Comments
 (0)