Added refresh button for UserSearch

This commit is contained in:
Andrey Terentev 2024-02-19 16:53:18 +07:00 committed by Andrey Terentev
parent 72bf68255c
commit c88c71c5c3

View File

@ -17,26 +17,29 @@ import org.springframework.beans.factory.annotation.Autowired;
import ru.dragonestia.picker.api.repository.UserRepository; import ru.dragonestia.picker.api.repository.UserRepository;
import ru.dragonestia.picker.api.repository.details.UserDetails; import ru.dragonestia.picker.api.repository.details.UserDetails;
import ru.dragonestia.picker.api.repository.response.type.RUser; import ru.dragonestia.picker.api.repository.response.type.RUser;
import ru.dragonestia.picker.cp.component.Notifications; import ru.dragonestia.picker.cp.component.RefreshableTable;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
@PageTitle("Search users") @PageTitle("Search users")
@Route(value = "/users", layout = MainLayout.class) @Route(value = "/users", layout = MainLayout.class)
public class UserSearchPage extends VerticalLayout { public class UserSearchPage extends VerticalLayout implements RefreshableTable {
private final UserRepository userRepository; private final UserRepository userRepository;
private final TextField fieldUsername; private final TextField fieldUsername;
private final Grid<RUser> userGrid; private final Grid<RUser> userGrid;
private final Span foundUsers;
private List<RUser> cachedUsers = new LinkedList<>(); private List<RUser> cachedUsers = new LinkedList<>();
@Autowired @Autowired
public UserSearchPage(UserRepository userRepository) { public UserSearchPage(UserRepository userRepository) {
this.userRepository = userRepository; this.userRepository = userRepository;
foundUsers = new Span();
add(fieldUsername = createUsernameInputField()); add(fieldUsername = createUsernameInputField());
add(userGrid = createUserGrid()); add(userGrid = createUserGrid());
refresh();
} }
private TextField createUsernameInputField() { private TextField createUsernameInputField() {
@ -50,7 +53,7 @@ public class UserSearchPage extends VerticalLayout {
var button = new Button(new Icon(VaadinIcon.SEARCH)); var button = new Button(new Icon(VaadinIcon.SEARCH));
button.addThemeVariants(ButtonVariant.LUMO_PRIMARY); button.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
button.getStyle().set("color", "#FFFFFF"); button.getStyle().set("color", "#FFFFFF");
button.addClickListener(event -> search(fieldUsername.getValue().trim())); button.addClickListener(event -> refresh());
button.addClickShortcut(Key.ENTER); button.addClickShortcut(Key.ENTER);
field.setSuffixComponent(button); field.setSuffixComponent(button);
@ -61,7 +64,7 @@ public class UserSearchPage extends VerticalLayout {
var grid = new Grid<RUser>(); var grid = new Grid<RUser>();
grid.addColumn(RUser::getId).setHeader("Identifier").setSortable(true) grid.addColumn(RUser::getId).setHeader("Identifier").setSortable(true)
.setFooter("Found %s users".formatted(cachedUsers.size())); .setFooter(foundUsers);
grid.addColumn(user -> user.getDetail(UserDetails.COUNT_ROOMS)).setComparator((user1, user2) -> { grid.addColumn(user -> user.getDetail(UserDetails.COUNT_ROOMS)).setComparator((user1, user2) -> {
var r1 = Integer.parseInt(user1.getDetail(UserDetails.COUNT_ROOMS)); var r1 = Integer.parseInt(user1.getDetail(UserDetails.COUNT_ROOMS));
@ -77,7 +80,7 @@ public class UserSearchPage extends VerticalLayout {
getUI().ifPresent(ui -> ui.navigate("/users/" + user.getId())); getUI().ifPresent(ui -> ui.navigate("/users/" + user.getId()));
}); });
return button; return button;
}).setTextAlign(ColumnTextAlign.END).setFrozenToEnd(true); }).setTextAlign(ColumnTextAlign.END).setFrozenToEnd(true).setHeader(createRefreshButton());
grid.setMultiSort(true, Grid.MultiSortPriority.APPEND); grid.setMultiSort(true, Grid.MultiSortPriority.APPEND);
return grid; return grid;
@ -86,4 +89,10 @@ public class UserSearchPage extends VerticalLayout {
private void search(String input) { private void search(String input) {
userGrid.setItems(cachedUsers = userRepository.search(input, UserRepository.ALL_DETAILS)); userGrid.setItems(cachedUsers = userRepository.search(input, UserRepository.ALL_DETAILS));
} }
@Override
public void refresh() {
search(fieldUsername.getValue().trim());
foundUsers.setText("Found %s users".formatted(cachedUsers.size()));
}
} }