USelectMultiple: a button of the dropdown, such as "More", renders data-testid="ub-select-multiple_button_<name>"
with the name of the button, moreButton for "More", the way an option renders its data-testid
UTableEntity: the afterToolbar slot renders content between the toolbar and the table
$App.scan: the config.skipTransformToPdf option returns the scanned TIFF as is,
without recognition and PDF conversion by recognitionEndpoint
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>
BREAKINGUAutoField: buttons for the u-file toolbar of a Document attribute must be passed
in the new fileToolbar slot. The default slot is no longer passed to u-file, because it is also
rendered after the control and its components were created twice.
Applications that added toolbar buttons through the default slot must move them to <template #fileToolbar>
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
ubm_desktop store: load no longer keeps a deleted desktop selected; a reload keeps the desktop selected
in this tab and, when that one was deleted, selects the default desktop with a portal:sidebar:desktopChanged event
lookups: after a failed data loading of an entity (for example, a 504 response),
the next subscribe loads the data again, so table columns show lookup values without a page reload
UTableEntity: a filter applied from the column header menu on the second or a later page
now opens the first page and recalculates the total, instead of showing an empty list.
UDialog: a dialog with a custom component has a body padding of 1rem instead of 2rem,
so the component is aligned with the title and the buttons
$App.scan: the arguments are passed to the scanner module in correct way; before, all arguments were passed as one array.
UTableEntity: an "equal" or "not equal" filter by an entity column keeps the record caption
in the filter list and in the header of an exported file
when it is searched again from the filter panel or from the column menu
UTableEntity: in the column header menu, switching an applied "From date" or "To date" filter
to "range" no longer enables the search with empty dates,
which applied an empty filter and caused an HTTP 500 error
UAutoField: the content of a Document attribute edited in UBlobCodeMirror or UBlobRichTextEditor
is saved with the form again; UFileRenderer.getBlobViewer() returns the editor itself, as before 7.0.58,
instead of its inner u-code-mirror or u-rich-text-editor
webDav.openInApp: opening a file in an external application no longer shows the browser
"leave site?" confirmation when any opened tab or modal has unsaved changes
UTableEntity: Excel and HTML exports show applied filter conditions as text instead of [object Object];
there and in the summary dialog the column label is shown in the current UI language, as in the filter list,
and a filter value is shown as text, not as HTML markup
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
FileSystemBlobStore: a generated (not original) file name now ends with a zero-padded BLOB revision number,
for example <entity>-<attribute><ID><entropy>-003.pdf
FileSystemBlobStore.genNewPlacement accepts a newRevision in options
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
App.getCurrentExternalURL supports header-based multitenancy instead of throwing an error:
the origin of the current tenant comes from security.multitenancy.tenants[].URI, as with URI-based multitenancy
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
messageNewTitle: locale key for the title of the new notification form,
used as the caption of the ubs_message_edit form instead of the send button text
ubs_message: the entity, its form and the notification history use the term "notification"
instead of "message" in all languages, including the send button, the message text field,
the pop-up checkbox, the validity period label, the history window title and the empty list text
ubs_message_edit-fm: the form title has no trailing colon,
and the "Show in pop-up window" checkbox is placed before the notification text
ubs_message-fm: the "Unread" tab of the navbar notifications no longer lists expired notifications,
so it is empty after "Mark all as read", the same as the counter on the bell
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