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:

  1. Edit object - This action starts the editing of the corresponding object. After editing, changed attribute values are also updated in the Result Center.

  2. 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.

Further improvements

If additional results are subsequently added to a result set, the spatial section that is zoomed in on is updated. For developers, options have been introduced to better control the display of columns and the order of dynamic actions.

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 type ct/Hash.

  • The class ct/mapping/store/MapServerLayerStore was removed. With that the option legacyImplementation of the agssearch Bundle is obsolete (deprecated since 4.13).

  • The support for data-template-window and data-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 the store-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 bundle editing was removed. Instead, use the options visibleElements.createFeaturesSection and visibleElements.editFeaturesSection to show or hide the Create features and Edit 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 to false.

  • The support of app.jsp files for the rolebased filtering of app.json files will is no longer being developed and will be removed in an upcoming release.

  • The username widget of the authentication/UsernameWidget module will be removed in the next version. Instead, use the authenticationInfo widget of the authentication/AuthenticationInfoWidget module. map.apps uses the authenticationInfo widget in its default "seasons" template for some time, already. You only need to adopt this change if you explicitly use the username 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 the search-ui bundle instead.

    • The resultcenter and selection-resultcenter bundles are no longer developed. Use the result-ui bundle instead.

  • Development:

    • The support for JavaScript modules test-utils/later and test-utils/waitForProperty will be removed soon. Instead, use the new module test-utils/waitFor (available from 4.18.3).

    • Support for module.exports in JavaScript files will be removed soon. Use the ECMAScript keywords export or export 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 the store-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

ct/array

native JavaScript functions

ct/async

apprt-core/async

ct/_when

apprt-core/when

ct/_compare

apprt-core/comparators

ct/ui/controls/mobile/Drawer

-

Known Limitations

MAPAPPS-5654

[Map] Zoom via mousewheel does not allow to zoom to the full max or min extent in some situations

MAPAPPS-6377

