From 1ff04204aa3b15877cb3d0f08627d8d69fb60a9f Mon Sep 17 00:00:00 2001 From: mkzie2 Date: Thu, 21 Nov 2024 17:16:46 +0700 Subject: [PATCH 1/5] add update payment currency flow --- src/ROUTES.ts | 1 + src/SCREENS.ts | 1 + src/languages/en.ts | 1 + src/languages/es.ts | 1 + .../ModalStackNavigators/index.tsx | 1 + .../CENTRAL_PANE_TO_RHP_MAPPING.ts | 7 ++- src/libs/Navigation/linkingConfig/config.ts | 4 ++ src/libs/Navigation/types.ts | 3 +- .../Preferences/PaymentCurrencyPage.tsx | 61 +++++++++++++++++++ .../settings/Preferences/PreferencesPage.tsx | 14 +++++ 10 files changed, 92 insertions(+), 2 deletions(-) create mode 100644 src/pages/settings/Preferences/PaymentCurrencyPage.tsx diff --git a/src/ROUTES.ts b/src/ROUTES.ts index bdf4d4774ec1a..3dc6ac7a9dcf5 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -129,6 +129,7 @@ const ROUTES = { SETTINGS_SUBSCRIPTION_REQUEST_EARLY_CANCELLATION: 'settings/subscription/request-early-cancellation-survey', SETTINGS_PRIORITY_MODE: 'settings/preferences/priority-mode', SETTINGS_LANGUAGE: 'settings/preferences/language', + SETTINGS_PAYMENT_CURRENCY: 'setting/preferences/payment-currency', SETTINGS_THEME: 'settings/preferences/theme', SETTINGS_WORKSPACES: 'settings/workspaces', SETTINGS_SECURITY: 'settings/security', diff --git a/src/SCREENS.ts b/src/SCREENS.ts index 543e8708fea3d..e9a4067dcdef6 100644 --- a/src/SCREENS.ts +++ b/src/SCREENS.ts @@ -95,6 +95,7 @@ const SCREENS = { PRIORITY_MODE: 'Settings_Preferences_PriorityMode', LANGUAGE: 'Settings_Preferences_Language', THEME: 'Settings_Preferences_Theme', + PAYMENT_CURRENCY: 'Settings_Payment_Currency', }, WALLET: { diff --git a/src/languages/en.ts b/src/languages/en.ts index 591f7eb0ed42d..b16787519576a 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -1337,6 +1337,7 @@ const translations = { changeBillingCurrency: 'Change billing currency', changePaymentCurrency: 'Change payment currency', paymentCurrency: 'Payment currency', + paymentCurrencyDescription: 'Select a standardized currency that all personal expenses should be converted to.', note: 'Note: Changing your payment currency can impact how much you’ll pay for Expensify. Refer to our', noteLink: 'pricing page', noteDetails: 'for full details.', diff --git a/src/languages/es.ts b/src/languages/es.ts index ac071dd2a48fb..abfc143f9b9a9 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -1338,6 +1338,7 @@ const translations = { changePaymentCurrency: 'Cambiar moneda de facturación', changeBillingCurrency: 'Cambiar la moneda de pago', paymentCurrency: 'Moneda de pago', + paymentCurrencyDescription: 'Select a standardized currency that all personal expenses should be converted to.', note: 'Nota: Cambiar tu moneda de pago puede afectar cuánto pagarás por Expensify. Consulta nuestra', noteLink: 'página de precios', noteDetails: 'para conocer todos los detalles.', diff --git a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx index 8c0d45e8c313b..5c79767134af5 100644 --- a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx +++ b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx @@ -228,6 +228,7 @@ const SettingsModalStackNavigator = createModalStackNavigator require('../../../../pages/workspace/accounting/PolicyAccountingPage').default, [SCREENS.SETTINGS.PREFERENCES.LANGUAGE]: () => require('../../../../pages/settings/Preferences/LanguagePage').default, [SCREENS.SETTINGS.PREFERENCES.THEME]: () => require('../../../../pages/settings/Preferences/ThemePage').default, + [SCREENS.SETTINGS.PREFERENCES.PAYMENT_CURRENCY]: () => require('../../../../pages/settings/Preferences/PaymentCurrencyPage').default, [SCREENS.SETTINGS.CLOSE]: () => require('../../../../pages/settings/Security/CloseAccountPage').default, [SCREENS.SETTINGS.APP_DOWNLOAD_LINKS]: () => require('../../../../pages/settings/AppDownloadLinks').default, [SCREENS.SETTINGS.CONSOLE]: () => require('../../../../pages/settings/AboutPage/ConsolePage').default, diff --git a/src/libs/Navigation/linkingConfig/CENTRAL_PANE_TO_RHP_MAPPING.ts b/src/libs/Navigation/linkingConfig/CENTRAL_PANE_TO_RHP_MAPPING.ts index 16a4b2613d8fa..55d02cd9c66c3 100755 --- a/src/libs/Navigation/linkingConfig/CENTRAL_PANE_TO_RHP_MAPPING.ts +++ b/src/libs/Navigation/linkingConfig/CENTRAL_PANE_TO_RHP_MAPPING.ts @@ -24,7 +24,12 @@ const CENTRAL_PANE_TO_RHP_MAPPING: Partial> = SCREENS.SETTINGS.EXIT_SURVEY.RESPONSE, SCREENS.SETTINGS.EXIT_SURVEY.CONFIRM, ], - [SCREENS.SETTINGS.PREFERENCES.ROOT]: [SCREENS.SETTINGS.PREFERENCES.PRIORITY_MODE, SCREENS.SETTINGS.PREFERENCES.LANGUAGE, SCREENS.SETTINGS.PREFERENCES.THEME], + [SCREENS.SETTINGS.PREFERENCES.ROOT]: [ + SCREENS.SETTINGS.PREFERENCES.PRIORITY_MODE, + SCREENS.SETTINGS.PREFERENCES.LANGUAGE, + SCREENS.SETTINGS.PREFERENCES.THEME, + SCREENS.SETTINGS.PREFERENCES.PAYMENT_CURRENCY, + ], [SCREENS.SETTINGS.WALLET.ROOT]: [ SCREENS.SETTINGS.WALLET.DOMAIN_CARD, SCREENS.SETTINGS.WALLET.CARD_GET_PHYSICAL.NAME, diff --git a/src/libs/Navigation/linkingConfig/config.ts b/src/libs/Navigation/linkingConfig/config.ts index e0cd018086bd9..1b6f7b981864c 100644 --- a/src/libs/Navigation/linkingConfig/config.ts +++ b/src/libs/Navigation/linkingConfig/config.ts @@ -160,6 +160,10 @@ const config: LinkingOptions['config'] = { path: ROUTES.SETTINGS_THEME, exact: true, }, + [SCREENS.SETTINGS.PREFERENCES.PAYMENT_CURRENCY]: { + path: ROUTES.SETTINGS_PAYMENT_CURRENCY, + exact: true, + }, [SCREENS.SETTINGS.CLOSE]: { path: ROUTES.SETTINGS_CLOSE, exact: true, diff --git a/src/libs/Navigation/types.ts b/src/libs/Navigation/types.ts index 798e77d86ecc2..0f182fdcd456b 100644 --- a/src/libs/Navigation/types.ts +++ b/src/libs/Navigation/types.ts @@ -112,9 +112,10 @@ type SettingsNavigatorParamList = { }; [SCREENS.SETTINGS.PREFERENCES.ROOT]: undefined; [SCREENS.SETTINGS.SUBSCRIPTION.ROOT]: undefined; - [SCREENS.SETTINGS.PREFERENCES.PRIORITY_MODE]: undefined; + [SCREENS.SETTINGS.PREFERENCES.PAYMENT_CURRENCY]: undefined; [SCREENS.SETTINGS.PREFERENCES.LANGUAGE]: undefined; [SCREENS.SETTINGS.PREFERENCES.THEME]: undefined; + [SCREENS.SETTINGS.PREFERENCES.PRIORITY_MODE]: undefined; [SCREENS.SETTINGS.CLOSE]: undefined; [SCREENS.SETTINGS.SECURITY]: undefined; [SCREENS.SETTINGS.ABOUT]: undefined; diff --git a/src/pages/settings/Preferences/PaymentCurrencyPage.tsx b/src/pages/settings/Preferences/PaymentCurrencyPage.tsx new file mode 100644 index 0000000000000..98c0a8999e0b8 --- /dev/null +++ b/src/pages/settings/Preferences/PaymentCurrencyPage.tsx @@ -0,0 +1,61 @@ +import React from 'react'; +import CurrencySelectionList from '@components/CurrencySelectionList'; +import type {CurrencyListItem} from '@components/CurrencySelectionList/types'; +import HeaderWithBackButton from '@components/HeaderWithBackButton'; +import ScreenWrapper from '@components/ScreenWrapper'; +import Text from '@components/Text'; +import useLocalize from '@hooks/useLocalize'; +import usePolicy from '@hooks/usePolicy'; +import useThemeStyles from '@hooks/useThemeStyles'; +import {updateGeneralSettings} from '@libs/actions/Policy/Policy'; +import Navigation from '@libs/Navigation/Navigation'; +import {getPersonalPolicy} from '@libs/PolicyUtils'; +import CONST from '@src/CONST'; + +function PaymentCurrencyPage() { + const styles = useThemeStyles(); + const {translate} = useLocalize(); + const personalPolicyID = getPersonalPolicy()?.id; + const personalPolicy = usePolicy(personalPolicyID); + + const paymentCurrency = personalPolicy?.outputCurrency ?? CONST.CURRENCY.USD; + + return ( + + {({didScreenTransitionEnd}) => ( + <> + Navigation.goBack()} + onCloseButtonPress={() => Navigation.dismissModal()} + /> + + {translate('billingCurrency.paymentCurrencyDescription')} + + { + if (!didScreenTransitionEnd) { + return; + } + if (option.currencyCode !== paymentCurrency) { + updateGeneralSettings(personalPolicyID ?? '-1', personalPolicy?.name ?? '-1', option.currencyCode); + } + Navigation.goBack(); + }} + initiallySelectedCurrencyCode={paymentCurrency} + /> + + )} + + ); +} + +PaymentCurrencyPage.displayName = 'PaymentCurrencyPage'; + +export default PaymentCurrencyPage; diff --git a/src/pages/settings/Preferences/PreferencesPage.tsx b/src/pages/settings/Preferences/PreferencesPage.tsx index 6616d342aa3cc..0e9b7ebc761f7 100755 --- a/src/pages/settings/Preferences/PreferencesPage.tsx +++ b/src/pages/settings/Preferences/PreferencesPage.tsx @@ -11,11 +11,14 @@ import Section from '@components/Section'; import Switch from '@components/Switch'; import Text from '@components/Text'; import useLocalize from '@hooks/useLocalize'; +import usePolicy from '@hooks/usePolicy'; import useResponsiveLayout from '@hooks/useResponsiveLayout'; import useThemeStyles from '@hooks/useThemeStyles'; +import {getCurrencySymbol} from '@libs/CurrencyUtils'; import getPlatform from '@libs/getPlatform'; import LocaleUtils from '@libs/LocaleUtils'; import Navigation from '@libs/Navigation/Navigation'; +import {getPersonalPolicy} from '@libs/PolicyUtils'; import * as User from '@userActions/User'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; @@ -29,6 +32,10 @@ function PreferencesPage() { const isPlatformMuted = mutedPlatforms[platform]; const [user] = useOnyx(ONYXKEYS.USER); const [preferredTheme] = useOnyx(ONYXKEYS.PREFERRED_THEME); + const personalPolicyID = getPersonalPolicy()?.id; + const personalPolicy = usePolicy(personalPolicyID); + + const paymentCurrency = personalPolicy?.outputCurrency ?? CONST.CURRENCY.USD; const styles = useThemeStyles(); const {translate, preferredLocale} = useLocalize(); @@ -103,6 +110,13 @@ function PreferencesPage() { onPress={() => Navigation.navigate(ROUTES.SETTINGS_LANGUAGE)} wrapperStyle={styles.sectionMenuItemTopDescription} /> + Navigation.navigate(ROUTES.SETTINGS_PAYMENT_CURRENCY)} + wrapperStyle={styles.sectionMenuItemTopDescription} + /> Date: Wed, 19 Mar 2025 15:39:33 +0700 Subject: [PATCH 2/5] add default output currency setting --- src/languages/es.ts | 2 +- src/pages/settings/Preferences/PaymentCurrencyPage.tsx | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/languages/es.ts b/src/languages/es.ts index 168dc091f60a1..edabca04bc163 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -1436,7 +1436,7 @@ const translations = { changePaymentCurrency: 'Cambiar moneda de facturación', changeBillingCurrency: 'Cambiar la moneda de pago', paymentCurrency: 'Moneda de pago', - paymentCurrencyDescription: 'Select a standardized currency that all personal expenses should be converted to.', + paymentCurrencyDescription: 'Selecciona una moneda estándar a la que se deben convertir todos los gastos personales.', note: 'Nota: Cambiar tu moneda de pago puede afectar cuánto pagarás por Expensify. Consulta nuestra', noteLink: 'página de precios', noteDetails: 'para conocer todos los detalles.', diff --git a/src/pages/settings/Preferences/PaymentCurrencyPage.tsx b/src/pages/settings/Preferences/PaymentCurrencyPage.tsx index 98c0a8999e0b8..5356c0b3698c1 100644 --- a/src/pages/settings/Preferences/PaymentCurrencyPage.tsx +++ b/src/pages/settings/Preferences/PaymentCurrencyPage.tsx @@ -31,7 +31,6 @@ function PaymentCurrencyPage() { title={translate('billingCurrency.paymentCurrency')} shouldShowBackButton onBackButtonPress={() => Navigation.goBack()} - onCloseButtonPress={() => Navigation.dismissModal()} /> {translate('billingCurrency.paymentCurrencyDescription')} From 908c200de9b8f4df782091ea1404e07fa00c397e Mon Sep 17 00:00:00 2001 From: mkzie2 Date: Wed, 19 Mar 2025 15:43:28 +0700 Subject: [PATCH 3/5] remove unrelated change --- src/libs/Navigation/types.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/libs/Navigation/types.ts b/src/libs/Navigation/types.ts index b72da9ad837d7..5f3c43e6ec2bb 100644 --- a/src/libs/Navigation/types.ts +++ b/src/libs/Navigation/types.ts @@ -105,7 +105,6 @@ type SettingsNavigatorParamList = { [SCREENS.SETTINGS.PREFERENCES.PAYMENT_CURRENCY]: undefined; [SCREENS.SETTINGS.PREFERENCES.LANGUAGE]: undefined; [SCREENS.SETTINGS.PREFERENCES.THEME]: undefined; - [SCREENS.SETTINGS.PREFERENCES.PRIORITY_MODE]: undefined; [SCREENS.SETTINGS.CLOSE]: undefined; [SCREENS.SETTINGS.APP_DOWNLOAD_LINKS]: undefined; [SCREENS.SETTINGS.CONSOLE]: { From 37da53acb64532944decc7dbbe11ef6d934e428f Mon Sep 17 00:00:00 2001 From: mkzie2 Date: Wed, 19 Mar 2025 16:01:01 +0700 Subject: [PATCH 4/5] fix lint --- src/pages/settings/Preferences/PaymentCurrencyPage.tsx | 2 +- src/pages/settings/Preferences/PreferencesPage.tsx | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/pages/settings/Preferences/PaymentCurrencyPage.tsx b/src/pages/settings/Preferences/PaymentCurrencyPage.tsx index 5356c0b3698c1..8a770253c2945 100644 --- a/src/pages/settings/Preferences/PaymentCurrencyPage.tsx +++ b/src/pages/settings/Preferences/PaymentCurrencyPage.tsx @@ -43,7 +43,7 @@ function PaymentCurrencyPage() { return; } if (option.currencyCode !== paymentCurrency) { - updateGeneralSettings(personalPolicyID ?? '-1', personalPolicy?.name ?? '-1', option.currencyCode); + updateGeneralSettings(personalPolicyID, personalPolicy?.name ?? '', option.currencyCode); } Navigation.goBack(); }} diff --git a/src/pages/settings/Preferences/PreferencesPage.tsx b/src/pages/settings/Preferences/PreferencesPage.tsx index cfdae92558b0b..db08dc940ec65 100755 --- a/src/pages/settings/Preferences/PreferencesPage.tsx +++ b/src/pages/settings/Preferences/PreferencesPage.tsx @@ -14,12 +14,12 @@ import useLocalize from '@hooks/useLocalize'; import usePolicy from '@hooks/usePolicy'; import useResponsiveLayout from '@hooks/useResponsiveLayout'; import useThemeStyles from '@hooks/useThemeStyles'; +import {togglePlatformMute, updateNewsletterSubscription} from '@libs/actions/User'; import {getCurrencySymbol} from '@libs/CurrencyUtils'; import getPlatform from '@libs/getPlatform'; import LocaleUtils from '@libs/LocaleUtils'; import Navigation from '@libs/Navigation/Navigation'; import {getPersonalPolicy} from '@libs/PolicyUtils'; -import * as User from '@userActions/User'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; @@ -73,7 +73,7 @@ function PreferencesPage() { @@ -85,7 +85,7 @@ function PreferencesPage() { User.togglePlatformMute(platform, mutedPlatforms)} + onToggle={() => togglePlatformMute(platform, mutedPlatforms)} /> From 8844a026008dacf50d3e1de358c132ba64ff4518 Mon Sep 17 00:00:00 2001 From: mkzie2 Date: Wed, 19 Mar 2025 19:27:46 +0700 Subject: [PATCH 5/5] Update src/pages/settings/Preferences/PreferencesPage.tsx Co-authored-by: Vit Horacek <36083550+mountiny@users.noreply.github.com> --- src/pages/settings/Preferences/PreferencesPage.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/pages/settings/Preferences/PreferencesPage.tsx b/src/pages/settings/Preferences/PreferencesPage.tsx index db08dc940ec65..1b640dac39ae9 100755 --- a/src/pages/settings/Preferences/PreferencesPage.tsx +++ b/src/pages/settings/Preferences/PreferencesPage.tsx @@ -32,8 +32,7 @@ function PreferencesPage() { const isPlatformMuted = mutedPlatforms[platform]; const [user] = useOnyx(ONYXKEYS.USER); const [preferredTheme] = useOnyx(ONYXKEYS.PREFERRED_THEME); - const personalPolicyID = getPersonalPolicy()?.id; - const personalPolicy = usePolicy(personalPolicyID); + const personalPolicy = usePolicy(getPersonalPolicy()?.id); const paymentCurrency = personalPolicy?.outputCurrency ?? CONST.CURRENCY.USD;