diff --git a/src/components/ExpensifyWordmark.tsx b/src/components/ExpensifyWordmark.tsx index fb0f30ddf56e..a26bebe3f0d8 100644 --- a/src/components/ExpensifyWordmark.tsx +++ b/src/components/ExpensifyWordmark.tsx @@ -6,7 +6,6 @@ import DevLogo from '@assets/images/expensify-logo--dev.svg'; import ProductionLogo from '@assets/images/expensify-logo--prod.svg'; import StagingLogo from '@assets/images/expensify-logo--staging.svg'; import useEnvironment from '@hooks/useEnvironment'; -import useLocalize from '@hooks/useLocalize'; import useResponsiveLayout from '@hooks/useResponsiveLayout'; import useStyleUtils from '@hooks/useStyleUtils'; import useThemeStyles from '@hooks/useThemeStyles'; @@ -29,7 +28,6 @@ const logoComponents = { function ExpensifyWordmark({style}: ExpensifyWordmarkProps) { const styles = useThemeStyles(); const StyleUtils = useStyleUtils(); - const {translate} = useLocalize(); const {environment} = useEnvironment(); // PascalCase is required for React components, so capitalize the const here const LogoComponent = logoComponents[environment]; @@ -38,9 +36,6 @@ function ExpensifyWordmark({style}: ExpensifyWordmarkProps) { return ( diff --git a/src/components/QRCode.tsx b/src/components/QRCode.tsx index 3e30492799c2..712d24112a5f 100644 --- a/src/components/QRCode.tsx +++ b/src/components/QRCode.tsx @@ -1,6 +1,5 @@ import React from 'react'; import type {ImageSourcePropType} from 'react-native'; -import {View} from 'react-native'; import QRCodeLibrary from 'react-native-qrcode-svg'; import type {Svg, SvgProps} from 'react-native-svg'; import useTheme from '@hooks/useTheme'; @@ -56,9 +55,6 @@ type QRCodeProps = { * methods */ getRef?: (ref: Svg) => Svg; - - /** Accessibility label for the QR code image */ - accessibilityLabel?: string; }; function QRCode({ @@ -73,32 +69,24 @@ function QRCode({ backgroundColor, logoRatio = CONST.QR.DEFAULT_LOGO_SIZE_RATIO, logoMarginRatio = CONST.QR.DEFAULT_LOGO_MARGIN_RATIO, - accessibilityLabel, }: QRCodeProps) { const theme = useTheme(); return ( - - - + ); } diff --git a/src/components/QRShare/index.tsx b/src/components/QRShare/index.tsx index cfd681940485..20779450cc83 100644 --- a/src/components/QRShare/index.tsx +++ b/src/components/QRShare/index.tsx @@ -36,7 +36,7 @@ function QRShare({ const qrCodeContainerWidth = shouldUseNarrowLayout ? windowWidth : variables.sideBarWidth; const icons = useMemoizedLazyExpensifyIcons(['ExpensifyWordmark']); - const {formatPhoneNumber, translate} = useLocalize(); + const {formatPhoneNumber} = useLocalize(); const [qrCodeSize, setQrCodeSize] = useState(qrCodeContainerWidth - styles.ph5.paddingHorizontal * 2 - variables.qrShareHorizontalPadding * 2); const svgRef = useRef(undefined); @@ -79,7 +79,6 @@ function QRShare({ size={size ?? qrCodeSize} logoRatio={logoRatio} logoMarginRatio={logoMarginRatio} - accessibilityLabel={translate('qrCodes.qrCode')} /> {!!title && ( diff --git a/src/components/TextLink.tsx b/src/components/TextLink.tsx index c923117fb2e5..ac6e04e9e521 100644 --- a/src/components/TextLink.tsx +++ b/src/components/TextLink.tsx @@ -72,7 +72,6 @@ function TextLink({href, onPress, children, style, onMouseDown = (event) => even onMouseDown={onMouseDown} ref={ref} suppressHighlighting - accessible // eslint-disable-next-line react/jsx-props-no-spreading {...rest} > diff --git a/src/languages/de.ts b/src/languages/de.ts index d17e23251c4e..a6a5c54d57cc 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -576,14 +576,6 @@ const translations: TranslationDeepObject = { week: 'Woche', year: 'Jahr', quarter: 'Quartal', - expensifyLogo: 'Expensify-Logo', - }, - socials: { - podcast: 'Folgen Sie uns auf Podcast', - twitter: 'Folgen Sie uns auf Twitter', - instagram: 'Folgen Sie uns auf Instagram', - facebook: 'Folgen Sie uns auf Facebook', - linkedin: 'Folgen Sie uns auf LinkedIn', }, supportalNoAccess: { title: 'Nicht so schnell', @@ -7466,7 +7458,6 @@ Fordern Sie Spesendetails wie Belege und Beschreibungen an, legen Sie Limits und parentNavigationSummary: ({reportName, workspaceName}: ParentNavigationSummaryParams) => `Von ${reportName}${workspaceName ? `in ${workspaceName}` : ''}`, }, qrCodes: { - qrCode: 'QR-Code', copy: 'URL kopieren', copied: 'Kopiert!', }, diff --git a/src/languages/en.ts b/src/languages/en.ts index 493b8e4763ca..0a0c4faf1534 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -596,14 +596,6 @@ const translations = { week: 'Week', year: 'Year', quarter: 'Quarter', - expensifyLogo: 'Expensify logo', - }, - socials: { - podcast: 'Follow us on Podcast', - twitter: 'Follow us on Twitter', - instagram: 'Follow us on Instagram', - facebook: 'Follow us on Facebook', - linkedin: 'Follow us on LinkedIn', }, supportalNoAccess: { title: 'Not so fast', @@ -7408,7 +7400,6 @@ const translations = { parentNavigationSummary: ({reportName, workspaceName}: ParentNavigationSummaryParams) => `From ${reportName}${workspaceName ? ` in ${workspaceName}` : ''}`, }, qrCodes: { - qrCode: 'QR code', copy: 'Copy URL', copied: 'Copied!', }, diff --git a/src/languages/es.ts b/src/languages/es.ts index 297e20e73d8a..c93c1bd365b2 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -407,14 +407,6 @@ const translations: TranslationDeepObject = { week: 'Semana', year: 'Año', quarter: 'Trimestre', - expensifyLogo: 'Logo de Expensify', - }, - socials: { - podcast: 'Síguenos en Podcast', - twitter: 'Síguenos en Twitter', - instagram: 'Síguenos en Instagram', - facebook: 'Síguenos en Facebook', - linkedin: 'Síguenos en LinkedIn', }, supportalNoAccess: { title: 'No tan rápido', @@ -7684,7 +7676,6 @@ ${amount} para ${merchant} - ${date}`, parentNavigationSummary: ({reportName, workspaceName}) => `De ${reportName}${workspaceName ? ` en ${workspaceName}` : ''}`, }, qrCodes: { - qrCode: 'Código QR', copy: 'Copiar URL', copied: '¡Copiado!', }, diff --git a/src/languages/fr.ts b/src/languages/fr.ts index 6a2d2b204bfd..c3bd4485b4d5 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -576,14 +576,6 @@ const translations: TranslationDeepObject = { week: 'Semaine', year: 'Année', quarter: 'Trimestre', - expensifyLogo: 'Logo Expensify', - }, - socials: { - podcast: 'Suivez-nous sur Podcast', - twitter: 'Suivez-nous sur Twitter', - instagram: 'Suivez-nous sur Instagram', - facebook: 'Suivez-nous sur Facebook', - linkedin: 'Suivez-nous sur LinkedIn', }, supportalNoAccess: { title: 'Pas si vite', @@ -1785,7 +1777,7 @@ const translations: TranslationDeepObject = { featureRequiresValidate: 'Cette fonctionnalité exige que vous validiez votre compte.', validateAccount: 'Validez votre compte', helpText: ({email}: {email: string}) => - `Ajoutez d'autres moyens de vous connecter et d'envoyer des reçus à Expensify.

Ajoutez une adresse e-mail pour transférer des reçus à ${email} ou ajoutez un numéro de téléphone pour envoyer des reçus par SMS au 47777 (numéros américains uniquement).`, + `Ajoutez d’autres moyens de vous connecter et d’envoyer des reçus à Expensify.

Ajoutez une adresse e-mail pour transférer des reçus à ${email} ou ajoutez un numéro de téléphone pour envoyer des reçus par SMS au 47777 (numéros américains uniquement).`, pleaseVerify: 'Veuillez vérifier cette méthode de contact.', getInTouch: 'Nous utiliserons cette méthode pour vous contacter.', enterMagicCode: (contactMethod: string) => `Veuillez saisir le code magique envoyé à ${contactMethod}. Il devrait arriver d'ici une à deux minutes.`, @@ -7489,7 +7481,6 @@ Rendez obligatoires des informations de dépense comme les reçus et les descrip parentNavigationSummary: ({reportName, workspaceName}: ParentNavigationSummaryParams) => `De ${reportName}${workspaceName ? `dans ${workspaceName}` : ''}`, }, qrCodes: { - qrCode: 'Code QR', copy: 'Copier l’URL', copied: 'Copié !', }, diff --git a/src/languages/it.ts b/src/languages/it.ts index ecb9d7e17519..c697ebc68efb 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -576,14 +576,6 @@ const translations: TranslationDeepObject = { week: 'Settimana', year: 'Anno', quarter: 'Trimestre', - expensifyLogo: 'Logo Expensify', - }, - socials: { - podcast: 'Seguici su Podcast', - twitter: 'Seguici su Twitter', - instagram: 'Seguici su Instagram', - facebook: 'Seguici su Facebook', - linkedin: 'Seguici su LinkedIn', }, supportalNoAccess: { title: 'Non così in fretta', @@ -7453,7 +7445,6 @@ Richiedi dettagli sulle spese come ricevute e descrizioni, imposta limiti e valo parentNavigationSummary: ({reportName, workspaceName}: ParentNavigationSummaryParams) => `Da ${reportName}${workspaceName ? `in ${workspaceName}` : ''}`, }, qrCodes: { - qrCode: 'Codice QR', copy: 'Copia URL', copied: 'Copiato!', }, diff --git a/src/languages/ja.ts b/src/languages/ja.ts index f0d95b7ba188..48f45fe049e7 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -576,14 +576,6 @@ const translations: TranslationDeepObject = { week: '週', year: '年', quarter: '四半期', - expensifyLogo: 'Expensifyロゴ', - }, - socials: { - podcast: 'ポッドキャストでフォロー', - twitter: 'Twitterでフォロー', - instagram: 'Instagramでフォロー', - facebook: 'Facebookでフォロー', - linkedin: 'LinkedInでフォロー', }, supportalNoAccess: { title: 'ちょっと待ってください', @@ -7382,7 +7374,6 @@ ${reportName} parentNavigationSummary: ({reportName, workspaceName}: ParentNavigationSummaryParams) => `${reportName}${workspaceName ? `${workspaceName} の中` : ''} から`, }, qrCodes: { - qrCode: 'QRコード', copy: 'URLをコピー', copied: 'コピーしました!', }, diff --git a/src/languages/nl.ts b/src/languages/nl.ts index aa76a2439884..129b9083a6ca 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -576,14 +576,6 @@ const translations: TranslationDeepObject = { week: 'Week', year: 'Jaar', quarter: 'Kwartaal', - expensifyLogo: 'Expensify-logo', - }, - socials: { - podcast: 'Volg ons op Podcast', - twitter: 'Volg ons op Twitter', - instagram: 'Volg ons op Instagram', - facebook: 'Volg ons op Facebook', - linkedin: 'Volg ons op LinkedIn', }, supportalNoAccess: { title: 'Niet zo snel', @@ -1775,7 +1767,7 @@ const translations: TranslationDeepObject = { featureRequiresValidate: 'Voor deze functie moet je je account verifiëren.', validateAccount: 'Valideer je account', helpText: ({email}: {email: string}) => - `Voeg meer manieren toe om in te loggen en bonnetjes naar Expensify te sturen.

Voeg een e-mailadres toe om bonnetjes door te sturen naar ${email} of voeg een telefoonnummer toe om bonnetjes te sms'en naar 47777 (alleen voor Amerikaanse nummers).`, + `Voeg meer manieren toe om in te loggen en bonnetjes naar Expensify te sturen.

Voeg een e-mailadres toe om bonnetjes door te sturen naar ${email} of voeg een telefoonnummer toe om bonnetjes te sms’en naar 47777 (alleen voor Amerikaanse nummers).`, pleaseVerify: 'Verifieer deze contactmethode.', getInTouch: 'We gebruiken deze methode om contact met je op te nemen.', enterMagicCode: (contactMethod: string) => `Voer de magische code in die naar ${contactMethod} is verzonden. Deze zou binnen een minuut of twee moeten aankomen.`, @@ -7438,7 +7430,6 @@ Vereis onkostendetails zoals bonnen en beschrijvingen, stel limieten en standaar parentNavigationSummary: ({reportName, workspaceName}: ParentNavigationSummaryParams) => `Van ${reportName}${workspaceName ? `in ${workspaceName}` : ''}`, }, qrCodes: { - qrCode: 'QR-code', copy: 'URL kopiëren', copied: 'Gekopieerd!', }, diff --git a/src/languages/pl.ts b/src/languages/pl.ts index 3d8c767b0bb7..0e66f944f088 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -576,14 +576,6 @@ const translations: TranslationDeepObject = { week: 'Tydzień', year: 'Rok', quarter: 'Kwartał', - expensifyLogo: 'Logo Expensify', - }, - socials: { - podcast: 'Śledź nas na Podcast', - twitter: 'Śledź nas na Twitter', - instagram: 'Śledź nas na Instagram', - facebook: 'Śledź nas na Facebook', - linkedin: 'Śledź nas na LinkedIn', }, supportalNoAccess: { title: 'Nie tak szybko', @@ -7420,7 +7412,6 @@ Wymagaj szczegółów wydatków, takich jak paragony i opisy, ustawiaj limity i parentNavigationSummary: ({reportName, workspaceName}: ParentNavigationSummaryParams) => `Z raportu ${reportName}${workspaceName ? `w ${workspaceName}` : ''}`, }, qrCodes: { - qrCode: 'Kod QR', copy: 'Skopiuj URL', copied: 'Skopiowano!', }, diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index 71d3990b0fc8..5c365f4bd20d 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -575,14 +575,6 @@ const translations: TranslationDeepObject = { week: 'Semana', year: 'Ano', quarter: 'Trimestre', - expensifyLogo: 'Logo da Expensify', - }, - socials: { - podcast: 'Siga-nos no Podcast', - twitter: 'Siga-nos no Twitter', - instagram: 'Siga-nos no Instagram', - facebook: 'Siga-nos no Facebook', - linkedin: 'Siga-nos no LinkedIn', }, supportalNoAccess: { title: 'Calma aí', @@ -7423,7 +7415,6 @@ Exija dados de despesas como recibos e descrições, defina limites e padrões e parentNavigationSummary: ({reportName, workspaceName}: ParentNavigationSummaryParams) => `De ${reportName}${workspaceName ? `em ${workspaceName}` : ''}`, }, qrCodes: { - qrCode: 'Código QR', copy: 'Copiar URL', copied: 'Copiado!', }, diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index 1c6d0390a553..aeb596be7775 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -571,14 +571,6 @@ const translations: TranslationDeepObject = { week: '周', year: '年份', quarter: '季度', - expensifyLogo: 'Expensify徽标', - }, - socials: { - podcast: '在播客上关注我们', - twitter: '在Twitter上关注我们', - instagram: '在Instagram上关注我们', - facebook: '在Facebook上关注我们', - linkedin: '在LinkedIn上关注我们', }, supportalNoAccess: { title: '先别急', @@ -7272,7 +7264,6 @@ ${reportName} parentNavigationSummary: ({reportName, workspaceName}: ParentNavigationSummaryParams) => `来自${reportName}${workspaceName ? `在 ${workspaceName} 中` : ''}`, }, qrCodes: { - qrCode: '二维码', copy: '复制 URL', copied: '已复制!', }, diff --git a/src/pages/signin/Socials.tsx b/src/pages/signin/Socials.tsx index 7b09a6fd9a6a..2ccfbfb72a23 100644 --- a/src/pages/signin/Socials.tsx +++ b/src/pages/signin/Socials.tsx @@ -4,52 +4,43 @@ import Icon from '@components/Icon'; import type {ExpensifyIconName} from '@components/Icon/ExpensifyIconLoader'; import PressableWithoutFeedback from '@components/Pressable/PressableWithoutFeedback'; import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset'; -import useLocalize from '@hooks/useLocalize'; import useTheme from '@hooks/useTheme'; import useThemeStyles from '@hooks/useThemeStyles'; import {openExternalLink} from '@libs/actions/Link'; import variables from '@styles/variables'; import CONST from '@src/CONST'; -import type {TranslationPaths} from '@src/languages/types'; type Social = { iconURL: Extract; link: string; - label: TranslationPaths; }; const socialList: Social[] = [ { iconURL: 'Podcast', link: CONST.SOCIALS.PODCAST, - label: 'socials.podcast', }, { iconURL: 'Twitter', link: CONST.SOCIALS.TWITTER, - label: 'socials.twitter', }, { iconURL: 'Instagram', link: CONST.SOCIALS.INSTAGRAM, - label: 'socials.instagram', }, { iconURL: 'Facebook', link: CONST.SOCIALS.FACEBOOK, - label: 'socials.facebook', }, { iconURL: 'Linkedin', link: CONST.SOCIALS.LINKEDIN, - label: 'socials.linkedin', }, ]; function Socials() { const theme = useTheme(); const styles = useThemeStyles(); - const {translate} = useLocalize(); const icons = useMemoizedLazyExpensifyIcons(['Podcast', 'Twitter', 'Instagram', 'Facebook', 'Linkedin']); return ( @@ -62,9 +53,7 @@ function Socials() { e?.preventDefault(); openExternalLink(social.link); }} - accessible - accessibilityRole={CONST.ROLE.LINK} - accessibilityLabel={translate(social.label)} + accessibilityLabel={social.iconURL} style={[styles.mr1, styles.mt1]} shouldUseAutoHitSlop={false} sentryLabel={`${CONST.SENTRY_LABEL.SOCIALS.LINK}-${social.iconURL}`} diff --git a/src/pages/workspace/WorkspacesListPage.tsx b/src/pages/workspace/WorkspacesListPage.tsx index 001afefa82d4..74c7b9ad8481 100755 --- a/src/pages/workspace/WorkspacesListPage.tsx +++ b/src/pages/workspace/WorkspacesListPage.tsx @@ -55,6 +55,7 @@ import { getConnectionExporters, getPolicyBrickRoadIndicatorStatus, getUberConnectionErrorDirectlyFromPolicy, + getUserFriendlyWorkspaceType, isPendingDeletePolicy, isPolicyAdmin, isPolicyAuditor, @@ -438,6 +439,17 @@ function WorkspacesListPage() { }); } + const ownerDisplayName = personalDetails?.[item.ownerAccountID ?? CONST.DEFAULT_NUMBER_ID]?.displayName ?? ''; + const workspaceType = item.type ? getUserFriendlyWorkspaceType(item.type, translate) : ''; + const accessibilityLabel = [ + `${translate('workspace.common.workspace')}: ${item.title}`, + isDefault ? translate('common.default') : '', + `${translate('workspace.common.workspaceOwner')}: ${ownerDisplayName}`, + `${translate('workspace.common.workspaceType')}: ${workspaceType}`, + ] + .filter(Boolean) + .join(', '); + return ( - {/* accessible={false} allows child elements (workspace row and 3-dot menu) to be individually focusable. - onPress is handled by WorkspacesListRow to prevent double-firing on web due to event bubbling. */} {({hovered}) => ( @@ -476,7 +488,6 @@ function WorkspacesListPage() { isLoadingBill={isLoadingBill} resetLoadingSpinnerIconIndex={resetLoadingSpinnerIconIndex} isHovered={hovered} - onPress={item.action} /> )} diff --git a/src/pages/workspace/WorkspacesListRow.tsx b/src/pages/workspace/WorkspacesListRow.tsx index 853bb20ed4a4..30bf3330ea74 100644 --- a/src/pages/workspace/WorkspacesListRow.tsx +++ b/src/pages/workspace/WorkspacesListRow.tsx @@ -10,7 +10,6 @@ import Badge from '@components/Badge'; import Icon from '@components/Icon'; import * as Expensicons from '@components/Icon/Expensicons'; import type {PopoverMenuItem} from '@components/PopoverMenu'; -import PressableWithoutFeedback from '@components/Pressable/PressableWithoutFeedback'; import Text from '@components/Text'; import TextWithTooltip from '@components/TextWithTooltip'; import ThreeDotsMenu from '@components/ThreeDotsMenu'; @@ -21,6 +20,7 @@ import WorkspacesListRowDisplayName from '@components/WorkspacesListRowDisplayNa import useAnimatedHighlightStyle from '@hooks/useAnimatedHighlightStyle'; import {useMemoizedLazyExpensifyIcons, useMemoizedLazyIllustrations} from '@hooks/useLazyAsset'; import useLocalize from '@hooks/useLocalize'; +import useResponsiveLayout from '@hooks/useResponsiveLayout'; import useTheme from '@hooks/useTheme'; import useThemeStyles from '@hooks/useThemeStyles'; import {getDisplayNameOrDefault, getPersonalDetailsByIDs} from '@libs/PersonalDetailsUtils'; @@ -85,9 +85,6 @@ type WorkspacesListRowProps = WithCurrentUserPersonalDetailsProps & { /** Whether the list item is hovered */ isHovered?: boolean; - - /** Callback when the row is pressed */ - onPress?: () => void; }; type BrickRoadIndicatorIconProps = { @@ -125,10 +122,10 @@ function WorkspacesListRow({ isLoadingBill, resetLoadingSpinnerIconIndex, isHovered, - onPress, }: WorkspacesListRowProps) { const styles = useThemeStyles(); const {translate} = useLocalize(); + const {shouldUseNarrowLayout} = useResponsiveLayout(); const theme = useTheme(); const isFocused = useIsFocused(); const isNarrow = layoutWidth === CONST.LAYOUT_WIDTH.NARROW; @@ -180,15 +177,17 @@ function WorkspacesListRow({ const isDeleted = style && Array.isArray(style) ? style.includes(styles.offlineFeedbackDeleted) : false; - const WorkspaceBadges = ( - + const ThreeDotMenuOrPendingIcon = ( + {!!isJoinRequestPending && ( - + + + )} {!!isDefault && ( - + )} {!isJoinRequestPending && ( - - + + + + + )} ); - const ownerName = ownerDetails ? getDisplayNameOrDefault(ownerDetails) : ''; - const workspaceTypeName = workspaceType ? getUserFriendlyWorkspaceType(workspaceType, translate) : ''; - const defaultLabel = isDefault ? `, ${translate('common.default')}` : ''; - const pendingLabel = isJoinRequestPending ? `, ${translate('workspace.common.requested')}` : ''; - const accessibilityLabel = `${title}${ownerName ? `, ${ownerName}` : ''}${workspaceTypeName ? `, ${workspaceTypeName}` : ''}${defaultLabel}${pendingLabel}`; - return ( - + - {isNarrow && WorkspaceBadges} + {isNarrow && ThreeDotMenuOrPendingIcon} {!!ownerDetails && ( @@ -262,7 +260,7 @@ function WorkspacesListRow({ - {workspaceTypeName} + {getUserFriendlyWorkspaceType(workspaceType, translate)} )} - {!isNarrow && WorkspaceBadges} - - - - {!isJoinRequestPending && ( - - )} + + + + {!isNarrow && ThreeDotMenuOrPendingIcon} {!isNarrow && (