feat: implemented appending and deleting answers

This commit is contained in:
Andrey Terentev 2025-01-16 02:12:00 +07:00
parent 726904e939
commit 6419f59937

View File

@ -25,7 +25,7 @@ public class DialogEditor extends VerticalLayout {
private final TextArea fieldComment;
private final TextArea fieldText;
private final Button buttonNewAnswer;
private final VerticalLayout layoutAnswers;
private final AnswersLayout layoutAnswers;
private final ArrayList<AnswerComponent> answers = new ArrayList<>();
public DialogEditor(DialogueContext ctx) {
@ -45,9 +45,7 @@ public class DialogEditor extends VerticalLayout {
add(new H3("Ответы диалога"));
add(buttonNewAnswer = createButtonNewAnswer());
add(layoutAnswers = new VerticalLayout());
layoutAnswers.getStyle().set("border", "2px solid #1C6EA4");
layoutAnswers.getStyle().set("border-radius", "26px");
add(layoutAnswers = new AnswersLayout());
updateAnswers();
}
@ -78,7 +76,14 @@ public class DialogEditor extends VerticalLayout {
return;
}
answers.add(new AnswerComponent());
var component = new AnswerComponent();
component.onDelete = answer -> {
answers.removeIf(target -> target.uuid.equals(answer.uuid));
updateAnswers();
};
answers.add(component);
updateAnswers();
});
button.addThemeVariants(ButtonVariant.LUMO_SUCCESS, ButtonVariant.LUMO_PRIMARY);
@ -94,6 +99,14 @@ public class DialogEditor extends VerticalLayout {
}
}
private static class AnswersLayout extends VerticalLayout {
private AnswersLayout() {
getStyle().set("border", "2px solid #1C6EA4");
getStyle().set("border-radius", "26px");
}
}
private static class AnswerComponent extends VerticalLayout {
private final UUID uuid = UUID.randomUUID();
@ -109,6 +122,7 @@ public class DialogEditor extends VerticalLayout {
commentDetail.setWidth("100%");
commentDetail.add(fieldComment = createFieldComment());
add(commentDetail);
add(createButtonDelete());
getStyle().set("background-color", "#EEEEEE");
getStyle().set("border-radius", "26px");
@ -130,5 +144,15 @@ public class DialogEditor extends VerticalLayout {
field.setPlaceholder("Какая-то заметка для разработчика");
return field;
}
private Button createButtonDelete() {
var button = new Button("Удалить ответ", e -> {
if (onDelete != null) onDelete.accept(this);
});
button.addThemeVariants(ButtonVariant.LUMO_ERROR, ButtonVariant.LUMO_PRIMARY);
button.setPrefixComponent(VaadinIcon.TRASH.create());
button.setWidth(100, Unit.PERCENTAGE);
return button;
}
}
}