diff --git a/apps/web/components/settings/organizations/platform/oauth-clients/OAuthClientCard.tsx b/apps/web/components/settings/organizations/platform/oauth-clients/OAuthClientCard.tsx index f57f6b5e65..0d7fa83532 100644 --- a/apps/web/components/settings/organizations/platform/oauth-clients/OAuthClientCard.tsx +++ b/apps/web/components/settings/organizations/platform/oauth-clients/OAuthClientCard.tsx @@ -1,3 +1,4 @@ +import { useRouter } from "next/navigation"; import React from "react"; import { classNames } from "@calcom/lib"; @@ -38,7 +39,7 @@ export const OAuthClientCard = ({ isLoading, areEmailsEnabled, }: OAuthClientCardProps) => { - console.log(areEmailsEnabled); + const router = useRouter(); const clientPermissions = Object.values(PERMISSIONS_GROUPED_MAP).map((value, index) => { let permissionsMessage = ""; @@ -139,7 +140,14 @@ export const OAuthClientCard = ({ Emails enabled: {areEmailsEnabled ? "Yes" : "No"} -
+
+
@@ -224,6 +299,7 @@ export const OAuthClientForm: FC = () => { label="Booking redirect uri" className="w-[100%]" {...register("bookingRedirectUri")} + disabled={disabledForm} />
@@ -234,6 +310,7 @@ export const OAuthClientForm: FC = () => { label="Booking cancel redirect uri" className="w-[100%]" {...register("bookingCancelRedirectUri")} + disabled={disabledForm} /> @@ -244,6 +321,7 @@ export const OAuthClientForm: FC = () => { label="Booking reschedule redirect uri" className="w-[100%]" {...register("bookingRescheduleRedirectUri")} + disabled={disabledForm} /> @@ -253,22 +331,27 @@ export const OAuthClientForm: FC = () => { id="areEmailsEnabled" className="bg-default border-default h-4 w-4 shrink-0 cursor-pointer rounded-[4px] border ring-offset-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:cursor-not-allowed" type="checkbox" + disabled={disabledForm} /> +
-

Permissions

-
{permissionsCheckboxes}
- diff --git a/apps/web/lib/hooks/settings/organizations/platform/oauth-clients/useOAuthClients.ts b/apps/web/lib/hooks/settings/organizations/platform/oauth-clients/useOAuthClients.ts index 6295ca7579..0ef3758e2b 100644 --- a/apps/web/lib/hooks/settings/organizations/platform/oauth-clients/useOAuthClients.ts +++ b/apps/web/lib/hooks/settings/organizations/platform/oauth-clients/useOAuthClients.ts @@ -17,20 +17,38 @@ export const useOAuthClients = () => { return { ...query, data: query.data?.data ?? [] }; }; -export const useOAuthClient = (clientId: string) => { +export const useOAuthClient = (clientId?: string) => { const { isLoading, error, data: response, + isFetched, + isError, + isFetching, + isSuccess, + isFetchedAfterMount, + refetch, } = useQuery>({ - queryKey: ["oauth-client"], + queryKey: ["oauth-client", clientId], queryFn: () => { return fetch(`/api/v2/oauth-clients/${clientId}`, { method: "get", headers: { "Content-type": "application/json" }, }).then((res) => res.json()); }, + enabled: clientId !== undefined, + staleTime: Infinity, }); - return { isLoading, error, data: response?.data }; + return { + isLoading, + error, + data: response?.data, + isFetched, + isError, + isFetching, + isSuccess, + isFetchedAfterMount, + refetch, + }; }; diff --git a/apps/web/lib/hooks/settings/organizations/platform/oauth-clients/usePersistOAuthClient.ts b/apps/web/lib/hooks/settings/organizations/platform/oauth-clients/usePersistOAuthClient.ts index 975cacc55e..25ee51e7a5 100644 --- a/apps/web/lib/hooks/settings/organizations/platform/oauth-clients/usePersistOAuthClient.ts +++ b/apps/web/lib/hooks/settings/organizations/platform/oauth-clients/usePersistOAuthClient.ts @@ -46,6 +46,43 @@ export const useCreateOAuthClient = ( return mutation; }; +export const useUpdateOAuthClient = ( + { onSuccess, onError, clientId }: IPersistOAuthClient & { clientId?: string } = { + onSuccess: () => { + return; + }, + onError: () => { + return; + }, + } +) => { + const mutation = useMutation< + ApiResponse<{ clientId: string; clientSecret: string }>, + unknown, + Omit + >({ + mutationFn: (data) => { + return fetch(`/api/v2/oauth-clients/${clientId}`, { + method: "PATCH", + headers: { "Content-type": "application/json" }, + body: JSON.stringify(data), + }).then((res) => res?.json()); + }, + onSuccess: (data) => { + if (data.status === SUCCESS_STATUS) { + onSuccess?.(); + } else { + onError?.(); + } + }, + onError: () => { + onError?.(); + }, + }); + + return mutation; +}; + export const useDeleteOAuthClient = ( { onSuccess, onError }: IPersistOAuthClient = { onSuccess: () => { @@ -62,7 +99,7 @@ export const useDeleteOAuthClient = ( return fetch(`/api/v2/oauth-clients/${id}`, { method: "delete", headers: { "Content-type": "application/json" }, - }).then((res) => res.json()); + }).then((res) => res?.json()); }, onSuccess: (data) => { if (data.status === SUCCESS_STATUS) { diff --git a/apps/web/pages/settings/organizations/platform/oauth-clients/create.tsx b/apps/web/pages/settings/organizations/platform/oauth-clients/create.tsx index 654cbf0a19..842c72b60c 100644 --- a/apps/web/pages/settings/organizations/platform/oauth-clients/create.tsx +++ b/apps/web/pages/settings/organizations/platform/oauth-clients/create.tsx @@ -1,3 +1,4 @@ +import { useRouter } from "next/router"; import React from "react"; import { getLayout } from "@calcom/features/settings/layouts/SettingsLayout"; @@ -6,9 +7,11 @@ import PageWrapper from "@components/PageWrapper"; import { OAuthClientForm } from "@components/settings/organizations/platform/oauth-clients/OAuthClientForm"; export const CreateOAuthClient = () => { + const router = useRouter(); + const clientId = router.query.clientId as string | undefined; return (
- +
); }; diff --git a/apps/web/pages/settings/organizations/platform/oauth-clients/index.tsx b/apps/web/pages/settings/organizations/platform/oauth-clients/index.tsx index 3a46e7a960..5daeb9fb7c 100644 --- a/apps/web/pages/settings/organizations/platform/oauth-clients/index.tsx +++ b/apps/web/pages/settings/organizations/platform/oauth-clients/index.tsx @@ -62,8 +62,6 @@ export const OAuthClients = () => { <>
{data.map((client, index) => { - console.log(client); - return ( return hasPermission(userPermissions, SCHEDULE_WRITE); }; +export const hasAppsReadPermission = (userPermissions: number): boolean => { + return hasPermission(userPermissions, APPS_READ); +}; + +export const hasAppsWritePermission = (userPermissions: number): boolean => { + return hasPermission(userPermissions, APPS_WRITE); +}; + +export const hasProfileReadPermission = (userPermissions: number): boolean => { + return hasPermission(userPermissions, PROFILE_READ); +}; + +export const hasProfileWritePermission = (userPermissions: number): boolean => { + return hasPermission(userPermissions, PROFILE_WRITE); +}; + export const listPermissions = (userPermissions: number): PLATFORM_PERMISSION[] => { return PERMISSIONS.reduce((acc, permission) => { if (hasPermission(userPermissions, permission)) {