PublicDashboards: Reshare public dashboard to recipient API call (#64178)

This commit is contained in:
juanicabanas 2023-03-06 16:09:19 -03:00 committed by GitHub
parent e217854c24
commit 10476043ea
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 39 additions and 26 deletions

View File

@ -101,28 +101,20 @@ export const publicDashboardApi = createApi({
},
invalidatesTags: (result, error, { payload }) => [{ type: 'PublicDashboard', id: payload.dashboardUid }],
}),
addEmailSharing: builder.mutation<void, { recipient: string; dashboardUid: string; uid: string }>({
query: ({ recipient, uid }) => ({
url: `/public-dashboards/${uid}/share/recipients`,
method: 'POST',
data: { recipient },
addRecipient: builder.mutation<void, { recipient: string; dashboardUid: string; uid: string }>({
query: () => ({
url: '',
}),
async onQueryStarted(_, { dispatch, queryFulfilled }) {
await queryFulfilled;
dispatch(notifyApp(createSuccessNotification('Invite sent!')));
},
invalidatesTags: (result, error, { dashboardUid }) => [{ type: 'PublicDashboard', id: dashboardUid }],
}),
deleteEmailSharing: builder.mutation<void, { recipientUid: string; dashboardUid: string; uid: string }>({
query: ({ uid, recipientUid }) => ({
url: `/public-dashboards/${uid}/share/recipients/${recipientUid}`,
method: 'DELETE',
deleteRecipient: builder.mutation<void, { recipientUid: string; dashboardUid: string; uid: string }>({
query: () => ({
url: '',
}),
}),
reshareAccessToRecipient: builder.mutation<void, { recipientUid: string; uid: string }>({
query: () => ({
url: '',
}),
async onQueryStarted(_, { dispatch, queryFulfilled }) {
await queryFulfilled;
dispatch(notifyApp(createSuccessNotification('User revoked')));
},
invalidatesTags: (result, error, { dashboardUid }) => [{ type: 'PublicDashboard', id: dashboardUid }],
}),
listPublicDashboards: builder.query<ListPublicDashboardResponse[], void>({
query: () => ({
@ -158,6 +150,7 @@ export const {
useUpdatePublicDashboardMutation,
useDeletePublicDashboardMutation,
useListPublicDashboardsQuery,
useAddEmailSharingMutation,
useDeleteEmailSharingMutation,
useAddRecipientMutation,
useDeleteRecipientMutation,
useReshareAccessToRecipientMutation,
} = publicDashboardApi;

View File

@ -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 (
<table className={styles.table} data-testid={selectors.EmailSharingList}>
<tbody>
@ -67,11 +75,23 @@ const EmailList = ({
aria-label="Revoke"
title="Revoke"
size="sm"
disabled={isDeleteLoading}
disabled={isLoading}
onClick={() => onDeleteEmail(recipient.uid)}
>
Revoke
</Button>
<Button
type="button"
variant="primary"
fill="text"
aria-label="Resend"
title="Resend"
size="sm"
disabled={isLoading}
onClick={() => onReshare(recipient.uid)}
>
Resend
</Button>
</ButtonGroup>
</td>
</tr>
@ -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,