diff --git a/apps/web/app/settings/platform/managed-users/page.tsx b/apps/web/app/settings/platform/managed-users/page.tsx new file mode 100644 index 0000000000..17cb3b45de --- /dev/null +++ b/apps/web/app/settings/platform/managed-users/page.tsx @@ -0,0 +1,14 @@ +import { _generateMetadata } from "app/_utils"; +import { WithLayout } from "app/layoutHOC"; + +import ManagedUsersView from "~/settings/platform/managed-users/managed-users-view"; + +export const generateMetadata = async () => + await _generateMetadata( + (t) => t("platform_members"), + (t) => t("platform_members_description") + ); + +export default WithLayout({ + Page: ManagedUsersView, +}); diff --git a/apps/web/components/settings/platform/dashboard/managed-user-header/index.tsx b/apps/web/components/settings/platform/dashboard/managed-user-header/index.tsx deleted file mode 100644 index 40a7ece0c1..0000000000 --- a/apps/web/components/settings/platform/dashboard/managed-user-header/index.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import type { PlatformOAuthClient } from "@calcom/prisma/client"; - -import { OAuthClientsDropdown } from "@components/settings/platform/dashboard/oauth-client-dropdown"; - -type ManagedUserHeaderProps = { - oauthClients: PlatformOAuthClient[]; - initialClientName: string; - handleChange: (clientId: string, clientName: string) => void; -}; - -export const ManagedUserHeader = ({ - oauthClients, - initialClientName, - handleChange, -}: ManagedUserHeaderProps) => { - return ( -
-
-

- Managed Users -

-

- See all the managed users created by your OAuth client. -

-
- -
- ); -}; diff --git a/apps/web/components/settings/platform/dashboard/managed-user-list/index.tsx b/apps/web/components/settings/platform/dashboard/managed-user-list/index.tsx deleted file mode 100644 index 341e19a073..0000000000 --- a/apps/web/components/settings/platform/dashboard/managed-user-list/index.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import type { PlatformOAuthClient } from "@calcom/prisma/client"; - -import type { ManagedUser } from "@lib/hooks/settings/platform/oauth-clients/useOAuthClients"; - -import { ManagedUserHeader } from "@components/settings/platform/dashboard/managed-user-header"; -import { ManagedUserTable } from "@components/settings/platform/dashboard/managed-user-table"; - -type ManagedUserListProps = { - oauthClients: PlatformOAuthClient[]; - managedUsers?: ManagedUser[]; - initialClientName: string; - initialClientId: string; - isManagedUserLoading: boolean; - handleChange: (clientId: string, clientName: string) => void; -}; - -export const ManagedUserList = ({ - initialClientName, - initialClientId, - oauthClients, - managedUsers, - isManagedUserLoading, - handleChange, -}: ManagedUserListProps) => { - return ( -
- - -
- ); -}; diff --git a/apps/web/components/settings/platform/dashboard/managed-user-table/index.tsx b/apps/web/components/settings/platform/dashboard/managed-user-table/index.tsx deleted file mode 100644 index af32a422e2..0000000000 --- a/apps/web/components/settings/platform/dashboard/managed-user-table/index.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import { EmptyScreen } from "@calcom/ui"; - -import type { ManagedUser } from "@lib/hooks/settings/platform/oauth-clients/useOAuthClients"; - -type ManagedUserTableProps = { - managedUsers?: ManagedUser[]; - isManagedUserLoading: boolean; - initialClientId: string; -}; - -export const ManagedUserTable = ({ - managedUsers, - isManagedUserLoading, - initialClientId, -}: ManagedUserTableProps) => { - const showUsers = !isManagedUserLoading && managedUsers?.length; - - return ( -
- {showUsers ? ( - <> - - - - - - - - {managedUsers.map((user) => { - return ( - - - - - - ); - })} -
IdUsernameEmail
{user.id}{user.username} - {user.email} -
- - ) : ( - - )} -
- ); -}; diff --git a/apps/web/components/settings/platform/dashboard/oauth-client-dropdown/index.tsx b/apps/web/components/settings/platform/dashboard/oauth-client-dropdown/index.tsx deleted file mode 100644 index 17ec4c366a..0000000000 --- a/apps/web/components/settings/platform/dashboard/oauth-client-dropdown/index.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import type { PlatformOAuthClient } from "@calcom/prisma/client"; -import { - Button, - Dropdown, - DropdownMenuTrigger, - DropdownMenuContent, - DropdownMenuItem, - DropdownItem, -} from "@calcom/ui"; - -type OAuthClientsDropdownProps = { - oauthClients: PlatformOAuthClient[]; - initialClientName: string; - handleChange: (clientId: string, clientName: string) => void; -}; - -export const OAuthClientsDropdown = ({ - oauthClients, - initialClientName, - handleChange, -}: OAuthClientsDropdownProps) => { - return ( -
- {Array.isArray(oauthClients) && oauthClients.length > 0 ? ( - - - - - - {oauthClients.map((client) => { - return ( -
- {initialClientName !== client.name ? ( - - handleChange(client.id, client.name)}> - {client.name} - - - ) : ( - <> - )} -
- ); - })} -
-
- ) : null} -
- ); -}; diff --git a/apps/web/modules/settings/platform/managed-users/managed-users-view.tsx b/apps/web/modules/settings/platform/managed-users/managed-users-view.tsx new file mode 100644 index 0000000000..2311267920 --- /dev/null +++ b/apps/web/modules/settings/platform/managed-users/managed-users-view.tsx @@ -0,0 +1,95 @@ +"use client"; + +import { useMemo, useState } from "react"; + +import Shell from "@calcom/features/shell/Shell"; +import { PlatformManagedUsersTable } from "@calcom/features/users/components/UserTable/PlatformManagedUsersTable"; +import { useLocale } from "@calcom/lib/hooks/useLocale"; +import { Select, Skeleton, SkeletonContainer, SkeletonText, Label } from "@calcom/ui"; + +import { useOAuthClients } from "@lib/hooks/settings/platform/oauth-clients/useOAuthClients"; + +type OAuthClientOption = { label: string; value: string }; + +const ManagedUsersView = () => { + const { t } = useLocale(); + const { data: OAuthClientsQueryData, error, isLoading: isOAuthClientLoading } = useOAuthClients(); + + const oAuthClientOptions: OAuthClientOption[] = useMemo( + () => + OAuthClientsQueryData.map((client) => ({ + label: client.name, + value: client.id, + })), + [OAuthClientsQueryData] + ); + + const [oAuthClient, setOAuthClient] = useState(oAuthClientOptions[0] || null); + + const ManagedUsersSkeletonLoader = () => { + return ( +
+
+
+ +
+ + +
+
+ +
+
+ + + +
+ +
+ +
+
+
+
+ ); + }; + + if (isOAuthClientLoading) { + return ; + } + + if (error) { + return
{t("Failed to load OAuth clients.")}
; + } + + if (!OAuthClientsQueryData.length) { + return ( +
{t("No OAuth clients available. Please create one to view managed users.")}
+ ); + } + + return ( + + + {t("select_oAuth_client")} + +