From 79eb71841d166c42e46d884a4ccb0dcd22de372a Mon Sep 17 00:00:00 2001 From: Wilfred Asomani Date: Tue, 20 Jun 2023 10:50:05 +0000 Subject: [PATCH] satellite/{web,analytics}: add row actions to project members This change adds row actions (delete,reinvite,copy) to the project members table. It also adds analytics events for the actions. Issue: #5762 Also fixes: #5941 Change-Id: I7fb7f88c7bd5ac2ce3e3d00530af4708ff220bd7 --- satellite/analytics/service.go | 5 +- web/satellite/src/api/projectMembers.ts | 16 ++ .../components/team/ProjectMemberListItem.vue | 181 +++++++++++++++++- .../components/team/ProjectMembersArea.vue | 45 ++++- .../src/store/modules/projectMembersStore.ts | 5 + web/satellite/src/types/projectMembers.ts | 10 + .../utils/constants/analyticsEventNames.ts | 2 + 7 files changed, 256 insertions(+), 8 deletions(-) diff --git a/satellite/analytics/service.go b/satellite/analytics/service.go index e34d00870..3c22ef66c 100644 --- a/satellite/analytics/service.go +++ b/satellite/analytics/service.go @@ -90,6 +90,8 @@ const ( eventProjectInvitationDeclined = "Project Invitation Declined" eventGalleryViewClicked = "Gallery View Clicked" eventResendInviteClicked = "Resend Invite Clicked" + eventCopyInviteLinkClicked = "Copy Invite Link Clicked" + eventRemoveProjectMemberCLicked = "Remove Member Clicked" ) var ( @@ -159,8 +161,7 @@ func NewService(log *zap.Logger, config Config, satelliteName string) *Service { eventApplyNewCouponClicked, eventCreditCardRemoved, eventCouponCodeApplied, eventInvoiceDownloaded, eventCreditCardAddedFromBilling, eventStorjTokenAddedFromBilling, eventAddFundsClicked, eventProjectMembersInviteSent, eventError, eventProjectNameUpdated, eventProjectDescriptionUpdated, eventProjectStorageLimitUpdated, eventProjectBandwidthLimitUpdated, eventProjectInvitationAccepted, eventProjectInvitationDeclined, - eventGalleryViewClicked, eventResendInviteClicked, - } { + eventGalleryViewClicked, eventResendInviteClicked, eventRemoveProjectMemberCLicked, eventCopyInviteLinkClicked} { service.clientEvents[name] = true } diff --git a/web/satellite/src/api/projectMembers.ts b/web/satellite/src/api/projectMembers.ts index 491dfa692..fe511a8eb 100644 --- a/web/satellite/src/api/projectMembers.ts +++ b/web/satellite/src/api/projectMembers.ts @@ -107,6 +107,22 @@ export class ProjectMembersApiGql extends BaseGql implements ProjectMembersApi { throw new Error(result.error || 'Failed to send project invitations'); } + /** + * Get invite link for the specified project and email. + * + * @throws Error + */ + public async getInviteLink(projectID: string, email: string): Promise { + const path = `${this.ROOT_PATH}/${projectID}/invite-link?email=${email}`; + const httpResponse = await this.http.get(path); + + if (httpResponse.ok) { + return await httpResponse.json(); + } + + throw new Error('Can not get invite link'); + } + /** * Method for mapping project members page from json to ProjectMembersPage type. * diff --git a/web/satellite/src/components/team/ProjectMemberListItem.vue b/web/satellite/src/components/team/ProjectMemberListItem.vue index ca39d944b..4152748b4 100644 --- a/web/satellite/src/components/team/ProjectMemberListItem.vue +++ b/web/satellite/src/components/team/ProjectMemberListItem.vue @@ -8,33 +8,96 @@ :selectable="true" :select-disabled="isProjectOwner" :selected="model.isSelected()" - :on-click="(_) => $emit('memberClick', model)" - @selectClicked="($event) => $emit('selectClicked', $event)" - /> + :on-click="(_) => emit('memberClick', model)" + class="project-member-item" + @selectClicked="(_) => emit('selectClick', model)" + > + +