<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<title>Changing Versions with the VersionManagementService | Sample | ArcGIS Maps SDK for JavaScript</title>
<link rel="stylesheet" href="https://js.arcgis.com/5.0/esri/themes/light/main.css" />
<!-- Load the ArcGIS Maps SDK for JavaScript from CDN -->
<script type="module" src="https://js.arcgis.com/5.0/"></script>
const [MapView, Expand, FeatureLayer, VersionManagementService, Map] = await $arcgis.import([
"@arcgis/core/views/MapView.js",
"@arcgis/core/widgets/Expand.js",
"@arcgis/core/layers/FeatureLayer.js",
"@arcgis/core/versionManagement/VersionManagementService.js",
// Credentials to signin:
// password: I68VGU^nMurF
// Initialize VersionManagementService
const currentVMS = new VersionManagementService({
url: "https://sampleserver7.arcgisonline.com/server/rest/services/US_Cities_Branch/VersionManagementServer",
// Initialize FeatureLayer
const featureLayer = new FeatureLayer({
url: "https://sampleserver7.arcgisonline.com/server/rest/services/US_Cities_Branch/FeatureServer/1",
// UI element for holding list of versions.
const versionList = document.getElementById("versionListEl");
const view = new MapView({
view.when(async function () {
currentVersionIdentifier = currentVMS.defaultVersionIdentifier;
// Getting available versions
versions = await currentVMS.getVersionInfos();
await displayVersionsInPanel(versions);
versionMenuExpand.expanded = true;
let currentVersionIdentifier = null;
const versionMenuExpand = new Expand({
content: document.getElementById("panel"),
view.ui.add(versionMenuExpand, "top-left");
function displayVersionsInPanel(versions) {
versionList.textContent = "";
versions.forEach((item) => {
const { versionIdentifier } = item;
const listItem = document.createElement("calcite-list-item");
listItem.label = versionIdentifier.name;
listItem.value = versionIdentifier.name;
versionList.append(listItem);
if (currentVMS.defaultVersionIdentifier.name === versionIdentifier.name) {
listItem.selected = true;
currentVersion = currentVMS.defaultVersionIdentifier;
originalVersionList = [...versionList.children];
versionList.addEventListener("calciteListChange", handleVersionChange);
async function handleVersionChange(evt) {
const { selectedItems } = evt.target;
const newVersionIdentifier = await currentVMS.getVersionIdentifierFromName(
const featureLayerList = [featureLayer];
changeVersion(featureLayerList, newVersionIdentifier, currentVersionIdentifier);
async function changeVersion(featureLayerList, newVersion, currentVersion) {
await currentVMS.changeVersion(featureLayerList, currentVersion, newVersion);
currentVersionIdentifier = newVersion;
<calcite-panel id="panel" heading="Change Version">
Select an item from the list below to <br />
change the version of the layer in the map
<calcite-list id="versionListEl" selection-mode="single"></calcite-list>