Skip to content

Commit

Permalink
Fix LocaleContext issues on dialogs on root context
Browse files Browse the repository at this point in the history
 - info.magnolia.ui.dialog.actions.OpenDialogAction initializes the localeContext based on the valueContext. When it is not set (was not set on root context), the localeContext was not being set, which is required for some fields (e.g. multi value)
  • Loading branch information
eschleb committed Feb 28, 2024
1 parent d05586a commit 96ca8f2
Showing 1 changed file with 21 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@
import info.magnolia.i18nsystem.I18nizer;
import info.magnolia.ui.UIComponent;
import info.magnolia.ui.ValueContext;
import info.magnolia.ui.api.action.ActionExecutionException;
import info.magnolia.ui.api.i18n.I18NAuthoringSupport;
import info.magnolia.ui.datasource.jcr.JcrDatasource;
import info.magnolia.ui.dialog.DialogDefinition;
import info.magnolia.ui.dialog.DialogDefinitionRegistry;
import info.magnolia.ui.dialog.actions.OpenDialogAction;
Expand All @@ -13,17 +15,23 @@

public class OpenCreateDialogAction extends OpenDialogAction<Node> {
private final OpenCreateDialogActionDefinition definition;
private final JcrDatasource jcrDatasource;
private final ValueContext<Node> valueContext;

public OpenCreateDialogAction(
final OpenCreateDialogActionDefinition definition,
final LocaleContext localeContext,
final JcrDatasource jcrDatasource,
final ValueContext<Node> valueContext,
final UIComponent parentView,
final I18NAuthoringSupport<Node> i18NAuthoringSupport,
final DialogDefinitionRegistry dialogDefinitionRegistry,
final I18nizer i18nizer) {
final I18nizer i18nizer
) {
super(definition, localeContext, valueContext, parentView, i18NAuthoringSupport, dialogDefinitionRegistry, i18nizer);
this.definition = definition;
this.jcrDatasource = jcrDatasource;
this.valueContext = valueContext;
}

@Override
Expand All @@ -32,4 +40,16 @@ protected DialogDefinition getDialogDefinition(final DialogDefinitionRegistry di
dialogDefinition.getActions().put("commit", definition.getCommitAction()); //we can't generate a new map due to byteBuddy (I18nizer), but since it is a mutable hash map this is fine
return i18nizer.decorate(dialogDefinition);
}

@Override
public void execute() throws ActionExecutionException {
try {
if (valueContext.getSingle().isEmpty()) {
valueContext.set(jcrDatasource.getRoot());
}
super.execute();
} catch (Exception e) {
throw new ActionExecutionException(e);
}
}
}

0 comments on commit 96ca8f2

Please sign in to comment.