Added refresh button for RoomList

This commit is contained in:
Andrey Terentev 2024-02-19 16:24:32 +07:00 committed by Andrey Terentev
parent 9650ecd358
commit a95700f7d3
2 changed files with 29 additions and 25 deletions

View File

@ -16,31 +16,34 @@ import com.vaadin.flow.component.textfield.TextField;
import com.vaadin.flow.data.value.ValueChangeMode; import com.vaadin.flow.data.value.ValueChangeMode;
import lombok.Setter; import lombok.Setter;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import ru.dragonestia.picker.api.repository.RoomRepository;
import ru.dragonestia.picker.api.repository.details.RoomDetails; import ru.dragonestia.picker.api.repository.details.RoomDetails;
import ru.dragonestia.picker.api.repository.response.type.RNode;
import ru.dragonestia.picker.api.repository.response.type.RRoom; import ru.dragonestia.picker.api.repository.response.type.RRoom;
import java.util.List; import java.util.List;
import java.util.function.Consumer; import java.util.function.Consumer;
@Log4j2 @Log4j2
public class RoomList extends VerticalLayout { public class RoomList extends VerticalLayout implements RefreshableTable {
private final String nodeIdentifier; private final RNode node;
private final RoomRepository roomRepository;
private final Grid<RRoom.Short> roomsGrid; private final Grid<RRoom.Short> roomsGrid;
private final TextField searchField; private final TextField searchField;
private List<RRoom.Short> cachedRooms; private List<RRoom.Short> cachedRooms;
private final Span totalUsers = new Span(); private final Span totalUsers = new Span();
@Setter private Consumer<RRoom.Short> removeMethod; @Setter private Consumer<RRoom.Short> removeMethod;
public RoomList(String nodeIdentifier, List<RRoom.Short> rooms) { public RoomList(RNode node, RoomRepository roomRepository) {
this.nodeIdentifier = nodeIdentifier; this.node = node;
cachedRooms = rooms; this.roomRepository = roomRepository;
add(new H2("Rooms")); add(new H2("Rooms"));
add(searchField = createSearchField()); add(searchField = createSearchField());
add(roomsGrid = createGrid()); add(roomsGrid = createGrid());
update(rooms); refresh();
} }
private TextField createSearchField() { private TextField createSearchField() {
@ -106,7 +109,8 @@ public class RoomList extends VerticalLayout {
}).setComparator((room1, room2) -> Boolean.compare(room1.locked(), room2.locked())).setSortable(true) }).setComparator((room1, room2) -> Boolean.compare(room1.locked(), room2.locked())).setSortable(true)
.setHeader("Locked").setTextAlign(ColumnTextAlign.CENTER); .setHeader("Locked").setTextAlign(ColumnTextAlign.CENTER);
grid.addComponentColumn(this::createManageButtons).setFrozenToEnd(true); grid.addComponentColumn(this::createManageButtons).setFrozenToEnd(true)
.setTextAlign(ColumnTextAlign.END).setHeader(createRefreshButton());
grid.setMultiSort(true, Grid.MultiSortPriority.APPEND); grid.setMultiSort(true, Grid.MultiSortPriority.APPEND);
return grid; return grid;
@ -134,8 +138,7 @@ public class RoomList extends VerticalLayout {
private void clickDetailsButton(RRoom.Short room) { private void clickDetailsButton(RRoom.Short room) {
getUI().ifPresent(ui -> { getUI().ifPresent(ui -> {
ui.navigate("/nodes/" + nodeIdentifier + ui.navigate("/nodes/%s/rooms/%s".formatted(node.getId(), room.id()));
"/rooms/" + room.id());
}); });
} }
@ -173,17 +176,6 @@ public class RoomList extends VerticalLayout {
dialog.open(); dialog.open();
} }
public void update(List<RRoom.Short> rooms) {
cachedRooms = rooms;
applySearch(searchField.getValue());
int users = 0;
for (var room: cachedRooms) {
users += getUsers(room);
}
totalUsers.setText("Total users: " + users);
}
private void removeRemove(RRoom.Short room) { private void removeRemove(RRoom.Short room) {
if (removeMethod != null) { if (removeMethod != null) {
removeMethod.accept(room); removeMethod.accept(room);
@ -197,4 +189,16 @@ public class RoomList extends VerticalLayout {
return 0; return 0;
} }
} }
@Override
public void refresh() {
cachedRooms = roomRepository.all(node, RoomRepository.ALL_DETAILS);
applySearch(searchField.getValue());
int users = 0;
for (var room: cachedRooms) {
users += getUsers(room);
}
totalUsers.setText("Total users: " + users);
}
} }

View File

@ -41,10 +41,10 @@ public class NodeDetailsPage extends VerticalLayout implements BeforeEnterObserv
public void beforeEnter(BeforeEnterEvent event) { public void beforeEnter(BeforeEnterEvent event) {
node = paramsExtractor.extractNodeId(event); node = paramsExtractor.extractNodeId(event);
initComponents(node, roomRepository.all(node, RoomRepository.ALL_DETAILS)); initComponents(node);
} }
private void initComponents(RNode node, List<RRoom.Short> rooms) { private void initComponents(RNode node) {
add(NavPath.toNode(node.getId())); add(NavPath.toNode(node.getId()));
printNodeDetails(node); printNodeDetails(node);
add(new Hr()); add(new Hr());
@ -55,14 +55,14 @@ public class NodeDetailsPage extends VerticalLayout implements BeforeEnterObserv
} catch (Error error) { } catch (Error error) {
return new RegisterRoom.Response(true, error.getMessage()); return new RegisterRoom.Response(true, error.getMessage());
} finally { } finally {
roomList.update(roomRepository.all(node, RoomRepository.ALL_DETAILS)); roomList.refresh();
} }
})); }));
add(new Hr()); add(new Hr());
add(roomList = new RoomList(node.getId(), rooms)); add(roomList = new RoomList(node, roomRepository));
roomList.setRemoveMethod(room -> { roomList.setRemoveMethod(room -> {
roomRepository.remove(node, room); roomRepository.remove(node, room);
roomList.update(roomRepository.all(node, RoomRepository.ALL_DETAILS)); roomList.refresh();
}); });
} }