Added refresh button for NodeList
This commit is contained in:
parent
d40222d048
commit
9650ecd358
@ -4,6 +4,7 @@ import com.vaadin.flow.component.Html;
|
||||
import com.vaadin.flow.component.button.Button;
|
||||
import com.vaadin.flow.component.button.ButtonVariant;
|
||||
import com.vaadin.flow.component.dialog.Dialog;
|
||||
import com.vaadin.flow.component.grid.ColumnTextAlign;
|
||||
import com.vaadin.flow.component.grid.Grid;
|
||||
import com.vaadin.flow.component.html.H2;
|
||||
import com.vaadin.flow.component.icon.Icon;
|
||||
@ -13,28 +14,29 @@ import com.vaadin.flow.component.orderedlayout.VerticalLayout;
|
||||
import com.vaadin.flow.component.textfield.TextField;
|
||||
import com.vaadin.flow.data.value.ValueChangeMode;
|
||||
import lombok.Setter;
|
||||
import ru.dragonestia.picker.api.repository.NodeRepository;
|
||||
import ru.dragonestia.picker.api.repository.response.type.RNode;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public class NodeList extends VerticalLayout {
|
||||
public class NodeList extends VerticalLayout implements RefreshableTable {
|
||||
|
||||
private final NodeRepository nodeRepository;
|
||||
private final Grid<RNode> nodesGrid;
|
||||
private final TextField searchField;
|
||||
private List<RNode> cachedNodes;
|
||||
@Setter private Consumer<String> removeMethod;
|
||||
|
||||
public NodeList(List<RNode> nodes) {
|
||||
public NodeList(NodeRepository nodeRepository) {
|
||||
super();
|
||||
|
||||
cachedNodes = nodes;
|
||||
this.nodeRepository = nodeRepository;
|
||||
|
||||
add(new H2("Nodes"));
|
||||
add(searchField = createSearchField());
|
||||
add(nodesGrid = createGrid());
|
||||
|
||||
update(nodes);
|
||||
refresh();
|
||||
}
|
||||
|
||||
private TextField createSearchField() {
|
||||
@ -60,7 +62,8 @@ public class NodeList extends VerticalLayout {
|
||||
|
||||
grid.addColumn(RNode::getId).setHeader("Identifier").setSortable(true);
|
||||
grid.addColumn(node -> node.getMode().getName()).setHeader("Mode").setSortable(true);
|
||||
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;
|
||||
@ -124,14 +127,15 @@ public class NodeList extends VerticalLayout {
|
||||
dialog.open();
|
||||
}
|
||||
|
||||
public void update(List<RNode> nodes) {
|
||||
cachedNodes = nodes;
|
||||
applySearch(searchField.getValue());
|
||||
}
|
||||
|
||||
private void removeNode(RNode node) {
|
||||
if (removeMethod != null) {
|
||||
removeMethod.accept(node.getId());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void refresh() {
|
||||
cachedNodes = nodeRepository.all(NodeRepository.ALL_DETAILS);
|
||||
applySearch(searchField.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,26 @@
|
||||
package ru.dragonestia.picker.cp.component;
|
||||
|
||||
import com.vaadin.flow.component.button.Button;
|
||||
import com.vaadin.flow.component.button.ButtonVariant;
|
||||
import com.vaadin.flow.component.icon.Icon;
|
||||
import com.vaadin.flow.component.icon.VaadinIcon;
|
||||
import com.vaadin.flow.component.notification.Notification;
|
||||
|
||||
public interface RefreshableTable {
|
||||
|
||||
default Button createRefreshButton() {
|
||||
var button = new Button("Refresh", new Icon(VaadinIcon.REFRESH));
|
||||
button.addThemeVariants(ButtonVariant.LUMO_CONTRAST);
|
||||
button.addClickListener(event -> {
|
||||
refresh();
|
||||
|
||||
var notification = new Notification("Refreshed!");
|
||||
notification.setDuration(1000);
|
||||
notification.setPosition(Notification.Position.BOTTOM_END);
|
||||
notification.open();
|
||||
});
|
||||
return button;
|
||||
}
|
||||
|
||||
void refresh();
|
||||
}
|
||||
@ -33,7 +33,7 @@ public class NodesPage extends VerticalLayout {
|
||||
add(nodeList = createNodeListElement());
|
||||
nodeList.setRemoveMethod(nodeIdentifier -> {
|
||||
nodeRepository.remove(nodeIdentifier);
|
||||
nodeList.update(nodeRepository.all(NodeRepository.ALL_DETAILS));
|
||||
nodeList.refresh();
|
||||
});
|
||||
}
|
||||
|
||||
@ -45,12 +45,12 @@ public class NodesPage extends VerticalLayout {
|
||||
} catch (ApiException ex) {
|
||||
return new RegisterNode.Response(true, ex.getMessage());
|
||||
} finally {
|
||||
nodeList.update(nodeRepository.all(NodeRepository.ALL_DETAILS));
|
||||
nodeList.refresh();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
protected NodeList createNodeListElement() {
|
||||
return new NodeList(nodeRepository.all(NodeRepository.ALL_DETAILS));
|
||||
return new NodeList(nodeRepository);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user