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.Unit;
import com.vaadin.flow.component.button.Button; import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.button.ButtonVariant; 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.details.Details;
import com.vaadin.flow.component.html.H2; import com.vaadin.flow.component.html.H2;
import com.vaadin.flow.component.html.Span; 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.RNode;
import ru.dragonestia.picker.api.repository.response.type.type.PickingMode; 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 { public class RegisterNode extends Details {
private final Function<RNode, Response> onSubmit; private final BiFunction<RNode, Boolean, Response> onSubmit;
private final TextField identifierField; private final TextField identifierField;
private final RadioButtonGroup<PickingMode> modeRadio; 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")); super(new H2("Register node"));
this.onSubmit = onSubmit; this.onSubmit = onSubmit;
var layout = new VerticalLayout(); var layout = new VerticalLayout();
layout.add(identifierField = createNodeIdentifierField()); layout.add(identifierField = createNodeIdentifierField());
layout.add(modeRadio = createModeRadio()); layout.add(modeRadio = createModeRadio());
layout.add(persistField = createPersistField());
layout.add(createSubmitButton()); layout.add(createSubmitButton());
add(layout); add(layout);
@ -49,6 +52,10 @@ public class RegisterNode extends Details {
return field; return field;
} }
private Checkbox createPersistField() {
return new Checkbox("Persist", false);
}
private Button createSubmitButton() { private Button createSubmitButton() {
var button = new Button("Register"); var button = new Button("Register");
button.addThemeVariants(ButtonVariant.LUMO_PRIMARY); button.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
@ -70,6 +77,7 @@ public class RegisterNode extends Details {
public void clear() { public void clear() {
identifierField.clear(); identifierField.clear();
persistField.setValue(false);
} }
private @Nullable String validateForm(String identifier) { private @Nullable String validateForm(String identifier) {
@ -94,7 +102,7 @@ public class RegisterNode extends Details {
} }
var node = new RNode(nodeIdentifier, modeRadio.getValue()); var node = new RNode(nodeIdentifier, modeRadio.getValue());
var response = onSubmit.apply(node); var response = onSubmit.apply(node, persistField.getValue());
clear(); clear();
if (response.error()) { if (response.error()) {
Notifications.error(response.reason()); 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.RNode;
import ru.dragonestia.picker.api.repository.response.type.RRoom; import ru.dragonestia.picker.api.repository.response.type.RRoom;
import java.util.function.BiFunction;
import java.util.function.Function; import java.util.function.Function;
public class RegisterRoom extends Details { public class RegisterRoom extends Details {
private final RNode node; private final RNode node;
private final Function<RRoom, Response> onSubmit; private final BiFunction<RRoom, Boolean, Response> onSubmit;
private final TextField identifierField; private final TextField identifierField;
private final TextArea payloadField; private final TextArea payloadField;
private final Checkbox lockedField; 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")); super(new H2("Register room"));
this.node = node; this.node = node;
this.onSubmit = onSubmit; this.onSubmit = onSubmit;
@ -34,6 +36,7 @@ public class RegisterRoom extends Details {
layout.add(identifierField = createRoomIdentifierField()); layout.add(identifierField = createRoomIdentifierField());
layout.add(payloadField = createPayloadField()); layout.add(payloadField = createPayloadField());
layout.add(lockedField = createLockedField()); layout.add(lockedField = createLockedField());
layout.add(persistField = createPersistField());
layout.add(createSubmitButton()); layout.add(createSubmitButton());
add(layout); add(layout);
@ -73,6 +76,10 @@ public class RegisterRoom extends Details {
return field; return field;
} }
private Checkbox createPersistField() {
return new Checkbox("Persist", false);
}
private Button createSubmitButton() { private Button createSubmitButton() {
var button = new Button("Register"); var button = new Button("Register");
button.addThemeVariants(ButtonVariant.LUMO_PRIMARY); button.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
@ -84,6 +91,7 @@ public class RegisterRoom extends Details {
identifierField.clear(); identifierField.clear();
payloadField.clear(); payloadField.clear();
lockedField.setValue(false); lockedField.setValue(false);
persistField.setValue(false);
} }
private @Nullable String validateForm(String identifier) { 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()); var room = new RRoom(nodeIdentifier, node, RRoom.INFINITE_SLOTS, payloadField.getValue());
room.setLocked(lockedField.getValue()); room.setLocked(lockedField.getValue());
var response = onSubmit.apply(room); var response = onSubmit.apply(room, persistField.getValue());
clear(); clear();
if (response.error()) { if (response.error()) {
Notifications.error(response.reason()); Notifications.error(response.reason());

View File

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

View File

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

View File

@ -25,10 +25,11 @@ public class NodeRepositoryImpl implements NodeRepository {
private final RestUtil rest; private final RestUtil rest;
@Override @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 -> { rest.query("nodes", HttpMethod.POST, params -> {
params.put("nodeId", node.getId()); params.put("nodeId", node.getId());
params.put("method", node.getMode().name()); 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; private final RestUtil rest;
@Override @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 -> { rest.query("/nodes/" + room.getNodeId() + "/rooms", HttpMethod.POST, params -> {
params.put("roomId", room.getId()); params.put("roomId", room.getId());
params.put("slots", Integer.toString(room.getSlots())); params.put("slots", Integer.toString(room.getSlots()));
params.put("payload", room.getPayload()); params.put("payload", room.getPayload());
params.put("locked", Boolean.toString(room.isLocked())); params.put("locked", Boolean.toString(room.isLocked()));
params.put("persist", Boolean.toString(persist));
}); });
} }