Skip to content
This repository has been archived by the owner on Mar 31, 2022. It is now read-only.

Commit

Permalink
Add ScreenConfigurer callback to ScreenFacet #662
Browse files Browse the repository at this point in the history
  • Loading branch information
glebfox committed Oct 8, 2021
1 parent 45e26dc commit 533b0ef
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 0 deletions.
24 changes: 24 additions & 0 deletions ui/src/main/java/io/jmix/ui/component/ScreenFacet.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import io.jmix.ui.meta.StudioFacet;
import io.jmix.ui.meta.StudioProperties;
import io.jmix.ui.meta.StudioProperty;
import io.jmix.ui.screen.Install;
import io.jmix.ui.screen.OpenMode;
import io.jmix.ui.screen.Screen;
import io.jmix.ui.screen.ScreenOptions;
Expand Down Expand Up @@ -110,6 +111,29 @@ public interface ScreenFacet<S extends Screen> extends Facet, ApplicationContext
@Nullable
Supplier<ScreenOptions> getOptionsProvider();

/**
* @return the screen configurer or {@code null} of not set
*/
@Nullable
Consumer<S> getScreenConfigurer();

/**
* Sets the screen configurer. Use the configurer if you need to
* provide parameters to the opened screen through setters.
*
* The preferred way to set the configurer is using a controller
* method annotated with {@link Install}, e.g.:
* <pre>
* &#64;Install(to = "userBrowseFacet", subject = "screenConfigurer")
* private void userBrowseFacetScreenConfigurer(UserBrowse userBrowse) {
* userBrowse.setSomeParameter(someValue);
* }
* </pre>
*
* @param screenConfigurer the configurer to set.
*/
void setScreenConfigurer(Consumer<S> screenConfigurer);

/**
* Sets properties that will be injected into opened screen via public setters.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ public abstract class AbstractScreenFacet<S extends Screen> extends AbstractFace

protected OpenMode openMode = OpenMode.NEW_TAB;

protected Consumer<S> screenConfigurer;
protected Supplier<ScreenOptions> optionsProvider;
protected Collection<UiControllerProperty> properties;

Expand Down Expand Up @@ -108,6 +109,17 @@ public Supplier<ScreenOptions> getOptionsProvider() {
return optionsProvider;
}

@Nullable
@Override
public Consumer<S> getScreenConfigurer() {
return screenConfigurer;
}

@Override
public void setScreenConfigurer(Consumer<S> screenConfigurer) {
this.screenConfigurer = screenConfigurer;
}

@Override
public void setProperties(Collection<UiControllerProperty> properties) {
this.properties = properties;
Expand Down Expand Up @@ -234,6 +246,12 @@ protected void injectScreenProperties(S screen, Collection<UiControllerProperty>
}
}

protected void applyScreenConfigurer(S screen) {
if (screenConfigurer != null) {
screenConfigurer.accept(screen);
}
}

protected ScreenOptions getScreenOptions() {
return optionsProvider != null
? optionsProvider.get()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ public S create() {

initScreenListeners(screen);
injectScreenProperties(screen, properties);
applyScreenConfigurer(screen);

return screen;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ public S create() {

initScreenListeners(screen);
injectScreenProperties(screen, properties);
applyScreenConfigurer(screen);

return screen;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ public S create() {

initScreenListeners(screen);
injectScreenProperties(screen, properties);
applyScreenConfigurer(screen);

return screen;
}
Expand Down

0 comments on commit 533b0ef

Please sign in to comment.