From 143ca73a97ce8c67e29df9fa18b2406788025d4a Mon Sep 17 00:00:00 2001 From: Yaroslav Kosterin Date: Thu, 30 Jan 2025 20:37:20 +0200 Subject: [PATCH 01/24] update webshop top menu styles --- .../sections/blocks/block-mobile-menu.scss | 2 +- .../sections/blocks/block-navbar-mobile.scss | 23 +++++++++++++------ .../top-navbar/mobile/TopNavbarMobile.tsx | 2 +- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/react/assets/forus-webshop/scss/_common/sections/blocks/block-mobile-menu.scss b/react/assets/forus-webshop/scss/_common/sections/blocks/block-mobile-menu.scss index d5e13c06d..e5f845cd2 100644 --- a/react/assets/forus-webshop/scss/_common/sections/blocks/block-mobile-menu.scss +++ b/react/assets/forus-webshop/scss/_common/sections/blocks/block-mobile-menu.scss @@ -4,7 +4,7 @@ $footer_base_font: 'Open Sans', arial, sans-serif; --item-height: 44px; --item-line-height: 18px; position: fixed; - top: 50px; + top: 68px; bottom: 0; z-index: 10; width: 100%; diff --git a/react/assets/forus-webshop/scss/_common/sections/blocks/block-navbar-mobile.scss b/react/assets/forus-webshop/scss/_common/sections/blocks/block-navbar-mobile.scss index 65f6b121b..6698a0c73 100644 --- a/react/assets/forus-webshop/scss/_common/sections/blocks/block-navbar-mobile.scss +++ b/react/assets/forus-webshop/scss/_common/sections/blocks/block-navbar-mobile.scss @@ -10,33 +10,42 @@ align-items: center; & > .navbar-mobile-auth-buttons { - padding-top: 5px; + padding: 10px; } } .navbar-mobile-button { flex: 0 0 60px; - height: 50px; + height: 68px; display: flex; flex-direction: column; justify-content: center; align-items: center; - font: 600 9px / 14px var(--base-font); + font: 500 12px / 14px var(--base-font); outline-offset: -2px !important; border-radius: 6px; gap: 2px; .navbar-mobile-button-icon { - font-size: 16px; + font-size: 26px; + line-height: 26px; + } + + &.active { + font-weight: 700; } } .navbar-mobile-logo { display: flex; - height: 30px; flex: 1 1 auto; flex-direction: row; justify-content: center; + + img { + max-width: 140px; + max-height: 36px; + } } .navbar-mobile-lang { @@ -60,8 +69,8 @@ gap: 10px; .navbar-mobile-auth-button { - padding-top: 7px; - padding-bottom: 7px; + padding-top: 9px; + padding-bottom: 9px; margin: 0 0; flex: 0 0 calc(50% - 5px); box-shadow: none; diff --git a/react/src/webshop/components/elements/top-navbar/mobile/TopNavbarMobile.tsx b/react/src/webshop/components/elements/top-navbar/mobile/TopNavbarMobile.tsx index c245cb2fa..e9b1afc94 100644 --- a/react/src/webshop/components/elements/top-navbar/mobile/TopNavbarMobile.tsx +++ b/react/src/webshop/components/elements/top-navbar/mobile/TopNavbarMobile.tsx @@ -94,7 +94,7 @@ export const TopNavbarMobile = () => { {envData.config?.flags?.genericSearch ? (
{ e.stopPropagation(); toggleSearchBox(e); From 94c4950f11ae9ec8ca5ddded1e380e919e8e0db6 Mon Sep 17 00:00:00 2001 From: dev-rminds Date: Wed, 12 Feb 2025 00:56:55 +0200 Subject: [PATCH 02/24] minor translations service refactoring --- docker/docker-compose/Dockerfile | 1 + .../sections/blocks/block-lang-control.scss | 1 + .../OrganizationsTranslations.tsx | 98 +++---------------- .../OrganizationsTranslationsStatsColumn.tsx | 40 ++++++++ .../pages/funds-request/FundRequest.tsx | 4 +- .../pages/vouchers-show/VouchersShow.tsx | 23 +++-- react/src/webshop/i18n/nl/pages/voucher.mjs | 3 + react/src/webshop/i18n/translated/ar.json | 5 +- react/src/webshop/i18n/translated/de.json | 5 +- react/src/webshop/i18n/translated/en-US.json | 5 +- react/src/webshop/i18n/translated/fr.json | 5 +- react/src/webshop/i18n/translated/pl.json | 5 +- react/src/webshop/i18n/translated/ru.json | 5 +- react/src/webshop/i18n/translated/tr.json | 5 +- react/src/webshop/i18n/translated/uk.json | 5 +- translations/cache/cache.json | 12 +++ 16 files changed, 122 insertions(+), 100 deletions(-) create mode 100644 react/src/dashboard/components/pages/organizations-translations/elements/OrganizationsTranslationsStatsColumn.tsx diff --git a/docker/docker-compose/Dockerfile b/docker/docker-compose/Dockerfile index 0da7d1979..3aac40cf9 100644 --- a/docker/docker-compose/Dockerfile +++ b/docker/docker-compose/Dockerfile @@ -11,6 +11,7 @@ RUN apk update \ iputils \ net-tools \ mc \ + nano \ wget CMD tail -f /dev/null \ No newline at end of file diff --git a/react/assets/forus-webshop/scss/_common/sections/blocks/block-lang-control.scss b/react/assets/forus-webshop/scss/_common/sections/blocks/block-lang-control.scss index fa9c48bda..5782ec536 100644 --- a/react/assets/forus-webshop/scss/_common/sections/blocks/block-lang-control.scss +++ b/react/assets/forus-webshop/scss/_common/sections/blocks/block-lang-control.scss @@ -35,6 +35,7 @@ background: #fff; border: 1px solid var(--border-color); border-radius: var(--border-radius); + box-shadow: var(--box-shadow); z-index: 2; width: 230px; max-width: 90vw; diff --git a/react/src/dashboard/components/pages/organizations-translations/OrganizationsTranslations.tsx b/react/src/dashboard/components/pages/organizations-translations/OrganizationsTranslations.tsx index 16184a608..bc0630bdf 100644 --- a/react/src/dashboard/components/pages/organizations-translations/OrganizationsTranslations.tsx +++ b/react/src/dashboard/components/pages/organizations-translations/OrganizationsTranslations.tsx @@ -14,6 +14,7 @@ import InfoBox from '../../elements/info-box/InfoBox'; import FormGroup from '../../elements/forms/controls/FormGroup'; import FormGroupInfo from '../../elements/forms/elements/FormGroupInfo'; import { currencyFormat, numberFormat } from '../../../helpers/string'; +import OrganizationsTranslationsStatsColumn from './elements/OrganizationsTranslationsStatsColumn'; export default function OrganizationsTranslations() { const activeOrganization = useActiveOrganization(); @@ -292,88 +293,21 @@ export default function OrganizationsTranslations() {
-
-

Vandaag

-
    -
  • Gebruikte tekens: {numberFormat(parseInt(stats?.day?.total?.symbols))}
  • -
  • - Berekening:{' '} - {currencyFormat(parseInt(stats?.day?.total?.symbols)) + - ' / ' + - currencyFormat(activeOrganization?.translations_daily_limit)} -
      - {Object.keys(stats?.day?.count_per_type).map((key) => { - const type = stats?.day?.count_per_type[key]; - return ( -
    • - {key}:{' '} - {type.symbols.toLocaleString()} or ~ {type.cost} -
    • - ); - })} -
    -
  • -
  • - Schatting van de kosten: {stats?.day?.total?.cost} -
  • -
-
-
-

Deze week

-
    -
  • - Gebruikte tekens: {numberFormat(parseInt(stats?.week?.total?.symbols))} -
  • -
  • - Berekening:{' '} - {currencyFormat(parseInt(stats?.week?.total?.symbols)) + - ' / ' + - currencyFormat(activeOrganization?.translations_weekly_limit)} -
      - {Object.keys(stats?.week?.count_per_type).map((key) => { - const type = stats?.week?.count_per_type[key]; - return ( -
    • - {key}:{' '} - {type.symbols.toLocaleString()} or ~ {type.cost} -
    • - ); - })} -
    -
  • -
  • - Schatting van de kosten: {stats?.week?.total?.cost} -
  • -
-
-
-

Deze maand

-
    -
  • - Gebruikte tekens: {numberFormat(parseInt(stats?.month?.total?.symbols))} -
  • -
  • - Berekening:{' '} - {currencyFormat(parseInt(stats?.month?.total?.symbols)) + - ' / ' + - currencyFormat(activeOrganization?.translations_monthly_limit)} -
      - {Object.keys(stats?.month?.count_per_type).map((key) => { - const type = stats?.month?.count_per_type[key]; - return ( -
    • - {key}:{' '} - {type.symbols.toLocaleString()} or ~ {type.cost} -
    • - ); - })} -
    -
  • -
  • - Schatting van de kosten: {stats?.month?.total?.cost} -
  • -
-
+ + +
diff --git a/react/src/dashboard/components/pages/organizations-translations/elements/OrganizationsTranslationsStatsColumn.tsx b/react/src/dashboard/components/pages/organizations-translations/elements/OrganizationsTranslationsStatsColumn.tsx new file mode 100644 index 000000000..8ae56a3bf --- /dev/null +++ b/react/src/dashboard/components/pages/organizations-translations/elements/OrganizationsTranslationsStatsColumn.tsx @@ -0,0 +1,40 @@ +import React from 'react'; +import Organization, { TranslationStats } from '../../../../props/models/Organization'; +import { numberFormat } from '../../../../helpers/string'; + +export default function OrganizationsTranslationsStatsColumn({ + title, + stats, + organization, +}: { + title: string; + stats: TranslationStats; + organization: Organization; +}) { + return ( +
+

{title}

+ +
+ ); +} diff --git a/react/src/webshop/components/pages/funds-request/FundRequest.tsx b/react/src/webshop/components/pages/funds-request/FundRequest.tsx index bbe0a6c0f..2a2a01eca 100644 --- a/react/src/webshop/components/pages/funds-request/FundRequest.tsx +++ b/react/src/webshop/components/pages/funds-request/FundRequest.tsx @@ -335,13 +335,13 @@ export default function FundRequest() { files: [], label: control_type === 'ui_control_checkbox' - ? item.label || 'Ik verklaar aan de bovenstaande voorwaarden te voldoen' + ? item.label || translate('fund_request.sign_up.record_checkbox.default') : '', input_value: fundService.getCriterionControlDefaultValue(item.record_type, item.operator), control_type, }; }, - [criterionTitle, fundService], + [criterionTitle, fundService, translate], ); const buildSteps = useCallback(() => { diff --git a/react/src/webshop/components/pages/vouchers-show/VouchersShow.tsx b/react/src/webshop/components/pages/vouchers-show/VouchersShow.tsx index d673aec1b..1409d02d5 100644 --- a/react/src/webshop/components/pages/vouchers-show/VouchersShow.tsx +++ b/react/src/webshop/components/pages/vouchers-show/VouchersShow.tsx @@ -757,19 +757,25 @@ export default function VouchersShow() { {voucherCard.records_title ? (

- Persoonsgegevens + {translate('voucher.physical_card.personal_date')}

{voucherCard.records_title} - - - {voucherCard.records_by_key.birth_date} - + {voucherCard.records_by_key.birth_date && ( + + + + {voucherCard.records_by_key.birth_date} + + + )}

) : (
-

Persoonsgegevens

+

+ {translate('voucher.physical_card.personal_date')} +

)} @@ -777,8 +783,9 @@ export default function VouchersShow() {
setShowRecords(!showRecords)}> - {showRecords ? 'Verberg alle details' : 'Toon alle details'} - + {showRecords + ? translate('voucher.physical_card.less_details') + : translate('voucher.physical_card.more_details')} {showRecords ? ( ) : ( diff --git a/react/src/webshop/i18n/nl/pages/voucher.mjs b/react/src/webshop/i18n/nl/pages/voucher.mjs index ff4b9be0e..e5dd55dfb 100644 --- a/react/src/webshop/i18n/nl/pages/voucher.mjs +++ b/react/src/webshop/i18n/nl/pages/voucher.mjs @@ -97,6 +97,9 @@ export default { title: 'Activeer mijn pas', alt: "Fysieke pas: '{[ title ]}'", card_number: 'Pasnummer', + personal_date: 'Persoonsgegevens', + less_details: 'Verberg alle details', + more_details: 'Toon alle details', buttons: { reactivate: 'Activeer', lost_pass: 'Ik ben mijn pas kwijt', diff --git a/react/src/webshop/i18n/translated/ar.json b/react/src/webshop/i18n/translated/ar.json index b8c9dd83f..c8de4da84 100644 --- a/react/src/webshop/i18n/translated/ar.json +++ b/react/src/webshop/i18n/translated/ar.json @@ -1962,7 +1962,10 @@ "reactivate": "تفعيل" }, "card_number": "رقم المرور", - "title": "تفعيل بطاقتي" + "title": "تفعيل بطاقتي", + "less_details": "إخفاء جميع التفاصيل", + "more_details": "إظهار كل التفاصيل", + "personal_date": "البيانات الشخصية" }, "reimbursement": { "button": "إرسال القسيمة", diff --git a/react/src/webshop/i18n/translated/de.json b/react/src/webshop/i18n/translated/de.json index 6018844d4..424872990 100644 --- a/react/src/webshop/i18n/translated/de.json +++ b/react/src/webshop/i18n/translated/de.json @@ -3291,7 +3291,10 @@ "reactivate": "Aktivieren Sie" }, "card_number": "Pass-Nummer", - "title": "Meinen Pass aktivieren" + "title": "Meinen Pass aktivieren", + "less_details": "Alle Details ausblenden", + "more_details": "Alle Details anzeigen", + "personal_date": "Persönliche Daten" }, "reimbursement": { "button": "Coupon einreichen", diff --git a/react/src/webshop/i18n/translated/en-US.json b/react/src/webshop/i18n/translated/en-US.json index d682d365e..55cf011fe 100644 --- a/react/src/webshop/i18n/translated/en-US.json +++ b/react/src/webshop/i18n/translated/en-US.json @@ -1613,7 +1613,10 @@ }, "title": "Activate my pass", "alt": "Physical pass: '{[ title ]}'", - "card_number": "Pass number" + "card_number": "Pass number", + "less_details": "Hide all details", + "more_details": "Show all details", + "personal_date": "Personal data" }, "share_voucher": { "buttons": { diff --git a/react/src/webshop/i18n/translated/fr.json b/react/src/webshop/i18n/translated/fr.json index 43494487e..7ca3d4add 100644 --- a/react/src/webshop/i18n/translated/fr.json +++ b/react/src/webshop/i18n/translated/fr.json @@ -3291,7 +3291,10 @@ "reactivate": "Activer" }, "card_number": "Numéro de passage", - "title": "Activer mon pass" + "title": "Activer mon pass", + "less_details": "Cacher tous les détails", + "more_details": "Afficher tous les détails", + "personal_date": "Données personnelles" }, "reimbursement": { "button": "Soumettre un coupon", diff --git a/react/src/webshop/i18n/translated/pl.json b/react/src/webshop/i18n/translated/pl.json index 4f15f3542..bd90b235a 100644 --- a/react/src/webshop/i18n/translated/pl.json +++ b/react/src/webshop/i18n/translated/pl.json @@ -3291,7 +3291,10 @@ "reactivate": "Aktywuj" }, "card_number": "Numer przepustki", - "title": "Aktywuj moją przepustkę" + "title": "Aktywuj moją przepustkę", + "less_details": "Ukryj wszystkie szczegóły", + "more_details": "Pokaż wszystkie szczegóły", + "personal_date": "Dane osobowe" }, "reimbursement": { "button": "Prześlij kupon", diff --git a/react/src/webshop/i18n/translated/ru.json b/react/src/webshop/i18n/translated/ru.json index c1f4e4168..0f707ca04 100644 --- a/react/src/webshop/i18n/translated/ru.json +++ b/react/src/webshop/i18n/translated/ru.json @@ -3291,7 +3291,10 @@ "reactivate": "Активируйте" }, "card_number": "Номер пропуска", - "title": "Активируйте мой пропуск" + "title": "Активируйте мой пропуск", + "less_details": "Скрыть все детали", + "more_details": "Показать все детали", + "personal_date": "Персональные данные" }, "reimbursement": { "button": "Отправить купон", diff --git a/react/src/webshop/i18n/translated/tr.json b/react/src/webshop/i18n/translated/tr.json index cdfecf421..81a5ee191 100644 --- a/react/src/webshop/i18n/translated/tr.json +++ b/react/src/webshop/i18n/translated/tr.json @@ -1962,7 +1962,10 @@ "reactivate": "Etkinleştir" }, "card_number": "Geçiş numarası", - "title": "Geçiş kartımı etkinleştir" + "title": "Geçiş kartımı etkinleştir", + "less_details": "Tüm detayları gizle", + "more_details": "Tüm detayları göster", + "personal_date": "Kişisel veriler" }, "reimbursement": { "button": "Kupon gönder", diff --git a/react/src/webshop/i18n/translated/uk.json b/react/src/webshop/i18n/translated/uk.json index 7bcc02b0f..8e2e44892 100644 --- a/react/src/webshop/i18n/translated/uk.json +++ b/react/src/webshop/i18n/translated/uk.json @@ -3291,7 +3291,10 @@ "reactivate": "Активувати" }, "card_number": "Номер пропуску", - "title": "Активуйте мій пропуск" + "title": "Активуйте мій пропуск", + "less_details": "Приховати всі деталі", + "more_details": "Показати всі деталі", + "personal_date": "Персональні дані" }, "reimbursement": { "button": "Надіслати купон", diff --git a/translations/cache/cache.json b/translations/cache/cache.json index b1a3a8f27..24fb16d10 100644 --- a/translations/cache/cache.json +++ b/translations/cache/cache.json @@ -8627,6 +8627,18 @@ "voucher.physical_card.card_number", "Pasnummer" ], + [ + "voucher.physical_card.less_details", + "Verberg alle details" + ], + [ + "voucher.physical_card.more_details", + "Toon alle details" + ], + [ + "voucher.physical_card.personal_date", + "Persoonsgegevens" + ], [ "voucher.physical_card.title", "Activeer mijn pas" From dfc22cefeaebd1d92ac14cecb56ff869c744a76b Mon Sep 17 00:00:00 2001 From: dev-rminds Date: Wed, 12 Feb 2025 15:37:44 +0200 Subject: [PATCH 03/24] fix reservation extra ammount translations --- .../modal-product-reserve/ModalProductReserve.tsx | 12 ++++++------ react/src/webshop/i18n/nl/pages/reservation.mjs | 2 +- react/src/webshop/i18n/translated/ar.json | 4 ++-- react/src/webshop/i18n/translated/de.json | 4 ++-- react/src/webshop/i18n/translated/en-US.json | 4 ++-- react/src/webshop/i18n/translated/fr.json | 4 ++-- react/src/webshop/i18n/translated/pl.json | 4 ++-- react/src/webshop/i18n/translated/ru.json | 4 ++-- react/src/webshop/i18n/translated/tr.json | 4 ++-- react/src/webshop/i18n/translated/uk.json | 4 ++-- translations/cache/cache.json | 8 ++++---- 11 files changed, 27 insertions(+), 27 deletions(-) diff --git a/react/src/webshop/components/modals/modal-product-reserve/ModalProductReserve.tsx b/react/src/webshop/components/modals/modal-product-reserve/ModalProductReserve.tsx index f44a02708..2804dd4ea 100644 --- a/react/src/webshop/components/modals/modal-product-reserve/ModalProductReserve.tsx +++ b/react/src/webshop/components/modals/modal-product-reserve/ModalProductReserve.tsx @@ -1359,20 +1359,20 @@ export default function ModalProductReserve({
- {translate('product_reserve_extra_payment.offer_cost')} + {translate('modal_reserve_product.extra_payment.offer_cost')}
{product.price_locale}
- {translate('product_reserve_extra_payment.remaining_credit')} + {translate('modal_reserve_product.extra_payment.remaining_credit')}
{voucher.amount_locale}
- {translate('product_reserve_extra_payment.extra_payment')} + {translate('modal_reserve_product.extra_payment.extra_payment')}
{currencyFormat(voucher.amount_extra)}
@@ -1382,7 +1382,7 @@ export default function ModalProductReserve({
- {translate('product_reserve_extra_payment.external_link')} + {translate('modal_reserve_product.extra_payment.external_link')}
@@ -1419,8 +1419,8 @@ export default function ModalProductReserve({ data-dusk="btnConfirmSubmit"> {submitting &&
} {submitting - ? translate('modal_reserve_product.buttons.buttons.processing') - : translate('modal_reserve_product.buttons.buttons.submit')} + ? translate('modal_reserve_product.buttons.processing') + : translate('modal_reserve_product.buttons.submit')} )}
diff --git a/react/src/webshop/i18n/nl/pages/reservation.mjs b/react/src/webshop/i18n/nl/pages/reservation.mjs index 01aa50143..16fc23b80 100644 --- a/react/src/webshop/i18n/nl/pages/reservation.mjs +++ b/react/src/webshop/i18n/nl/pages/reservation.mjs @@ -38,7 +38,7 @@ export default { status: 'Status', refunded: 'Terugbetaald', date: 'Datum', - mount: 'Zelf bijbetaal', + amount: 'Zelf bijbetaal', method: 'Methode', }, extra_amount_refund: { diff --git a/react/src/webshop/i18n/translated/ar.json b/react/src/webshop/i18n/translated/ar.json index c8de4da84..a7dce498a 100644 --- a/react/src/webshop/i18n/translated/ar.json +++ b/react/src/webshop/i18n/translated/ar.json @@ -2628,9 +2628,9 @@ "extra_amount": { "date": "التاريخ", "method": "الطريقة", - "mount": "الدفع الذاتي", "refunded": "مستردة", - "status": "الحالة" + "status": "الحالة", + "amount": "الدفع الذاتي" }, "labels": { "cancel": "إلغاء", diff --git a/react/src/webshop/i18n/translated/de.json b/react/src/webshop/i18n/translated/de.json index 424872990..4084d9972 100644 --- a/react/src/webshop/i18n/translated/de.json +++ b/react/src/webshop/i18n/translated/de.json @@ -2676,9 +2676,9 @@ "extra_amount": { "date": "Datum", "method": "Methode", - "mount": "Selbstzahler", "refunded": "Erstattet", - "status": "Status" + "status": "Status", + "amount": "Selbstzahler" }, "labels": { "cancel": "Abbrechen", diff --git a/react/src/webshop/i18n/translated/en-US.json b/react/src/webshop/i18n/translated/en-US.json index 55cf011fe..cb4264da5 100644 --- a/react/src/webshop/i18n/translated/en-US.json +++ b/react/src/webshop/i18n/translated/en-US.json @@ -2761,9 +2761,9 @@ "extra_amount": { "date": "Date", "method": "Method", - "mount": "Self additional payment", "refunded": "Refunded", - "status": "Status" + "status": "Status", + "amount": "Self additional payment" }, "title": "Top-up data" }, diff --git a/react/src/webshop/i18n/translated/fr.json b/react/src/webshop/i18n/translated/fr.json index 7ca3d4add..c942e3569 100644 --- a/react/src/webshop/i18n/translated/fr.json +++ b/react/src/webshop/i18n/translated/fr.json @@ -2676,9 +2676,9 @@ "extra_amount": { "date": "Date", "method": "Méthode", - "mount": "Autofinancement", "refunded": "Remboursé", - "status": "Statut" + "status": "Statut", + "amount": "Autofinancement" }, "labels": { "cancel": "Annuler", diff --git a/react/src/webshop/i18n/translated/pl.json b/react/src/webshop/i18n/translated/pl.json index bd90b235a..22cd79a43 100644 --- a/react/src/webshop/i18n/translated/pl.json +++ b/react/src/webshop/i18n/translated/pl.json @@ -2676,9 +2676,9 @@ "extra_amount": { "date": "Data", "method": "Metoda", - "mount": "Płatność własna", "refunded": "Zwrócone", - "status": "Status" + "status": "Status", + "amount": "Płatność własna" }, "labels": { "cancel": "Anuluj", diff --git a/react/src/webshop/i18n/translated/ru.json b/react/src/webshop/i18n/translated/ru.json index 0f707ca04..c067343f9 100644 --- a/react/src/webshop/i18n/translated/ru.json +++ b/react/src/webshop/i18n/translated/ru.json @@ -2676,9 +2676,9 @@ "extra_amount": { "date": "Дата", "method": "Метод", - "mount": "Самостоятельная оплата", "refunded": "Возмещено", - "status": "Статус" + "status": "Статус", + "amount": "Самостоятельная оплата" }, "labels": { "cancel": "Отмена", diff --git a/react/src/webshop/i18n/translated/tr.json b/react/src/webshop/i18n/translated/tr.json index 81a5ee191..4daf280af 100644 --- a/react/src/webshop/i18n/translated/tr.json +++ b/react/src/webshop/i18n/translated/tr.json @@ -2628,9 +2628,9 @@ "extra_amount": { "date": "Tarih", "method": "Yöntem", - "mount": "Kendi kendine ödeme", "refunded": "İade Edildi", - "status": "Durum" + "status": "Durum", + "amount": "Kendi kendine ödeme" }, "labels": { "cancel": "İptal", diff --git a/react/src/webshop/i18n/translated/uk.json b/react/src/webshop/i18n/translated/uk.json index 8e2e44892..2cdbf377b 100644 --- a/react/src/webshop/i18n/translated/uk.json +++ b/react/src/webshop/i18n/translated/uk.json @@ -2676,9 +2676,9 @@ "extra_amount": { "date": "Дата", "method": "Метод", - "mount": "Самостійна оплата", "refunded": "Відшкодовано", - "status": "Статус" + "status": "Статус", + "amount": "Самостійна оплата" }, "labels": { "cancel": "Скасувати", diff --git a/translations/cache/cache.json b/translations/cache/cache.json index 24fb16d10..653cd9f4d 100644 --- a/translations/cache/cache.json +++ b/translations/cache/cache.json @@ -7207,6 +7207,10 @@ "reservation.extra_amount_refund.title", "Details van terugbetaling" ], + [ + "reservation.extra_amount.amount", + "Zelf bijbetaal" + ], [ "reservation.extra_amount.date", "Datum" @@ -7215,10 +7219,6 @@ "reservation.extra_amount.method", "Methode" ], - [ - "reservation.extra_amount.mount", - "Zelf bijbetaal" - ], [ "reservation.extra_amount.refunded", "Terugbetaald" From 48d4a7049f8889f7fd139dd38190cd7dfa18436b Mon Sep 17 00:00:00 2001 From: Yaroslav Kosterin Date: Wed, 12 Feb 2025 20:07:43 +0200 Subject: [PATCH 04/24] update language style on mobile --- .../sections/blocks/block-mobile-menu.scss | 45 ++++++++++++++ .../top-navbar/mobile/TopNavbarMobile.tsx | 5 -- .../top-navbar/mobile/TopNavbarMobileMenu.tsx | 4 ++ .../webshop/hooks/useMobileLangSelector.tsx | 59 +++++++++++++++++++ .../src/webshop/i18n/nl/layout/top_navbar.mjs | 3 + 5 files changed, 111 insertions(+), 5 deletions(-) create mode 100644 react/src/webshop/hooks/useMobileLangSelector.tsx diff --git a/react/assets/forus-webshop/scss/_common/sections/blocks/block-mobile-menu.scss b/react/assets/forus-webshop/scss/_common/sections/blocks/block-mobile-menu.scss index e5f845cd2..16bf99abf 100644 --- a/react/assets/forus-webshop/scss/_common/sections/blocks/block-mobile-menu.scss +++ b/react/assets/forus-webshop/scss/_common/sections/blocks/block-mobile-menu.scss @@ -31,6 +31,33 @@ $footer_base_font: 'Open Sans', arial, sans-serif; margin-right: 5px; color: #979797; } + + &.mobile-menu-language-group-header { + background: #FFFFFF; + display: flex; + flex-direction: row; + gap: 5px; + align-items: center; + justify-content: flex-start; + + .mdi { + margin: 0; + } + + .mobile-menu-language-group-header-prefix { + color: #646464; + } + + .mobile-menu-language-group-header-name { + flex: 1 1 auto; + } + + .mobile-menu-language-group-header-icon { + .mdi { + color: #282B39; + } + } + } } .mobile-menu-items { @@ -102,6 +129,24 @@ $footer_base_font: 'Open Sans', arial, sans-serif; color: #282B39; } } + + &.mobile-menu-item-language { + display: flex; + flex-direction: row; + gap: 5px; + align-items: center; + justify-content: flex-start; + + .mobile-menu-item-language-separator { + width: 1px; + height: 8px; + background: var(--border-color); + } + + .mobile-menu-item-language-name { + flex: 1 1 auto; + } + } &:hover { color: var(--color-primary); diff --git a/react/src/webshop/components/elements/top-navbar/mobile/TopNavbarMobile.tsx b/react/src/webshop/components/elements/top-navbar/mobile/TopNavbarMobile.tsx index 88bf50996..503fe9e8a 100644 --- a/react/src/webshop/components/elements/top-navbar/mobile/TopNavbarMobile.tsx +++ b/react/src/webshop/components/elements/top-navbar/mobile/TopNavbarMobile.tsx @@ -6,7 +6,6 @@ import StateNavLink from '../../../../modules/state_router/StateNavLink'; import useAssetUrl from '../../../../hooks/useAssetUrl'; import { useStateRoutes } from '../../../../modules/state_router/Router'; import { clickOnKeyEnter } from '../../../../../dashboard/helpers/wcag'; -import useLangSelector from '../../../../hooks/useLangSelector'; import classNames from 'classnames'; import useAuthIdentity from '../../../../hooks/useAuthIdentity'; import TopNavbarMobileMenu from './TopNavbarMobileMenu'; @@ -50,8 +49,6 @@ export const TopNavbarMobile = () => { [setMobileMenuOpened, setShowSearchBox], ); - const langSelector = useLangSelector(); - return (
{appConfigs?.announcements && ( @@ -90,8 +87,6 @@ export const TopNavbarMobile = () => { /> -
{langSelector}
- {envData.config?.flags?.genericSearch ? (
+ {langSelector} +
{translate('top_navbar.main_menu')}
{menuItems.map((menuItem) => ( diff --git a/react/src/webshop/hooks/useMobileLangSelector.tsx b/react/src/webshop/hooks/useMobileLangSelector.tsx new file mode 100644 index 000000000..7cd30c9f5 --- /dev/null +++ b/react/src/webshop/hooks/useMobileLangSelector.tsx @@ -0,0 +1,59 @@ +import React, { Fragment, useMemo, useState } from 'react'; +import useMainContext from './useMainContext'; +import { clickOnKeyEnter } from '../../dashboard/helpers/wcag'; +import useTranslate from '../../dashboard/hooks/useTranslate'; + +export default function useMobileLangSelector() { + const { language, languages, changeLanguage } = useMainContext(); + const translate = useTranslate(); + const [showOptions, setShowOptions] = useState(false); + + return useMemo(() => { + if (languages?.length <= 1) { + return null; + } + + const languageResource = languages?.filter((lang) => lang.locale === language)?.[0]; + + return ( + +
setShowOptions(!showOptions)}> + +
+ {translate('top_navbar.language.prefix')} +
+
+ {languageResource.locale.toUpperCase()} - {languageResource.name} +
+ + + +
+ + {showOptions && ( +
+ {languages.map((lang) => ( +
changeLanguage(lang.locale)}> + {lang.locale.toUpperCase()} +
+
{lang.name}
+ {languageResource.locale === lang.locale && ( +
+ )} +
+ ))} +
+ )} + + ); + }, [changeLanguage, language, languages, showOptions, translate]); +} diff --git a/react/src/webshop/i18n/nl/layout/top_navbar.mjs b/react/src/webshop/i18n/nl/layout/top_navbar.mjs index e1cb3b996..44eb33e78 100644 --- a/react/src/webshop/i18n/nl/layout/top_navbar.mjs +++ b/react/src/webshop/i18n/nl/layout/top_navbar.mjs @@ -9,6 +9,9 @@ export default { midden_drenthe: 'Tegoed activeren', berg_en_dal: 'Tegoed activeren', }, + language: { + prefix: 'Uw taal:', + }, items: { home: 'Home', funds: 'Activeren', From 881e0e75a04c4cadd7d4bc73103e5aca09e7f7b5 Mon Sep 17 00:00:00 2001 From: dev-rminds Date: Thu, 13 Feb 2025 16:32:10 +0200 Subject: [PATCH 05/24] add more records to identity profiles --- .../pages/identities/Identities.tsx | 45 +++++-- .../identitities-show/IdentitiesShow.tsx | 112 +++++++++++++++--- .../IdentityRecordKeyValueWithHistory.tsx | 6 +- .../modals/ModalEditProfileRecords.tsx | 40 +++++-- .../src/dashboard/i18n/nl/pages/identities.js | 19 +++ .../props/models/Sponsor/SponsorIdentity.tsx | 10 +- .../services/SponsorIdentitesService.ts | 3 + .../components/pages/profile/Profile.tsx | 52 ++++++++ .../cards/IdentityContactInformationCard.tsx | 28 ++++- react/src/webshop/i18n/nl/pages/profile.mjs | 5 + react/src/webshop/i18n/translated/ar.json | 11 +- react/src/webshop/i18n/translated/de.json | 11 +- react/src/webshop/i18n/translated/en-US.json | 11 +- react/src/webshop/i18n/translated/fr.json | 11 +- react/src/webshop/i18n/translated/pl.json | 11 +- react/src/webshop/i18n/translated/ru.json | 11 +- react/src/webshop/i18n/translated/tr.json | 11 +- react/src/webshop/i18n/translated/uk.json | 11 +- translations/cache/cache.json | 14 ++- 19 files changed, 358 insertions(+), 64 deletions(-) diff --git a/react/src/dashboard/components/pages/identities/Identities.tsx b/react/src/dashboard/components/pages/identities/Identities.tsx index f5ee7a126..b56ef086c 100644 --- a/react/src/dashboard/components/pages/identities/Identities.tsx +++ b/react/src/dashboard/components/pages/identities/Identities.tsx @@ -201,10 +201,23 @@ export default function Identities() { className={'tr-clickable'} customElement={'tr'}> {identity.id} - {identity?.records?.given_name?.[0]?.value || } - {identity?.records?.family_name?.[0]?.value || } + + {identity?.records?.given_name?.[0]?.value_locale || ( + + )} + + + {identity?.records?.family_name?.[0]?.value_locale || ( + + )} + {identity.email || } {identity.bsn || } + + {identity?.records?.client_number?.[0]?.value_locale || ( + + )} + - {identity?.records?.city?.[0]?.value || } - {identity?.records?.street?.[0]?.value || } + {identity?.records?.city?.[0]?.value_locale || } + + {identity?.records?.street?.[0]?.value_locale || } + - {identity?.records?.house_number?.[0]?.value || } + {identity?.records?.house_number?.[0]?.value_locale || ( + + )} + + + {identity?.records?.house_number_addition?.[0]?.value_locale || ( + + )} + + + {identity?.records?.postal_code?.[0]?.value_locale || ( + + )} + + + {identity?.records?.municipality_name?.[0]?.value_locale || ( + + )} - {identity?.records?.house_number_addition?.[0]?.value || ( + {identity?.records?.neighborhood_name?.[0]?.value_locale || ( )} - {identity?.records?.postal_code?.[0]?.value || } recordTypeKyes.includes(item.key))} + recordTypes={recordTypeKyes?.map((filter) => recordTypes?.find((item) => filter === item.key))} values={recordsByKey} organization={activeOrganization} bodyOverflowVisible={bodyOverflowVisible} @@ -129,12 +129,15 @@ export default function IdentitiesShow() { text: 'Bewerken', icon: 'pencil-outline', onClick: () => - editProfileRecords( - 'Wijzig persoonsgegevens', - ['given_name', 'family_name', 'birth_date'], - [], - true, - ), + editProfileRecords('Wijzig persoonsgegevens', [ + 'given_name', + 'family_name', + 'birth_date', + 'age', + 'gender', + 'marital_status', + 'client_number', + ]), }, ]}> , }, - { label: 'BSN', value: identity?.bsn }, + { + label: recordTypesByKey?.age?.name, + value: , + }, + { + label: recordTypesByKey?.gender?.name, + value: , + }, + { + label: recordTypesByKey?.marital_status?.name, + value: , + }, + { + label: 'BSN', + value: identity?.bsn, + }, + { + label: recordTypesByKey?.client_number?.name, + value: , + }, + ]} + /> + + + + editProfileRecords( + 'Wijzig huishouden', + ['house_composition', 'living_arrangement'], + [], + true, + ), + }, + ]}> + , + }, + { + label: recordTypesByKey?.living_arrangement?.name, + value: , + }, ]} /> @@ -177,15 +229,7 @@ export default function IdentitiesShow() { onClick: () => { editProfileRecords( 'Wijzig contactgegevens', - [ - 'telephone', - 'mobile', - 'city', - 'street', - 'house_number', - 'house_number_addition', - 'postal_code', - ], + ['telephone', 'mobile'], [ { label: 'Hoofd e-mailadres', value: identity.email, key: 'email' }, ...otherEmails.map((email, index) => ({ @@ -214,6 +258,32 @@ export default function IdentitiesShow() { label: recordTypesByKey?.mobile?.name, value: , }, + ]} + /> + + + { + editProfileRecords('Wijzig adresgegevens', [ + 'city', + 'street', + 'house_number', + 'house_number_addition', + 'postal_code', + 'neighborhood_name', + 'municipality_name', + ]); + }, + }, + ]}> + , @@ -236,6 +306,14 @@ export default function IdentitiesShow() { label: recordTypesByKey?.postal_code?.name, value: , }, + { + label: recordTypesByKey?.neighborhood_name?.name, + value: , + }, + { + label: recordTypesByKey?.municipality_name?.name, + value: , + }, ]} /> diff --git a/react/src/dashboard/components/pages/identitities-show/elements/IdentityRecordKeyValueWithHistory.tsx b/react/src/dashboard/components/pages/identitities-show/elements/IdentityRecordKeyValueWithHistory.tsx index 590b14f52..fa0d03279 100644 --- a/react/src/dashboard/components/pages/identitities-show/elements/IdentityRecordKeyValueWithHistory.tsx +++ b/react/src/dashboard/components/pages/identitities-show/elements/IdentityRecordKeyValueWithHistory.tsx @@ -9,7 +9,7 @@ export default function IdentityRecordKeyValueWithHistory({ records }: { records return (
- {records?.[0]?.value || } + {records?.[0]?.value_locale || } {records?.length > 1 && ( setShow(!show)}> {`${records?.length} keer bewerkt`} @@ -27,9 +27,9 @@ export default function IdentityRecordKeyValueWithHistory({ records }: { records {item.employee ? item.employee?.email || `Medewerker[${item.employee?.id}]` : 'User'} {' '} {`${item.created_at_locale} • van `} - {`'${records[index + 1]?.value || ''}'`} + {`'${records[index + 1]?.value_locale || ''}'`} {' naar '} - {`'${item.value || ''}'`} + {`'${item.value_locale || ''}'`}
))}
diff --git a/react/src/dashboard/components/pages/identitities-show/modals/ModalEditProfileRecords.tsx b/react/src/dashboard/components/pages/identitities-show/modals/ModalEditProfileRecords.tsx index 6a0df3baf..ca41f4686 100644 --- a/react/src/dashboard/components/pages/identitities-show/modals/ModalEditProfileRecords.tsx +++ b/react/src/dashboard/components/pages/identitities-show/modals/ModalEditProfileRecords.tsx @@ -14,6 +14,7 @@ import RecordType from '../../../../props/models/RecordType'; import DatePickerControl from '../../../elements/forms/controls/DatePickerControl'; import { dateFormat, dateParse } from '../../../../helpers/dates'; import useTranslate from '../../../../hooks/useTranslate'; +import SelectControl from '../../../elements/select-control/SelectControl'; export default function ModalEditProfileRecords({ modal, @@ -39,11 +40,18 @@ export default function ModalEditProfileRecords({ const translate = useTranslate(); const setProgress = useSetProgress(); const sponsorIdentitiesService = useSponsorIdentitiesService(); + const types = recordTypes.map((type) => type.key.toString()); const pushApiError = usePushApiError(); const form = useFormBuilder<{ [key in ProfileRecordTypes]: string }>( - Object.keys(values).reduce((list, key) => ({ ...list, [key]: values[key] }), {}) as { + Object.keys(values).reduce((list, key) => { + if (types.includes(key)) { + return { ...list, [key]: values[key] }; + } + + return list; + }, {}) as { [key in ProfileRecordTypes]: string; }, (values) => { @@ -120,14 +128,28 @@ export default function ModalEditProfileRecords({ onChange={(date) => form.update({ [recordType.key]: dateFormat(date) })} /> ) : ( - form.update({ [recordType.key]: e.target.value })} - /> + + {recordType?.type === 'select' ? ( + form.update({ [recordType.key]: value })} + /> + ) : ( + form.update({ [recordType.key]: e.target.value })} + /> + )} + )} )} diff --git a/react/src/dashboard/i18n/nl/pages/identities.js b/react/src/dashboard/i18n/nl/pages/identities.js index 82c3ab1a7..563dc7d20 100644 --- a/react/src/dashboard/i18n/nl/pages/identities.js +++ b/react/src/dashboard/i18n/nl/pages/identities.js @@ -8,6 +8,7 @@ export default { family_name: 'Achternaam', email: 'E-mail adres', bsn: 'BSN', + client_number: 'Klantnummer', birth_date: 'Geboorte datum', last_activity: 'Laatste inlog', postal_code: 'Postcode', @@ -16,6 +17,8 @@ export default { city: 'Woonplaats', house_number: 'Huisnummer', house_number_addition: 'Huisnummer toevoeging', + municipality_name: 'Gemeentenaam', + neighborhood_name: 'Woonwijk', street: 'Straatnaam', created_at: 'Gemaakt op', actions: 'Acties', @@ -28,6 +31,8 @@ export default { 'Dit veld bevat de achternaam van de persoon. Samen met de voornaam zorgt dit voor een volledige naamweergave.', email: 'Dit veld bevat het e-mailadres van de persoon. Het wordt gebruikt voor communicatie en meldingen binnen het platform en dient tevens als inlogmethode.', bsn: 'Dit staat voor "Burger Service Nummer". Het is een uniek identificatienummer dat wordt gebruikt door de overheid om personen te identificeren in verschillende administratieve processen.', + client_number: + 'Uniek nummer toegekend door het systeem van de organisatie, zodat een relatie kan worden geïdentificeerd. Ook wel Persoon-organisatierelatie ID (UID) genoemd.', birth_date: 'Dit veld bevat de geboortedatum van de persoon. Het is belangrijk voor persoonlijke identificatie, ondersteuning bij het gebruik, en om per regio inzicht te krijgen in de aanvraag en het gebruik van regelingen.', last_activity: @@ -41,6 +46,9 @@ export default { house_number: 'Een numerieke aanduiding die door de gemeente aan een object is toegekend (volgens NEN 5825:2002).', house_number_addition: 'Extra toevoegingen aan het huisnummer, zoals toegekend door de gemeente.', + municipality_name: 'De naam van de wijk, zoals die door het CBS wordt gebruikt.', + neighborhood_name: + 'De samenstelling van het huishouden, inclusief het aantal en de relaties van personen die samenwonen.', street: 'De officiële, door de gemeente vastgestelde naam van een straat.', created_at: 'Gemaakt op', }, @@ -59,6 +67,8 @@ export default { }, }, record_info: { + client_number: + 'Uniek nummer toegekend door het systeem van de organisatie, zodat een relatie kan worden geïdentificeerd. Ook wel Persoon-organisatierelatie ID (UID) genoemd.', given_name: 'De samenvoeging van alle exemplaren van voornaam van de persoon.', family_name: 'De familienaam of geslachtsnaam die aangeeft dat de persoon tot een specifieke familie behoort.', email: 'Het adres waaronder de persoon per elektronische post bereikbaar is. Dit is het hoofd e-mailadres van de persoon en wordt gebruikt om in te loggen op de website en systeemberichten te ontvangen.', @@ -80,6 +90,15 @@ export default { house_number: 'De numerieke aanduiding zoals deze door de gemeente aan het object is toegekend.', house_number_addition: 'De huisnummertoevoeging zoals deze door de gemeente aan het object is toegekend.', street: 'De officiële door de gemeente vastgestelde naam van een straat waar de persoon woonachtig is.', + house_composition: 'house_composition', + gender: 'Een aanduiding die aangeeft of de ingeschrevene een man of vrouw is, of dat het geslacht onbekend is.', + age: 'De leeftijd van de persoon in jaren.', + municipality_name: 'De naam van de wijk, zoals die door het CBS wordt gebruikt.', + neighborhood_name: + 'De samenstelling van het huishouden, inclusief het aantal en de relaties van personen die samenwonen.', + living_arrangement: + 'De manier waarop de persoon samenleeft binnen een huishouden, zoals alleenstaanden, gezinnen, of woongroepen.', + marital_status: 'De rechtstoestand van een persoon ten aanzien van huwelijk of geregistreerd partnerschap.', }, buttons: { clear_filter: 'Wis filter', diff --git a/react/src/dashboard/props/models/Sponsor/SponsorIdentity.tsx b/react/src/dashboard/props/models/Sponsor/SponsorIdentity.tsx index 823c6b7b0..b9dd58574 100644 --- a/react/src/dashboard/props/models/Sponsor/SponsorIdentity.tsx +++ b/react/src/dashboard/props/models/Sponsor/SponsorIdentity.tsx @@ -45,7 +45,15 @@ export type ProfileRecordTypes = | 'street' | 'house_number' | 'house_number_addition' - | 'postal_code'; + | 'client_number' + | 'postal_code' + | 'house_composition' + | 'gender' + | 'age' + | 'neighborhood_name' + | 'living_arrangement' + | 'marital_status' + | 'municipality_name'; export type ProfileRecords = { [key in ProfileRecordTypes]: RecordType }; export type ProfileRecordValues = { [key in ProfileRecordTypes]: string }; diff --git a/react/src/dashboard/services/SponsorIdentitesService.ts b/react/src/dashboard/services/SponsorIdentitesService.ts index db79eea4c..e996ab2a1 100644 --- a/react/src/dashboard/services/SponsorIdentitesService.ts +++ b/react/src/dashboard/services/SponsorIdentitesService.ts @@ -78,6 +78,7 @@ export class SponsorIdentitiesService item); return list.map((key) => ({ diff --git a/react/src/webshop/components/pages/profile/Profile.tsx b/react/src/webshop/components/pages/profile/Profile.tsx index 596727e7b..59f717b09 100644 --- a/react/src/webshop/components/pages/profile/Profile.tsx +++ b/react/src/webshop/components/pages/profile/Profile.tsx @@ -88,7 +88,59 @@ export default function Profile() { ), }, + { + label: recordTypesByKey?.age?.name, + value: , + }, + { + label: recordTypesByKey?.gender?.name, + value: , + }, + { + label: recordTypesByKey?.marital_status?.name, + value: ( + + ), + }, { label: translate('profile.personal.bsn'), value: profile?.bsn }, + { + label: recordTypesByKey?.client_number?.name, + value: ( + + ), + }, + ]} + /> +
+
+ +
+
+

{translate('profile.household.title')}

+
+
+ + ), + }, + { + label: recordTypesByKey?.living_arrangement?.name, + value: ( + + ), + }, ]} />
diff --git a/react/src/webshop/components/pages/profile/cards/IdentityContactInformationCard.tsx b/react/src/webshop/components/pages/profile/cards/IdentityContactInformationCard.tsx index 1167e97df..8a8dedbe5 100644 --- a/react/src/webshop/components/pages/profile/cards/IdentityContactInformationCard.tsx +++ b/react/src/webshop/components/pages/profile/cards/IdentityContactInformationCard.tsx @@ -143,6 +143,22 @@ export default function IdentityContactInformationCard({
))} +
+ + +
+
+ + +
@@ -223,8 +239,16 @@ export default function IdentityContactInformationCard({ ), }, { - label: recordTypesByKey?.postal_code?.name, - value: , + label: recordTypesByKey?.neighborhood_name?.name, + value: ( + + ), + }, + { + label: recordTypesByKey?.municipality_name?.name, + value: ( + + ), }, ]} /> diff --git a/react/src/webshop/i18n/nl/pages/profile.mjs b/react/src/webshop/i18n/nl/pages/profile.mjs index 7c1f6633e..bda46a6b9 100644 --- a/react/src/webshop/i18n/nl/pages/profile.mjs +++ b/react/src/webshop/i18n/nl/pages/profile.mjs @@ -15,6 +15,11 @@ export default { active_since: 'Actief sinds', last_login: 'Laatste inlog', }, + household: { + title: 'Huishouden', + house_composition: 'Gezinssamenstelling', + living_arrangement: 'Leefvorm', + }, contacts: { title: 'Contactgegevens aanpassen', primary_email: 'Hoofd e-mailadres', diff --git a/react/src/webshop/i18n/translated/ar.json b/react/src/webshop/i18n/translated/ar.json index b8c9dd83f..08d506e2d 100644 --- a/react/src/webshop/i18n/translated/ar.json +++ b/react/src/webshop/i18n/translated/ar.json @@ -2508,7 +2508,12 @@ "bsn": "BSN", "title": "البيانات الشخصية" }, - "title": "البيانات" + "title": "البيانات", + "household": { + "house_composition": "تكوين الأسرة", + "living_arrangement": "الشكل الحي", + "title": "الأسرة المعيشية" + } }, "reimbursements": { "breadcrumbs": { @@ -3016,7 +3021,6 @@ }, "description_formal": "سوف تستخدم رصيدك {{fund}}
رصيدك لهذا الحجز هل تقوم بالحجز؟ إذن أنت توافق على مشاركة بياناتك الشخصية مع مقدم الخدمة.", "description_formal_time": "{{ days_to_cancel }} لا يزال بإمكانك إلغاء الحجز في غضون أيام بعد تأكيد الحجز.", - "description_informal": "هل تستخدم رصيدك {{fund}}
رصيدك لهذا الحجز هل تقوم بالحجز؟ إذن أنت توافق على مشاركة بياناتك الشخصية مع مقدم الخدمة.", "description_informal_time": "{{ days_to_cancel }} لا يزال بإمكانك إلغاء الحجز في غضون أيام بعد تأكيد الحجز.", "email_setup_description": "أضف عنوان بريدك الإلكتروني لتلقي الرسائل.", "email_setup_title": "إضافة عنوان البريد الإلكتروني", @@ -3081,7 +3085,8 @@ "description": "تم إجراء الحجز الخاص بك.", "title": "لقد نجح الأمر!" }, - "voucher_image_alt": "الائتمان" + "voucher_image_alt": "الائتمان", + "description_informal": "أنت تستخدم رصيدك {{fund}}
رصيدك لهذا الحجز هل تقوم بالحجز؟ إذن أنت توافق على مشاركة بياناتك الشخصية مع مقدم الخدمة." }, "modal": { "buttons": { diff --git a/react/src/webshop/i18n/translated/de.json b/react/src/webshop/i18n/translated/de.json index 6018844d4..432a464b0 100644 --- a/react/src/webshop/i18n/translated/de.json +++ b/react/src/webshop/i18n/translated/de.json @@ -1628,7 +1628,6 @@ }, "description_formal": "Sie verwenden Ihr {{fund}}
Guthaben für diese Reservierung verwenden. Buchen Sie eine Reservierung? Dann stimmen Sie zu, dass wir Ihre persönlichen Daten mit dem Anbieter teilen.", "description_formal_time": "{{ days_to_cancel }} Sie können die Reservierung noch innerhalb weniger Tage nach der Bestätigung stornieren.", - "description_informal": "Sie verwenden Ihr {{fund}}
Guthaben für diese Reservierung. Nehmen Sie eine Reservierung vor? Dann stimmen Sie zu, dass wir Ihre persönlichen Daten mit dem Anbieter teilen.", "description_informal_time": "{{ days_to_cancel }} Sie können die Reservierung noch innerhalb weniger Tage nach der Bestätigung stornieren.", "email_setup_description": "Fügen Sie Ihre E-Mail-Adresse hinzu, um Nachrichten zu erhalten.", "email_setup_title": "E-Mail Adresse hinzufügen", @@ -1693,7 +1692,8 @@ "description": "Ihre Reservierung wurde vorgenommen.", "title": "Es hat geklappt!" }, - "voucher_image_alt": "Kredit" + "voucher_image_alt": "Kredit", + "description_informal": "Sie verwenden Ihr {{fund}}
Guthaben für diese Reservierung. Sie machen eine Reservierung? Dann sind Sie damit einverstanden, dass wir Ihre persönlichen Daten mit dem Anbieter teilen." }, "modal": { "buttons": { @@ -2372,7 +2372,12 @@ "bsn": "BSN", "title": "Persönliche Daten" }, - "title": "Daten" + "title": "Daten", + "household": { + "house_composition": "Zusammensetzung der Familie", + "living_arrangement": "Lebendige Form", + "title": "Haushalt" + } }, "provider_sign_up": { "breadcrumbs": { diff --git a/react/src/webshop/i18n/translated/en-US.json b/react/src/webshop/i18n/translated/en-US.json index d682d365e..7bfbe7cb2 100644 --- a/react/src/webshop/i18n/translated/en-US.json +++ b/react/src/webshop/i18n/translated/en-US.json @@ -2213,7 +2213,12 @@ "bsn": "BSN", "title": "Personal data" }, - "title": "Data" + "title": "Data", + "household": { + "house_composition": "Family composition", + "living_arrangement": "Living Form", + "title": "Household" + } }, "reimbursements": { "breadcrumbs": { @@ -3340,7 +3345,6 @@ }, "description_formal": "You use your {{fund}} credit for this reservation.
Are you placing a reservation? Then you agree that we share your personal information with the provider.", "description_formal_time": "You can still cancel the reservation within {{ days_to_cancel }} days after confirmation. ", - "description_informal": "You use your {{fund}} credit for this reservation.
Are you placing a reservation? Then you agree that we share your personal data with the provider.", "description_informal_time": "You can still cancel the reservation within {{ days_to_cancel }} days after confirmation.", "email_setup_description": "Add your email address to receive messages.", "email_setup_title": "Add email address", @@ -3405,7 +3409,8 @@ "description": "Your reservation has been made.", "title": "It worked!" }, - "voucher_image_alt": "Credit" + "voucher_image_alt": "Credit", + "description_informal": "You use your {{fund}} credit for this reservation.
Are you making a reservation? Then you agree that we share your personal data with the provider." }, "modal_logout": { "description_formal": "Are you sure you want to log out?", diff --git a/react/src/webshop/i18n/translated/fr.json b/react/src/webshop/i18n/translated/fr.json index 43494487e..a347104e9 100644 --- a/react/src/webshop/i18n/translated/fr.json +++ b/react/src/webshop/i18n/translated/fr.json @@ -1628,7 +1628,6 @@ }, "description_formal": "Vous utiliserez votre {{fund}}
Vous placez une réservation ? Dans ce cas, vous acceptez que nous partagions vos données personnelles avec le fournisseur.", "description_formal_time": "{{ days_to_cancel }} Vous pouvez encore annuler la réservation dans les jours qui suivent la confirmation.", - "description_informal": "Vous utilisez votre {{fund}}
Vous placez une réservation ? Dans ce cas, vous acceptez que nous partagions vos données personnelles avec le fournisseur.", "description_informal_time": "{{ days_to_cancel }} Vous pouvez encore annuler la réservation dans les jours qui suivent la confirmation.", "email_setup_description": "Ajoutez votre adresse e-mail pour recevoir les messages.", "email_setup_title": "Ajouter une adresse électronique", @@ -1693,7 +1692,8 @@ "description": "Votre réservation a été effectuée.", "title": "Cela a fonctionné !" }, - "voucher_image_alt": "Crédit" + "voucher_image_alt": "Crédit", + "description_informal": "Vous utilisez votre {{fund}}
Vous effectuez une réservation ? Dans ce cas, vous acceptez que nous partagions vos données personnelles avec le fournisseur." }, "modal": { "buttons": { @@ -2372,7 +2372,12 @@ "bsn": "BSN", "title": "Données personnelles" }, - "title": "Données" + "title": "Données", + "household": { + "house_composition": "Composition de la famille", + "living_arrangement": "Forme vivante", + "title": "Ménage" + } }, "provider_sign_up": { "breadcrumbs": { diff --git a/react/src/webshop/i18n/translated/pl.json b/react/src/webshop/i18n/translated/pl.json index 4f15f3542..e74007cd0 100644 --- a/react/src/webshop/i18n/translated/pl.json +++ b/react/src/webshop/i18n/translated/pl.json @@ -1628,7 +1628,6 @@ }, "description_formal": "Wykorzystasz swój {{fund}}
Czy dokonujesz rezerwacji? W takim przypadku zgadzasz się na udostępnienie przez nas Twoich danych osobowych dostawcy.", "description_formal_time": "{{ days_to_cancel }} Rezerwację można anulować w ciągu kilku dni od jej potwierdzenia.", - "description_informal": "Używasz swojego {{fund}}
Czy dokonujesz rezerwacji? W takim przypadku zgadzasz się, że udostępniamy Twoje dane osobowe dostawcy.", "description_informal_time": "{{ days_to_cancel }} Rezerwację można anulować w ciągu kilku dni od jej potwierdzenia.", "email_setup_description": "Dodaj swój adres e-mail, aby otrzymywać wiadomości.", "email_setup_title": "Dodaj adres e-mail", @@ -1693,7 +1692,8 @@ "description": "Rezerwacja została dokonana.", "title": "Udało się!" }, - "voucher_image_alt": "Kredyt" + "voucher_image_alt": "Kredyt", + "description_informal": "Używasz swojego {{fund}}
Czy dokonujesz rezerwacji? W takim razie zgadzasz się, że udostępniamy Twoje dane osobowe dostawcy." }, "modal": { "buttons": { @@ -2372,7 +2372,12 @@ "bsn": "BSN", "title": "Dane osobowe" }, - "title": "Dane" + "title": "Dane", + "household": { + "house_composition": "Skład rodziny", + "living_arrangement": "Żywa forma", + "title": "Gospodarstwo domowe" + } }, "provider_sign_up": { "breadcrumbs": { diff --git a/react/src/webshop/i18n/translated/ru.json b/react/src/webshop/i18n/translated/ru.json index c1f4e4168..5bcee6df9 100644 --- a/react/src/webshop/i18n/translated/ru.json +++ b/react/src/webshop/i18n/translated/ru.json @@ -1628,7 +1628,6 @@ }, "description_formal": "Вы используете свой {{fund}}
кредит для этого бронирования. Вы бронируете номер? Тогда вы соглашаетесь с тем, что мы передаем ваши личные данные поставщику услуг.", "description_formal_time": "{{ days_to_cancel }} Вы все еще можете отменить бронирование в течение нескольких дней после подтверждения.", - "description_informal": "Вы используете свой {{fund}}
кредит для этого бронирования. Вы бронируете? Тогда вы соглашаетесь с тем, что мы передаем ваши личные данные поставщику услуг.", "description_informal_time": "{{ days_to_cancel }} Вы все еще можете отменить бронирование в течение нескольких дней после подтверждения.", "email_setup_description": "Добавьте свой адрес электронной почты для получения сообщений.", "email_setup_title": "Добавить адрес электронной почты", @@ -1693,7 +1692,8 @@ "description": "Ваша бронь сделана.", "title": "Это сработало!" }, - "voucher_image_alt": "Кредит" + "voucher_image_alt": "Кредит", + "description_informal": "Вы используете свой {{fund}}
кредит для этого бронирования. Вы бронируете? Тогда вы соглашаетесь с тем, что мы передаем ваши личные данные поставщику услуг." }, "modal": { "buttons": { @@ -2372,7 +2372,12 @@ "bsn": "BSN", "title": "Персональные данные" }, - "title": "Данные" + "title": "Данные", + "household": { + "house_composition": "Состав семьи", + "living_arrangement": "Живая форма", + "title": "Домашнее хозяйство" + } }, "provider_sign_up": { "breadcrumbs": { diff --git a/react/src/webshop/i18n/translated/tr.json b/react/src/webshop/i18n/translated/tr.json index cdfecf421..0b1ee8d0e 100644 --- a/react/src/webshop/i18n/translated/tr.json +++ b/react/src/webshop/i18n/translated/tr.json @@ -2508,7 +2508,12 @@ "bsn": "BSN", "title": "Kişisel veriler" }, - "title": "Veri" + "title": "Veri", + "household": { + "house_composition": "Aile yapısı", + "living_arrangement": "Yaşayan form", + "title": "Hane halkı" + } }, "reimbursements": { "breadcrumbs": { @@ -3016,7 +3021,6 @@ }, "description_formal": "Sen kullanacaksın {{fund}}
Bu rezervasyon için kredi. Rezervasyon mu yapıyorsunuz? O zaman kişisel verilerinizi sağlayıcı ile paylaşmamızı kabul etmiş olursunuz.", "description_formal_time": "{{ days_to_cancel }} Rezervasyonu onaylandıktan sonraki günler içinde de iptal edebilirsiniz.", - "description_informal": "Sen kendi {{fund}}
Bu rezervasyon için kredi. Rezervasyon mu yapıyorsunuz? O zaman kişisel verilerinizi sağlayıcı ile paylaşmamızı kabul etmiş olursunuz.", "description_informal_time": "{{ days_to_cancel }} Rezervasyonu onaylandıktan sonraki günler içinde de iptal edebilirsiniz.", "email_setup_description": "Mesaj almak için e-posta adresinizi ekleyin.", "email_setup_title": "E-posta adresi ekle", @@ -3081,7 +3085,8 @@ "description": "Rezervasyonunuz yapılmıştır.", "title": "İşe yaradı!" }, - "voucher_image_alt": "Kredi" + "voucher_image_alt": "Kredi", + "description_informal": "Sen kendi {{fund}}
Bu rezervasyon için kredi. Rezervasyon mu yapıyorsunuz? O zaman kişisel verilerinizi sağlayıcı ile paylaşmamızı kabul etmiş olursunuz." }, "modal": { "buttons": { diff --git a/react/src/webshop/i18n/translated/uk.json b/react/src/webshop/i18n/translated/uk.json index 7bcc02b0f..8963e186d 100644 --- a/react/src/webshop/i18n/translated/uk.json +++ b/react/src/webshop/i18n/translated/uk.json @@ -1628,7 +1628,6 @@ }, "description_formal": "Ви використаєте свій {{fund}}
кредит для цього бронювання. Ви робите бронювання? Тоді ви погоджуєтесь, що ми передаємо ваші персональні дані постачальнику.", "description_formal_time": "{{ days_to_cancel }} Ви все ще можете скасувати бронювання протягом декількох днів після підтвердження.", - "description_informal": "Ви використовуєте свій {{fund}}
Ви використовуєте свій кредит для цього бронювання. Ви робите бронювання? Тоді ви погоджуєтесь, що ми передаємо ваші персональні дані постачальнику.", "description_informal_time": "{{ days_to_cancel }} Ви все ще можете скасувати бронювання протягом декількох днів після підтвердження.", "email_setup_description": "Додайте свою електронну адресу, щоб отримувати повідомлення.", "email_setup_title": "Додати адресу електронної пошти", @@ -1693,7 +1692,8 @@ "description": "Ваше бронювання зроблено.", "title": "Спрацювало!" }, - "voucher_image_alt": "Кредит" + "voucher_image_alt": "Кредит", + "description_informal": "Ви використовуєте свій {{fund}}
Ви використовуєте свій кредит для цього бронювання. Ви робите бронювання? Тоді ви погоджуєтеся, що ми передаємо ваші персональні дані постачальнику." }, "modal": { "buttons": { @@ -2372,7 +2372,12 @@ "bsn": "BSN", "title": "Персональні дані" }, - "title": "Дані" + "title": "Дані", + "household": { + "house_composition": "Склад сім'ї", + "living_arrangement": "Жива форма", + "title": "Домогосподарство" + } }, "provider_sign_up": { "breadcrumbs": { diff --git a/translations/cache/cache.json b/translations/cache/cache.json index b1a3a8f27..a1c3d80f4 100644 --- a/translations/cache/cache.json +++ b/translations/cache/cache.json @@ -4421,7 +4421,7 @@ ], [ "modal_reserve_product.description_informal", - "Je gebruikt jouw {{fund}} tegoed voor deze reservering.
Plaatst je een reservering? Dan gaat je ermee akkoord dat wij je persoonlijke gegevens delen met de aanbieder." + "Je gebruikt jouw {{fund}} tegoed voor deze reservering.
Plaats je een reservering? Dan ga je ermee akkoord dat wij je persoonlijke gegevens delen met de aanbieder." ], [ "modal_reserve_product.description_informal_time", @@ -6423,6 +6423,18 @@ "profile.history.you", "jou" ], + [ + "profile.household.house_composition", + "Gezinssamenstelling" + ], + [ + "profile.household.living_arrangement", + "Leefvorm" + ], + [ + "profile.household.title", + "Huishouden" + ], [ "profile.personal.bsn", "BSN" From 5abcd54c98fa4a3eafd5d293a75f53f60a42468e Mon Sep 17 00:00:00 2001 From: dev-rminds Date: Fri, 14 Feb 2025 00:23:39 +0200 Subject: [PATCH 06/24] add export to profiles page --- .../pages/identities/Identities.tsx | 38 +++++++-- .../identitities-show/IdentitiesShow.tsx | 5 +- .../ImplementationsCms.tsx | 80 +++++++++---------- .../services/SponsorIdentitesService.ts | 18 ++++- .../exports/useIdentityExportService.tsx | 43 ++++++++++ 5 files changed, 129 insertions(+), 55 deletions(-) create mode 100644 react/src/dashboard/services/exports/useIdentityExportService.tsx diff --git a/react/src/dashboard/components/pages/identities/Identities.tsx b/react/src/dashboard/components/pages/identities/Identities.tsx index b56ef086c..4d1189c45 100644 --- a/react/src/dashboard/components/pages/identities/Identities.tsx +++ b/react/src/dashboard/components/pages/identities/Identities.tsx @@ -25,6 +25,7 @@ import { NumberParam, StringParam } from 'use-query-params'; import TableDateTime from '../../elements/tables/elements/TableDateTime'; import TableEmptyValue from '../../elements/table-empty-value/TableEmptyValue'; import TableDateOnly from '../../elements/tables/elements/TableDateOnly'; +import useIdentityExportService from '../../../services/exports/useIdentityExportService'; export default function Identities() { const translate = useTranslate(); @@ -34,6 +35,7 @@ export default function Identities() { const activeOrganization = useActiveOrganization(); const fundService = useFundService(); + const identityExportService = useIdentityExportService(); const sponsorIdentitiesService = useSponsorIdentitiesService(); const [loading, setLoading] = useState(false); @@ -75,11 +77,21 @@ export default function Identities() { }, ); - const { headElement, configsElement } = useConfigurableTable(sponsorIdentitiesService.getColumns(), { - filter: filter, - sortable: false, - hasTooltips: true, - }); + const { headElement, configsElement } = useConfigurableTable( + sponsorIdentitiesService.getColumns(activeOrganization), + { filter: filter, sortable: false, hasTooltips: true }, + ); + + const { resetFilters: resetFilters, setShow } = filter; + + const exportIdentities = useCallback(() => { + setShow(false); + + identityExportService.exportData(activeOrganization.id, { + ...filter.activeValues, + per_page: null, + }); + }, [activeOrganization.id, filter.activeValues, setShow, identityExportService]); const fetchFunds = useCallback(() => { setProgress(0); @@ -108,8 +120,6 @@ export default function Identities() { [activeOrganization.id, setProgress, sponsorIdentitiesService, pushApiError], ); - const { resetFilters: resetFilters } = filter; - useEffect(() => { fetchIdentities(filterValuesActive); }, [fetchIdentities, filterValuesActive]); @@ -175,6 +185,16 @@ export default function Identities() { placeholder={translate('payouts.labels.search')} /> + +
+ +
@@ -212,7 +232,9 @@ export default function Identities() { )} {identity.email || } - {identity.bsn || } + {activeOrganization.bsn_enabled && ( + {identity.bsn || } + )} {identity?.records?.client_number?.[0]?.value_locale || ( diff --git a/react/src/dashboard/components/pages/identitities-show/IdentitiesShow.tsx b/react/src/dashboard/components/pages/identitities-show/IdentitiesShow.tsx index 1c3c0dcc0..79c99c0aa 100644 --- a/react/src/dashboard/components/pages/identitities-show/IdentitiesShow.tsx +++ b/react/src/dashboard/components/pages/identitities-show/IdentitiesShow.tsx @@ -167,10 +167,7 @@ export default function IdentitiesShow() { label: recordTypesByKey?.marital_status?.name, value: , }, - { - label: 'BSN', - value: identity?.bsn, - }, + ...(activeOrganization.bsn_enabled ? [{ label: 'BSN', value: identity?.bsn }] : []), { label: recordTypesByKey?.client_number?.name, value: , diff --git a/react/src/dashboard/components/pages/implementations-cms/ImplementationsCms.tsx b/react/src/dashboard/components/pages/implementations-cms/ImplementationsCms.tsx index 7612ad2e5..e1582d42c 100644 --- a/react/src/dashboard/components/pages/implementations-cms/ImplementationsCms.tsx +++ b/react/src/dashboard/components/pages/implementations-cms/ImplementationsCms.tsx @@ -207,7 +207,7 @@ export default function ImplementationsCms() { const { update: formUpdate } = form; const selectBanner = useCallback( - (mediaFile) => { + (mediaFile: File | Blob) => { setBannerMeta((meta) => ({ ...meta, mediaLoading: true })); mediaService @@ -318,45 +318,45 @@ export default function ImplementationsCms() {
-
-
-
{translate('implementation_edit.header.title')}
-
-
- - Open webshop - - - - - - Instellingen - - - - - Instellingen social - - - +
+
{translate('implementation_edit.header.title')}
+
+
+ + Open webshop + + + + + + Instellingen + + + + + Instellingen social + + + +
diff --git a/react/src/dashboard/services/SponsorIdentitesService.ts b/react/src/dashboard/services/SponsorIdentitesService.ts index e996ab2a1..5a46577df 100644 --- a/react/src/dashboard/services/SponsorIdentitesService.ts +++ b/react/src/dashboard/services/SponsorIdentitesService.ts @@ -1,8 +1,10 @@ -import ApiResponse, { ApiResponseSingle } from '../props/ApiResponses'; +import ApiResponse, { ApiResponseSingle, ResponseSimple } from '../props/ApiResponses'; import { useState } from 'react'; import ApiRequestService from './ApiRequestService'; import { ConfigurableTableColumn } from '../components/pages/vouchers/hooks/useConfigurableTable'; import SponsorIdentity, { ProfileBankAccount } from '../props/models/Sponsor/SponsorIdentity'; +import { ExportFieldProp } from '../components/modals/ModalExportDataSelect'; +import Organization from '../props/models/Organization'; export class SponsorIdentitiesService { /** @@ -71,13 +73,23 @@ export class SponsorIdentitiesService { + public export(organization_id: number, filters = {}): Promise> { + return this.apiRequest.get(`${this.prefix}/${organization_id}/sponsor/identities/export`, filters, { + responseType: 'arraybuffer', + }); + } + + public exportFields(organization_id: number): Promise>> { + return this.apiRequest.get(`${this.prefix}/${organization_id}/sponsor/identities/export-fields`); + } + + public getColumns(organization: Organization): Array { const list = [ 'id', 'given_name', 'family_name', 'email', - 'bsn', + organization.bsn_enabled ? 'bsn' : null, 'client_number', 'birth_date', 'last_activity', diff --git a/react/src/dashboard/services/exports/useIdentityExportService.tsx b/react/src/dashboard/services/exports/useIdentityExportService.tsx new file mode 100644 index 000000000..8c11ff8c3 --- /dev/null +++ b/react/src/dashboard/services/exports/useIdentityExportService.tsx @@ -0,0 +1,43 @@ +import React, { useCallback } from 'react'; +import usePushDanger from '../../hooks/usePushDanger'; +import useSetProgress from '../../hooks/useSetProgress'; +import useOpenModal from '../../hooks/useOpenModal'; +import ModalExportDataSelect from '../../components/modals/ModalExportDataSelect'; +import useMakeExporterService from './useMakeExporterService'; +import useSponsorIdentitiesService from '../SponsorIdentitesService'; + +export default function useIdentityExportService() { + const pushDanger = usePushDanger(); + const setProgress = useSetProgress(); + const openModal = useOpenModal(); + + const identityService = useSponsorIdentitiesService(); + const { makeSections, saveExportedData } = useMakeExporterService(); + + const exportData = useCallback( + (organization_id: number, filters: object = {}) => { + const onSuccess = (data: { data_format: string; fields: string }) => { + const { data_format, fields } = data; + const queryFilters = { ...filters, data_format, fields }; + + setProgress(0); + console.info('- data loaded from the api.'); + + identityService + .export(organization_id, queryFilters) + .then((res) => saveExportedData(data, organization_id, res)) + .catch((res) => pushDanger('Mislukt!', res.data.message)) + .finally(() => setProgress(100)); + }; + + identityService.exportFields(organization_id).then((res) => { + openModal((modal) => ( + + )); + }); + }, + [makeSections, openModal, pushDanger, saveExportedData, setProgress, identityService], + ); + + return { exportData }; +} From 0b4cddde8d611c6518e4665cde11d831cde932c1 Mon Sep 17 00:00:00 2001 From: RobinMeles Date: Fri, 14 Feb 2025 18:17:57 +0100 Subject: [PATCH 07/24] Update mollie-connection.js --- react/src/dashboard/i18n/nl/pages/mollie-connection.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/react/src/dashboard/i18n/nl/pages/mollie-connection.js b/react/src/dashboard/i18n/nl/pages/mollie-connection.js index 575b3f32d..e83cb9a03 100644 --- a/react/src/dashboard/i18n/nl/pages/mollie-connection.js +++ b/react/src/dashboard/i18n/nl/pages/mollie-connection.js @@ -2,7 +2,7 @@ export default { header: { title: 'Instellingen voor bijbetaalmethoden ', unknown_competed_at: 'Onbekend', - warning: 'Wij gebruiken uitsluitend Ideal. Per transactie betaalt u 0,29 cent (excl. btw).', + warning: 'Wij gebruiken uitsluitend Ideal. Per transactie betaalt u 0,32 cent (excl. btw).', }, header_create: { title: 'Organisatiegegevens indienen', From 9d143414c020ce6113b53d2a6db20a4d854f45aa Mon Sep 17 00:00:00 2001 From: RobinMeles Date: Fri, 14 Feb 2025 18:18:42 +0100 Subject: [PATCH 08/24] Update FundProvider.tsx --- .../dashboard/components/pages/fund-provider/FundProvider.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/react/src/dashboard/components/pages/fund-provider/FundProvider.tsx b/react/src/dashboard/components/pages/fund-provider/FundProvider.tsx index 2eb7bf791..b1f63f2b1 100644 --- a/react/src/dashboard/components/pages/fund-provider/FundProvider.tsx +++ b/react/src/dashboard/components/pages/fund-provider/FundProvider.tsx @@ -130,7 +130,7 @@ export default function FundProvider() {
- Per transactie betaalt u 0,29 cent (excl. btw) + Per transactie betaalt u 0,32 cent (excl. btw)
@@ -164,7 +164,7 @@ export default function FundProvider() {
- Wij gebruiken uitsluitend Ideal. Per transactie betaalt u 0,29 cent (excl. btw). + Wij gebruiken uitsluitend Ideal. Per transactie betaalt u 0,32 cent (excl. btw).
From 42b15a86579f7b8347ee017a4d4859165eec90ff Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 15 Feb 2025 09:38:50 +0000 Subject: [PATCH 09/24] Bump the npm_and_yarn group across 1 directory with 2 updates Bumps the npm_and_yarn group with 2 updates in the / directory: [dompurify](https://github.com/cure53/DOMPurify) and [elliptic](https://github.com/indutny/elliptic). Updates `dompurify` from 3.2.1 to 3.2.4 - [Release notes](https://github.com/cure53/DOMPurify/releases) - [Commits](https://github.com/cure53/DOMPurify/compare/3.2.1...3.2.4) Updates `elliptic` from 6.6.0 to 6.6.1 - [Commits](https://github.com/indutny/elliptic/compare/v6.6.0...v6.6.1) --- updated-dependencies: - dependency-name: dompurify dependency-type: direct:production dependency-group: npm_and_yarn - dependency-name: elliptic dependency-type: indirect dependency-group: npm_and_yarn ... Signed-off-by: dependabot[bot] --- package-lock.json | 16 +++++++++------- package.json | 2 +- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 770115765..8e6d0e2a4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "date-fns": "^4.1.0", "deepl-node": "^1.15.0", "diff": "^7.0.0", - "dompurify": "^3.2.1", + "dompurify": "^3.2.4", "easyqrcodejs": "^4.4.13", "file-saver": "^2.0.5", "i18n-iso-countries": "^7.13.0", @@ -6393,9 +6393,10 @@ } }, "node_modules/dompurify": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.1.tgz", - "integrity": "sha512-NBHEsc0/kzRYQd+AY6HR6B/IgsqzBABrqJbpCDQII/OK6h7B7LXzweZTDsqSW2LkTRpoxf18YUP+YjGySk6B3w==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.4.tgz", + "integrity": "sha512-ysFSFEDVduQpyhzAob/kkuJjf5zWkZD8/A9ywSp1byueyuCfHamrCBa14/Oc2iiB0e51B+NpxSl5gmzn+Ms/mg==", + "license": "(MPL-2.0 OR Apache-2.0)", "optionalDependencies": { "@types/trusted-types": "^2.0.7" } @@ -6450,10 +6451,11 @@ "integrity": "sha512-eMVObiUQ2LdgeO1F/ySTXsvqvxb6ZH2zPGaMYsWzRDdOddUa77tdmI0ltg+L16UpbWdhPmuF3wIQYyQq65WfZw==" }, "node_modules/elliptic": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.0.tgz", - "integrity": "sha512-dpwoQcLc/2WLQvJvLRHKZ+f9FgOdjnq11rurqwekGQygGPsYSK29OMMD2WalatiqQ+XGFDglTNixpPfI+lpaAA==", + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", diff --git a/package.json b/package.json index 828f6209b..28b02ab3b 100644 --- a/package.json +++ b/package.json @@ -93,7 +93,7 @@ "date-fns": "^4.1.0", "deepl-node": "^1.15.0", "diff": "^7.0.0", - "dompurify": "^3.2.1", + "dompurify": "^3.2.4", "easyqrcodejs": "^4.4.13", "file-saver": "^2.0.5", "i18n-iso-countries": "^7.13.0", From 6dd9d8e15ce4436e367565e5e9fea7c1695d111e Mon Sep 17 00:00:00 2001 From: dev-rminds Date: Mon, 17 Feb 2025 10:41:53 +0200 Subject: [PATCH 10/24] fix start page back button --- .../src/webshop/components/pages/auth/Start.tsx | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/react/src/webshop/components/pages/auth/Start.tsx b/react/src/webshop/components/pages/auth/Start.tsx index fe5610558..1bac479fa 100644 --- a/react/src/webshop/components/pages/auth/Start.tsx +++ b/react/src/webshop/components/pages/auth/Start.tsx @@ -48,12 +48,17 @@ export default function Start() { const [qrValue, setQrValue] = useState(null); const [emailValue, setEmailValue] = useState(null); - const [{ reset, logout, restore_with_digid, restore_with_email }, setQueryParams] = useQueryParams({ - reset: BooleanParam, - logout: BooleanParam, - restore_with_digid: BooleanParam, - restore_with_email: BooleanParam, - }); + const [{ reset, logout, restore_with_digid, restore_with_email }, setQueryParams] = useQueryParams( + { + reset: BooleanParam, + logout: BooleanParam, + restore_with_digid: BooleanParam, + restore_with_email: BooleanParam, + }, + { + updateType: 'replace', + }, + ); const { onAuthRedirect } = useAuthService(); const digIdService = useDigiDService(); From 19ef14589c3ad4dac9400243e7f7fb0cf0b7a70b Mon Sep 17 00:00:00 2001 From: dev-rminds Date: Mon, 17 Feb 2025 18:31:55 +0200 Subject: [PATCH 11/24] mobile language selector refactoring --- .../sections/blocks/block-mobile-menu.scss | 143 ++++++++++++------ .../webshop/hooks/useMobileLangSelector.tsx | 37 +++-- 2 files changed, 120 insertions(+), 60 deletions(-) diff --git a/react/assets/forus-webshop/scss/_common/sections/blocks/block-mobile-menu.scss b/react/assets/forus-webshop/scss/_common/sections/blocks/block-mobile-menu.scss index 16bf99abf..0e3e5b373 100644 --- a/react/assets/forus-webshop/scss/_common/sections/blocks/block-mobile-menu.scss +++ b/react/assets/forus-webshop/scss/_common/sections/blocks/block-mobile-menu.scss @@ -10,7 +10,7 @@ $footer_base_font: 'Open Sans', arial, sans-serif; width: 100%; transition: transform 0.2s; background: #fff; - box-shadow: 0px -1px 0px 0px #E5E5E5 inset; + box-shadow: 0px -1px 0px 0px #e5e5e5 inset; border-top: 1px solid var(--border-color); overflow: auto; @@ -20,7 +20,7 @@ $footer_base_font: 'Open Sans', arial, sans-serif; .mobile-menu-group-header { display: flex; padding: 16px 20px 16px 15px; - background: #FBFBFB; + background: #fbfbfb; border-top: 1px solid transparent; border-bottom: 1px solid var(--border-color); color: #222222; @@ -31,31 +31,99 @@ $footer_base_font: 'Open Sans', arial, sans-serif; margin-right: 5px; color: #979797; } + } - &.mobile-menu-language-group-header { - background: #FFFFFF; + .mobile-menu-languages { + .mobile-menu-languages-header { display: flex; - flex-direction: row; + padding: 16px 10px 16px 15px; + background: #fbfbfb; + border-top: 1px solid transparent; + border-bottom: 1px solid var(--border-color); + color: #282b39; + font: 600 14px/20px var(--base-font); + outline-offset: -2px !important; gap: 5px; - align-items: center; - justify-content: flex-start; - .mdi { - margin: 0; - } + .mobile-menu-languages-header-icon { + display: flex; + flex: 0 0 auto; + margin-left: -2px; - .mobile-menu-language-group-header-prefix { - color: #646464; + .mdi { + font-size: 18px; + color: #848484; + } } - .mobile-menu-language-group-header-name { + .mobile-menu-languages-header-name { flex: 1 1 auto; + display: flex; + gap: 3px; + + .mobile-menu-languages-header-name-prefix { + color: #282b39; + transition: 0.4s color; + } } - .mobile-menu-language-group-header-icon { + .mobile-menu-languages-header-toggle { + display: flex; + justify-content: center; + flex: 0 0 30px; + align-items: center; + .mdi { - color: #282B39; + height: 20px; + line-height: 20px; + display: block; + width: 30px; + font-size: 28px; + color: #9e9e9e; + } + } + + &.mobile-menu-languages-header-active { + .mobile-menu-languages-header-toggle { + .mdi { + color: #282b39; + } } + + .mobile-menu-languages-header-name { + .mobile-menu-languages-header-name-prefix { + color: #646464; + } + } + } + } + + .mobile-menu-item-language { + display: flex; + flex-direction: row; + gap: 8px; + align-items: center; + justify-content: flex-start; + font: 600 14px / var(--item-line-height) var(--base-font); + border-bottom: 1px solid var(--border-color); + padding: calc((var(--item-height) - var(--item-line-height)) / 2) 15px; + outline-offset: -2px !important; + + .mobile-menu-item-language-separator { + width: 1px; + height: 8px; + background: var(--border-color); + } + + .mobile-menu-item-language-name { + flex: 1 1 auto; + } + + .mobile-menu-item-language-check { + flex: 0 0 20px; + font-size: 18px; + line-height: var(--item-line-height); + height: var(--item-line-height); } } } @@ -63,14 +131,14 @@ $footer_base_font: 'Open Sans', arial, sans-serif; .mobile-menu-items { width: 100%; overflow: scroll; - + .mobile-menu-item { - font: 600 14px/var(--item-line-height) var(--base-font); + font: 600 14px / var(--item-line-height) var(--base-font); border-bottom: 1px solid var(--border-color); padding: calc(calc(var(--item-height) - var(--item-line-height)) / 2) 15px; display: flex; outline-offset: -2px !important; - + .mobile-menu-item-icon { font-size: 22px; line-height: var(--item-line-height); @@ -98,21 +166,21 @@ $footer_base_font: 'Open Sans', arial, sans-serif; background-color: var(--btn-auth-bg); border: solid 1px var(--btn-auth-border); color: var(--tc-auth-btn); - + .mdi { color: var(--tc-auth-btn); } - + &:hover { border: solid 1px var(--btn-auth-border); - + .mdi { color: var(--tc-auth-btn); } } } } - + &.active { color: var(--color-primary); @@ -122,32 +190,15 @@ $footer_base_font: 'Open Sans', arial, sans-serif; &:after { position: absolute; - right: 20px; - content: "\F012C"; - font: normal normal normal 24px/1 "Material Design Icons"; + right: 15px; + content: '\F012C'; + font: normal normal normal 24px/1 'Material Design Icons'; font-size: 18px; - color: #282B39; + color: #282b39; + width: 20px; } } - &.mobile-menu-item-language { - display: flex; - flex-direction: row; - gap: 5px; - align-items: center; - justify-content: flex-start; - - .mobile-menu-item-language-separator { - width: 1px; - height: 8px; - background: var(--border-color); - } - - .mobile-menu-item-language-name { - flex: 1 1 auto; - } - } - &:hover { color: var(--color-primary); } @@ -162,10 +213,10 @@ $footer_base_font: 'Open Sans', arial, sans-serif; .mobile-menu-items { .mobile-menu-item:not(.active) { .mobile-menu-item-icon { - color: #CDCED2; + color: #cdced2; } } } } } -} \ No newline at end of file +} diff --git a/react/src/webshop/hooks/useMobileLangSelector.tsx b/react/src/webshop/hooks/useMobileLangSelector.tsx index 7cd30c9f5..01328dba5 100644 --- a/react/src/webshop/hooks/useMobileLangSelector.tsx +++ b/react/src/webshop/hooks/useMobileLangSelector.tsx @@ -2,6 +2,7 @@ import React, { Fragment, useMemo, useState } from 'react'; import useMainContext from './useMainContext'; import { clickOnKeyEnter } from '../../dashboard/helpers/wcag'; import useTranslate from '../../dashboard/hooks/useTranslate'; +import classNames from 'classnames'; export default function useMobileLangSelector() { const { language, languages, changeLanguage } = useMainContext(); @@ -16,29 +17,37 @@ export default function useMobileLangSelector() { const languageResource = languages?.filter((lang) => lang.locale === language)?.[0]; return ( - +
setShowOptions(!showOptions)}> - -
- {translate('top_navbar.language.prefix')} +
+
-
- {languageResource.locale.toUpperCase()} - {languageResource.name} +
+
+ {translate('top_navbar.language.prefix')} +
+ {`${languageResource.locale.toUpperCase()} - ${languageResource.name}`} +
+
+
- - -
{showOptions && ( -
+ {languages.map((lang) => (
))} -
+
)} - +
); }, [changeLanguage, language, languages, showOptions, translate]); } From 3f51154ff6d9c673d41c36cf3246550da4c8ab6e Mon Sep 17 00:00:00 2001 From: dev-rminds Date: Mon, 17 Feb 2025 18:32:57 +0200 Subject: [PATCH 12/24] add translations --- react/src/webshop/i18n/translated/ar.json | 3 +++ react/src/webshop/i18n/translated/de.json | 3 +++ react/src/webshop/i18n/translated/en-US.json | 3 +++ react/src/webshop/i18n/translated/fr.json | 3 +++ react/src/webshop/i18n/translated/pl.json | 3 +++ react/src/webshop/i18n/translated/ru.json | 3 +++ react/src/webshop/i18n/translated/tr.json | 3 +++ react/src/webshop/i18n/translated/uk.json | 3 +++ translations/cache/cache.json | 4 ++++ 9 files changed, 28 insertions(+) diff --git a/react/src/webshop/i18n/translated/ar.json b/react/src/webshop/i18n/translated/ar.json index b8c9dd83f..411b8da71 100644 --- a/react/src/webshop/i18n/translated/ar.json +++ b/react/src/webshop/i18n/translated/ar.json @@ -752,6 +752,9 @@ "hartvanwestbrabant": "بدء التطبيق", "midden_drenthe": "تفعيل الائتمان", "potjeswijzer": "بدء التطبيق" + }, + "language": { + "prefix": "لغتك" } }, "week_days": { diff --git a/react/src/webshop/i18n/translated/de.json b/react/src/webshop/i18n/translated/de.json index 6018844d4..b7df755cf 100644 --- a/react/src/webshop/i18n/translated/de.json +++ b/react/src/webshop/i18n/translated/de.json @@ -3169,6 +3169,9 @@ "hartvanwestbrabant": "Anwendung starten", "midden_drenthe": "Kredit aktivieren", "potjeswijzer": "Anwendung starten" + }, + "language": { + "prefix": "Ihre Sprache:" } }, "voucher_printable": { diff --git a/react/src/webshop/i18n/translated/en-US.json b/react/src/webshop/i18n/translated/en-US.json index d682d365e..a3c72dacd 100644 --- a/react/src/webshop/i18n/translated/en-US.json +++ b/react/src/webshop/i18n/translated/en-US.json @@ -348,6 +348,9 @@ "hartvanwestbrabant": "Start application", "midden_drenthe": "Activate credit", "potjeswijzer": "Start application" + }, + "language": { + "prefix": "Your language:" } }, "auth_start": { diff --git a/react/src/webshop/i18n/translated/fr.json b/react/src/webshop/i18n/translated/fr.json index 43494487e..5b5510dfd 100644 --- a/react/src/webshop/i18n/translated/fr.json +++ b/react/src/webshop/i18n/translated/fr.json @@ -3169,6 +3169,9 @@ "hartvanwestbrabant": "Démarrer la demande", "midden_drenthe": "Activer le crédit", "potjeswijzer": "Démarrer la demande" + }, + "language": { + "prefix": "Votre langue :" } }, "voucher_printable": { diff --git a/react/src/webshop/i18n/translated/pl.json b/react/src/webshop/i18n/translated/pl.json index 4f15f3542..2244b817b 100644 --- a/react/src/webshop/i18n/translated/pl.json +++ b/react/src/webshop/i18n/translated/pl.json @@ -3169,6 +3169,9 @@ "hartvanwestbrabant": "Rozpoczęcie aplikacji", "midden_drenthe": "Aktywacja kredytu", "potjeswijzer": "Rozpoczęcie aplikacji" + }, + "language": { + "prefix": "Twój język:" } }, "voucher_printable": { diff --git a/react/src/webshop/i18n/translated/ru.json b/react/src/webshop/i18n/translated/ru.json index c1f4e4168..ddb581402 100644 --- a/react/src/webshop/i18n/translated/ru.json +++ b/react/src/webshop/i18n/translated/ru.json @@ -3169,6 +3169,9 @@ "hartvanwestbrabant": "Начать применение", "midden_drenthe": "Активировать кредит", "potjeswijzer": "Начать применение" + }, + "language": { + "prefix": "Ваш язык:" } }, "voucher_printable": { diff --git a/react/src/webshop/i18n/translated/tr.json b/react/src/webshop/i18n/translated/tr.json index cdfecf421..d2c2e29e3 100644 --- a/react/src/webshop/i18n/translated/tr.json +++ b/react/src/webshop/i18n/translated/tr.json @@ -752,6 +752,9 @@ "hartvanwestbrabant": "Uygulamayı başlat", "midden_drenthe": "Krediyi etkinleştirin", "potjeswijzer": "Uygulamayı başlat" + }, + "language": { + "prefix": "Senin dilin:" } }, "week_days": { diff --git a/react/src/webshop/i18n/translated/uk.json b/react/src/webshop/i18n/translated/uk.json index 7bcc02b0f..9f2cd6005 100644 --- a/react/src/webshop/i18n/translated/uk.json +++ b/react/src/webshop/i18n/translated/uk.json @@ -3169,6 +3169,9 @@ "hartvanwestbrabant": "Запустити програму", "midden_drenthe": "Активувати кредит", "potjeswijzer": "Запустити програму" + }, + "language": { + "prefix": "Твоя мова:" } }, "voucher_printable": { diff --git a/translations/cache/cache.json b/translations/cache/cache.json index b1a3a8f27..ad684c125 100644 --- a/translations/cache/cache.json +++ b/translations/cache/cache.json @@ -8247,6 +8247,10 @@ "top_navbar.items.westerkwartier.funds", "Potjes" ], + [ + "top_navbar.language.prefix", + "Uw taal:" + ], [ "top_navbar.main_menu", "Hoofdmenu" From 3409bfc55cec3b635cd711986861272d6f4343cb Mon Sep 17 00:00:00 2001 From: dev-rminds Date: Mon, 17 Feb 2025 20:12:03 +0200 Subject: [PATCH 13/24] fix fund top-ups --- .../components/pages/organizations-funds/OrganizationFunds.tsx | 1 - react/src/dashboard/props/models/Fund.tsx | 1 - 2 files changed, 2 deletions(-) diff --git a/react/src/dashboard/components/pages/organizations-funds/OrganizationFunds.tsx b/react/src/dashboard/components/pages/organizations-funds/OrganizationFunds.tsx index 2ccfde791..6e02a9b6e 100644 --- a/react/src/dashboard/components/pages/organizations-funds/OrganizationFunds.tsx +++ b/react/src/dashboard/components/pages/organizations-funds/OrganizationFunds.tsx @@ -437,7 +437,6 @@ export default function OrganizationFunds() { )} {hasPermission(activeOrganization, 'view_finances') && - fund.balance_provider == 'top_ups' && fund.key && fund.state != 'closed' && ( ; From a6e00430bf85586466e7ecb199071a5a47e2c49a Mon Sep 17 00:00:00 2001 From: dev-rminds Date: Mon, 17 Feb 2025 20:23:19 +0200 Subject: [PATCH 14/24] update mobile language items color --- .../scss/_common/sections/blocks/block-mobile-menu.scss | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/react/assets/forus-webshop/scss/_common/sections/blocks/block-mobile-menu.scss b/react/assets/forus-webshop/scss/_common/sections/blocks/block-mobile-menu.scss index 0e3e5b373..b5acde663 100644 --- a/react/assets/forus-webshop/scss/_common/sections/blocks/block-mobile-menu.scss +++ b/react/assets/forus-webshop/scss/_common/sections/blocks/block-mobile-menu.scss @@ -102,6 +102,7 @@ $footer_base_font: 'Open Sans', arial, sans-serif; display: flex; flex-direction: row; gap: 8px; + color: #282b39; align-items: center; justify-content: flex-start; font: 600 14px / var(--item-line-height) var(--base-font); @@ -125,6 +126,10 @@ $footer_base_font: 'Open Sans', arial, sans-serif; line-height: var(--item-line-height); height: var(--item-line-height); } + + &.mobile-menu-item-language-active { + color: #000; + } } } From df8b64345fb09f14c0097f7d3ca15214e4e8b31c Mon Sep 17 00:00:00 2001 From: dev-rminds Date: Tue, 18 Feb 2025 14:20:04 +0200 Subject: [PATCH 15/24] profiles, add last activity time --- .../components/pages/identitities-show/IdentitiesShow.tsx | 3 ++- react/src/dashboard/props/models/Sponsor/SponsorIdentity.tsx | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/react/src/dashboard/components/pages/identitities-show/IdentitiesShow.tsx b/react/src/dashboard/components/pages/identitities-show/IdentitiesShow.tsx index 5be927664..76067f1b2 100644 --- a/react/src/dashboard/components/pages/identitities-show/IdentitiesShow.tsx +++ b/react/src/dashboard/components/pages/identitities-show/IdentitiesShow.tsx @@ -163,7 +163,8 @@ export default function IdentitiesShow() { items={[ { label: 'Accountnummer', value: identity?.id }, { label: 'Actief sinds', value: identity?.created_at_locale }, - { label: 'Laatste inlog', value: identity?.last_activity_at_locale }, + { label: 'Laatste inlog', value: identity?.last_login_at_locale }, + { label: 'Laatste handeling', value: identity?.last_activity_at_locale }, ]} /> diff --git a/react/src/dashboard/props/models/Sponsor/SponsorIdentity.tsx b/react/src/dashboard/props/models/Sponsor/SponsorIdentity.tsx index 823c6b7b0..25400677e 100644 --- a/react/src/dashboard/props/models/Sponsor/SponsorIdentity.tsx +++ b/react/src/dashboard/props/models/Sponsor/SponsorIdentity.tsx @@ -63,6 +63,8 @@ export default interface SponsorIdentity { count_vouchers_active_with_balance: number; created_at?: string; created_at_locale?: string; + last_login_at?: string; + last_login_at_locale?: string; last_activity_at?: string; last_activity_at_locale?: string; } From a23403f95a86240ccce9dac981506fa37f684aa8 Mon Sep 17 00:00:00 2001 From: dev-rminds Date: Tue, 18 Feb 2025 17:16:31 +0200 Subject: [PATCH 16/24] update profiles table and webshop details --- .../dashboard/components/pages/identities/Identities.tsx | 3 +++ react/src/dashboard/i18n/nl/pages/identities.js | 6 ++++-- react/src/dashboard/props/models/Profile.tsx | 2 ++ react/src/dashboard/services/SponsorIdentitesService.ts | 1 + react/src/webshop/components/pages/profile/Profile.tsx | 4 ++++ react/src/webshop/i18n/nl/pages/profile.mjs | 1 + 6 files changed, 15 insertions(+), 2 deletions(-) diff --git a/react/src/dashboard/components/pages/identities/Identities.tsx b/react/src/dashboard/components/pages/identities/Identities.tsx index f5ee7a126..f673304c2 100644 --- a/react/src/dashboard/components/pages/identities/Identities.tsx +++ b/react/src/dashboard/components/pages/identities/Identities.tsx @@ -210,6 +210,9 @@ export default function Identities() { value={identity?.records?.birth_date?.[0]?.value_locale} /> + + + diff --git a/react/src/dashboard/i18n/nl/pages/identities.js b/react/src/dashboard/i18n/nl/pages/identities.js index 82c3ab1a7..ee3c8426b 100644 --- a/react/src/dashboard/i18n/nl/pages/identities.js +++ b/react/src/dashboard/i18n/nl/pages/identities.js @@ -9,7 +9,8 @@ export default { email: 'E-mail adres', bsn: 'BSN', birth_date: 'Geboorte datum', - last_activity: 'Laatste inlog', + last_login: 'Laatste inlog', + last_activity: 'Laatste handeling', postal_code: 'Postcode', vouchers_count: 'Aantal tegoeden', mobile: 'Mobiele telefoonnummer', @@ -30,6 +31,8 @@ export default { bsn: 'Dit staat voor "Burger Service Nummer". Het is een uniek identificatienummer dat wordt gebruikt door de overheid om personen te identificeren in verschillende administratieve processen.', birth_date: 'Dit veld bevat de geboortedatum van de persoon. Het is belangrijk voor persoonlijke identificatie, ondersteuning bij het gebruik, en om per regio inzicht te krijgen in de aanvraag en het gebruik van regelingen.', + last_login: + 'Dit veld toont de datum en tijd waarop de persoon voor het laatst heeft ingelogd op het platform. Dit helpt om de activiteit van de persoon te monitoren.', last_activity: 'Dit veld toont de datum en tijd waarop de persoon voor het laatst heeft ingelogd op het platform. Dit helpt om de activiteit van de persoon te monitoren.', postal_code: @@ -71,7 +74,6 @@ export default { emails_verified_3: 'Het tweede extra adres waaronder de persoon per elektronische post bereikbaar is. Dit is het eerste extra e-mailadres. De persoon kan het e-mailadres als hoofdadres instellen in het persoonlijke account op de website.', birth_date: 'De datum van geboorte van de persoon.', - last_activity: 'Lorem Ipsum - dolor sit amet!', postal_code: 'De officiële codering van TNT Post voor een Nederlands postadres, bestaande uit een numeriek deel en een alfabetisch deel.', telephone: 'Het telefoonnummer waaronder de persoon bereikbaar is.', diff --git a/react/src/dashboard/props/models/Profile.tsx b/react/src/dashboard/props/models/Profile.tsx index f51671a3e..32153c55e 100644 --- a/react/src/dashboard/props/models/Profile.tsx +++ b/react/src/dashboard/props/models/Profile.tsx @@ -9,6 +9,8 @@ export default interface Profile { bank_accounts?: Array; created_at?: string; created_at_locale?: string; + last_login_at?: string; + last_login_at_locale?: string; last_activity_at?: string; last_activity_at_locale?: string; } diff --git a/react/src/dashboard/services/SponsorIdentitesService.ts b/react/src/dashboard/services/SponsorIdentitesService.ts index db79eea4c..99097bb3b 100644 --- a/react/src/dashboard/services/SponsorIdentitesService.ts +++ b/react/src/dashboard/services/SponsorIdentitesService.ts @@ -79,6 +79,7 @@ export class SponsorIdentitiesService Date: Tue, 18 Feb 2025 17:24:37 +0200 Subject: [PATCH 17/24] update translations --- react/src/webshop/i18n/translated/ar.json | 7 ++++--- react/src/webshop/i18n/translated/de.json | 7 ++++--- react/src/webshop/i18n/translated/en-US.json | 7 ++++--- react/src/webshop/i18n/translated/fr.json | 7 ++++--- react/src/webshop/i18n/translated/pl.json | 7 ++++--- react/src/webshop/i18n/translated/ru.json | 7 ++++--- react/src/webshop/i18n/translated/tr.json | 7 ++++--- react/src/webshop/i18n/translated/uk.json | 7 ++++--- translations/cache/cache.json | 6 +++++- 9 files changed, 37 insertions(+), 25 deletions(-) diff --git a/react/src/webshop/i18n/translated/ar.json b/react/src/webshop/i18n/translated/ar.json index 411b8da71..ec516f288 100644 --- a/react/src/webshop/i18n/translated/ar.json +++ b/react/src/webshop/i18n/translated/ar.json @@ -2480,7 +2480,8 @@ "account": { "active_since": "نشط منذ", "last_login": "آخر تسجيل دخول", - "title": "تفاصيل الحساب" + "title": "تفاصيل الحساب", + "last_activity": "الإجراء الأخير" }, "bank_accounts": { "title": "الحساب البنكي", @@ -3019,7 +3020,6 @@ }, "description_formal": "سوف تستخدم رصيدك {{fund}}
رصيدك لهذا الحجز هل تقوم بالحجز؟ إذن أنت توافق على مشاركة بياناتك الشخصية مع مقدم الخدمة.", "description_formal_time": "{{ days_to_cancel }} لا يزال بإمكانك إلغاء الحجز في غضون أيام بعد تأكيد الحجز.", - "description_informal": "هل تستخدم رصيدك {{fund}}
رصيدك لهذا الحجز هل تقوم بالحجز؟ إذن أنت توافق على مشاركة بياناتك الشخصية مع مقدم الخدمة.", "description_informal_time": "{{ days_to_cancel }} لا يزال بإمكانك إلغاء الحجز في غضون أيام بعد تأكيد الحجز.", "email_setup_description": "أضف عنوان بريدك الإلكتروني لتلقي الرسائل.", "email_setup_title": "إضافة عنوان البريد الإلكتروني", @@ -3084,7 +3084,8 @@ "description": "تم إجراء الحجز الخاص بك.", "title": "لقد نجح الأمر!" }, - "voucher_image_alt": "الائتمان" + "voucher_image_alt": "الائتمان", + "description_informal": "أنت تستخدم رصيدك {{fund}}
رصيدك لهذا الحجز هل تقوم بالحجز؟ إذن أنت توافق على مشاركة بياناتك الشخصية مع مقدم الخدمة." }, "modal": { "buttons": { diff --git a/react/src/webshop/i18n/translated/de.json b/react/src/webshop/i18n/translated/de.json index b7df755cf..10eb02808 100644 --- a/react/src/webshop/i18n/translated/de.json +++ b/react/src/webshop/i18n/translated/de.json @@ -1628,7 +1628,6 @@ }, "description_formal": "Sie verwenden Ihr {{fund}}
Guthaben für diese Reservierung verwenden. Buchen Sie eine Reservierung? Dann stimmen Sie zu, dass wir Ihre persönlichen Daten mit dem Anbieter teilen.", "description_formal_time": "{{ days_to_cancel }} Sie können die Reservierung noch innerhalb weniger Tage nach der Bestätigung stornieren.", - "description_informal": "Sie verwenden Ihr {{fund}}
Guthaben für diese Reservierung. Nehmen Sie eine Reservierung vor? Dann stimmen Sie zu, dass wir Ihre persönlichen Daten mit dem Anbieter teilen.", "description_informal_time": "{{ days_to_cancel }} Sie können die Reservierung noch innerhalb weniger Tage nach der Bestätigung stornieren.", "email_setup_description": "Fügen Sie Ihre E-Mail-Adresse hinzu, um Nachrichten zu erhalten.", "email_setup_title": "E-Mail Adresse hinzufügen", @@ -1693,7 +1692,8 @@ "description": "Ihre Reservierung wurde vorgenommen.", "title": "Es hat geklappt!" }, - "voucher_image_alt": "Kredit" + "voucher_image_alt": "Kredit", + "description_informal": "Sie verwenden Ihr {{fund}}
Guthaben für diese Reservierung. Sie machen eine Reservierung? Dann stimmen Sie zu, dass wir Ihre persönlichen Daten mit dem Anbieter teilen." }, "modal": { "buttons": { @@ -2341,7 +2341,8 @@ "account": { "active_since": "Aktiv seit", "last_login": "Letzte Anmeldung", - "title": "Details zum Konto" + "title": "Details zum Konto", + "last_activity": "Letzte Aktion" }, "bank_accounts": { "title": "Bankkonto", diff --git a/react/src/webshop/i18n/translated/en-US.json b/react/src/webshop/i18n/translated/en-US.json index a3c72dacd..5d47a92bf 100644 --- a/react/src/webshop/i18n/translated/en-US.json +++ b/react/src/webshop/i18n/translated/en-US.json @@ -2185,7 +2185,8 @@ "account": { "active_since": "Active since", "last_login": "Last login", - "title": "Account information" + "title": "Account information", + "last_activity": "Final act" }, "bank_accounts": { "title": "Bank account", @@ -3343,7 +3344,6 @@ }, "description_formal": "You use your {{fund}} credit for this reservation.
Are you placing a reservation? Then you agree that we share your personal information with the provider.", "description_formal_time": "You can still cancel the reservation within {{ days_to_cancel }} days after confirmation. ", - "description_informal": "You use your {{fund}} credit for this reservation.
Are you placing a reservation? Then you agree that we share your personal data with the provider.", "description_informal_time": "You can still cancel the reservation within {{ days_to_cancel }} days after confirmation.", "email_setup_description": "Add your email address to receive messages.", "email_setup_title": "Add email address", @@ -3408,7 +3408,8 @@ "description": "Your reservation has been made.", "title": "It worked!" }, - "voucher_image_alt": "Credit" + "voucher_image_alt": "Credit", + "description_informal": "You use your {{fund}} credit for this reservation.
Are you making a reservation? Then you agree that we share your personal data with the provider." }, "modal_logout": { "description_formal": "Are you sure you want to log out?", diff --git a/react/src/webshop/i18n/translated/fr.json b/react/src/webshop/i18n/translated/fr.json index 5b5510dfd..04897d070 100644 --- a/react/src/webshop/i18n/translated/fr.json +++ b/react/src/webshop/i18n/translated/fr.json @@ -1628,7 +1628,6 @@ }, "description_formal": "Vous utiliserez votre {{fund}}
Vous placez une réservation ? Dans ce cas, vous acceptez que nous partagions vos données personnelles avec le fournisseur.", "description_formal_time": "{{ days_to_cancel }} Vous pouvez encore annuler la réservation dans les jours qui suivent la confirmation.", - "description_informal": "Vous utilisez votre {{fund}}
Vous placez une réservation ? Dans ce cas, vous acceptez que nous partagions vos données personnelles avec le fournisseur.", "description_informal_time": "{{ days_to_cancel }} Vous pouvez encore annuler la réservation dans les jours qui suivent la confirmation.", "email_setup_description": "Ajoutez votre adresse e-mail pour recevoir les messages.", "email_setup_title": "Ajouter une adresse électronique", @@ -1693,7 +1692,8 @@ "description": "Votre réservation a été effectuée.", "title": "Cela a fonctionné !" }, - "voucher_image_alt": "Crédit" + "voucher_image_alt": "Crédit", + "description_informal": "Vous utilisez votre {{fund}}
Vous effectuez une réservation ? Dans ce cas, vous acceptez que nous partagions vos données personnelles avec le fournisseur." }, "modal": { "buttons": { @@ -2341,7 +2341,8 @@ "account": { "active_since": "Actif depuis", "last_login": "Dernière connexion", - "title": "Détails du compte" + "title": "Détails du compte", + "last_activity": "Dernière action" }, "bank_accounts": { "title": "Compte bancaire", diff --git a/react/src/webshop/i18n/translated/pl.json b/react/src/webshop/i18n/translated/pl.json index 2244b817b..2cab7040c 100644 --- a/react/src/webshop/i18n/translated/pl.json +++ b/react/src/webshop/i18n/translated/pl.json @@ -1628,7 +1628,6 @@ }, "description_formal": "Wykorzystasz swój {{fund}}
Czy dokonujesz rezerwacji? W takim przypadku zgadzasz się na udostępnienie przez nas Twoich danych osobowych dostawcy.", "description_formal_time": "{{ days_to_cancel }} Rezerwację można anulować w ciągu kilku dni od jej potwierdzenia.", - "description_informal": "Używasz swojego {{fund}}
Czy dokonujesz rezerwacji? W takim przypadku zgadzasz się, że udostępniamy Twoje dane osobowe dostawcy.", "description_informal_time": "{{ days_to_cancel }} Rezerwację można anulować w ciągu kilku dni od jej potwierdzenia.", "email_setup_description": "Dodaj swój adres e-mail, aby otrzymywać wiadomości.", "email_setup_title": "Dodaj adres e-mail", @@ -1693,7 +1692,8 @@ "description": "Rezerwacja została dokonana.", "title": "Udało się!" }, - "voucher_image_alt": "Kredyt" + "voucher_image_alt": "Kredyt", + "description_informal": "Używasz swojego {{fund}}
Czy dokonujesz rezerwacji? W takim razie zgadzasz się, że udostępniamy Twoje dane osobowe dostawcy." }, "modal": { "buttons": { @@ -2341,7 +2341,8 @@ "account": { "active_since": "Aktywny od", "last_login": "Ostatnie logowanie", - "title": "Szczegóły konta" + "title": "Szczegóły konta", + "last_activity": "Ostatnia akcja" }, "bank_accounts": { "title": "Konto bankowe", diff --git a/react/src/webshop/i18n/translated/ru.json b/react/src/webshop/i18n/translated/ru.json index ddb581402..463f90534 100644 --- a/react/src/webshop/i18n/translated/ru.json +++ b/react/src/webshop/i18n/translated/ru.json @@ -1628,7 +1628,6 @@ }, "description_formal": "Вы используете свой {{fund}}
кредит для этого бронирования. Вы бронируете номер? Тогда вы соглашаетесь с тем, что мы передаем ваши личные данные поставщику услуг.", "description_formal_time": "{{ days_to_cancel }} Вы все еще можете отменить бронирование в течение нескольких дней после подтверждения.", - "description_informal": "Вы используете свой {{fund}}
кредит для этого бронирования. Вы бронируете? Тогда вы соглашаетесь с тем, что мы передаем ваши личные данные поставщику услуг.", "description_informal_time": "{{ days_to_cancel }} Вы все еще можете отменить бронирование в течение нескольких дней после подтверждения.", "email_setup_description": "Добавьте свой адрес электронной почты для получения сообщений.", "email_setup_title": "Добавить адрес электронной почты", @@ -1693,7 +1692,8 @@ "description": "Ваша бронь сделана.", "title": "Это сработало!" }, - "voucher_image_alt": "Кредит" + "voucher_image_alt": "Кредит", + "description_informal": "Вы используете свой {{fund}}
кредит для этого бронирования. Вы бронируете? Тогда вы соглашаетесь с тем, что мы передаем ваши личные данные поставщику услуг." }, "modal": { "buttons": { @@ -2341,7 +2341,8 @@ "account": { "active_since": "Активно работает с", "last_login": "Последний вход в систему", - "title": "Детали счета" + "title": "Детали счета", + "last_activity": "Последнее действие" }, "bank_accounts": { "title": "Банковский счет", diff --git a/react/src/webshop/i18n/translated/tr.json b/react/src/webshop/i18n/translated/tr.json index d2c2e29e3..81ee6603a 100644 --- a/react/src/webshop/i18n/translated/tr.json +++ b/react/src/webshop/i18n/translated/tr.json @@ -2480,7 +2480,8 @@ "account": { "active_since": "O zamandan beri aktif", "last_login": "Son giriş", - "title": "Hesap bilgileri" + "title": "Hesap bilgileri", + "last_activity": "Son eylem" }, "bank_accounts": { "title": "Banka hesabı", @@ -3019,7 +3020,6 @@ }, "description_formal": "Sen kullanacaksın {{fund}}
Bu rezervasyon için kredi. Rezervasyon mu yapıyorsunuz? O zaman kişisel verilerinizi sağlayıcı ile paylaşmamızı kabul etmiş olursunuz.", "description_formal_time": "{{ days_to_cancel }} Rezervasyonu onaylandıktan sonraki günler içinde de iptal edebilirsiniz.", - "description_informal": "Sen kendi {{fund}}
Bu rezervasyon için kredi. Rezervasyon mu yapıyorsunuz? O zaman kişisel verilerinizi sağlayıcı ile paylaşmamızı kabul etmiş olursunuz.", "description_informal_time": "{{ days_to_cancel }} Rezervasyonu onaylandıktan sonraki günler içinde de iptal edebilirsiniz.", "email_setup_description": "Mesaj almak için e-posta adresinizi ekleyin.", "email_setup_title": "E-posta adresi ekle", @@ -3084,7 +3084,8 @@ "description": "Rezervasyonunuz yapılmıştır.", "title": "İşe yaradı!" }, - "voucher_image_alt": "Kredi" + "voucher_image_alt": "Kredi", + "description_informal": "Sen kendi {{fund}}
Bu rezervasyon için kredi. Rezervasyon mu yapıyorsunuz? O zaman kişisel verilerinizi sağlayıcı ile paylaşmamızı kabul etmiş olursunuz." }, "modal": { "buttons": { diff --git a/react/src/webshop/i18n/translated/uk.json b/react/src/webshop/i18n/translated/uk.json index 9f2cd6005..a25c118e2 100644 --- a/react/src/webshop/i18n/translated/uk.json +++ b/react/src/webshop/i18n/translated/uk.json @@ -1628,7 +1628,6 @@ }, "description_formal": "Ви використаєте свій {{fund}}
кредит для цього бронювання. Ви робите бронювання? Тоді ви погоджуєтесь, що ми передаємо ваші персональні дані постачальнику.", "description_formal_time": "{{ days_to_cancel }} Ви все ще можете скасувати бронювання протягом декількох днів після підтвердження.", - "description_informal": "Ви використовуєте свій {{fund}}
Ви використовуєте свій кредит для цього бронювання. Ви робите бронювання? Тоді ви погоджуєтесь, що ми передаємо ваші персональні дані постачальнику.", "description_informal_time": "{{ days_to_cancel }} Ви все ще можете скасувати бронювання протягом декількох днів після підтвердження.", "email_setup_description": "Додайте свою електронну адресу, щоб отримувати повідомлення.", "email_setup_title": "Додати адресу електронної пошти", @@ -1693,7 +1692,8 @@ "description": "Ваше бронювання зроблено.", "title": "Спрацювало!" }, - "voucher_image_alt": "Кредит" + "voucher_image_alt": "Кредит", + "description_informal": "Ви використовуєте свій {{fund}}
Ви використовуєте свій кредит для цього бронювання. Ви робите бронювання? Тоді ви погоджуєтесь, що ми передаємо ваші персональні дані постачальнику." }, "modal": { "buttons": { @@ -2341,7 +2341,8 @@ "account": { "active_since": "Активний з", "last_login": "Останній вхід", - "title": "Реквізити рахунку" + "title": "Реквізити рахунку", + "last_activity": "Остання дія" }, "bank_accounts": { "title": "Банківський рахунок", diff --git a/translations/cache/cache.json b/translations/cache/cache.json index ad684c125..f8804a0df 100644 --- a/translations/cache/cache.json +++ b/translations/cache/cache.json @@ -4421,7 +4421,7 @@ ], [ "modal_reserve_product.description_informal", - "Je gebruikt jouw {{fund}} tegoed voor deze reservering.
Plaatst je een reservering? Dan gaat je ermee akkoord dat wij je persoonlijke gegevens delen met de aanbieder." + "Je gebruikt jouw {{fund}} tegoed voor deze reservering.
Plaats je een reservering? Dan ga je ermee akkoord dat wij je persoonlijke gegevens delen met de aanbieder." ], [ "modal_reserve_product.description_informal_time", @@ -6347,6 +6347,10 @@ "profile.account.active_since", "Actief sinds" ], + [ + "profile.account.last_activity", + "Laatste handeling" + ], [ "profile.account.last_login", "Laatste inlog" From d9ec086a1228df9ebc36c98150744b90b6982332 Mon Sep 17 00:00:00 2001 From: dev-rminds Date: Tue, 18 Feb 2025 17:28:22 +0200 Subject: [PATCH 18/24] update profile table tooltips --- react/src/dashboard/i18n/nl/pages/identities.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/react/src/dashboard/i18n/nl/pages/identities.js b/react/src/dashboard/i18n/nl/pages/identities.js index ee3c8426b..54af27784 100644 --- a/react/src/dashboard/i18n/nl/pages/identities.js +++ b/react/src/dashboard/i18n/nl/pages/identities.js @@ -32,9 +32,9 @@ export default { birth_date: 'Dit veld bevat de geboortedatum van de persoon. Het is belangrijk voor persoonlijke identificatie, ondersteuning bij het gebruik, en om per regio inzicht te krijgen in de aanvraag en het gebruik van regelingen.', last_login: - 'Dit veld toont de datum en tijd waarop de persoon voor het laatst heeft ingelogd op het platform. Dit helpt om de activiteit van de persoon te monitoren.', + 'Dit veld toont de datum en tijd waarop de persoon voor het laatst een sessie is gestart op het platform. Dit helpt om inzicht te krijgen in de recente activiteit en betrokkenheid van de persoon.', last_activity: - 'Dit veld toont de datum en tijd waarop de persoon voor het laatst heeft ingelogd op het platform. Dit helpt om de activiteit van de persoon te monitoren.', + 'Dit veld toont de datum en tijd van de meest recente actie die de persoon op het platform heeft uitgevoerd. Dit biedt inzicht in de actuele interactie van de persoon binnen het systeem.', postal_code: 'Dit veld bevat de postcode van de persoon. Dit helpt bij persoonlijke identificatie, ondersteuning bij het gebruik, en om per regio inzicht te krijgen in de aanvraag en het gebruik van regelingen.', vouchers_count: From 6a5727a981d63ac2f9804da79e6fce56b765dc1a Mon Sep 17 00:00:00 2001 From: dev-rminds Date: Tue, 18 Feb 2025 18:06:30 +0200 Subject: [PATCH 19/24] fix sessions start at date --- .../components/pages/identity-security/SecuritySessions.tsx | 2 +- react/src/dashboard/props/models/Session.tsx | 4 ++-- .../components/pages/identity-security/SecuritySessions.tsx | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/react/src/dashboard/components/pages/identity-security/SecuritySessions.tsx b/react/src/dashboard/components/pages/identity-security/SecuritySessions.tsx index 636b5efe6..af40e562c 100644 --- a/react/src/dashboard/components/pages/identity-security/SecuritySessions.tsx +++ b/react/src/dashboard/components/pages/identity-security/SecuritySessions.tsx @@ -191,7 +191,7 @@ export default function SecuritySessions() {
Sessie gestart:
-
{session.started_at_locale}
+
{session.created_at_locale}
diff --git a/react/src/dashboard/props/models/Session.tsx b/react/src/dashboard/props/models/Session.tsx index ea4ba843b..2a5970098 100644 --- a/react/src/dashboard/props/models/Session.tsx +++ b/react/src/dashboard/props/models/Session.tsx @@ -46,8 +46,8 @@ export default interface Session { identity_address: string; active: boolean; current: boolean; - started_at: string; - started_at_locale: string; + created_at: string; + created_at_locale: string; client_type?: string; client_version?: string; locations: Array; diff --git a/react/src/webshop/components/pages/identity-security/SecuritySessions.tsx b/react/src/webshop/components/pages/identity-security/SecuritySessions.tsx index 18a3bc88a..7c5bbcf06 100644 --- a/react/src/webshop/components/pages/identity-security/SecuritySessions.tsx +++ b/react/src/webshop/components/pages/identity-security/SecuritySessions.tsx @@ -208,7 +208,7 @@ export default function SecuritySessions() { {translate('security_sessions.details.started_at')}
- {session.started_at_locale} + {session.created_at_locale}
From 9379a14c0593230ef4af620915e148ce44d0db73 Mon Sep 17 00:00:00 2001 From: dev-rminds Date: Wed, 19 Feb 2025 17:26:23 +0200 Subject: [PATCH 20/24] fix meapp page translations and update profile age record --- .../identitities-show/IdentitiesShow.tsx | 13 +- .../modals/ModalEditProfileRecords.tsx | 112 +++++++++++------- .../props/models/Sponsor/SponsorIdentity.tsx | 1 - .../webshop/components/pages/me-app/MeApp.tsx | 7 +- .../components/pages/profile/Profile.tsx | 12 +- react/src/webshop/i18n/nl/pages/me.mjs | 2 +- react/src/webshop/i18n/nl/pages/profile.mjs | 1 + react/src/webshop/i18n/translated/ar.json | 7 +- react/src/webshop/i18n/translated/de.json | 7 +- react/src/webshop/i18n/translated/en-US.json | 7 +- react/src/webshop/i18n/translated/fr.json | 7 +- react/src/webshop/i18n/translated/pl.json | 7 +- react/src/webshop/i18n/translated/ru.json | 7 +- react/src/webshop/i18n/translated/tr.json | 7 +- react/src/webshop/i18n/translated/uk.json | 7 +- translations/cache/cache.json | 6 +- 16 files changed, 137 insertions(+), 73 deletions(-) diff --git a/react/src/dashboard/components/pages/identitities-show/IdentitiesShow.tsx b/react/src/dashboard/components/pages/identitities-show/IdentitiesShow.tsx index 79c99c0aa..e702eb7b5 100644 --- a/react/src/dashboard/components/pages/identitities-show/IdentitiesShow.tsx +++ b/react/src/dashboard/components/pages/identitities-show/IdentitiesShow.tsx @@ -23,6 +23,8 @@ import IdentityBankAccountsCard from './cards/IdentityBankAccountsCard'; import IdentityVouchersCard from './cards/IdentityVouchersCard'; import IdentityPayoutsCard from './cards/IdentityPayoutsCard'; import IdentityRecordKeyValueWithHistory from './elements/IdentityRecordKeyValueWithHistory'; +import { differenceInYears } from 'date-fns'; +import { dateParse } from '../../../helpers/dates'; export default function IdentitiesShow() { const openModal = useOpenModal(); @@ -54,6 +56,12 @@ export default function IdentitiesShow() { return identity?.email_verified ? identity?.email_verified : []; }, [identity?.email_verified]); + const identityCalculatedAge = useMemo(() => { + return identity?.records?.birth_date?.[0]?.value + ? Math.max(differenceInYears(new Date(), dateParse(identity?.records?.birth_date?.[0]?.value)), 0) + : null; + }, [identity?.records?.birth_date]); + const fetchIdentity = useCallback(() => { setProgress(0); @@ -133,7 +141,6 @@ export default function IdentitiesShow() { 'given_name', 'family_name', 'birth_date', - 'age', 'gender', 'marital_status', 'client_number', @@ -156,8 +163,8 @@ export default function IdentitiesShow() { value: , }, { - label: recordTypesByKey?.age?.name, - value: , + label: 'Leeftijd', + value: identityCalculatedAge, }, { label: recordTypesByKey?.gender?.name, diff --git a/react/src/dashboard/components/pages/identitities-show/modals/ModalEditProfileRecords.tsx b/react/src/dashboard/components/pages/identitities-show/modals/ModalEditProfileRecords.tsx index ca41f4686..2aecc8992 100644 --- a/react/src/dashboard/components/pages/identitities-show/modals/ModalEditProfileRecords.tsx +++ b/react/src/dashboard/components/pages/identitities-show/modals/ModalEditProfileRecords.tsx @@ -1,4 +1,4 @@ -import React, { Fragment } from 'react'; +import React, { Fragment, useCallback } from 'react'; import { ModalState } from '../../../../modules/modals/context/ModalContext'; import useFormBuilder from '../../../../hooks/useFormBuilder'; import Organization from '../../../../props/models/Organization'; @@ -15,6 +15,7 @@ import DatePickerControl from '../../../elements/forms/controls/DatePickerContro import { dateFormat, dateParse } from '../../../../helpers/dates'; import useTranslate from '../../../../hooks/useTranslate'; import SelectControl from '../../../elements/select-control/SelectControl'; +import { differenceInYears } from 'date-fns'; export default function ModalEditProfileRecords({ modal, @@ -72,6 +73,10 @@ export default function ModalEditProfileRecords({ }, ); + const calculatedAge = useCallback((value: string) => { + return value ? Math.max(differenceInYears(new Date(), dateParse(value)), 0) : null; + }, []); + const { submit: formSubmit } = form; return ( @@ -113,47 +118,74 @@ export default function ModalEditProfileRecords({ })} {recordTypes?.map((recordType) => { return ( - ( - - {recordType.key === 'birth_date' ? ( - form.update({ [recordType.key]: dateFormat(date) })} - /> - ) : ( - - {recordType?.type === 'select' ? ( - form.update({ [recordType.key]: value })} - /> - ) : ( - form.update({ [recordType.key]: e.target.value })} - /> - )} - + + ( + + {recordType.key === 'birth_date' ? ( + form.update({ [recordType.key]: dateFormat(date) })} + /> + ) : ( + + {recordType?.type === 'select' ? ( + + form.update({ [recordType.key]: value }) + } + /> + ) : ( + form.update({ [recordType.key]: e.target.value })} + /> + )} + + )} + + )} + /> + + {recordType?.key === 'birth_date' && ( + ( + + form.update({ [recordType.key]: e.target.value })} + /> + )} - + /> )} - /> + ); })} diff --git a/react/src/dashboard/props/models/Sponsor/SponsorIdentity.tsx b/react/src/dashboard/props/models/Sponsor/SponsorIdentity.tsx index b9dd58574..61bc20a68 100644 --- a/react/src/dashboard/props/models/Sponsor/SponsorIdentity.tsx +++ b/react/src/dashboard/props/models/Sponsor/SponsorIdentity.tsx @@ -49,7 +49,6 @@ export type ProfileRecordTypes = | 'postal_code' | 'house_composition' | 'gender' - | 'age' | 'neighborhood_name' | 'living_arrangement' | 'marital_status' diff --git a/react/src/webshop/components/pages/me-app/MeApp.tsx b/react/src/webshop/components/pages/me-app/MeApp.tsx index 594bea4de..542600b29 100644 --- a/react/src/webshop/components/pages/me-app/MeApp.tsx +++ b/react/src/webshop/components/pages/me-app/MeApp.tsx @@ -4,6 +4,7 @@ import AppLinks from '../../elements/app-links/AppLinks'; import useAssetUrl from '../../../hooks/useAssetUrl'; import BlockShowcase from '../../elements/block-showcase/BlockShowcase'; import useTranslate from '../../../../dashboard/hooks/useTranslate'; +import TranslateHtml from '../../../../dashboard/components/elements/translate-html/TranslateHtml'; export default function MeApp() { const envData = useEnvData(); @@ -27,7 +28,11 @@ export default function MeApp() {

{translate('me.download.title')}

-

{translate('me.download.description', { download_link: envData.config.me_app_link })}

+ } + i18n={'me.download.description'} + values={{ download_link: envData.config.me_app_link }} + />
diff --git a/react/src/webshop/components/pages/profile/Profile.tsx b/react/src/webshop/components/pages/profile/Profile.tsx index 59f717b09..1b4bd6d67 100644 --- a/react/src/webshop/components/pages/profile/Profile.tsx +++ b/react/src/webshop/components/pages/profile/Profile.tsx @@ -10,6 +10,8 @@ import { useRecordTypeService } from '../../../../dashboard/services/RecordTypeS import IdentityRecordKeyValueListHistory from './elements/IdentityRecordKeyValueListHistory'; import IdentityContactInformationCard from './cards/IdentityContactInformationCard'; import { useProfileService } from '../../../../dashboard/services/ProfileService'; +import { differenceInYears } from 'date-fns'; +import { dateParse } from '../../../../dashboard/helpers/dates'; export default function Profile() { const translate = useTranslate(); @@ -31,6 +33,12 @@ export default function Profile() { }, {}) as ProfileRecords; }, [recordTypes]); + const identityCalculatedAge = useMemo(() => { + return profile?.records?.birth_date?.[0]?.value + ? Math.max(differenceInYears(new Date(), dateParse(profile?.records?.birth_date?.[0]?.value)), 0) + : null; + }, [profile?.records?.birth_date]); + const fetchRecordTypes = useCallback(() => { setProgress(0); @@ -89,8 +97,8 @@ export default function Profile() { ), }, { - label: recordTypesByKey?.age?.name, - value: , + label: translate('profile.personal.age'), + value: identityCalculatedAge || '-', }, { label: recordTypesByKey?.gender?.name, diff --git a/react/src/webshop/i18n/nl/pages/me.mjs b/react/src/webshop/i18n/nl/pages/me.mjs index 096c2194c..46e2695b4 100644 --- a/react/src/webshop/i18n/nl/pages/me.mjs +++ b/react/src/webshop/i18n/nl/pages/me.mjs @@ -11,6 +11,6 @@ export default { download: { title: 'Download Me op je telefoon of tablet', description: - 'Download de Me-app via onderstaande app stores.
Klik hier om direct de juiste app store te openen op je telefoon of tablet.', + 'Download de Me-app via onderstaande app stores. Klik hier om direct de juiste app store te openen op je telefoon of tablet.', }, }; diff --git a/react/src/webshop/i18n/nl/pages/profile.mjs b/react/src/webshop/i18n/nl/pages/profile.mjs index bda46a6b9..3cfb50276 100644 --- a/react/src/webshop/i18n/nl/pages/profile.mjs +++ b/react/src/webshop/i18n/nl/pages/profile.mjs @@ -8,6 +8,7 @@ export default { personal: { title: 'Persoonsgegevens', bsn: 'BSN', + age: 'Leeftijd', }, account: { diff --git a/react/src/webshop/i18n/translated/ar.json b/react/src/webshop/i18n/translated/ar.json index 45193b892..040c52d19 100644 --- a/react/src/webshop/i18n/translated/ar.json +++ b/react/src/webshop/i18n/translated/ar.json @@ -1078,8 +1078,8 @@ }, "description": "تطبيق Me هو عبارة عن محفظة رقمية وسجِّل نقدي في جهاز واحد. تستخدم البلديات تطبيق Me-app لإصدار الأرصدة. باستخدام التطبيق، يمكن للمقيمين إدارة أرصدتهم بسهولة. يستخدم مقدمو الخدمات التطبيق لمسح رموز QR.", "download": { - "description": "قم بتنزيل تطبيق Me من متاجر التطبيقات أدناه. انقر هنا لفتح متجر التطبيقات المناسب مباشرةً على هاتفك أو جهازك اللوحي.", - "title": "قم بتنزيل Me على هاتفك أو جهازك اللوحي" + "title": "قم بتنزيل Me على هاتفك أو جهازك اللوحي", + "description": "قم بتنزيل تطبيق Me من متاجر التطبيقات أدناه. انقر هنا لفتح متجر التطبيقات المناسب مباشرةً على هاتفك أو جهازك اللوحي." }, "title": "نبذة عن تطبيق Me", "img_alt": "أنا-التطبيق" @@ -2512,7 +2512,8 @@ }, "personal": { "bsn": "BSN", - "title": "البيانات الشخصية" + "title": "البيانات الشخصية", + "age": "العمر" }, "title": "البيانات", "household": { diff --git a/react/src/webshop/i18n/translated/de.json b/react/src/webshop/i18n/translated/de.json index ff0a35f6f..e056ba141 100644 --- a/react/src/webshop/i18n/translated/de.json +++ b/react/src/webshop/i18n/translated/de.json @@ -1314,8 +1314,8 @@ }, "description": "Die Me-App ist eine digitale Geldbörse und eine Registrierkasse in einem. Die Kommunen nutzen die Me-App, um Kredite zu vergeben. Mit der App können die Einwohner ihre Guthaben einfach verwalten. Anbieter nutzen die App, um QR-Codes zu scannen.", "download": { - "description": "Laden Sie die Me-App aus den unten stehenden App-Stores herunter. Klicken Sie hier, um den entsprechenden App-Store direkt auf Ihrem Telefon oder Tablet zu öffnen.", - "title": "Laden Sie Me auf Ihr Handy oder Tablet herunter" + "title": "Laden Sie Me auf Ihr Handy oder Tablet herunter", + "description": "Laden Sie die Me-App aus den unten stehenden App-Stores herunter. Klicken Sie hier, um den entsprechenden App-Store direkt auf Ihrem Telefon oder Tablet zu öffnen." }, "title": "Über die Me-App", "img_alt": "Me-app" @@ -2370,7 +2370,8 @@ }, "personal": { "bsn": "BSN", - "title": "Persönliche Daten" + "title": "Persönliche Daten", + "age": "Alter" }, "title": "Daten", "household": { diff --git a/react/src/webshop/i18n/translated/en-US.json b/react/src/webshop/i18n/translated/en-US.json index 6be691ef3..abff090c5 100644 --- a/react/src/webshop/i18n/translated/en-US.json +++ b/react/src/webshop/i18n/translated/en-US.json @@ -1267,8 +1267,8 @@ }, "description": "The Me app is a digital wallet and cash register in one. Municipalities use the Me app to issue credits. The app allows residents to easily manage their balances. Providers use the app to scan QR codes.", "download": { - "description": "Download the Me app from the app stores below. Click here to directly open the appropriate app store on your phone or tablet.", - "title": "Download Me on your phone or tablet" + "title": "Download Me on your phone or tablet", + "description": "Download the Me app from the app stores below. Click here to directly open the appropriate app store on your phone or tablet." }, "title": "About the Me app", "img_alt": "Me-app" @@ -2217,7 +2217,8 @@ }, "personal": { "bsn": "BSN", - "title": "Personal data" + "title": "Personal data", + "age": "Age" }, "title": "Data", "household": { diff --git a/react/src/webshop/i18n/translated/fr.json b/react/src/webshop/i18n/translated/fr.json index d484db6f0..e7e389558 100644 --- a/react/src/webshop/i18n/translated/fr.json +++ b/react/src/webshop/i18n/translated/fr.json @@ -1314,8 +1314,8 @@ }, "description": "L'application Me est à la fois un portefeuille numérique et une caisse enregistreuse. Les municipalités utilisent l'application Me pour émettre des crédits. Grâce à l'application, les résidents peuvent facilement gérer leurs crédits. Les prestataires utilisent l'application pour scanner les codes QR.", "download": { - "description": "Téléchargez l'application Me via les magasins d'applications ci-dessous. Cliquez ici pour ouvrir directement le magasin d'applications approprié sur votre téléphone ou votre tablette.", - "title": "Téléchargez Me sur votre téléphone ou tablette" + "title": "Téléchargez Me sur votre téléphone ou tablette", + "description": "Téléchargez l'application Me dans les magasins d'applications ci-dessous. Cliquez ici pour ouvrir directement le magasin d'applications approprié sur votre téléphone ou votre tablette." }, "title": "À propos de l'application Me", "img_alt": "Me-app" @@ -2370,7 +2370,8 @@ }, "personal": { "bsn": "BSN", - "title": "Données personnelles" + "title": "Données personnelles", + "age": "L'âge" }, "title": "Données", "household": { diff --git a/react/src/webshop/i18n/translated/pl.json b/react/src/webshop/i18n/translated/pl.json index 87ece25ac..f4a7caaa8 100644 --- a/react/src/webshop/i18n/translated/pl.json +++ b/react/src/webshop/i18n/translated/pl.json @@ -1314,8 +1314,8 @@ }, "description": "Aplikacja Me to cyfrowy portfel i kasa fiskalna w jednym. Gminy używają aplikacji Me do wydawania kredytów. Dzięki aplikacji mieszkańcy mogą łatwo zarządzać swoimi kredytami. Dostawcy używają aplikacji do skanowania kodów QR.", "download": { - "description": "Pobierz aplikację Me z poniższych sklepów z aplikacjami. Kliknij tutaj, aby bezpośrednio otworzyć odpowiedni sklep z aplikacjami na telefonie lub tablecie.", - "title": "Pobierz aplikację Me na swój telefon lub tablet" + "title": "Pobierz aplikację Me na swój telefon lub tablet", + "description": "Pobierz aplikację Me z poniższych sklepów z aplikacjami. Kliknij tutaj, aby bezpośrednio otworzyć odpowiedni sklep z aplikacjami na telefonie lub tablecie." }, "title": "Informacje o aplikacji Me", "img_alt": "Me-app" @@ -2370,7 +2370,8 @@ }, "personal": { "bsn": "BSN", - "title": "Dane osobowe" + "title": "Dane osobowe", + "age": "Wiek" }, "title": "Dane", "household": { diff --git a/react/src/webshop/i18n/translated/ru.json b/react/src/webshop/i18n/translated/ru.json index 140762b4f..1d71bcaeb 100644 --- a/react/src/webshop/i18n/translated/ru.json +++ b/react/src/webshop/i18n/translated/ru.json @@ -1314,8 +1314,8 @@ }, "description": "Приложение Me - это цифровой кошелек и кассовый аппарат в одном лице. Муниципалитеты используют Me-приложение для выдачи кредитов. С помощью приложения жители могут легко управлять своими кредитами. Поставщики услуг используют приложение для сканирования QR-кодов.", "download": { - "description": "Загрузите приложение Me из указанных ниже магазинов приложений. Нажмите здесь, чтобы открыть соответствующий магазин приложений на вашем телефоне или планшете.", - "title": "Загрузите меня на свой телефон или планшет" + "title": "Загрузите меня на свой телефон или планшет", + "description": "Загрузите приложение Me из указанных ниже магазинов приложений. Нажмите здесь, чтобы открыть соответствующий магазин приложений на вашем телефоне или планшете." }, "title": "О приложении \"Я", "img_alt": "Me-app" @@ -2370,7 +2370,8 @@ }, "personal": { "bsn": "BSN", - "title": "Персональные данные" + "title": "Персональные данные", + "age": "Возраст" }, "title": "Данные", "household": { diff --git a/react/src/webshop/i18n/translated/tr.json b/react/src/webshop/i18n/translated/tr.json index 5023d7269..fc319e762 100644 --- a/react/src/webshop/i18n/translated/tr.json +++ b/react/src/webshop/i18n/translated/tr.json @@ -1034,8 +1034,8 @@ }, "description": "Me uygulaması dijital bir cüzdan ve yazar kasadır. Belediyeler kredi vermek için Me-uygulamasını kullanmaktadır. Uygulama sayesinde vatandaşlar kredilerini kolayca yönetebilir. Sağlayıcılar QR kodlarını taramak için uygulamayı kullanır.", "download": { - "description": "Me uygulamasını aşağıdaki uygulama mağazalarından indirin. Telefonunuzda veya tabletinizde ilgili uygulama mağazasını doğrudan açmak için buraya tıklayın.", - "title": "Beni telefonunuza veya tabletinize indirin" + "title": "Beni telefonunuza veya tabletinize indirin", + "description": "Me uygulamasını aşağıdaki uygulama mağazalarından indirin. Telefonunuzda veya tabletinizde ilgili uygulama mağazasını doğrudan açmak için buraya tıklayın." }, "title": "Me uygulaması hakkında", "img_alt": "Me-app" @@ -2512,7 +2512,8 @@ }, "personal": { "bsn": "BSN", - "title": "Kişisel veriler" + "title": "Kişisel veriler", + "age": "Yaş" }, "title": "Veri", "household": { diff --git a/react/src/webshop/i18n/translated/uk.json b/react/src/webshop/i18n/translated/uk.json index b4d72a20d..e444e46d1 100644 --- a/react/src/webshop/i18n/translated/uk.json +++ b/react/src/webshop/i18n/translated/uk.json @@ -1314,8 +1314,8 @@ }, "description": "Додаток Me - це цифровий гаманець і касовий апарат в одному. Муніципалітети використовують додаток Me для видачі кредитів. За допомогою додатку мешканці можуть легко керувати своїми кредитами. Постачальники використовують додаток для сканування QR-кодів.", "download": { - "description": "Завантажте додаток Me з наведених нижче магазинів додатків. Натисніть тут, щоб безпосередньо відкрити відповідний магазин додатків на вашому телефоні або планшеті.", - "title": "Завантажте Мене на телефон або планшет" + "title": "Завантажте Мене на телефон або планшет", + "description": "Завантажте додаток Me із зазначених нижче магазинів додатків. Натисніть тут, щоб безпосередньо відкрити відповідний магазин додатків на вашому телефоні або планшеті." }, "title": "Про додаток \"Я", "img_alt": "Me-app" @@ -2370,7 +2370,8 @@ }, "personal": { "bsn": "BSN", - "title": "Персональні дані" + "title": "Персональні дані", + "age": "Вік" }, "title": "Дані", "household": { diff --git a/translations/cache/cache.json b/translations/cache/cache.json index be79ef483..ed904d46f 100644 --- a/translations/cache/cache.json +++ b/translations/cache/cache.json @@ -3561,7 +3561,7 @@ ], [ "me.download.description", - "Download de Me-app via onderstaande app stores. Klik hier om direct de juiste app store te openen op je telefoon of tablet." + "Download de Me-app via onderstaande app stores. Klik hier om direct de juiste app store te openen op je telefoon of tablet." ], [ "me.download.title", @@ -6435,6 +6435,10 @@ "profile.household.title", "Huishouden" ], + [ + "profile.personal.age", + "Leeftijd" + ], [ "profile.personal.bsn", "BSN" From b55bb413d35723d99ede8178072081fbd892d13b Mon Sep 17 00:00:00 2001 From: Yaroslav Kosterin Date: Wed, 19 Feb 2025 17:40:54 +0200 Subject: [PATCH 21/24] fix translations for external voucher webshop --- react/src/webshop/i18n/nl/pages/voucher.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/react/src/webshop/i18n/nl/pages/voucher.mjs b/react/src/webshop/i18n/nl/pages/voucher.mjs index e5dd55dfb..42f42dbaf 100644 --- a/react/src/webshop/i18n/nl/pages/voucher.mjs +++ b/react/src/webshop/i18n/nl/pages/voucher.mjs @@ -72,7 +72,7 @@ export default { cancel: 'Annuleren', stop_participation: 'Stop deelname', }, - voucher_card_combined: { + card_combined: { header: { title: 'Hoe werkt het?', }, From c951e4094107e65d0d390683ef10b7ad887700f2 Mon Sep 17 00:00:00 2001 From: dev-rminds Date: Wed, 19 Feb 2025 17:45:41 +0200 Subject: [PATCH 22/24] update translations and add profile link to menu on webshop --- .../identitities-show/cards/IdentityBankAccountsCard.tsx | 2 +- .../top-navbar/desktop/TopNavbarDesktopMenuUser.tsx | 4 ++++ react/src/webshop/i18n/nl/layout/top_navbar.mjs | 3 ++- react/src/webshop/i18n/translated/ar.json | 7 ++++--- react/src/webshop/i18n/translated/de.json | 7 ++++--- react/src/webshop/i18n/translated/en-US.json | 7 ++++--- react/src/webshop/i18n/translated/fr.json | 7 ++++--- react/src/webshop/i18n/translated/pl.json | 7 ++++--- react/src/webshop/i18n/translated/ru.json | 7 ++++--- react/src/webshop/i18n/translated/tr.json | 7 ++++--- react/src/webshop/i18n/translated/uk.json | 7 ++++--- translations/cache/cache.json | 8 ++++++-- 12 files changed, 45 insertions(+), 28 deletions(-) diff --git a/react/src/dashboard/components/pages/identitities-show/cards/IdentityBankAccountsCard.tsx b/react/src/dashboard/components/pages/identitities-show/cards/IdentityBankAccountsCard.tsx index a326eb07e..ba2cc4e25 100644 --- a/react/src/dashboard/components/pages/identitities-show/cards/IdentityBankAccountsCard.tsx +++ b/react/src/dashboard/components/pages/identitities-show/cards/IdentityBankAccountsCard.tsx @@ -106,7 +106,7 @@ export default function IdentityBankAccountsCard({ }, ]}> {identity?.bank_accounts.length === 0 ? ( - + ) : ( {identity?.bank_accounts?.map((bank_account, index) => ( diff --git a/react/src/webshop/components/elements/top-navbar/desktop/TopNavbarDesktopMenuUser.tsx b/react/src/webshop/components/elements/top-navbar/desktop/TopNavbarDesktopMenuUser.tsx index 7cdafe486..1c3ae4bbd 100644 --- a/react/src/webshop/components/elements/top-navbar/desktop/TopNavbarDesktopMenuUser.tsx +++ b/react/src/webshop/components/elements/top-navbar/desktop/TopNavbarDesktopMenuUser.tsx @@ -177,6 +177,10 @@ export const TopNavbarDesktopMenuUser = () => { {translate('top_navbar.user_menu.preferences_notifications')} + + + {translate('top_navbar.user_menu.profile')} + {envData.config.sessions && ( diff --git a/react/src/webshop/i18n/nl/layout/top_navbar.mjs b/react/src/webshop/i18n/nl/layout/top_navbar.mjs index 44eb33e78..b226743b5 100644 --- a/react/src/webshop/i18n/nl/layout/top_navbar.mjs +++ b/react/src/webshop/i18n/nl/layout/top_navbar.mjs @@ -130,7 +130,7 @@ export default { notifications: 'Notificaties', preferences_notifications: 'Notificatievoorkeuren', preferences_emails: 'E-mailinstellingen', - records: 'Profiel', + profile: 'Gegevens', funds: 'Alle tegoeden', security: 'Beveiliging', sessions: 'Sessies', @@ -194,6 +194,7 @@ export default { payouts: 'Uitbetalingen', notifications: 'Notificaties', preferences_notifications: 'Notificatievoorkeuren', + profile: 'Gegevens', security_sessions: 'Sessies', preferences_emails: 'E-mail instellingen', security_2fa: 'Beveiliging', diff --git a/react/src/webshop/i18n/translated/ar.json b/react/src/webshop/i18n/translated/ar.json index 040c52d19..6deb7e482 100644 --- a/react/src/webshop/i18n/translated/ar.json +++ b/react/src/webshop/i18n/translated/ar.json @@ -611,7 +611,6 @@ }, "preferences_emails": "إعدادات البريد الإلكتروني", "preferences_notifications": "تفضيلات الإخطار", - "records": "الملف الشخصي", "reimbursements": "استرداد التكاليف", "reservations": "الحجوزات", "schagen": { @@ -631,7 +630,8 @@ }, "winterswijk": { "funds": "تفعيل" - } + }, + "profile": "البيانات" }, "groningen": { "voucher": "بطاقة مدينتي" @@ -741,7 +741,8 @@ "security_2fa": "الأمن", "security_sessions": "الجلسات", "aria_label": "قائمة المستخدم", - "title": "شخصي" + "title": "شخصي", + "profile": "البيانات" }, "main_menu": "القائمة الرئيسية", "open_home": "العودة إلى الصفحة الرئيسية", diff --git a/react/src/webshop/i18n/translated/de.json b/react/src/webshop/i18n/translated/de.json index e056ba141..3699ffc94 100644 --- a/react/src/webshop/i18n/translated/de.json +++ b/react/src/webshop/i18n/translated/de.json @@ -3034,7 +3034,6 @@ }, "preferences_emails": "E-Mail-Einstellungen", "preferences_notifications": "Einstellungen für Benachrichtigungen", - "records": "Profil", "reimbursements": "Kostendeckung", "reservations": "Reservierungen", "schagen": { @@ -3054,7 +3053,8 @@ }, "winterswijk": { "funds": "Aktivieren Sie" - } + }, + "profile": "Daten" }, "groningen": { "voucher": "Meine Stadtkarte" @@ -3164,7 +3164,8 @@ "security_2fa": "Sicherheit", "security_sessions": "Sitzungen", "aria_label": "Benutzermenü", - "title": "Persönlich" + "title": "Persönlich", + "profile": "Daten" }, "main_menu": "Hauptmenü", "open_home": "Zurück zur Hauptseite", diff --git a/react/src/webshop/i18n/translated/en-US.json b/react/src/webshop/i18n/translated/en-US.json index abff090c5..29c19d7f0 100644 --- a/react/src/webshop/i18n/translated/en-US.json +++ b/react/src/webshop/i18n/translated/en-US.json @@ -207,7 +207,6 @@ }, "preferences_emails": "Email settings", "preferences_notifications": "Notification preferences", - "records": "Profile", "reimbursements": "Cost recovery", "reservations": "Reservations", "schagen": { @@ -227,7 +226,8 @@ }, "winterswijk": { "funds": "Activate" - } + }, + "profile": "Data" }, "groningen": { "voucher": "My City Pass" @@ -337,7 +337,8 @@ "security_2fa": "Security", "security_sessions": "Sessions", "aria_label": "User menu", - "title": "Personal" + "title": "Personal", + "profile": "Data" }, "main_menu": "Main menu", "open_home": "Back to main page", diff --git a/react/src/webshop/i18n/translated/fr.json b/react/src/webshop/i18n/translated/fr.json index e7e389558..e9683f873 100644 --- a/react/src/webshop/i18n/translated/fr.json +++ b/react/src/webshop/i18n/translated/fr.json @@ -3034,7 +3034,6 @@ }, "preferences_emails": "Paramètres du courrier électronique", "preferences_notifications": "Préférences de notification", - "records": "Profil", "reimbursements": "Recouvrement des coûts", "reservations": "Réservations", "schagen": { @@ -3054,7 +3053,8 @@ }, "winterswijk": { "funds": "Activer" - } + }, + "profile": "Données" }, "groningen": { "voucher": "Ma carte de ville" @@ -3164,7 +3164,8 @@ "security_2fa": "Sécurité", "security_sessions": "Sessions", "aria_label": "Menu utilisateur", - "title": "Personnel" + "title": "Personnel", + "profile": "Données" }, "main_menu": "Menu principal", "open_home": "Retour à la page principale", diff --git a/react/src/webshop/i18n/translated/pl.json b/react/src/webshop/i18n/translated/pl.json index f4a7caaa8..e0dea08a6 100644 --- a/react/src/webshop/i18n/translated/pl.json +++ b/react/src/webshop/i18n/translated/pl.json @@ -3034,7 +3034,6 @@ }, "preferences_emails": "Ustawienia poczty e-mail", "preferences_notifications": "Preferencje powiadomień", - "records": "Profil", "reimbursements": "Zwrot kosztów", "reservations": "Rezerwacje", "schagen": { @@ -3054,7 +3053,8 @@ }, "winterswijk": { "funds": "Aktywuj" - } + }, + "profile": "Dane" }, "groningen": { "voucher": "Moja karta miejska" @@ -3164,7 +3164,8 @@ "security_2fa": "Bezpieczeństwo", "security_sessions": "Sesje", "aria_label": "Menu użytkownika", - "title": "Osobiste" + "title": "Osobiste", + "profile": "Dane" }, "main_menu": "Menu główne", "open_home": "Powrót do strony głównej", diff --git a/react/src/webshop/i18n/translated/ru.json b/react/src/webshop/i18n/translated/ru.json index 1d71bcaeb..8123062ba 100644 --- a/react/src/webshop/i18n/translated/ru.json +++ b/react/src/webshop/i18n/translated/ru.json @@ -3034,7 +3034,6 @@ }, "preferences_emails": "Настройки электронной почты", "preferences_notifications": "Параметры уведомлений", - "records": "Профиль", "reimbursements": "Возмещение затрат", "reservations": "Бронирование", "schagen": { @@ -3054,7 +3053,8 @@ }, "winterswijk": { "funds": "Активируйте" - } + }, + "profile": "Данные" }, "groningen": { "voucher": "Карта моего города" @@ -3164,7 +3164,8 @@ "security_2fa": "Безопасность", "security_sessions": "Сессии", "aria_label": "Меню пользователя", - "title": "Личный" + "title": "Личный", + "profile": "Данные" }, "main_menu": "Главное меню", "open_home": "Назад к главной странице", diff --git a/react/src/webshop/i18n/translated/tr.json b/react/src/webshop/i18n/translated/tr.json index fc319e762..491b1c694 100644 --- a/react/src/webshop/i18n/translated/tr.json +++ b/react/src/webshop/i18n/translated/tr.json @@ -611,7 +611,6 @@ }, "preferences_emails": "E-posta ayarları", "preferences_notifications": "Bildirim tercihleri", - "records": "Profil", "reimbursements": "Maliyet geri kazanımı", "reservations": "Rezervasyonlar", "schagen": { @@ -631,7 +630,8 @@ }, "winterswijk": { "funds": "Etkinleştir" - } + }, + "profile": "Veri" }, "groningen": { "voucher": "Şehir Kartım" @@ -741,7 +741,8 @@ "security_2fa": "Güvenlik", "security_sessions": "Oturumlar", "aria_label": "Kullanıcı menüsü", - "title": "Kişisel" + "title": "Kişisel", + "profile": "Veri" }, "main_menu": "Ana menü", "open_home": "Ana sayfaya geri dön", diff --git a/react/src/webshop/i18n/translated/uk.json b/react/src/webshop/i18n/translated/uk.json index e444e46d1..09aef47a7 100644 --- a/react/src/webshop/i18n/translated/uk.json +++ b/react/src/webshop/i18n/translated/uk.json @@ -3034,7 +3034,6 @@ }, "preferences_emails": "Налаштування електронної пошти", "preferences_notifications": "Налаштування сповіщень", - "records": "Профіль", "reimbursements": "Відшкодування витрат", "reservations": "Бронювання", "schagen": { @@ -3054,7 +3053,8 @@ }, "winterswijk": { "funds": "Активувати" - } + }, + "profile": "Дані" }, "groningen": { "voucher": "Моя міська картка" @@ -3164,7 +3164,8 @@ "security_2fa": "Безпека", "security_sessions": "Сесії", "aria_label": "Меню користувача", - "title": "Особисте" + "title": "Особисте", + "profile": "Дані" }, "main_menu": "Головне меню", "open_home": "Повернутися на головну сторінку", diff --git a/translations/cache/cache.json b/translations/cache/cache.json index ed904d46f..8e4536a99 100644 --- a/translations/cache/cache.json +++ b/translations/cache/cache.json @@ -8040,8 +8040,8 @@ "Notificatievoorkeuren" ], [ - "top_navbar.buttons.mobile.dropdown.records", - "Profiel" + "top_navbar.buttons.mobile.dropdown.profile", + "Gegevens" ], [ "top_navbar.buttons.mobile.dropdown.reimbursements", @@ -8343,6 +8343,10 @@ "top_navbar.user_menu.preferences_notifications", "Notificatievoorkeuren" ], + [ + "top_navbar.user_menu.profile", + "Gegevens" + ], [ "top_navbar.user_menu.providers", "Aanbieders" From 1a4f6d0ac45d6bceaa0b0fa47852281a01cfd454 Mon Sep 17 00:00:00 2001 From: dev-rminds Date: Wed, 19 Feb 2025 18:00:16 +0200 Subject: [PATCH 23/24] update translations --- react/src/webshop/i18n/translated/ar.json | 6 +- react/src/webshop/i18n/translated/de.json | 8 +-- react/src/webshop/i18n/translated/en-US.json | 42 +++++------ react/src/webshop/i18n/translated/fr.json | 6 +- react/src/webshop/i18n/translated/pl.json | 6 +- react/src/webshop/i18n/translated/ru.json | 6 +- react/src/webshop/i18n/translated/tr.json | 6 +- react/src/webshop/i18n/translated/uk.json | 6 +- translations/cache/cache.json | 74 ++++++++++---------- 9 files changed, 80 insertions(+), 80 deletions(-) diff --git a/react/src/webshop/i18n/translated/ar.json b/react/src/webshop/i18n/translated/ar.json index 00c96830d..d746347b4 100644 --- a/react/src/webshop/i18n/translated/ar.json +++ b/react/src/webshop/i18n/translated/ar.json @@ -2009,7 +2009,7 @@ "title": "المعاملات", "top_up": "ترقية" }, - "voucher_card_combined": { + "card_combined": { "header": { "title": "كيف تعمل؟" }, @@ -3022,7 +3022,6 @@ }, "description_formal": "سوف تستخدم رصيدك {{fund}}
رصيدك لهذا الحجز هل تقوم بالحجز؟ إذن أنت توافق على مشاركة بياناتك الشخصية مع مقدم الخدمة.", "description_formal_time": "{{ days_to_cancel }} لا يزال بإمكانك إلغاء الحجز في غضون أيام بعد تأكيد الحجز.", - "description_informal": "هل تستخدم رصيدك {{fund}}
رصيدك لهذا الحجز هل تقوم بالحجز؟ إذن أنت توافق على مشاركة بياناتك الشخصية مع مقدم الخدمة.", "description_informal_time": "{{ days_to_cancel }} لا يزال بإمكانك إلغاء الحجز في غضون أيام بعد تأكيد الحجز.", "email_setup_description": "أضف عنوان بريدك الإلكتروني لتلقي الرسائل.", "email_setup_title": "إضافة عنوان البريد الإلكتروني", @@ -3087,7 +3086,8 @@ "description": "تم إجراء الحجز الخاص بك.", "title": "لقد نجح الأمر!" }, - "voucher_image_alt": "الائتمان" + "voucher_image_alt": "الائتمان", + "description_informal": "يمكنك استخدام {{fund}} رصيدك لهذا الحجز.
هل تقوم بالحجز؟ إذن أنت توافق على مشاركة بياناتك الشخصية مع مقدم الخدمة." }, "modal": { "buttons": { diff --git a/react/src/webshop/i18n/translated/de.json b/react/src/webshop/i18n/translated/de.json index 0f14ec063..3e3740b6f 100644 --- a/react/src/webshop/i18n/translated/de.json +++ b/react/src/webshop/i18n/translated/de.json @@ -1628,7 +1628,6 @@ }, "description_formal": "Sie verwenden Ihr {{fund}}
Guthaben für diese Reservierung verwenden. Buchen Sie eine Reservierung? Dann stimmen Sie zu, dass wir Ihre persönlichen Daten mit dem Anbieter teilen.", "description_formal_time": "{{ days_to_cancel }} Sie können die Reservierung noch innerhalb weniger Tage nach der Bestätigung stornieren.", - "description_informal": "Sie verwenden Ihr {{fund}}
Guthaben für diese Reservierung. Nehmen Sie eine Reservierung vor? Dann stimmen Sie zu, dass wir Ihre persönlichen Daten mit dem Anbieter teilen.", "description_informal_time": "{{ days_to_cancel }} Sie können die Reservierung noch innerhalb weniger Tage nach der Bestätigung stornieren.", "email_setup_description": "Fügen Sie Ihre E-Mail-Adresse hinzu, um Nachrichten zu erhalten.", "email_setup_title": "E-Mail Adresse hinzufügen", @@ -1693,7 +1692,8 @@ "description": "Ihre Reservierung wurde vorgenommen.", "title": "Es hat geklappt!" }, - "voucher_image_alt": "Kredit" + "voucher_image_alt": "Kredit", + "description_informal": "Sie verwenden Ihr {{fund}} Guthaben für diese Reservierung.
Sie nehmen eine Reservierung vor? Dann sind Sie damit einverstanden, dass wir Ihre persönlichen Daten mit dem Anbieter teilen." }, "modal": { "buttons": { @@ -3338,7 +3338,7 @@ "title": "Transaktionen", "top_up": "Verbessert" }, - "voucher_card_combined": { + "card_combined": { "header": { "title": "Wie funktioniert das?" }, @@ -3351,7 +3351,7 @@ "redirect_to": "Möchten Sie immer noch eine Erstattung beantragen?" }, "meedoenregeling_volwassenen_ww": { - "how_it_works": "Haben Sie Ausgaben getätigt, die unter diese Regelung fallen? Beantragen Sie die Erstattung Ihrer Ausgaben, indem Sie eine Quittung einsenden. Nach der Genehmigung erhalten Sie den Betrag auf Ihr persönliches Bankkonto.", + "how_it_works": "Haben Sie Ausgaben getätigt, die unter diese Regelung fallen? Beantragen Sie die Rückerstattung Ihrer Ausgaben, indem Sie eine Quittung einreichen. Nach der Genehmigung erhalten Sie den Betrag auf Ihr persönliches Bankkonto.", "redirect_to": "Kosten zurückfordern?" }, "redirect_to": "Möchten Sie immer noch eine Erstattung beantragen?" diff --git a/react/src/webshop/i18n/translated/en-US.json b/react/src/webshop/i18n/translated/en-US.json index 7ae9cc2d2..cd819a967 100644 --- a/react/src/webshop/i18n/translated/en-US.json +++ b/react/src/webshop/i18n/translated/en-US.json @@ -1643,25 +1643,6 @@ "reason_placeholder": "Message for provider", "close": "Close" }, - "voucher_card_combined": { - "header": { - "title": "How does it work?" - }, - "labels": { - "contact_sponsor": "Do you have any questions?", - "contact_sponsor_details": "If so, please contact us.", - "how_it_works": "We have received your application. You will receive a decision on your application within 8 weeks.", - "IIT": { - "how_it_works": "We have received your application. You will receive a decision on your application within 8 weeks.", - "redirect_to": "Do you still want to apply for reimbursement?" - }, - "meedoenregeling_volwassenen_ww": { - "how_it_works": "Have you incurred expenses that fall within this scheme? Reclaim your expenses by submitting a receipt. After approval, you will receive the amount in your personal bank account.", - "redirect_to": "Reclaim expenses?" - }, - "redirect_to": "Do you still want to apply for reimbursement?" - } - }, "breadcrumbs": { "home": "Home", "voucher": "{{ title }}", @@ -1732,6 +1713,25 @@ "expired": "Expired" }, "title": "Expenditures" + }, + "card_combined": { + "header": { + "title": "How does it work?" + }, + "labels": { + "contact_sponsor": "Do you have any questions?", + "contact_sponsor_details": "If so, please contact us.", + "how_it_works": "We have received your application. You will receive a decision on your application within 8 weeks.", + "IIT": { + "how_it_works": "We have received your application. You will receive a decision on your application within 8 weeks.", + "redirect_to": "Do you still want to apply for reimbursement?" + }, + "meedoenregeling_volwassenen_ww": { + "how_it_works": "Have you incurred expenses that fall within this scheme? Reclaim your expenses by submitting a receipt. After approval, you will receive the amount in your personal bank account.", + "redirect_to": "Reclaim expenses?" + }, + "redirect_to": "Do you still want to apply for reimbursement?" + } } }, "vouchers": { @@ -3346,7 +3346,6 @@ }, "description_formal": "You use your {{fund}} credit for this reservation.
Are you placing a reservation? Then you agree that we share your personal information with the provider.", "description_formal_time": "You can still cancel the reservation within {{ days_to_cancel }} days after confirmation. ", - "description_informal": "You use your {{fund}} credit for this reservation.
Are you placing a reservation? Then you agree that we share your personal data with the provider.", "description_informal_time": "You can still cancel the reservation within {{ days_to_cancel }} days after confirmation.", "email_setup_description": "Add your email address to receive messages.", "email_setup_title": "Add email address", @@ -3411,7 +3410,8 @@ "description": "Your reservation has been made.", "title": "It worked!" }, - "voucher_image_alt": "Credit" + "voucher_image_alt": "Credit", + "description_informal": "You use your {{fund}} credit for this reservation.
Are you making a reservation? Then you agree that we share your personal data with the provider." }, "modal_logout": { "description_formal": "Are you sure you want to log out?", diff --git a/react/src/webshop/i18n/translated/fr.json b/react/src/webshop/i18n/translated/fr.json index 844b54dec..8f9c9b198 100644 --- a/react/src/webshop/i18n/translated/fr.json +++ b/react/src/webshop/i18n/translated/fr.json @@ -1628,7 +1628,6 @@ }, "description_formal": "Vous utiliserez votre {{fund}}
Vous placez une réservation ? Dans ce cas, vous acceptez que nous partagions vos données personnelles avec le fournisseur.", "description_formal_time": "{{ days_to_cancel }} Vous pouvez encore annuler la réservation dans les jours qui suivent la confirmation.", - "description_informal": "Vous utilisez votre {{fund}}
Vous placez une réservation ? Dans ce cas, vous acceptez que nous partagions vos données personnelles avec le fournisseur.", "description_informal_time": "{{ days_to_cancel }} Vous pouvez encore annuler la réservation dans les jours qui suivent la confirmation.", "email_setup_description": "Ajoutez votre adresse e-mail pour recevoir les messages.", "email_setup_title": "Ajouter une adresse électronique", @@ -1693,7 +1692,8 @@ "description": "Votre réservation a été effectuée.", "title": "Cela a fonctionné !" }, - "voucher_image_alt": "Crédit" + "voucher_image_alt": "Crédit", + "description_informal": "Vous utilisez votre {{fund}} crédit pour cette réservation.
Vous effectuez une réservation ? Dans ce cas, vous acceptez que nous partagions vos données personnelles avec le fournisseur." }, "modal": { "buttons": { @@ -3338,7 +3338,7 @@ "title": "Transactions", "top_up": "Mise à niveau" }, - "voucher_card_combined": { + "card_combined": { "header": { "title": "Comment cela fonctionne-t-il ?" }, diff --git a/react/src/webshop/i18n/translated/pl.json b/react/src/webshop/i18n/translated/pl.json index 4b3b08be5..c8185246b 100644 --- a/react/src/webshop/i18n/translated/pl.json +++ b/react/src/webshop/i18n/translated/pl.json @@ -1628,7 +1628,6 @@ }, "description_formal": "Wykorzystasz swój {{fund}}
Czy dokonujesz rezerwacji? W takim przypadku zgadzasz się na udostępnienie przez nas Twoich danych osobowych dostawcy.", "description_formal_time": "{{ days_to_cancel }} Rezerwację można anulować w ciągu kilku dni od jej potwierdzenia.", - "description_informal": "Używasz swojego {{fund}}
Czy dokonujesz rezerwacji? W takim przypadku zgadzasz się, że udostępniamy Twoje dane osobowe dostawcy.", "description_informal_time": "{{ days_to_cancel }} Rezerwację można anulować w ciągu kilku dni od jej potwierdzenia.", "email_setup_description": "Dodaj swój adres e-mail, aby otrzymywać wiadomości.", "email_setup_title": "Dodaj adres e-mail", @@ -1693,7 +1692,8 @@ "description": "Rezerwacja została dokonana.", "title": "Udało się!" }, - "voucher_image_alt": "Kredyt" + "voucher_image_alt": "Kredyt", + "description_informal": "Używasz swojego {{fund}} kredyt na tę rezerwację.
Dokonujesz rezerwacji? W takim razie zgadzasz się, że udostępniamy Twoje dane osobowe dostawcy." }, "modal": { "buttons": { @@ -3338,7 +3338,7 @@ "title": "Transakcje", "top_up": "Ulepszony" }, - "voucher_card_combined": { + "card_combined": { "header": { "title": "Jak to działa?" }, diff --git a/react/src/webshop/i18n/translated/ru.json b/react/src/webshop/i18n/translated/ru.json index e4c09b942..7597d54e2 100644 --- a/react/src/webshop/i18n/translated/ru.json +++ b/react/src/webshop/i18n/translated/ru.json @@ -1628,7 +1628,6 @@ }, "description_formal": "Вы используете свой {{fund}}
кредит для этого бронирования. Вы бронируете номер? Тогда вы соглашаетесь с тем, что мы передаем ваши личные данные поставщику услуг.", "description_formal_time": "{{ days_to_cancel }} Вы все еще можете отменить бронирование в течение нескольких дней после подтверждения.", - "description_informal": "Вы используете свой {{fund}}
кредит для этого бронирования. Вы бронируете? Тогда вы соглашаетесь с тем, что мы передаем ваши личные данные поставщику услуг.", "description_informal_time": "{{ days_to_cancel }} Вы все еще можете отменить бронирование в течение нескольких дней после подтверждения.", "email_setup_description": "Добавьте свой адрес электронной почты для получения сообщений.", "email_setup_title": "Добавить адрес электронной почты", @@ -1693,7 +1692,8 @@ "description": "Ваша бронь сделана.", "title": "Это сработало!" }, - "voucher_image_alt": "Кредит" + "voucher_image_alt": "Кредит", + "description_informal": "Вы используете свой {{fund}} кредит для этого бронирования.
Вы бронируете? Тогда вы соглашаетесь с тем, что мы передаем ваши личные данные поставщику услуг." }, "modal": { "buttons": { @@ -3338,7 +3338,7 @@ "title": "Транзакции", "top_up": "Обновленный" }, - "voucher_card_combined": { + "card_combined": { "header": { "title": "Как это работает?" }, diff --git a/react/src/webshop/i18n/translated/tr.json b/react/src/webshop/i18n/translated/tr.json index 1a02add40..bd9a086bd 100644 --- a/react/src/webshop/i18n/translated/tr.json +++ b/react/src/webshop/i18n/translated/tr.json @@ -2009,7 +2009,7 @@ "title": "İşlemler", "top_up": "Yükseltilmiş" }, - "voucher_card_combined": { + "card_combined": { "header": { "title": "Nasıl çalışıyor?" }, @@ -3022,7 +3022,6 @@ }, "description_formal": "Sen kullanacaksın {{fund}}
Bu rezervasyon için kredi. Rezervasyon mu yapıyorsunuz? O zaman kişisel verilerinizi sağlayıcı ile paylaşmamızı kabul etmiş olursunuz.", "description_formal_time": "{{ days_to_cancel }} Rezervasyonu onaylandıktan sonraki günler içinde de iptal edebilirsiniz.", - "description_informal": "Sen kendi {{fund}}
Bu rezervasyon için kredi. Rezervasyon mu yapıyorsunuz? O zaman kişisel verilerinizi sağlayıcı ile paylaşmamızı kabul etmiş olursunuz.", "description_informal_time": "{{ days_to_cancel }} Rezervasyonu onaylandıktan sonraki günler içinde de iptal edebilirsiniz.", "email_setup_description": "Mesaj almak için e-posta adresinizi ekleyin.", "email_setup_title": "E-posta adresi ekle", @@ -3087,7 +3086,8 @@ "description": "Rezervasyonunuz yapılmıştır.", "title": "İşe yaradı!" }, - "voucher_image_alt": "Kredi" + "voucher_image_alt": "Kredi", + "description_informal": "Sen kendi {{fund}} Bu rezervasyon için kredi.
Rezervasyon mu yapıyorsunuz? O zaman kişisel verilerinizi sağlayıcı ile paylaşmamızı kabul etmiş olursunuz." }, "modal": { "buttons": { diff --git a/react/src/webshop/i18n/translated/uk.json b/react/src/webshop/i18n/translated/uk.json index f3efba92c..06685344e 100644 --- a/react/src/webshop/i18n/translated/uk.json +++ b/react/src/webshop/i18n/translated/uk.json @@ -1628,7 +1628,6 @@ }, "description_formal": "Ви використаєте свій {{fund}}
кредит для цього бронювання. Ви робите бронювання? Тоді ви погоджуєтесь, що ми передаємо ваші персональні дані постачальнику.", "description_formal_time": "{{ days_to_cancel }} Ви все ще можете скасувати бронювання протягом декількох днів після підтвердження.", - "description_informal": "Ви використовуєте свій {{fund}}
Ви використовуєте свій кредит для цього бронювання. Ви робите бронювання? Тоді ви погоджуєтесь, що ми передаємо ваші персональні дані постачальнику.", "description_informal_time": "{{ days_to_cancel }} Ви все ще можете скасувати бронювання протягом декількох днів після підтвердження.", "email_setup_description": "Додайте свою електронну адресу, щоб отримувати повідомлення.", "email_setup_title": "Додати адресу електронної пошти", @@ -1693,7 +1692,8 @@ "description": "Ваше бронювання зроблено.", "title": "Спрацювало!" }, - "voucher_image_alt": "Кредит" + "voucher_image_alt": "Кредит", + "description_informal": "Ви використовуєте свій {{fund}} кредит для цього бронювання.
Здійснюєте бронювання? Тоді ви погоджуєтесь, що ми передаємо ваші персональні дані постачальнику послуг." }, "modal": { "buttons": { @@ -3338,7 +3338,7 @@ "title": "Транзакції", "top_up": "Оновлений" }, - "voucher_card_combined": { + "card_combined": { "header": { "title": "Як це працює?" }, diff --git a/translations/cache/cache.json b/translations/cache/cache.json index 30ae1dd19..b490d7a88 100644 --- a/translations/cache/cache.json +++ b/translations/cache/cache.json @@ -4421,7 +4421,7 @@ ], [ "modal_reserve_product.description_informal", - "Je gebruikt jouw {{fund}} tegoed voor deze reservering.
Plaatst je een reservering? Dan gaat je ermee akkoord dat wij je persoonlijke gegevens delen met de aanbieder." + "Je gebruikt jouw {{fund}} tegoed voor deze reservering.
Plaats je een reservering? Dan ga je ermee akkoord dat wij je persoonlijke gegevens delen met de aanbieder." ], [ "modal_reserve_product.description_informal_time", @@ -8423,6 +8423,42 @@ "voucher.buttons.send", "E-mail naar mij" ], + [ + "voucher.card_combined.header.title", + "Hoe werkt het?" + ], + [ + "voucher.card_combined.labels.contact_sponsor", + "Heeft u vragen?" + ], + [ + "voucher.card_combined.labels.contact_sponsor_details", + "Neem dan contact met ons op." + ], + [ + "voucher.card_combined.labels.how_it_works", + "Wij hebben uw aanvraag ontvangen. U ontvangt binnen 8 weken een beslissing op uw aanvraag." + ], + [ + "voucher.card_combined.labels.IIT.how_it_works", + "Wij hebben uw aanvraag ontvangen. U ontvangt binnen 8 weken een beslissing op uw aanvraag." + ], + [ + "voucher.card_combined.labels.IIT.redirect_to", + "Wilt u nog een vergoeding aanvragen?" + ], + [ + "voucher.card_combined.labels.meedoenregeling_volwassenen_ww.how_it_works", + "Heeft u kosten gemaakt die binnen deze regeling vallen? Vraag uw kosten terug door een bon in te sturen. Na goedkeuring ontvangt u het bedrag op uw persoonlijke bankrekening." + ], + [ + "voucher.card_combined.labels.meedoenregeling_volwassenen_ww.redirect_to", + "Kosten terugvragen?" + ], + [ + "voucher.card_combined.labels.redirect_to", + "Wilt u nog een vergoeding aanvragen?" + ], [ "voucher.card.activate_my_pass", "Activeer mijn pas" @@ -8747,42 +8783,6 @@ "voucher.transactions.top_up", "Opgewaardeerd" ], - [ - "voucher.voucher_card_combined.header.title", - "Hoe werkt het?" - ], - [ - "voucher.voucher_card_combined.labels.contact_sponsor", - "Heeft u vragen?" - ], - [ - "voucher.voucher_card_combined.labels.contact_sponsor_details", - "Neem dan contact met ons op." - ], - [ - "voucher.voucher_card_combined.labels.how_it_works", - "Wij hebben uw aanvraag ontvangen. U ontvangt binnen 8 weken een beslissing op uw aanvraag." - ], - [ - "voucher.voucher_card_combined.labels.IIT.how_it_works", - "Wij hebben uw aanvraag ontvangen. U ontvangt binnen 8 weken een beslissing op uw aanvraag." - ], - [ - "voucher.voucher_card_combined.labels.IIT.redirect_to", - "Wilt u nog een vergoeding aanvragen?" - ], - [ - "voucher.voucher_card_combined.labels.meedoenregeling_volwassenen_ww.how_it_works", - "Heeft u kosten gemaakt die binnen deze regeling vallen? Vraag uw kosten terug door een bon in te sturen. Na goedkeuring ontvangt u het bedrag op uw persoonlijke bankrekening." - ], - [ - "voucher.voucher_card_combined.labels.meedoenregeling_volwassenen_ww.redirect_to", - "Kosten terugvragen?" - ], - [ - "voucher.voucher_card_combined.labels.redirect_to", - "Wilt u nog een vergoeding aanvragen?" - ], [ "vouchers.breadcrumbs.home", "Home" From 008c29d40e2a1161460027dd33a7238632443506 Mon Sep 17 00:00:00 2001 From: dev-rminds Date: Wed, 19 Feb 2025 18:26:18 +0200 Subject: [PATCH 24/24] update texts --- .../modals/ModalEditProfileBankAccount.tsx | 14 ++++++++------ .../src/dashboard/i18n/nl/pages/identities.js | 19 ++++++++++++++----- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/react/src/dashboard/components/pages/identitities-show/modals/ModalEditProfileBankAccount.tsx b/react/src/dashboard/components/pages/identitities-show/modals/ModalEditProfileBankAccount.tsx index badb7dbcc..ce6c5978f 100644 --- a/react/src/dashboard/components/pages/identitities-show/modals/ModalEditProfileBankAccount.tsx +++ b/react/src/dashboard/components/pages/identitities-show/modals/ModalEditProfileBankAccount.tsx @@ -10,6 +10,7 @@ import SponsorIdentity from '../../../../props/models/Sponsor/SponsorIdentity'; import Modal from '../../../modals/elements/Modal'; import FormGroupInfo from '../../../elements/forms/elements/FormGroupInfo'; import FormGroup from '../../../elements/forms/controls/FormGroup'; +import useTranslate from '../../../../hooks/useTranslate'; export default function ModalEditProfileBankAccount({ id, @@ -24,6 +25,7 @@ export default function ModalEditProfileBankAccount({ identity: SponsorIdentity; organization: Organization; }) { + const translate = useTranslate(); const setProgress = useSetProgress(); const sponsorIdentitiesService = useSponsorIdentitiesService(); @@ -78,16 +80,16 @@ export default function ModalEditProfileBankAccount({ ( - + form.update({ name: e.target.value })} /> @@ -97,16 +99,16 @@ export default function ModalEditProfileBankAccount({ ( - + form.update({ iban: e.target.value })} /> diff --git a/react/src/dashboard/i18n/nl/pages/identities.js b/react/src/dashboard/i18n/nl/pages/identities.js index 563dc7d20..c6130d76b 100644 --- a/react/src/dashboard/i18n/nl/pages/identities.js +++ b/react/src/dashboard/i18n/nl/pages/identities.js @@ -81,7 +81,6 @@ export default { emails_verified_3: 'Het tweede extra adres waaronder de persoon per elektronische post bereikbaar is. Dit is het eerste extra e-mailadres. De persoon kan het e-mailadres als hoofdadres instellen in het persoonlijke account op de website.', birth_date: 'De datum van geboorte van de persoon.', - last_activity: 'Lorem Ipsum - dolor sit amet!', postal_code: 'De officiële codering van TNT Post voor een Nederlands postadres, bestaande uit een numeriek deel en een alfabetisch deel.', telephone: 'Het telefoonnummer waaronder de persoon bereikbaar is.', @@ -90,16 +89,26 @@ export default { house_number: 'De numerieke aanduiding zoals deze door de gemeente aan het object is toegekend.', house_number_addition: 'De huisnummertoevoeging zoals deze door de gemeente aan het object is toegekend.', street: 'De officiële door de gemeente vastgestelde naam van een straat waar de persoon woonachtig is.', - house_composition: 'house_composition', + house_composition: + 'De samenstelling van het huishouden, inclusief het aantal en de relaties van personen die samenwonen.', gender: 'Een aanduiding die aangeeft of de ingeschrevene een man of vrouw is, of dat het geslacht onbekend is.', age: 'De leeftijd van de persoon in jaren.', - municipality_name: 'De naam van de wijk, zoals die door het CBS wordt gebruikt.', - neighborhood_name: - 'De samenstelling van het huishouden, inclusief het aantal en de relaties van personen die samenwonen.', + municipality_name: 'De officiële door de gemeente vastgestelde Gemeentenaam.', + neighborhood_name: 'De naam van de wijk, zoals die door het CBS wordt gebruikt.', living_arrangement: 'De manier waarop de persoon samenleeft binnen een huishouden, zoals alleenstaanden, gezinnen, of woongroepen.', marital_status: 'De rechtstoestand van een persoon ten aanzien van huwelijk of geregistreerd partnerschap.', }, + bank_account: { + iban: { + label: 'IBAN-nummer', + tooltip: 'Bankrekeningnummer (IBAN)', + }, + iban_name: { + label: 'Te naam stelling', + tooltip: 'Tenaamstelling', + }, + }, buttons: { clear_filter: 'Wis filter', },