Jmix 1.4 release candidate

Hi everyone,

We are happy to announce that the release candidate of Jmix v.1.4 is published in nexus.jmix.io repository! Studio v.1.4 is available through the nightly channel.

Please see what’s new for upgrade instructions and the list of new features.

The final release 1.4 is scheduled for the next week. We are now performing final tests and working on the documentation.

We will greatly appreciate if you test your project with the release candidate and let us know about any issues!

6 Likes

This is great news indeed! I had been checking this announcement every day recently, especially for FlowUI! Going to explore v1.4 momentarily.

Hi Konstantin
I tried but Jmix plugin 1.4 is not availavail!
image

I also don’t see the plugin in repository
image

All works.

зображення

Here is my first feedback on the RC version.

  1. There are a lot of new features (e.g. showing service, beans etc. linked to the Entity in the project window)…appreciated.

  2. I am converting a small project from Jmix 1.3 to 1.4 (FlowUI) by copy-paste the source. It works without any issues except some APIs seem to be missing or not working e.g.

2.1 Data grid/cell selection, focus etc. are not working:
image

2.2 BeforeCommitChanges in the controller is missing. As an alternative, I am using “BeforeSaveEvent” and hope it will work.

@Subscribe
    public void onBeforeCommitChanges(BeforeCommitChangesEvent event) {
       //do something
    }
  1. For the Validation from the controller, I noticed a change i.e. ValidateAdditionalRules is no more available, but alternative. So I have changed the code. I hope this is the right one that I have selected as a replacement. Moreover, the way to add error msg has a minor change as commented out the v1.3

image

  1. Notification code from 1.3 shows unrecognized as follows.

image

  1. A) Create action for the datagrid in List view but button wasn’t added automatically
    image

5.B) Except the Handlers for create, modify and remove actions, no new Actions of datagrid (say refresh) is found to be available in the controller.

image

  1. When I inject DataContainer of composition Entity, it is injected incorrectly e.g.

Data containers

 <instance id="controlAccountDc"
                  class="com.inteacc.pf.entity.ControlAccount">
            <fetchPlan extends="_base">
                <property name="controlAccountLine" fetchPlan="_base">
                    <property name="account" fetchPlan="_instance_name"/>
                </property>
            </fetchPlan>
            <loader/>
            <collection id="controlAccountLineDc" property="controlAccountLine"/>
        </instance>

When I inject, i get the following (incorrect reference of Entity name)

 @ViewComponent
    private CollectionPropertyContainer<ControlAccount> controlAccountLineDc;

instead of the following (correct)

 @ViewComponent
    private CollectionPropertyContainer<ControlAccountLine> controlAccountLineDc;

