UTableEntity: added optional table-based selection dialog for oneOf filters.
It can be enabled globally using uiSettings.adminUI.enableOneOfSelectionDialog
or per column using forceOneOfSelectionDialog. To enable it by configuration,
add UB_ENABLE_ONE_OF_SELECTION_DIALOG=true to the environment and map it in
ubConfig.json as uiSettings.adminUI.enableOneOfSelectionDialog.
lookups.isTruncated(entity): tells whether the cached data of an entity is limited to UB.LIMITS.lookupMaxRows
records, so a caller can select the records absent in the cache from the server only for such entities
UTableEntity: filterHint and sortHint column settings - a hint displayed on top of the column filter/sort popups
$App.doCommand, Form, $formServices.setTitle: the title of a Vue form or list accepts {key, args},
rendered as UB.i18n(key, ...args)
tab data: titleI18n describes how to render the tab title in another UI language; it is set for shortcuts,
Vue forms (form caption, entity caption, caption template) and for a translation key or {key, args} title
ubm_navshortcut and ubm_form captions are available as UB.i18n keys ubm_navshortcut:<code> and ubm_form:<code>
UNavbarNotificationsButton: popover height now auto-fits content, capped by available
viewport space (scrolls instead of stretching full screen). "Message history" dialog now
opens with 90vh height and reduced top margin (5vh).
UButton: the button is disabled while loading is true,
so it no longer needs an explicit :disabled binding to prevent repeated clicks
LOAD_COLLECTION_DATA mutation: when index is omitted, the item is appended to the end of the collection
in a loaded state, so a record what already exists on the server can be added without making the form dirty
redrawn icons u-icon-email, u-icon-email-profile and u-icon-email-settings
UNavbarNotificationsButton: magic links (<a data-cmd-type="...">) inside the notifications
popover are now clickable.
UFile: fixed requestFullscreen in case native PDF viewer is used
UTableEntity: export to HTML leaves a cell empty instead of writing the null text
when a column without a formatter (for example, a nested attribute of an empty reference) has no value
doDeletion(attribute, ID, blobItem): deletes a persisted BLOB content from the store it was put into;
a store missing from the application config is skipped with a warning in the log
clearing or replacing a BLOB, history rotation, shred and shredAll no longer fail
when the BLOB info refers to a store missing from the application config:
the content is left in place and a warning is written to the log
ubConfig.schema.json: added uiSettings.adminUI.enableOneOfSelectionDialog
boolean property (default false) for enabling table-based selection dialog
in UTableEntity oneOf filters. Recommended configuration is to expose it
through UB_ENABLE_ONE_OF_SELECTION_DIALOG in ubConfig.json.
THTTPRequest.bodyDigest(algorithm, encoding, offset, length) calculates the digest of a byte range of the request body,
such as one part of a multipart/form-data request, without copying the bytes into JavaScript
THTTPRequest.bodyDigest now support any of openssl digest algorithms (openssl list -digest-algorithms). Requires UB 5.26.15
Session.id is reset on each session context switch (new request, Session.runAsAdmin, Session.runAsUser etc.).
Before this fix Session.id returns a first value read inside JS context (thread) for all subsequent requests
Schedulers: in multitenancy mode, a singleton task runs on every cron tick again,
instead of being skipped as "already running" for up to 3 hours after its first run
ubqMessagesCleanup: with multitenancy, deletes completed messages of each tenant
instead of truncating the whole ubq_messages table, which failed with permission denied for table ubq_messages
ubqMailJob: a mail the mailer raises an error for, such as List index (0) out of bounds for a mail without
a to address, no longer stops the mail queue: it is handled as a failed sending,
and the remaining mails are sent in the same run
ubqMailJob: with the exhaustQueue option and repeatSendingOnError, a run ends when only mails
waiting for a repeated sending are left, instead of sending them again in an endless loop
ubs_message-fm: the navbar notification list loads the next page only when it is scrolled to the end,
instead of loading all messages page by page right after it is opened, and shows a single scrollbar
ubs_message-fm: an expanded long notification shows its whole text,
instead of a text cut at the bottom or covered by the "Show less" button