Release Notes 4.18
What’s New
Result Center
Format field contents
The contents of a field can now be formatted in detail to optimize the display of results. The date format, the number of decimal places and the display of a thousands separator can now be defined for each field. With the help of ArcGIS Arcade expressions, new virtual fields can also be added, for example to format or combine existing fields. The heading of each data column can also be overwritten.
Optimize table display
The alignment can now be defined for each field (for example right-aligned). The maximum length of the displayed text can also be configured. Longer texts can still be read by clicking on them, but no longer interfere with the initial display of the table. The automatic calculation of column widths has also been optimized.
Improved sidebar
The sidebar, which is displayed when results are available for several topics, can now be collapsed. The automatic behavior that the sidebar is not shown at all if there are only results for one topic can be deactivated so that the bar is always shown. If the displayed titles are too long to be shown in full, a tooltip now provides information about the complete title (the complete title is also displayed when you click on the topic). Another small improvement is that when you click on an active topic again, the map zooms in on the extent of all objects.
Bulk and row actions
Two new row actions are provided with this release:
-
Edit object - This action starts the editing of the corresponding object. After editing, changed attribute values are also updated in the Result Center.
-
Open popup - This action opens a popup for the corresponding object.
The placement of the row actions has also been improved. By default, the actions are now displayed on the left-hand side (next to the checkboxes) to allow faster access. The old behavior, where the actions were displayed on the right edge of the screen, can be restored via configuration.
The display of bulk actions (actions that refer to several objects, for example CSV export) has also been optimized. If desired, the entire available space can be used to display the actions side by side. If there is not enough space, a "More actions" menu is displayed in which the other actions are stored. A fixed division of the actions visible directly and in the submenu is still possible. In cases where the "More actions" menu would only contain one entry, this one action is displayed directly instead of the menu, as this takes up the same amount of space but saves one click.
New service types for search and selection
Support for open standards has been significantly expanded in this release. It is now possible to use services of the type OGC API - Features, OGC Web Feature Service (WFS), GeoJSON and CSV for search and selection. In addition to using your own services, this opens up new possibilities, for example to include public data, which is often provided in one of the OGC formats, in your own apps.
For developers
TypeScript
With this release, additional bundles are delivered in TypeScript (see introduction in 4.12), which makes development against the interfaces of these bundles easier and more secure.
These include the important map-init
and selection-*
bundles, among others.
Reactivity API
The new bundle @conterra/reactivity-core
is now part of map.apps.
reactivity-core
implements a reactivity system based on signals.
This system can be used to easily implement stateful APIs and reactive user interfaces based on them.
In the long run, we are expecting to use the new reactivity system in places where one uses classes like Mutable
or Binding
today.
For the time being, the reactivity API is included as an early preview (changes will still be made based on user feedback).
To import items from @conterra/reactivity-core
, write:
import { /* ... */ } from "@conterra/reactivity-core";
// or, for convenience:
import { /* ... */ } from "apprt-core/reactivity";
To use reactive values from a Vue component, a new composable called useReactiveSnapshot()
has been created (for details, visit apprt-vue’s bundle documentation ):
import { useReactiveSnapshot } from "apprt-vue";
Further improvements
Improvements in apprt-core include the introduction of /clone
and /assignWithPrototype
modules, as well as support for synchronous events.
Non-interactive SpatialInputActions can now be used when developing for the Selection UI. In addition, a possibility for better control of additionally required windows has been created (for example, enter radius to make a circle selection).
Further new functions and improvements
-
The ArcGIS Maps SDK for JavaScript used by map.apps as technical basis is updated to version 4.26 with this release. This results in numerous improvements and bug fixes to the base technology.
-
In the spatial selection, users can decide whether existing results should be replaced or merged.
-
When using the ArcGIS World Geocoder, the map position is now taken into account for weighting the results.
-
Popups
-
The order of display when several objects are hit now corresponds to the layer order in the map.
-
Popups can now also be configured for ArcGIS Tiled Map Services.
-
Popups can now also be opened when the drawing toolbar is open. Only if a specific tool is active, no popups are opened.
-
-
The integration of service.monitor Analytics for tracking backend actions in map.apps has been simplified.
-
Apps can now be placed in a defined folder as static files in the same way as bundles and are then imported when the server is started.
-
To improve accessibility, the contrast in the Everlasting Theme has been optimized.
-
When editing, the snapping behavior can be controlled in more detail (for example, snapping tolerance).
-
It is now possible to register tables in the map, for example to use them to display or edit dependent data (related tables)
-
The bundle documentation has been improved: After a search, the readme file is displayed directly and not the version selection first. This speeds up access to the content. In addition, external links are opened in new tabs and are marked as such. A table of contents of the respective page is displayed at the edge of each page.
-
The app editor now always shows the parent nesting in the JSON structure when scrolling. This makes it easier to see which section you are in, especially in larger files.
Update Notes
If you skip several versions during the update, please also follow all update notes of the intervening versions. |
Result Center: Changes in number formatting
With the new function for controlling the formatting of date columns and numbers, there are changes to the default output of numbers.
Float numbers now have three places after the fraction by default, which may cause a different output than before.
Integer values have no places at all.
This behavior is determined by the store metadata.
If for example a service stores Integer values in a field of type double
, this values also get places (trailing zeros).
AutoStoreRegistration
As described before, new layer types are supported for search and selection. If you enabled auto-store registration for an app and the map configuration contains any of the newly supported types, they might now show up in the spatial selection dialog or generate results when using the search feature.
Bundle layerlist renamed
The Bundle layerlist
was renamed to test-layerlist
to clearly state its purpose.
If used, the app configuration needs to be updated accordingly.
Database schema changes of description columns
New installations use a lower length for the description columns of the tables apps
, apptemplates
, jspacks
, and reporttemplates
(512 characters, down from 2048) than in previous versions.
The previous length was too large for some databases with respect to indexing and could generate warnings during setup.
In practice, very long descriptions are not used, so this change is safe to apply to existing installations.
To apply the change to your existing installation, proceed manually:
-
The database user must have permissions to create/alter tables and indices.
-
After the update, the permissions can be revoked again.
Use the appropriate SQL script for your database in use. The script changes the data type of the relevant columns and truncates all existing values to the new maximum length.
Changes to the ComponentContext.getProperties method
If you are using the ComponentContext.getProperties
method in your own components, please note that this method has been changed in this release.
The method now returns a plain JavaScript object that lists the component’s configuration options, instead of returning an object of type ct/Hash
.
We recommend not to use this method at all and to use the recommended method via _properties
:
activate() {
const properties = this._properties;
const value = properties.key;
}
Alternatively, adjust your code as follows if necessary:
activate(componentContext) {
const properties = componentContext.getProperties();
// Old code
const value = properties.get('key');
// New code
const value = properties.key;
// Old code
const propertiesAsObject = properties.entries;
// New code
const propertiesAsObject = properties;
}
Discontinued Features
-
The method
ComponentContext.getProperties()
returns a plain JavaScript object and not an instance of typect/Hash
. -
The class
ct/mapping/store/MapServerLayerStore
was removed. With that the optionlegacyImplementation
of theagssearch
Bundle is obsolete (deprecated since 4.13). -
The support for
data-template-window
anddata-template-window-events
in template files was removed (deprecated since 4.12). -
The classes in the
ct/store/
module, which can be replaced by classes of thestore-api/
module, have been removed from map.apps (deprecated since 4.12). -
The JS Registry can no longer be used as an npm registry.
-
The configuration option
allowedWorkflows
in the bundleediting
was removed. Instead, use the optionsvisibleElements.createFeaturesSection
andvisibleElements.editFeaturesSection
to show or hide theCreate features
andEdit feature
sections in the editing widget (deprecated since 4.14).
Deprecated Features
The following are deprecated and will be removed in a future release. Also note the additional information in the system requirements.
-
map.apps Manager and app configuration:
-
Live configuration is no longer being developed and will be removed in an upcoming release. Instead, use the app-editor to configure apps. You can already hide the live configuration for your users by setting the configuration option
manager.config.editor.showLiveConfigButton
tofalse
.
-
-
The support of
app.jsp
files for the rolebased filtering ofapp.json
files will is no longer being developed and will be removed in an upcoming release. -
The
username
widget of theauthentication/UsernameWidget
module will be removed in the next version. Instead, use theauthenticationInfo
widget of theauthentication/AuthenticationInfoWidget
module. map.apps uses theauthenticationInfo
widget in its default "seasons" template for some time, already. You only need to adopt this change if you explicitly use theusername
widget in your apps. -
Bundles:
-
The bundle
omnisearch-portalitem
will be removed shortly. -
The bundle
share-link-shim
will be removed shortly. -
The
omnisearch
bundle is no longer developed. Use thesearch-ui
bundle instead. -
The
resultcenter
andselection-resultcenter
bundles are no longer developed. Use theresult-ui
bundle instead.
-
-
Development:
-
The support for JavaScript modules
test-utils/later
andtest-utils/waitForProperty
will be removed soon. Instead, use the new moduletest-utils/waitFor
(available from 4.18.3). -
Support for
module.exports
in JavaScript files will be removed soon. Use the ECMAScript keywordsexport
orexport default
instead. -
To simplify a future migration from AMD to another module system, JavaScript files should be written as ECMAScript modules only, if possible, and then transpiled.
-
Support for
cancel
in return values of store queries (QueryResult) will be removed soon. The goal is to simplify thestore-api.Store
interface. Please use a AbortController , described in Usage of an AsyncStore to cancel pending queries.const aborter = new AbortController(); store.query({name: "Test"}, { signal: aborter.signal }) .then((resultItems)=>{ ... }, (e)=>{ if (e.name === "AbortError"){ // aborted } }) // trigger abort aborter.abort();
-
The following classes will be removed in one of the next releases:
-
Deprecated class | Alternative |
---|---|
|
native JavaScript functions |
|
apprt-core/async |
|
apprt-core/when |
|
apprt-core/comparators |
|
- |
Known Limitations
|
[Map] Zoom via mousewheel does not allow to zoom to the full max or min extent in some situations |
|
[Printing] Printing of line measurement not possible with PrintTask published from ArcMap |
Dependencies
-
Esri ArcGIS Maps SDK for JavaScript 4.29.10
-
ArcGIS Arcade 1.26
-
JasperReports 6.21.3
-
Moment.js 2.29.4
-
Vue.js 2.7.15
-
Vuetify.js 1.5.24 (with custom patches, tracked as 1.5.30)
Changelog
4.18.3
Improvements
|
[ct-proxy] Support lookup of bearer token from file |
|
[Reporting] Add accessibility information to default report template |
Fixed Issues
|
[Result Center] GeoJSON fields that contain dots in name are not found |
|
[Window Manager] Programmatically maximized window gets size 0 on restoring |
|
[popups-default] Popup shows field name instead of title from store metadata |
|
[Popups] Wrong date format when opening popup for store |
|
[app-import] Flag sharedInGroups is ignored |
|
[jsregistry] Regex after arrow function leads to illegal layer.js files |
|
[Vuetify] v-chip submits HTML form |
|
[authentication] UsernameWidget configuration is not applied |
|
[result-ui] esriFieldTypeSmallInteger is shown as decimal value |
|
[BrowserSync] Support current proxy.allowedServerUrls Syntax |
|
[Native App Export] Launch failure |
|
Missing assets of calcite-components |
|
[Accessibility] Layer options in TOC cannot be reopened |
|
[Accessibility] ButtonActions in TOC are not focusable by keyboard |
|
[App Editor] Pre-optimized app can be saved unnecessarily |
|
[Apps overview] App is opened in the current browser tab |
|
Loading screen does not escape HTML when rendering app title |
|
[Map] Missing hint for missing WebGL 2 support |
|
[result-ui] Row actions in overflow menu are not read by screen reader |
4.18.2
Fixed Issues
|
[Accessibility] Add search role to search-ui |
|
[Accessibility] Pressing Enter when Reset button has focus triggers EnterKeyAction in SearchUI |
|
[Live configuration] Saving component factory configuration is broken |
|
[SearchUI] EnterKeyAction sometimes not triggered |
|
[WindowManager] Screen reader reads "Can be moved with arrow keys" for fixed windows |
4.18.0
New Features
|
[Accessibility] Improve color contrasts in everlasting theme |
|
[Accessibility] Improve screenreader support and focus highlight in Manager menu |
|
[App Editor] Enable sticky scrolling |
|
[App Editor] Update monaco editor to 0.47.0 |
|
[App Import] Automatic App import during server startup |
|
[apprt-core] Add apprt-core/clone as alternative for ct/_lang#transform |
|
[apprt-core] Add appt-core/assignWithPrototype as alternative for ct/_lang#merge |
|
[apprt-core] Support synchronous events and remove usage of Observable |
|
[Documentation] Add how-to in Developer’s guide for automated app import |
|
[Documentation] Format chart headings for popups |
|
[Editing] Support snapping properties distance, featureEnabled and selfEnabled |
|
[JS Registry] Decorate external links in READMEs and open them in new browser tab |
|
[JS Registry] Provide direct link to bundle README from bundle search result list |
|
[JS Registry] Sidebar TOC for bundle READMEs |
|
[JS Registry] Update Apache commons compress to 1.26 |
|
[Map] Allow to register tables |
|
[Popups] Allow popups on ArcGIS Tiled Map services |
|
[Popups] Sort features according to order of map layers |
|
[Pre-Optimization] Use background task to compress GZIP and Brotli |
|
[Result Center] Add custom fields using Arcade Expressions |
|
[Result Center] Add methods to show and hide columns programmatically |
|
[Result Center] Collapse topic sidebar |
|
[Result Center] Configure alignment of fields |
|
[Result Center] Configure field alias |
|
[Result Center] Configure field output of numbers and dates |
|
[Result Center] Configure to always show sidepane |
|
[Result Center] Control order of dynamic actions |
|
[Result Center] Dynamically calculate when an action menu is required |
|
[Result Center] Improve automatic size of columns |
|
[Result Center] Move all actions to "More Actions" menu when on mobile screens or in narrow mode |
|
[Result Center] Move row actions to left side |
|
[Result Center] Order bulk actions by label instead of ID |
|
[Result Center] Row action to open popup |
|
[Result Center] Row action to start edit workflow |
|
[Result Center] Set maximum length of visible cell content |
|
[Result Center] Show 'more actions' menu only if it contains more than one action |
|
[Result Center] Show tooltip for too long topic names |
|
[Result Center] Support all Esri dateformat values similar to popups |
|
[Result Center] Support popups for highlighted items that are not shown on the map |
|
[Result Center] Update table when underlying FeatureLayer is edited |
|
[Result Center] Zoom to all results when clicking on topic in sidebar |
|
[Result Center] Zoom to new extent when results are added |
|
[Search] Add support for GeoJSON, CSV and WFS |
|
[Search] Consider map position for ranking search results of ArcGIS World Geocoder |
|
[Search] Respect time extent for search and selection |
|
[Search] Search and select in OGC API Features layer |
|
[Selection] Add optional hooks to allow developers to control additional widgets |
|
[Selection] Allow to use non-interactive SpatialInputActions |
|
[Selection] Allow user to decide if current results are replaced or merged |
|
[Setup] Simplify integration of service.monitor analytics tracking |
|
[Sketching] Support popups when not drawing |
|
[System] Update ArcGIS Maps SDK for JavaScript to version 4.29 |
|
[Vuetify] Improve accessibility for vuetify button groups component |
Fixed Issues
|
[Accessibility] Keyboard focus for map is shown during mouse navigation |
|
[Accessibility] Missing aria attributes for basemaps dropdown in TOC |
|
[apprt-core] Value lookup in string-replace helper ignores keys containing a dot |
|
[App Editor] Schema validation fails if jsregistry url is defined without protocol |
|
[Database] Maximum key length for a nonclustered index exceeded in Microsoft SQL Server |
|
[Documentation] Broken link to bundle documentation |
|
[Editing] Input type date picker shows unwanted time input |
|
[Editing] Visual feedback when hovering item in template list is missing |
|
[Editing] Wrong text color for disabled field content in everlasting theme |
|
[JS Registry] Bundle README links to other bundles with anchors are not working |
|
[Map] GeoJSON layers with popupTemplates generate unwanted underscores |
|
[Measurement] Measurement over long distances in EPSG 25832 leads to errors |
|
[Popups] All line breaks in tables are moved to the beginning |
|
[Popups] Attachments are not shown in popup opened from open-popup map action |
|
[Reporting] Report generation fails if service URL contains special characters |
|
[Result Center] Selection column header can be scrolled out of view |
|
[result-ui] Cannot trigger row action for feature with id |
|
[Selection] Missing feature highlight |
|
[TOC] Window can not be uncollapsed after it was closed in collapsed state |
|
[TOC] Wrong behavior of visibilityMode exclusive |
|
[Vuetify] Do not show v-tooltip when user touches on element |
|
[Vuetify] Menus stay opened when content outside the menu is scrolled |