`
7. How can I use the inline editor option in data grid, how can I turn on column to edit. Currently I see no attribute lets me to handle it.

  1. In formLayout,
  • a) how can I wrap the checkBox label (see circled image)?
  • b) how can I a component set on colSpan, rowSpan like styling?

image

  1. Field Attributue “editable” was not found in the Controller

image

  1. When data container is created in View detial screen, “loader” element is added without any valid query besides the composition container. Is it a real loader?
    image

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'io.jmix.flowui.component.valuepicker.EntityPicker<com.inteacc.pf.entity.MemberLoan>' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

  1. EntityPicker injection into controller gives the following exception:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'io.jmix.flowui.component.valuepicker.EntityPicker<com.inteacc.pf.entity.FinalSettlement>' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1801)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1357)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:656)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:639)
	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:332)
	at com.vaadin.flow.spring.SpringInstantiator.getOrCreate(SpringInstantiator.java:117)
	at io.jmix.flowui.sys.vaadin.JmixSpringInstantiator.getOrCreate(JmixSpringInstantiator.java:42)
	at com.vaadin.flow.di.Instantiator.createRouteTarget(Instantiator.java:193)
	at com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.lambda$getRouteTarget$1(AbstractNavigationStateRenderer.java:130)
	at java.base/java.util.Optional.orElseGet(Optional.java:369)
	at com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.getRouteTarget(AbstractNavigationStateRenderer.java:129)
	at com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.sendBeforeEnterEventAndPopulateChain(AbstractNavigationStateRenderer.java:483)
	at com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.createChainIfEmptyAndExecuteBeforeEnterNavigation(AbstractNavigationStateRenderer.java:464)
	at com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.handle(AbstractNavigationStateRenderer.java:202)
	at com.vaadin.flow.component.internal.JavaScriptNavigationStateRenderer.handle(JavaScriptNavigationStateRenderer.java:78)
	at com.vaadin.flow.component.internal.JavaScriptBootstrapUI.handleNavigation(JavaScriptBootstrapUI.java:317)
	at com.vaadin.flow.component.internal.JavaScriptBootstrapUI.navigate(JavaScriptBootstrapUI.java:225)
	at io.jmix.flowui.view.navigation.ViewNavigationSupport.navigate(ViewNavigationSupport.java:51)
	at io.jmix.flowui.view.navigation.AbstractNavigationProcessor.lambda$processNavigation$57ca1454$1(AbstractNavigationProcessor.java:56)
	at com.vaadin.flow.component.page.Page.lambda$fetchCurrentURL$fb993594$1(Page.java:651)
	at com.vaadin.flow.component.page.PendingJavaScriptResult.lambda$then$3fde283c$1(PendingJavaScriptResult.java:116)
	at com.vaadin.flow.component.internal.PendingJavaScriptInvocation.complete(PendingJavaScriptInvocation.java:96)
	at com.vaadin.flow.server.communication.UidlWriter.lambda$createReturnValueChannel$d9004ac5$1(UidlWriter.java:316)
	at com.vaadin.flow.internal.nodefeature.ReturnChannelMap.lambda$registerChannel$2a20409b$1(ReturnChannelMap.java:124)
	at com.vaadin.flow.internal.nodefeature.ReturnChannelMap$ChannelImpl.invoke(ReturnChannelMap.java:74)
	at com.vaadin.flow.server.communication.ReturnChannelHandler.handleNode(ReturnChannelHandler.java:78)
	at com.vaadin.flow.server.communication.rpc.AbstractRpcInvocationHandler.handle(AbstractRpcInvocationHandler.java:75)
	at com.vaadin.flow.server.communication.ServerRpcHandler.handleInvocationData(ServerRpcHandler.java:438)
	at com.vaadin.flow.server.communication.ServerRpcHandler.lambda$handleInvocations$1(ServerRpcHandler.java:419)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1541)
	at com.vaadin.flow.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:419)
	at com.vaadin.flow.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:320)
	at com.vaadin.flow.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:115)
	at com.vaadin.flow.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40)
	at com.vaadin.flow.server.VaadinService.handleRequest(VaadinService.java:1564)
	at com.vaadin.flow.server.VaadinServlet.service(VaadinServlet.java:299)
	at com.vaadin.flow.spring.SpringServlet.service(SpringServlet.java:109)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:750)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:711)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:459)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:353)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:313)
	at org.springframework.web.servlet.mvc.ServletForwardingController.handleRequestInternal(ServletForwardingController.java:141)
	at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177)
	at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:51)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1071)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:964)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:665)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:750)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at io.jmix.core.impl.logging.LogMdcFilter.doFilterInternal(LogMdcFilter.java:28)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:337)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:122)
	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:116)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
	at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)
	at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
	at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:109)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
	at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
	at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
	at org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:147)
	at org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:125)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
	at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:223)
	at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:217)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
	at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)
	at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
	at org.springframework.security.web.csrf.CsrfFilter.doFilterInternal(CsrfFilter.java:117)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
	at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)
	at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:112)
	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:82)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
	at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
	at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
	at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:221)
	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:186)
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354)
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1789)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.base/java.lang.Thread.run(Thread.java:829)

When I used EntityComboBox instead of EntityPicker, it worked.

  1. Can you pls consider updating the dataType of fields in the screen when generated?
    image

  2. How can we use @WindowParam in FlowUI? It looks like not recognizing.

@WindowParam
String source;
  1. It looks like screenBuilders used in V1.3 and before is no more supported in V1.4 platform. Any suggestions?
screenBuilders.editor(stockTransferOrdersTable)
                .editEntity(stockTransferOrder)
                .withOptions(new MapScreenOptions(ParamsMap.of("stotype", stotype)))
                .show();

14.Report addon added but not available at run-time

image

  1. File image upload option was not generated. I used “byte[]” as field data type of entity like previous version.
    image

  2. Comparing field value with enum is not working
    I have an enum “ApCategory” with two values - LOAN, FINAL_SETTLEMENT. As you see in the screen-shot below from debug mode, though I have selected LOAN the application didn’t fidn it as LOAN and the cursor moved to the next step. Are we expected to be using this comparison differently or it’s not working?
    image

Hi there,
It would be good if petclinic and akkount-jmix example were also released in FlowUI version.

Apart from my feedback during I converted a small project from jmix 1.3 to 1.4RC above, I have tried creating a composite project with flow UI add-ons and here is the feedback:

image

As you see in the image, in v 1.3x only the first add-on created has a green play icon, which indicates (as well as works that way) this is the main module where the menu of this module shows when I run it. Dats store is also active and defined here. On the contrary, in v. 1.4 NIGHTLY, each and every module I add, each of them has their own data store that I don’t want and always the last module runs when I run it.

Moreover, I don’t see option to select dependencies between sub-projects in v 1.4 SNAPSHOT project version anymore.
image

io.jmix.flowui.view.View#addAfterCloseListener should be public, otherwise I can’t add a close listener from the place where I create my view. This was public before.

Is there already a replacement for fragments?

Hi guys,

Thank you for the feedback!

I’ll try to answer some of your questions:

The DataGrid component is very different from classic UI tables, so please do not expect the same API and functionality. See the available methods and description in the Vaadin docs.

That’s correct, the “commit” term has been replaced with “save” in FlowUI.

Correct, use the ValidationEvent handler.

See Javadocs on the Notifications bean.

Created issue: https://youtrack.jmix.io/issue/JST-3351

Created issue: https://youtrack.jmix.io/issue/JST-3352

Yes, it loads the entity by id. You can also see it in XML.

Please check that you are using @ViewComponent annotation to inject components, not @Autowired.

Could you elaborate?

See Views :: Jmix Documentation

It’s not yet ready for FlowUI. Removed from Marketplace in the latest Studio builds.

Will be implemented later.

Sure, we’ll do it.

Created issue: https://youtrack.jmix.io/issue/JST-3353

You can add a close listener only when you open the view in a dialog window. And then you can do it using the addAfterCloseListener() method of the window, see Views :: Jmix Documentation

No. Most probably we will end up using composite components.

1 Like

(1) In Vaadin there exists the “Upload” component - is it already possible to include our own custom components (or “native” vaadin componentes in this case) in the view descriptors?

Some more questions:

(2) BackgroundWorker, BackgroundTask - are there already replacements?

(3) ResponsiveGridLayout ?

Yes, you can use ANY Vaadin component as if you were building a plain Vaadin application. An example for file uploading:

@ViewComponent
private FormLayout form;

@Autowired
private FileStorage fileStorage;

@Subscribe
public void onInit(InitEvent event) {
    MemoryBuffer memoryBuffer = new MemoryBuffer();
    Upload upload = new Upload(memoryBuffer);
    upload.setMaxFiles(1);
    upload.addFinishedListener(event1 -> {
        FileRef fileRef = fileStorage.saveStream(memoryBuffer.getFileName(), memoryBuffer.getInputStream());
        getEditedEntity().setPicture(fileRef);
        updateImage();
    });
    form.add(upload);
}

Will be implemented later.

Use Form Layout

Will the BPM add-on Input dialogs in Jmix 1.4 use the Flow UI, or is it planned for 2023-02?

Thanks

Ok, thanks, is it also already possible to define a custom component for usage in the view descriptor xml? So I could make a e.g. <myapp:myupload id="testUpload" /> element?

→ for example the column data type attribute in the view XML file can be selected when it is generated. You may also consider default alignment like the right alignment for numbers.
image

ResponsiveSteps setting worked like a charm when defined from controller but it doesn’t work when setting from the xml file.


            <responsiveSteps>
                <responsiveStep columns="1" minWidth="0"/>
                <responsiveStep columns="2" minWidth="420"/>
                <responsiveStep columns="3" minWidth="600"/>
                <responsiveStep columns="4" minWidth="950"/>
                <responsiveStep columns="5" minWidth="1250"/>
            </responsiveSteps>

Theme:
I didn’t come across any option to select of use of customized theme.

  1. I expect there will be options in the final version
  2. In Vaadin, there is a theme editor which we can download and use in simple steps. How can we do the same in Jmix?
    image

another question: is view extending already possible? (like Extending Functionality :: Jmix Documentation )

FlowUI for BPM add-on is planned for the next feature release in Feb 2023.