From f2356e779f33ed61d637e66f8ff2adbd5fc67bbe Mon Sep 17 00:00:00 2001 From: krishna2323 Date: Tue, 28 Jan 2025 15:32:46 +0530 Subject: [PATCH 1/4] fix: Workspace - The new WS names appear in English when Spanish is set up. Signed-off-by: krishna2323 --- src/languages/en.ts | 3 ++ src/languages/es.ts | 3 ++ src/languages/params.ts | 3 ++ src/libs/actions/Policy/Policy.ts | 46 ++++++++++++++++++------------- 4 files changed, 36 insertions(+), 19 deletions(-) diff --git a/src/languages/en.ts b/src/languages/en.ts index 9f1feb396c6d..c4306aac30ab 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -104,6 +104,7 @@ import type { MarkReimbursedFromIntegrationParams, MissingPropertyParams, MovedFromSelfDMParams, + NewWorksacepNameParams, NoLongerHaveAccessParams, NotAllowedExtensionParams, NotYouParams, @@ -3880,6 +3881,8 @@ const translations = { newWorkspace: 'New workspace', getTheExpensifyCardAndMore: 'Get the Expensify Card and more', confirmWorkspace: 'Confirm Workspace', + myGroupWorkspace: 'My Group Workspace', + workspaceName: ({userName, workspaceNumber}: NewWorksacepNameParams) => `${userName}'s Workspace${workspaceNumber ? ` ${workspaceNumber}` : ''}`, }, people: { genericFailureMessage: 'An error occurred removing a member from the workspace, please try again.', diff --git a/src/languages/es.ts b/src/languages/es.ts index 4a82e11a2004..dbbc5395e80d 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -103,6 +103,7 @@ import type { MarkReimbursedFromIntegrationParams, MissingPropertyParams, MovedFromSelfDMParams, + NewWorksacepNameParams, NoLongerHaveAccessParams, NotAllowedExtensionParams, NotYouParams, @@ -3924,6 +3925,8 @@ const translations = { newWorkspace: 'Nuevo espacio de trabajo', getTheExpensifyCardAndMore: 'Consigue la Tarjeta Expensify y más', confirmWorkspace: 'Confirmar espacio de trabajo', + myGroupWorkspace: 'Mi Espacio de Trabajo en Grupo', + workspaceName: ({userName, workspaceNumber}: NewWorksacepNameParams) => `Espacio de trabajo${workspaceNumber ? ` ${workspaceNumber}` : ''} de ${userName}`, }, people: { genericFailureMessage: 'Se ha producido un error al intentar eliminar a un miembro del espacio de trabajo. Por favor, inténtalo más tarde.', diff --git a/src/languages/params.ts b/src/languages/params.ts index 59e4acf74f6a..a4830049702f 100644 --- a/src/languages/params.ts +++ b/src/languages/params.ts @@ -208,6 +208,8 @@ type UserIsAlreadyMemberParams = {login: string; name: string}; type GoToRoomParams = {roomName: string}; +type NewWorksacepNameParams = {userName: string; workspaceNumber?: number}; + type WelcomeNoteParams = {workspaceName: string}; type RoomNameReservedErrorParams = {reservedName: string}; @@ -819,4 +821,5 @@ export type { ChatWithAccountManagerParams, EditDestinationSubtitleParams, FlightLayoverParams, + NewWorksacepNameParams, }; diff --git a/src/libs/actions/Policy/Policy.ts b/src/libs/actions/Policy/Policy.ts index 1d1090996e48..1a095c83207d 100644 --- a/src/libs/actions/Policy/Policy.ts +++ b/src/libs/actions/Policy/Policy.ts @@ -1,5 +1,4 @@ import {PUBLIC_DOMAINS, Str} from 'expensify-common'; -import escapeRegExp from 'lodash/escapeRegExp'; import lodashUnion from 'lodash/union'; import type {NullishDeep, OnyxCollection, OnyxEntry, OnyxUpdate} from 'react-native-onyx'; import Onyx from 'react-native-onyx'; @@ -67,6 +66,7 @@ import * as ErrorUtils from '@libs/ErrorUtils'; import {createFile} from '@libs/fileDownload/FileUtils'; import getIsNarrowLayout from '@libs/getIsNarrowLayout'; import GoogleTagManager from '@libs/GoogleTagManager'; +import {translateLocal} from '@libs/Localize'; import Log from '@libs/Log'; import * as NetworkStore from '@libs/Network/NetworkStore'; import * as NumberUtils from '@libs/NumberUtils'; @@ -1558,40 +1558,48 @@ function removeWorkspace(policyID: string) { */ function generateDefaultWorkspaceName(email = ''): string { const emailParts = email ? email.split('@') : sessionEmail.split('@'); - let defaultWorkspaceName = ''; if (!emailParts || emailParts.length !== 2) { - return defaultWorkspaceName; + return ''; } const username = emailParts.at(0) ?? ''; const domain = emailParts.at(1) ?? ''; const userDetails = PersonalDetailsUtils.getPersonalDetailByEmail(sessionEmail); const displayName = userDetails?.displayName?.trim(); + let displayNameForWorkspace = ''; - if (!PUBLIC_DOMAINS.some((publicDomain) => publicDomain === domain.toLowerCase())) { - defaultWorkspaceName = `${Str.UCFirst(domain.split('.').at(0) ?? '')}'s Workspace`; + if (!PUBLIC_DOMAINS.some((publicDomain) => publicDomain === domain)) { + displayNameForWorkspace = Str.UCFirst(domain.split('.').at(0) ?? ''); } else if (displayName) { - defaultWorkspaceName = `${Str.UCFirst(displayName)}'s Workspace`; - } else if (PUBLIC_DOMAINS.some((publicDomain) => publicDomain === domain.toLowerCase())) { - defaultWorkspaceName = `${Str.UCFirst(username)}'s Workspace`; + displayNameForWorkspace = Str.UCFirst(displayName); + } else if (PUBLIC_DOMAINS.some((publicDomain) => publicDomain === domain)) { + displayNameForWorkspace = Str.UCFirst(username); } else { - defaultWorkspaceName = userDetails?.phoneNumber ?? ''; + displayNameForWorkspace = userDetails?.phoneNumber ?? ''; } - if (`@${domain.toLowerCase()}` === CONST.SMS.DOMAIN) { - defaultWorkspaceName = 'My Group Workspace'; + if (`@${domain}` === CONST.SMS.DOMAIN) { + return translateLocal('workspace.new.myGroupWorkspace'); } if (isEmptyObject(allPolicies)) { - return defaultWorkspaceName; + return translateLocal('workspace.new.workspaceName', {userName: displayNameForWorkspace}); } - // find default named workspaces and increment the last number - const numberRegEx = new RegExp(`${escapeRegExp(defaultWorkspaceName)} ?(\\d*)`, 'i'); - const parsedWorkspaceNumbers = Object.values(allPolicies ?? {}) - .filter((policy) => policy?.name && numberRegEx.test(policy.name)) - .map((policy) => Number(numberRegEx.exec(policy?.name ?? '')?.[1] ?? '1')); // parse the number at the end - const lastWorkspaceNumber = Math.max(...parsedWorkspaceNumbers); - return lastWorkspaceNumber !== -Infinity ? `${defaultWorkspaceName} ${lastWorkspaceNumber + 1}` : defaultWorkspaceName; + // Dynamically include the username in the regex + const escapedName = displayNameForWorkspace.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + const englishRegex = new RegExp(`${escapedName}'s Workspace(?:\\s(\\d+))?$`, 'i'); + const spanishRegex = new RegExp(`Espacio de trabajo(?:\\s(\\d+))? de ${escapedName}$`, 'i'); + + const workspaceNumbers = Object.values(allPolicies) + .map((policy) => englishRegex.exec(policy?.name ?? '') ?? spanishRegex.exec(policy?.name ?? '')) + .filter(Boolean) // Remove null matches + .map((match) => Number(match?.[1] ?? '1')); + + const lastWorkspaceNumber = workspaceNumbers.length > 0 ? Math.max(...workspaceNumbers) : -Infinity; + + return lastWorkspaceNumber !== -Infinity + ? translateLocal('workspace.new.workspaceName', {userName: displayNameForWorkspace, workspaceNumber: lastWorkspaceNumber + 1}) + : translateLocal('workspace.new.workspaceName', {userName: displayNameForWorkspace}); } /** From 04956f82143ad47a0851e4fdb4af2fe9a9817a69 Mon Sep 17 00:00:00 2001 From: krishna2323 Date: Wed, 29 Jan 2025 17:08:01 +0530 Subject: [PATCH 2/4] fix regex. Signed-off-by: krishna2323 --- src/libs/actions/Policy/Policy.ts | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/libs/actions/Policy/Policy.ts b/src/libs/actions/Policy/Policy.ts index 1a095c83207d..d4ebfc329f67 100644 --- a/src/libs/actions/Policy/Policy.ts +++ b/src/libs/actions/Policy/Policy.ts @@ -1,4 +1,5 @@ import {PUBLIC_DOMAINS, Str} from 'expensify-common'; +import escapeRegExp from 'lodash/escapeRegExp'; import lodashUnion from 'lodash/union'; import type {NullishDeep, OnyxCollection, OnyxEntry, OnyxUpdate} from 'react-native-onyx'; import Onyx from 'react-native-onyx'; @@ -1585,16 +1586,14 @@ function generateDefaultWorkspaceName(email = ''): string { return translateLocal('workspace.new.workspaceName', {userName: displayNameForWorkspace}); } - // Dynamically include the username in the regex - const escapedName = displayNameForWorkspace.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); - const englishRegex = new RegExp(`${escapedName}'s Workspace(?:\\s(\\d+))?$`, 'i'); - const spanishRegex = new RegExp(`Espacio de trabajo(?:\\s(\\d+))? de ${escapedName}$`, 'i'); + // find default named workspaces and increment the last number + const escapedName = escapeRegExp(displayNameForWorkspace); + const workspaceRegex = new RegExp(`(?:${escapedName}'s Workspace|Espacio de trabajo)\\s*(\\d+)?\\s*(?:de ${escapedName})?$`, 'i'); const workspaceNumbers = Object.values(allPolicies) - .map((policy) => englishRegex.exec(policy?.name ?? '') ?? spanishRegex.exec(policy?.name ?? '')) + .map((policy) => workspaceRegex.exec(policy?.name ?? '')) .filter(Boolean) // Remove null matches - .map((match) => Number(match?.[1] ?? '1')); - + .map((match) => Number(match?.[1] ?? '0')); const lastWorkspaceNumber = workspaceNumbers.length > 0 ? Math.max(...workspaceNumbers) : -Infinity; return lastWorkspaceNumber !== -Infinity From 570944ad0c2518025d53fb5b4a43ee48cc4fe42f Mon Sep 17 00:00:00 2001 From: krishna2323 Date: Fri, 7 Feb 2025 02:24:17 +0530 Subject: [PATCH 3/4] minor fixes. Signed-off-by: krishna2323 --- src/languages/en.ts | 4 ++-- src/languages/es.ts | 4 ++-- src/languages/params.ts | 4 ++-- src/libs/actions/Policy/Policy.ts | 6 ++---- 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/languages/en.ts b/src/languages/en.ts index 334503a35e1b..b2c7cb1f617b 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -104,7 +104,7 @@ import type { MarkReimbursedFromIntegrationParams, MissingPropertyParams, MovedFromSelfDMParams, - NewWorksacepNameParams, + NewWorkspaceNameParams, NoLongerHaveAccessParams, NotAllowedExtensionParams, NotYouParams, @@ -3965,7 +3965,7 @@ const translations = { getTheExpensifyCardAndMore: 'Get the Expensify Card and more', confirmWorkspace: 'Confirm Workspace', myGroupWorkspace: 'My Group Workspace', - workspaceName: ({userName, workspaceNumber}: NewWorksacepNameParams) => `${userName}'s Workspace${workspaceNumber ? ` ${workspaceNumber}` : ''}`, + workspaceName: ({userName, workspaceNumber}: NewWorkspaceNameParams) => `${userName}'s Workspace${workspaceNumber ? ` ${workspaceNumber}` : ''}`, }, people: { genericFailureMessage: 'An error occurred removing a member from the workspace, please try again.', diff --git a/src/languages/es.ts b/src/languages/es.ts index f42297dcec05..453d85fe46c0 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -103,7 +103,7 @@ import type { MarkReimbursedFromIntegrationParams, MissingPropertyParams, MovedFromSelfDMParams, - NewWorksacepNameParams, + NewWorkspaceNameParams, NoLongerHaveAccessParams, NotAllowedExtensionParams, NotYouParams, @@ -4009,7 +4009,7 @@ const translations = { getTheExpensifyCardAndMore: 'Consigue la Tarjeta Expensify y más', confirmWorkspace: 'Confirmar espacio de trabajo', myGroupWorkspace: 'Mi Espacio de Trabajo en Grupo', - workspaceName: ({userName, workspaceNumber}: NewWorksacepNameParams) => `Espacio de trabajo${workspaceNumber ? ` ${workspaceNumber}` : ''} de ${userName}`, + workspaceName: ({userName, workspaceNumber}: NewWorkspaceNameParams) => `Espacio de trabajo${workspaceNumber ? ` ${workspaceNumber}` : ''} de ${userName}`, }, people: { genericFailureMessage: 'Se ha producido un error al intentar eliminar a un miembro del espacio de trabajo. Por favor, inténtalo más tarde.', diff --git a/src/languages/params.ts b/src/languages/params.ts index dee5e2743a22..b36659b0e4da 100644 --- a/src/languages/params.ts +++ b/src/languages/params.ts @@ -208,7 +208,7 @@ type UserIsAlreadyMemberParams = {login: string; name: string}; type GoToRoomParams = {roomName: string}; -type NewWorksacepNameParams = {userName: string; workspaceNumber?: number}; +type NewWorkspaceNameParams = {userName: string; workspaceNumber?: number}; type RoomNameReservedErrorParams = {reservedName: string}; @@ -826,7 +826,7 @@ export type { ChatWithAccountManagerParams, EditDestinationSubtitleParams, FlightLayoverParams, - NewWorksacepNameParams, + NewWorkspaceNameParams, SubmitsToParams, SettlementDateParams, }; diff --git a/src/libs/actions/Policy/Policy.ts b/src/libs/actions/Policy/Policy.ts index d47277fd82ea..bbc345eccb63 100644 --- a/src/libs/actions/Policy/Policy.ts +++ b/src/libs/actions/Policy/Policy.ts @@ -1601,11 +1601,9 @@ function generateDefaultWorkspaceName(email = ''): string { .map((policy) => workspaceRegex.exec(policy?.name ?? '')) .filter(Boolean) // Remove null matches .map((match) => Number(match?.[1] ?? '0')); - const lastWorkspaceNumber = workspaceNumbers.length > 0 ? Math.max(...workspaceNumbers) : -Infinity; + const lastWorkspaceNumber = workspaceNumbers.length > 0 ? Math.max(...workspaceNumbers) : undefined; - return lastWorkspaceNumber !== -Infinity - ? translateLocal('workspace.new.workspaceName', {userName: displayNameForWorkspace, workspaceNumber: lastWorkspaceNumber + 1}) - : translateLocal('workspace.new.workspaceName', {userName: displayNameForWorkspace}); + return translateLocal('workspace.new.workspaceName', {userName: displayNameForWorkspace, workspaceNumber: lastWorkspaceNumber ? lastWorkspaceNumber + 1 : undefined}); } /** From 72934b8f70f69bd1c5890b30025788897fd8e767 Mon Sep 17 00:00:00 2001 From: krishna2323 Date: Fri, 7 Feb 2025 02:34:31 +0530 Subject: [PATCH 4/4] minor fix. Signed-off-by: krishna2323 --- src/libs/actions/Policy/Policy.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/actions/Policy/Policy.ts b/src/libs/actions/Policy/Policy.ts index bbc345eccb63..767f63e00363 100644 --- a/src/libs/actions/Policy/Policy.ts +++ b/src/libs/actions/Policy/Policy.ts @@ -1603,7 +1603,7 @@ function generateDefaultWorkspaceName(email = ''): string { .map((match) => Number(match?.[1] ?? '0')); const lastWorkspaceNumber = workspaceNumbers.length > 0 ? Math.max(...workspaceNumbers) : undefined; - return translateLocal('workspace.new.workspaceName', {userName: displayNameForWorkspace, workspaceNumber: lastWorkspaceNumber ? lastWorkspaceNumber + 1 : undefined}); + return translateLocal('workspace.new.workspaceName', {userName: displayNameForWorkspace, workspaceNumber: lastWorkspaceNumber !== undefined ? lastWorkspaceNumber + 1 : undefined}); } /**