Implemented user selection and deletion
This commit is contained in:
parent
6bbfc9394c
commit
aee8cb8236
@ -5,28 +5,51 @@ import com.vaadin.flow.component.button.ButtonVariant;
|
||||
import com.vaadin.flow.component.grid.ColumnTextAlign;
|
||||
import com.vaadin.flow.component.grid.Grid;
|
||||
import com.vaadin.flow.component.html.Span;
|
||||
import com.vaadin.flow.component.icon.Icon;
|
||||
import com.vaadin.flow.component.icon.VaadinIcon;
|
||||
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
|
||||
import ru.dragonestia.picker.api.repository.UserRepository;
|
||||
import ru.dragonestia.picker.api.repository.response.type.RRoom;
|
||||
import ru.dragonestia.picker.api.repository.response.type.RUser;
|
||||
import ru.dragonestia.picker.api.repository.details.UserDetails;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public class UserList extends VerticalLayout {
|
||||
|
||||
private final RRoom room;
|
||||
private final UserRepository userRepository;
|
||||
private final Button buttonRemove;
|
||||
private final Grid<RUser> usersGrid;
|
||||
private final Span totalUsers = new Span();
|
||||
private final Span occupancy = new Span();
|
||||
private List<RUser> cachedUsers = new ArrayList<>();
|
||||
|
||||
public UserList(RRoom room, List<RUser> users) {
|
||||
public UserList(RRoom room, List<RUser> users, UserRepository userRepository) {
|
||||
this.room = room;
|
||||
this.userRepository = userRepository;
|
||||
|
||||
add(buttonRemove = createButtonRemove());
|
||||
add(usersGrid = createUsersGrid());
|
||||
|
||||
update(users);
|
||||
updateButtonRemove();
|
||||
}
|
||||
|
||||
private Button createButtonRemove() {
|
||||
var button = new Button("Unlink users");
|
||||
button.setPrefixComponent(new Icon(VaadinIcon.UNLINK));
|
||||
button.addThemeVariants(ButtonVariant.LUMO_PRIMARY, ButtonVariant.LUMO_ERROR);
|
||||
button.addClickListener(event -> {
|
||||
var users = usersGrid.getSelectedItems();
|
||||
if (users.isEmpty()) return;
|
||||
userRepository.unlinkFromRoom(room, users);
|
||||
update(userRepository.all(room, UserRepository.ALL_DETAILS));
|
||||
});
|
||||
return button;
|
||||
}
|
||||
|
||||
private Grid<RUser> createUsersGrid() {
|
||||
@ -35,6 +58,8 @@ public class UserList extends VerticalLayout {
|
||||
grid.addColumn(user -> user.getDetail(UserDetails.COUNT_ROOMS)).setTextAlign(ColumnTextAlign.CENTER).setHeader("Linked with rooms")
|
||||
.setFooter(occupancy);
|
||||
grid.addComponentColumn(this::createManageButton).setHeader("Manage");
|
||||
grid.setSelectionMode(Grid.SelectionMode.MULTI);
|
||||
grid.addSelectionListener(event -> updateButtonRemove());
|
||||
return grid;
|
||||
}
|
||||
|
||||
@ -54,6 +79,19 @@ public class UserList extends VerticalLayout {
|
||||
occupancy.setText("Occupancy: %s".formatted(getUsingPercentage(room.getSlots(), users.size())));
|
||||
}
|
||||
|
||||
private void updateButtonRemove() {
|
||||
var users = usersGrid.getSelectedItems();
|
||||
|
||||
if (users.isEmpty()) {
|
||||
buttonRemove.setEnabled(false);
|
||||
buttonRemove.setText("Unlink users");
|
||||
return;
|
||||
}
|
||||
|
||||
buttonRemove.setEnabled(true);
|
||||
buttonRemove.setText("Unlink users(" + users.size() + ")");
|
||||
}
|
||||
|
||||
public static String getUsingPercentage(int slots, int usedSlots) {
|
||||
if (slots == RRoom.INFINITE_SLOTS) return "N/A";
|
||||
double percent = usedSlots / (double) slots * 100;
|
||||
|
||||
@ -64,7 +64,7 @@ public class RoomDetailsPage extends VerticalLayout implements BeforeEnterObserv
|
||||
add(addUsers = new AddUsers(room, (users, ignoreLimitation) -> appendUsers(room, users, ignoreLimitation)));
|
||||
add(new Hr());
|
||||
add(new H2("Users"));
|
||||
add(userList = new UserList(room, userRepository.all(room, UserRepository.ALL_DETAILS)));
|
||||
add(userList = new UserList(room, userRepository.all(room, UserRepository.ALL_DETAILS), userRepository));
|
||||
}
|
||||
|
||||
private void updateRoomInfo() {
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
package ru.dragonestia.picker.cp.page;
|
||||
|
||||
import com.vaadin.flow.component.Html;
|
||||
import com.vaadin.flow.component.button.Button;
|
||||
import com.vaadin.flow.component.button.ButtonVariant;
|
||||
import com.vaadin.flow.component.grid.Grid;
|
||||
import com.vaadin.flow.component.html.H2;
|
||||
import com.vaadin.flow.component.html.H3;
|
||||
import com.vaadin.flow.component.html.Span;
|
||||
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
|
||||
import com.vaadin.flow.router.BeforeEnterEvent;
|
||||
import com.vaadin.flow.router.BeforeEnterObserver;
|
||||
@ -71,4 +71,8 @@ public class UserDetailsPage extends VerticalLayout implements BeforeEnterObserv
|
||||
public void update(List<RRoom.Short> rooms) {
|
||||
gridRooms.setItems(cachedRooms = rooms);
|
||||
}
|
||||
|
||||
private Html createComponent(String defaultValue) {
|
||||
return new Html("<span>" + defaultValue + "</span>");
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user