From b0eecb708acb091048ba6ffee15a4cecab8aaba9 Mon Sep 17 00:00:00 2001 From: ScarletRedMan Date: Thu, 16 Nov 2023 21:03:11 +0700 Subject: [PATCH] Added search field --- .../loadbalancer/web/component/NodeList.java | 33 +++++++++++++++---- 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/LoadBalancerWeb/src/main/java/ru/dragonestia/loadbalancer/web/component/NodeList.java b/LoadBalancerWeb/src/main/java/ru/dragonestia/loadbalancer/web/component/NodeList.java index efaaa50..61d7a6b 100644 --- a/LoadBalancerWeb/src/main/java/ru/dragonestia/loadbalancer/web/component/NodeList.java +++ b/LoadBalancerWeb/src/main/java/ru/dragonestia/loadbalancer/web/component/NodeList.java @@ -2,7 +2,10 @@ package ru.dragonestia.loadbalancer.web.component; import com.vaadin.flow.component.grid.Grid; import com.vaadin.flow.component.html.H2; +import com.vaadin.flow.component.icon.Icon; +import com.vaadin.flow.component.icon.VaadinIcon; import com.vaadin.flow.component.orderedlayout.VerticalLayout; +import com.vaadin.flow.component.textfield.TextField; import ru.dragonestia.loadbalancer.web.model.Node; import java.util.List; @@ -10,16 +13,38 @@ import java.util.List; public class NodeList extends VerticalLayout { private final Grid nodesGrid; + private final TextField searchField; + private List cachedNodes; public NodeList(List nodes) { super(); + cachedNodes = nodes; + add(new H2("Nodes")); + add(searchField = createSearchField()); add(nodesGrid = createGrid()); update(nodes); } + private TextField createSearchField() { + var field = new TextField("Search node"); + field.setPrefixComponent(new Icon(VaadinIcon.SEARCH)); + field.setClearButtonVisible(true); + field.setHelperText("Press Enter to search"); + field.addValueChangeListener(event -> applySearch(event.getValue())); + return field; + } + + private void applySearch(String input) { + var temp = input.trim(); + + nodesGrid.setItems(cachedNodes.stream() + .filter(node -> node.identifier().startsWith(temp)) + .toList()); + } + private Grid createGrid() { var grid = new Grid<>(Node.class, false); grid.addColumn(Node::identifier).setHeader("Identifier"); @@ -28,7 +53,8 @@ public class NodeList extends VerticalLayout { } public void update(List nodes) { - nodesGrid.setItems(nodes); + cachedNodes = nodes; + applySearch(searchField.getValue()); } private void registerNode(Node node) { @@ -36,9 +62,4 @@ public class NodeList extends VerticalLayout { update(List.of(node)); } - - public interface OnRegister { - - List register(Node node); - } }