From a3b4b817c55427dc119c527f21a8924dcd7fae6b Mon Sep 17 00:00:00 2001 From: Faizan Shoukat Abbasi Date: Tue, 27 Jan 2026 01:44:13 +0500 Subject: [PATCH 1/8] fix: add accessibilityRole header to visual headings for screen readers --- src/components/CollapsibleSection/index.tsx | 1 + src/components/EmptyStateComponent/index.tsx | 2 +- src/components/Header.tsx | 1 + src/components/Section/index.tsx | 2 +- .../BaseSelectionListWithSections.tsx | 2 +- src/components/WorkspaceEmptyStateSection.tsx | 2 +- .../BaseOnboardingAccounting.tsx | 2 +- .../BaseOnboardingEmployees.tsx | 2 +- .../BaseOnboardingInterestedFeatures.tsx | 2 +- .../BaseOnboardingPersonalDetails.tsx | 2 +- .../BaseOnboardingPrivateDomain.tsx | 2 +- .../BaseOnboardingPurpose.tsx | 2 +- .../BaseOnboardingWorkEmail.tsx | 2 +- .../BaseOnboardingWorkEmailValidation.tsx | 2 +- .../BaseOnboardingWorkspaceConfirmation.tsx | 2 +- .../BaseOnboardingWorkspaceCurrency.tsx | 2 +- .../BaseOnboardingWorkspaceInvite.tsx | 2 +- .../BaseOnboardingWorkspaceOptional.tsx | 2 +- .../BaseOnboardingWorkspaces.tsx | 2 +- src/pages/Search/AdvancedSearchFilters.tsx | 2 +- .../step/IOURequestStepDistanceManual.tsx | 32 +++++++++++++++++++ .../SubscriptionPlan/SubscriptionPlanCard.tsx | 2 +- .../Subscription/SubscriptionPlan/index.tsx | 2 +- src/pages/signin/SignInPageLayout/Footer.tsx | 2 +- .../SignInPageLayout/SignInPageContent.tsx | 1 + .../workspace/WorkspaceMoreFeaturesPage.tsx | 2 +- .../WorkspaceCategoriesSettingsPage.tsx | 2 +- .../reports/WorkspaceReportsPage.tsx | 2 +- 28 files changed, 59 insertions(+), 24 deletions(-) diff --git a/src/components/CollapsibleSection/index.tsx b/src/components/CollapsibleSection/index.tsx index e6e3e9db19da8..5af5f2cd6d19a 100644 --- a/src/components/CollapsibleSection/index.tsx +++ b/src/components/CollapsibleSection/index.tsx @@ -56,6 +56,7 @@ function CollapsibleSection({title, children, titleStyle, textStyle, wrapperStyl {title} diff --git a/src/components/EmptyStateComponent/index.tsx b/src/components/EmptyStateComponent/index.tsx index ba303ad0b5eeb..bf900274c960e 100644 --- a/src/components/EmptyStateComponent/index.tsx +++ b/src/components/EmptyStateComponent/index.tsx @@ -103,7 +103,7 @@ function EmptyStateComponent({ {HeaderComponent} - {title} + {title} {subtitleText ?? (doesSubtitleContainCustomEmojiAndMore ? ( {title} diff --git a/src/components/Section/index.tsx b/src/components/Section/index.tsx index 9b1fa58eb3ab8..2cda3d295e43c 100644 --- a/src/components/Section/index.tsx +++ b/src/components/Section/index.tsx @@ -186,7 +186,7 @@ function Section({ /> )} - {renderTitle ? renderTitle() : !!title && {title}} + {renderTitle ? renderTitle() : !!title && {title}} {cardLayout === CARD_LAYOUT.ICON_ON_RIGHT && ( ({ // We do this so that we can reference the height in `getItemLayout` – // we need to know the heights of all list items up-front in order to synchronously compute the layout of any given list item. // So be aware that if you adjust the content of the section header (for example, change the font size), you may need to adjust this explicit height as well. - + {section.title} ); diff --git a/src/components/WorkspaceEmptyStateSection.tsx b/src/components/WorkspaceEmptyStateSection.tsx index 51b99ad0c4668..889930b5d8798 100644 --- a/src/components/WorkspaceEmptyStateSection.tsx +++ b/src/components/WorkspaceEmptyStateSection.tsx @@ -50,7 +50,7 @@ function WorkspaceEmptyStateSection({icon, subtitle, title, containerStyle, shou - {title} + {title} {(!!subtitle || !!subtitleComponent) && ( diff --git a/src/pages/OnboardingAccounting/BaseOnboardingAccounting.tsx b/src/pages/OnboardingAccounting/BaseOnboardingAccounting.tsx index a83bb9c737a26..4e1fb9726538c 100644 --- a/src/pages/OnboardingAccounting/BaseOnboardingAccounting.tsx +++ b/src/pages/OnboardingAccounting/BaseOnboardingAccounting.tsx @@ -246,7 +246,7 @@ function BaseOnboardingAccounting({shouldUseNativeStyles, route}: BaseOnboarding shouldDisplayHelpButton={false} /> - {translate('onboarding.accounting.title')} + {translate('onboarding.accounting.title')} {accountingOptions.map(renderOption)} diff --git a/src/pages/OnboardingEmployees/BaseOnboardingEmployees.tsx b/src/pages/OnboardingEmployees/BaseOnboardingEmployees.tsx index 0bfec76ad176a..169e38b346692 100644 --- a/src/pages/OnboardingEmployees/BaseOnboardingEmployees.tsx +++ b/src/pages/OnboardingEmployees/BaseOnboardingEmployees.tsx @@ -85,7 +85,7 @@ function BaseOnboardingEmployees({shouldUseNativeStyles, route}: BaseOnboardingE }} shouldDisplayHelpButton={false} /> - + {translate('onboarding.employees.title')} - {translate('onboarding.interestedFeatures.title')} + {translate('onboarding.interestedFeatures.title')} - {translate('onboarding.whatsYourName')} + {translate('onboarding.whatsYourName')} - {translate('onboarding.peopleYouMayKnow')} + {translate('onboarding.peopleYouMayKnow')} {translate('onboarding.workspaceYouMayJoin', {domain, email})} - {translate('onboarding.purpose.title')} + {translate('onboarding.purpose.title')} - {translate('onboarding.workEmail.title')} + {translate('onboarding.workEmail.title')} {translate('onboarding.workEmail.subtitle')} diff --git a/src/pages/OnboardingWorkEmailValidation/BaseOnboardingWorkEmailValidation.tsx b/src/pages/OnboardingWorkEmailValidation/BaseOnboardingWorkEmailValidation.tsx index c96e566fdbce2..b31db42320dc7 100644 --- a/src/pages/OnboardingWorkEmailValidation/BaseOnboardingWorkEmailValidation.tsx +++ b/src/pages/OnboardingWorkEmailValidation/BaseOnboardingWorkEmailValidation.tsx @@ -102,7 +102,7 @@ function BaseOnboardingWorkEmailValidation({shouldUseNativeStyles}: BaseOnboardi ) : ( - {translate('onboarding.workEmailValidation.title')} + {translate('onboarding.workEmailValidation.title')} {translate('onboarding.workEmailValidation.magicCodeSent', {workEmail})} - {translate('onboarding.confirmWorkspace.title')} + {translate('onboarding.confirmWorkspace.title')} {translate('onboarding.confirmWorkspace.subtitle')} diff --git a/src/pages/OnboardingWorkspaceCurrency/BaseOnboardingWorkspaceCurrency.tsx b/src/pages/OnboardingWorkspaceCurrency/BaseOnboardingWorkspaceCurrency.tsx index 470524c6da793..88a00553c84d7 100644 --- a/src/pages/OnboardingWorkspaceCurrency/BaseOnboardingWorkspaceCurrency.tsx +++ b/src/pages/OnboardingWorkspaceCurrency/BaseOnboardingWorkspaceCurrency.tsx @@ -58,7 +58,7 @@ function BaseOnboardingWorkspaceCurrency({route, shouldUseNativeStyles}: BaseOnb shouldDisplayHelpButton={false} /> - {translate('common.currency')} + {translate('common.currency')} - {translate('onboarding.inviteMembers.title')} + {translate('onboarding.inviteMembers.title')} {translate('onboarding.inviteMembers.subtitle')} diff --git a/src/pages/OnboardingWorkspaceOptional/BaseOnboardingWorkspaceOptional.tsx b/src/pages/OnboardingWorkspaceOptional/BaseOnboardingWorkspaceOptional.tsx index d2ba9b3a78cf7..c275d4e7c1d2b 100644 --- a/src/pages/OnboardingWorkspaceOptional/BaseOnboardingWorkspaceOptional.tsx +++ b/src/pages/OnboardingWorkspaceOptional/BaseOnboardingWorkspaceOptional.tsx @@ -116,7 +116,7 @@ function BaseOnboardingWorkspaceOptional({shouldUseNativeStyles}: BaseOnboarding /> - {translate('onboarding.workspace.title')} + {translate('onboarding.workspace.title')} {translate('onboarding.workspace.subtitle')} diff --git a/src/pages/OnboardingWorkspaces/BaseOnboardingWorkspaces.tsx b/src/pages/OnboardingWorkspaces/BaseOnboardingWorkspaces.tsx index 4bbf5c377f080..0b20a8c97e0d6 100644 --- a/src/pages/OnboardingWorkspaces/BaseOnboardingWorkspaces.tsx +++ b/src/pages/OnboardingWorkspaces/BaseOnboardingWorkspaces.tsx @@ -165,7 +165,7 @@ function BaseOnboardingWorkspaces({route, shouldUseNativeStyles}: BaseOnboarding showScrollIndicator customListHeader={ - {translate('onboarding.joinAWorkspace')} + {translate('onboarding.joinAWorkspace')} {translate('onboarding.listOfWorkspaces')} } diff --git a/src/pages/Search/AdvancedSearchFilters.tsx b/src/pages/Search/AdvancedSearchFilters.tsx index 9164ce9ff1b17..c4a92000a79b2 100644 --- a/src/pages/Search/AdvancedSearchFilters.tsx +++ b/src/pages/Search/AdvancedSearchFilters.tsx @@ -673,7 +673,7 @@ function AdvancedSearchFilters() { style={[styles.reportHorizontalRule]} /> )} - {translate(section.titleTranslationKey)} + {translate(section.titleTranslationKey)} {section.items.map((item) => { return ( (null); const numberFormRef = useRef(null); const focusTimeoutRef = useRef(null); + const previousUnitRef = useRef(undefined); const [formError, setFormError] = useState(''); @@ -100,6 +102,36 @@ function IOURequestStepDistanceManual({ const distance = typeof transaction?.comment?.customUnit?.quantity === 'number' ? roundToTwoDecimalPlaces(transaction.comment.customUnit.quantity) : undefined; const isASAPSubmitBetaEnabled = isBetaEnabled(CONST.BETAS.ASAP_SUBMIT); + // Convert distance when unit changes (e.g., when recipient/workspace changes) + useEffect(() => { + const existingDistanceUnit = transaction?.comment?.customUnit?.distanceUnit ?? previousUnitRef.current; + const currentDistance = transaction?.comment?.customUnit?.quantity; + + // Only convert if: + // 1. We have a previous unit (not initial load) + // 2. The unit actually changed + // 3. There's an existing distance value + // 4. The existing distance unit is different from the new unit + if ( + previousUnitRef.current !== undefined && + previousUnitRef.current !== unit && + typeof currentDistance === 'number' && + existingDistanceUnit && + existingDistanceUnit !== unit + ) { + // Convert distance: get current distance in meters, then convert to new unit + const distanceInMeters = getDistanceInMeters(transaction, existingDistanceUnit); + const convertedDistance = DistanceRequestUtils.convertDistanceUnit(distanceInMeters, unit); + const roundedConvertedDistance = roundToTwoDecimalPlaces(convertedDistance); + + // Update the transaction with the converted distance + setMoneyRequestDistance(transactionID, roundedConvertedDistance, isTransactionDraft); + } + + // Update the previous unit ref + previousUnitRef.current = unit; + }, [unit, transaction, transactionID, isTransactionDraft]); + useEffect(() => { if (numberFormRef.current && numberFormRef.current?.getNumber() === distance?.toString()) { return; diff --git a/src/pages/settings/Subscription/SubscriptionPlan/SubscriptionPlanCard.tsx b/src/pages/settings/Subscription/SubscriptionPlan/SubscriptionPlanCard.tsx index 87621f010df70..2bdd52c4b2ed3 100644 --- a/src/pages/settings/Subscription/SubscriptionPlan/SubscriptionPlanCard.tsx +++ b/src/pages/settings/Subscription/SubscriptionPlan/SubscriptionPlanCard.tsx @@ -120,7 +120,7 @@ function SubscriptionPlanCard({subscriptionPlan, isFromComparisonModal = false, /> - {title} + {title} {subtitle} {note} {description} diff --git a/src/pages/settings/Subscription/SubscriptionPlan/index.tsx b/src/pages/settings/Subscription/SubscriptionPlan/index.tsx index ee558d9784dc1..3a733fac0d9c9 100644 --- a/src/pages/settings/Subscription/SubscriptionPlan/index.tsx +++ b/src/pages/settings/Subscription/SubscriptionPlan/index.tsx @@ -23,7 +23,7 @@ function SubscriptionPlan() { const renderTitle = () => { return ( - {translate('subscription.yourPlan.title')} + {translate('subscription.yourPlan.title')}