Added checkboxes for Persist field

This commit is contained in:
Andrey Terentev 2024-02-28 11:07:03 +07:00 committed by Andrey Terentev
parent d00eaa0a7d
commit 6dba58126a
6 changed files with 31 additions and 13 deletions

View File

@ -4,6 +4,7 @@ import com.vaadin.flow.component.Component;
import com.vaadin.flow.component.Unit;
import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.button.ButtonVariant;
import com.vaadin.flow.component.checkbox.Checkbox;
import com.vaadin.flow.component.details.Details;
import com.vaadin.flow.component.html.H2;
import com.vaadin.flow.component.html.Span;
@ -17,21 +18,23 @@ import org.springframework.lang.Nullable;
import ru.dragonestia.picker.api.repository.response.type.RNode;
import ru.dragonestia.picker.api.repository.response.type.type.PickingMode;
import java.util.function.Function;
import java.util.function.BiFunction;
public class RegisterNode extends Details {
private final Function<RNode, Response> onSubmit;
private final BiFunction<RNode, Boolean, Response> onSubmit;
private final TextField identifierField;
private final RadioButtonGroup<PickingMode> modeRadio;
private final Checkbox persistField;
public RegisterNode(Function<RNode, Response> onSubmit) {
public RegisterNode(BiFunction<RNode, Boolean, Response> onSubmit) {
super(new H2("Register node"));
this.onSubmit = onSubmit;
var layout = new VerticalLayout();
layout.add(identifierField = createNodeIdentifierField());
layout.add(modeRadio = createModeRadio());
layout.add(persistField = createPersistField());
layout.add(createSubmitButton());
add(layout);
@ -49,6 +52,10 @@ public class RegisterNode extends Details {
return field;
}
private Checkbox createPersistField() {
return new Checkbox("Persist", false);
}
private Button createSubmitButton() {
var button = new Button("Register");
button.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
@ -70,6 +77,7 @@ public class RegisterNode extends Details {
public void clear() {
identifierField.clear();
persistField.setValue(false);
}
private @Nullable String validateForm(String identifier) {
@ -94,7 +102,7 @@ public class RegisterNode extends Details {
}
var node = new RNode(nodeIdentifier, modeRadio.getValue());
var response = onSubmit.apply(node);
var response = onSubmit.apply(node, persistField.getValue());
clear();
if (response.error()) {
Notifications.error(response.reason());

View File

@ -14,17 +14,19 @@ import org.springframework.lang.Nullable;
import ru.dragonestia.picker.api.repository.response.type.RNode;
import ru.dragonestia.picker.api.repository.response.type.RRoom;
import java.util.function.BiFunction;
import java.util.function.Function;
public class RegisterRoom extends Details {
private final RNode node;
private final Function<RRoom, Response> onSubmit;
private final BiFunction<RRoom, Boolean, Response> onSubmit;
private final TextField identifierField;
private final TextArea payloadField;
private final Checkbox lockedField;
private final Checkbox persistField;
public RegisterRoom(RNode node, Function<RRoom, Response> onSubmit) {
public RegisterRoom(RNode node, BiFunction<RRoom, Boolean, Response> onSubmit) {
super(new H2("Register room"));
this.node = node;
this.onSubmit = onSubmit;
@ -34,6 +36,7 @@ public class RegisterRoom extends Details {
layout.add(identifierField = createRoomIdentifierField());
layout.add(payloadField = createPayloadField());
layout.add(lockedField = createLockedField());
layout.add(persistField = createPersistField());
layout.add(createSubmitButton());
add(layout);
@ -73,6 +76,10 @@ public class RegisterRoom extends Details {
return field;
}
private Checkbox createPersistField() {
return new Checkbox("Persist", false);
}
private Button createSubmitButton() {
var button = new Button("Register");
button.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
@ -84,6 +91,7 @@ public class RegisterRoom extends Details {
identifierField.clear();
payloadField.clear();
lockedField.setValue(false);
persistField.setValue(false);
}
private @Nullable String validateForm(String identifier) {
@ -109,7 +117,7 @@ public class RegisterRoom extends Details {
var room = new RRoom(nodeIdentifier, node, RRoom.INFINITE_SLOTS, payloadField.getValue());
room.setLocked(lockedField.getValue());
var response = onSubmit.apply(room);
var response = onSubmit.apply(room, persistField.getValue());
clear();
if (response.error()) {
Notifications.error(response.reason());

View File

@ -43,9 +43,9 @@ public class NodeDetailsPage extends VerticalLayout implements BeforeEnterObserv
add(NavPath.toNode(node.getId()));
printNodeDetails(node);
add(new Hr());
add(registerRoom = new RegisterRoom(node, (room) -> {
add(registerRoom = new RegisterRoom(node, (room, persist) -> {
try {
roomRepository.register(room);
roomRepository.register(room, persist);
return new RegisterRoom.Response(false, null);
} catch (Error error) {
return new RegisterRoom.Response(true, error.getMessage());

View File

@ -38,9 +38,9 @@ public class NodesPage extends VerticalLayout {
}
protected RegisterNode createRegisterNodeElement() {
return new RegisterNode(node -> {
return new RegisterNode((node, persist) -> {
try {
nodeRepository.register(node);
nodeRepository.register(node, persist);
return new RegisterNode.Response(false, "");
} catch (ApiException ex) {
return new RegisterNode.Response(true, ex.getMessage());

View File

@ -25,10 +25,11 @@ public class NodeRepositoryImpl implements NodeRepository {
private final RestUtil rest;
@Override
public void register(RNode node) throws InvalidNodeIdentifierException, NodeAlreadyExistException {
public void register(RNode node, boolean persist) throws InvalidNodeIdentifierException, NodeAlreadyExistException {
rest.query("nodes", HttpMethod.POST, params -> {
params.put("nodeId", node.getId());
params.put("method", node.getMode().name());
params.put("persist", Boolean.toString(persist));
});
}

View File

@ -27,12 +27,13 @@ public class RoomRepositoryImpl implements RoomRepository {
private final RestUtil rest;
@Override
public void register(RRoom room) throws NodeNotFoundException, InvalidRoomIdentifierException, RoomAlreadyExistException {
public void register(RRoom room, boolean persist) throws NodeNotFoundException, InvalidRoomIdentifierException, RoomAlreadyExistException {
rest.query("/nodes/" + room.getNodeId() + "/rooms", HttpMethod.POST, params -> {
params.put("roomId", room.getId());
params.put("slots", Integer.toString(room.getSlots()));
params.put("payload", room.getPayload());
params.put("locked", Boolean.toString(room.isLocked()));
params.put("persist", Boolean.toString(persist));
});
}