@arcgis/map-components
Version:
ArcGIS Map Components
158 lines (157 loc) • 10.6 kB
JavaScript
/* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
import { html as c } from "lit";
import { keyed as Y } from "lit/directives/keyed.js";
import { isLayerFromCatalog as Ce } from "@arcgis/core/layers/catalog/catalogUtils.js";
import { safeClassMap as d, safeStyleMap as Te, nothing as r } from "@arcgis/lumina";
import { classes as F } from "@arcgis/toolkit/dom";
import { createRef as Z, ref as ee } from "lit/directives/ref.js";
import { g as Se, a as le } from "../../../chunks/action-utils.js";
import { h as xe, j as te, l as Me, k as Le, n as Ee, o as ke, g as we } from "../../../chunks/layer-list-utils.js";
import { s as Pe } from "../../../chunks/component-utils.js";
const ne = /* @__PURE__ */ new Map();
function ce(i) {
return i ? ne.get(i) ?? !1 : !1;
}
function De(i, e) {
const l = !(i.aria?.pressed ?? ce(e));
return i.aria = { ...i.aria, pressed: l }, e && ne.set(e, l), l;
}
function O(i) {
return i && "visibilityMode" in i ? i.visibilityMode : null;
}
function ie(i, e) {
if (!("visible" in i))
return;
O(e) === "exclusive" && i.visible || (i.visible = !i.visible);
}
function Fe(i, e) {
i.panel.open = !i.panel.open, i.panel.open && e && e();
}
function Oe(i, e, l, m) {
i && l === e.layer?.uid && (Pe(i), m?.(null));
}
function Ge(i, e, l) {
l.type === "toggle" && (l.value = !l.value), i(l, e);
}
function Re(i) {
return i.actionsSections.map((e) => e.filter((l) => l.visible));
}
function se(i, e) {
const { icon: l } = e;
if (l)
return null;
const m = "image" in e ? e.image : void 0;
return m ? c`<span aria-hidden=true class=${d(F(i.itemActionIcon, { [i.itemActionImage]: !!m }))} style=${Te(Se(m))}></span>` : null;
}
function ae(i, e, l) {
const { item: m, css: a, handleAction: f } = i, { active: C, disabled: I, title: b, type: T, indicator: h } = e, S = le(e);
return c`<calcite-action .active=${T === "toggle" ? e.value : !1} data-action-id=${e.id ?? r} .disabled=${I} .icon=${S} .indicator=${h} .loading=${C} @click=${() => Ge(f, m, e)} scale=s slot=${(l ? void 0 : "actions-end") ?? r} .text=${b ?? ""} .textEnabled=${l} title=${b ?? void 0 ?? r}>${se(a, e)}</calcite-action>`;
}
function Ve(i) {
const { item: e, parent: l, hideStatusIndicators: m, css: a, visibilityAppearance: f, hideCatalogLayerList: C, dragEnabled: I = !1, rootGroupUid: b, listModeDisabled: T = !1, selectionMode: h, displayMode: S, layerTablesEnabled: x, showErrors: oe, parentTitles: G, selectedItems: re, activeItem: de, handleCatalogOpen: ue, handleTablesOpen: me, selectedDragItemLayerUid: $e, handleSelectedDragItemLayerUidChange: ge, handlePanelOpen: pe, messages: n, setCurrentActiveItem: R, clearActiveItem: V } = i, g = Z(), M = Z(), y = e.title || ("untitledTable" in n ? n.untitledTable : n.untitledLayer ?? "");
let H = null;
m || (H = c`<arcgis-layer-list-item-indicator class=${d(a.statusIndicator)} .messages=${n} .item=${e} .parent=${l} slot=content-end></arcgis-layer-list-item-indicator>`);
let U = null;
{
const { layer: t } = e, s = t && "persistenceEnabled" in t && (Ce(t) || !t.persistenceEnabled);
(i.showTemporaryLayerIndicators || i.showTemporaryTableIndicators) && s && (U = c`<calcite-icon class=${d(a.itemTemporaryIcon)} icon=temporary scale=s slot=content-start title=${n.temporary ?? r}></calcite-icon>`);
}
let q = null;
if ("visible" in e && "visibleToggle" in a && f) {
const t = O(l);
if (t !== "inherited") {
const s = xe({
visible: e.visible,
exclusive: t === "exclusive",
visibilityAppearance: f
}), o = f === "checkbox", u = n.layerVisibility, v = e.title ?? e.layer?.title ?? "", p = v ? `${u ?? ""}: ${v}` : u ?? "", P = ce(e.layer?.id);
q = c`<calcite-action .aria=${{ pressed: P }} class=${d(a.visibleToggle)} .icon=${o ? s : void 0} .label=${p} @click=${(D) => {
De(D.currentTarget, e.layer?.id), ie(e, l);
}} .slot=${o ? "actions-start" : "actions-end"} .text=${u ?? ""} title=${u ?? r}>${o ? null : c`<calcite-icon class=${d(F({
[a.visibleIcon]: t !== "exclusive" && e.visible
}))} .icon=${s} scale=s></calcite-icon>`}</calcite-action>`;
}
}
let j = null;
{
const t = e.panel;
t?.open && !t.disabled && !t.flowEnabled && (j = c`<div class=${d(a.itemContentBottom)} slot=content-bottom><arcgis-layer-list-item-panel .item=${e} .view=${i.view}></arcgis-layer-list-item-panel></div>`);
}
let B = null;
{
const t = e.panel;
if (t?.visible) {
const { open: s, title: o, disabled: u } = t, v = { icon: t.icon, image: t.image, indicator: !1 }, p = le(v);
B = c`<calcite-action .active=${s} .disabled=${u} .icon=${p} @click=${() => Fe(e, pe)} slot=actions-end .text=${o ?? ""} title=${o ?? void 0 ?? r}>${se(a, t)}</calcite-action>`;
}
}
let N = null;
{
const t = e.layer, s = t?.type === "catalog-footprint", o = t?.type === "sublayer" && te(t, "footprints");
"itemCatalogIcon" in a && (s || o) && (N = c`<calcite-icon class=${d(a.itemCatalogIcon)} icon=footprint scale=s slot=content-start></calcite-icon>`);
}
let _ = null;
{
const t = e.layer, s = t?.type === "catalog-dynamic-group", o = t?.type === "sublayer" && te(t, "layers-in-view");
"itemCatalogIcon" in a && (s || o) && (_ = c`<calcite-icon class=${d(a.itemCatalogIcon)} icon=catalog-dataset scale=s slot=content-start></calcite-icon>`);
}
let z = null;
if ("visible" in e) {
const t = e.layer;
!C && t?.type === "catalog-dynamic-group" && (z = c`<calcite-action .disabled=${!t.visible} icon=chevron-right icon-flip-rtl @click=${() => ue?.(e)} scale=s slot=actions-end .text=${y ?? ""}></calcite-action>`);
}
let J = null, L = !1;
{
const t = e.layer;
if (x && t)
switch (t.type) {
case "knowledge-graph":
L = x.includes(t.type) && "tables" in t && !!t.tables?.length;
break;
case "map-image":
case "tile":
L = x.includes(t.type) && "subtables" in t && !!t.subtables?.length;
break;
}
"itemTableIcon" in a && "visible" in e && "tables" in n && L && (J = Y(`${e.uid}-tables`, c`<calcite-list-item class=${d(a.item)} data-layer-id=${t?.id ?? r} drag-disabled .label=${n.tables} title=${n.tables ?? r} @calciteListItemSelect=${() => me?.(e)} .value=${e}><calcite-icon class=${d(a.itemTableIcon)} icon=table scale=s slot=content-start></calcite-icon><calcite-icon flip-rtl icon=chevron-right scale=s slot=content-end></calcite-icon></calcite-list-item>`));
}
let K = null;
if ("children" in e) {
const t = [...G ?? [], e.title], { children: s, layer: o } = e, u = o?.type !== "catalog-dynamic-group" && Me(e), v = T ? !1 : Le(o), p = o?.type === "group", P = !v && !u && I && p, D = p && "sortable" in e && e.sortable, Ie = I && ("childrenSortable" in e && e.childrenSortable || D) && Ee(e), Ae = u ? (s?.filter(($) => !$.hidden && (oe || !$.error)).toArray() ?? []).map(($) => Ve({ ...i, item: $, parent: e, parentTitles: t })) : null;
(u || P) && (K = c`<calcite-list .canPull=${($) => i.canMove ? i.canMove($, "pull") : !1} .canPut=${($) => i.canMove ? i.canMove($, "put") : !1} data-item=${e.uid ?? r} data-layer-type=${b ?? r} .displayMode=${S} .dragEnabled=${Ie} .group=${p ? b : `${b}-${o?.uid}`} .label=${e.title} selection-appearance=highlight .selectionMode=${h}>${Ae}${J}</calcite-list>`);
}
let E = null;
if (e.error) {
const t = "layerError" in n ? n.layerError : n.tableError;
E = c`<div class=${d(a.itemMessage)} slot=content-bottom><calcite-notice icon=exclamation-mark-triangle kind=warning open scale=s width=full><div slot=message>${t}</div></calcite-notice></div>`;
} else "incompatible" in e && e.incompatible && "layerIncompatible" in n && (E = c`<div class=${d(a.itemMessage)} slot=content-bottom><calcite-notice icon=exclamation-mark-triangle kind=warning open scale=s tabindex=0 width=full ${ee(M)}><div slot=message>${n.layerIncompatible}</div></calcite-notice></div>`);
const Q = Re(e), k = e.actionsSections.reduce((t, s) => t + s.length, 0), W = ke(Q), be = Q.toArray().map((t) => c`<calcite-action-group>${t.toArray().map((s) => ae(i, s, !0))}</calcite-action-group>`), ye = (t) => {
e.actionsOpen = t.currentTarget.open;
};
let X = null;
k > 1 && (X = c`<calcite-action-menu appearance=transparent .label=${n.menu ?? ""} .open=${e.actionsOpen} overlay-positioning=fixed placement=bottom-end slot=actions-end @calciteActionMenuOpen=${ye}><calcite-action .aria=${{
expanded: e.actionsOpen ?? !1,
hasPopup: "true"
}} icon=ellipsis scale=s slot=trigger .text=${n.options ?? ""} title=${n.options ?? r}></calcite-action>${be}</calcite-action-menu>`);
let w = null;
k === 1 && W ? w = ae(i, W, !1) : k > 1 && (w = X);
const ve = "visibleAtCurrentTimeExtent" in e && "layerInvisibleAtTime" in n && !e.visibleAtCurrentTimeExtent ? `${y} (${n.layerInvisibleAtTime})` : "visibleAtCurrentScale" in e && "layerInvisibleAtScale" in n && !e.visibleAtCurrentScale ? `${y} (${n.layerInvisibleAtScale})` : y, fe = "parent" in e && e.parent?.layer?.type === "catalog", A = e.layer, he = "visibleAtCurrentScale" in e && !e.visibleAtCurrentScale || "visibleAtCurrentTimeExtent" in e && !e.visibleAtCurrentTimeExtent;
return queueMicrotask(() => {
Oe(g.value ?? null, e, $e, ge), M.value && (i.handleTooltipReferenceChange?.(A?.uid, M.value), queueMicrotask(() => i.handleTooltipReferenceChange?.(A?.uid, null))), e.panel && (e.panel.container = g.value);
}), Y(e.uid, c`<calcite-list-item class=${d(F(a.item, "itemActive" in a && { [a.itemActive]: de?.uid === e.uid }))} data-item=${e.uid ?? r} data-layer-id=${A?.id ?? r} .dragDisabled=${!("sortable" in e && e.sortable) || fe} id=${A?.uid ?? r} .label=${y} .metadata=${{ parentTitles: G ?? [], _title: y }} .expanded=${"open" in e && e.open} .selected=${h !== "none" ? re.includes(e) : !1} title=${ve ?? r} .unavailable=${he} .value=${e} @focusin=${() => {
R?.(e), g.value?.classList.add(a.itemActive);
}} @focusout=${() => {
V?.(), g.value?.classList.remove(a.itemActive);
}} @mouseover=${() => {
R?.(e), g.value?.classList.add(a.itemActive);
}} @mouseleave=${() => {
V?.(), g.value?.classList.remove(a.itemActive);
}} @calciteListItemSelect=${(t) => {
t.target === t.currentTarget && "visible" in e && we(t.currentTarget, i.operationalItems) === e && h === "none" && O(l) !== "inherited" && ie(e, l);
}} @calciteListItemToggle=${(t) => {
"open" in e && (t.stopPropagation(), e.open = t.target.expanded);
}} ${ee(g)}>${N}${_}${H}${q}${z}${U}${K}${E}${j}${B}${w}</calcite-list-item>`);
}
export {
Ve as ArcgisLayerListItem
};