// All material copyright Esri, All Rights Reserved, unless otherwise specified. // See https://js.arcgis.com/4.30/esri/copyright.txt for details. //>>built define(["exports","../../core/Error","../../core/Logger","../../core/promiseUtils","./actions"],function(g,k,l,w,e){function r(a){const {selectedFeature:b,location:c,view:d}=a;return d?b??c??null:null}function n(a){return!!a&&a.isAggregate&&"cluster"===a.sourceLayer?.featureReduction?.type}async function x(a,b){if("3d"!==b?.type||!a||"esri.Graphic"!==a.declaredClass)return!0;if((b=b.getViewForGraphic(a))&&"whenGraphicBounds"in b){let c=null;try{c=await b.whenGraphicBounds(a,{useViewElevation:!0})}catch(d){}return!c|| !c.boundingBox||c.boundingBox[0]===c.boundingBox[3]&&c.boundingBox[1]===c.boundingBox[4]&&c.boundingBox[2]===c.boundingBox[5]}return!0}async function t(a){const {location:b,selectedFeature:c,view:d,zoomFactor:h}=a,f=r(a);if(!d||!f)throw a=new k("zoom-to:invalid-target-or-view","Cannot zoom to location without a target and view.",{target:f,view:d}),l.getLogger("esri.widgets.Popup.PopupViewModel").error(a),a;const m=d.scale/h,p=a.selectedFeature?.geometry??b,u=null!=p&&"point"===p.type&&await x(c,d); e.zoomToFeature.active=!0;e.zoomToFeature.disabled=!0;try{await a.zoomTo({target:{target:f,scale:u?m:void 0}})}catch(z){const y=new k("zoom-to:invalid-graphic","Could not zoom to the location of the graphic.",{graphic:c});l.getLogger("esri.widgets.Popup.PopupViewModel").error(y)}finally{e.zoomToFeature.active=!1,e.zoomToFeature.disabled=!1,a.zoomToLocation=null,u&&(a.location=p)}}async function v(a){const {selectedFeature:b,view:c}=a;if("2d"!==c?.type)throw a=new k("zoomToCluster:invalid-view","View must be 2d MapView.", {view:c}),l.getLogger("esri.widgets.Popup.PopupViewModel").error(a),a;if(!b||!n(b))throw a=new k("zoomToCluster:invalid-selectedFeature","Selected feature must represent an aggregate/cluster graphic.",{selectedFeature:b}),l.getLogger("esri.widgets.Popup.PopupViewModel").error(a),a;const [d,h]=await q(c,b);e.zoomToClusteredFeatures.active=!0;e.zoomToClusteredFeatures.disabled=!0;const {extent:f}=await d.queryExtent(h);f&&await a.zoomTo({target:f});e.zoomToClusteredFeatures.active=!1;e.zoomToClusteredFeatures.disabled= !1}async function q(a,b){a=await a.whenLayerView(b.sourceLayer);const c=a.createQuery();b=b.getObjectId();c.aggregateIds=null!=b?[b]:[];return[a,c]}g.browseAggregateFeatures=async function(a){const {selectedFeature:b,view:c}=a;if(c&&b){var [d,h]=await q(c,b);e.browseClusteredFeatures.active=!0;e.browseClusteredFeatures.disabled=!0;var {features:f}=await d.queryFeatures(h);e.browseClusteredFeatures.active=!1;e.browseClusteredFeatures.disabled=!1;e.browseClusteredFeatures.value=!0;a?.open({features:[b].concat(f), featureMenuOpen:!0})}};g.displayClusterExtent=async function(a){const {view:b,selectedFeature:c}=a;if(b&&c){var [d,h]=await q(b,c),{extent:f}=await d.queryExtent(h);a.selectedClusterBoundaryFeature.geometry=f;b.graphics.add(a.selectedClusterBoundaryFeature)}};g.getSelectedTarget=r;g.isClusterFeature=n;g.removeClusteredFeaturesForBrowsing=function(a){e.browseClusteredFeatures.value=!1;const b=a.features.filter(c=>n(c));b.length&&(a.features=b)};g.triggerAction=a=>{const {event:b,view:c,viewModel:d}= a;({action:a}=b);if(!a)return Promise.reject(new k("trigger-action:missing-arguments","Event has no action"));const {disabled:h,id:f}=a;if(!f)return Promise.reject(new k("trigger-action:invalid-action","action.id is missing"));if(h)return Promise.reject(new k("trigger-action:invalid-action","Action is disabled"));if(f===e.zoomToFeature.id)return t(d).catch(w.throwIfNotAbortError);if(f===e.zoomToClusteredFeatures.id)return v(d);if(f===e.browseClusteredFeatures.id)return d.browseClusterEnabled=!d.browseClusterEnabled, d.featureMenuOpen=d.browseClusterEnabled,Promise.resolve();if(f===e.removeSelectedFeature.id){d.visible=!1;({selectedFeature:a}=d);if(!a)return Promise.reject(new k(`trigger-action:${e.removeSelectedFeature.id}`,"selectedFeature is required",{selectedFeature:a}));const {sourceLayer:m}=a;m?m.remove(a):c?.graphics.remove(a)}return Promise.resolve()};g.zoomToClusterExtent=v;g.zoomToLocation=t;Object.defineProperty(g,Symbol.toStringTag,{value:"Module"})});