@arcgis/map-components
Version:
ArcGIS Map Components
209 lines (208 loc) • 13.1 kB
JavaScript
/* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
import { c as k } from "../../chunks/runtime.js";
import { css as _, html as s } from "lit";
import { getOwningPortalUrl as N, hasUserTypeExtension as V } from "@arcgis/core/applications/Components/featureUtils.js";
import "@arcgis/core/core/Error.js";
import { on as b, watch as $ } from "@arcgis/core/core/reactiveUtils.js";
import T from "@arcgis/core/portal/Portal.js";
import "@arcgis/core/rest/networks/support/ValidateNetworkTopologyResult.js";
import { LitElement as A, createEvent as u, nothing as l } from "@arcgis/lumina";
import { log as d, composeMissingPropertyMessage as y } from "@arcgis/toolkit/log";
import { generateGuid as E } from "@arcgis/toolkit/string";
import { u as U } from "../../chunks/useT9n.js";
import { u as L } from "../../chunks/useView.js";
import { c as S, i as C, l as I, t as n } from "../../chunks/async-utils.js";
import { d as O } from "../../chunks/layer-utils.js";
const D = _`:host{--arcgis-internal-color-black-30: color-mix(in srgb, #000000 30.2%, transparent);--arcgis-internal-box-shadow: var(--calcite-spacing-none) var(--calcite-spacing-px) var(--calcite-spacing-base) var(--arcgis-internal-color-black-30);--arcgis-internal-top-max-width: calc(min(100cqw, 100vw) - var(--calcite-spacing-xxxl));--arcgis-internal-panel-width: 300px;--arcgis-internal-panel-height: 100%;--arcgis-internal-panel-height-sm: 240px;--arcgis-internal-panel-height-md: 420px;--arcgis-internal-panel-height-lg: 540px;--arcgis-internal-panel-height-xl: 680px;--arcgis-internal-panel-gap: var(--calcite-spacing-lg);--arcgis-internal-panel-actions-gap: var(--calcite-spacing-sm);--arcgis-internal-basemap-gallery-width-lg: 450px;--arcgis-internal-collapse-icon-flip: scaleX(1);--arcgis-internal-row-direction: row;--arcgis-internal-legend-width: 300px;--arcgis-internal-layout-overlay-space-top: var(--arcgis-layout-overlay-space-top, 0px);--arcgis-internal-layout-overlay-space-bottom: var(--arcgis-layout-overlay-space-bottom, 0px);--arcgis-internal-layout-overlay-space-left: var(--arcgis-layout-overlay-space-left, 0px);--arcgis-internal-layout-overlay-space-right: var(--arcgis-layout-overlay-space-right, 0px);--arcgis-internal-view-color-focus: var(--arcgis-view-color-focus, var(--calcite-color-brand));--arcgis-internal-attribution-space-bottom: var(--arcgis-internal-layout-overlay-space-bottom);--arcgis-internal-attribution-space-left: var(--arcgis-internal-layout-overlay-space-left);--arcgis-internal-attribution-space-right: var(--arcgis-internal-layout-overlay-space-right);--arcgis-internal-attribution-font-size: var(--calcite-font-size-sm);--arcgis-internal-attribution-font-size-sm: var(--calcite-font-size-xs);--arcgis-internal-sketch-justify-content: flex-start}:host{display:flex;flex-direction:column;height:var(--arcgis-internal-panel-height, 100%)}calcite-block{margin:0;border-bottom:none}calcite-combobox{margin-bottom:var(--calcite-spacing-sm)}calcite-icon{width:32px}`, p = {
noDirtyAreasInExtent: -2147208940,
operationOnlyAllowedByOwner: -2147217144,
cannotAcquireVersionLockV10: -2147217146,
cannotAcquireVersionLockV11: -2147220947
};
class q extends A {
constructor() {
super(...arguments), this._messages = U({ blocking: !0 }), this._unVntGuid = `unvnt_${E()}`, this.disabled = !1, this.extentToValidate = "current", this.hideUtilityNetworkSelect = !1, this.state = { type: "disabled" }, this.view = L(this), this.arcgisReady = u(), this.arcgisValidateNetworkTopologyEnd = u(), this.arcgisValidateNetworkTopologyStart = u();
}
static {
this.properties = { beforeValidateNetworkTopologyStart: 0, disabled: 5, extentToValidate: 1, hideUtilityNetworkSelect: 5, label: 1, messageOverrides: 0, referenceElement: 1, result: 0, state: 0, utilityNetwork: 0, view: 0 };
}
static {
this.styles = D;
}
async loaded() {
this.manager.onLifecycle(() => [
b(() => this.view?.map?.allLayers, "change", (e) => {
const t = e.added.concat(e.removed);
this._getDirtyAreasLayer(t) && this._runSetup();
}),
b(() => this.view?.map?.utilityNetworks, "change", () => {
this._runSetup();
}),
$(() => this.view, () => {
this._runSetup();
}, { initial: !0 })
]);
}
_getDirtyAreasLayer(e) {
const t = this.utilityNetwork?.networkSystemLayers.dirtyAreasLayerUrl;
if (t)
return e.find((i) => O(i) && `${i.url}/${i.layerId}` === t);
}
async _handleValidateNetworkTopologyAction() {
try {
if (this.result = void 0, !this.view) {
this.state = { type: "error-disable-component", message: this._messages.errors.noView };
return;
}
if (!this.utilityNetwork) {
this.state = { type: "error-disable-component", message: this._messages.errors.noUtilityNetworks };
return;
}
this.beforeValidateNetworkTopologyStart && await this.beforeValidateNetworkTopologyStart();
const { view: e, utilityNetwork: t } = this;
if (!e) {
this.state = { type: "error-disable-component", message: this._messages.errors.noView };
return;
}
if (!t) {
this.state = { type: "error-disable-component", message: this._messages.errors.noUtilityNetwork }, d("warn", this, y("utilityNetwork"));
return;
}
if (this.arcgisValidateNetworkTopologyStart.emit().defaultPrevented) {
d("info", this, this._messages.info.validateCanceled);
return;
}
this.state = { type: "executing" };
const r = {
outSpatialReference: e.spatialReference?.clone() || null,
validateArea: this.extentToValidate === "current" || !t.fullExtent ? e.extent.clone() : t.fullExtent.clone()
};
this.result = await t.validateTopology(r), this.state = { type: "success", message: this._messages.status.success };
} catch (e) {
const { _messages: { errors: { cannotAcquireVersionLock: t, noDirtyAreasInExtent: i, operationOnlyAllowedByOwner: r } } } = this;
this.result = void 0;
const o = e, a = o.details?.raw?.extendedCode;
let c = o.message || this._messages.info.validateCanceled;
switch (a) {
case p.noDirtyAreasInExtent:
c = i;
break;
case p.cannotAcquireVersionLockV10:
case p.cannotAcquireVersionLockV11:
c = t;
break;
case p.operationOnlyAllowedByOwner:
c = r;
break;
}
this.state = { type: "error-info", message: c };
} finally {
this.arcgisValidateNetworkTopologyEnd.emit();
}
}
async _runSetup() {
this._setupTask?.abort();
const e = S(async (t) => {
this.state = { type: "loading" }, this.result = void 0;
const { view: i } = this;
if (!i) {
this.utilityNetwork = void 0, this.state = { type: "error-disable-component", message: this._messages.errors.noView }, d("warn", this, y("view"));
return;
}
if (i.type !== "2d") {
this.utilityNetwork = void 0, this.state = { type: "error-disable-component", message: this._messages.errors.sceneViewNotSupported };
return;
}
const r = i.map;
await r.load({ signal: t }), n(t);
const o = r.utilityNetworks ?? null;
if (!o?.length) {
this.utilityNetwork = void 0, this.state = { type: "error-disable-component", message: this._messages.errors.noUtilityNetworks };
return;
}
let a = this.utilityNetwork;
if ((!a || !o.find((f) => f.id === a?.id)) && (a = o.getItemAt(0)), !a) {
this.state = { type: "error-disable-component", message: this._messages.errors.noUtilityNetworks }, d("warn", this, y("utilityNetwork"));
return;
}
await a.load({ signal: t }), n(t);
const g = (Number(a.sourceJSON.currentVersion) || 0) <= 11.1 ? "utilityNetwork" : "advediting", w = await N(a.layerUrl, { signal: t }) ?? void 0;
n(t);
const h = new T({ url: w });
await h.load({ signal: t }), n(t);
const x = h.user?.username ?? "", v = await V(h, x, g);
if (n(t), this._utilityNetworks = o, this.utilityNetwork = a, !v) {
this.state = g === "advediting" ? { type: "error-disable-execute", message: this._messages.errors.noAdvancedEditingUserTypeExtension } : {
type: "error-disable-execute",
message: this._messages.errors.noUtilityNetworkServiceUserTypeExtension
};
return;
}
const m = this._getDirtyAreasLayer(r.allLayers.toArray());
if (!m) {
this.state = { type: "error-disable-execute", message: this._messages.errors.noDirtyAreasLayer };
return;
}
await m.load({ signal: t }), n(t), this.state = { type: "ready" };
});
this._setupTask = e;
try {
await e.promise;
} catch (t) {
if (C(t))
return;
this.state = { type: "error-disable-execute", message: this._messages.errors.utilityNetworkLoadFailed }, I(t, this, this.state.message);
} finally {
this._setupTask === e && (this._setupTask = void 0);
}
}
_renderExtentToValidateCombobox() {
if (this.state.type !== "error-disable-component")
return s`<calcite-combobox .disabled=${this.disabled || this.state.type === "disabled" || this.state.type === "executing"} .label=${this._messages.input.selectExtent.label} .labelText=${this._messages.input.selectExtent.label} selection-mode=single-persist =${(e) => {
this.extentToValidate = e.target.value;
}}><calcite-combobox-item .heading=${this._messages.input.selectExtent.options.currentExtent} .selected=${this.extentToValidate === "current"} value=current></calcite-combobox-item><calcite-combobox-item .heading=${this._messages.input.selectExtent.options.entireExtent} .selected=${this.extentToValidate === "entire"} value=entire></calcite-combobox-item></calcite-combobox>`;
}
_renderInfoNotice() {
if (this.state.type === "error-disable-component" || this.state.type === "error-disable-execute" || this.state.type === "error-info" || this.state.type === "success")
return s`<calcite-notice .closable=${this.state.type === "error-info" || this.state.type === "success"} .kind=${this.state.type === "success" ? "success" : "warning"} open scale=s width=full =${() => this.state = { type: "ready" }}><div slot=message>${this.state.message}</div></calcite-notice>`;
}
_renderStatusIcon() {
const e = `${this._unVntGuid}_status-icon`;
switch (this.state.type) {
case "error-disable-component":
case "error-disable-execute":
case "error-info":
return s`<calcite-icon icon=exclamation-mark-triangle id=${e ?? l} scale=s slot=actions-end></calcite-icon>`;
case "executing":
return s`<calcite-action loading disabled slot=actions-end .text=${this._messages.status.executing}></calcite-action>`;
case "success":
return s`<calcite-icon icon=check-circle id=${e ?? l} scale=s slot=actions-end></calcite-icon>`;
default:
return s`<calcite-icon icon=blank scale=m slot=actions-end></calcite-icon>`;
}
}
_renderUtilityNetworkCombobox() {
if (!(!this._utilityNetworks || this._utilityNetworks?.length === 1 || this.state.type === "error-disable-component" || this.hideUtilityNetworkSelect))
return s`<calcite-combobox .disabled=${this.state.type === "executing"} .label=${this._messages.input.selectUtilityNetwork.label} .labelText=${this._messages.input.selectUtilityNetwork.label} selection-mode=single-persist =${(e) => {
const t = e.target.value;
this.utilityNetwork = this._utilityNetworks?.find((i) => i.id === t), this._runSetup();
}}>${this._utilityNetworks.map((e) => s`<calcite-combobox-item .heading=${e.title} .selected=${e === this.utilityNetwork} .value=${e.id}></calcite-combobox-item>`)}</calcite-combobox>`;
}
_renderValidateNetworkTopologyAction() {
if (this.state.type === "error-disable-component")
return;
const e = `${this._unVntGuid}_execute-action`;
return [
s`<calcite-action .disabled=${this.disabled || this.state.type === "disabled" || this.state.type === "error-disable-execute" || this.state.type === "executing"} icon=play-f id=${e ?? l} =${this._handleValidateNetworkTopologyAction} slot=actions-end .text=${this._messages.actions.validateTopology}></calcite-action>`,
s`<calcite-tooltip reference-element=${e ?? l}><span>${this._messages.actions.validateTopology}</span></calcite-tooltip>`
];
}
render() {
const e = this._renderStatusIcon(), t = this._renderValidateNetworkTopologyAction(), i = this._renderUtilityNetworkCombobox(), r = this._renderExtentToValidateCombobox(), o = this._renderInfoNotice();
return s`<calcite-panel .loading=${this.state.type === "loading"}><calcite-block collapsible expanded .heading=${this.label}>${e}${t}${i}${r}${o}</calcite-block></calcite-panel>`;
}
}
k("arcgis-utility-network-validate-network-topology", q);
export {
q as ArcgisUtilityNetworkValidateNetworkTopology
};