From 75f24a5545dc50483d94a989ba379fdcf0e6ece0 Mon Sep 17 00:00:00 2001
From: Laura Beatris <48022589+LauraBeatris@users.noreply.github.com>
Date: Sat, 18 Jan 2025 11:38:04 -0300
Subject: [PATCH 01/21] chore: Add `query` param to memberships query
---
packages/shared/src/react/hooks/useOrganization.tsx | 1 +
packages/types/src/organization.ts | 1 +
2 files changed, 2 insertions(+)
diff --git a/packages/shared/src/react/hooks/useOrganization.tsx b/packages/shared/src/react/hooks/useOrganization.tsx
index aa07e970651..c0e44dbf937 100644
--- a/packages/shared/src/react/hooks/useOrganization.tsx
+++ b/packages/shared/src/react/hooks/useOrganization.tsx
@@ -163,6 +163,7 @@ export const useOrganization: UseOrganization = params => {
initialPage: membersSafeValues.initialPage,
pageSize: membersSafeValues.pageSize,
role: membersSafeValues.role,
+ query: membersSafeValues.query,
};
const invitationsParams =
diff --git a/packages/types/src/organization.ts b/packages/types/src/organization.ts
index a749bb6d9b5..fc487ad4c60 100644
--- a/packages/types/src/organization.ts
+++ b/packages/types/src/organization.ts
@@ -64,6 +64,7 @@ export type GetRolesParams = ClerkPaginationParams;
export type GetMembersParams = ClerkPaginationParams<{
role?: OrganizationCustomRoleKey[];
+ query?: string;
}>;
export type GetDomainsParams = ClerkPaginationParams<{
From 45afbc88f4ebe645cbfdeee84c74274393c97dd9 Mon Sep 17 00:00:00 2001
From: Laura Beatris <48022589+LauraBeatris@users.noreply.github.com>
Date: Sat, 18 Jan 2025 11:38:49 -0300
Subject: [PATCH 02/21] chore: Add initial UI implementation
---
.../OrganizationProfile/MembersActions.tsx | 2 +-
.../OrganizationProfile/MembersSearch.tsx | 35 +++++++++++++++++++
.../OrganizationMembers.tsx | 19 +++++++++-
.../ui/components/UserProfile/EmailForm.tsx | 2 ++
4 files changed, 56 insertions(+), 2 deletions(-)
create mode 100644 packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
diff --git a/packages/clerk-js/src/ui/components/OrganizationProfile/MembersActions.tsx b/packages/clerk-js/src/ui/components/OrganizationProfile/MembersActions.tsx
index 9f44d2adb64..6a0c3ab27b6 100644
--- a/packages/clerk-js/src/ui/components/OrganizationProfile/MembersActions.tsx
+++ b/packages/clerk-js/src/ui/components/OrganizationProfile/MembersActions.tsx
@@ -13,7 +13,7 @@ export const MembersActionsRow = () => {
({
- width: '100%',
+ // TODO - See if this would break the component in other places
marginLeft: 'auto',
padding: `${t.space.$none} ${t.space.$1}`,
})}
diff --git a/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx b/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
new file mode 100644
index 00000000000..38bf1cdbb6c
--- /dev/null
+++ b/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
@@ -0,0 +1,35 @@
+import { useOrganization } from '@clerk/shared/react';
+import { useState } from 'react';
+
+import { InputWithIcon } from '../../../ui/elements';
+import { MagnifyingGlass } from '../../../ui/icons';
+import { Spinner } from '../../../ui/primitives';
+
+export const MembersSearchRow = () => {
+ const [query, setQuery] = useState();
+
+ const { memberships } = useOrganization({
+ memberships: {
+ query,
+ },
+ });
+
+ /* TODO - Only fire update once the user stops typing */
+ /* TODO - Consider how it'll overlap the invite input */
+ const handleSearch = async (event: React.ChangeEvent) => {
+ setQuery(event?.target.value);
+ };
+
+ return (
+ : }
+ autoCapitalize='none'
+ spellCheck={false}
+ type='search'
+ onChange={handleSearch}
+ />
+ );
+};
diff --git a/packages/clerk-js/src/ui/components/OrganizationProfile/OrganizationMembers.tsx b/packages/clerk-js/src/ui/components/OrganizationProfile/OrganizationMembers.tsx
index 36072461ddc..377047683b5 100644
--- a/packages/clerk-js/src/ui/components/OrganizationProfile/OrganizationMembers.tsx
+++ b/packages/clerk-js/src/ui/components/OrganizationProfile/OrganizationMembers.tsx
@@ -20,6 +20,7 @@ import { mqu } from '../../styledSystem';
import { ActiveMembersList } from './ActiveMembersList';
import { MembersActionsRow } from './MembersActions';
import { MembershipWidget } from './MembershipWidget';
+import { MembersSearchRow } from './MembersSearch';
import { OrganizationMembersTabInvitations } from './OrganizationMembersTabInvitations';
import { OrganizationMembersTabRequests } from './OrganizationMembersTabRequests';
@@ -123,7 +124,23 @@ export const OrganizationMembers = withCardStateProvider(() => {
width: '100%',
}}
>
-
+
+ ({
+ flex: 1,
+ paddingLeft: t.space.$1,
+ })}
+ >
+
+
+
+
diff --git a/packages/clerk-js/src/ui/components/UserProfile/EmailForm.tsx b/packages/clerk-js/src/ui/components/UserProfile/EmailForm.tsx
index 43ed2258827..0db2236f47d 100644
--- a/packages/clerk-js/src/ui/components/UserProfile/EmailForm.tsx
+++ b/packages/clerk-js/src/ui/components/UserProfile/EmailForm.tsx
@@ -56,7 +56,9 @@ export const EmailForm = withCardStateProvider((props: EmailFormProps) => {
return (
+ {/* Example of form */}
organizationProfile.membersPage */
headerTitle={localizationKeys('userProfile.emailAddressPage.title')}
headerSubtitle={localizationKeys('userProfile.emailAddressPage.formHint')}
>
From dc6c79bb7e19ad1ae96d143f3583f0c6930deac4 Mon Sep 17 00:00:00 2001
From: Laura Beatris <48022589+LauraBeatris@users.noreply.github.com>
Date: Mon, 20 Jan 2025 11:06:06 -0300
Subject: [PATCH 03/21] Provide search as slot
---
.../OrganizationProfile/MembersActions.tsx | 12 +++++---
.../OrganizationProfile/MembersSearch.tsx | 30 +++++++++++--------
.../OrganizationMembers.tsx | 20 ++-----------
.../src/react/hooks/useOrganization.tsx | 1 +
4 files changed, 29 insertions(+), 34 deletions(-)
diff --git a/packages/clerk-js/src/ui/components/OrganizationProfile/MembersActions.tsx b/packages/clerk-js/src/ui/components/OrganizationProfile/MembersActions.tsx
index 6a0c3ab27b6..f30c2bf969f 100644
--- a/packages/clerk-js/src/ui/components/OrganizationProfile/MembersActions.tsx
+++ b/packages/clerk-js/src/ui/components/OrganizationProfile/MembersActions.tsx
@@ -4,20 +4,24 @@ import { Animated } from '../../elements';
import { Action } from '../../elements/Action';
import { InviteMembersScreen } from './InviteMembersScreen';
-export const MembersActionsRow = () => {
+type MembersActionsRowProps = {
+ actionSlot: React.ReactNode;
+};
+
+export const MembersActionsRow = ({ actionSlot }: MembersActionsRowProps) => {
const canManageMemberships = useProtect({ permission: 'org:sys_memberships:manage' });
return (
({
- // TODO - See if this would break the component in other places
- marginLeft: 'auto',
padding: `${t.space.$none} ${t.space.$1}`,
})}
+ gap={actionSlot ? 2 : undefined}
>
+ {actionSlot}
{canManageMemberships && (
diff --git a/packages/shared/src/react/hooks/useOrganization.tsx b/packages/shared/src/react/hooks/useOrganization.tsx
index c0e44dbf937..74acbd65644 100644
--- a/packages/shared/src/react/hooks/useOrganization.tsx
+++ b/packages/shared/src/react/hooks/useOrganization.tsx
@@ -124,6 +124,7 @@ export const useOrganization: UseOrganization = params => {
role: undefined,
keepPreviousData: false,
infinite: false,
+ query: undefined,
});
const invitationsSafeValues = useWithSafeValues(invitationsListParams, {
From d0ba4d81f63448ed108f0082f3a5c151a7534010 Mon Sep 17 00:00:00 2001
From: Laura Beatris <48022589+LauraBeatris@users.noreply.github.com>
Date: Mon, 20 Jan 2025 11:32:44 -0300
Subject: [PATCH 04/21] Add translation key
---
.../OrganizationProfile/MembersSearch.tsx | 16 +++++++---------
packages/localizations/src/ar-SA.ts | 3 ++-
packages/localizations/src/be-BY.ts | 3 ++-
packages/localizations/src/bg-BG.ts | 3 ++-
packages/localizations/src/cs-CZ.ts | 3 ++-
packages/localizations/src/da-DK.ts | 3 ++-
packages/localizations/src/de-DE.ts | 3 ++-
packages/localizations/src/el-GR.ts | 3 ++-
packages/localizations/src/en-US.ts | 1 +
packages/localizations/src/es-ES.ts | 3 ++-
packages/localizations/src/es-MX.ts | 3 ++-
packages/localizations/src/fi-FI.ts | 3 ++-
packages/localizations/src/fr-FR.ts | 3 ++-
packages/localizations/src/he-IL.ts | 3 ++-
packages/localizations/src/hu-HU.ts | 3 ++-
packages/localizations/src/is-IS.ts | 3 ++-
packages/localizations/src/it-IT.ts | 3 ++-
packages/localizations/src/ja-JP.ts | 3 ++-
packages/localizations/src/ko-KR.ts | 3 ++-
packages/localizations/src/mn-MN.ts | 3 ++-
packages/localizations/src/nb-NO.ts | 3 ++-
packages/localizations/src/nl-NL.ts | 3 ++-
packages/localizations/src/pl-PL.ts | 1 +
packages/localizations/src/pt-BR.ts | 3 ++-
packages/localizations/src/pt-PT.ts | 3 ++-
packages/localizations/src/ro-RO.ts | 3 ++-
packages/localizations/src/ru-RU.ts | 3 ++-
packages/localizations/src/sk-SK.ts | 3 ++-
packages/localizations/src/sr-RS.ts | 3 ++-
packages/localizations/src/sv-SE.ts | 3 ++-
packages/localizations/src/th-TH.ts | 3 ++-
packages/localizations/src/tr-TR.ts | 3 ++-
packages/localizations/src/uk-UA.ts | 3 ++-
packages/localizations/src/vi-VN.ts | 2 ++
packages/localizations/src/zh-CN.ts | 3 ++-
packages/localizations/src/zh-TW.ts | 3 ++-
packages/types/src/localization.ts | 1 +
37 files changed, 76 insertions(+), 41 deletions(-)
diff --git a/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx b/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
index 45933b96b4f..7856e1a2e1c 100644
--- a/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
+++ b/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
@@ -1,13 +1,14 @@
import { useOrganization } from '@clerk/shared/react';
import { useState } from 'react';
-import { Flex } from '../../../ui/customizables';
+import { Flex, localizationKeys, useLocalizations } from '../../../ui/customizables';
import { Animated, InputWithIcon } from '../../../ui/elements';
import { MagnifyingGlass } from '../../../ui/icons';
import { Spinner } from '../../../ui/primitives';
export const MembersSearch = () => {
const [query, setQuery] = useState();
+ const { t } = useLocalizations();
const { memberships } = useOrganization({
memberships: {
@@ -16,23 +17,20 @@ export const MembersSearch = () => {
});
/* TODO - Only fire update once the user stops typing */
- /* TODO - Consider how it'll overlap the invite input */
- const handleSearch = async (event: React.ChangeEvent) => {
+ const handleSearch = (event: React.ChangeEvent) => {
setQuery(event?.target.value);
};
- // TODO - Add descriptors
return (
: }
+ type='search'
autoCapitalize='none'
spellCheck={false}
- type='search'
+ aria-label='Search'
+ placeholder={t(localizationKeys('organizationProfile.membersPage.action__search'))}
+ leftIcon={memberships?.isFetching ? : }
onChange={handleSearch}
/>
diff --git a/packages/localizations/src/ar-SA.ts b/packages/localizations/src/ar-SA.ts
index 4008a2f701e..e5e4e60b000 100644
--- a/packages/localizations/src/ar-SA.ts
+++ b/packages/localizations/src/ar-SA.ts
@@ -129,6 +129,7 @@ export const arSA: LocalizationResource = {
},
membersPage: {
action__invite: 'دعوة',
+ action__search: undefined,
activeMembersTab: {
menuAction__remove: 'إزالة عضو',
tableHeader__actions: undefined,
@@ -449,6 +450,7 @@ export const arSA: LocalizationResource = {
detailsLabel: 'نريد التحقق من هويتك قبل أعادة تعيين كلمة المرور',
},
start: {
+ __experimental_titleCombined: undefined,
actionLink: 'إنشاء حساب جديد',
actionLink__join_waitlist: undefined,
actionLink__use_email: 'استخدم البريد الإلكتروني',
@@ -460,7 +462,6 @@ export const arSA: LocalizationResource = {
actionText__join_waitlist: undefined,
subtitle: 'للمتابعة إلى {{applicationName}}',
title: 'تسجيل الدخول',
- titleCombined: undefined,
},
totpMfa: {
formTitle: 'رمز التحقق',
diff --git a/packages/localizations/src/be-BY.ts b/packages/localizations/src/be-BY.ts
index f6e356be78b..3386a8b4edd 100644
--- a/packages/localizations/src/be-BY.ts
+++ b/packages/localizations/src/be-BY.ts
@@ -130,6 +130,7 @@ export const beBY: LocalizationResource = {
},
membersPage: {
action__invite: 'Пригласить',
+ action__search: undefined,
activeMembersTab: {
menuAction__remove: 'Удалить удзельніка',
tableHeader__actions: 'Дзеянні',
@@ -454,6 +455,7 @@ export const beBY: LocalizationResource = {
detailsLabel: 'Неабходна верыфікаваць вашу асобу перад аднаўленнем пароля',
},
start: {
+ __experimental_titleCombined: undefined,
actionLink: 'Зарэгістравацца',
actionLink__join_waitlist: 'Далучыцца да чаргі',
actionLink__use_email: 'Выкарыстаць пошту',
@@ -465,7 +467,6 @@ export const beBY: LocalizationResource = {
actionText__join_waitlist: 'Далучыцеся да чакання',
subtitle: 'каб працягнуць працу ў "{{applicationName}}"',
title: 'Увайсці',
- titleCombined: undefined,
},
totpMfa: {
formTitle: 'Код верыфікацыі',
diff --git a/packages/localizations/src/bg-BG.ts b/packages/localizations/src/bg-BG.ts
index 9ead5c73866..a5635420bab 100644
--- a/packages/localizations/src/bg-BG.ts
+++ b/packages/localizations/src/bg-BG.ts
@@ -129,6 +129,7 @@ export const bgBG: LocalizationResource = {
},
membersPage: {
action__invite: 'Покани',
+ action__search: undefined,
activeMembersTab: {
menuAction__remove: 'Премахване на член',
tableHeader__actions: undefined,
@@ -449,6 +450,7 @@ export const bgBG: LocalizationResource = {
detailsLabel: 'Трябва да потвърдим вашата самоличност, преди да нулираме паролата ви.',
},
start: {
+ __experimental_titleCombined: undefined,
actionLink: 'Регистрирайте се',
actionLink__join_waitlist: 'Присъединете се към листата за изчакване',
actionLink__use_email: 'Използвайте имейл',
@@ -460,7 +462,6 @@ export const bgBG: LocalizationResource = {
actionText__join_waitlist: 'Все още нямате акаунт? Присъединете се към листата за изчакване.',
subtitle: 'Добре дошли обратно! Моля, влезте, за да продължите',
title: 'Влезте в {{applicationName}}',
- titleCombined: undefined,
},
totpMfa: {
formTitle: 'Код за потвърждение',
diff --git a/packages/localizations/src/cs-CZ.ts b/packages/localizations/src/cs-CZ.ts
index ed23e5ca4f5..662d3fcf2dc 100644
--- a/packages/localizations/src/cs-CZ.ts
+++ b/packages/localizations/src/cs-CZ.ts
@@ -130,6 +130,7 @@ export const csCZ: LocalizationResource = {
},
membersPage: {
action__invite: 'Pozvat',
+ action__search: undefined,
activeMembersTab: {
menuAction__remove: 'Odstranit člena',
tableHeader__actions: 'Akce',
@@ -448,6 +449,7 @@ export const csCZ: LocalizationResource = {
detailsLabel: 'Před obnovením hesla je třeba ověřit vaši totožnost.',
},
start: {
+ __experimental_titleCombined: undefined,
actionLink: 'Registrovat se',
actionLink__join_waitlist: undefined,
actionLink__use_email: 'Použít email',
@@ -459,7 +461,6 @@ export const csCZ: LocalizationResource = {
actionText__join_waitlist: 'Připojit se k čekací listině',
subtitle: 'pro pokračování do {{applicationName}}',
title: 'Přihlásit se',
- titleCombined: undefined,
},
totpMfa: {
formTitle: 'Ověřovací kód',
diff --git a/packages/localizations/src/da-DK.ts b/packages/localizations/src/da-DK.ts
index df685d55412..d432fd90f07 100644
--- a/packages/localizations/src/da-DK.ts
+++ b/packages/localizations/src/da-DK.ts
@@ -129,6 +129,7 @@ export const daDK: LocalizationResource = {
},
membersPage: {
action__invite: 'Inviter',
+ action__search: undefined,
activeMembersTab: {
menuAction__remove: 'Fjern medlem',
tableHeader__actions: 'Handlinger',
@@ -449,6 +450,7 @@ export const daDK: LocalizationResource = {
detailsLabel: 'Vi skal bekræfte din identitet, før du nulstiller din adgangskode.',
},
start: {
+ __experimental_titleCombined: undefined,
actionLink: 'Tilmeld dig',
actionLink__join_waitlist: undefined,
actionLink__use_email: 'Brug email',
@@ -460,7 +462,6 @@ export const daDK: LocalizationResource = {
actionText__join_waitlist: undefined,
subtitle: 'Forsæt til {{applicationName}}',
title: 'Log ind',
- titleCombined: undefined,
},
totpMfa: {
formTitle: 'Bekræftelseskode',
diff --git a/packages/localizations/src/de-DE.ts b/packages/localizations/src/de-DE.ts
index 1c9284673a2..c4fc305d4fd 100644
--- a/packages/localizations/src/de-DE.ts
+++ b/packages/localizations/src/de-DE.ts
@@ -132,6 +132,7 @@ export const deDE: LocalizationResource = {
},
membersPage: {
action__invite: 'Einladen',
+ action__search: undefined,
activeMembersTab: {
menuAction__remove: 'Mitglied entfernen',
tableHeader__actions: 'Aktionen',
@@ -454,6 +455,7 @@ export const deDE: LocalizationResource = {
detailsLabel: 'Bevor wir Ihr Passwort zurücksetzen können, müssen wir Ihre Identität überprüfen.',
},
start: {
+ __experimental_titleCombined: undefined,
actionLink: 'Anmelden',
actionLink__join_waitlist: 'Warteliste beitreten',
actionLink__use_email: 'E-mail nutzen',
@@ -465,7 +467,6 @@ export const deDE: LocalizationResource = {
actionText__join_waitlist: 'Warteliste beitreten',
subtitle: 'weiter zu {{applicationName}}',
title: 'Einloggen',
- titleCombined: undefined,
},
totpMfa: {
formTitle: 'Bestätigungscode',
diff --git a/packages/localizations/src/el-GR.ts b/packages/localizations/src/el-GR.ts
index 96e440cfb8e..3fe6acd3139 100644
--- a/packages/localizations/src/el-GR.ts
+++ b/packages/localizations/src/el-GR.ts
@@ -130,6 +130,7 @@ export const elGR: LocalizationResource = {
},
membersPage: {
action__invite: 'Πρόσκληση',
+ action__search: undefined,
activeMembersTab: {
menuAction__remove: 'Αφαίρεση μέλους',
tableHeader__actions: 'Ενέργειες',
@@ -452,6 +453,7 @@ export const elGR: LocalizationResource = {
detailsLabel: 'Πρέπει να επαληθεύσουμε την ταυτότητά σας πριν επαναφέρουμε τον κωδικό πρόσβασής σας.',
},
start: {
+ __experimental_titleCombined: 'Συνέχεια στο {{applicationName}}',
actionLink: 'Εγγραφή',
actionLink__join_waitlist: 'Εγγραφή στη λίστα αναμονής',
actionLink__use_email: 'Χρήση email',
@@ -463,7 +465,6 @@ export const elGR: LocalizationResource = {
actionText__join_waitlist: 'Θέλετε πρώιμη πρόσβαση;',
subtitle: 'για να συνεχίσετε στο {{applicationName}}',
title: 'Σύνδεση',
- titleCombined: 'Συνέχεια στο {{applicationName}}',
},
totpMfa: {
formTitle: 'Κωδικός επαλήθευσης',
diff --git a/packages/localizations/src/en-US.ts b/packages/localizations/src/en-US.ts
index b20b5749c62..13891a53ffd 100644
--- a/packages/localizations/src/en-US.ts
+++ b/packages/localizations/src/en-US.ts
@@ -118,6 +118,7 @@ export const enUS: LocalizationResource = {
},
membersPage: {
action__invite: 'Invite',
+ action__search: 'Search',
activeMembersTab: {
menuAction__remove: 'Remove member',
tableHeader__actions: 'Actions',
diff --git a/packages/localizations/src/es-ES.ts b/packages/localizations/src/es-ES.ts
index 37065843502..40a45b4d640 100644
--- a/packages/localizations/src/es-ES.ts
+++ b/packages/localizations/src/es-ES.ts
@@ -130,6 +130,7 @@ export const esES: LocalizationResource = {
},
membersPage: {
action__invite: 'Invitar',
+ action__search: undefined,
activeMembersTab: {
menuAction__remove: 'Quitar miembro',
tableHeader__actions: 'Acciones',
@@ -451,6 +452,7 @@ export const esES: LocalizationResource = {
detailsLabel: 'Necesitamos verificar tu identidad antes de restablecer tu contraseña.',
},
start: {
+ __experimental_titleCombined: undefined,
actionLink: 'Regístrese',
actionLink__join_waitlist: 'Únase a la lista de espera',
actionLink__use_email: 'Usar correo electrónico',
@@ -462,7 +464,6 @@ export const esES: LocalizationResource = {
actionText__join_waitlist: '¿Te gustaría unirte a la lista de espera?',
subtitle: 'para continuar a {{applicationName}}',
title: 'Entrar',
- titleCombined: undefined,
},
totpMfa: {
formTitle: 'Código de verificación',
diff --git a/packages/localizations/src/es-MX.ts b/packages/localizations/src/es-MX.ts
index e65fe4c8b31..b1faeabd7b1 100644
--- a/packages/localizations/src/es-MX.ts
+++ b/packages/localizations/src/es-MX.ts
@@ -131,6 +131,7 @@ export const esMX: LocalizationResource = {
},
membersPage: {
action__invite: 'Invitar',
+ action__search: undefined,
activeMembersTab: {
menuAction__remove: 'Eliminar miembro',
tableHeader__actions: undefined,
@@ -454,6 +455,7 @@ export const esMX: LocalizationResource = {
detailsLabel: 'Es necesario verificar su identidad para restablecer su contraseña.',
},
start: {
+ __experimental_titleCombined: undefined,
actionLink: 'Registrarse',
actionLink__join_waitlist: undefined,
actionLink__use_email: 'Utilizar correo electrónico',
@@ -465,7 +467,6 @@ export const esMX: LocalizationResource = {
actionText__join_waitlist: undefined,
subtitle: 'para continuar con {{applicationName}}',
title: 'Iniciar sesión',
- titleCombined: undefined,
},
totpMfa: {
formTitle: 'Código de verificación',
diff --git a/packages/localizations/src/fi-FI.ts b/packages/localizations/src/fi-FI.ts
index f61c7634807..377712d9769 100644
--- a/packages/localizations/src/fi-FI.ts
+++ b/packages/localizations/src/fi-FI.ts
@@ -130,6 +130,7 @@ export const fiFI: LocalizationResource = {
},
membersPage: {
action__invite: 'Kutsu',
+ action__search: undefined,
activeMembersTab: {
menuAction__remove: 'Poista jäsen',
tableHeader__actions: undefined,
@@ -451,6 +452,7 @@ export const fiFI: LocalizationResource = {
detailsLabel: 'Ennen salasanan nollaamista on varmistettava henkilöllisyytesi.',
},
start: {
+ __experimental_titleCombined: undefined,
actionLink: 'Rekisteröidy',
actionLink__join_waitlist: undefined,
actionLink__use_email: 'Käytä sähköpostia',
@@ -462,7 +464,6 @@ export const fiFI: LocalizationResource = {
actionText__join_waitlist: undefined,
subtitle: 'jatkaaksesi kohteeseen {{applicationName}}',
title: 'Kirjaudu sisään',
- titleCombined: undefined,
},
totpMfa: {
formTitle: 'Todennuskoodi',
diff --git a/packages/localizations/src/fr-FR.ts b/packages/localizations/src/fr-FR.ts
index 6f112034172..6238bfe6cf0 100644
--- a/packages/localizations/src/fr-FR.ts
+++ b/packages/localizations/src/fr-FR.ts
@@ -131,6 +131,7 @@ export const frFR: LocalizationResource = {
},
membersPage: {
action__invite: 'Inviter',
+ action__search: undefined,
activeMembersTab: {
menuAction__remove: 'Supprimer',
tableHeader__actions: 'Actions',
@@ -454,6 +455,7 @@ export const frFR: LocalizationResource = {
detailsLabel: 'Nous devons vérifier votre identité avant de réinitialiser votre mot de passe.',
},
start: {
+ __experimental_titleCombined: undefined,
actionLink: "S'inscrire",
actionLink__join_waitlist: "Rejoindre la liste d'attente",
actionLink__use_email: 'Utiliser e-mail',
@@ -465,7 +467,6 @@ export const frFR: LocalizationResource = {
actionText__join_waitlist: "Inscrivez-vous sur la liste d'attente",
subtitle: 'pour continuer vers {{applicationName}}',
title: "S'identifier",
- titleCombined: undefined,
},
totpMfa: {
formTitle: 'Le code de vérification',
diff --git a/packages/localizations/src/he-IL.ts b/packages/localizations/src/he-IL.ts
index e750d66beed..19c3078f9f5 100644
--- a/packages/localizations/src/he-IL.ts
+++ b/packages/localizations/src/he-IL.ts
@@ -128,6 +128,7 @@ export const heIL: LocalizationResource = {
},
membersPage: {
action__invite: 'הזמן',
+ action__search: undefined,
activeMembersTab: {
menuAction__remove: 'הסר חבר',
tableHeader__actions: undefined,
@@ -443,6 +444,7 @@ export const heIL: LocalizationResource = {
detailsLabel: 'אנחנו צריכים לאמת את זהותך לפני שנאפס את הסיסמה שלך.',
},
start: {
+ __experimental_titleCombined: undefined,
actionLink: 'הרשמה',
actionLink__join_waitlist: undefined,
actionLink__use_email: 'השתמש בדוא"ל',
@@ -454,7 +456,6 @@ export const heIL: LocalizationResource = {
actionText__join_waitlist: undefined,
subtitle: 'להמשיך אל {{applicationName}}',
title: 'התחבר',
- titleCombined: undefined,
},
totpMfa: {
formTitle: 'קוד אימות',
diff --git a/packages/localizations/src/hu-HU.ts b/packages/localizations/src/hu-HU.ts
index 4e75bea7007..7d2cdcc561e 100644
--- a/packages/localizations/src/hu-HU.ts
+++ b/packages/localizations/src/hu-HU.ts
@@ -129,6 +129,7 @@ export const huHU: LocalizationResource = {
},
membersPage: {
action__invite: 'Meghívás',
+ action__search: undefined,
activeMembersTab: {
menuAction__remove: 'Tag eltávolítása',
tableHeader__actions: undefined,
@@ -450,6 +451,7 @@ export const huHU: LocalizationResource = {
detailsLabel: 'Vissza kell igazolnod az identitásod, mielőtt visszaállítod a jelszavad',
},
start: {
+ __experimental_titleCombined: undefined,
actionLink: 'Regisztráció',
actionLink__join_waitlist: undefined,
actionLink__use_email: 'Email használata',
@@ -461,7 +463,6 @@ export const huHU: LocalizationResource = {
actionText__join_waitlist: undefined,
subtitle: 'Üdv újra! A folytatáshoz kérlek jelentkezz be.',
title: 'Bejelentkezés a(z) {{applicationName}} fiókba',
- titleCombined: undefined,
},
totpMfa: {
formTitle: 'Visszaigazoló kód',
diff --git a/packages/localizations/src/is-IS.ts b/packages/localizations/src/is-IS.ts
index 7ec455d5d2c..70be5767d20 100644
--- a/packages/localizations/src/is-IS.ts
+++ b/packages/localizations/src/is-IS.ts
@@ -130,6 +130,7 @@ export const isIS: LocalizationResource = {
},
membersPage: {
action__invite: 'Bjóða',
+ action__search: undefined,
activeMembersTab: {
menuAction__remove: 'Fjarlægja meðlim',
tableHeader__actions: undefined,
@@ -452,6 +453,7 @@ export const isIS: LocalizationResource = {
detailsLabel: 'Við þurfum að staðfesta auðkenni þitt áður en við endurstillum lykilorðið þitt.',
},
start: {
+ __experimental_titleCombined: undefined,
actionLink: 'Skrá sig',
actionLink__join_waitlist: undefined,
actionLink__use_email: 'Nota netfang',
@@ -463,7 +465,6 @@ export const isIS: LocalizationResource = {
actionText__join_waitlist: undefined,
subtitle: 'Velkomin aftur! Vinsamlegast skráðu þig inn til að halda áfram',
title: 'Skrá inn í {{applicationName}}',
- titleCombined: undefined,
},
totpMfa: {
formTitle: 'Staðfestingarkóði',
diff --git a/packages/localizations/src/it-IT.ts b/packages/localizations/src/it-IT.ts
index 9a0264da6aa..1a44dcc4d30 100644
--- a/packages/localizations/src/it-IT.ts
+++ b/packages/localizations/src/it-IT.ts
@@ -130,6 +130,7 @@ export const itIT: LocalizationResource = {
},
membersPage: {
action__invite: 'Invita',
+ action__search: undefined,
activeMembersTab: {
menuAction__remove: 'Rimuovi membro',
tableHeader__actions: 'Azioni',
@@ -450,6 +451,7 @@ export const itIT: LocalizationResource = {
detailsLabel: 'Dobbiamo verificare la tua identità prima di resettare la tua password.',
},
start: {
+ __experimental_titleCombined: undefined,
actionLink: 'Registrati',
actionLink__join_waitlist: "Unisciti alla lista d'attesa",
actionLink__use_email: 'Usa email',
@@ -461,7 +463,6 @@ export const itIT: LocalizationResource = {
actionText__join_waitlist: "Unisciti alla lista d'attesa",
subtitle: 'per continuare su {{applicationName}}',
title: 'Accedi',
- titleCombined: undefined,
},
totpMfa: {
formTitle: 'Codice di verifica',
diff --git a/packages/localizations/src/ja-JP.ts b/packages/localizations/src/ja-JP.ts
index 4624bfb86cf..33f56d459f0 100644
--- a/packages/localizations/src/ja-JP.ts
+++ b/packages/localizations/src/ja-JP.ts
@@ -129,6 +129,7 @@ export const jaJP: LocalizationResource = {
},
membersPage: {
action__invite: '招待',
+ action__search: undefined,
activeMembersTab: {
menuAction__remove: 'メンバーの削除',
tableHeader__actions: undefined,
@@ -450,6 +451,7 @@ export const jaJP: LocalizationResource = {
detailsLabel: 'パスワードをリセットする前に、身元を確認する必要があります。',
},
start: {
+ __experimental_titleCombined: undefined,
actionLink: 'サインアップ',
actionLink__join_waitlist: undefined,
actionLink__use_email: 'メールアドレスを使用',
@@ -461,7 +463,6 @@ export const jaJP: LocalizationResource = {
actionText__join_waitlist: undefined,
subtitle: '{{applicationName}}へのアクセスを続ける',
title: 'サインイン',
- titleCombined: undefined,
},
totpMfa: {
formTitle: '検証コード',
diff --git a/packages/localizations/src/ko-KR.ts b/packages/localizations/src/ko-KR.ts
index 96960ecbe2b..7b9cecfbcaf 100644
--- a/packages/localizations/src/ko-KR.ts
+++ b/packages/localizations/src/ko-KR.ts
@@ -129,6 +129,7 @@ export const koKR: LocalizationResource = {
},
membersPage: {
action__invite: '초대',
+ action__search: undefined,
activeMembersTab: {
menuAction__remove: '회원 제거',
tableHeader__actions: undefined,
@@ -445,6 +446,7 @@ export const koKR: LocalizationResource = {
detailsLabel: '비밀번호를 재설정하기 전에 신원을 확인해야 합니다.',
},
start: {
+ __experimental_titleCombined: undefined,
actionLink: '회원가입',
actionLink__join_waitlist: undefined,
actionLink__use_email: '이메일 사용하기',
@@ -456,7 +458,6 @@ export const koKR: LocalizationResource = {
actionText__join_waitlist: undefined,
subtitle: '환영합니다! 계속하려면 로그인해 주세요',
title: '{{applicationName}}에 로그인',
- titleCombined: undefined,
},
totpMfa: {
formTitle: '인증 코드',
diff --git a/packages/localizations/src/mn-MN.ts b/packages/localizations/src/mn-MN.ts
index c2c3380044d..9372525ba1e 100644
--- a/packages/localizations/src/mn-MN.ts
+++ b/packages/localizations/src/mn-MN.ts
@@ -130,6 +130,7 @@ export const mnMN: LocalizationResource = {
},
membersPage: {
action__invite: 'Урих',
+ action__search: undefined,
activeMembersTab: {
menuAction__remove: 'Гишүүнийг хасах',
tableHeader__actions: undefined,
@@ -451,6 +452,7 @@ export const mnMN: LocalizationResource = {
detailsLabel: 'Нууц үгээ шинэчлэхээс өмнө бид таны хувийн мэдээллийг баталгаажуулах шаардлагатай.',
},
start: {
+ __experimental_titleCombined: undefined,
actionLink: 'Бүртгүүлэх',
actionLink__join_waitlist: undefined,
actionLink__use_email: 'Имэйл ашиглах',
@@ -462,7 +464,6 @@ export const mnMN: LocalizationResource = {
actionText__join_waitlist: undefined,
subtitle: 'Тавтай морил! Үргэлжлүүлэхийн тулд нэвтэрнэ үү',
title: '{{applicationName}} руу нэвтрэх',
- titleCombined: undefined,
},
totpMfa: {
formTitle: 'Баталгаажуулах код',
diff --git a/packages/localizations/src/nb-NO.ts b/packages/localizations/src/nb-NO.ts
index 45e766963a2..b35656fd189 100644
--- a/packages/localizations/src/nb-NO.ts
+++ b/packages/localizations/src/nb-NO.ts
@@ -129,6 +129,7 @@ export const nbNO: LocalizationResource = {
},
membersPage: {
action__invite: 'Inviter',
+ action__search: undefined,
activeMembersTab: {
menuAction__remove: 'Fjern medlem',
tableHeader__actions: undefined,
@@ -450,6 +451,7 @@ export const nbNO: LocalizationResource = {
detailsLabel: 'Vi må bekrefte identiteten din før vi tilbakestiller passordet ditt.',
},
start: {
+ __experimental_titleCombined: undefined,
actionLink: 'Opprett konto',
actionLink__join_waitlist: undefined,
actionLink__use_email: 'Bruk e-post',
@@ -461,7 +463,6 @@ export const nbNO: LocalizationResource = {
actionText__join_waitlist: undefined,
subtitle: 'for å fortsette til {{applicationName}}',
title: 'Logg inn',
- titleCombined: undefined,
},
totpMfa: {
formTitle: 'Verifiseringskode',
diff --git a/packages/localizations/src/nl-NL.ts b/packages/localizations/src/nl-NL.ts
index 15e618f5c63..fbe9eaefcc9 100644
--- a/packages/localizations/src/nl-NL.ts
+++ b/packages/localizations/src/nl-NL.ts
@@ -129,6 +129,7 @@ export const nlNL: LocalizationResource = {
},
membersPage: {
action__invite: 'Uitnodigen',
+ action__search: undefined,
activeMembersTab: {
menuAction__remove: 'Verwijder lid',
tableHeader__actions: 'Acties',
@@ -450,6 +451,7 @@ export const nlNL: LocalizationResource = {
detailsLabel: 'Voor veiligheidsredenen is het vereist om je wachtwoord te resetten.',
},
start: {
+ __experimental_titleCombined: undefined,
actionLink: 'Registreren',
actionLink__join_waitlist: 'Meld je aan voor de wachtlijst',
actionLink__use_email: 'Gebruik e-mail',
@@ -461,7 +463,6 @@ export const nlNL: LocalizationResource = {
actionText__join_waitlist: 'Nog geen account?',
subtitle: 'om door te gaan naar {{applicationName}}',
title: 'Inloggen',
- titleCombined: undefined,
},
totpMfa: {
formTitle: 'Verificatiecode',
diff --git a/packages/localizations/src/pl-PL.ts b/packages/localizations/src/pl-PL.ts
index c5c5284fe0d..0250416107c 100644
--- a/packages/localizations/src/pl-PL.ts
+++ b/packages/localizations/src/pl-PL.ts
@@ -129,6 +129,7 @@ export const plPL: LocalizationResource = {
},
membersPage: {
action__invite: 'Zaproś',
+ action__search: undefined,
activeMembersTab: {
menuAction__remove: 'Usuń użytkownika',
tableHeader__actions: undefined,
diff --git a/packages/localizations/src/pt-BR.ts b/packages/localizations/src/pt-BR.ts
index 4b32ab0ca1f..f62aaff052b 100644
--- a/packages/localizations/src/pt-BR.ts
+++ b/packages/localizations/src/pt-BR.ts
@@ -129,6 +129,7 @@ export const ptBR: LocalizationResource = {
},
membersPage: {
action__invite: 'Convidar',
+ action__search: undefined,
activeMembersTab: {
menuAction__remove: 'Remover membro',
tableHeader__actions: 'Ações',
@@ -450,6 +451,7 @@ export const ptBR: LocalizationResource = {
detailsLabel: 'Precisamos verificar sua identidade antes de redefinir sua senha.',
},
start: {
+ __experimental_titleCombined: undefined,
actionLink: 'Registre-se',
actionLink__join_waitlist: 'Entrar na lista de espera',
actionLink__use_email: 'Usar e-mail',
@@ -461,7 +463,6 @@ export const ptBR: LocalizationResource = {
actionText__join_waitlist: 'Quer ser notificado quando estivermos prontos?',
subtitle: 'para continuar em {{applicationName}}',
title: 'Entrar',
- titleCombined: undefined,
},
totpMfa: {
formTitle: 'Código de verificação',
diff --git a/packages/localizations/src/pt-PT.ts b/packages/localizations/src/pt-PT.ts
index bd803639734..e9a40a1a4c0 100644
--- a/packages/localizations/src/pt-PT.ts
+++ b/packages/localizations/src/pt-PT.ts
@@ -128,6 +128,7 @@ export const ptPT: LocalizationResource = {
},
membersPage: {
action__invite: 'Convidar',
+ action__search: undefined,
activeMembersTab: {
menuAction__remove: 'Remover membro',
tableHeader__actions: 'Ações',
@@ -448,6 +449,7 @@ export const ptPT: LocalizationResource = {
detailsLabel: 'Precisamos verificar a sua identidade antes de redefinir a palavra-passe.',
},
start: {
+ __experimental_titleCombined: undefined,
actionLink: 'Registre-se',
actionLink__join_waitlist: 'Juntar-se à lista de espera',
actionLink__use_email: 'Usar e-mail',
@@ -459,7 +461,6 @@ export const ptPT: LocalizationResource = {
actionText__join_waitlist: 'Ainda não tem uma conta? Junte-se à lista de espera.',
subtitle: 'para continuar em {{applicationName}}',
title: 'Entrar',
- titleCombined: undefined,
},
totpMfa: {
formTitle: 'Código de verificação',
diff --git a/packages/localizations/src/ro-RO.ts b/packages/localizations/src/ro-RO.ts
index 9af313d3d13..e54b843dc87 100644
--- a/packages/localizations/src/ro-RO.ts
+++ b/packages/localizations/src/ro-RO.ts
@@ -131,6 +131,7 @@ export const roRO: LocalizationResource = {
},
membersPage: {
action__invite: 'Invitați',
+ action__search: undefined,
activeMembersTab: {
menuAction__remove: 'Îndepărtați membrul',
tableHeader__actions: undefined,
@@ -452,6 +453,7 @@ export const roRO: LocalizationResource = {
detailsLabel: 'Trebuie să vă verificăm identitatea înainte de a vă reseta parola.',
},
start: {
+ __experimental_titleCombined: undefined,
actionLink: 'Înscrieți-vă',
actionLink__join_waitlist: undefined,
actionLink__use_email: 'Utilizați e-mailul',
@@ -463,7 +465,6 @@ export const roRO: LocalizationResource = {
actionText__join_waitlist: undefined,
subtitle: 'pentru a continua la {{applicationName}}',
title: 'Conectați-vă',
- titleCombined: undefined,
},
totpMfa: {
formTitle: 'Cod de verificare',
diff --git a/packages/localizations/src/ru-RU.ts b/packages/localizations/src/ru-RU.ts
index 116ecb0c7ed..7185b045e39 100644
--- a/packages/localizations/src/ru-RU.ts
+++ b/packages/localizations/src/ru-RU.ts
@@ -133,6 +133,7 @@ export const ruRU: LocalizationResource = {
},
membersPage: {
action__invite: 'Пригласить',
+ action__search: undefined,
activeMembersTab: {
menuAction__remove: 'Удалить участника',
tableHeader__actions: 'Действия',
@@ -459,6 +460,7 @@ export const ruRU: LocalizationResource = {
detailsLabel: 'Необходимо верифицировать вашу личность перед восстановлением пароля',
},
start: {
+ __experimental_titleCombined: undefined,
actionLink: 'Зарегистрироваться',
actionLink__join_waitlist: undefined,
actionLink__use_email: 'Использовать почту',
@@ -470,7 +472,6 @@ export const ruRU: LocalizationResource = {
actionText__join_waitlist: undefined,
subtitle: 'чтобы продолжить работу в "{{applicationName}}"',
title: 'Войти',
- titleCombined: undefined,
},
totpMfa: {
formTitle: 'Верификационный код',
diff --git a/packages/localizations/src/sk-SK.ts b/packages/localizations/src/sk-SK.ts
index b8ec28caeea..4113248416b 100644
--- a/packages/localizations/src/sk-SK.ts
+++ b/packages/localizations/src/sk-SK.ts
@@ -129,6 +129,7 @@ export const skSK: LocalizationResource = {
},
membersPage: {
action__invite: 'Pozvať',
+ action__search: undefined,
activeMembersTab: {
menuAction__remove: 'Odstrániť člena',
tableHeader__actions: undefined,
@@ -448,6 +449,7 @@ export const skSK: LocalizationResource = {
detailsLabel: 'Pred obnovením hesla je potrebné overiť vašu totožnosť.',
},
start: {
+ __experimental_titleCombined: undefined,
actionLink: 'Registrovať sa',
actionLink__join_waitlist: undefined,
actionLink__use_email: 'Použiť email',
@@ -459,7 +461,6 @@ export const skSK: LocalizationResource = {
actionText__join_waitlist: undefined,
subtitle: 'pre pokračovanie do {{applicationName}}',
title: 'Prihlásiť sa',
- titleCombined: undefined,
},
totpMfa: {
formTitle: 'Overovací kód',
diff --git a/packages/localizations/src/sr-RS.ts b/packages/localizations/src/sr-RS.ts
index 1c5f9d5875d..30241b94ade 100644
--- a/packages/localizations/src/sr-RS.ts
+++ b/packages/localizations/src/sr-RS.ts
@@ -129,6 +129,7 @@ export const srRS: LocalizationResource = {
},
membersPage: {
action__invite: 'Pozovi',
+ action__search: undefined,
activeMembersTab: {
menuAction__remove: 'Ukloni člana',
tableHeader__actions: undefined,
@@ -449,6 +450,7 @@ export const srRS: LocalizationResource = {
detailsLabel: 'Potrebno je da potvrdimo tvoj identitet pre resetovanja lozinke.',
},
start: {
+ __experimental_titleCombined: undefined,
actionLink: 'Registruj se',
actionLink__join_waitlist: undefined,
actionLink__use_email: 'Koristi e-mail',
@@ -460,7 +462,6 @@ export const srRS: LocalizationResource = {
actionText__join_waitlist: undefined,
subtitle: 'Dobro došao nazad! Molimo prijavi se da nastaviš',
title: 'Prijavi se na {{applicationName}}',
- titleCombined: undefined,
},
totpMfa: {
formTitle: 'Verifikacioni kod',
diff --git a/packages/localizations/src/sv-SE.ts b/packages/localizations/src/sv-SE.ts
index 7859cbd8fbd..dff57878011 100644
--- a/packages/localizations/src/sv-SE.ts
+++ b/packages/localizations/src/sv-SE.ts
@@ -129,6 +129,7 @@ export const svSE: LocalizationResource = {
},
membersPage: {
action__invite: 'Bjud in',
+ action__search: undefined,
activeMembersTab: {
menuAction__remove: 'Ta bort medlem',
tableHeader__actions: 'Åtgärder',
@@ -452,6 +453,7 @@ export const svSE: LocalizationResource = {
detailsLabel: 'Vi behöver verifiera din identitet innan vi återställer ditt lösenord.',
},
start: {
+ __experimental_titleCombined: undefined,
actionLink: 'Skapa konto',
actionLink__join_waitlist: undefined,
actionLink__use_email: 'Use email',
@@ -463,7 +465,6 @@ export const svSE: LocalizationResource = {
actionText__join_waitlist: undefined,
subtitle: 'för att fortsätta till {{applicationName}}',
title: 'Logga in',
- titleCombined: undefined,
},
totpMfa: {
formTitle: 'Verifieringskod',
diff --git a/packages/localizations/src/th-TH.ts b/packages/localizations/src/th-TH.ts
index f3fea2cef38..9ee30e9cbb3 100644
--- a/packages/localizations/src/th-TH.ts
+++ b/packages/localizations/src/th-TH.ts
@@ -129,6 +129,7 @@ export const thTH: LocalizationResource = {
},
membersPage: {
action__invite: 'เชิญ',
+ action__search: undefined,
activeMembersTab: {
menuAction__remove: 'ลบสมาชิก',
tableHeader__actions: 'การดำเนินการ',
@@ -446,6 +447,7 @@ export const thTH: LocalizationResource = {
detailsLabel: 'เราต้องตรวจสอบตัวตนของคุณก่อนที่จะรีเซ็ตรหัสผ่าน',
},
start: {
+ __experimental_titleCombined: 'ดำเนินการต่อไปยัง {{applicationName}}',
actionLink: 'สมัครสมาชิก',
actionLink__join_waitlist: 'เข้าร่วมรายชื่อผู้รอ',
actionLink__use_email: 'ใช้อีเมล',
@@ -457,7 +459,6 @@ export const thTH: LocalizationResource = {
actionText__join_waitlist: 'ต้องการเข้าถึงก่อนใช่หรือไม่?',
subtitle: 'ยินดีต้อนรับกลับ! โปรดเข้าสู่ระบบเพื่อดำเนินการต่อ',
title: 'เข้าสู่ระบบ {{applicationName}}',
- titleCombined: 'ดำเนินการต่อไปยัง {{applicationName}}',
},
totpMfa: {
formTitle: 'รหัสการตรวจสอบ',
diff --git a/packages/localizations/src/tr-TR.ts b/packages/localizations/src/tr-TR.ts
index 274bf92320a..2104469b6d9 100644
--- a/packages/localizations/src/tr-TR.ts
+++ b/packages/localizations/src/tr-TR.ts
@@ -129,6 +129,7 @@ export const trTR: LocalizationResource = {
},
membersPage: {
action__invite: 'Davet et',
+ action__search: undefined,
activeMembersTab: {
menuAction__remove: 'Üyeyi kaldır',
tableHeader__actions: undefined,
@@ -451,6 +452,7 @@ export const trTR: LocalizationResource = {
detailsLabel: 'Şifrenizi sıfırlamadan önce kimliğinizi doğrulamamız gerekiyor.',
},
start: {
+ __experimental_titleCombined: undefined,
actionLink: 'Kayıt ol',
actionLink__join_waitlist: undefined,
actionLink__use_email: 'E-posta kullan',
@@ -462,7 +464,6 @@ export const trTR: LocalizationResource = {
actionText__join_waitlist: 'Bekleme listesine katılın',
subtitle: '{{applicationName}} ile devam etmek için',
title: 'Giriş yap',
- titleCombined: undefined,
},
totpMfa: {
formTitle: 'Doğrulama kodu',
diff --git a/packages/localizations/src/uk-UA.ts b/packages/localizations/src/uk-UA.ts
index a6fa255398d..91462f3b7df 100644
--- a/packages/localizations/src/uk-UA.ts
+++ b/packages/localizations/src/uk-UA.ts
@@ -129,6 +129,7 @@ export const ukUA: LocalizationResource = {
},
membersPage: {
action__invite: 'Запросити',
+ action__search: undefined,
activeMembersTab: {
menuAction__remove: 'Видалити учасника',
tableHeader__actions: undefined,
@@ -448,6 +449,7 @@ export const ukUA: LocalizationResource = {
detailsLabel: 'Необхідно верифікувати вашу особу перед відновленням пароля',
},
start: {
+ __experimental_titleCombined: undefined,
actionLink: 'Зареєструватися',
actionLink__join_waitlist: undefined,
actionLink__use_email: 'Використовувати пошту',
@@ -459,7 +461,6 @@ export const ukUA: LocalizationResource = {
actionText__join_waitlist: undefined,
subtitle: 'щоб продовжити роботу в "{{applicationName}}"',
title: 'Увійти',
- titleCombined: undefined,
},
totpMfa: {
formTitle: 'Верифікаційний код',
diff --git a/packages/localizations/src/vi-VN.ts b/packages/localizations/src/vi-VN.ts
index 357d7eeedac..2221dc309f3 100644
--- a/packages/localizations/src/vi-VN.ts
+++ b/packages/localizations/src/vi-VN.ts
@@ -129,6 +129,7 @@ export const viVN: LocalizationResource = {
},
membersPage: {
action__invite: 'Mời',
+ action__search: undefined,
activeMembersTab: {
menuAction__remove: 'Gỡ bỏ thành viên',
tableHeader__actions: undefined,
@@ -448,6 +449,7 @@ export const viVN: LocalizationResource = {
detailsLabel: 'Chúng tôi cần xác minh danh tính của bạn trước khi đặt lại mật khẩu.',
},
start: {
+ __experimental_titleCombined: undefined,
actionLink: 'Đăng ký',
actionLink__join_waitlist: undefined,
actionLink__use_email: 'Sử dụng email',
diff --git a/packages/localizations/src/zh-CN.ts b/packages/localizations/src/zh-CN.ts
index 0682e3de78d..4a717e7dc1d 100644
--- a/packages/localizations/src/zh-CN.ts
+++ b/packages/localizations/src/zh-CN.ts
@@ -126,6 +126,7 @@ export const zhCN: LocalizationResource = {
},
membersPage: {
action__invite: '邀请',
+ action__search: undefined,
activeMembersTab: {
menuAction__remove: '移除成员',
tableHeader__actions: undefined,
@@ -439,6 +440,7 @@ export const zhCN: LocalizationResource = {
detailsLabel: '我们需要验证您的身份才能重置您的密码。',
},
start: {
+ __experimental_titleCombined: undefined,
actionLink: '注册',
actionLink__join_waitlist: undefined,
actionLink__use_email: '使用电子邮件',
@@ -450,7 +452,6 @@ export const zhCN: LocalizationResource = {
actionText__join_waitlist: undefined,
subtitle: '继续使用 {{applicationName}}',
title: '登录',
- titleCombined: undefined,
},
totpMfa: {
formTitle: '验证码',
diff --git a/packages/localizations/src/zh-TW.ts b/packages/localizations/src/zh-TW.ts
index 4a714bef27d..7517cd433b1 100644
--- a/packages/localizations/src/zh-TW.ts
+++ b/packages/localizations/src/zh-TW.ts
@@ -128,6 +128,7 @@ export const zhTW: LocalizationResource = {
},
membersPage: {
action__invite: '邀請',
+ action__search: undefined,
activeMembersTab: {
menuAction__remove: '移除成員',
tableHeader__actions: undefined,
@@ -445,6 +446,7 @@ export const zhTW: LocalizationResource = {
detailsLabel: '我們需要驗證您的身份才能重設您的密碼。',
},
start: {
+ __experimental_titleCombined: undefined,
actionLink: '註冊',
actionLink__join_waitlist: undefined,
actionLink__use_email: '使用電子郵件',
@@ -456,7 +458,6 @@ export const zhTW: LocalizationResource = {
actionText__join_waitlist: undefined,
subtitle: '繼續使用 {{applicationName}}',
title: '登錄',
- titleCombined: undefined,
},
totpMfa: {
formTitle: '驗證碼',
diff --git a/packages/types/src/localization.ts b/packages/types/src/localization.ts
index c610491e376..9ce5711dde6 100644
--- a/packages/types/src/localization.ts
+++ b/packages/types/src/localization.ts
@@ -757,6 +757,7 @@ type _LocalizationResource = {
membersPage: {
detailsTitle__emptyRow: LocalizationValue;
action__invite: LocalizationValue;
+ action__search: LocalizationValue;
start: {
headerTitle__members: LocalizationValue;
headerTitle__invitations: LocalizationValue;
From 3a04b22cc63944552835cc9eb3a72ac5aa12e169 Mon Sep 17 00:00:00 2001
From: Laura Beatris <48022589+LauraBeatris@users.noreply.github.com>
Date: Mon, 20 Jan 2025 11:44:55 -0300
Subject: [PATCH 05/21] Debounce search
---
.../OrganizationProfile/MembersActions.tsx | 6 ++--
.../OrganizationProfile/MembersSearch.tsx | 10 ++++---
.../ui/components/UserProfile/EmailForm.tsx | 2 --
.../src/ui/elements/InputWithIcon.tsx | 29 +++++++++++--------
4 files changed, 27 insertions(+), 20 deletions(-)
diff --git a/packages/clerk-js/src/ui/components/OrganizationProfile/MembersActions.tsx b/packages/clerk-js/src/ui/components/OrganizationProfile/MembersActions.tsx
index f30c2bf969f..9b7b639c66c 100644
--- a/packages/clerk-js/src/ui/components/OrganizationProfile/MembersActions.tsx
+++ b/packages/clerk-js/src/ui/components/OrganizationProfile/MembersActions.tsx
@@ -5,7 +5,7 @@ import { Action } from '../../elements/Action';
import { InviteMembersScreen } from './InviteMembersScreen';
type MembersActionsRowProps = {
- actionSlot: React.ReactNode;
+ actionSlot?: React.ReactNode;
};
export const MembersActionsRow = ({ actionSlot }: MembersActionsRowProps) => {
@@ -15,8 +15,10 @@ export const MembersActionsRow = ({ actionSlot }: MembersActionsRowProps) => {
({
+ width: '100%',
+ marginLeft: 'auto',
padding: `${t.space.$none} ${t.space.$1}`,
})}
gap={actionSlot ? 2 : undefined}
diff --git a/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx b/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
index 7856e1a2e1c..3ba3dae47b1 100644
--- a/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
+++ b/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
@@ -3,12 +3,14 @@ import { useState } from 'react';
import { Flex, localizationKeys, useLocalizations } from '../../../ui/customizables';
import { Animated, InputWithIcon } from '../../../ui/elements';
+import { useDebounce } from '../../../ui/hooks';
import { MagnifyingGlass } from '../../../ui/icons';
import { Spinner } from '../../../ui/primitives';
export const MembersSearch = () => {
- const [query, setQuery] = useState();
const { t } = useLocalizations();
+ const [search, setSearch] = useState('');
+ const query = useDebounce(search, 500);
const { memberships } = useOrganization({
memberships: {
@@ -16,14 +18,13 @@ export const MembersSearch = () => {
},
});
- /* TODO - Only fire update once the user stops typing */
const handleSearch = (event: React.ChangeEvent) => {
- setQuery(event?.target.value);
+ setSearch(event.target.value);
};
return (
-
+
{
placeholder={t(localizationKeys('organizationProfile.membersPage.action__search'))}
leftIcon={memberships?.isFetching ? : }
onChange={handleSearch}
+ containerSx={{ width: '100%' }}
/>
diff --git a/packages/clerk-js/src/ui/components/UserProfile/EmailForm.tsx b/packages/clerk-js/src/ui/components/UserProfile/EmailForm.tsx
index 0db2236f47d..43ed2258827 100644
--- a/packages/clerk-js/src/ui/components/UserProfile/EmailForm.tsx
+++ b/packages/clerk-js/src/ui/components/UserProfile/EmailForm.tsx
@@ -56,9 +56,7 @@ export const EmailForm = withCardStateProvider((props: EmailFormProps) => {
return (
- {/* Example of form */}
organizationProfile.membersPage */
headerTitle={localizationKeys('userProfile.emailAddressPage.title')}
headerSubtitle={localizationKeys('userProfile.emailAddressPage.formHint')}
>
diff --git a/packages/clerk-js/src/ui/elements/InputWithIcon.tsx b/packages/clerk-js/src/ui/elements/InputWithIcon.tsx
index a8f7dea8759..f85c591dc31 100644
--- a/packages/clerk-js/src/ui/elements/InputWithIcon.tsx
+++ b/packages/clerk-js/src/ui/elements/InputWithIcon.tsx
@@ -1,25 +1,30 @@
import React from 'react';
import { Flex, Input } from '../customizables';
-import type { PropsOfComponent } from '../styledSystem';
+import type { PropsOfComponent, ThemableCssProp } from '../styledSystem';
-type InputWithIcon = PropsOfComponent & { leftIcon?: React.ReactElement };
+type InputWithIcon = PropsOfComponent & { leftIcon?: React.ReactElement } & {
+ containerSx?: ThemableCssProp;
+};
export const InputWithIcon = React.forwardRef((props, ref) => {
- const { leftIcon, sx, ...rest } = props;
+ const { leftIcon, sx, containerSx, ...rest } = props;
return (
({
- width: '100%',
- position: 'relative',
- '& .cl-internal-icon': {
- position: 'absolute',
- left: theme.space.$4,
- width: theme.sizes.$3x5,
- height: theme.sizes.$3x5,
+ sx={theme => [
+ {
+ width: '100%',
+ position: 'relative',
+ '& .cl-internal-icon': {
+ position: 'absolute',
+ left: theme.space.$4,
+ width: theme.sizes.$3x5,
+ height: theme.sizes.$3x5,
+ },
},
- })}
+ containerSx,
+ ]}
>
{leftIcon && React.cloneElement(leftIcon, { className: 'cl-internal-icon' })}
Date: Mon, 20 Jan 2025 11:59:45 -0300
Subject: [PATCH 06/21] Add changeset
---
.changeset/poor-rockets-look.md | 8 ++++++++
1 file changed, 8 insertions(+)
create mode 100644 .changeset/poor-rockets-look.md
diff --git a/.changeset/poor-rockets-look.md b/.changeset/poor-rockets-look.md
new file mode 100644
index 00000000000..02c6bcdef7b
--- /dev/null
+++ b/.changeset/poor-rockets-look.md
@@ -0,0 +1,8 @@
+---
+'@clerk/localizations': patch
+'@clerk/clerk-js': patch
+'@clerk/shared': patch
+'@clerk/types': patch
+---
+
+Introduced searching for members list on `OrganizationProfile`
From e7320a4c4b73a33282e932f00bea0ea4da55d755 Mon Sep 17 00:00:00 2001
From: Laura Beatris <48022589+LauraBeatris@users.noreply.github.com>
Date: Mon, 20 Jan 2025 14:25:21 -0300
Subject: [PATCH 07/21] Add prop to optionally hide action trigger
---
.../src/ui/components/OrganizationProfile/MembersActions.tsx | 5 ++++-
.../src/ui/components/OrganizationProfile/MembersSearch.tsx | 1 +
packages/clerk-js/src/ui/elements/Action/ActionTrigger.tsx | 5 +++--
3 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/packages/clerk-js/src/ui/components/OrganizationProfile/MembersActions.tsx b/packages/clerk-js/src/ui/components/OrganizationProfile/MembersActions.tsx
index 9b7b639c66c..a1d5439a0cb 100644
--- a/packages/clerk-js/src/ui/components/OrganizationProfile/MembersActions.tsx
+++ b/packages/clerk-js/src/ui/components/OrganizationProfile/MembersActions.tsx
@@ -25,7 +25,10 @@ export const MembersActionsRow = ({ actionSlot }: MembersActionsRowProps) => {
>
{actionSlot}
{canManageMemberships && (
-
+
From 7e794d7731736e43cd400795eeca942176ab505a Mon Sep 17 00:00:00 2001
From: Laura Beatris <48022589+LauraBeatris@users.noreply.github.com>
Date: Mon, 20 Jan 2025 17:34:28 -0300
Subject: [PATCH 10/21] Show loading indicator for fresh data
---
.../OrganizationProfile/ActiveMembersList.tsx | 7 +++--
.../OrganizationProfile/MembersSearch.tsx | 2 +-
.../OrganizationMembers.tsx | 26 ++++++++++++++++---
3 files changed, 26 insertions(+), 9 deletions(-)
diff --git a/packages/clerk-js/src/ui/components/OrganizationProfile/ActiveMembersList.tsx b/packages/clerk-js/src/ui/components/OrganizationProfile/ActiveMembersList.tsx
index 1efb62fdf12..48c7eaffebb 100644
--- a/packages/clerk-js/src/ui/components/OrganizationProfile/ActiveMembersList.tsx
+++ b/packages/clerk-js/src/ui/components/OrganizationProfile/ActiveMembersList.tsx
@@ -8,13 +8,12 @@ import { useFetchRoles, useLocalizeCustomRoles } from '../../hooks/useFetchRoles
import { handleError } from '../../utils';
import { DataTable, RoleSelect, RowContainer } from './MemberListTable';
-const pageSize = 10;
-
type ActiveMembersListProps = {
memberships: ReturnType['memberships'];
+ pageSize: number;
};
-export const ActiveMembersList = ({ memberships }: ActiveMembersListProps) => {
+export const ActiveMembersList = ({ memberships, pageSize }: ActiveMembersListProps) => {
const card = useCardState();
const { organization } = useOrganization();
@@ -44,7 +43,7 @@ export const ActiveMembersList = ({ memberships }: ActiveMembersListProps) => {
itemCount={memberships?.count || 0}
pageCount={memberships?.pageCount || 0}
itemsPerPage={pageSize}
- isLoading={memberships?.isLoading || loadingRoles}
+ isLoading={(memberships?.isLoading && !memberships?.data) || loadingRoles}
emptyStateLocalizationKey={localizationKeys('organizationProfile.membersPage.detailsTitle__emptyRow')}
headers={[
localizationKeys('organizationProfile.membersPage.activeMembersTab.tableHeader__user'),
diff --git a/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx b/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
index afb0678d68b..551ae8e2a4a 100644
--- a/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
+++ b/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
@@ -35,7 +35,7 @@ export const MembersSearch = ({ isLoading, onChange }: MembersSearchProps) => {
clearTimeout(debounceTimer.current);
debounceTimer.current = setTimeout(() => {
- onChange(search);
+ onChange(search.trim());
}, 500);
},
{
diff --git a/packages/clerk-js/src/ui/components/OrganizationProfile/OrganizationMembers.tsx b/packages/clerk-js/src/ui/components/OrganizationProfile/OrganizationMembers.tsx
index 82daf47bb3c..365fcfabb95 100644
--- a/packages/clerk-js/src/ui/components/OrganizationProfile/OrganizationMembers.tsx
+++ b/packages/clerk-js/src/ui/components/OrganizationProfile/OrganizationMembers.tsx
@@ -1,5 +1,5 @@
import { useOrganization } from '@clerk/shared/react';
-import { useState } from 'react';
+import { useEffect, useState } from 'react';
import { NotificationCountBadge, useProtect } from '../../common';
import { useEnvironment, useOrganizationProfileContext } from '../../contexts';
@@ -25,6 +25,8 @@ import { MembersSearch } from './MembersSearch';
import { OrganizationMembersTabInvitations } from './OrganizationMembersTabInvitations';
import { OrganizationMembersTabRequests } from './OrganizationMembersTabRequests';
+export const ACTIVE_MEMBERS_PAGE_SIZE = 10;
+
export const OrganizationMembers = withCardStateProvider(() => {
const { organizationSettings } = useEnvironment();
const card = useCardState();
@@ -38,13 +40,26 @@ export const OrganizationMembers = withCardStateProvider(() => {
invitations: canManageMemberships || undefined,
memberships: canReadMemberships
? {
- pageSize: 10,
+ pageSize: membershipsQuery ? undefined : ACTIVE_MEMBERS_PAGE_SIZE,
keepPreviousData: true,
query: membershipsQuery || undefined,
}
: undefined,
});
+ // Resets pagination based on the number of items from a query term
+ useEffect(() => {
+ if (!membershipsQuery || !memberships?.data) {
+ return;
+ }
+
+ const hasOnePageLeft = (memberships?.count ?? 0) <= ACTIVE_MEMBERS_PAGE_SIZE;
+
+ if (hasOnePageLeft) {
+ memberships?.fetchPage?.(1);
+ }
+ }, [membershipsQuery, memberships]);
+
// @ts-expect-error This property is not typed. It is used by our dashboard in order to render a billing widget.
const { __unstable_manageBillingUrl } = useOrganizationProfileContext();
@@ -136,12 +151,15 @@ export const OrganizationMembers = withCardStateProvider(() => {
setMembershipsQuery(query)}
/>
}
/>
-
+
From 21d3b310b41c88436855f4071f47a20db43a6932 Mon Sep 17 00:00:00 2001
From: Laura Beatris <48022589+LauraBeatris@users.noreply.github.com>
Date: Mon, 20 Jan 2025 17:59:54 -0300
Subject: [PATCH 11/21] Do not trigger tab animation with search term
---
.../clerk-js/src/ui/common/NotificationCountBadge.tsx | 10 ++++++----
.../components/OrganizationProfile/MembersSearch.tsx | 9 +++++----
.../OrganizationProfile/OrganizationMembers.tsx | 7 +++++--
packages/localizations/src/ar-SA.ts | 2 +-
packages/localizations/src/be-BY.ts | 2 +-
packages/localizations/src/bg-BG.ts | 2 +-
packages/localizations/src/cs-CZ.ts | 2 +-
packages/localizations/src/da-DK.ts | 2 +-
packages/localizations/src/de-DE.ts | 2 +-
packages/localizations/src/el-GR.ts | 2 +-
packages/localizations/src/es-ES.ts | 2 +-
packages/localizations/src/es-MX.ts | 2 +-
packages/localizations/src/fi-FI.ts | 2 +-
packages/localizations/src/fr-FR.ts | 2 +-
packages/localizations/src/he-IL.ts | 2 +-
packages/localizations/src/hu-HU.ts | 2 +-
packages/localizations/src/is-IS.ts | 2 +-
packages/localizations/src/it-IT.ts | 2 +-
packages/localizations/src/ja-JP.ts | 2 +-
packages/localizations/src/ko-KR.ts | 2 +-
packages/localizations/src/mn-MN.ts | 2 +-
packages/localizations/src/nb-NO.ts | 2 +-
packages/localizations/src/nl-NL.ts | 2 +-
packages/localizations/src/pt-BR.ts | 2 +-
packages/localizations/src/pt-PT.ts | 2 +-
packages/localizations/src/ro-RO.ts | 2 +-
packages/localizations/src/ru-RU.ts | 2 +-
packages/localizations/src/sk-SK.ts | 2 +-
packages/localizations/src/sr-RS.ts | 2 +-
packages/localizations/src/sv-SE.ts | 2 +-
packages/localizations/src/th-TH.ts | 2 +-
packages/localizations/src/tr-TR.ts | 2 +-
packages/localizations/src/uk-UA.ts | 2 +-
packages/localizations/src/vi-VN.ts | 1 -
packages/localizations/src/zh-CN.ts | 2 +-
packages/localizations/src/zh-TW.ts | 2 +-
36 files changed, 48 insertions(+), 43 deletions(-)
diff --git a/packages/clerk-js/src/ui/common/NotificationCountBadge.tsx b/packages/clerk-js/src/ui/common/NotificationCountBadge.tsx
index c5ef64bfddb..456eb4aafbf 100644
--- a/packages/clerk-js/src/ui/common/NotificationCountBadge.tsx
+++ b/packages/clerk-js/src/ui/common/NotificationCountBadge.tsx
@@ -7,19 +7,21 @@ import { animations } from '../styledSystem';
type NotificationCountBadgeProps = PropsOfComponent & {
notificationCount: number;
containerSx?: ThemableCssProp;
+ shouldAnimate?: boolean;
};
export const NotificationCountBadge = (props: NotificationCountBadgeProps) => {
- const { notificationCount, containerSx, ...restProps } = props;
+ const { notificationCount, containerSx, shouldAnimate = true, ...restProps } = props;
const prefersReducedMotion = usePrefersReducedMotion();
const { t } = useLocalizations();
const localeKey = t(localizationKeys('locale'));
const formattedNotificationCount = formatToCompactNumber(notificationCount, localeKey);
const enterExitAnimation: ThemableCssProp = t => ({
- animation: prefersReducedMotion
- ? 'none'
- : `${animations.notificationAnimation} ${t.transitionDuration.$textField} ${t.transitionTiming.$slowBezier} 0s 1 normal forwards`,
+ animation:
+ !shouldAnimate || prefersReducedMotion
+ ? 'none'
+ : `${animations.notificationAnimation} ${t.transitionDuration.$textField} ${t.transitionTiming.$slowBezier} 0s 1 normal forwards`,
});
return (
diff --git a/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx b/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
index 551ae8e2a4a..7aa2756fece 100644
--- a/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
+++ b/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
@@ -8,9 +8,10 @@ import { Spinner } from '../../../ui/primitives';
type MembersSearchProps = {
isLoading: boolean;
onChange: (query: string) => void;
+ debounceMs?: number;
};
-export const MembersSearch = ({ isLoading, onChange }: MembersSearchProps) => {
+export const MembersSearch = ({ isLoading, onChange, debounceMs = 500 }: MembersSearchProps) => {
const { t } = useLocalizations();
const [search, setSearch] = useState('');
@@ -21,7 +22,7 @@ export const MembersSearch = ({ isLoading, onChange }: MembersSearchProps) => {
setSearch(event.target.value);
};
- // Updates query state to trigger query only once user stops typing
+ // Updates query state to trigger change handler only once user stops typing
useEffect(() => {
if (!inputRef.current) {
return;
@@ -36,7 +37,7 @@ export const MembersSearch = ({ isLoading, onChange }: MembersSearchProps) => {
debounceTimer.current = setTimeout(() => {
onChange(search.trim());
- }, 500);
+ }, debounceMs);
},
{
signal: controller.signal,
@@ -46,7 +47,7 @@ export const MembersSearch = ({ isLoading, onChange }: MembersSearchProps) => {
return () => {
controller.abort();
};
- }, [search]);
+ }, [search, debounceMs, onChange]);
return (
diff --git a/packages/clerk-js/src/ui/components/OrganizationProfile/OrganizationMembers.tsx b/packages/clerk-js/src/ui/components/OrganizationProfile/OrganizationMembers.tsx
index 365fcfabb95..4d947b564cb 100644
--- a/packages/clerk-js/src/ui/components/OrganizationProfile/OrganizationMembers.tsx
+++ b/packages/clerk-js/src/ui/components/OrganizationProfile/OrganizationMembers.tsx
@@ -40,6 +40,7 @@ export const OrganizationMembers = withCardStateProvider(() => {
invitations: canManageMemberships || undefined,
memberships: canReadMemberships
? {
+ // Resets pagination offset when searching
pageSize: membershipsQuery ? undefined : ACTIVE_MEMBERS_PAGE_SIZE,
keepPreviousData: true,
query: membershipsQuery || undefined,
@@ -47,7 +48,8 @@ export const OrganizationMembers = withCardStateProvider(() => {
: undefined,
});
- // Resets pagination based on the number of items from a query term
+ // If searching does not happen on a initial page, resets pagination offset
+ // based on the response count
useEffect(() => {
if (!membershipsQuery || !memberships?.data) {
return;
@@ -99,8 +101,9 @@ export const OrganizationMembers = withCardStateProvider(() => {
({ gap: t.space.$2 })}>
{canReadMemberships && (
- {memberships?.data && !memberships.isLoading && (
+ {!!memberships?.count && (
diff --git a/packages/localizations/src/ar-SA.ts b/packages/localizations/src/ar-SA.ts
index e5e4e60b000..cde120f25d5 100644
--- a/packages/localizations/src/ar-SA.ts
+++ b/packages/localizations/src/ar-SA.ts
@@ -450,7 +450,6 @@ export const arSA: LocalizationResource = {
detailsLabel: 'نريد التحقق من هويتك قبل أعادة تعيين كلمة المرور',
},
start: {
- __experimental_titleCombined: undefined,
actionLink: 'إنشاء حساب جديد',
actionLink__join_waitlist: undefined,
actionLink__use_email: 'استخدم البريد الإلكتروني',
@@ -462,6 +461,7 @@ export const arSA: LocalizationResource = {
actionText__join_waitlist: undefined,
subtitle: 'للمتابعة إلى {{applicationName}}',
title: 'تسجيل الدخول',
+ titleCombined: undefined,
},
totpMfa: {
formTitle: 'رمز التحقق',
diff --git a/packages/localizations/src/be-BY.ts b/packages/localizations/src/be-BY.ts
index 3386a8b4edd..0b907d48e5a 100644
--- a/packages/localizations/src/be-BY.ts
+++ b/packages/localizations/src/be-BY.ts
@@ -455,7 +455,6 @@ export const beBY: LocalizationResource = {
detailsLabel: 'Неабходна верыфікаваць вашу асобу перад аднаўленнем пароля',
},
start: {
- __experimental_titleCombined: undefined,
actionLink: 'Зарэгістравацца',
actionLink__join_waitlist: 'Далучыцца да чаргі',
actionLink__use_email: 'Выкарыстаць пошту',
@@ -467,6 +466,7 @@ export const beBY: LocalizationResource = {
actionText__join_waitlist: 'Далучыцеся да чакання',
subtitle: 'каб працягнуць працу ў "{{applicationName}}"',
title: 'Увайсці',
+ titleCombined: undefined,
},
totpMfa: {
formTitle: 'Код верыфікацыі',
diff --git a/packages/localizations/src/bg-BG.ts b/packages/localizations/src/bg-BG.ts
index a5635420bab..c85b48088b2 100644
--- a/packages/localizations/src/bg-BG.ts
+++ b/packages/localizations/src/bg-BG.ts
@@ -450,7 +450,6 @@ export const bgBG: LocalizationResource = {
detailsLabel: 'Трябва да потвърдим вашата самоличност, преди да нулираме паролата ви.',
},
start: {
- __experimental_titleCombined: undefined,
actionLink: 'Регистрирайте се',
actionLink__join_waitlist: 'Присъединете се към листата за изчакване',
actionLink__use_email: 'Използвайте имейл',
@@ -462,6 +461,7 @@ export const bgBG: LocalizationResource = {
actionText__join_waitlist: 'Все още нямате акаунт? Присъединете се към листата за изчакване.',
subtitle: 'Добре дошли обратно! Моля, влезте, за да продължите',
title: 'Влезте в {{applicationName}}',
+ titleCombined: undefined,
},
totpMfa: {
formTitle: 'Код за потвърждение',
diff --git a/packages/localizations/src/cs-CZ.ts b/packages/localizations/src/cs-CZ.ts
index 662d3fcf2dc..9e0adb92f6b 100644
--- a/packages/localizations/src/cs-CZ.ts
+++ b/packages/localizations/src/cs-CZ.ts
@@ -449,7 +449,6 @@ export const csCZ: LocalizationResource = {
detailsLabel: 'Před obnovením hesla je třeba ověřit vaši totožnost.',
},
start: {
- __experimental_titleCombined: undefined,
actionLink: 'Registrovat se',
actionLink__join_waitlist: undefined,
actionLink__use_email: 'Použít email',
@@ -461,6 +460,7 @@ export const csCZ: LocalizationResource = {
actionText__join_waitlist: 'Připojit se k čekací listině',
subtitle: 'pro pokračování do {{applicationName}}',
title: 'Přihlásit se',
+ titleCombined: undefined,
},
totpMfa: {
formTitle: 'Ověřovací kód',
diff --git a/packages/localizations/src/da-DK.ts b/packages/localizations/src/da-DK.ts
index d432fd90f07..bed02621062 100644
--- a/packages/localizations/src/da-DK.ts
+++ b/packages/localizations/src/da-DK.ts
@@ -450,7 +450,6 @@ export const daDK: LocalizationResource = {
detailsLabel: 'Vi skal bekræfte din identitet, før du nulstiller din adgangskode.',
},
start: {
- __experimental_titleCombined: undefined,
actionLink: 'Tilmeld dig',
actionLink__join_waitlist: undefined,
actionLink__use_email: 'Brug email',
@@ -462,6 +461,7 @@ export const daDK: LocalizationResource = {
actionText__join_waitlist: undefined,
subtitle: 'Forsæt til {{applicationName}}',
title: 'Log ind',
+ titleCombined: undefined,
},
totpMfa: {
formTitle: 'Bekræftelseskode',
diff --git a/packages/localizations/src/de-DE.ts b/packages/localizations/src/de-DE.ts
index c4fc305d4fd..e40980c8cca 100644
--- a/packages/localizations/src/de-DE.ts
+++ b/packages/localizations/src/de-DE.ts
@@ -455,7 +455,6 @@ export const deDE: LocalizationResource = {
detailsLabel: 'Bevor wir Ihr Passwort zurücksetzen können, müssen wir Ihre Identität überprüfen.',
},
start: {
- __experimental_titleCombined: undefined,
actionLink: 'Anmelden',
actionLink__join_waitlist: 'Warteliste beitreten',
actionLink__use_email: 'E-mail nutzen',
@@ -467,6 +466,7 @@ export const deDE: LocalizationResource = {
actionText__join_waitlist: 'Warteliste beitreten',
subtitle: 'weiter zu {{applicationName}}',
title: 'Einloggen',
+ titleCombined: undefined,
},
totpMfa: {
formTitle: 'Bestätigungscode',
diff --git a/packages/localizations/src/el-GR.ts b/packages/localizations/src/el-GR.ts
index 3fe6acd3139..ca97ba4a588 100644
--- a/packages/localizations/src/el-GR.ts
+++ b/packages/localizations/src/el-GR.ts
@@ -453,7 +453,6 @@ export const elGR: LocalizationResource = {
detailsLabel: 'Πρέπει να επαληθεύσουμε την ταυτότητά σας πριν επαναφέρουμε τον κωδικό πρόσβασής σας.',
},
start: {
- __experimental_titleCombined: 'Συνέχεια στο {{applicationName}}',
actionLink: 'Εγγραφή',
actionLink__join_waitlist: 'Εγγραφή στη λίστα αναμονής',
actionLink__use_email: 'Χρήση email',
@@ -465,6 +464,7 @@ export const elGR: LocalizationResource = {
actionText__join_waitlist: 'Θέλετε πρώιμη πρόσβαση;',
subtitle: 'για να συνεχίσετε στο {{applicationName}}',
title: 'Σύνδεση',
+ titleCombined: 'Συνέχεια στο {{applicationName}}',
},
totpMfa: {
formTitle: 'Κωδικός επαλήθευσης',
diff --git a/packages/localizations/src/es-ES.ts b/packages/localizations/src/es-ES.ts
index 40a45b4d640..3ff2337ff55 100644
--- a/packages/localizations/src/es-ES.ts
+++ b/packages/localizations/src/es-ES.ts
@@ -452,7 +452,6 @@ export const esES: LocalizationResource = {
detailsLabel: 'Necesitamos verificar tu identidad antes de restablecer tu contraseña.',
},
start: {
- __experimental_titleCombined: undefined,
actionLink: 'Regístrese',
actionLink__join_waitlist: 'Únase a la lista de espera',
actionLink__use_email: 'Usar correo electrónico',
@@ -464,6 +463,7 @@ export const esES: LocalizationResource = {
actionText__join_waitlist: '¿Te gustaría unirte a la lista de espera?',
subtitle: 'para continuar a {{applicationName}}',
title: 'Entrar',
+ titleCombined: undefined,
},
totpMfa: {
formTitle: 'Código de verificación',
diff --git a/packages/localizations/src/es-MX.ts b/packages/localizations/src/es-MX.ts
index b1faeabd7b1..d6b5607f881 100644
--- a/packages/localizations/src/es-MX.ts
+++ b/packages/localizations/src/es-MX.ts
@@ -455,7 +455,6 @@ export const esMX: LocalizationResource = {
detailsLabel: 'Es necesario verificar su identidad para restablecer su contraseña.',
},
start: {
- __experimental_titleCombined: undefined,
actionLink: 'Registrarse',
actionLink__join_waitlist: undefined,
actionLink__use_email: 'Utilizar correo electrónico',
@@ -467,6 +466,7 @@ export const esMX: LocalizationResource = {
actionText__join_waitlist: undefined,
subtitle: 'para continuar con {{applicationName}}',
title: 'Iniciar sesión',
+ titleCombined: undefined,
},
totpMfa: {
formTitle: 'Código de verificación',
diff --git a/packages/localizations/src/fi-FI.ts b/packages/localizations/src/fi-FI.ts
index 377712d9769..e75faac8b93 100644
--- a/packages/localizations/src/fi-FI.ts
+++ b/packages/localizations/src/fi-FI.ts
@@ -452,7 +452,6 @@ export const fiFI: LocalizationResource = {
detailsLabel: 'Ennen salasanan nollaamista on varmistettava henkilöllisyytesi.',
},
start: {
- __experimental_titleCombined: undefined,
actionLink: 'Rekisteröidy',
actionLink__join_waitlist: undefined,
actionLink__use_email: 'Käytä sähköpostia',
@@ -464,6 +463,7 @@ export const fiFI: LocalizationResource = {
actionText__join_waitlist: undefined,
subtitle: 'jatkaaksesi kohteeseen {{applicationName}}',
title: 'Kirjaudu sisään',
+ titleCombined: undefined,
},
totpMfa: {
formTitle: 'Todennuskoodi',
diff --git a/packages/localizations/src/fr-FR.ts b/packages/localizations/src/fr-FR.ts
index 6238bfe6cf0..226edfbad7e 100644
--- a/packages/localizations/src/fr-FR.ts
+++ b/packages/localizations/src/fr-FR.ts
@@ -455,7 +455,6 @@ export const frFR: LocalizationResource = {
detailsLabel: 'Nous devons vérifier votre identité avant de réinitialiser votre mot de passe.',
},
start: {
- __experimental_titleCombined: undefined,
actionLink: "S'inscrire",
actionLink__join_waitlist: "Rejoindre la liste d'attente",
actionLink__use_email: 'Utiliser e-mail',
@@ -467,6 +466,7 @@ export const frFR: LocalizationResource = {
actionText__join_waitlist: "Inscrivez-vous sur la liste d'attente",
subtitle: 'pour continuer vers {{applicationName}}',
title: "S'identifier",
+ titleCombined: undefined,
},
totpMfa: {
formTitle: 'Le code de vérification',
diff --git a/packages/localizations/src/he-IL.ts b/packages/localizations/src/he-IL.ts
index 19c3078f9f5..42ed5ce70cc 100644
--- a/packages/localizations/src/he-IL.ts
+++ b/packages/localizations/src/he-IL.ts
@@ -444,7 +444,6 @@ export const heIL: LocalizationResource = {
detailsLabel: 'אנחנו צריכים לאמת את זהותך לפני שנאפס את הסיסמה שלך.',
},
start: {
- __experimental_titleCombined: undefined,
actionLink: 'הרשמה',
actionLink__join_waitlist: undefined,
actionLink__use_email: 'השתמש בדוא"ל',
@@ -456,6 +455,7 @@ export const heIL: LocalizationResource = {
actionText__join_waitlist: undefined,
subtitle: 'להמשיך אל {{applicationName}}',
title: 'התחבר',
+ titleCombined: undefined,
},
totpMfa: {
formTitle: 'קוד אימות',
diff --git a/packages/localizations/src/hu-HU.ts b/packages/localizations/src/hu-HU.ts
index 7d2cdcc561e..b9b21399869 100644
--- a/packages/localizations/src/hu-HU.ts
+++ b/packages/localizations/src/hu-HU.ts
@@ -451,7 +451,6 @@ export const huHU: LocalizationResource = {
detailsLabel: 'Vissza kell igazolnod az identitásod, mielőtt visszaállítod a jelszavad',
},
start: {
- __experimental_titleCombined: undefined,
actionLink: 'Regisztráció',
actionLink__join_waitlist: undefined,
actionLink__use_email: 'Email használata',
@@ -463,6 +462,7 @@ export const huHU: LocalizationResource = {
actionText__join_waitlist: undefined,
subtitle: 'Üdv újra! A folytatáshoz kérlek jelentkezz be.',
title: 'Bejelentkezés a(z) {{applicationName}} fiókba',
+ titleCombined: undefined,
},
totpMfa: {
formTitle: 'Visszaigazoló kód',
diff --git a/packages/localizations/src/is-IS.ts b/packages/localizations/src/is-IS.ts
index 70be5767d20..33143467bdb 100644
--- a/packages/localizations/src/is-IS.ts
+++ b/packages/localizations/src/is-IS.ts
@@ -453,7 +453,6 @@ export const isIS: LocalizationResource = {
detailsLabel: 'Við þurfum að staðfesta auðkenni þitt áður en við endurstillum lykilorðið þitt.',
},
start: {
- __experimental_titleCombined: undefined,
actionLink: 'Skrá sig',
actionLink__join_waitlist: undefined,
actionLink__use_email: 'Nota netfang',
@@ -465,6 +464,7 @@ export const isIS: LocalizationResource = {
actionText__join_waitlist: undefined,
subtitle: 'Velkomin aftur! Vinsamlegast skráðu þig inn til að halda áfram',
title: 'Skrá inn í {{applicationName}}',
+ titleCombined: undefined,
},
totpMfa: {
formTitle: 'Staðfestingarkóði',
diff --git a/packages/localizations/src/it-IT.ts b/packages/localizations/src/it-IT.ts
index 1a44dcc4d30..2759d25ebfb 100644
--- a/packages/localizations/src/it-IT.ts
+++ b/packages/localizations/src/it-IT.ts
@@ -451,7 +451,6 @@ export const itIT: LocalizationResource = {
detailsLabel: 'Dobbiamo verificare la tua identità prima di resettare la tua password.',
},
start: {
- __experimental_titleCombined: undefined,
actionLink: 'Registrati',
actionLink__join_waitlist: "Unisciti alla lista d'attesa",
actionLink__use_email: 'Usa email',
@@ -463,6 +462,7 @@ export const itIT: LocalizationResource = {
actionText__join_waitlist: "Unisciti alla lista d'attesa",
subtitle: 'per continuare su {{applicationName}}',
title: 'Accedi',
+ titleCombined: undefined,
},
totpMfa: {
formTitle: 'Codice di verifica',
diff --git a/packages/localizations/src/ja-JP.ts b/packages/localizations/src/ja-JP.ts
index 33f56d459f0..05ba50992c7 100644
--- a/packages/localizations/src/ja-JP.ts
+++ b/packages/localizations/src/ja-JP.ts
@@ -451,7 +451,6 @@ export const jaJP: LocalizationResource = {
detailsLabel: 'パスワードをリセットする前に、身元を確認する必要があります。',
},
start: {
- __experimental_titleCombined: undefined,
actionLink: 'サインアップ',
actionLink__join_waitlist: undefined,
actionLink__use_email: 'メールアドレスを使用',
@@ -463,6 +462,7 @@ export const jaJP: LocalizationResource = {
actionText__join_waitlist: undefined,
subtitle: '{{applicationName}}へのアクセスを続ける',
title: 'サインイン',
+ titleCombined: undefined,
},
totpMfa: {
formTitle: '検証コード',
diff --git a/packages/localizations/src/ko-KR.ts b/packages/localizations/src/ko-KR.ts
index 7b9cecfbcaf..e4169af4652 100644
--- a/packages/localizations/src/ko-KR.ts
+++ b/packages/localizations/src/ko-KR.ts
@@ -446,7 +446,6 @@ export const koKR: LocalizationResource = {
detailsLabel: '비밀번호를 재설정하기 전에 신원을 확인해야 합니다.',
},
start: {
- __experimental_titleCombined: undefined,
actionLink: '회원가입',
actionLink__join_waitlist: undefined,
actionLink__use_email: '이메일 사용하기',
@@ -458,6 +457,7 @@ export const koKR: LocalizationResource = {
actionText__join_waitlist: undefined,
subtitle: '환영합니다! 계속하려면 로그인해 주세요',
title: '{{applicationName}}에 로그인',
+ titleCombined: undefined,
},
totpMfa: {
formTitle: '인증 코드',
diff --git a/packages/localizations/src/mn-MN.ts b/packages/localizations/src/mn-MN.ts
index 9372525ba1e..a05d65d34de 100644
--- a/packages/localizations/src/mn-MN.ts
+++ b/packages/localizations/src/mn-MN.ts
@@ -452,7 +452,6 @@ export const mnMN: LocalizationResource = {
detailsLabel: 'Нууц үгээ шинэчлэхээс өмнө бид таны хувийн мэдээллийг баталгаажуулах шаардлагатай.',
},
start: {
- __experimental_titleCombined: undefined,
actionLink: 'Бүртгүүлэх',
actionLink__join_waitlist: undefined,
actionLink__use_email: 'Имэйл ашиглах',
@@ -464,6 +463,7 @@ export const mnMN: LocalizationResource = {
actionText__join_waitlist: undefined,
subtitle: 'Тавтай морил! Үргэлжлүүлэхийн тулд нэвтэрнэ үү',
title: '{{applicationName}} руу нэвтрэх',
+ titleCombined: undefined,
},
totpMfa: {
formTitle: 'Баталгаажуулах код',
diff --git a/packages/localizations/src/nb-NO.ts b/packages/localizations/src/nb-NO.ts
index b35656fd189..2015fae35de 100644
--- a/packages/localizations/src/nb-NO.ts
+++ b/packages/localizations/src/nb-NO.ts
@@ -451,7 +451,6 @@ export const nbNO: LocalizationResource = {
detailsLabel: 'Vi må bekrefte identiteten din før vi tilbakestiller passordet ditt.',
},
start: {
- __experimental_titleCombined: undefined,
actionLink: 'Opprett konto',
actionLink__join_waitlist: undefined,
actionLink__use_email: 'Bruk e-post',
@@ -463,6 +462,7 @@ export const nbNO: LocalizationResource = {
actionText__join_waitlist: undefined,
subtitle: 'for å fortsette til {{applicationName}}',
title: 'Logg inn',
+ titleCombined: undefined,
},
totpMfa: {
formTitle: 'Verifiseringskode',
diff --git a/packages/localizations/src/nl-NL.ts b/packages/localizations/src/nl-NL.ts
index fbe9eaefcc9..259617f9827 100644
--- a/packages/localizations/src/nl-NL.ts
+++ b/packages/localizations/src/nl-NL.ts
@@ -451,7 +451,6 @@ export const nlNL: LocalizationResource = {
detailsLabel: 'Voor veiligheidsredenen is het vereist om je wachtwoord te resetten.',
},
start: {
- __experimental_titleCombined: undefined,
actionLink: 'Registreren',
actionLink__join_waitlist: 'Meld je aan voor de wachtlijst',
actionLink__use_email: 'Gebruik e-mail',
@@ -463,6 +462,7 @@ export const nlNL: LocalizationResource = {
actionText__join_waitlist: 'Nog geen account?',
subtitle: 'om door te gaan naar {{applicationName}}',
title: 'Inloggen',
+ titleCombined: undefined,
},
totpMfa: {
formTitle: 'Verificatiecode',
diff --git a/packages/localizations/src/pt-BR.ts b/packages/localizations/src/pt-BR.ts
index f62aaff052b..fd988088740 100644
--- a/packages/localizations/src/pt-BR.ts
+++ b/packages/localizations/src/pt-BR.ts
@@ -451,7 +451,6 @@ export const ptBR: LocalizationResource = {
detailsLabel: 'Precisamos verificar sua identidade antes de redefinir sua senha.',
},
start: {
- __experimental_titleCombined: undefined,
actionLink: 'Registre-se',
actionLink__join_waitlist: 'Entrar na lista de espera',
actionLink__use_email: 'Usar e-mail',
@@ -463,6 +462,7 @@ export const ptBR: LocalizationResource = {
actionText__join_waitlist: 'Quer ser notificado quando estivermos prontos?',
subtitle: 'para continuar em {{applicationName}}',
title: 'Entrar',
+ titleCombined: undefined,
},
totpMfa: {
formTitle: 'Código de verificação',
diff --git a/packages/localizations/src/pt-PT.ts b/packages/localizations/src/pt-PT.ts
index e9a40a1a4c0..efd8b557f3d 100644
--- a/packages/localizations/src/pt-PT.ts
+++ b/packages/localizations/src/pt-PT.ts
@@ -449,7 +449,6 @@ export const ptPT: LocalizationResource = {
detailsLabel: 'Precisamos verificar a sua identidade antes de redefinir a palavra-passe.',
},
start: {
- __experimental_titleCombined: undefined,
actionLink: 'Registre-se',
actionLink__join_waitlist: 'Juntar-se à lista de espera',
actionLink__use_email: 'Usar e-mail',
@@ -461,6 +460,7 @@ export const ptPT: LocalizationResource = {
actionText__join_waitlist: 'Ainda não tem uma conta? Junte-se à lista de espera.',
subtitle: 'para continuar em {{applicationName}}',
title: 'Entrar',
+ titleCombined: undefined,
},
totpMfa: {
formTitle: 'Código de verificação',
diff --git a/packages/localizations/src/ro-RO.ts b/packages/localizations/src/ro-RO.ts
index e54b843dc87..7ca7c7ec036 100644
--- a/packages/localizations/src/ro-RO.ts
+++ b/packages/localizations/src/ro-RO.ts
@@ -453,7 +453,6 @@ export const roRO: LocalizationResource = {
detailsLabel: 'Trebuie să vă verificăm identitatea înainte de a vă reseta parola.',
},
start: {
- __experimental_titleCombined: undefined,
actionLink: 'Înscrieți-vă',
actionLink__join_waitlist: undefined,
actionLink__use_email: 'Utilizați e-mailul',
@@ -465,6 +464,7 @@ export const roRO: LocalizationResource = {
actionText__join_waitlist: undefined,
subtitle: 'pentru a continua la {{applicationName}}',
title: 'Conectați-vă',
+ titleCombined: undefined,
},
totpMfa: {
formTitle: 'Cod de verificare',
diff --git a/packages/localizations/src/ru-RU.ts b/packages/localizations/src/ru-RU.ts
index 7185b045e39..f9cf9502a81 100644
--- a/packages/localizations/src/ru-RU.ts
+++ b/packages/localizations/src/ru-RU.ts
@@ -460,7 +460,6 @@ export const ruRU: LocalizationResource = {
detailsLabel: 'Необходимо верифицировать вашу личность перед восстановлением пароля',
},
start: {
- __experimental_titleCombined: undefined,
actionLink: 'Зарегистрироваться',
actionLink__join_waitlist: undefined,
actionLink__use_email: 'Использовать почту',
@@ -472,6 +471,7 @@ export const ruRU: LocalizationResource = {
actionText__join_waitlist: undefined,
subtitle: 'чтобы продолжить работу в "{{applicationName}}"',
title: 'Войти',
+ titleCombined: undefined,
},
totpMfa: {
formTitle: 'Верификационный код',
diff --git a/packages/localizations/src/sk-SK.ts b/packages/localizations/src/sk-SK.ts
index 4113248416b..051eb317a9b 100644
--- a/packages/localizations/src/sk-SK.ts
+++ b/packages/localizations/src/sk-SK.ts
@@ -449,7 +449,6 @@ export const skSK: LocalizationResource = {
detailsLabel: 'Pred obnovením hesla je potrebné overiť vašu totožnosť.',
},
start: {
- __experimental_titleCombined: undefined,
actionLink: 'Registrovať sa',
actionLink__join_waitlist: undefined,
actionLink__use_email: 'Použiť email',
@@ -461,6 +460,7 @@ export const skSK: LocalizationResource = {
actionText__join_waitlist: undefined,
subtitle: 'pre pokračovanie do {{applicationName}}',
title: 'Prihlásiť sa',
+ titleCombined: undefined,
},
totpMfa: {
formTitle: 'Overovací kód',
diff --git a/packages/localizations/src/sr-RS.ts b/packages/localizations/src/sr-RS.ts
index 30241b94ade..a5536165d20 100644
--- a/packages/localizations/src/sr-RS.ts
+++ b/packages/localizations/src/sr-RS.ts
@@ -450,7 +450,6 @@ export const srRS: LocalizationResource = {
detailsLabel: 'Potrebno je da potvrdimo tvoj identitet pre resetovanja lozinke.',
},
start: {
- __experimental_titleCombined: undefined,
actionLink: 'Registruj se',
actionLink__join_waitlist: undefined,
actionLink__use_email: 'Koristi e-mail',
@@ -462,6 +461,7 @@ export const srRS: LocalizationResource = {
actionText__join_waitlist: undefined,
subtitle: 'Dobro došao nazad! Molimo prijavi se da nastaviš',
title: 'Prijavi se na {{applicationName}}',
+ titleCombined: undefined,
},
totpMfa: {
formTitle: 'Verifikacioni kod',
diff --git a/packages/localizations/src/sv-SE.ts b/packages/localizations/src/sv-SE.ts
index dff57878011..4b8c1518de9 100644
--- a/packages/localizations/src/sv-SE.ts
+++ b/packages/localizations/src/sv-SE.ts
@@ -453,7 +453,6 @@ export const svSE: LocalizationResource = {
detailsLabel: 'Vi behöver verifiera din identitet innan vi återställer ditt lösenord.',
},
start: {
- __experimental_titleCombined: undefined,
actionLink: 'Skapa konto',
actionLink__join_waitlist: undefined,
actionLink__use_email: 'Use email',
@@ -465,6 +464,7 @@ export const svSE: LocalizationResource = {
actionText__join_waitlist: undefined,
subtitle: 'för att fortsätta till {{applicationName}}',
title: 'Logga in',
+ titleCombined: undefined,
},
totpMfa: {
formTitle: 'Verifieringskod',
diff --git a/packages/localizations/src/th-TH.ts b/packages/localizations/src/th-TH.ts
index 9ee30e9cbb3..f70a65d8011 100644
--- a/packages/localizations/src/th-TH.ts
+++ b/packages/localizations/src/th-TH.ts
@@ -447,7 +447,6 @@ export const thTH: LocalizationResource = {
detailsLabel: 'เราต้องตรวจสอบตัวตนของคุณก่อนที่จะรีเซ็ตรหัสผ่าน',
},
start: {
- __experimental_titleCombined: 'ดำเนินการต่อไปยัง {{applicationName}}',
actionLink: 'สมัครสมาชิก',
actionLink__join_waitlist: 'เข้าร่วมรายชื่อผู้รอ',
actionLink__use_email: 'ใช้อีเมล',
@@ -459,6 +458,7 @@ export const thTH: LocalizationResource = {
actionText__join_waitlist: 'ต้องการเข้าถึงก่อนใช่หรือไม่?',
subtitle: 'ยินดีต้อนรับกลับ! โปรดเข้าสู่ระบบเพื่อดำเนินการต่อ',
title: 'เข้าสู่ระบบ {{applicationName}}',
+ titleCombined: 'ดำเนินการต่อไปยัง {{applicationName}}',
},
totpMfa: {
formTitle: 'รหัสการตรวจสอบ',
diff --git a/packages/localizations/src/tr-TR.ts b/packages/localizations/src/tr-TR.ts
index 2104469b6d9..6371f8972c3 100644
--- a/packages/localizations/src/tr-TR.ts
+++ b/packages/localizations/src/tr-TR.ts
@@ -452,7 +452,6 @@ export const trTR: LocalizationResource = {
detailsLabel: 'Şifrenizi sıfırlamadan önce kimliğinizi doğrulamamız gerekiyor.',
},
start: {
- __experimental_titleCombined: undefined,
actionLink: 'Kayıt ol',
actionLink__join_waitlist: undefined,
actionLink__use_email: 'E-posta kullan',
@@ -464,6 +463,7 @@ export const trTR: LocalizationResource = {
actionText__join_waitlist: 'Bekleme listesine katılın',
subtitle: '{{applicationName}} ile devam etmek için',
title: 'Giriş yap',
+ titleCombined: undefined,
},
totpMfa: {
formTitle: 'Doğrulama kodu',
diff --git a/packages/localizations/src/uk-UA.ts b/packages/localizations/src/uk-UA.ts
index 91462f3b7df..3e940ddfc17 100644
--- a/packages/localizations/src/uk-UA.ts
+++ b/packages/localizations/src/uk-UA.ts
@@ -449,7 +449,6 @@ export const ukUA: LocalizationResource = {
detailsLabel: 'Необхідно верифікувати вашу особу перед відновленням пароля',
},
start: {
- __experimental_titleCombined: undefined,
actionLink: 'Зареєструватися',
actionLink__join_waitlist: undefined,
actionLink__use_email: 'Використовувати пошту',
@@ -461,6 +460,7 @@ export const ukUA: LocalizationResource = {
actionText__join_waitlist: undefined,
subtitle: 'щоб продовжити роботу в "{{applicationName}}"',
title: 'Увійти',
+ titleCombined: undefined,
},
totpMfa: {
formTitle: 'Верифікаційний код',
diff --git a/packages/localizations/src/vi-VN.ts b/packages/localizations/src/vi-VN.ts
index 2221dc309f3..97ecf183df3 100644
--- a/packages/localizations/src/vi-VN.ts
+++ b/packages/localizations/src/vi-VN.ts
@@ -449,7 +449,6 @@ export const viVN: LocalizationResource = {
detailsLabel: 'Chúng tôi cần xác minh danh tính của bạn trước khi đặt lại mật khẩu.',
},
start: {
- __experimental_titleCombined: undefined,
actionLink: 'Đăng ký',
actionLink__join_waitlist: undefined,
actionLink__use_email: 'Sử dụng email',
diff --git a/packages/localizations/src/zh-CN.ts b/packages/localizations/src/zh-CN.ts
index 4a717e7dc1d..22d1a5dfa75 100644
--- a/packages/localizations/src/zh-CN.ts
+++ b/packages/localizations/src/zh-CN.ts
@@ -440,7 +440,6 @@ export const zhCN: LocalizationResource = {
detailsLabel: '我们需要验证您的身份才能重置您的密码。',
},
start: {
- __experimental_titleCombined: undefined,
actionLink: '注册',
actionLink__join_waitlist: undefined,
actionLink__use_email: '使用电子邮件',
@@ -452,6 +451,7 @@ export const zhCN: LocalizationResource = {
actionText__join_waitlist: undefined,
subtitle: '继续使用 {{applicationName}}',
title: '登录',
+ titleCombined: undefined,
},
totpMfa: {
formTitle: '验证码',
diff --git a/packages/localizations/src/zh-TW.ts b/packages/localizations/src/zh-TW.ts
index 7517cd433b1..f5e863cd324 100644
--- a/packages/localizations/src/zh-TW.ts
+++ b/packages/localizations/src/zh-TW.ts
@@ -446,7 +446,6 @@ export const zhTW: LocalizationResource = {
detailsLabel: '我們需要驗證您的身份才能重設您的密碼。',
},
start: {
- __experimental_titleCombined: undefined,
actionLink: '註冊',
actionLink__join_waitlist: undefined,
actionLink__use_email: '使用電子郵件',
@@ -458,6 +457,7 @@ export const zhTW: LocalizationResource = {
actionText__join_waitlist: undefined,
subtitle: '繼續使用 {{applicationName}}',
title: '登錄',
+ titleCombined: undefined,
},
totpMfa: {
formTitle: '驗證碼',
From 2738e0de25daf892aa0c38c452ae889a7002d566 Mon Sep 17 00:00:00 2001
From: Laura Beatris <48022589+LauraBeatris@users.noreply.github.com>
Date: Mon, 20 Jan 2025 18:25:24 -0300
Subject: [PATCH 12/21] Add translation for PT and ES
---
packages/localizations/src/es-ES.ts | 2 +-
packages/localizations/src/es-MX.ts | 2 +-
packages/localizations/src/pt-BR.ts | 2 +-
packages/localizations/src/pt-PT.ts | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/packages/localizations/src/es-ES.ts b/packages/localizations/src/es-ES.ts
index 3ff2337ff55..41e27419dc7 100644
--- a/packages/localizations/src/es-ES.ts
+++ b/packages/localizations/src/es-ES.ts
@@ -130,7 +130,7 @@ export const esES: LocalizationResource = {
},
membersPage: {
action__invite: 'Invitar',
- action__search: undefined,
+ action__search: 'Buscar',
activeMembersTab: {
menuAction__remove: 'Quitar miembro',
tableHeader__actions: 'Acciones',
diff --git a/packages/localizations/src/es-MX.ts b/packages/localizations/src/es-MX.ts
index d6b5607f881..93ea2273616 100644
--- a/packages/localizations/src/es-MX.ts
+++ b/packages/localizations/src/es-MX.ts
@@ -131,7 +131,7 @@ export const esMX: LocalizationResource = {
},
membersPage: {
action__invite: 'Invitar',
- action__search: undefined,
+ action__search: 'Buscar',
activeMembersTab: {
menuAction__remove: 'Eliminar miembro',
tableHeader__actions: undefined,
diff --git a/packages/localizations/src/pt-BR.ts b/packages/localizations/src/pt-BR.ts
index fd988088740..e02b3bad2f4 100644
--- a/packages/localizations/src/pt-BR.ts
+++ b/packages/localizations/src/pt-BR.ts
@@ -129,7 +129,7 @@ export const ptBR: LocalizationResource = {
},
membersPage: {
action__invite: 'Convidar',
- action__search: undefined,
+ action__search: 'Pesquisar',
activeMembersTab: {
menuAction__remove: 'Remover membro',
tableHeader__actions: 'Ações',
diff --git a/packages/localizations/src/pt-PT.ts b/packages/localizations/src/pt-PT.ts
index efd8b557f3d..1170cfd35fe 100644
--- a/packages/localizations/src/pt-PT.ts
+++ b/packages/localizations/src/pt-PT.ts
@@ -128,7 +128,7 @@ export const ptPT: LocalizationResource = {
},
membersPage: {
action__invite: 'Convidar',
- action__search: undefined,
+ action__search: 'Pesquisar',
activeMembersTab: {
menuAction__remove: 'Remover membro',
tableHeader__actions: 'Ações',
From 333cf78b7dfe7c24c93a86f489bfc14421da0d31 Mon Sep 17 00:00:00 2001
From: Laura Beatris <48022589+LauraBeatris@users.noreply.github.com>
Date: Tue, 21 Jan 2025 07:26:31 -0300
Subject: [PATCH 13/21] Pass search props to controlled `MembersSearch`
component
---
.../OrganizationProfile/ActiveMembersList.tsx | 1 +
.../OrganizationProfile/MembersSearch.tsx | 62 +++++++++++++++----
.../OrganizationMembers.tsx | 33 ++++------
.../__tests__/OrganizationMembers.test.tsx | 2 +-
4 files changed, 64 insertions(+), 34 deletions(-)
diff --git a/packages/clerk-js/src/ui/components/OrganizationProfile/ActiveMembersList.tsx b/packages/clerk-js/src/ui/components/OrganizationProfile/ActiveMembersList.tsx
index 48c7eaffebb..aaafdbc454e 100644
--- a/packages/clerk-js/src/ui/components/OrganizationProfile/ActiveMembersList.tsx
+++ b/packages/clerk-js/src/ui/components/OrganizationProfile/ActiveMembersList.tsx
@@ -44,6 +44,7 @@ export const ActiveMembersList = ({ memberships, pageSize }: ActiveMembersListPr
pageCount={memberships?.pageCount || 0}
itemsPerPage={pageSize}
isLoading={(memberships?.isLoading && !memberships?.data) || loadingRoles}
+ // TODO -> Add new localization key with search query - eg: "No members to display for 'foo'"
emptyStateLocalizationKey={localizationKeys('organizationProfile.membersPage.detailsTitle__emptyRow')}
headers={[
localizationKeys('organizationProfile.membersPage.activeMembersTab.tableHeader__user'),
diff --git a/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx b/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
index 7aa2756fece..92748d4e777 100644
--- a/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
+++ b/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
@@ -1,28 +1,50 @@
-import { useEffect, useRef, useState } from 'react';
+import type { useOrganization } from '@clerk/shared/react';
+import type { GetMembersParams } from '@clerk/types';
+import { useEffect, useRef } from 'react';
import { Flex, localizationKeys, useLocalizations } from '../../../ui/customizables';
import { Animated, InputWithIcon } from '../../../ui/elements';
import { MagnifyingGlass } from '../../../ui/icons';
import { Spinner } from '../../../ui/primitives';
+import { ACTIVE_MEMBERS_PAGE_SIZE } from './OrganizationMembers';
type MembersSearchProps = {
- isLoading: boolean;
- onChange: (query: string) => void;
- debounceMs?: number;
+ /**
+ * Controlled query param state by parent component
+ */
+ query: GetMembersParams['query'];
+ /**
+ * Controlled input field value by parent component
+ */
+ value: string;
+ /**
+ * Paginated organization memberships
+ */
+ memberships: ReturnType['memberships'];
+ /**
+ * Handler for change event on input field
+ */
+ onSearchChange: (value: string) => void;
+ /**
+ * Handler for `query` value changes
+ */
+ onQueryTrigger: (query: string) => void;
};
-export const MembersSearch = ({ isLoading, onChange, debounceMs = 500 }: MembersSearchProps) => {
+const membersSearchDebounceMs = 500;
+
+export const MembersSearch = ({ query, value, memberships, onSearchChange, onQueryTrigger }: MembersSearchProps) => {
const { t } = useLocalizations();
- const [search, setSearch] = useState('');
const inputRef = useRef(null);
const debounceTimer = useRef();
const handleChange = (event: React.ChangeEvent) => {
- setSearch(event.target.value);
+ onSearchChange(event.target.value);
};
- // Updates query state to trigger change handler only once user stops typing
+ // Trigger the `query` change on a parent component in order to
+ // refetch organization memberships once the user stops typing
useEffect(() => {
if (!inputRef.current) {
return;
@@ -36,8 +58,8 @@ export const MembersSearch = ({ isLoading, onChange, debounceMs = 500 }: Members
clearTimeout(debounceTimer.current);
debounceTimer.current = setTimeout(() => {
- onChange(search.trim());
- }, debounceMs);
+ onQueryTrigger(value.trim());
+ }, membersSearchDebounceMs);
},
{
signal: controller.signal,
@@ -47,7 +69,23 @@ export const MembersSearch = ({ isLoading, onChange, debounceMs = 500 }: Members
return () => {
controller.abort();
};
- }, [search, debounceMs, onChange]);
+ }, [value, onQueryTrigger]);
+
+ // If search is not performed on a initial page, resets pagination offset
+ // based on the response count
+ useEffect(() => {
+ if (!query || !memberships?.data) {
+ return;
+ }
+
+ const hasOnePageLeft = (memberships?.count ?? 0) <= ACTIVE_MEMBERS_PAGE_SIZE;
+
+ if (hasOnePageLeft) {
+ memberships?.fetchPage?.(1);
+ }
+ }, [query, memberships]);
+
+ const isFetchingNewData = !!memberships?.isLoading && !!memberships.data?.length;
return (
@@ -59,7 +97,7 @@ export const MembersSearch = ({ isLoading, onChange, debounceMs = 500 }: Members
spellCheck={false}
aria-label='Search'
placeholder={t(localizationKeys('organizationProfile.membersPage.action__search'))}
- leftIcon={isLoading ? : }
+ leftIcon={isFetchingNewData ? : }
onChange={handleChange}
containerSx={{ width: '100%' }}
/>
diff --git a/packages/clerk-js/src/ui/components/OrganizationProfile/OrganizationMembers.tsx b/packages/clerk-js/src/ui/components/OrganizationProfile/OrganizationMembers.tsx
index 4d947b564cb..29479f38a08 100644
--- a/packages/clerk-js/src/ui/components/OrganizationProfile/OrganizationMembers.tsx
+++ b/packages/clerk-js/src/ui/components/OrganizationProfile/OrganizationMembers.tsx
@@ -1,5 +1,5 @@
import { useOrganization } from '@clerk/shared/react';
-import { useEffect, useState } from 'react';
+import { useState } from 'react';
import { NotificationCountBadge, useProtect } from '../../common';
import { useEnvironment, useOrganizationProfileContext } from '../../contexts';
@@ -34,34 +34,22 @@ export const OrganizationMembers = withCardStateProvider(() => {
const canReadMemberships = useProtect({ permission: 'org:sys_memberships:read' });
const isDomainsEnabled = organizationSettings?.domains?.enabled && canManageMemberships;
- const [membershipsQuery, setMembershipsQuery] = useState();
+ const [query, setQuery] = useState();
+ const [search, setSearch] = useState();
+
const { membershipRequests, memberships, invitations } = useOrganization({
membershipRequests: isDomainsEnabled || undefined,
invitations: canManageMemberships || undefined,
memberships: canReadMemberships
? {
// Resets pagination offset when searching
- pageSize: membershipsQuery ? undefined : ACTIVE_MEMBERS_PAGE_SIZE,
+ pageSize: query ? undefined : ACTIVE_MEMBERS_PAGE_SIZE,
keepPreviousData: true,
- query: membershipsQuery || undefined,
+ query: query || undefined,
}
: undefined,
});
- // If searching does not happen on a initial page, resets pagination offset
- // based on the response count
- useEffect(() => {
- if (!membershipsQuery || !memberships?.data) {
- return;
- }
-
- const hasOnePageLeft = (memberships?.count ?? 0) <= ACTIVE_MEMBERS_PAGE_SIZE;
-
- if (hasOnePageLeft) {
- memberships?.fetchPage?.(1);
- }
- }, [membershipsQuery, memberships]);
-
// @ts-expect-error This property is not typed. It is used by our dashboard in order to render a billing widget.
const { __unstable_manageBillingUrl } = useOrganizationProfileContext();
@@ -103,7 +91,7 @@ export const OrganizationMembers = withCardStateProvider(() => {
{!!memberships?.count && (
@@ -154,8 +142,11 @@ export const OrganizationMembers = withCardStateProvider(() => {
setMembershipsQuery(query)}
+ query={query}
+ value={search ?? ''}
+ memberships={memberships}
+ onSearchChange={query => setSearch(query)}
+ onQueryTrigger={query => setQuery(query)}
/>
}
/>
diff --git a/packages/clerk-js/src/ui/components/OrganizationProfile/__tests__/OrganizationMembers.test.tsx b/packages/clerk-js/src/ui/components/OrganizationProfile/__tests__/OrganizationMembers.test.tsx
index 113f272ef4b..2b4a6262044 100644
--- a/packages/clerk-js/src/ui/components/OrganizationProfile/__tests__/OrganizationMembers.test.tsx
+++ b/packages/clerk-js/src/ui/components/OrganizationProfile/__tests__/OrganizationMembers.test.tsx
@@ -518,7 +518,7 @@ describe('OrganizationMembers', () => {
await waitFor(async () =>
expect(await findByRole('heading', { name: /invite new members/i })).toBeInTheDocument(),
);
- expect(inviteButton).not.toBeInTheDocument();
+ expect(inviteButton).toBeInTheDocument();
await userEvent.click(getByRole('button', { name: 'Cancel' }));
await waitFor(async () => expect(await findByRole('button', { name: 'Invite' })).toBeInTheDocument());
From 3b5e46cd04af1c6c349b0d8877c0997279458322 Mon Sep 17 00:00:00 2001
From: Laura Beatris <48022589+LauraBeatris@users.noreply.github.com>
Date: Tue, 21 Jan 2025 07:47:44 -0300
Subject: [PATCH 14/21] Preserve input value
---
.../src/ui/components/OrganizationProfile/MembersSearch.tsx | 5 +++--
.../components/OrganizationProfile/OrganizationMembers.tsx | 4 ++--
2 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx b/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
index 92748d4e777..2aa01fb397d 100644
--- a/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
+++ b/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
@@ -43,8 +43,8 @@ export const MembersSearch = ({ query, value, memberships, onSearchChange, onQue
onSearchChange(event.target.value);
};
- // Trigger the `query` change on a parent component in order to
- // refetch organization memberships once the user stops typing
+ // Debounce the input value changes until the user stops typing
+ // and trigger the `query` param setter
useEffect(() => {
if (!inputRef.current) {
return;
@@ -91,6 +91,7 @@ export const MembersSearch = ({ query, value, memberships, onSearchChange, onQue
{
const isDomainsEnabled = organizationSettings?.domains?.enabled && canManageMemberships;
const [query, setQuery] = useState();
- const [search, setSearch] = useState();
+ const [search, setSearch] = useState('');
const { membershipRequests, memberships, invitations } = useOrganization({
membershipRequests: isDomainsEnabled || undefined,
@@ -143,7 +143,7 @@ export const OrganizationMembers = withCardStateProvider(() => {
actionSlot={
setSearch(query)}
onQueryTrigger={query => setQuery(query)}
From d6b7fe0de9e7ff0c86708e39c35cebb3c02a0f52 Mon Sep 17 00:00:00 2001
From: Laura Beatris <48022589+LauraBeatris@users.noreply.github.com>
Date: Tue, 21 Jan 2025 08:00:35 -0300
Subject: [PATCH 15/21] Clear query once search gets reset
---
.../OrganizationProfile/ActiveMembersList.tsx | 1 -
.../OrganizationProfile/MembersSearch.tsx | 13 +++++++++----
.../OrganizationProfile/OrganizationMembers.tsx | 2 --
3 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/packages/clerk-js/src/ui/components/OrganizationProfile/ActiveMembersList.tsx b/packages/clerk-js/src/ui/components/OrganizationProfile/ActiveMembersList.tsx
index aaafdbc454e..48c7eaffebb 100644
--- a/packages/clerk-js/src/ui/components/OrganizationProfile/ActiveMembersList.tsx
+++ b/packages/clerk-js/src/ui/components/OrganizationProfile/ActiveMembersList.tsx
@@ -44,7 +44,6 @@ export const ActiveMembersList = ({ memberships, pageSize }: ActiveMembersListPr
pageCount={memberships?.pageCount || 0}
itemsPerPage={pageSize}
isLoading={(memberships?.isLoading && !memberships?.data) || loadingRoles}
- // TODO -> Add new localization key with search query - eg: "No members to display for 'foo'"
emptyStateLocalizationKey={localizationKeys('organizationProfile.membersPage.detailsTitle__emptyRow')}
headers={[
localizationKeys('organizationProfile.membersPage.activeMembersTab.tableHeader__user'),
diff --git a/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx b/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
index 2aa01fb397d..a5565f28eba 100644
--- a/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
+++ b/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
@@ -40,11 +40,17 @@ export const MembersSearch = ({ query, value, memberships, onSearchChange, onQue
const debounceTimer = useRef();
const handleChange = (event: React.ChangeEvent) => {
- onSearchChange(event.target.value);
+ const value = event.target.value;
+ onSearchChange(value);
+
+ const shouldClearQuery = value === '';
+ if (shouldClearQuery) {
+ onQueryTrigger(value);
+ }
};
// Debounce the input value changes until the user stops typing
- // and trigger the `query` param setter
+ // to trigger the `query` param setter
useEffect(() => {
if (!inputRef.current) {
return;
@@ -79,13 +85,12 @@ export const MembersSearch = ({ query, value, memberships, onSearchChange, onQue
}
const hasOnePageLeft = (memberships?.count ?? 0) <= ACTIVE_MEMBERS_PAGE_SIZE;
-
if (hasOnePageLeft) {
memberships?.fetchPage?.(1);
}
}, [query, memberships]);
- const isFetchingNewData = !!memberships?.isLoading && !!memberships.data?.length;
+ const isFetchingNewData = value && !!memberships?.isLoading && !!memberships.data?.length;
return (
diff --git a/packages/clerk-js/src/ui/components/OrganizationProfile/OrganizationMembers.tsx b/packages/clerk-js/src/ui/components/OrganizationProfile/OrganizationMembers.tsx
index 0c1c7e3b6b7..f4149a18c55 100644
--- a/packages/clerk-js/src/ui/components/OrganizationProfile/OrganizationMembers.tsx
+++ b/packages/clerk-js/src/ui/components/OrganizationProfile/OrganizationMembers.tsx
@@ -42,8 +42,6 @@ export const OrganizationMembers = withCardStateProvider(() => {
invitations: canManageMemberships || undefined,
memberships: canReadMemberships
? {
- // Resets pagination offset when searching
- pageSize: query ? undefined : ACTIVE_MEMBERS_PAGE_SIZE,
keepPreviousData: true,
query: query || undefined,
}
From f4ce29e5f395d9b2691a4d90ade304aa380de76e Mon Sep 17 00:00:00 2001
From: Laura Beatris <48022589+LauraBeatris@users.noreply.github.com>
Date: Wed, 22 Jan 2025 11:58:40 -0300
Subject: [PATCH 16/21] Move debounce logic to event handler and adjust types
---
.../OrganizationProfile/MembersSearch.tsx | 41 ++++++-------------
.../OrganizationMembers.tsx | 2 +-
2 files changed, 14 insertions(+), 29 deletions(-)
diff --git a/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx b/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
index a5565f28eba..0b8d0e33ff3 100644
--- a/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
+++ b/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
@@ -37,45 +37,29 @@ export const MembersSearch = ({ query, value, memberships, onSearchChange, onQue
const { t } = useLocalizations();
const inputRef = useRef(null);
- const debounceTimer = useRef();
+ const debounceTimer = useRef | null>(null);
const handleChange = (event: React.ChangeEvent) => {
- const value = event.target.value;
- onSearchChange(value);
+ const eventValue = event.target.value;
+ onSearchChange(eventValue);
- const shouldClearQuery = value === '';
+ const shouldClearQuery = eventValue === '';
if (shouldClearQuery) {
- onQueryTrigger(value);
+ onQueryTrigger(eventValue);
}
};
// Debounce the input value changes until the user stops typing
// to trigger the `query` param setter
- useEffect(() => {
- if (!inputRef.current) {
- return;
+ function handleKeyUp() {
+ if (debounceTimer.current) {
+ clearTimeout(debounceTimer.current);
}
- const controller = new AbortController();
-
- inputRef.current.addEventListener(
- 'keyup',
- () => {
- clearTimeout(debounceTimer.current);
-
- debounceTimer.current = setTimeout(() => {
- onQueryTrigger(value.trim());
- }, membersSearchDebounceMs);
- },
- {
- signal: controller.signal,
- },
- );
-
- return () => {
- controller.abort();
- };
- }, [value, onQueryTrigger]);
+ debounceTimer.current = setTimeout(() => {
+ onQueryTrigger(value.trim());
+ }, membersSearchDebounceMs);
+ }
// If search is not performed on a initial page, resets pagination offset
// based on the response count
@@ -98,6 +82,7 @@ export const MembersSearch = ({ query, value, memberships, onSearchChange, onQue
{
const canReadMemberships = useProtect({ permission: 'org:sys_memberships:read' });
const isDomainsEnabled = organizationSettings?.domains?.enabled && canManageMemberships;
- const [query, setQuery] = useState();
+ const [query, setQuery] = useState('');
const [search, setSearch] = useState('');
const { membershipRequests, memberships, invitations } = useOrganization({
From f2f0a4fdcf5eceeb96a124f98ee0b707cfe5d06b Mon Sep 17 00:00:00 2001
From: Laura Beatris <48022589+LauraBeatris@users.noreply.github.com>
Date: Wed, 22 Jan 2025 14:45:53 -0300
Subject: [PATCH 17/21] Check for list length
---
packages/clerk-js/src/ui/common/NotificationCountBadge.tsx | 6 +++---
.../ui/components/OrganizationProfile/ActiveMembersList.tsx | 2 +-
.../src/ui/components/OrganizationProfile/MembersSearch.tsx | 2 +-
3 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/packages/clerk-js/src/ui/common/NotificationCountBadge.tsx b/packages/clerk-js/src/ui/common/NotificationCountBadge.tsx
index 456eb4aafbf..4efddafca1c 100644
--- a/packages/clerk-js/src/ui/common/NotificationCountBadge.tsx
+++ b/packages/clerk-js/src/ui/common/NotificationCountBadge.tsx
@@ -19,9 +19,9 @@ export const NotificationCountBadge = (props: NotificationCountBadgeProps) => {
const enterExitAnimation: ThemableCssProp = t => ({
animation:
- !shouldAnimate || prefersReducedMotion
- ? 'none'
- : `${animations.notificationAnimation} ${t.transitionDuration.$textField} ${t.transitionTiming.$slowBezier} 0s 1 normal forwards`,
+ shouldAnimate && !prefersReducedMotion
+ ? `${animations.notificationAnimation} ${t.transitionDuration.$textField} ${t.transitionTiming.$slowBezier} 0s 1 normal forwards`
+ : 'none',
});
return (
diff --git a/packages/clerk-js/src/ui/components/OrganizationProfile/ActiveMembersList.tsx b/packages/clerk-js/src/ui/components/OrganizationProfile/ActiveMembersList.tsx
index 48c7eaffebb..d324fe19320 100644
--- a/packages/clerk-js/src/ui/components/OrganizationProfile/ActiveMembersList.tsx
+++ b/packages/clerk-js/src/ui/components/OrganizationProfile/ActiveMembersList.tsx
@@ -43,7 +43,7 @@ export const ActiveMembersList = ({ memberships, pageSize }: ActiveMembersListPr
itemCount={memberships?.count || 0}
pageCount={memberships?.pageCount || 0}
itemsPerPage={pageSize}
- isLoading={(memberships?.isLoading && !memberships?.data) || loadingRoles}
+ isLoading={(memberships?.isLoading && !memberships?.data.length) || loadingRoles}
emptyStateLocalizationKey={localizationKeys('organizationProfile.membersPage.detailsTitle__emptyRow')}
headers={[
localizationKeys('organizationProfile.membersPage.activeMembersTab.tableHeader__user'),
diff --git a/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx b/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
index 0b8d0e33ff3..45dec222b2c 100644
--- a/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
+++ b/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
@@ -82,13 +82,13 @@ export const MembersSearch = ({ query, value, memberships, onSearchChange, onQue
: }
+ onKeyUp={handleKeyUp}
onChange={handleChange}
containerSx={{ width: '100%' }}
/>
From 213b0c683a97a51d41e29035544ee83a60523d6c Mon Sep 17 00:00:00 2001
From: Laura Beatris <48022589+LauraBeatris@users.noreply.github.com>
Date: Wed, 22 Jan 2025 16:30:34 -0300
Subject: [PATCH 18/21] Remove unused ref
---
.../src/ui/components/OrganizationProfile/MembersSearch.tsx | 2 --
1 file changed, 2 deletions(-)
diff --git a/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx b/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
index 45dec222b2c..bcafe9311b8 100644
--- a/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
+++ b/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
@@ -36,7 +36,6 @@ const membersSearchDebounceMs = 500;
export const MembersSearch = ({ query, value, memberships, onSearchChange, onQueryTrigger }: MembersSearchProps) => {
const { t } = useLocalizations();
- const inputRef = useRef(null);
const debounceTimer = useRef | null>(null);
const handleChange = (event: React.ChangeEvent) => {
@@ -81,7 +80,6 @@ export const MembersSearch = ({ query, value, memberships, onSearchChange, onQue
Date: Wed, 22 Jan 2025 17:59:05 -0300
Subject: [PATCH 19/21] Adjust input styles
---
packages/clerk-js/src/ui/elements/InputWithIcon.tsx | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/packages/clerk-js/src/ui/elements/InputWithIcon.tsx b/packages/clerk-js/src/ui/elements/InputWithIcon.tsx
index f85c591dc31..3061ccd83ea 100644
--- a/packages/clerk-js/src/ui/elements/InputWithIcon.tsx
+++ b/packages/clerk-js/src/ui/elements/InputWithIcon.tsx
@@ -18,9 +18,10 @@ export const InputWithIcon = React.forwardRef((
position: 'relative',
'& .cl-internal-icon': {
position: 'absolute',
- left: theme.space.$4,
+ left: theme.space.$3x5,
width: theme.sizes.$3x5,
height: theme.sizes.$3x5,
+ pointerEvents: 'none',
},
},
containerSx,
From 42143904480b88b927903c5daa4fa90cf1c9e87f Mon Sep 17 00:00:00 2001
From: Laura Beatris <48022589+LauraBeatris@users.noreply.github.com>
Date: Thu, 23 Jan 2025 09:45:39 -0300
Subject: [PATCH 20/21] Improve size styling for `InputWithIcon` icon
---
.../OrganizationProfile/MembersSearch.tsx | 3 +-
.../src/ui/elements/InputWithIcon.tsx | 51 +++++++++++--------
2 files changed, 31 insertions(+), 23 deletions(-)
diff --git a/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx b/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
index bcafe9311b8..a71f11de869 100644
--- a/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
+++ b/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
@@ -85,10 +85,9 @@ export const MembersSearch = ({ query, value, memberships, onSearchChange, onQue
spellCheck={false}
aria-label='Search'
placeholder={t(localizationKeys('organizationProfile.membersPage.action__search'))}
- leftIcon={isFetchingNewData ? : }
+ leftIcon={isFetchingNewData ? : }
onKeyUp={handleKeyUp}
onChange={handleChange}
- containerSx={{ width: '100%' }}
/>
diff --git a/packages/clerk-js/src/ui/elements/InputWithIcon.tsx b/packages/clerk-js/src/ui/elements/InputWithIcon.tsx
index 3061ccd83ea..81242c2b78d 100644
--- a/packages/clerk-js/src/ui/elements/InputWithIcon.tsx
+++ b/packages/clerk-js/src/ui/elements/InputWithIcon.tsx
@@ -1,33 +1,42 @@
import React from 'react';
-import { Flex, Input } from '../customizables';
-import type { PropsOfComponent, ThemableCssProp } from '../styledSystem';
+import { Box, Flex, Input } from '../customizables';
+import type { PropsOfComponent } from '../styledSystem';
-type InputWithIcon = PropsOfComponent & { leftIcon?: React.ReactElement } & {
- containerSx?: ThemableCssProp;
-};
+type InputWithIcon = PropsOfComponent & { leftIcon?: React.ReactElement };
export const InputWithIcon = React.forwardRef((props, ref) => {
- const { leftIcon, sx, containerSx, ...rest } = props;
+ const { leftIcon, sx, ...rest } = props;
return (
[
- {
- width: '100%',
- position: 'relative',
- '& .cl-internal-icon': {
- position: 'absolute',
- left: theme.space.$3x5,
- width: theme.sizes.$3x5,
- height: theme.sizes.$3x5,
- pointerEvents: 'none',
- },
- },
- containerSx,
- ]}
+ sx={{
+ width: '100%',
+ position: 'relative',
+ }}
>
- {leftIcon && React.cloneElement(leftIcon, { className: 'cl-internal-icon' })}
+ {leftIcon ? (
+ [
+ {
+ position: 'absolute',
+ left: theme.space.$3x5,
+ width: theme.sizes.$3x5,
+ height: theme.sizes.$3x5,
+ pointerEvents: 'none',
+ display: 'grid',
+ placeContent: 'center',
+ '& svg': {
+ position: 'absolute',
+ width: '100%',
+ height: '100%',
+ },
+ },
+ ]}
+ >
+ {leftIcon}
+
+ ) : null}
Date: Thu, 23 Jan 2025 16:28:37 -0300
Subject: [PATCH 21/21] Add UI descriptors for input and icon
---
.../OrganizationProfile/MembersSearch.tsx | 14 ++++++++++++--
.../src/ui/customizables/elementDescriptors.ts | 3 +++
packages/types/src/appearance.ts | 3 +++
3 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx b/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
index a71f11de869..cbbcbca5dd6 100644
--- a/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
+++ b/packages/clerk-js/src/ui/components/OrganizationProfile/MembersSearch.tsx
@@ -2,7 +2,7 @@ import type { useOrganization } from '@clerk/shared/react';
import type { GetMembersParams } from '@clerk/types';
import { useEffect, useRef } from 'react';
-import { Flex, localizationKeys, useLocalizations } from '../../../ui/customizables';
+import { descriptors, Flex, Icon, localizationKeys, useLocalizations } from '../../../ui/customizables';
import { Animated, InputWithIcon } from '../../../ui/elements';
import { MagnifyingGlass } from '../../../ui/icons';
import { Spinner } from '../../../ui/primitives';
@@ -85,9 +85,19 @@ export const MembersSearch = ({ query, value, memberships, onSearchChange, onQue
spellCheck={false}
aria-label='Search'
placeholder={t(localizationKeys('organizationProfile.membersPage.action__search'))}
- leftIcon={isFetchingNewData ? : }
+ leftIcon={
+ isFetchingNewData ? (
+
+ ) : (
+
+ )
+ }
onKeyUp={handleKeyUp}
onChange={handleChange}
+ elementDescriptor={descriptors.organizationProfileMembersSearchInput}
/>
diff --git a/packages/clerk-js/src/ui/customizables/elementDescriptors.ts b/packages/clerk-js/src/ui/customizables/elementDescriptors.ts
index 0ed6053b6dd..3e0101c9e37 100644
--- a/packages/clerk-js/src/ui/customizables/elementDescriptors.ts
+++ b/packages/clerk-js/src/ui/customizables/elementDescriptors.ts
@@ -155,6 +155,9 @@ export const APPEARANCE_KEYS = containsAllElementsConfigKeys([
'organizationSwitcherPopoverActionButtonIcon',
'organizationSwitcherPopoverFooter',
+ 'organizationProfileMembersSearchInputIcon',
+ 'organizationProfileMembersSearchInput',
+
'organizationListPreviewItems',
'organizationListPreviewItem',
'organizationListPreviewButton',
diff --git a/packages/types/src/appearance.ts b/packages/types/src/appearance.ts
index cb211dbe5ba..74b53ff1b28 100644
--- a/packages/types/src/appearance.ts
+++ b/packages/types/src/appearance.ts
@@ -277,6 +277,9 @@ export type ElementsConfig = {
organizationSwitcherPopoverActionButtonIcon: WithOptions<'manageOrganization' | 'createOrganization'>;
organizationSwitcherPopoverFooter: WithOptions;
+ organizationProfileMembersSearchInputIcon: WithOptions;
+ organizationProfileMembersSearchInput: WithOptions;
+
organizationListPreviewItems: WithOptions;
organizationListPreviewItem: WithOptions;
organizationListPreviewButton: WithOptions;