Implemented sorting RoomList
This commit is contained in:
parent
bbbcc64abe
commit
2649bdbb72
@ -19,6 +19,7 @@ import lombok.extern.log4j.Log4j2;
|
|||||||
import ru.dragonestia.picker.api.repository.details.RoomDetails;
|
import ru.dragonestia.picker.api.repository.details.RoomDetails;
|
||||||
import ru.dragonestia.picker.api.repository.response.type.RRoom;
|
import ru.dragonestia.picker.api.repository.response.type.RRoom;
|
||||||
|
|
||||||
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
@ -63,7 +64,8 @@ public class RoomList extends VerticalLayout {
|
|||||||
|
|
||||||
private Grid<RRoom.Short> createGrid() {
|
private Grid<RRoom.Short> createGrid() {
|
||||||
var grid = new Grid<>(RRoom.Short.class, false);
|
var grid = new Grid<>(RRoom.Short.class, false);
|
||||||
grid.addColumn(RRoom.Short::id).setHeader("Identifier");
|
|
||||||
|
grid.addColumn(RRoom.Short::id).setHeader("Identifier").setSortable(true);
|
||||||
|
|
||||||
grid.addComponentColumn(room -> {
|
grid.addComponentColumn(room -> {
|
||||||
var result = new Span();
|
var result = new Span();
|
||||||
@ -74,12 +76,24 @@ public class RoomList extends VerticalLayout {
|
|||||||
result.setText(Integer.toString(room.slots()));
|
result.setText(Integer.toString(room.slots()));
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}).setHeader("Slots").setTextAlign(ColumnTextAlign.CENTER);
|
}).setHeader("Slots").setComparator((room1, room2) -> {
|
||||||
|
var r1 = room1.slots() == -1? Integer.MAX_VALUE : room1.slots();
|
||||||
|
var r2 = room2.slots() == -1? Integer.MAX_VALUE : room2.slots();
|
||||||
|
|
||||||
grid.addColumn(this::getUsers).setHeader("Users").setTextAlign(ColumnTextAlign.CENTER).setFooter(totalUsers);
|
return Integer.compare(r1, r2);
|
||||||
|
}).setSortable(true).setTextAlign(ColumnTextAlign.CENTER);
|
||||||
|
|
||||||
grid.addColumn(room -> UserList.getUsingPercentage(room.slots(), getUsers(room)))
|
grid.addColumn(this::getUsers).setHeader("Users")
|
||||||
.setHeader("Occupancy").setTextAlign(ColumnTextAlign.CENTER);
|
.setComparator((room1, room2) -> Integer.compare(getUsers(room1), getUsers(room2))).setSortable(true)
|
||||||
|
.setTextAlign(ColumnTextAlign.CENTER).setFooter(totalUsers);
|
||||||
|
|
||||||
|
grid.addColumn(room -> Math.max(UserList.getUsingPercentage(room.slots(), getUsers(room)), 0) + "%")
|
||||||
|
.setComparator((room1, room2) -> {
|
||||||
|
var p1 = UserList.getUsingPercentage(room1.slots(), getUsers(room1));
|
||||||
|
var p2 = UserList.getUsingPercentage(room2.slots(), getUsers(room2));
|
||||||
|
|
||||||
|
return Integer.compare(p1, p2);
|
||||||
|
}).setHeader("Occupancy").setTextAlign(ColumnTextAlign.CENTER);
|
||||||
|
|
||||||
grid.addComponentColumn(room -> {
|
grid.addComponentColumn(room -> {
|
||||||
var result = new Span();
|
var result = new Span();
|
||||||
@ -90,9 +104,12 @@ public class RoomList extends VerticalLayout {
|
|||||||
result.setText("No");
|
result.setText("No");
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}).setHeader("Locked").setTextAlign(ColumnTextAlign.CENTER);
|
}).setComparator((room1, room2) -> Boolean.compare(room1.locked(), room2.locked())).setSortable(true)
|
||||||
|
.setHeader("Locked").setTextAlign(ColumnTextAlign.CENTER);
|
||||||
|
|
||||||
grid.addComponentColumn(this::createManageButtons).setHeader("Manage");
|
grid.addComponentColumn(this::createManageButtons).setHeader("Manage");
|
||||||
|
|
||||||
|
grid.setMultiSort(true, Grid.MultiSortPriority.APPEND);
|
||||||
return grid;
|
return grid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -76,7 +76,7 @@ public class UserList extends VerticalLayout {
|
|||||||
cachedUsers = users;
|
cachedUsers = users;
|
||||||
usersGrid.setItems(users);
|
usersGrid.setItems(users);
|
||||||
totalUsers.setText("Total users: " + users.size());
|
totalUsers.setText("Total users: " + users.size());
|
||||||
occupancy.setText("Occupancy: %s".formatted(getUsingPercentage(room.getSlots(), users.size())));
|
occupancy.setText("Occupancy: %s".formatted(getUsingPercentage(room.getSlots(), users.size()) + "%"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateButtonRemove() {
|
private void updateButtonRemove() {
|
||||||
@ -92,9 +92,9 @@ public class UserList extends VerticalLayout {
|
|||||||
buttonRemove.setText("Unlink users(" + users.size() + ")");
|
buttonRemove.setText("Unlink users(" + users.size() + ")");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getUsingPercentage(int slots, int usedSlots) {
|
public static int getUsingPercentage(int slots, int usedSlots) {
|
||||||
if (slots == RRoom.INFINITE_SLOTS) return "N/A";
|
if (slots == RRoom.INFINITE_SLOTS) return -1;
|
||||||
double percent = usedSlots / (double) slots * 100;
|
double percent = usedSlots / (double) slots * 100;
|
||||||
return ((int) percent) + "%";
|
return (int) percent;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user