Hello Jmix team,
I’m in need of setting a global default for collapsable = true and collapsed=true properties of the Filter component.
Is this even possible and how can I achieve it?
Thanks!
Konstantin
Hello Jmix team,
I’m in need of setting a global default for collapsable = true and collapsed=true properties of the Filter component.
Is this even possible and how can I achieve it?
Thanks!
Konstantin
Hi Konstantin,
Yes it’s possible.
First, create your own FilterLoader:
package com.company.demo.ui;
import io.jmix.ui.component.Collapsable;
import io.jmix.ui.xml.layout.loader.FilterLoader;
import org.dom4j.Element;
public class MyFilterLoader extends FilterLoader {
@Override
protected void loadCollapsible(Collapsable component, Element element, boolean defaultCollapsable) {
// use desired defaults
component.setCollapsable(true);
component.setExpanded(false);
}
}
Second, create your LoaderConfig:
package com.company.demo.ui;
import io.jmix.core.JmixOrder;
import io.jmix.ui.xml.layout.ComponentLoader;
import io.jmix.ui.xml.layout.LoaderConfig;
import org.dom4j.Element;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import javax.annotation.Nullable;
@Component
@Order(JmixOrder.HIGHEST_PRECEDENCE - 10) // before framework's loaders
public class MyLoaderConfig implements LoaderConfig {
@Override
public boolean supports(Element element) {
return "filter".equals(element.getName());
}
@Override
public Class<? extends ComponentLoader> getLoader(Element element) {
if ("filter".equals(element.getName())) {
return MyFilterLoader.class;
}
return null;
}
@Nullable
@Override
public Class<? extends ComponentLoader> getFragmentLoader(Element root) {
return null;
}
@Nullable
@Override
public Class<? extends ComponentLoader> getWindowLoader(Element root) {
return null;
}
}
That’s it - all filters will have the parameters you set in your loader.
This way you can override loading of any UI components from XML.
Regards,
Konstantin