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"}
-
+
+
@@ -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}
-
- Submit
+
+
+ {clientId ? "Update" : "Submit"}
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)) {