From 10476043ea1b31402e150d0436ea8df884d9b9a3 Mon Sep 17 00:00:00 2001 From: juanicabanas Date: Mon, 6 Mar 2023 16:09:19 -0300 Subject: [PATCH] PublicDashboards: Reshare public dashboard to recipient API call (#64178) --- .../dashboard/api/publicDashboardApi.ts | 35 ++++++++----------- .../EmailSharingConfiguration.tsx | 30 +++++++++++++--- 2 files changed, 39 insertions(+), 26 deletions(-) diff --git a/public/app/features/dashboard/api/publicDashboardApi.ts b/public/app/features/dashboard/api/publicDashboardApi.ts index a329a2df723..3a8ae32f8bd 100644 --- a/public/app/features/dashboard/api/publicDashboardApi.ts +++ b/public/app/features/dashboard/api/publicDashboardApi.ts @@ -101,28 +101,20 @@ export const publicDashboardApi = createApi({ }, invalidatesTags: (result, error, { payload }) => [{ type: 'PublicDashboard', id: payload.dashboardUid }], }), - addEmailSharing: builder.mutation({ - query: ({ recipient, uid }) => ({ - url: `/public-dashboards/${uid}/share/recipients`, - method: 'POST', - data: { recipient }, + addRecipient: builder.mutation({ + query: () => ({ + url: '', }), - async onQueryStarted(_, { dispatch, queryFulfilled }) { - await queryFulfilled; - dispatch(notifyApp(createSuccessNotification('Invite sent!'))); - }, - invalidatesTags: (result, error, { dashboardUid }) => [{ type: 'PublicDashboard', id: dashboardUid }], }), - deleteEmailSharing: builder.mutation({ - query: ({ uid, recipientUid }) => ({ - url: `/public-dashboards/${uid}/share/recipients/${recipientUid}`, - method: 'DELETE', + deleteRecipient: builder.mutation({ + query: () => ({ + url: '', + }), + }), + reshareAccessToRecipient: builder.mutation({ + query: () => ({ + url: '', }), - async onQueryStarted(_, { dispatch, queryFulfilled }) { - await queryFulfilled; - dispatch(notifyApp(createSuccessNotification('User revoked'))); - }, - invalidatesTags: (result, error, { dashboardUid }) => [{ type: 'PublicDashboard', id: dashboardUid }], }), listPublicDashboards: builder.query({ query: () => ({ @@ -158,6 +150,7 @@ export const { useUpdatePublicDashboardMutation, useDeletePublicDashboardMutation, useListPublicDashboardsQuery, - useAddEmailSharingMutation, - useDeleteEmailSharingMutation, + useAddRecipientMutation, + useDeleteRecipientMutation, + useReshareAccessToRecipientMutation, } = publicDashboardApi; diff --git a/public/app/features/dashboard/components/ShareModal/SharePublicDashboard/ConfigPublicDashboard/EmailSharingConfiguration.tsx b/public/app/features/dashboard/components/ShareModal/SharePublicDashboard/ConfigPublicDashboard/EmailSharingConfiguration.tsx index 30a53b17ed8..afc7a8de5c7 100644 --- a/public/app/features/dashboard/components/ShareModal/SharePublicDashboard/ConfigPublicDashboard/EmailSharingConfiguration.tsx +++ b/public/app/features/dashboard/components/ShareModal/SharePublicDashboard/ConfigPublicDashboard/EmailSharingConfiguration.tsx @@ -15,9 +15,10 @@ import { useStyles2, } from '@grafana/ui/src'; import { - useAddEmailSharingMutation, - useDeleteEmailSharingMutation, + useAddRecipientMutation, + useDeleteRecipientMutation, useGetPublicDashboardQuery, + useReshareAccessToRecipientMutation, useUpdatePublicDashboardMutation, } from 'app/features/dashboard/api/publicDashboardApi'; import { useSelector } from 'app/types'; @@ -46,12 +47,19 @@ const EmailList = ({ publicDashboardUid: string; }) => { const styles = useStyles2(getStyles); - const [deleteEmail, { isLoading: isDeleteLoading }] = useDeleteEmailSharingMutation(); + const [deleteEmail, { isLoading: isDeleteLoading }] = useDeleteRecipientMutation(); + const [reshareAccess, { isLoading: isReshareLoading }] = useReshareAccessToRecipientMutation(); + + const isLoading = isDeleteLoading || isReshareLoading; const onDeleteEmail = (recipientUid: string) => { deleteEmail({ recipientUid, dashboardUid: dashboardUid, uid: publicDashboardUid }); }; + const onReshare = (recipientUid: string) => { + reshareAccess({ recipientUid, uid: publicDashboardUid }); + }; + return ( @@ -67,11 +75,23 @@ const EmailList = ({ aria-label="Revoke" title="Revoke" size="sm" - disabled={isDeleteLoading} + disabled={isLoading} onClick={() => onDeleteEmail(recipient.uid)} > Revoke + @@ -88,7 +108,7 @@ export const EmailSharingConfiguration = () => { const { data: publicDashboard } = useGetPublicDashboardQuery(dashboard.uid); const [updateShareType] = useUpdatePublicDashboardMutation(); - const [addEmail, { isLoading: isAddEmailLoading }] = useAddEmailSharingMutation(); + const [addEmail, { isLoading: isAddEmailLoading }] = useAddRecipientMutation(); const { register,