Added refresh button for RoomList
This commit is contained in:
parent
9650ecd358
commit
a95700f7d3
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user