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 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<RRoom.Short> roomsGrid;
private final TextField searchField;
private List<RRoom.Short> cachedRooms;
private final Span totalUsers = new Span();
@Setter private Consumer<RRoom.Short> removeMethod;
public RoomList(String nodeIdentifier, List<RRoom.Short> 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<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) {
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);
}
}

View File

@ -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<RRoom.Short> 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();
});
}