[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

MAPAPPS-7171

[ct-proxy] Support lookup of bearer token from file

MAPAPPS-6303

[Reporting] Add accessibility information to default report template

Fixed Issues

MAPAPPS-7130

[Result Center] GeoJSON fields that contain dots in name are not found

MAPAPPS-7157

[Window Manager] Programmatically maximized window gets size 0 on restoring

MAPAPPS-7158

[popups-default] Popup shows field name instead of title from store metadata

MAPAPPS-7165

[Popups] Wrong date format when opening popup for store

MAPAPPS-7169

[app-import] Flag sharedInGroups is ignored

MAPAPPS-7173

[jsregistry] Regex after arrow function leads to illegal layer.js files

MAPAPPS-7176

[Vuetify] v-chip submits HTML form

MAPAPPS-7177

[authentication] UsernameWidget configuration is not applied

MAPAPPS-7178

[result-ui] esriFieldTypeSmallInteger is shown as decimal value

MAPAPPS-7180

[BrowserSync] Support current proxy.allowedServerUrls Syntax

MAPAPPS-7181

[Native App Export] Launch failure

MAPAPPS-7193

Missing assets of calcite-components

MAPAPPS-7203

[Accessibility] Layer options in TOC cannot be reopened

MAPAPPS-7206

[Accessibility] ButtonActions in TOC are not focusable by keyboard

MAPAPPS-7207

[App Editor] Pre-optimized app can be saved unnecessarily

MAPAPPS-7209

[Apps overview] App is opened in the current browser tab

MAPAPPS-7210

Loading screen does not escape HTML when rendering app title

MAPAPPS-7212

[Map] Missing hint for missing WebGL 2 support

MAPAPPS-7213

[result-ui] Row actions in overflow menu are not read by screen reader

4.18.2

Fixed Issues

MAPAPPS-7146

[Accessibility] Add search role to search-ui

MAPAPPS-7152

[Accessibility] Pressing Enter when Reset button has focus triggers EnterKeyAction in SearchUI

MAPAPPS-7140

[Live configuration] Saving component factory configuration is broken

MAPAPPS-7153

[SearchUI] EnterKeyAction sometimes not triggered

MAPAPPS-7154

[WindowManager] Screen reader reads "Can be moved with arrow keys" for fixed windows

4.18.1

Fixed Issues

MAPAPPS-7126

[app-mgmt] Apps with role constraints can not be opened in /manager

MAPAPPS-7129

[System] Programmatic change of 'componentEnabled' leads to error

4.18.0

New Features

MAPAPPS-7074

[Accessibility] Improve color contrasts in everlasting theme

MAPAPPS-6630

[Accessibility] Improve screenreader support and focus highlight in Manager menu

MAPAPPS-7078

[App Editor] Enable sticky scrolling

MAPAPPS-7094

[App Editor] Update monaco editor to 0.47.0

MAPAPPS-5074

[App Import] Automatic App import during server startup

MAPAPPS-6986

[apprt-core] Add apprt-core/clone as alternative for ct/_lang#transform

MAPAPPS-6987

[apprt-core] Add appt-core/assignWithPrototype as alternative for ct/_lang#merge

MAPAPPS-6993

[apprt-core] Support synchronous events and remove usage of Observable

MAPAPPS-7012

[Documentation] Add how-to in Developer’s guide for automated app import

MAPAPPS-7089

[Documentation] Format chart headings for popups

MAPAPPS-6953

[Editing] Support snapping properties distance, featureEnabled and selfEnabled

MAPAPPS-7081

[JS Registry] Decorate external links in READMEs and open them in new browser tab

MAPAPPS-7083

[JS Registry] Provide direct link to bundle README from bundle search result list

MAPAPPS-7082

[JS Registry] Sidebar TOC for bundle READMEs

MAPAPPS-7043

[JS Registry] Update Apache commons compress to 1.26

MAPAPPS-7096

[Map] Allow to register tables

MAPAPPS-6888

[Popups] Allow popups on ArcGIS Tiled Map services

MAPAPPS-5515

[Popups] Sort features according to order of map layers

MAPAPPS-7015

[Pre-Optimization] Use background task to compress GZIP and Brotli

MAPAPPS-6476

[Result Center] Add custom fields using Arcade Expressions

MAPAPPS-6999

[Result Center] Add methods to show and hide columns programmatically

MAPAPPS-6480

[Result Center] Collapse topic sidebar

MAPAPPS-7039

[Result Center] Configure alignment of fields

MAPAPPS-7025

[Result Center] Configure field alias

MAPAPPS-6464

[Result Center] Configure field output of numbers and dates

MAPAPPS-6491

[Result Center] Configure to always show sidepane

MAPAPPS-7004

[Result Center] Control order of dynamic actions

MAPAPPS-7001

[Result Center] Dynamically calculate when an action menu is required

MAPAPPS-7002

[Result Center] Improve automatic size of columns

MAPAPPS-7035

[Result Center] Move all actions to "More Actions" menu when on mobile screens or in narrow mode

MAPAPPS-7003

[Result Center] Move row actions to left side

MAPAPPS-7005

[Result Center] Order bulk actions by label instead of ID

MAPAPPS-6970

[Result Center] Row action to open popup

MAPAPPS-6904

[Result Center] Row action to start edit workflow

MAPAPPS-6658

[Result Center] Set maximum length of visible cell content

MAPAPPS-7000

[Result Center] Show 'more actions' menu only if it contains more than one action

MAPAPPS-7010

[Result Center] Show tooltip for too long topic names

MAPAPPS-7019

[Result Center] Support all Esri dateformat values similar to popups

MAPAPPS-7067

[Result Center] Support popups for highlighted items that are not shown on the map

MAPAPPS-6700

[Result Center] Update table when underlying FeatureLayer is edited

MAPAPPS-6496

[Result Center] Zoom to all results when clicking on topic in sidebar

MAPAPPS-6865

[Result Center] Zoom to new extent when results are added

MAPAPPS-6872

[Search] Add support for GeoJSON, CSV and WFS

MAPAPPS-6972

[Search] Consider map position for ranking search results of ArcGIS World Geocoder

MAPAPPS-5851

[Search] Respect time extent for search and selection

MAPAPPS-6657

[Search] Search and select in OGC API Features layer

MAPAPPS-5692

[Selection] Add optional hooks to allow developers to control additional widgets

MAPAPPS-5297

[Selection] Allow to use non-interactive SpatialInputActions

MAPAPPS-6655

[Selection] Allow user to decide if current results are replaced or merged

MAPAPPS-5309

[Setup] Simplify integration of service.monitor analytics tracking

MAPAPPS-7065

[Sketching] Support popups when not drawing

MAPAPPS-6964

[System] Update ArcGIS Maps SDK for JavaScript to version 4.29

MAPAPPS-6840

[Vuetify] Improve accessibility for vuetify button groups component

Fixed Security Issues

MAPAPPS-7058

[Proxy] Unwanted transmission of external cookies

Fixed Issues

MAPAPPS-7101

[Accessibility] Keyboard focus for map is shown during mouse navigation

MAPAPPS-7119

[Accessibility] Missing aria attributes for basemaps dropdown in TOC

MAPAPPS-7106

[apprt-core] Value lookup in string-replace helper ignores keys containing a dot

MAPAPPS-6989

[App Editor] Schema validation fails if jsregistry url is defined without protocol

MAPAPPS-6962

[Database] Maximum key length for a nonclustered index exceeded in Microsoft SQL Server

MAPAPPS-7122

[Documentation] Broken link to bundle documentation

MAPAPPS-7113

[Editing] Input type date picker shows unwanted time input

MAPAPPS-7022

[Editing] Visual feedback when hovering item in template list is missing

MAPAPPS-7125

[Editing] Wrong text color for disabled field content in everlasting theme

MAPAPPS-7026

[JS Registry] Bundle README links to other bundles with anchors are not working

MAPAPPS-7109

[Map] GeoJSON layers with popupTemplates generate unwanted underscores

MAPAPPS-7091

[Measurement] Measurement over long distances in EPSG 25832 leads to errors

MAPAPPS-7088

[Popups] All line breaks in tables are moved to the beginning

MAPAPPS-7054

[Popups] Attachments are not shown in popup opened from open-popup map action

MAPAPPS-7115

[Reporting] Report generation fails if service URL contains special characters

MAPAPPS-7007

[Result Center] Selection column header can be scrolled out of view

MAPAPPS-7064

[result-ui] Cannot trigger row action for feature with id 0

MAPAPPS-7086

[Selection] Missing feature highlight

MAPAPPS-7111

[TOC] Window can not be uncollapsed after it was closed in collapsed state

MAPAPPS-6984

[TOC] Wrong behavior of visibilityMode exclusive

MAPAPPS-7114

[Vuetify] Do not show v-tooltip when user touches on element

MAPAPPS-7040

[Vuetify] Menus stay opened when content outside the menu is scrolled