You are using a browser that is no longer supported. Please use the latest version of Google Chrome, Mozilla Firefox, Apple Safari, or Microsoft Edge. For more information please see the System Requirements.
Skip To ContentArcGIS for DevelopersSign In Dashboard

Unsupported browser

You are using a browser that is not supported. JavaScript API works on the latest versions of Google Chrome, Mozilla Firefox, Apple Safari, or Microsoft Edge. Use one of these browsers and provide your feedback through GeoNet, the Esri Community.

  • {}
  • Firefox
  • Safari
  • undefined

Note: Support for 3D on mobile devices may vary, view the system requirements for more information.

This sample demonstrates how to load a PortalItem from a Portal for ArcGIS item into your application.

1. Define a template to display items

You'll want to define a template to use for each PortalItem to display in the application.

var template =
  '<div data-itemid="{id}" class="card block" draggable="true">' +
    '<figure class="card-image-wrap"><img class="card-image" src="{thumbnailUrl}" alt="Card Thumbnail">' +
      '<figcaption class="card-image-caption">{title}</figcaption>' +
    "</figure>" +
    '<div class="card-content">' +
      "<ul>" +
        "<li>Published Date:</li>" + "{created}" +
        "<li>Owner:</li>" + "{owner}" +
      "</ul>" +
    "</div>" +

2. Load the Portal Items

Create an array of all the Portal items to use in this application. We want to load the Portal items when they are created, because we want to use the information such as id, owner, etc. to display in the application.

var portalItems = {
  return new PortalItem({
    id: itemid

3. Create DOM elements to display item details on page

Use the eachAlways method of esri/core/promiseUtils to wait for the Portal items to finish loading. You can then use the esri/intl.substitute() method to create DOM elements using the details of each Portal item to display on the page. Also, you will need to listen for DOM element's dragStart event and assign some data to be transferred to whereever that element is dropped.

promiseUtils.eachAlways(portalItems).then(function(items) {
  var docFrag = document.createDocumentFragment(); {
    var item = result.value;
    var card = intl.substitute(template, item);
    var elem = document.createElement("div");
    elem.innerHTML = card;
    // This is a technique to turn a DOM string to a DOM element.
    var target = elem.firstChild;
    target.addEventListener("dragstart", function(event) {
      var id = event.currentTarget.getAttribute("data-itemid");
      event.dataTransfer.setData("text", id);

4. Manage drag events

Listen for the drop and dragover events to properly drop the Portal item on the MapView. You can then get the id of the PortalItem and add the layer to the WebMap using Layer.fromPortalItem.

promiseUtils.eachAlways(portalItems).then(function(items) {
  view.container.addEventListener("dragover", function(event) {
    event.dataTransfer.dropEffect = "copy";
  view.container.addEventListener("drop", function(event) {
    var id = event.dataTransfer.getData("text");
    // Get the first item that matches
    var resultItem = items.find(function(x) { return === id; });
    var item = result.value;
    if (item && item.isLayer) {
        portalItem: item
      }).then(function(layer) {
        view.extent = item.extent;

Please refer to the Working with the ArcGIS Platform for information on how the ArcGIS API for JavaScript makes use of working with portal items.

Sample search results