From a95700f7d3fa8a14559458d8831acf3ddd3d22e0 Mon Sep 17 00:00:00 2001 From: ScarletRedMan Date: Mon, 19 Feb 2024 16:24:32 +0700 Subject: [PATCH] Added refresh button for RoomList --- .../picker/cp/component/RoomList.java | 44 ++++++++++--------- .../picker/cp/page/NodeDetailsPage.java | 10 ++--- 2 files changed, 29 insertions(+), 25 deletions(-) diff --git a/control-panel/src/main/java/ru/dragonestia/picker/cp/component/RoomList.java b/control-panel/src/main/java/ru/dragonestia/picker/cp/component/RoomList.java index 28309bf..ec485f2 100644 --- a/control-panel/src/main/java/ru/dragonestia/picker/cp/component/RoomList.java +++ b/control-panel/src/main/java/ru/dragonestia/picker/cp/component/RoomList.java @@ -16,31 +16,34 @@ import com.vaadin.flow.component.textfield.TextField; import com.vaadin.flow.data.value.ValueChangeMode; import lombok.Setter; 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.response.type.RNode; import ru.dragonestia.picker.api.repository.response.type.RRoom; import java.util.List; import java.util.function.Consumer; @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 roomsGrid; private final TextField searchField; private List cachedRooms; private final Span totalUsers = new Span(); @Setter private Consumer removeMethod; - public RoomList(String nodeIdentifier, List rooms) { - this.nodeIdentifier = nodeIdentifier; - cachedRooms = rooms; + public RoomList(RNode node, RoomRepository roomRepository) { + this.node = node; + this.roomRepository = roomRepository; add(new H2("Rooms")); add(searchField = createSearchField()); add(roomsGrid = createGrid()); - update(rooms); + refresh(); } private TextField createSearchField() { @@ -106,7 +109,8 @@ public class RoomList extends VerticalLayout { }).setComparator((room1, room2) -> Boolean.compare(room1.locked(), room2.locked())).setSortable(true) .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); return grid; @@ -134,8 +138,7 @@ public class RoomList extends VerticalLayout { private void clickDetailsButton(RRoom.Short room) { getUI().ifPresent(ui -> { - ui.navigate("/nodes/" + nodeIdentifier + - "/rooms/" + room.id()); + ui.navigate("/nodes/%s/rooms/%s".formatted(node.getId(), room.id())); }); } @@ -173,17 +176,6 @@ public class RoomList extends VerticalLayout { dialog.open(); } - public void update(List 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) { if (removeMethod != null) { removeMethod.accept(room); @@ -197,4 +189,16 @@ public class RoomList extends VerticalLayout { 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); + } } diff --git a/control-panel/src/main/java/ru/dragonestia/picker/cp/page/NodeDetailsPage.java b/control-panel/src/main/java/ru/dragonestia/picker/cp/page/NodeDetailsPage.java index a439eb3..61bfe03 100644 --- a/control-panel/src/main/java/ru/dragonestia/picker/cp/page/NodeDetailsPage.java +++ b/control-panel/src/main/java/ru/dragonestia/picker/cp/page/NodeDetailsPage.java @@ -41,10 +41,10 @@ public class NodeDetailsPage extends VerticalLayout implements BeforeEnterObserv public void beforeEnter(BeforeEnterEvent event) { node = paramsExtractor.extractNodeId(event); - initComponents(node, roomRepository.all(node, RoomRepository.ALL_DETAILS)); + initComponents(node); } - private void initComponents(RNode node, List rooms) { + private void initComponents(RNode node) { add(NavPath.toNode(node.getId())); printNodeDetails(node); add(new Hr()); @@ -55,14 +55,14 @@ public class NodeDetailsPage extends VerticalLayout implements BeforeEnterObserv } catch (Error error) { return new RegisterRoom.Response(true, error.getMessage()); } finally { - roomList.update(roomRepository.all(node, RoomRepository.ALL_DETAILS)); + roomList.refresh(); } })); add(new Hr()); - add(roomList = new RoomList(node.getId(), rooms)); + add(roomList = new RoomList(node, roomRepository)); roomList.setRemoveMethod(room -> { roomRepository.remove(node, room); - roomList.update(roomRepository.all(node, RoomRepository.ALL_DETAILS)); + roomList.refresh(); }); }