Faktor-IPS
Release Notes
Version 2.7.0
The release notes contain changes compared to version 2.6.2.
Version Updates
The following versions have been updated:
Dependency | New version | Previous version |
---|---|---|
25.1.0.release (Release Notes) |
24.7.5.release |
|
Vaadin |
24.5.8 (Release Notes) |
24.4.16 |
Spring Boot |
3.4.1 (Release Notes) |
3.3.5 |
The Vaadin version update brings some notable changes that affect linkki applications:
-
New properties in
LumoUtility
: InLumoUtility
new properties have been added, most notably a utility class to setflex
to 1. Existing custom CSS classes can thus be replaced by the new utility class. -
Setting
reactEnable
tofalse
in thevaadin-maven-plugin
leads to a Vite error on startup of the application due to missing vaadin-router resources.
As the react router now behaves mostly like the legacy vaadin router, it may be an option to remove the configuration and use the default react router instead.
If the configuration should be kepft, the propertyvaadin.react.enable
needs to be set tofalse
too. See https://vaadin.com/docs/latest/upgrading#opting-out-of-react
UI Annotations and Aspects
-
New annotation: @UICheckboxes
A new UI component,@UICheckboxes
, is now available, providing a way to create a checkbox group for related binary choices. For more information, see here. -
New annotation: @UILongField
A new UI component,@UILongField
, is now available, providing a way to accept a number with data typelong
. For more information, see here. -
@UIComboBox: Automatically focus first applicable element
If a character or word is entered into a combobox and there is only one matching element, then this element gets selected automatically.- Example
-
A combobox has the values UP, DOWN, LEFT, RIGHT.
If the user enters 'u', the entry UP is selected automatically.
If the user enters 't', there are two possible matches (LEFT and RIGHT) and therefore no entry is selected automatically.
-
@UILabel: support for asynchronously loaded values
UILabel
has been enhanced to handle asynchronous value loading usingCompletableFuture
as return type. A loading indicator will be displayed until the value is available. Refer to UILabel documentation for more details. -
New aspect annotation: @BindClosable for sections
A new aspect annotation,@BindClosable
, is now available, providing a way to create closable sections with the option to have them initially closed. For more information, see here. -
@BindPlaceholder: support for sections
The @BindPlaceholder annotation can now be used on a@UISection
to set a placeholder text if the section has no child elements or all child elements are invisible.@BindPlaceholder on @UISection@BindPlaceholder @UISection(caption = "@UISection with @BindPlaceholder") public class SectionWithBindPlaceholder { public String getPlaceholder() { return "This section is empty"; } }
The old solution using an extra
UILabel
with the styleLinkkiTheme.Text.TEXT_PLACEHOLDER
is now obsolete and should be replaced as it did not work correctly with different layout options.Old solution with UILabel and style LinkkiTheme.Text.TEXT_PLACEHOLDER@UISection(caption = "@UISection with placeholder label") public class SectionWithPlaceholderLabel { @UILabel(position = 10, label = "", styleNames = LinkkiTheme.Text.TEXT_PLACEHOLDER) public String getPlaceholder() { return "This is a placeholder."; } }
LinkkiTheme.Text.TEXT_PLACEHOLDER
has been deprecated and should not be used anymore as it did not work consistently for varying label width. Use@BindPlaceholder
on@UISection
instead (see above).
Other Improvements
-
Unique IDs for exceptions
If an exception occurs in the application, it will be displayed by the configured error handler or an error page in case of an exception during navigation. With the default configuration, the exception is now logged with a unique ID that is also displayed in the UI, making it easier to find the exception in the logs. Custom implementation may need to be adapted to be able to make use of this feature. -
Karibu testing: more utilities
TheKaribuUIExtension
has been extended with possibilities to add error routes and to set production mode. The documentation has been improved accordingly.
Many useful methods were also added to the KaribuUtils to make it even easier to write Karibu tests, such as-
methods for printing out any component as String. This can be used to assert that certain text is or is not displayed anywhere in the UI, disregarding the placement or the actual component that is used.
-
methods for setting value input fields and consistently firing change events
-
methods for tables
-
-
Testbench extension: support for table placeholder
The new page objectLinkkiGridElement
adds support to retrieve the placeholder text of a table. It can be used instead ofGridElement
, e.g.$(LinkkiGridElement.class)
. -
Tutorial in the documentation
The linkki tutorial is now part of this documentation.
Bugfixes
-
LabelComponentWrapper#setLabel()
now callsHasLabel#setLabel()
if the component is an instance ofHasLabel
instead of setting the HTML property directly. -
The items of a table created with
@UITableComponent
are now only fetched asynchronously if the return type isCompletableFuture
. The documentation is updated accordingly. -
Card sections theme now only applies to dialogs if the theme is explicitly set on the dialog itself or a child layout.
-
The disabled and readonly style of radio buttons and checkboxes has been harmonised to follow the linkki style guidelines.
-
DefaultCaptionProvider
now takes the provided locale into account and translates the captions accordingly. -
The recommended .gitignore file is now added in generated archetype projects.
-
Components within a form layout that are required and have an empty/ blank label do not scroll anymore.
-
@UIDecimalField
now handles very large numbers without unwanted rounding. -
Previously, setting the value to
null
in@UIRadioButtons
failed to check the appropriate radio button. Now, selectingnull
correctly checks the "Not specified" radio button, ensuring proper representation.With this bug fix, the converter must now be able to handle null-valued presentation values. Although this was already part of the
Converter
contract, it can now lead to an exception inValueAspectDefinition
. -
Disabled, readonly and checked radio buttons are now displayed correctly