Здравствуйте!
Версия 2.2.2, плагин 2.2.3 -241.
Часто пользуюсь бином Dialogs
и его различными вариациями. Но когда стилизуешь приложение, нет глобальной настройки для стилизации кнопок конкретно этих диалогов, к примеру нужно поменять тему кнопки "Отмена"
на Primary, Error
, кнопки "Ок"
на Primary, Success
, разнести кнопки подальше друг от друга и т.п.
У Vaadin есть Confirm Dialog, который по дефолту позволяет это делать, но он не используется в платформе. Dialogs разработки Jmix удобней в плане организации обработчиков и внедрения его в код контроллеров.
Также этот вопрос актуален для стандартных действий вроде удаления (пока только с ним столкнулся), т.к. там создаётся собственный диалог без доступа к тем же кнопкам (см. ниже):
Спойлер
protected <E> void performActionWithConfirmation(RemoveBuilder<E> builder, List<E> selectedItems) {
builder.getOrigin().getUI().ifPresent(ui -> {
Dialogs dialogs = Instantiator.get(ui).getOrCreate(Dialogs.class);
String header = builder.getConfirmationTitle() != null ?
builder.getConfirmationTitle() : messages.getMessage("dialogs.Confirmation");
String text = builder.getConfirmationMessage() != null ?
builder.getConfirmationMessage() : messages.getMessage("dialogs.Confirmation.Remove");
dialogs.createOptionDialog()
.withHeader(header)
.withText(text)
.withActions(
new DialogAction(DialogAction.Type.YES)
.withHandler(e -> performAction(builder, selectedItems))
.withVariant(ActionVariant.PRIMARY),
new DialogAction(DialogAction.Type.NO).withHandler(e -> {
focusListDataComponent(builder);
if (builder.getActionCancelledHandler() != null) {
ActionCancelledEvent<E> event =
new ActionCancelledEvent<>(builder.getOrigin(), selectedItems);
builder.getActionCancelledHandler().accept(event);
}
})
)
.open();
}
);
}
Можно конечно переопределить этот метод и подсунуть свой бин, но как-то слишком сложно для простого изменения темы кнопок)) Да и с Dialogs такой трюк не пройдёт, надо целиком подсовывать другую имплементацию.
Возможно сделать в ближайшее время либо возможность в диалогах набирать темы вручную (сейчас можно методом withVariant(ActionVariant)
, но только одну тему) или как это сделано в томе же Vaadin, сделать глобальную настройку?