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.
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 wherever that element is dropped.
Use dark colors for code blocksCopy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
promiseUtils.eachAlways(portalItems).then((items) => {
const docFrag = document.createDocumentFragment();
items.map((result) => {
const item = result.value;
const card = intl.substitute(template, item);
const elem = document.createElement("div");
elem.innerHTML = card;
// This is a technique to turn a DOM string to a DOM element.const target = elem.firstChild;
docFrag.appendChild(target);
target.addEventListener("dragstart", (event) => {
const id = event.currentTarget.getAttribute("data-itemid");
event.dataTransfer.setData("text", id);
});
});
document.querySelector(".cards-list").appendChild(docFrag);
...
});
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.