From 13b1c452714ca3c4e22d8350a1b56747a6ade8e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Fri, 26 Sep 2025 14:25:38 +0200 Subject: [PATCH] Simplify and modernize entity components and translations for better performance and consistency - Replace fragmented name rendering with unified `person.text` in Vue components. - Migrate `GenderIconRenderBox` to use Bootstrap icons and TypeScript. - Introduce `GenderTranslation` type and helper for gender rendering. - Refactor `PersonRenderBox` to streamline rendering logic and improve maintainability. Migrate to typescript - Update French translations for consistency with new gender rendering. --- .../Resources/public/lib/api/genderHelper.ts | 17 + .../ChillMainBundle/Resources/public/types.ts | 15 +- .../Entity/GenderIconRenderBox.vue | 36 +-- .../translations/messages+intl-icu.fr.yaml | 28 -- .../_components/Entity/PersonRenderBox.vue | 302 ++++++------------ .../vuejs/_components/Entity/PersonText.vue | 18 +- .../translations/messages+intl-icu.fr.yaml | 35 ++ 7 files changed, 187 insertions(+), 264 deletions(-) create mode 100644 src/Bundle/ChillMainBundle/Resources/public/lib/api/genderHelper.ts diff --git a/src/Bundle/ChillMainBundle/Resources/public/lib/api/genderHelper.ts b/src/Bundle/ChillMainBundle/Resources/public/lib/api/genderHelper.ts new file mode 100644 index 000000000..f913fd194 --- /dev/null +++ b/src/Bundle/ChillMainBundle/Resources/public/lib/api/genderHelper.ts @@ -0,0 +1,17 @@ +import {Gender, GenderTranslation} from "ChillMainAssets/types"; + +/** + * Translates a given gender object into its corresponding gender translation string. + * + * @param {Gender|null} gender - The gender object to be translated, null values are also supported + * @return {GenderTranslation} Returns the gender translation string corresponding to the provided gender, + * or "unknown" if the gender is null. + */ +export function toGenderTranslation(gender: Gender|null): GenderTranslation +{ + if (null === gender) { + return "unknown"; + } + + return gender.genderTranslation; +} diff --git a/src/Bundle/ChillMainBundle/Resources/public/types.ts b/src/Bundle/ChillMainBundle/Resources/public/types.ts index 38b148881..960b0d253 100644 --- a/src/Bundle/ChillMainBundle/Resources/public/types.ts +++ b/src/Bundle/ChillMainBundle/Resources/public/types.ts @@ -33,11 +33,24 @@ export interface SetCivility { id: number; } + +/** + * Gender translation. + * + * Match the GenderEnum in PHP code. + */ +export type GenderTranslation = "male" | "female" | "neutral" | "unknown"; + +/** + * A gender + * + * See also + */ export interface Gender { type: "chill_main_gender"; id: number; label: string; - genderTranslation: string; + genderTranslation: GenderTranslation; } /** diff --git a/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/Entity/GenderIconRenderBox.vue b/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/Entity/GenderIconRenderBox.vue index 794771014..6b11d400f 100644 --- a/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/Entity/GenderIconRenderBox.vue +++ b/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/Entity/GenderIconRenderBox.vue @@ -1,28 +1,28 @@ - diff --git a/src/Bundle/ChillMainBundle/translations/messages+intl-icu.fr.yaml b/src/Bundle/ChillMainBundle/translations/messages+intl-icu.fr.yaml index 6b893410a..6e7c6e613 100644 --- a/src/Bundle/ChillMainBundle/translations/messages+intl-icu.fr.yaml +++ b/src/Bundle/ChillMainBundle/translations/messages+intl-icu.fr.yaml @@ -136,34 +136,6 @@ filter_order: Search: Chercher dans la liste By date: Filtrer par date search_box: Filtrer par contenu -renderbox: - person: "Usager" - birthday: - man: "Né le" - woman: "Née le" - neutral: "Né·e le" - unknown: "Né·e le" - deathdate: "Date de décès" - household_without_address: "Le ménage de l'usager est sans adresse" - no_data: "Aucune information renseignée" - type: - thirdparty: "Tiers" - person: "Usager" - holder: "Titulaire" - years_old: >- - {n, plural, - =0 {0 an} - one {1 an} - other {# ans} - } - residential_address: "Adresse de résidence" - located_at: "réside chez" - household_number: "Ménage n°{number}" - current_members: "Membres actuels" - no_current_address: "Sans adresse actuellement" - new_household: "Nouveau ménage" - no_members_yet: "Aucun membre actuellement" - pick_entity: add: "Ajouter" modal_title: >- diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/_components/Entity/PersonRenderBox.vue b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/_components/Entity/PersonRenderBox.vue index 8995506a9..4bf54fd73 100644 --- a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/_components/Entity/PersonRenderBox.vue +++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/_components/Entity/PersonRenderBox.vue @@ -5,46 +5,16 @@
- - - {{ person.firstName }} - {{ person.lastName }} -  {{ person.suffixText }} - - {{ - altNameLabel - }} - - - - - {{ person.firstName + " " }} - {{ person.lastName }} -  {{ person.suffixText }} - (‡) - - {{ - altNameLabel - }} - - - {{ person.id }} - + +
+

+ {{ person.personId }} +

+

- - - - - - + {{ trans(RENDERBOX_BIRTHDAY_STATEMENT, {gender: toGenderTranslation(person.gender), birthdate: ISOToDate(person.birthdate?.datetime)}) }} + - ({{ trans(RENDERBOX_YEARS_OLD, { n: person.age }) }}) + ({{ trans(RENDERBOX_YEARS_OLD, {n: person.age}) }})

+ +

+ + {{ trans(RENDERBOX_DEATHDATE_STATEMENT, {gender: toGenderTranslation(person.gender), deathdate: ISOToDate(person.deathdate?.datetime)}) }} + +

+
@@ -114,11 +59,11 @@
- +
  • - +
  • - +

    {{ trans(RENDERBOX_NO_DATA) }}

    @@ -160,7 +100,7 @@ v-for="(addr, i) in person.current_residential_addresses" :key="i" > - +
    {{ trans(RENDERBOX_RESIDENTIAL_ADDRESS) }}: @@ -180,6 +120,7 @@ :person="addr.hostPerson" /> +
  • - + {{ person.email }}
  • - +

    {{ trans(RENDERBOX_NO_DATA) }}

  • - + {{ person.mobilenumber }}
  • - +

    {{ trans(RENDERBOX_NO_DATA) }}

  • - + {{ person.phonenumber }}
  • - +

    {{ trans(RENDERBOX_NO_DATA) }}

    @@ -246,25 +187,25 @@ options.addCenter " > - +
  • - +

    {{ trans(RENDERBOX_NO_DATA) }}

  • - +
- + @@ -278,11 +219,11 @@ class="fa-stack fa-holder" :title="trans(RENDERBOX_HOLDER)" > - + T - + - + T - + - + - diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/_components/Entity/PersonText.vue b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/_components/Entity/PersonText.vue index 8d35b6cc6..69cbba082 100644 --- a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/_components/Entity/PersonText.vue +++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/_components/Entity/PersonText.vue @@ -1,13 +1,7 @@