setCurrentFlow('create')} />;
+});
+
+export const TaskChooseOrganization = withCoreSessionSwitchGuard(
+ withTaskGuard(withCardStateProvider(TaskChooseOrganizationInternal)),
+);
diff --git a/packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskSelectOrganization.tsx b/packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskSelectOrganization.tsx
deleted file mode 100644
index cf2671d434f..00000000000
--- a/packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskSelectOrganization.tsx
+++ /dev/null
@@ -1,26 +0,0 @@
-import { OrganizationListContext, withCoreSessionSwitchGuard } from '@/ui/contexts';
-import { useTaskSelectOrganizationContext } from '@/ui/contexts/components/SessionTasks';
-import { withCardStateProvider } from '@/ui/elements/contexts';
-
-import { OrganizationList } from '../../OrganizationList';
-import { withTaskGuard } from './withTaskGuard';
-
-const TaskSelectOrganizationInternal = () => {
- const ctx = useTaskSelectOrganizationContext();
-
- return (
-
-
-
- );
-};
-
-export const TaskSelectOrganization = withCoreSessionSwitchGuard(
- withTaskGuard(withCardStateProvider(TaskSelectOrganizationInternal)),
-);
diff --git a/packages/clerk-js/src/ui/components/SessionTasks/tasks/withTaskGuard.ts b/packages/clerk-js/src/ui/components/SessionTasks/tasks/withTaskGuard.ts
index 36d07e86fb2..2fb26a8c3b5 100644
--- a/packages/clerk-js/src/ui/components/SessionTasks/tasks/withTaskGuard.ts
+++ b/packages/clerk-js/src/ui/components/SessionTasks/tasks/withTaskGuard.ts
@@ -2,7 +2,7 @@ import type { ComponentType } from 'react';
import { warnings } from '@/core/warnings';
import { withRedirect } from '@/ui/common';
-import { useTaskSelectOrganizationContext } from '@/ui/contexts/components/SessionTasks';
+import { useSessionTasksContext } from '@/ui/contexts/components/SessionTasks';
import type { AvailableComponentProps } from '@/ui/types';
export const withTaskGuard = (Component: ComponentType
) => {
@@ -10,11 +10,12 @@ export const withTaskGuard =
(Component: Comp
Component.displayName = displayName;
const HOC = (props: P) => {
- const ctx = useTaskSelectOrganizationContext();
+ const ctx = useSessionTasksContext();
return withRedirect(
Component,
clerk => !clerk.session?.currentTask,
- ({ clerk }) => ctx.redirectUrlComplete || clerk.buildAfterSignInUrl(),
+ ({ clerk }) =>
+ !clerk.session ? clerk.buildSignInUrl() : (ctx.redirectUrlComplete ?? clerk.buildAfterSignInUrl()),
warnings.cannotRenderComponentWhenTaskDoesNotExist,
)(props);
};
diff --git a/packages/clerk-js/src/ui/contexts/ClerkUIComponentsContext.tsx b/packages/clerk-js/src/ui/contexts/ClerkUIComponentsContext.tsx
index 29b39e6a84b..f2088ce71bb 100644
--- a/packages/clerk-js/src/ui/contexts/ClerkUIComponentsContext.tsx
+++ b/packages/clerk-js/src/ui/contexts/ClerkUIComponentsContext.tsx
@@ -2,7 +2,7 @@ import type {
__internal_OAuthConsentProps,
APIKeysProps,
PricingTableProps,
- TaskSelectOrganizationProps,
+ TaskChooseOrganizationProps,
UserButtonProps,
WaitlistProps,
} from '@clerk/types';
@@ -26,7 +26,7 @@ import {
UserVerificationContext,
WaitlistContext,
} from './components';
-import { SessionTasksContext, TaskSelectOrganizationContext } from './components/SessionTasks';
+import { SessionTasksContext, TaskChooseOrganizationContext } from './components/SessionTasks';
export function ComponentContextProvider({
componentName,
@@ -110,15 +110,15 @@ export function ComponentContextProvider({
{children}
);
- case 'TaskSelectOrganization':
+ case 'TaskChooseOrganization':
return (
-
-
+
{children}
-
+
);
default:
throw new Error(`Unknown component context: ${componentName}`);
diff --git a/packages/clerk-js/src/ui/contexts/components/SessionTasks.ts b/packages/clerk-js/src/ui/contexts/components/SessionTasks.ts
index 73008bab797..e7f15757943 100644
--- a/packages/clerk-js/src/ui/contexts/components/SessionTasks.ts
+++ b/packages/clerk-js/src/ui/contexts/components/SessionTasks.ts
@@ -1,6 +1,6 @@
import { createContext, useContext } from 'react';
-import type { SessionTasksCtx, TaskSelectOrganizationCtx } from '../../types';
+import type { SessionTasksCtx, TaskChooseOrganizationCtx } from '../../types';
export const SessionTasksContext = createContext(null);
@@ -14,14 +14,14 @@ export const useSessionTasksContext = (): SessionTasksCtx => {
return context;
};
-export const TaskSelectOrganizationContext = createContext(null);
+export const TaskChooseOrganizationContext = createContext(null);
-export const useTaskSelectOrganizationContext = (): TaskSelectOrganizationCtx => {
- const context = useContext(TaskSelectOrganizationContext);
+export const useTaskChooseOrganizationContext = (): TaskChooseOrganizationCtx => {
+ const context = useContext(TaskChooseOrganizationContext);
if (context === null) {
throw new Error(
- 'Clerk: useTaskSelectOrganizationContext called outside of the mounted TaskSelectOrganization component.',
+ 'Clerk: useTaskChooseOrganizationContext called outside of the mounted TaskChooseOrganization component.',
);
}
diff --git a/packages/clerk-js/src/ui/customizables/elementDescriptors.ts b/packages/clerk-js/src/ui/customizables/elementDescriptors.ts
index cd7ffe647ae..5097f6ffaef 100644
--- a/packages/clerk-js/src/ui/customizables/elementDescriptors.ts
+++ b/packages/clerk-js/src/ui/customizables/elementDescriptors.ts
@@ -212,6 +212,11 @@ export const APPEARANCE_KEYS = containsAllElementsConfigKeys([
'organizationListPreviewItemActionButton',
'organizationListCreateOrganizationActionButton',
+ 'taskChooseOrganizationPreviewItem',
+ 'taskChooseOrganizationPreviewItems',
+ 'taskChooseOrganizationCreateOrganizationActionButton',
+ 'taskChooseOrganizationPreviewButton',
+
'userPreview',
'userPreviewAvatarContainer',
'userPreviewAvatarBox',
diff --git a/packages/clerk-js/src/ui/elements/contexts/index.tsx b/packages/clerk-js/src/ui/elements/contexts/index.tsx
index ea1ed35f8e2..5d43d9f63ff 100644
--- a/packages/clerk-js/src/ui/elements/contexts/index.tsx
+++ b/packages/clerk-js/src/ui/elements/contexts/index.tsx
@@ -100,7 +100,7 @@ export type FlowMetadata = {
| 'apiKeys'
| 'oauthConsent'
| 'subscriptionDetails'
- | 'taskSelectOrganization';
+ | 'taskChooseOrganization';
part?:
| 'start'
| 'emailCode'
diff --git a/packages/clerk-js/src/ui/hooks/useOrganizationListInView.ts b/packages/clerk-js/src/ui/hooks/useOrganizationListInView.ts
new file mode 100644
index 00000000000..6f3bd7f36d9
--- /dev/null
+++ b/packages/clerk-js/src/ui/hooks/useOrganizationListInView.ts
@@ -0,0 +1,34 @@
+import { useOrganizationList } from '@clerk/shared/react/index';
+
+import { organizationListParams } from '../components/OrganizationSwitcher/utils';
+import { useInView } from './useInView';
+
+/**
+ * @internal
+ */
+export const useOrganizationListInView = () => {
+ const { userMemberships, userInvitations, userSuggestions } = useOrganizationList(organizationListParams);
+
+ const { ref } = useInView({
+ threshold: 0,
+ onChange: inView => {
+ if (!inView) {
+ return;
+ }
+ if (userMemberships.hasNextPage) {
+ userMemberships.fetchNext?.();
+ } else if (userInvitations.hasNextPage) {
+ userInvitations.fetchNext?.();
+ } else {
+ userSuggestions.fetchNext?.();
+ }
+ },
+ });
+
+ return {
+ userMemberships,
+ userInvitations,
+ userSuggestions,
+ ref,
+ };
+};
diff --git a/packages/clerk-js/src/ui/lazyModules/components.ts b/packages/clerk-js/src/ui/lazyModules/components.ts
index a4072adf412..70c65670e8b 100644
--- a/packages/clerk-js/src/ui/lazyModules/components.ts
+++ b/packages/clerk-js/src/ui/lazyModules/components.ts
@@ -20,8 +20,8 @@ const componentImportPaths = {
PricingTable: () => import(/* webpackChunkName: "pricingTable" */ '../components/PricingTable'),
Checkout: () => import(/* webpackChunkName: "checkout" */ '../components/Checkout'),
SessionTasks: () => import(/* webpackChunkName: "sessionTasks" */ '../components/SessionTasks'),
- TaskSelectOrganization: () =>
- import(/* webpackChunkName: "taskSelectOrganization" */ '../components/SessionTasks/tasks/TaskSelectOrganization'),
+ TaskChooseOrganization: () =>
+ import(/* webpackChunkName: "taskChooseOrganization" */ '../components/SessionTasks/tasks/TaskChooseOrganization'),
PlanDetails: () => import(/* webpackChunkName: "planDetails" */ '../components/Plans/PlanDetails'),
SubscriptionDetails: () => import(/* webpackChunkName: "subscriptionDetails" */ '../components/SubscriptionDetails'),
APIKeys: () => import(/* webpackChunkName: "apiKeys" */ '../components/ApiKeys/ApiKeys'),
@@ -105,8 +105,8 @@ export const APIKeys = lazy(() => componentImportPaths.APIKeys().then(module =>
export const Checkout = lazy(() => componentImportPaths.Checkout().then(module => ({ default: module.Checkout })));
-export const TaskSelectOrganization = lazy(() =>
- componentImportPaths.TaskSelectOrganization().then(module => ({ default: module.TaskSelectOrganization })),
+export const TaskChooseOrganization = lazy(() =>
+ componentImportPaths.TaskChooseOrganization().then(module => ({ default: module.TaskChooseOrganization })),
);
export const PlanDetails = lazy(() =>
@@ -155,7 +155,7 @@ export const ClerkComponents = {
APIKeys,
OAuthConsent,
SubscriptionDetails,
- TaskSelectOrganization,
+ TaskChooseOrganization,
};
export type ClerkComponentName = keyof typeof ClerkComponents;
diff --git a/packages/clerk-js/src/ui/types.ts b/packages/clerk-js/src/ui/types.ts
index c3f4454ffd7..c9b9f04260c 100644
--- a/packages/clerk-js/src/ui/types.ts
+++ b/packages/clerk-js/src/ui/types.ts
@@ -18,7 +18,7 @@ import type {
SignUpFallbackRedirectUrl,
SignUpForceRedirectUrl,
SignUpProps,
- TaskSelectOrganizationProps,
+ TaskChooseOrganizationProps,
UserButtonProps,
UserProfileProps,
WaitlistProps,
@@ -55,7 +55,7 @@ export type AvailableComponentProps =
| __internal_SubscriptionDetailsProps
| __internal_PlanDetailsProps
| APIKeysProps
- | TaskSelectOrganizationProps;
+ | TaskChooseOrganizationProps;
type ComponentMode = 'modal' | 'mounted';
type SignInMode = 'modal' | 'redirect';
@@ -138,8 +138,8 @@ export type SessionTasksCtx = {
currentTaskContainer?: React.RefObject | null;
};
-export type TaskSelectOrganizationCtx = TaskSelectOrganizationProps & {
- componentName: 'TaskSelectOrganization';
+export type TaskChooseOrganizationCtx = TaskChooseOrganizationProps & {
+ componentName: 'TaskChooseOrganization';
};
export type OAuthConsentCtx = __internal_OAuthConsentProps & {
@@ -172,5 +172,5 @@ export type AvailableComponentCtx =
| OAuthConsentCtx
| SubscriptionDetailsCtx
| PlanDetailsCtx
- | TaskSelectOrganizationCtx;
+ | TaskChooseOrganizationCtx;
export type AvailableComponentName = AvailableComponentCtx['componentName'];
diff --git a/packages/clerk-js/src/ui/utils/test/fixtureHelpers.ts b/packages/clerk-js/src/ui/utils/test/fixtureHelpers.ts
index 8945539d441..97020140de2 100644
--- a/packages/clerk-js/src/ui/utils/test/fixtureHelpers.ts
+++ b/packages/clerk-js/src/ui/utils/test/fixtureHelpers.ts
@@ -10,6 +10,7 @@ import type {
PublicUserDataJSON,
SamlAccountJSON,
SessionJSON,
+ SessionTask,
SignInJSON,
SignUpJSON,
UserJSON,
@@ -49,6 +50,7 @@ const createUserFixtureHelpers = (baseClient: ClientJSON) => {
external_accounts?: Array>;
saml_accounts?: Array>;
organization_memberships?: Array;
+ tasks?: SessionTask[];
};
const createPublicUserData = (params: WithUserParams) => {
@@ -87,6 +89,7 @@ const createUserFixtureHelpers = (baseClient: ClientJSON) => {
last_active_token: {
jwt: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NzU4NzY3OTAsImRhdGEiOiJmb29iYXIiLCJpYXQiOjE2NzU4NzY3MzB9.Z1BC47lImYvaAtluJlY-kBo0qOoAk42Xb-gNrB2SxJg',
},
+ tasks: params.tasks,
} as SessionJSON;
baseClient.sessions.push(session);
};
diff --git a/packages/localizations/src/en-US.ts b/packages/localizations/src/en-US.ts
index 4f216d3a58e..2aa62f8f70a 100644
--- a/packages/localizations/src/en-US.ts
+++ b/packages/localizations/src/en-US.ts
@@ -2,6 +2,26 @@ import type { LocalizationResource } from '@clerk/types';
export const enUS: LocalizationResource = {
locale: 'en-US',
+ taskChooseOrganization: {
+ signOut: {
+ actionLink: 'Sign out',
+ actionText: 'Signed in as {{identifier}}',
+ },
+ createOrganization: {
+ title: 'Setup your account',
+ subtitle: 'Tell us a bit about your organization',
+ formButtonSubmit: 'Create new organization',
+ formButtonReset: 'Cancel',
+ },
+ chooseOrganization: {
+ title: 'Choose an organization',
+ subtitle: 'Join an existing organization or create a new one',
+ suggestionsAcceptedLabel: 'Pending approval',
+ action__createOrganization: 'Create new organization',
+ action__suggestionsAccept: 'Request to join',
+ action__invitationAccept: 'Join',
+ },
+ },
apiKeys: {
action__add: 'Add new key',
action__search: 'Search keys',
diff --git a/packages/nextjs/src/client-boundary/uiComponents.tsx b/packages/nextjs/src/client-boundary/uiComponents.tsx
index 50e0365c316..446d428365b 100644
--- a/packages/nextjs/src/client-boundary/uiComponents.tsx
+++ b/packages/nextjs/src/client-boundary/uiComponents.tsx
@@ -22,7 +22,7 @@ export {
SignInWithMetamaskButton,
SignOutButton,
SignUpButton,
- TaskSelectOrganization,
+ TaskChooseOrganization,
UserButton,
Waitlist,
} from '@clerk/clerk-react';
diff --git a/packages/nextjs/src/index.ts b/packages/nextjs/src/index.ts
index 7eef4f48361..6832c05396f 100644
--- a/packages/nextjs/src/index.ts
+++ b/packages/nextjs/src/index.ts
@@ -34,7 +34,7 @@ export {
SignOutButton,
SignUp,
SignUpButton,
- TaskSelectOrganization,
+ TaskChooseOrganization,
UserButton,
UserProfile,
Waitlist,
diff --git a/packages/react-router/src/__tests__/__snapshots__/exports.test.ts.snap b/packages/react-router/src/__tests__/__snapshots__/exports.test.ts.snap
index 90de3c5f7ec..1b5cbd2560e 100644
--- a/packages/react-router/src/__tests__/__snapshots__/exports.test.ts.snap
+++ b/packages/react-router/src/__tests__/__snapshots__/exports.test.ts.snap
@@ -30,7 +30,7 @@ exports[`root public exports > should not change unexpectedly 1`] = `
"SignUpButton",
"SignedIn",
"SignedOut",
- "TaskSelectOrganization",
+ "TaskChooseOrganization",
"UserButton",
"UserProfile",
"Waitlist",
diff --git a/packages/react/src/components/index.ts b/packages/react/src/components/index.ts
index c935651a3ec..b39014d0e01 100644
--- a/packages/react/src/components/index.ts
+++ b/packages/react/src/components/index.ts
@@ -8,7 +8,7 @@ export {
PricingTable,
SignIn,
SignUp,
- TaskSelectOrganization,
+ TaskChooseOrganization,
UserButton,
UserProfile,
Waitlist,
diff --git a/packages/react/src/components/uiComponents.tsx b/packages/react/src/components/uiComponents.tsx
index d3b6242b7de..18623690ad1 100644
--- a/packages/react/src/components/uiComponents.tsx
+++ b/packages/react/src/components/uiComponents.tsx
@@ -9,7 +9,7 @@ import type {
PricingTableProps,
SignInProps,
SignUpProps,
- TaskSelectOrganizationProps,
+ TaskChooseOrganizationProps,
UserButtonProps,
UserProfileProps,
WaitlistProps,
@@ -635,8 +635,8 @@ export const APIKeys = withClerk(
{ component: 'ApiKeys', renderWhileLoading: true },
);
-export const TaskSelectOrganization = withClerk(
- ({ clerk, component, fallback, ...props }: WithClerkProp) => {
+export const TaskChooseOrganization = withClerk(
+ ({ clerk, component, fallback, ...props }: WithClerkProp) => {
const mountingStatus = useWaitForComponentMount(component);
const shouldShowFallback = mountingStatus === 'rendering' || !clerk.loaded;
@@ -650,8 +650,8 @@ export const TaskSelectOrganization = withClerk(
{clerk.loaded && (
);
},
- { component: 'TaskSelectOrganization', renderWhileLoading: true },
+ { component: 'TaskChooseOrganization', renderWhileLoading: true },
);
diff --git a/packages/react/src/isomorphicClerk.ts b/packages/react/src/isomorphicClerk.ts
index 8e7deb0ce02..91b52d821a6 100644
--- a/packages/react/src/isomorphicClerk.ts
+++ b/packages/react/src/isomorphicClerk.ts
@@ -44,7 +44,7 @@ import type {
SignUpProps,
SignUpRedirectOptions,
SignUpResource,
- TaskSelectOrganizationProps,
+ TaskChooseOrganizationProps,
UnsubscribeCallback,
UserButtonProps,
UserProfileProps,
@@ -142,7 +142,7 @@ export class IsomorphicClerk implements IsomorphicLoadedClerk {
private premountPricingTableNodes = new Map();
private premountApiKeysNodes = new Map();
private premountOAuthConsentNodes = new Map();
- private premountTaskSelectOrganizationNodes = new Map();
+ private premountTaskChooseOrganizationNodes = new Map();
// A separate Map of `addListener` method calls to handle multiple listeners.
private premountAddListenerCalls = new Map<
ListenerCallback,
@@ -633,8 +633,8 @@ export class IsomorphicClerk implements IsomorphicLoadedClerk {
clerkjs.__internal_mountOAuthConsent(node, props);
});
- this.premountTaskSelectOrganizationNodes.forEach((props, node) => {
- clerkjs.mountTaskSelectOrganization(node, props);
+ this.premountTaskChooseOrganizationNodes.forEach((props, node) => {
+ clerkjs.mountTaskChooseOrganization(node, props);
});
/**
@@ -1134,19 +1134,19 @@ export class IsomorphicClerk implements IsomorphicLoadedClerk {
}
};
- mountTaskSelectOrganization = (node: HTMLDivElement, props?: TaskSelectOrganizationProps): void => {
+ mountTaskChooseOrganization = (node: HTMLDivElement, props?: TaskChooseOrganizationProps): void => {
if (this.clerkjs && this.loaded) {
- this.clerkjs.mountTaskSelectOrganization(node, props);
+ this.clerkjs.mountTaskChooseOrganization(node, props);
} else {
- this.premountTaskSelectOrganizationNodes.set(node, props);
+ this.premountTaskChooseOrganizationNodes.set(node, props);
}
};
- unmountTaskSelectOrganization = (node: HTMLDivElement): void => {
+ unmountTaskChooseOrganization = (node: HTMLDivElement): void => {
if (this.clerkjs && this.loaded) {
- this.clerkjs.unmountTaskSelectOrganization(node);
+ this.clerkjs.unmountTaskChooseOrganization(node);
} else {
- this.premountTaskSelectOrganizationNodes.delete(node);
+ this.premountTaskChooseOrganizationNodes.delete(node);
}
};
diff --git a/packages/remix/src/__tests__/__snapshots__/exports.test.ts.snap b/packages/remix/src/__tests__/__snapshots__/exports.test.ts.snap
index 677ce5a5906..31f9180538f 100644
--- a/packages/remix/src/__tests__/__snapshots__/exports.test.ts.snap
+++ b/packages/remix/src/__tests__/__snapshots__/exports.test.ts.snap
@@ -31,7 +31,7 @@ exports[`root public exports > should not change unexpectedly 1`] = `
"SignUpButton",
"SignedIn",
"SignedOut",
- "TaskSelectOrganization",
+ "TaskChooseOrganization",
"UserButton",
"UserProfile",
"Waitlist",
diff --git a/packages/tanstack-react-start/src/__tests__/__snapshots__/exports.test.ts.snap b/packages/tanstack-react-start/src/__tests__/__snapshots__/exports.test.ts.snap
index 969b5793f21..201ef59fb7a 100644
--- a/packages/tanstack-react-start/src/__tests__/__snapshots__/exports.test.ts.snap
+++ b/packages/tanstack-react-start/src/__tests__/__snapshots__/exports.test.ts.snap
@@ -42,7 +42,7 @@ exports[`root public exports > should not change unexpectedly 1`] = `
"SignUpButton",
"SignedIn",
"SignedOut",
- "TaskSelectOrganization",
+ "TaskChooseOrganization",
"UserButton",
"UserProfile",
"Waitlist",
diff --git a/packages/testing/src/playwright/unstable/page-objects/sessionTask.ts b/packages/testing/src/playwright/unstable/page-objects/sessionTask.ts
index 6295e6ffbd5..d6d32d6fcdf 100644
--- a/packages/testing/src/playwright/unstable/page-objects/sessionTask.ts
+++ b/packages/testing/src/playwright/unstable/page-objects/sessionTask.ts
@@ -9,7 +9,7 @@ export const createSessionTaskComponentPageObject = (testArgs: { page: EnhancedP
const self = {
...common(testArgs),
resolveForceOrganizationSelectionTask: async (fakeOrganization: { name: string; slug: string }) => {
- const createOrganizationButton = page.getByRole('button', { name: /create organization/i });
+ const createOrganizationButton = page.getByRole('button', { name: /create new organization/i });
await expect(createOrganizationButton).toBeVisible();
diff --git a/packages/types/src/appearance.ts b/packages/types/src/appearance.ts
index e04f74b2598..f0da6c26fc5 100644
--- a/packages/types/src/appearance.ts
+++ b/packages/types/src/appearance.ts
@@ -351,6 +351,11 @@ export type ElementsConfig = {
organizationListPreviewItemActionButton: WithOptions;
organizationListCreateOrganizationActionButton: WithOptions;
+ taskChooseOrganizationPreviewItem: WithOptions;
+ taskChooseOrganizationPreviewItems: WithOptions;
+ taskChooseOrganizationCreateOrganizationActionButton: WithOptions;
+ taskChooseOrganizationPreviewButton: WithOptions;
+
// TODO: Test this idea. Instead of userButtonUserPreview, have a userPreview__userButton instead
// Same for other repeated selectors, eg avatar
userPreview: WithOptions;
@@ -972,7 +977,7 @@ export type PlanDetailTheme = Theme;
export type SubscriptionDetailsTheme = Theme;
export type APIKeysTheme = Theme;
export type OAuthConsentTheme = Theme;
-export type TaskSelectOrganizationTheme = Theme;
+export type TaskChooseOrganizationTheme = Theme;
type GlobalAppearanceOptions = {
/**
@@ -1046,7 +1051,7 @@ export type Appearance = T &
*/
__internal_oauthConsent?: T;
/**
- * Theme overrides that only apply to the `` component
+ * Theme overrides that only apply to the `` component
*/
- taskSelectOrganization?: T;
+ taskChooseOrganization?: T;
};
diff --git a/packages/types/src/clerk.ts b/packages/types/src/clerk.ts
index 6ea1c7c6c42..7443707dec6 100644
--- a/packages/types/src/clerk.ts
+++ b/packages/types/src/clerk.ts
@@ -14,7 +14,7 @@ import type {
SignInTheme,
SignUpTheme,
SubscriptionDetailsTheme,
- TaskSelectOrganizationTheme,
+ TaskChooseOrganizationTheme,
UserButtonTheme,
UserProfileTheme,
UserVerificationTheme,
@@ -559,19 +559,19 @@ export interface Clerk {
__internal_unmountOAuthConsent: (targetNode: HTMLDivElement) => void;
/**
- * Mounts a TaskSelectOrganization component at the target element.
- * @param targetNode Target node to mount the TaskSelectOrganization component.
+ * Mounts a TaskChooseOrganization component at the target element.
+ * @param targetNode Target node to mount the TaskChooseOrganization component.
* @param props configuration parameters.
*/
- mountTaskSelectOrganization: (targetNode: HTMLDivElement, props?: TaskSelectOrganizationProps) => void;
+ mountTaskChooseOrganization: (targetNode: HTMLDivElement, props?: TaskChooseOrganizationProps) => void;
/**
- * Unmount a TaskSelectOrganization component from the target element.
+ * Unmount a TaskChooseOrganization component from the target element.
* If there is no component mounted at the target node, results in a noop.
*
- * @param targetNode Target node to unmount the TaskSelectOrganization component from.
+ * @param targetNode Target node to unmount the TaskChooseOrganization component from.
*/
- unmountTaskSelectOrganization: (targetNode: HTMLDivElement) => void;
+ unmountTaskChooseOrganization: (targetNode: HTMLDivElement) => void;
/**
* @internal
@@ -2052,12 +2052,12 @@ export type SignUpButtonProps = (SignUpButtonPropsModal | ButtonPropsRedirect) &
| 'oauthFlow'
>;
-export type TaskSelectOrganizationProps = {
+export type TaskChooseOrganizationProps = {
/**
* Full URL or path to navigate to after successfully resolving all tasks
*/
redirectUrlComplete: string;
- appearance?: TaskSelectOrganizationTheme;
+ appearance?: TaskChooseOrganizationTheme;
};
export type CreateOrganizationInvitationParams = {
diff --git a/packages/types/src/elementIds.ts b/packages/types/src/elementIds.ts
index 22284ef91de..bec45d04ff4 100644
--- a/packages/types/src/elementIds.ts
+++ b/packages/types/src/elementIds.ts
@@ -51,9 +51,17 @@ export type OrganizationPreviewId =
| 'organizationSwitcherTrigger'
| 'organizationList'
| 'organizationSwitcherListedOrganization'
- | 'organizationSwitcherActiveOrganization';
+ | 'organizationSwitcherActiveOrganization'
+ | 'taskChooseOrganization';
-export type CardActionId = 'havingTrouble' | 'alternativeMethods' | 'signUp' | 'signIn' | 'usePasskey' | 'waitlist';
+export type CardActionId =
+ | 'havingTrouble'
+ | 'alternativeMethods'
+ | 'signUp'
+ | 'signIn'
+ | 'usePasskey'
+ | 'waitlist'
+ | 'signOut';
export type MenuId = 'invitation' | 'member' | ProfileSectionId;
export type SelectId = 'countryCode' | 'role' | 'paymentSource' | 'apiKeyExpiration';
diff --git a/packages/types/src/localization.ts b/packages/types/src/localization.ts
index d16cc640aa0..c5ef5752cd0 100644
--- a/packages/types/src/localization.ts
+++ b/packages/types/src/localization.ts
@@ -1202,6 +1202,28 @@ export type __internal_LocalizationResource = {
formFieldCaption__expiration__never: LocalizationValue;
formFieldCaption__expiration__expiresOn: LocalizationValue<'date'>;
};
+ taskChooseOrganization: {
+ title: LocalizationValue;
+ subtitle: LocalizationValue;
+ signOut: {
+ actionText: LocalizationValue<'identifier'>;
+ actionLink: LocalizationValue;
+ };
+ createOrganization: {
+ title: LocalizationValue;
+ subtitle: LocalizationValue;
+ formButtonSubmit: LocalizationValue;
+ formButtonReset: LocalizationValue;
+ };
+ chooseOrganization: {
+ title: LocalizationValue;
+ subtitle: LocalizationValue;
+ suggestionsAcceptedLabel: LocalizationValue;
+ action__suggestionsAccept: LocalizationValue;
+ action__createOrganization: LocalizationValue;
+ action__invitationAccept: LocalizationValue;
+ };
+ };
};
type WithParamName = T &