@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 3.89 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.33/esri/copyright.txt for details.
*/
import{_ as e}from"../../chunks/tslib.es6.js";import r from"../../core/Accessor.js";import{createTask as t}from"../../core/asyncUtils.js";import o from"../../core/Error.js";import{on as s}from"../../core/events.js";import has from"../../core/has.js";import{throwIfAborted as i,createResolver as a}from"../../core/promiseUtils.js";import{property as l}from"../../core/accessorSupport/decorators/property.js";import"../../core/Logger.js";import"../../core/RandomLCG.js";import{subclass as n}from"../../core/accessorSupport/decorators/subclass.js";import p from"../../geometry/Point.js";import{initializeProjection as c,project as u}from"../../geometry/projectionUtils.js";import{equalsWithProjectionEngine as f}from"../../geometry/support/spatialReferenceUtils.js";import{uploadProgressWeights as m}from"../../layers/graphics/sources/support/uploadProgressWeights.js";import{getSupportedExtensions as d}from"../../layers/support/infoFor3D.js";import{makeProgressManager as h,estimatedTransferTime as y}from"../../support/progressUtils.js";let g=class extends r{constructor(){super({}),this.files=[],this.progress=0,this._uploadTask=null,this._layer=null}destroy(){this.cancel(),this.files=[],this._layer=null,this._uploadTask=null}get state(){const e=this._uploadTask;return e&&0!==this.files.length?e.finished?e.error?"error":"success":"pending":"default"}get result(){return this._uploadTask?.value??null}get error(){return this._uploadTask?.error??null}uploadTo(e){this.cancel(),this.files=[],this._layer=e,this._uploadTask=t((async r=>{const t=await v(e);i(r),this.progress=0,this.files=t;const s=h(m.upload,(e=>{this.progress=e}),"Upload.uploadTo");if(0===t.length)return null;i(r);const a=await e.extractAndFilterFiles(t);i(r),a.length>0&&(this.files=a);const l=await e.convertMesh(a,{signal:r,onProgress:s.makeOnProgress("createFromFiles")});if(i(r),!l)throw new o("editor:upload","could not upload or convert model");const n=a.reduce(((e,r)=>e+r.size),0),p=s.simulate("loadMesh",y(n));try{await l.load()}finally{p.remove()}if(has("enable-feature:georeferenced-uploads")&&l.metadata.georeferenced){if(await f(e.spatialReference,l.origin?.spatialReference))return{type:"georeferenced",mesh:l};if((e.spatialReference.isWebMercator||e.spatialReference.isWGS84)&&await R(l,e.spatialReference))return{type:"georeferenced-reprojected",mesh:l}}return l.spatialReference=e.spatialReference,l.vertexSpace.origin=[0,0,0],{type:"non-georeferenced",mesh:l}}))}retry(){this._layer&&this.uploadTo(this._layer)}cancel(){this._uploadTask?.abort()}};e([l()],g.prototype,"files",void 0),e([l()],g.prototype,"progress",void 0),e([l()],g.prototype,"state",null),e([l()],g.prototype,"result",null),e([l()],g.prototype,"error",null),e([l()],g.prototype,"_uploadTask",void 0),e([l()],g.prototype,"_layer",void 0),g=e([n("esri.widgets.Editor.Upload")],g);let j=null;async function v(e){const{resolve:r,promise:t}=a(),o=document.createElement("input");o.type="file",o.multiple=!1,o.accept=[...d(e.infoFor3D),".zip"].join(","),o.style.display="none",document.body.appendChild(o);const i=s(o,"change",(()=>r(o.files?Array.from(o.files):[])));return j?j(o):o.click(),t.finally((()=>{i.remove(),o.remove()}))}function _(e,r){j=t=>{r?.(),Promise.resolve().then((()=>e)).then((e=>{if(!j)return;const r=new DataTransfer;e.forEach((e=>r.items.add(e))),t.files=r.files,t.dispatchEvent(new Event("change"))}))}}function w(){j=null}async function R(e,r){if(await c(e.spatialReference,r),!e.vertexSpace.origin)return!1;const[t,o,s]=e.vertexSpace.origin,i=new p({x:t,y:o,z:s,spatialReference:e.spatialReference}),a=u(i,r);return!!a&&(e.vertexSpace.origin=[a.x,a.y,a.z??0],e.spatialReference=r,!0)}export{g as Upload,w as clearPromptForFilesStub,_ as stubFilePickerToSelect};