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 fieldComment;
private final TextArea fieldText; private final TextArea fieldText;
private final Button buttonNewAnswer; private final Button buttonNewAnswer;
private final VerticalLayout layoutAnswers; private final AnswersLayout layoutAnswers;
private final ArrayList<AnswerComponent> answers = new ArrayList<>(); private final ArrayList<AnswerComponent> answers = new ArrayList<>();
public DialogEditor(DialogueContext ctx) { public DialogEditor(DialogueContext ctx) {
@ -45,9 +45,7 @@ public class DialogEditor extends VerticalLayout {
add(new H3("Ответы диалога")); add(new H3("Ответы диалога"));
add(buttonNewAnswer = createButtonNewAnswer()); add(buttonNewAnswer = createButtonNewAnswer());
add(layoutAnswers = new VerticalLayout()); add(layoutAnswers = new AnswersLayout());
layoutAnswers.getStyle().set("border", "2px solid #1C6EA4");
layoutAnswers.getStyle().set("border-radius", "26px");
updateAnswers(); updateAnswers();
} }
@ -78,7 +76,14 @@ public class DialogEditor extends VerticalLayout {
return; 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(); updateAnswers();
}); });
button.addThemeVariants(ButtonVariant.LUMO_SUCCESS, ButtonVariant.LUMO_PRIMARY); 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 static class AnswerComponent extends VerticalLayout {
private final UUID uuid = UUID.randomUUID(); private final UUID uuid = UUID.randomUUID();
@ -109,6 +122,7 @@ public class DialogEditor extends VerticalLayout {
commentDetail.setWidth("100%"); commentDetail.setWidth("100%");
commentDetail.add(fieldComment = createFieldComment()); commentDetail.add(fieldComment = createFieldComment());
add(commentDetail); add(commentDetail);
add(createButtonDelete());
getStyle().set("background-color", "#EEEEEE"); getStyle().set("background-color", "#EEEEEE");
getStyle().set("border-radius", "26px"); getStyle().set("border-radius", "26px");
@ -130,5 +144,15 @@ public class DialogEditor extends VerticalLayout {
field.setPlaceholder("Какая-то заметка для разработчика"); field.setPlaceholder("Какая-то заметка для разработчика");
return field; 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;
}
} }
} }