
io.imunity.furms.ui.views.community.adminstrators.CommunityAdminsView Maven / Gradle / Ivy
/*
* Copyright (c) 2020 Bixbit s.c. All rights reserved.
* See LICENSE file for licensing information.
*/
package io.imunity.furms.ui.views.community.adminstrators;
import com.vaadin.flow.router.Route;
import io.imunity.furms.api.authz.AuthzService;
import io.imunity.furms.api.communites.CommunityService;
import io.imunity.furms.domain.communities.CommunityId;
import io.imunity.furms.domain.users.CommunityUsersAndAdmins;
import io.imunity.furms.domain.users.FURMSUser;
import io.imunity.furms.domain.users.PersistentId;
import io.imunity.furms.ui.components.FurmsViewComponent;
import io.imunity.furms.ui.components.InviteUserComponent;
import io.imunity.furms.ui.components.PageTitle;
import io.imunity.furms.ui.components.ViewHeaderLayout;
import io.imunity.furms.ui.components.administrators.UserContextMenuFactory;
import io.imunity.furms.ui.components.administrators.UserGrid;
import io.imunity.furms.ui.components.administrators.UsersGridComponent;
import io.imunity.furms.ui.utils.CommonExceptionsHandler;
import io.imunity.furms.ui.views.community.CommunityAdminMenu;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.invoke.MethodHandles;
import java.util.List;
import java.util.function.Supplier;
import static io.imunity.furms.ui.utils.NotificationUtils.showSuccessNotification;
import static io.imunity.furms.ui.utils.ResourceGetter.getCurrentResourceId;
@Route(value = "community/admin/administrators", layout = CommunityAdminMenu.class)
@PageTitle(key = "view.community-admin.administrators.page.title")
public class CommunityAdminsView extends FurmsViewComponent {
private final static Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private final CommunityService communityService;
private final UsersGridComponent grid;
private final CommunityId communityId;
private final UsersDAO usersDAO;
public CommunityAdminsView(CommunityService communityService, AuthzService authzService) {
this.communityService = communityService;
communityId = new CommunityId(getCurrentResourceId());
PersistentId currentUserId = authzService.getCurrentUserId();
usersDAO = new UsersDAO(() -> communityService.findAllCommunityAdminsAllUsers(communityId));
InviteUserComponent inviteUser = new InviteUserComponent(
usersDAO::getCommunityUsers,
usersDAO::getCommunityAdmins
);
UserContextMenuFactory userContextMenuFactory = UserContextMenuFactory.builder()
.withCurrentUserId(currentUserId)
.redirectOnCurrentUserRemoval()
.withRemoveUserAction(userId -> communityService.removeAdmin(communityId, userId))
.withPostRemoveUserAction(userId -> {
usersDAO.reload();
inviteUser.reload();
})
.withResendInvitationAction(invitationId -> {
communityService.resendInvitation(communityId, invitationId);
gridReload();
})
.withRemoveInvitationAction(invitationId -> {
communityService.removeInvitation(communityId, invitationId);
gridReload();
})
.build();
UserGrid.Builder userGrid = UserGrid.defaultInit(userContextMenuFactory);
grid = UsersGridComponent.defaultInit(usersDAO::getCommunityAdmins,
() -> communityService.findAllInvitations(communityId), userGrid);
inviteUser.addInviteAction(event -> doInviteAction(inviteUser));
ViewHeaderLayout headerLayout = new ViewHeaderLayout(
getTranslation("view.community-admin.administrators.page.header"));
getContent().add(headerLayout, inviteUser, grid);
}
private void doInviteAction(InviteUserComponent inviteUserComponent) {
try {
inviteUserComponent.getUserId().ifPresentOrElse(
id -> communityService.inviteAdmin(communityId, id),
() -> communityService.inviteAdmin(communityId, inviteUserComponent.getEmail())
);
usersDAO.reload();
inviteUserComponent.reload();
showSuccessNotification(getTranslation("invite.successful.added"));
gridReload();
} catch (RuntimeException e) {
boolean handled = CommonExceptionsHandler.showExceptionBasedNotificationError(e);
if(!handled)
LOG.error("Could not invite community admin.");
}
}
private void gridReload() {
grid.reloadGrid();
}
private static class UsersDAO {
private final Supplier communityUsersAndAdminsSupplier;
private CommunityUsersAndAdmins currentSnapshot;
UsersDAO(Supplier communityUsersAndAdminsSupplier) {
this.communityUsersAndAdminsSupplier = communityUsersAndAdminsSupplier;
reload();
}
void reload(){
currentSnapshot = communityUsersAndAdminsSupplier.get();
}
List getCommunityAdmins() {
return currentSnapshot.communityAdmins;
}
List getCommunityUsers() {
return currentSnapshot.communityUsers;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy