@arcgis/map-components
Version:
ArcGIS Map Components
191 lines (190 loc) • 15.1 kB
JavaScript
/* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
import { c as p } from "../../chunks/runtime.js";
import y from "@arcgis/core/Color.js";
import "@arcgis/core/core/Error.js";
import "@arcgis/core/Graphic.js";
import { LitElement as f, createEvent as o } from "@arcgis/lumina";
import { log as d, composeMissingPropertyMessage as h, composeEmptyPropertyMessage as _ } from "@arcgis/toolkit/log";
import { css as v, html as i } from "lit";
import { createRef as b, ref as u } from "lit/directives/ref.js";
import { u as R } from "../../chunks/useT9n.js";
import { l as $ } from "../../chunks/async-utils.js";
import { q as C, c as w } from "../../chunks/layer-utils.js";
const E = v`:host{min-height:var(--arcgis-internal-panel-height-sm, 240px);height:100%}arcgis-features{height:100%}calcite-table{--calcite-table-border-color: none}calcite-table-row{--calcite-table-row-border-color: var(--calcite-color-border-3)}.white-panel-background{--calcite-panel-background-color: var(--calcite-color-foreground-1)}.aggregated-geometry-container{display:flex;justify-content:space-between;margin:0 var(--calcite-spacing-md) var(--calcite-spacing-md) var(--calcite-spacing-md)}#elements-list-item{border:solid 1px var(--calcite-color-border-3);border-radius:var(--calcite-corner-radius-sm);margin:0 var(--calcite-spacing-sm)}.no-selectable-results{margin:0 var(--calcite-spacing-md);color:var(--calcite-color-text-3);font-size:var(--calcite-font-size)}.results-heading{display:flex;flex-direction:column;margin:var(--calcite-spacing-md);gap:var(--calcite-spacing-xs)}.results-heading .results-heading-title{font-weight:var(--calcite-font-weight-medium);font-size:var(--calcite-font-size);color:var(--calcite-color-text-1)}.results-heading .results-heading-subtitle{font-size:var(--calcite-font-size--1);color:var(--calcite-color-text-3)}.functions-heading{margin:var(--calcite-spacing-md) var(--calcite-spacing-md) var(--calcite-spacing-xxs) var(--calcite-spacing-md);font-weight:var(--calcite-font-weight-medium);font-size:var(--calcite-font-size);color:var(--calcite-color-text-1)}.no-results-landing{display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;margin:var(--calcite-spacing-sm) var(--calcite-spacing-xl) var(--calcite-spacing-xl) var(--calcite-spacing-xl);gap:var(--calcite-spacing-md)}.no-results-landing calcite-icon{margin-bottom:var(--calcite-spacing-sm);--calcite-icon-color: var(--calcite-color-text-3)}.no-results-landing .no-results-heading{font-size:var(--calcite-font-size-2)}.no-results-landing .no-results-description{color:var(--calcite-color-text-3)}`, g = {
dirtyAreasDiscovered: -2147208511,
noValidControllers: -2147208935,
pathNotFound: -2147208444
};
class F extends f {
constructor() {
super(...arguments), this._defaultPopupTemplateEnabled = !0, this._messages = R({ blocking: !0 }), this._elementsWithoutLayer = [], this._popoverRef = b(), this._layerIdToFeatures = /* @__PURE__ */ new Map(), this._layerIdToLayer = /* @__PURE__ */ new Map(), this._subtypeCodeToFeatures = /* @__PURE__ */ new Map(), this._sourceIdToElements = /* @__PURE__ */ new Map(), this._unLayers = [], this._queryFeaturesOnLayer = async ([e, t]) => {
const a = this.utilityNetwork?.getLayerIdBySourceId(e), s = this._getLayerByLayerId(a), r = this._getElementsUniqueByGlobalId(t);
if (a == null || !s) {
this._elementsWithoutLayer.push(...r);
return;
}
const l = s.createQuery();
l.gdbVersion = this.utilityNetwork?.gdbVersion, l.objectIds = r.map((c) => c.objectId), l.outFields = ["*"];
const { features: n } = await C(s, l);
n.forEach((c) => {
const m = c.layer;
c.getEffectivePopupTemplate(this._defaultPopupTemplateEnabled) || (c.popupTemplate = m.createPopupTemplate());
}), w(s) ? n.forEach((c) => this._addOrCreateMapValue(this._subtypeCodeToFeatures, c.layer.subtypeCode, c)) : this._layerIdToFeatures.set(a, n);
}, this._aggregateGeometryRefChange = (e) => {
e && (this._aggregatedGeometryComponentElement = e);
}, this._featuresRefChange = (e) => {
e && (this._featuresComponentElement = e);
}, this._aggregatedGeometryDisabled = !1, this.aggregatedGeometryGraphicsColor = new y([255, 255, 0, 0.6]), this.hideActionBar = !1, this.hideFeatureResults = !1, this.featuresFromSelectedLayer = [], this.isElementsSelected = !1, this.layers = [], this.state = "ready", this.traceResultFeatures = [], this.autoDestroyDisabled = !1, this.arcgisAggregatedGeometryGraphicsColorChange = o(), this.arcgisHideGraphicsChange = o(), this.arcgisSelectedLayerChange = o(), this.arcgisSelectedResultTypeChange = o(), this.arcgisTraceResultFeaturesReady = o();
}
static {
this.properties = { _aggregatedGeometryDisabled: 16, _featuresComponentElement: 16, aggregatedGeometryGraphicsColor: 0, hideActionBar: 5, hideFeatureResults: 5, featuresFromSelectedLayer: 0, isElementsSelected: 5, layers: 0, messageOverrides: 0, numResults: 32, referenceElement: 1, selectedLayer: 0, state: 1, traceConfigTitle: 1, traceError: 0, traceResult: 0, traceResultFeatures: 0, utilityNetwork: 0, view: 0, autoDestroyDisabled: 5 };
}
static {
this.styles = E;
}
get numResults() {
return this.traceResultFeatures.length + this._elementsWithoutLayer.length;
}
clearAggregatedGeometryGraphics() {
this._aggregatedGeometryComponentElement?.destroy();
}
async destroy() {
this._layerIdToFeatures.clear(), this._subtypeCodeToFeatures.clear(), this._sourceIdToElements.clear(), this._aggregatedGeometryComponentElement?.destroy(), this._featuresComponentElement?.destroy(), await this.manager.destroy();
}
load() {
this.traceResult && (this._setSourceIdToElements(), this._loadDependencies().then(() => this._queryTraceResultsFeatures()).finally(() => {
this.arcgisTraceResultFeaturesReady.emit(), this.state = "ready";
}));
}
willUpdate(e) {
e.has("isElementsSelected") && this.arcgisSelectedResultTypeChange.emit(), e.has("selectedLayer") && this.arcgisSelectedLayerChange.emit(), e.has("traceResult") && (this.isElementsSelected = !1, this.traceResult || (this.traceResultFeatures = [], this._elementsWithoutLayer = []));
}
loaded() {
this.traceResult && (this.utilityNetwork || d("warn", this, h("utilityNetwork")), this.layers.length || d("warn", this, _("layers")), this.view || d("warn", this, h("view")));
}
disconnectedCallback() {
super.disconnectedCallback(), this._layerIdToLayer.clear();
}
_addOrCreateMapValue(e, t, a) {
const s = e.get(t);
s == null ? e.set(t, [a]) : s.push(a);
}
_getLayerByLayerId(e) {
if (e == null)
return;
const { _layerIdToLayer: t, _unLayers: a } = this;
if (t.get(e))
return t.get(e);
const s = a.find((r) => "layerId" in r && r.layerId === e);
return s && t.set(e, s), s;
}
_getElementsUniqueByGlobalId(e) {
return Array.from(new Map(e.map((t) => [t.globalId, t])).values());
}
_handleHideGraphicsChange(e) {
e.stopPropagation();
const t = e.detail;
this.arcgisHideGraphicsChange.emit(t), this._aggregatedGeometryDisabled = t, t && this._popoverRef.value?.open && (this._popoverRef.value.open = !1);
}
async _loadDependencies() {
const { layers: e, utilityNetwork: t } = this;
if (!t)
return;
try {
t.loaded || (this.state = "loading", await t.load());
} catch (r) {
$(r, this, "Error while loading the selected utility network");
}
this._unLayers = e.filter((r) => t.isUtilityLayer(r));
const s = this._unLayers.filter((r) => !r.loaded).map((r) => r.load());
s.length > 0 && (this.state = "loading", (await Promise.allSettled(s)).forEach((l) => {
l.status === "rejected" && d("error", this, `Failed to load layer. Reason: ${l.reason}`);
}));
}
async _queryTraceResultsFeatures() {
const e = Array.from(this._sourceIdToElements.entries());
if (!e.length)
return;
this.state = "loading";
const t = e.map(this._queryFeaturesOnLayer);
(await Promise.allSettled(t)).forEach((l, n) => {
if (l.status === "rejected") {
const [c] = e[n];
d("error", this, `Failed to query features for source ${c}. Reason: ${l.reason}`);
}
});
const s = Array.from(this._layerIdToFeatures.values()), r = Array.from(this._subtypeCodeToFeatures.values());
this.traceResultFeatures = s.concat(r).flat();
}
_setSourceIdToElements() {
this.traceResult.elements?.forEach((e) => this._addOrCreateMapValue(this._sourceIdToElements, e.networkSourceId, e));
}
render() {
const { traceError: e, traceResult: t } = this;
if (e)
return this._renderErrorLanding(e);
if (!t)
return this._renderNoTraceLanding();
const { elements: a, globalFunctionResults: s, aggregatedGeometry: r } = t, l = !a.length && !s.length && !r, n = a.length > 0 && !s.length && !r;
return l ? this._renderNoResultsLanding() : this.state === "loading" ? this._renderGettingResults() : this.hideFeatureResults && n ? this._renderFeaturesAreHiddenLanding() : this.isElementsSelected || n ? i`<arcgis-features-next .autoDestroyDisabled=${this.autoDestroyDisabled} .defaultPopupTemplateEnabled=${this._defaultPopupTemplateEnabled} .features=${this.traceResultFeatures} .hideActionBar=${this.hideActionBar} .hideCloseButton=${n} hide-select-feature initial-display-mode=list =${() => this.isElementsSelected = !1} open .referenceElement=${this.referenceElement} .view=${this.view} ${u(this._featuresRefChange)}></arcgis-features-next>` : this._renderLanding(t);
}
_renderGettingResults() {
return i`<calcite-panel class="white-panel-background"><calcite-loader .label=${this._messages.gettingResults} .text=${this._messages.gettingResults}></calcite-loader></calcite-panel>`;
}
_renderLanding(e) {
const { elements: t, globalFunctionResults: a, aggregatedGeometry: s } = e;
return i`<calcite-panel class="white-panel-background">${this._renderTraceResultsHeading()}${s != null ? this._renderAggregatedGeometry(s) : null}${s != null && !t.length ? this._renderNoSelectableResults() : null}${t.length > 0 ? this.hideFeatureResults ? this._renderFeaturesAreHidden() : this._renderElementsResults() : null}${a.length > 0 ? this._renderFunctionsResults(a) : null}</calcite-panel>`;
}
_renderAggregatedGeometry(e) {
return i`<div class="aggregated-geometry-container"><arcgis-utility-network-aggregated-geometry .graphicsColor=${this.aggregatedGeometryGraphicsColor} .geometry=${e} .view=${this.view} =${this._handleHideGraphicsChange} auto-destroy-disabled ${u(this._aggregateGeometryRefChange)}></arcgis-utility-network-aggregated-geometry><calcite-swatch id=geometry-color-swatch .label=${this._messages.labels.aggregatedGeometryGraphicsColor} .color=${this.aggregatedGeometryGraphicsColor.toCss()} .disabled=${this._aggregatedGeometryDisabled}></calcite-swatch><calcite-popover .heading=${this._messages.headings.setColor} .label=${this._messages.headings.setColor} reference-element=geometry-color-swatch closable ${u(this._popoverRef)}><calcite-color-picker alpha-channel channels-disabled clearable hex-disabled saved-disabled .value=${this.aggregatedGeometryGraphicsColor} =${(t) => {
const a = t.target.value;
this.arcgisAggregatedGeometryGraphicsColorChange.emit(a);
}} .disabled=${this._aggregatedGeometryDisabled}></calcite-color-picker></calcite-popover></div>`;
}
_renderFeaturesAreHiddenLanding() {
return i`<calcite-panel class="white-panel-background">${this._renderTraceResultsHeading()}${this._renderFeaturesAreHidden()}</calcite-panel>`;
}
_renderFeaturesAreHidden() {
return i`<div class="no-selectable-results">${this._messages.resultFeaturesAreHidden}</div>`;
}
_renderNoSelectableResults() {
return i`<div class="no-selectable-results">${this._messages.noSelectableFeatures}</div>`;
}
_renderElementsResults() {
return i`<calcite-list .label=${this._messages.headings.traceResultsGeneric}><calcite-list-item id=elements-list-item .label=${this._messages.headings.features} =${() => this.isElementsSelected = !0}><calcite-chip .label=${this._messages.labels.numFeatures} scale=s slot=content-end>${this.numResults}</calcite-chip><calcite-icon icon=chevron-right slot=content-end></calcite-icon></calcite-list-item></calcite-list>`;
}
_renderFunctionsResults(e) {
return i`<div class="functions-heading">${this._messages.headings.functions}</div><calcite-table .caption=${this._messages.labels.functionResults}>${e.filter((t) => t.networkAttributeName != null && t.result != null && t.functionType != null).map((t) => {
const { functionName: a, networkAttributeName: s, functionType: r, result: l } = t, n = a || `${s} ${r}`;
return i`<calcite-table-row><calcite-table-cell>${n}</calcite-table-cell><calcite-table-cell>${l}</calcite-table-cell></calcite-table-row>`;
})}</calcite-table>`;
}
_renderTraceResultsHeading() {
return i`<div class="results-heading"><div class="results-heading-title">${this._messages.headings.traceResultsGeneric}</div>${this.traceConfigTitle ? i`<div class="results-heading-subtitle">${this.traceConfigTitle}</div>` : null}</div>`;
}
_renderErrorLanding(e) {
let t = e.message;
switch (e.details?.raw?.extendedCode) {
case g.dirtyAreasDiscovered:
t = this._messages.traceErrors.dirtyAreasDiscovered;
break;
case g.noValidControllers:
t = this._messages.traceErrors.noValidControllers;
break;
case g.pathNotFound:
t = this._messages.traceErrors.pathNotFound;
break;
}
return i`<calcite-panel class="white-panel-background">${this._renderTraceResultsHeading()}<div class="no-results-landing"><calcite-icon icon=exclamation-mark-triangle scale=l></calcite-icon><div class="no-results-heading">${this._messages.traceFailedHeading}</div><div class="no-results-description">${this._messages.traceFailedDescription}</div><div class="no-results-description">${t}</div></div></calcite-panel>`;
}
_renderNoResultsLanding() {
return i`<calcite-panel class="white-panel-background">${this._renderTraceResultsHeading()}<div class="no-results-landing"><calcite-icon icon=exclamation-mark-triangle scale=l></calcite-icon><div class="no-results-heading">${this._messages.noResultsHeading}</div><div class="no-results-description">${this._messages.noResultsDescription}</div></div></calcite-panel>`;
}
_renderNoTraceLanding() {
return i`<calcite-panel class="white-panel-background">${this._renderTraceResultsHeading()}<div class="no-results-landing"><calcite-icon icon=utility-network-trace scale=l></calcite-icon><div class="no-results-heading">${this._messages.noTraceConfigHeading}</div><div class="no-results-description">${this._messages.noTraceConfigDescription}</div></div></calcite-panel>`;
}
}
p("arcgis-utility-network-trace-results", F);
export {
F as ArcgisUtilityNetworkTraceResults
};