From 6419f599376705782c893106160015b95839c0cd Mon Sep 17 00:00:00 2001 From: ScarletRedMan Date: Thu, 16 Jan 2025 02:12:00 +0700 Subject: [PATCH] feat: implemented appending and deleting answers --- .../editor/component/DialogEditor.java | 34 ++++++++++++++++--- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/editor/src/main/java/ru/dragonestia/editor/component/DialogEditor.java b/editor/src/main/java/ru/dragonestia/editor/component/DialogEditor.java index 76b711b..340a2cc 100644 --- a/editor/src/main/java/ru/dragonestia/editor/component/DialogEditor.java +++ b/editor/src/main/java/ru/dragonestia/editor/component/DialogEditor.java @@ -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 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; + } } }