From 72f098c6674afe966fed6dcde544be9df40de932 Mon Sep 17 00:00:00 2001 From: Anthony LC Date: Tue, 7 Oct 2025 12:08:07 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B(frontend)=20email=20case=20sensiti?= =?UTF-8?q?ve=20search=20modal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When a user was searching for an email in the share modal, the search was case sensitive, so we were proposing to send an invitation to a new user when in fact the user was already registered. The search is now case insensitive, so the only choice is to add the existing user in the share list. --- .../__tests__/app-impress/doc-member-create.spec.ts | 11 +++++++++-- .../doc-share/components/DocShareAddMemberList.tsx | 2 +- .../docs/doc-share/components/DocShareModal.tsx | 4 +++- .../docs/doc-share/components/SearchUserRow.tsx | 2 +- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/frontend/apps/e2e/__tests__/app-impress/doc-member-create.spec.ts b/src/frontend/apps/e2e/__tests__/app-impress/doc-member-create.spec.ts index d426ac50..623b8043 100644 --- a/src/frontend/apps/e2e/__tests__/app-impress/doc-member-create.spec.ts +++ b/src/frontend/apps/e2e/__tests__/app-impress/doc-member-create.spec.ts @@ -169,8 +169,15 @@ test.describe('Document create member', () => { const inputSearch = page.getByTestId('quick-search-input'); - const email = randomName('test@test.fr', browserName, 1)[0]; + let email = 'user.test21@example.COM'; await inputSearch.fill(email); + + // Check email is found in search (case insensitive) + await expect(page.getByRole('option').getByText(email)).toHaveCount(1); + + email = email + 'M'; + await inputSearch.fill(email); + await page.getByTestId(`search-user-row-${email}`).click(); // Choose a role @@ -191,7 +198,7 @@ test.describe('Document create member', () => { const listInvitation = page.getByTestId('doc-share-quick-search'); const userInvitation = listInvitation.getByTestId( - `doc-share-invitation-row-${email}`, + `doc-share-invitation-row-${email.toLowerCase()}`, ); await expect(userInvitation).toBeVisible(); diff --git a/src/frontend/apps/impress/src/features/docs/doc-share/components/DocShareAddMemberList.tsx b/src/frontend/apps/impress/src/features/docs/doc-share/components/DocShareAddMemberList.tsx index 351dca4a..b797eb96 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-share/components/DocShareAddMemberList.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-share/components/DocShareAddMemberList.tsx @@ -91,7 +91,7 @@ export const DocShareAddMemberList = ({ return isInvitationMode ? createInvitation({ ...payload, - email: user.email, + email: user.email.toLowerCase(), }) : createDocAccess({ ...payload, diff --git a/src/frontend/apps/impress/src/features/docs/doc-share/components/DocShareModal.tsx b/src/frontend/apps/impress/src/features/docs/doc-share/components/DocShareModal.tsx index c214b1ed..54d99c93 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-share/components/DocShareModal.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-share/components/DocShareModal.tsx @@ -296,7 +296,9 @@ const QuickSearchInviteInputSection = ({ language: '', }; - const hasEmailInUsers = users.some((user) => user.email === userQuery); + const hasEmailInUsers = users.some( + (user) => user.email.toLowerCase() === userQuery.toLowerCase(), + ); return { groupName: t('Search user result'), diff --git a/src/frontend/apps/impress/src/features/docs/doc-share/components/SearchUserRow.tsx b/src/frontend/apps/impress/src/features/docs/doc-share/components/SearchUserRow.tsx index 109a6076..52962610 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-share/components/SearchUserRow.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-share/components/SearchUserRow.tsx @@ -21,7 +21,7 @@ export const SearchUserRow = ({ alwaysShowRight = false, isInvitation = false, }: Props) => { - const hasFullName = user.full_name != null && user.full_name !== ''; + const hasFullName = !!user.full_name; const { spacingsTokens, colorsTokens } = useCunninghamTheme(); return (