Added refresh button UserList
This commit is contained in:
parent
a95700f7d3
commit
72bf68255c
@ -7,6 +7,7 @@ import com.vaadin.flow.component.grid.Grid;
|
|||||||
import com.vaadin.flow.component.html.Span;
|
import com.vaadin.flow.component.html.Span;
|
||||||
import com.vaadin.flow.component.icon.Icon;
|
import com.vaadin.flow.component.icon.Icon;
|
||||||
import com.vaadin.flow.component.icon.VaadinIcon;
|
import com.vaadin.flow.component.icon.VaadinIcon;
|
||||||
|
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
|
||||||
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
|
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
|
||||||
import ru.dragonestia.picker.api.repository.UserRepository;
|
import ru.dragonestia.picker.api.repository.UserRepository;
|
||||||
import ru.dragonestia.picker.api.repository.response.type.RRoom;
|
import ru.dragonestia.picker.api.repository.response.type.RRoom;
|
||||||
@ -15,10 +16,8 @@ import ru.dragonestia.picker.api.repository.details.UserDetails;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
|
||||||
import java.util.function.Consumer;
|
|
||||||
|
|
||||||
public class UserList extends VerticalLayout {
|
public class UserList extends VerticalLayout implements RefreshableTable {
|
||||||
|
|
||||||
private final RRoom room;
|
private final RRoom room;
|
||||||
private final UserRepository userRepository;
|
private final UserRepository userRepository;
|
||||||
@ -28,26 +27,26 @@ public class UserList extends VerticalLayout {
|
|||||||
private final Span occupancy = new Span();
|
private final Span occupancy = new Span();
|
||||||
private List<RUser> cachedUsers = new ArrayList<>();
|
private List<RUser> cachedUsers = new ArrayList<>();
|
||||||
|
|
||||||
public UserList(RRoom room, List<RUser> users, UserRepository userRepository) {
|
public UserList(RRoom room, UserRepository userRepository) {
|
||||||
this.room = room;
|
this.room = room;
|
||||||
this.userRepository = userRepository;
|
this.userRepository = userRepository;
|
||||||
|
|
||||||
add(buttonRemove = createButtonRemove());
|
buttonRemove = createButtonRemove();
|
||||||
add(usersGrid = createUsersGrid());
|
add(usersGrid = createUsersGrid());
|
||||||
|
|
||||||
update(users);
|
refresh();
|
||||||
updateButtonRemove();
|
updateButtonRemove();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Button createButtonRemove() {
|
private Button createButtonRemove() {
|
||||||
var button = new Button("Unlink users");
|
var button = new Button("Unlink");
|
||||||
button.setPrefixComponent(new Icon(VaadinIcon.UNLINK));
|
button.setPrefixComponent(new Icon(VaadinIcon.UNLINK));
|
||||||
button.addThemeVariants(ButtonVariant.LUMO_PRIMARY, ButtonVariant.LUMO_ERROR);
|
button.addThemeVariants(ButtonVariant.LUMO_PRIMARY, ButtonVariant.LUMO_ERROR);
|
||||||
button.addClickListener(event -> {
|
button.addClickListener(event -> {
|
||||||
var users = usersGrid.getSelectedItems();
|
var users = usersGrid.getSelectedItems();
|
||||||
if (users.isEmpty()) return;
|
if (users.isEmpty()) return;
|
||||||
userRepository.unlinkFromRoom(room, users);
|
userRepository.unlinkFromRoom(room, users);
|
||||||
update(userRepository.all(room, UserRepository.ALL_DETAILS));
|
refresh();
|
||||||
});
|
});
|
||||||
return button;
|
return button;
|
||||||
}
|
}
|
||||||
@ -65,7 +64,8 @@ public class UserList extends VerticalLayout {
|
|||||||
return Integer.compare(r1, r2);
|
return Integer.compare(r1, r2);
|
||||||
}).setSortable(true).setFooter(occupancy);
|
}).setSortable(true).setFooter(occupancy);
|
||||||
|
|
||||||
grid.addComponentColumn(this::createManageButton).setTextAlign(ColumnTextAlign.END).setFrozenToEnd(true);
|
grid.addComponentColumn(this::createManageButton).setTextAlign(ColumnTextAlign.END).setFrozenToEnd(true)
|
||||||
|
.setTextAlign(ColumnTextAlign.END).setHeader(createManageTableButtons());
|
||||||
|
|
||||||
grid.setSelectionMode(Grid.SelectionMode.MULTI);
|
grid.setSelectionMode(Grid.SelectionMode.MULTI);
|
||||||
grid.addSelectionListener(event -> updateButtonRemove());
|
grid.addSelectionListener(event -> updateButtonRemove());
|
||||||
@ -82,11 +82,14 @@ public class UserList extends VerticalLayout {
|
|||||||
return button;
|
return button;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void update(List<RUser> users) {
|
private HorizontalLayout createManageTableButtons() {
|
||||||
cachedUsers = users;
|
var layout = new HorizontalLayout();
|
||||||
usersGrid.setItems(users);
|
layout.setJustifyContentMode(JustifyContentMode.END);
|
||||||
totalUsers.setText("Total users: " + users.size());
|
|
||||||
occupancy.setText("Occupancy: %s".formatted(getUsingPercentage(room.getSlots(), users.size()) + "%"));
|
layout.add(buttonRemove);
|
||||||
|
layout.add(createRefreshButton());
|
||||||
|
|
||||||
|
return layout;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateButtonRemove() {
|
private void updateButtonRemove() {
|
||||||
@ -94,12 +97,12 @@ public class UserList extends VerticalLayout {
|
|||||||
|
|
||||||
if (users.isEmpty()) {
|
if (users.isEmpty()) {
|
||||||
buttonRemove.setEnabled(false);
|
buttonRemove.setEnabled(false);
|
||||||
buttonRemove.setText("Unlink users");
|
buttonRemove.setText("Unlink");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
buttonRemove.setEnabled(true);
|
buttonRemove.setEnabled(true);
|
||||||
buttonRemove.setText("Unlink users(" + users.size() + ")");
|
buttonRemove.setText("Unlink(" + users.size() + ")");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getUsingPercentage(int slots, int usedSlots) {
|
public static int getUsingPercentage(int slots, int usedSlots) {
|
||||||
@ -107,4 +110,12 @@ public class UserList extends VerticalLayout {
|
|||||||
double percent = usedSlots / (double) slots * 100;
|
double percent = usedSlots / (double) slots * 100;
|
||||||
return (int) percent;
|
return (int) percent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void refresh() {
|
||||||
|
cachedUsers = userRepository.all(room, UserRepository.ALL_DETAILS);
|
||||||
|
usersGrid.setItems(cachedUsers);
|
||||||
|
totalUsers.setText("Total users: " + cachedUsers.size());
|
||||||
|
occupancy.setText("Occupancy: %s".formatted(getUsingPercentage(room.getSlots(), cachedUsers.size()) + "%"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -20,7 +20,6 @@ import ru.dragonestia.picker.api.repository.response.type.RUser;
|
|||||||
import ru.dragonestia.picker.api.repository.NodeRepository;
|
import ru.dragonestia.picker.api.repository.NodeRepository;
|
||||||
import ru.dragonestia.picker.api.repository.RoomRepository;
|
import ru.dragonestia.picker.api.repository.RoomRepository;
|
||||||
import ru.dragonestia.picker.api.repository.UserRepository;
|
import ru.dragonestia.picker.api.repository.UserRepository;
|
||||||
import ru.dragonestia.picker.api.repository.details.UserDetails;
|
|
||||||
import ru.dragonestia.picker.cp.component.AddUsers;
|
import ru.dragonestia.picker.cp.component.AddUsers;
|
||||||
import ru.dragonestia.picker.cp.component.NavPath;
|
import ru.dragonestia.picker.cp.component.NavPath;
|
||||||
import ru.dragonestia.picker.cp.component.Notifications;
|
import ru.dragonestia.picker.cp.component.Notifications;
|
||||||
@ -28,7 +27,6 @@ import ru.dragonestia.picker.cp.component.UserList;
|
|||||||
import ru.dragonestia.picker.cp.util.RouteParamsExtractor;
|
import ru.dragonestia.picker.cp.util.RouteParamsExtractor;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Set;
|
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@ -64,7 +62,7 @@ public class RoomDetailsPage extends VerticalLayout implements BeforeEnterObserv
|
|||||||
add(addUsers = new AddUsers(room, (users, ignoreLimitation) -> appendUsers(room, users, ignoreLimitation)));
|
add(addUsers = new AddUsers(room, (users, ignoreLimitation) -> appendUsers(room, users, ignoreLimitation)));
|
||||||
add(new Hr());
|
add(new Hr());
|
||||||
add(new H2("Users"));
|
add(new H2("Users"));
|
||||||
add(userList = new UserList(room, userRepository.all(room, UserRepository.ALL_DETAILS), userRepository));
|
add(userList = new UserList(room, userRepository));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateRoomInfo() {
|
private void updateRoomInfo() {
|
||||||
@ -125,7 +123,7 @@ public class RoomDetailsPage extends VerticalLayout implements BeforeEnterObserv
|
|||||||
}).toList();
|
}).toList();
|
||||||
|
|
||||||
userRepository.linkWithRoom(room, newUsers, ignoreLimitation);
|
userRepository.linkWithRoom(room, newUsers, ignoreLimitation);
|
||||||
userList.update(userRepository.all(room, UserRepository.ALL_DETAILS));
|
userList.refresh();
|
||||||
|
|
||||||
if (validationFail.get()) {
|
if (validationFail.get()) {
|
||||||
if (newUsers.isEmpty()) {
|
if (newUsers.isEmpty()) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user