@arcgis/core 4.27.0 → 4.27.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/esri/core/workers/RemoteClient.js +1 -1
- package/assets/esri/core/workers/chunks/07f52b140db07fa962bb.js +1 -0
- package/assets/esri/core/workers/chunks/2d19500b2c042b6b79ac.js +1 -0
- package/assets/esri/core/workers/chunks/{979d9f37c555df0e8fa6.js → 7adbd577bb58c3bbaf28.js} +1 -1
- package/assets/esri/core/workers/chunks/{588cd91d08cec5207be1.js → 873b608720cce890e572.js} +1 -1
- package/assets/esri/core/workers/chunks/{9d4bd73dd50400e9d328.js → 9c8ab6bd8c170cbc5fa5.js} +1 -1
- package/assets/esri/core/workers/chunks/da2110b4caff9cc9b116.js +1 -0
- package/assets/esri/themes/base/widgets/_BasemapGallery.scss +1 -1
- package/assets/esri/themes/base/widgets/_Feature.scss +1 -1
- package/assets/esri/themes/base/widgets/_ValuePicker.scss +5 -2
- package/assets/esri/themes/dark/main.css +1 -1
- package/assets/esri/themes/light/main.css +1 -1
- package/assets/esri/themes/light/view.css +1 -1
- package/chunks/Pattern.glsl.js +33 -32
- package/interfaces.d.ts +42 -12
- package/kernel.js +1 -1
- package/layers/SceneLayer.js +1 -1
- package/layers/VideoLayer.js +1 -1
- package/layers/graphics/sources/FeatureLayerSource.js +1 -1
- package/layers/support/ElevationQuery.js +1 -1
- package/layers/support/TelemetryData.js +1 -1
- package/layers/support/TelemetryDisplay.js +1 -1
- package/layers/support/imageryRendererUtils.js +1 -1
- package/layers/video/videoUtils.js +1 -1
- package/package.json +1 -1
- package/renderers/support/colorRampUtils.js +1 -1
- package/support/revision.js +1 -1
- package/views/2d/layers/MediaLayerView2D.js +1 -1
- package/views/2d/layers/TileLayerView2D.js +1 -1
- package/views/3d/layers/graphics/Labeler.js +1 -1
- package/views/3d/layers/i3s/I3SClientNodeLoader.js +1 -1
- package/views/3d/layers/i3s/I3SIndex.js +1 -1
- package/views/3d/layers/i3s/I3SOverrides.js +1 -1
- package/views/3d/layers/i3s/featureEditing.js +1 -1
- package/views/3d/webgl-engine/lib/RenderFeature.js +1 -1
- package/views/3d/webgl-engine/lib/Renderer.js +1 -1
- package/views/3d/webgl-engine/lib/RenderingContext.js +1 -1
- package/views/3d/webgl-engine/lib/lodRendering/LodRenderer.js +1 -1
- package/views/3d/webgl-engine/materials/PatternMaterial.js +1 -1
- package/views/3d/webgl-engine/materials/internal/bufferWriterUtils.js +1 -1
- package/views/3d/webgl-engine/materials/renderers/MergedRenderer.js +1 -1
- package/views/3d/webgl-engine/parts/RenderView.js +1 -1
- package/views/3d/webgl-engine/shaders/Pattern.glsl.js +1 -1
- package/views/3d/webgl-engine/shaders/PatternTechnique.js +1 -1
- package/views/webgl/AppleAmdDriverHelper.js +5 -0
- package/views/webgl/testAppleAmdDrawArrays.js +1 -1
- package/views/webgl/testSVGPremultipliedAlpha.js +1 -1
- package/widgets/Attachments.js +1 -1
- package/widgets/Editor/CreateFeaturesWorkflow.js +1 -1
- package/widgets/Editor/UpdateWorkflow.js +1 -1
- package/widgets/Editor.js +1 -1
- package/widgets/Feature/FeatureAttachments.js +1 -1
- package/widgets/Feature/FeatureRelationship/FeatureRelationshipViewModel.js +1 -1
- package/widgets/Feature/support/relatedFeatureUtils.js +1 -1
- package/widgets/FeatureForm/FeatureFormViewModel.js +1 -1
- package/widgets/FeatureForm/RelationshipInput.js +1 -1
- package/widgets/FloorFilter/FloorFilterViewModel.js +1 -1
- package/widgets/ValuePicker/ValuePickerSlider.js +1 -1
- package/assets/esri/core/workers/chunks/17ab08f60764244b2cf8.js +0 -1
- package/assets/esri/core/workers/chunks/38c6452dc9cf18e8bca8.js +0 -1
- package/assets/esri/core/workers/chunks/fbd3c78ee8e2219a6c7a.js +0 -1
- package/views/3d/webgl-engine/lib/AppleAmdDriverHelper.js +0 -5
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.27/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{y as e,z as t}from"../../../../../chunks/mat4.js";import{
|
|
5
|
+
import{y as e,z as t}from"../../../../../chunks/mat4.js";import{BufferViewVec4u8 as f,BufferViewVec4f as o,BufferViewFloat as r,BufferViewVec2f as s,BufferViewVec2i16 as n,BufferViewVec3f as i}from"../../../../../geometry/support/buffer/BufferView.js";import{assert as c}from"../../lib/Util.js";import{VertexAttribute as l}from"../../lib/VertexAttribute.js";function d(e,t,f,o,r=1){const s=f.typedBuffer,n=f.typedBufferStride,i=e.length;if(o*=n,1===r)for(let c=0;c<i;++c)s[o]=t[e[c]],o+=n;else for(let c=0;c<i;++c){const f=t[e[c]];for(let e=0;e<r;e++)s[o]=f,o+=n}}function u(e,t,f,o){const r=f.typedBuffer,s=f.typedBufferStride,n=e.length;o*=s;for(let i=0;i<n;++i){const f=2*e[i];r[o]=t[f],r[o+1]=t[f+1],o+=s}}function a(e,t,f,o,r){const s=f.typedBuffer,n=f.typedBufferStride,i=e.length;if(o*=n,null==r||1===r)for(let c=0;c<i;++c){const f=3*e[c];s[o]=t[f],s[o+1]=t[f+1],s[o+2]=t[f+2],o+=n}else for(let c=0;c<i;++c){const f=3*e[c];for(let e=0;e<r;++e)s[o]=t[f],s[o+1]=t[f+1],s[o+2]=t[f+2],o+=n}}function p(e,t,f,o,r=1){const s=f.typedBuffer,n=f.typedBufferStride,i=e.length;if(o*=n,1===r)for(let c=0;c<i;++c){const f=4*e[c];s[o]=t[f],s[o+1]=t[f+1],s[o+2]=t[f+2],s[o+3]=t[f+3],o+=n}else for(let c=0;c<i;++c){const f=4*e[c];for(let e=0;e<r;++e)s[o]=t[f],s[o+1]=t[f+1],s[o+2]=t[f+2],s[o+3]=t[f+3],o+=n}}function y(e,t,f){const o=e.typedBuffer,r=e.typedBufferStride;t*=r;for(let s=0;s<f;++s)o[t]=0,o[t+1]=0,o[t+2]=0,o[t+3]=0,t+=r}function B(e,t,f,o){const r=f.typedBuffer,s=f.typedBufferStride,n=e.length;o*=s;for(let i=0;i<n;++i){const f=9*e[i];for(let e=0;e<9;++e)r[o+e]=t[f+e];o+=s}}function g(e,t,f,o){const r=f.typedBuffer,s=f.typedBufferStride,n=e.length;o*=s;for(let i=0;i<n;++i){const f=16*e[i];for(let e=0;e<16;++e)r[o+e]=t[f+e];o+=s}}function b(t,f,o,r,s,n=1){if(!o)return void a(t,f,r,s,n);const i=r.typedBuffer,c=r.typedBufferStride,l=t.length,d=o[0],u=o[1],p=o[2],y=o[4],B=o[5],g=o[6],b=o[8],O=o[9],h=o[10],N=o[12],S=o[13],R=o[14];s*=c;let A=0,E=0,L=0;const z=e(o)?e=>{A=f[e]+N,E=f[e+1]+S,L=f[e+2]+R}:e=>{const t=f[e],o=f[e+1],r=f[e+2];A=d*t+y*o+b*r+N,E=u*t+B*o+O*r+S,L=p*t+g*o+h*r+R};if(1===n)for(let e=0;e<l;++e)z(3*t[e]),i[s]=A,i[s+1]=E,i[s+2]=L,s+=c;else for(let e=0;e<l;++e){z(3*t[e]);for(let e=0;e<n;++e)i[s]=A,i[s+1]=E,i[s+2]=L,s+=c}}function O(f,o,r,s,n,i=1){if(!r)return void a(f,o,s,n,i);const c=r,l=s.typedBuffer,d=s.typedBufferStride,u=f.length,p=c[0],y=c[1],B=c[2],g=c[4],b=c[5],O=c[6],h=c[8],N=c[9],S=c[10],R=!t(c),A=1e-6,E=1-A;n*=d;let L=0,z=0,F=0;const v=e(c)?e=>{L=o[e],z=o[e+1],F=o[e+2]}:e=>{const t=o[e],f=o[e+1],r=o[e+2];L=p*t+g*f+h*r,z=y*t+b*f+N*r,F=B*t+O*f+S*r};if(1===i)if(R)for(let e=0;e<u;++e){v(3*f[e]);const t=L*L+z*z+F*F;if(t<E&&t>A){const e=1/Math.sqrt(t);l[n]=L*e,l[n+1]=z*e,l[n+2]=F*e}else l[n]=L,l[n+1]=z,l[n+2]=F;n+=d}else for(let e=0;e<u;++e)v(3*f[e]),l[n]=L,l[n+1]=z,l[n+2]=F,n+=d;else for(let e=0;e<u;++e){if(v(3*f[e]),R){const e=L*L+z*z+F*F;if(e<E&&e>A){const t=1/Math.sqrt(e);L*=t,z*=t,F*=t}}for(let e=0;e<i;++e)l[n]=L,l[n+1]=z,l[n+2]=F,n+=d}}function h(e,f,o,r,s,n=1){if(!o)return void p(e,f,r,s,n);const i=o,c=r.typedBuffer,l=r.typedBufferStride,d=e.length,u=i[0],a=i[1],y=i[2],B=i[4],g=i[5],b=i[6],O=i[8],h=i[9],N=i[10],S=!t(i),R=1e-6,A=1-R;if(s*=l,1===n)for(let t=0;t<d;++t){const o=4*e[t],r=f[o],n=f[o+1],i=f[o+2],d=f[o+3];let p=u*r+B*n+O*i,E=a*r+g*n+h*i,L=y*r+b*n+N*i;if(S){const e=p*p+E*E+L*L;if(e<A&&e>R){const t=1/Math.sqrt(e);p*=t,E*=t,L*=t}}c[s]=p,c[s+1]=E,c[s+2]=L,c[s+3]=d,s+=l}else for(let t=0;t<d;++t){const o=4*e[t],r=f[o],i=f[o+1],d=f[o+2],p=f[o+3];let E=u*r+B*i+O*d,L=a*r+g*i+h*d,z=y*r+b*i+N*d;if(S){const e=E*E+L*L+z*z;if(e<A&&e>R){const t=1/Math.sqrt(e);E*=t,L*=t,z*=t}}for(let e=0;e<n;++e)c[s]=E,c[s+1]=L,c[s+2]=z,c[s+3]=p,s+=l}}function N(e,t,f,o,r,s=1){const n=o.typedBuffer,i=o.typedBufferStride,c=e.length;if(r*=i,f!==t.length||4!==f)if(1!==s)if(4!==f)for(let l=0;l<c;++l){const f=3*e[l];for(let e=0;e<s;++e)n[r]=t[f],n[r+1]=t[f+1],n[r+2]=t[f+2],n[r+3]=255,r+=i}else for(let l=0;l<c;++l){const f=4*e[l];for(let e=0;e<s;++e)n[r]=t[f],n[r+1]=t[f+1],n[r+2]=t[f+2],n[r+3]=t[f+3],r+=i}else{if(4===f){for(let f=0;f<c;++f){const o=4*e[f];n[r]=t[o],n[r+1]=t[o+1],n[r+2]=t[o+2],n[r+3]=t[o+3],r+=i}return}for(let f=0;f<c;++f){const o=3*e[f];n[r]=t[o],n[r+1]=t[o+1],n[r+2]=t[o+2],n[r+3]=255,r+=i}}else{n[r]=t[0],n[r+1]=t[1],n[r+2]=t[2],n[r+3]=t[3];const e=new Uint32Array(o.typedBuffer.buffer,o.start),f=i/4,l=e[r/=4];r+=f;const d=c*s;for(let t=1;t<d;++t)e[r]=l,r+=f}}function S(e,t,f,o){const r=f.typedBuffer,s=f.typedBufferStride,n=e.length,i=t[0];o*=s;for(let c=0;c<n;++c)r[o]=i,o+=s}function R(e,t,f,o,r=1){const s=t.typedBuffer,n=t.typedBufferStride;if(o*=n,1===r)for(let i=0;i<f;++i)s[o]=e[0],s[o+1]=e[1],s[o+2]=e[2],s[o+3]=e[3],o+=n;else for(let i=0;i<f;++i)for(let t=0;t<r;++t)s[o]=e[0],s[o+1]=e[1],s[o+2]=e[2],s[o+3]=e[3],o+=n}function A(e,t,o,r,s,n){for(const i of t.fields.keys()){const t=e.vertexAttributes.get(i),d=e.indices.get(i);if(t&&d)E(i,t,d,o,r,s,n);else if(i===l.OBJECTANDLAYERIDCOLOR&&null!=e.objectAndLayerIdColor){const t=e.indices.get(l.POSITION);if(c(!!t,`No buffer view for ${i}`),t){const o=t.length,r=s.getField(i,f);R(e.objectAndLayerIdColor,r,o,n)}}}}function E(e,t,d,a,y,B,g){switch(e){case l.POSITION:{c(3===t.size);const f=B.getField(e,i);c(!!f,`No buffer view for ${e}`),f&&b(d,t.data,a,f,g);break}case l.NORMAL:{c(3===t.size);const f=B.getField(e,i);c(!!f,`No buffer view for ${e}`),f&&O(d,t.data,y,f,g);break}case l.NORMALCOMPRESSED:{c(2===t.size);const f=B.getField(e,n);c(!!f,`No buffer view for ${e}`),f&&u(d,t.data,f,g);break}case l.UV0:{c(2===t.size);const f=B.getField(e,s);c(!!f,`No buffer view for ${e}`),f&&u(d,t.data,f,g);break}case l.COLOR:case l.SYMBOLCOLOR:{const o=B.getField(e,f);c(!!o,`No buffer view for ${e}`),c(3===t.size||4===t.size),!o||3!==t.size&&4!==t.size||N(d,t.data,t.size,o,g);break}case l.COLORFEATUREATTRIBUTE:{const f=B.getField(e,r);c(!!f,`No buffer view for ${e}`),c(1===t.size),f&&1===t.size&&S(d,t.data,f,g);break}case l.TANGENT:{c(4===t.size);const f=B.getField(e,o);c(!!f,`No buffer view for ${e}`),f&&h(d,t.data,y,f,g);break}case l.PROFILERIGHT:case l.PROFILEUP:case l.PROFILEVERTEXANDNORMAL:case l.FEATUREVALUE:{c(4===t.size);const f=B.getField(e,o);c(!!f,`No buffer view for ${e}`),f&&p(d,t.data,f,g)}}}export{d as writeBufferFloat,B as writeBufferMat3f,g as writeBufferMat4f,u as writeBufferVec2,a as writeBufferVec3,p as writeBufferVec4,y as writeBufferVec4Zeros,N as writeColor,S as writeColorFeatureAttribute,E as writeDefaultAttribute,A as writeDefaultAttributes,O as writeNormal,R as writeObjectAndLayerIdColor,b as writePosition,h as writeTangent};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.27/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{removeUnordered as e,filterInPlace as t}from"../../../../../core/arrayUtils.js";import{someMap as r}from"../../../../../core/MapUtils.js";import{NestedMap as s}from"../../../../../core/NestedMap.js";import i from"../../../../../core/PooledArray.js";import{m as a,a as o,t as n}from"../../../../../chunks/mat4.js";import{c as l}from"../../../../../chunks/mat4f64.js";import{glLayout as h}from"../../../support/buffer/glUtil.js";import{ShaderOutput as u}from"../../core/shaderLibrary/ShaderOutput.js";import{
|
|
5
|
+
import{removeUnordered as e,filterInPlace as t}from"../../../../../core/arrayUtils.js";import{someMap as r}from"../../../../../core/MapUtils.js";import{NestedMap as s}from"../../../../../core/NestedMap.js";import i from"../../../../../core/PooledArray.js";import{m as a,a as o,t as n}from"../../../../../chunks/mat4.js";import{c as l}from"../../../../../chunks/mat4f64.js";import{glLayout as h}from"../../../support/buffer/glUtil.js";import{ShaderOutput as u}from"../../core/shaderLibrary/ShaderOutput.js";import{GLMaterials as f}from"../../lib/GLMaterials.js";import{RenderOccludedFlag as c}from"../../lib/Material.js";import{DirtyState as d}from"../../lib/ModelDirtyTypes.js";import{assert as m,setMatrixTranslation3 as g}from"../../lib/Util.js";import{DrawParameters as p}from"../DrawParameters.js";import{WaterMaterial as y}from"../WaterMaterial.js";import{BufferRange as _,mergeAdjacentRanges as w}from"./BufferRange.js";import{Instance as b}from"./Instance.js";import{PerBufferData as v,hasVao as O}from"./PerBufferData.js";import{PerOriginData as C}from"./PerOriginData.js";import{VaoCache as B}from"./VaoCache.js";class E{constructor(e,t,r){this._rctx=e,this._materialRepository=t,this.material=r,this._dataByOrigin=new Map,this._hasHighlights=!1,this._hasOccludees=!1,this._glMaterials=new f(this.material,this._materialRepository),this._bufferWriter=r.createBufferWriter(),this._vaoCache=new B(e,r.vertexAttributeLocations,h(this._bufferWriter.vertexBufferLayout))}dispose(){this._glMaterials.destroy(),this._dataByOrigin.forEach((e=>e.dispose())),this._dataByOrigin.clear(),this._vaoCache.dispose()}get isEmpty(){return 0===this._dataByOrigin.size}get hasHighlights(){return this._hasHighlights}get hasOccludees(){return this._hasOccludees}get hasWater(){return!this.isEmpty&&this.material instanceof y}get rendersOccluded(){return!this.isEmpty&&this.material.renderOccluded!==c.Occlude}get numGeometries(){let e=0;return this._dataByOrigin.forEach((t=>e+=t.buffers.reduce(((e,t)=>e+t.instances.size),0))),e}forEachGeometry(e){this._dataByOrigin.forEach((t=>t.buffers.forEach((t=>t.instances.forEach((t=>e(t.geometry)))))))}modify(e){this._updateGeometries(e.updates),this._addAndRemoveGeometries(e.adds,e.removes),this._updateDrawCommands()}_updateGeometries(e){const t=this._bufferWriter,r=t.vertexBufferLayout.stride/4;for(const s of e){const e=s.renderGeometry,i=this._dataByOrigin.get(e.localOrigin.id),a=i?.findBuffer(e.id);if(null==a)return;const o=a.instances.get(e.id);if(s.updateType&(d.GEOMETRY|d.TRANSFORMATION)){const s=W(t.elementCount(o.geometry.geometry)*r),i=t.vertexBufferLayout.createView(s.buffer);this._writeGeometry(e,i,0),a.vao.vertexBuffers.geometry.setSubData(s,o.from*r,0,o.numElements*r),P()}s.updateType&(d.HIGHLIGHT|d.OCCLUDEE|d.VISIBILITY)&&(a.drawCommandsDirty=!0)}}_computeDeltas(e,t){const r=new s;for(const s of e){const e=s.localOrigin;if(null==e)continue;let t=r.get(e.id,null);null==t&&(t=new A(e.vec3),r.set(e.id,null,t)),t.changes.push(s)}for(const s of t){const e=s.localOrigin;if(null==e)continue;const t=this._dataByOrigin.get(e.id),i=t?.findBuffer(s.id);if(null==i)continue;let a=r.get(e.id,i);null==a&&(a=new A(e.vec3),r.set(e.id,i,a)),a.changes.push(s)}return r}_addAndRemoveGeometries(t,r){const{_bufferWriter:s,_dataByOrigin:i}=this,a=s.vertexBufferLayout.stride/4,o=this._computeDeltas(t,r);o.forEach(((t,r)=>{const n=t.get(null),l=null!=n?n.changes:[];o.delete(r,null);let h=i.get(r);if(t.forEach(((t,n)=>{if(o.delete(r,n),null==n)return void m(!1,"No VAO for removed geometries");if(n.instances.size===t.changes.length)return this._vaoCache.deleteVao(n.vao),e(h.buffers,n),void(0===h.buffers.length&&0===l.length&&i.delete(r));const u=n.numElements,f=n.vao.byteSize/4,c=l.reduce(((e,t)=>e+s.elementCount(t.geometry)),0),d=t.changes.reduce(((e,t)=>e+s.elementCount(t.geometry)),0),g=Math.min((u+c-d)*a,G),p=g>f;g>j&&g<f/2?(t.changes.forEach((({id:e})=>n.deleteInstance(e))),n.instances.forEach((({geometry:e})=>l.push(e))),this._vaoCache.deleteVao(n.vao),e(h.buffers,n)):p?this._applyAndRebuild(n,l,t):this._applyRemoves(n,t)})),l.length>0)for(null==h&&(h=new C(n.origin),i.set(r,h)),h.buffers.forEach((e=>this._applyAdds(e,l)));l.length>0;)h.buffers.push(this._applyAndRebuild(new v,l,null))}))}_updateDrawCommands(){this._hasHighlights=!1,this._hasOccludees=!1,this._dataByOrigin.forEach((e=>{e.buffers.forEach((e=>{e.drawCommandsDirty&&(e.hasHiddenInstances=!1,e.hasHighlights=!1,e.hasOccludees=!1,r(e.instances,(t=>(e.updateDrawState(t),e.hasHiddenInstances&&e.hasHighlights&&e.hasOccludees))),e.updateDrawCommands(this._bufferWriter.vertexBufferLayout.stride)),this._hasHighlights=this._hasHighlights||e.hasHighlights,this._hasOccludees=this._hasOccludees||e.hasOccludees}))}))}_applyAndRebuild(e,t,r){if(null!=r)for(const d of r.changes)e.deleteInstance(d.id);const s=this._bufferWriter,i=s.vertexBufferLayout.stride,a=i/4,o=Math.floor(G/a);let n=e.numElements;for(;t.length>0;){const r=t.pop(),i=s.elementCount(r.geometry);if(n+i>o&&n>0){t.push(r);break}n+=i;const a=new b(r,0,0);m(null==e.instances.get(r.id)),e.addInstance(r.id,a)}const l=n*a,h=W(l),u=s.vertexBufferLayout.createView(h.buffer);let f=0;e.hasHiddenInstances=!1,e.hasHighlights=!1,e.hasOccludees=!1,e.instances.forEach(((t,r)=>{this._writeGeometry(t.geometry,u,f);const i=f;f+=s.elementCount(t.geometry.geometry),e.updateInstance(r,i,f),e.updateDrawState(t)})),this._vaoCache.deleteVao(e.vao),e.vao=this._vaoCache.newVao(V(l)),e.vao.vertexBuffers.geometry.setSubData(h,0,0,f*a),P(),e.holes.clear();const c=e.holes.pushNew();return c.from=f,c.to=Math.floor(e.vao.byteSize/i),e.updateDrawCommands(i),e}_applyRemoves(e,t){if(0===t.changes.length)return;for(const o of t.changes){const t=o.id,r=e.instances.get(t);if(!r)continue;e.deleteInstance(t);const s=x.back();if(s){if(s.to===r.from){s.to=r.to;continue}if(s.from===r.to){s.from=r.from;continue}}const i=x.pushNew();i.from=r.from,i.to=r.to}w(x);const r=this._bufferWriter.vertexBufferLayout.stride/4,s=x.reduce(((e,t)=>Math.max(e,t.numElements)),0)*r,i=W(s);i.fill(0,0,s);const a=e.vao.vertexBuffers.geometry;x.forAll((e=>a.setSubData(i,e.from*r,0,e.numElements*r))),P(),e.holes.pushArray(x.data,x.length),x.forAll(((e,t)=>x.data[t]=null)),x.clear(),e.drawCommandsDirty=!0}_applyAdds(e,r){if(0===r.length)return;if(!O(e))return void this._applyAndRebuild(e,r,null);const s=this._bufferWriter,i=s.vertexBufferLayout.stride/4,a=e.numElements,o=r.reduce(((e,t)=>e+s.elementCount(t.geometry)),0),n=Math.min((a+o)*i,G),l=4*n;if(e.vao.byteSize<V(G-j)&&l>e.vao.byteSize)return void this._applyAndRebuild(e,r,null);w(e.holes);const h=new Array;for(const t of r){const r=s.elementCount(t.geometry),i=H(e.holes,r);h.push(i)}const u=e.vao.vertexBuffers.geometry;let f=0,c=0,d=0;const g=W(n),p=s.vertexBufferLayout.createView(g.buffer);r.forEach(((t,r)=>{const a=h[r];if(null==a)return;if(!(d===a)){const e=d-c;e>0&&u.setSubData(g,c*i,0,e*i),c=a,f=0}const o=s.elementCount(t.geometry);this._writeGeometry(t,p,f),f+=o,d=a+o;const n=new b(t,a,a+o);m(null==e.instances.get(t.id)),e.addInstance(t.id,n),e.drawCommandsDirty=!0}));const y=d-c;y>0&&u.setSubData(g,c*i,0,y*i),t(r,((e,t)=>null==h[t])),P()}_writeGeometry(e,t,r){const s=e.localOrigin.vec3;g(D,-s[0],-s[1],-s[2]);const i=a(S,D,e.transformation);o(M,i),n(M,M),this._bufferWriter.write(i,M,e.geometry,t,r)}updateAnimation(e){return this.material.update(e)}requiresSlot(e,t){return this.material.requiresSlot(e,t)}prepareTechnique(e){const{output:t,bindParameters:r}=e;if(!this.requiresSlot(r.slot,t))return null;const s=t===u.Highlight||t===u.ShadowHighlight;if(s&&!this._hasHighlights)return null;const i=t===u.ShadowExcludeHighlight,a=!(s||i);for(const o of this._dataByOrigin.values())for(const n of o.buffers){if(s&&!n.hasHighlights)continue;const o=(s?n.drawCommandsHighlight:i&&n.needsMultipleCommands()?n.drawCommandsShadowHighlightRest:n.drawCommandsDefault)||null,l=a&&n.drawCommandsOccludees||null;if(o?.length||l?.length){const s=this._glMaterials.load(e.rctx,r.slot,t),i=null!=s?s.beginSlot(r):null;if(null!=i)return i}}return null}render(e,t){const{output:r,bindParameters:s}=e,i=r===u.Highlight||r===u.ShadowHighlight,a=r===u.ShadowExcludeHighlight,o=!(i||a),n=this._rctx;n.appleAmdDriverHelper?.resetIndicesType(),n.bindTechnique(t,this.material.parameters,s);for(const l of this._dataByOrigin.values())for(const e of l.buffers){if(i&&!e.hasHighlights)continue;const r=(i?e.drawCommandsHighlight:a&&e.needsMultipleCommands()?e.drawCommandsShadowHighlightRest:e.drawCommandsDefault)||null,h=o&&e.drawCommandsOccludees||null;if(r?.length||h?.length){t.program.bindDraw(new p(l.origin),s,this.material.parameters),t.ensureAttributeLocations(e.vao),n.bindVAO(e.vao),r?.length&&(t.bindPipelineState(n,s.slot,!1),r.forAll((e=>n.drawArrays(t.primitiveType,e.first,e.count)))),h?.length&&(t.bindPipelineState(n,s.slot,!0),h.forAll((e=>n.drawArrays(t.primitiveType,e.first,e.count))))}}}get test(){return{material:this.material,glMaterials:this._glMaterials,dataByOrigin:this._dataByOrigin}}}class A{constructor(e){this.origin=e,this.changes=new Array}}function H(e,t){let r;if(!e.some((e=>!(e.numElements<t)&&(r=e,!0))))return null;const s=r.from;return r.from+=t,r.from>=r.to&&e.removeUnordered(r),s}const D=l(),S=l(),M=l(),x=new i({allocator:e=>e||new _,deallocator:null}),j=65536,I=4*j,L=1024,R=16777216,G=R/4;let T=new Float32Array(j);function W(e){return T.length<e&&(T=new Float32Array(e)),T}function V(e){const t=4*e;return t<=L?L:t<I?I:Math.max(Math.min(Math.ceil(1.5*t/I)*I,R),t)}function P(){T=new Float32Array(2)}export{E as MergedRenderer};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.27/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as e}from"../../../../chunks/tslib.es6.js";import t from"../../../../core/Accessor.js";import r from"../../../../core/Evented.js";import has from"../../../../core/has.js";import i from"../../../../core/Logger.js";import{removeMaybe as s,destroyMaybe as o}from"../../../../core/maybe.js";import{watch as n,initial as a}from"../../../../core/reactiveUtils.js";import{addFrameTask as p}from"../../../../core/scheduling.js";import{Milliseconds as h}from"../../../../core/time.js";import{property as d}from"../../../../core/accessorSupport/decorators/property.js";import"../../../../core/accessorSupport/ensureType.js";import"../../../../core/arrayUtils.js";import{subclass as c}from"../../../../core/accessorSupport/decorators/subclass.js";import{ComponentObjectCollection as l}from"../collections/Component/ComponentObjectCollection.js";import{ShaderTechniqueRepository as u}from"../core/shaderTechnique/ShaderTechniqueRepository.js";import{RenderRequestType as m,Decorations as _}from"../lib/basicInterfaces.js";import y from"../lib/CompositingHelper.js";import{textureToDepth as f}from"../lib/depthRangeUtils.js";import{GLMaterialRepository as R}from"../lib/GLMaterialRepository.js";import{MagnifierHelper as g}from"../lib/MagnifierHelper.js";import{UpdateParameters as x}from"../lib/Material.js";import{ObjectAndLayerIdRenderHelper as b}from"../lib/ObjectAndLayerIdRenderHelper.js";import{Renderer as v}from"../lib/Renderer.js";import{RenderingContext as j}from"../lib/RenderingContext.js";import{TextureRepository as w}from"../lib/TextureRepository.js";import{createMarkerTextureRepository as T}from"../materials/markerTextureRepository.js";import{createStippleTextureRepository as A}from"../materials/stippleTextureRepository.js";import{WaterTextureRepository as C}from"../materials/internal/WaterTextureRepository.js";import{getContextCache as D}from"./contextCache.js";import{removeLoadedShaderModules as U}from"./requireUtils.js";import{ScreenshotManager as O,ScreenshotContext as q}from"./ScreenshotManager.js";import{contextCache as S}from"./testUtils.js";import{RenderState as L}from"../../../support/RenderState.js";import{createContextForView as H}from"../../../webgl/contextUtils.js";let k=class extends t{constructor(e){super({}),this.events=new r,this.waterTextureRepository=new C,this._magnifierHelper=new g,this.objectAndLayerIdRenderHelper=has("enable-feature:objectAndLayerId-rendering")?new b:null,this._needsUpdate=!0,this._needsRender=!0,this._idleSuspend=!0,this._needsWaterReflectionUpdate=!1,this._lastAnimationUpdate=0,this._container=e.container,this._viewingMode=e.viewingMode,this._initializeContext(e),this.addHandles([n((()=>this.waterTextureRepository?.updating),(()=>this.requestRender()),a),this._magnifierHelper.events.on("request-render",(()=>this.requestRender()))]);const{memoryController:t}=e.view.resourceController;this.stippleTextureRepository=A(this._rctx,t),this.markerTextureRepository=T(this._rctx,t),this._shaderTechniqueRepository=new u({rctx:this._rctx,viewingMode:e.viewingMode,stippleTextureRepository:this.stippleTextureRepository,waterTextureRepository:this.waterTextureRepository,markerTextureRepository:this.markerTextureRepository}),this._textureRepository=new w(e,this._shaderTechniqueRepository,this._rctx),this.addHandles(this._textureRepository.events.on("changed",(e=>this.requestRender(e)))),this._materialRepository=new R(this._textureRepository,this._shaderTechniqueRepository,(()=>this.requestRender()),(()=>this.requestRender())),this._compositingHelper=new y(this._rctx,this._shaderTechniqueRepository),this.renderer=new v(e,this._materialRepository,this._textureRepository,this._shaderTechniqueRepository,this._rctx,this._compositingHelper,this._magnifierHelper,(e=>this.requestRender(e)));const i={renderScene:(e,t,r,i,s)=>this.renderer.render(e,t,r,i,s),requestRenderScene:e=>this.requestRender(e),prepareOverlay:()=>e.options.screenshot.prepareOverlay(),renderOverlay:(t,r)=>e.options.screenshot.renderOverlay(t,r)};this._screenshotManager=new O(this._rctx,i,(e=>this.events.emit("force-camera-for-screenshot",e)),(()=>this.renderer.disposeOffscreenBuffers())),this._registerFrameTask(e)}normalizeCtorArgs(){return{}}destroy(){this._container.contains(this._canvas)&&this._container.removeChild(this._canvas),this._frameTask=s(this._frameTask),this._shaderTechniqueRepository=o(this._shaderTechniqueRepository)}requestRender(e=m.UPDATE){this._needsRender=!0,e===m.UPDATE&&(this._needsUpdate=!0)}get updating(){return this._needsUpdate||this._needsWaterReflectionUpdate||this.renderer.updating||this._textureRepository.updating||this.waterTextureRepository.updating||this._magnifierHelper.updating}get textureRepository(){return this._textureRepository}get compositingHelper(){return this._compositingHelper}set magnifier(e){this._magnifierHelper.magnifier=e}setIdleSuspend(e){this._idleSuspend!==e&&(this._idleSuspend=e,this.requestRender())}get renderingContext(){return this._rctx}get capabilities(){return this._rctx.capabilities}get canvas(){return this._canvas}takeScreenshot(e){return this._screenshotManager.takeScreenshot(e).then((e=>e[0]))}takeScreenshotWithOID(e){return e.objectAndLayerIdColor=!0,this._screenshotManager.takeScreenshot(e)}getAlpha(){return!!this._rctx.contextAttributes.alpha}getMinimalDepthForArea(e,t,r,i,s,o=s){const n=i.constrainWindowSize(t,r,s*i.pixelRatio,o*i.pixelRatio),a=this._ensureDepthBuffer(n);this.renderer.readDepthPixels(i,n,a);let p=Number.MAX_VALUE;for(let h=0;h<n[2]*n[3];h++){const e=f(4*h,a,i.nearFar);p>e&&e!==i.nearFar[0]&&e!==i.nearFar[1]&&(p=e)}if(null!=e){const s=e.pickDepth(t*i.pixelRatio,r*i.pixelRatio,i);null!=s&&p>s&&s!==i.nearFar[0]&&s!==i.nearFar[1]&&(p=s)}return p===Number.MAX_VALUE?void 0:p}_ensureDepthBuffer(e){const t=4*e[2]*e[3];return(null==this._tmpDepthBuffer||this._tmpDepthBuffer.byteLength<t)&&(this._tmpDepthBuffer=new Uint8Array(t)),this._tmpDepthBuffer}async reloadShaders(){U(),await this._shaderTechniqueRepository.reloadAll(),this.requestRender()}_registerFrameTask(e){const t=e.view.state;let r=!1,i=m.BACKGROUND,s=!1;const o={preRender:({time:s})=>{r=this.updating,i=this._needsUpdate?m.UPDATE:m.BACKGROUND,e.commitSyncLayers();const o=h(s-this._lastAnimationUpdate);if(o>this.renderer.animationTimestep||null!=t.forcedAnimationTime||r||this._needsRender){const e=h(o/this.renderer.animationTimeDilation),r=new x(t.camera,e,t.forcedAnimationTime);this.renderer.updateAnimation(r)&&this.requestRender(m.BACKGROUND),this._lastAnimationUpdate=s}},render:({time:e})=>{if((this._needsRender||!this._idleSuspend||!this.renderer.isCameraFinal||this._needsWaterReflectionUpdate)&&t.camera.fullWidth>0&&t.camera.fullHeight>0){const r=this._needsUpdate&&this._idleSuspend&&this.renderer.isCameraFinal;this._needsRender=!1,this._needsUpdate=!1,this._needsWaterReflectionUpdate=!1,this.renderer.render(null,null,t,_.ON,e),s=!0,r&&this.renderer.hasReflections&&(this.requestRender(m.BACKGROUND),this._needsWaterReflectionUpdate=!0)}},update:({time:e})=>{const r=new q(t,this.renderer.hasSlicePlane||this._magnifierHelper.enabled);this._textureRepository.update(),this._screenshotManager.update(r,e)},finish:()=>{s&&(this.renderer.finish(t.mode===L.IDLE?i:m.UPDATE),s=!1)}};this._frameTask=p(o)}_initializeContext(e){const t=e.options;this._canvas=t.canvas,this._canvas||(this._canvas=document.createElement("canvas")),this._canvas.setAttribute("style","width: 100%; height:100%; display:block;");const r={alpha:t.alpha||!1,premultipliedAlpha:!0,antialias:!1,depth:!0,stencil:t.stencil??!0,powerPreference:"high-performance",preserveDrawingBuffer:t.preserveDrawingBuffer??!1},s=H("3d",this._canvas,r);null!=s?(this._rctx=this._newRenderingContext(s,e),this._loadShaderOnlyExtensions(),!t.alpha&&this._rctx.contextAttributes.alpha&&i.getLogger(this).error("WebGL context has alpha channel even though no alpha channel was requested"),!this._rctx.contextAttributes.alpha&&has("safari")>=11&&(this._container.style.backgroundColor="black"),this._container.appendChild(this._canvas)):i.getLogger(this).error("A WebGL2 context could not be created.")}_newRenderingContext(e,t){const r={disabledExtensions:t.options.deactivatedWebGLExtensions||{},debugWebGLExtensions:t.options.debugWebGLExtensions||{},maxAnisotropy:8},i=(e,r)=>t.view.resourceController.memoryController.newCache(e,r);if(S.enabled){let t=M.get(e);return t?(t.configure(r),t.newCache=i,t.ref(),t):(t=new j(e,r,i),M.set(e,t),t.ref(),t)}return new j(e,r,i)}_loadShaderOnlyExtensions(){this._rctx.capabilities.enable("textureFloat")}getObjectAndLayerIdColor(e){return null!=this.objectAndLayerIdRenderHelper?this.objectAndLayerIdRenderHelper.getObjectAndLayerIdColor(e):null}get componentObjectCollection(){return null==this._componentObjectCollection&&(this._componentObjectCollection=new l(this.renderer.renderPassManager,this._viewingMode)),this._componentObjectCollection}set componentObjectCollection(e){this._componentObjectCollection=e}};e([d({type:Boolean,readOnly:!0})],k.prototype,"updating",null),e([d({autoDestroy:!0})],k.prototype,"_rctx",void 0),e([d({autoDestroy:!0})],k.prototype,"_container",void 0),e([d({autoDestroy:!0})],k.prototype,"_canvas",void 0),e([d({autoDestroy:!0})],k.prototype,"stippleTextureRepository",void 0),e([d({autoDestroy:!0})],k.prototype,"markerTextureRepository",void 0),e([d({autoDestroy:!0})],k.prototype,"waterTextureRepository",void 0),e([d({autoDestroy:!0})],k.prototype,"_magnifierHelper",void 0),e([d({readOnly:!0})],k.prototype,"objectAndLayerIdRenderHelper",void 0),e([d({autoDestroy:!0})],k.prototype,"_textureRepository",void 0),e([d({autoDestroy:!0})],k.prototype,"_compositingHelper",void 0),e([d({autoDestroy:!0,readOnly:!0})],k.prototype,"renderer",void 0),e([d({autoDestroy:!0})],k.prototype,"_screenshotManager",void 0),e([d()],k.prototype,"componentObjectCollection",null),e([d({autoDestroy:!0})],k.prototype,"_componentObjectCollection",void 0),e([d()],k.prototype,"_needsUpdate",void 0),e([d()],k.prototype,"_needsWaterReflectionUpdate",void 0),k=e([c("esri.views.3d.webgl-engine.parts.RenderView")],k);const M=D();export{k as RenderView};
|
|
5
|
+
import{_ as e}from"../../../../chunks/tslib.es6.js";import t from"../../../../core/Accessor.js";import r from"../../../../core/Evented.js";import has from"../../../../core/has.js";import i from"../../../../core/Logger.js";import{removeMaybe as s,destroyMaybe as o}from"../../../../core/maybe.js";import{watch as n,initial as a,syncAndInitial as p}from"../../../../core/reactiveUtils.js";import{addFrameTask as h}from"../../../../core/scheduling.js";import{Milliseconds as d}from"../../../../core/time.js";import{property as l}from"../../../../core/accessorSupport/decorators/property.js";import"../../../../core/accessorSupport/ensureType.js";import"../../../../core/arrayUtils.js";import{subclass as c}from"../../../../core/accessorSupport/decorators/subclass.js";import{ComponentObjectCollection as u}from"../collections/Component/ComponentObjectCollection.js";import{ShaderTechniqueRepository as m}from"../core/shaderTechnique/ShaderTechniqueRepository.js";import{RenderRequestType as _,Decorations as y}from"../lib/basicInterfaces.js";import f from"../lib/CompositingHelper.js";import{textureToDepth as R}from"../lib/depthRangeUtils.js";import{GLMaterialRepository as g}from"../lib/GLMaterialRepository.js";import{MagnifierHelper as x}from"../lib/MagnifierHelper.js";import{UpdateParameters as b}from"../lib/Material.js";import{ObjectAndLayerIdRenderHelper as v}from"../lib/ObjectAndLayerIdRenderHelper.js";import{Renderer as j}from"../lib/Renderer.js";import{RenderingContext as w}from"../lib/RenderingContext.js";import{TextureRepository as T}from"../lib/TextureRepository.js";import{createMarkerTextureRepository as A}from"../materials/markerTextureRepository.js";import{createStippleTextureRepository as C}from"../materials/stippleTextureRepository.js";import{WaterTextureRepository as D}from"../materials/internal/WaterTextureRepository.js";import{getContextCache as U}from"./contextCache.js";import{removeLoadedShaderModules as O}from"./requireUtils.js";import{ScreenshotManager as q,ScreenshotContext as S}from"./ScreenshotManager.js";import{contextCache as L}from"./testUtils.js";import{RenderState as H}from"../../../support/RenderState.js";import{createContextForView as k}from"../../../webgl/contextUtils.js";let M=class extends t{constructor(e){super({}),this.events=new r,this.waterTextureRepository=new D,this._magnifierHelper=new x,this.objectAndLayerIdRenderHelper=has("enable-feature:objectAndLayerId-rendering")?new v:null,this._needsUpdate=!0,this._needsRender=!0,this._idleSuspend=!0,this._needsWaterReflectionUpdate=!1,this._lastAnimationUpdate=0,this._container=e.container,this._viewingMode=e.viewingMode,this._initializeContext(e),this.addHandles([n((()=>this.waterTextureRepository?.updating),(()=>this.requestRender()),a),n((()=>e.view.qualityProfile),(e=>this.renderer?.updateRenderFeature(e)),p),this._magnifierHelper.events.on("request-render",(()=>this.requestRender()))]);const{memoryController:t}=e.view.resourceController;this.stippleTextureRepository=C(this._rctx,t),this.markerTextureRepository=A(this._rctx,t),this._shaderTechniqueRepository=new m({rctx:this._rctx,viewingMode:e.viewingMode,stippleTextureRepository:this.stippleTextureRepository,waterTextureRepository:this.waterTextureRepository,markerTextureRepository:this.markerTextureRepository}),this._textureRepository=new T(e,this._shaderTechniqueRepository,this._rctx),this.addHandles(this._textureRepository.events.on("changed",(e=>this.requestRender(e)))),this._materialRepository=new g(this._textureRepository,this._shaderTechniqueRepository,(()=>this.requestRender()),(()=>this.requestRender())),this._compositingHelper=new f(this._rctx,this._shaderTechniqueRepository),this.renderer=new j(e,this._materialRepository,this._textureRepository,this._shaderTechniqueRepository,this._rctx,this._compositingHelper,this._magnifierHelper,(e=>this.requestRender(e)));const i={renderScene:(e,t,r,i,s)=>this.renderer.render(e,t,r,i,s),requestRenderScene:e=>this.requestRender(e),prepareOverlay:()=>e.options.screenshot.prepareOverlay(),renderOverlay:(t,r)=>e.options.screenshot.renderOverlay(t,r)};this._screenshotManager=new q(this._rctx,i,(e=>this.events.emit("force-camera-for-screenshot",e)),(()=>this.renderer.disposeOffscreenBuffers())),this._registerFrameTask(e)}normalizeCtorArgs(){return{}}destroy(){this._container.contains(this._canvas)&&this._container.removeChild(this._canvas),this._frameTask=s(this._frameTask),this._shaderTechniqueRepository=o(this._shaderTechniqueRepository)}requestRender(e=_.UPDATE){this._needsRender=!0,e===_.UPDATE&&(this._needsUpdate=!0)}get updating(){return this._needsUpdate||this._needsWaterReflectionUpdate||this.renderer.updating||this._textureRepository.updating||this.waterTextureRepository.updating||this._magnifierHelper.updating}get textureRepository(){return this._textureRepository}get compositingHelper(){return this._compositingHelper}set magnifier(e){this._magnifierHelper.magnifier=e}setIdleSuspend(e){this._idleSuspend!==e&&(this._idleSuspend=e,this.requestRender())}get renderingContext(){return this._rctx}get capabilities(){return this._rctx.capabilities}get canvas(){return this._canvas}takeScreenshot(e){return this._screenshotManager.takeScreenshot(e).then((e=>e[0]))}takeScreenshotWithOID(e){return e.objectAndLayerIdColor=!0,this._screenshotManager.takeScreenshot(e)}getAlpha(){return!!this._rctx.contextAttributes.alpha}getMinimalDepthForArea(e,t,r,i,s,o=s){const n=i.constrainWindowSize(t,r,s*i.pixelRatio,o*i.pixelRatio),a=this._ensureDepthBuffer(n);this.renderer.readDepthPixels(i,n,a);let p=Number.MAX_VALUE;for(let h=0;h<n[2]*n[3];h++){const e=R(4*h,a,i.nearFar);p>e&&e!==i.nearFar[0]&&e!==i.nearFar[1]&&(p=e)}if(null!=e){const s=e.pickDepth(t*i.pixelRatio,r*i.pixelRatio,i);null!=s&&p>s&&s!==i.nearFar[0]&&s!==i.nearFar[1]&&(p=s)}return p===Number.MAX_VALUE?void 0:p}_ensureDepthBuffer(e){const t=4*e[2]*e[3];return(null==this._tmpDepthBuffer||this._tmpDepthBuffer.byteLength<t)&&(this._tmpDepthBuffer=new Uint8Array(t)),this._tmpDepthBuffer}async reloadShaders(){O(),await this._shaderTechniqueRepository.reloadAll(),this.requestRender()}_registerFrameTask(e){const t=e.view.state;let r=!1,i=_.BACKGROUND,s=!1;const o={preRender:({time:s})=>{r=this.updating,i=this._needsUpdate?_.UPDATE:_.BACKGROUND,e.commitSyncLayers();const o=d(s-this._lastAnimationUpdate);if(o>this.renderer.animationTimestep||null!=t.forcedAnimationTime||r||this._needsRender){const e=d(o/this.renderer.animationTimeDilation),r=new b(t.camera,e,t.forcedAnimationTime);this.renderer.updateAnimation(r)&&this.requestRender(_.BACKGROUND),this._lastAnimationUpdate=s}},render:({time:e})=>{if((this._needsRender||!this._idleSuspend||!this.renderer.isCameraFinal||this._needsWaterReflectionUpdate)&&t.camera.fullWidth>0&&t.camera.fullHeight>0){const r=this._needsUpdate&&this._idleSuspend&&this.renderer.isCameraFinal;this._needsRender=!1,this._needsUpdate=!1,this._needsWaterReflectionUpdate=!1,this.renderer.render(null,null,t,y.ON,e),s=!0,r&&this.renderer.hasReflections&&(this.requestRender(_.BACKGROUND),this._needsWaterReflectionUpdate=!0)}},update:({time:e})=>{const r=new S(t,this.renderer.hasSlicePlane||this._magnifierHelper.enabled);this._textureRepository.update(),this._screenshotManager.update(r,e)},finish:()=>{s&&(this.renderer.finish(t.mode===H.IDLE?i:_.UPDATE),s=!1)}};this._frameTask=h(o)}_initializeContext(e){const t=e.options;this._canvas=t.canvas,this._canvas||(this._canvas=document.createElement("canvas")),this._canvas.setAttribute("style","width: 100%; height:100%; display:block;");const r={alpha:t.alpha||!1,premultipliedAlpha:!0,antialias:!1,depth:!0,stencil:t.stencil??!0,powerPreference:"high-performance",preserveDrawingBuffer:t.preserveDrawingBuffer??!1},s=k("3d",this._canvas,r);null!=s?(this._rctx=this._newRenderingContext(s,e),this._loadShaderOnlyExtensions(),!t.alpha&&this._rctx.contextAttributes.alpha&&i.getLogger(this).error("WebGL context has alpha channel even though no alpha channel was requested"),!this._rctx.contextAttributes.alpha&&has("safari")>=11&&(this._container.style.backgroundColor="black"),this._container.appendChild(this._canvas)):i.getLogger(this).error("A WebGL2 context could not be created.")}_newRenderingContext(e,t){const r={disabledExtensions:t.options.deactivatedWebGLExtensions||{},debugWebGLExtensions:t.options.debugWebGLExtensions||{},maxAnisotropy:8},i=(e,r)=>t.view.resourceController.memoryController.newCache(e,r);if(L.enabled){let t=E.get(e);return t?(t.configure(r),t.newCache=i,t.ref(),t):(t=new w(e,r,i),E.set(e,t),t.ref(),t)}return new w(e,r,i)}_loadShaderOnlyExtensions(){this._rctx.capabilities.enable("textureFloat")}getObjectAndLayerIdColor(e){return null!=this.objectAndLayerIdRenderHelper?this.objectAndLayerIdRenderHelper.getObjectAndLayerIdColor(e):null}get componentObjectCollection(){return null==this._componentObjectCollection&&(this._componentObjectCollection=new u(this.renderer.renderPassManager,this._viewingMode)),this._componentObjectCollection}set componentObjectCollection(e){this._componentObjectCollection=e}};e([l({type:Boolean,readOnly:!0})],M.prototype,"updating",null),e([l({autoDestroy:!0})],M.prototype,"_rctx",void 0),e([l({autoDestroy:!0})],M.prototype,"_container",void 0),e([l({autoDestroy:!0})],M.prototype,"_canvas",void 0),e([l({autoDestroy:!0})],M.prototype,"stippleTextureRepository",void 0),e([l({autoDestroy:!0})],M.prototype,"markerTextureRepository",void 0),e([l({autoDestroy:!0})],M.prototype,"waterTextureRepository",void 0),e([l({autoDestroy:!0})],M.prototype,"_magnifierHelper",void 0),e([l({readOnly:!0})],M.prototype,"objectAndLayerIdRenderHelper",void 0),e([l({autoDestroy:!0})],M.prototype,"_textureRepository",void 0),e([l({autoDestroy:!0})],M.prototype,"_compositingHelper",void 0),e([l({autoDestroy:!0,readOnly:!0})],M.prototype,"renderer",void 0),e([l({autoDestroy:!0})],M.prototype,"_screenshotManager",void 0),e([l()],M.prototype,"componentObjectCollection",null),e([l({autoDestroy:!0})],M.prototype,"_componentObjectCollection",void 0),e([l()],M.prototype,"_needsUpdate",void 0),e([l()],M.prototype,"_needsWaterReflectionUpdate",void 0),M=e([c("esri.views.3d.webgl-engine.parts.RenderView")],M);const E=U();export{M as RenderView};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.27/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import"../core/shaderLibrary/ForwardLinearDepth.glsl.js";import"../core/shaderLibrary/ShaderOutput.js";import"../core/shaderLibrary/Slice.glsl.js";import"../core/shaderLibrary/Transform.glsl.js";import"../core/shaderLibrary/attributes/VertexColor.glsl.js";import"../core/shaderLibrary/output/OutputDepth.glsl.js";import"../core/shaderLibrary/output/OutputHighlight.glsl.js";import"../core/shaderLibrary/shading/MultipassTerrainTest.glsl.js";import"../core/shaderLibrary/util/AlphaCutoff.js";import"../core/shaderLibrary/util/ColorConversion.glsl.js";import"../core/shaderLibrary/util/View.glsl.js";import"../core/shaderModules/Float4PassUniform.js";import"../core/shaderModules/FloatPassUniform.js";import"../core/shaderModules/interfaces.js";import"../core/shaderModules/ShaderBuilder.js";import"../lib/TransparencyPassType.js";import"../lib/VertexAttribute.js";import"../materials/PatternStyle.js";export{b as build}from"../../../../chunks/Pattern.glsl.js";
|
|
5
|
+
import"../core/shaderLibrary/ForwardLinearDepth.glsl.js";import"../core/shaderLibrary/ShaderOutput.js";import"../core/shaderLibrary/Slice.glsl.js";import"../core/shaderLibrary/Transform.glsl.js";import"../core/shaderLibrary/attributes/VertexColor.glsl.js";import"../core/shaderLibrary/output/OutputDepth.glsl.js";import"../core/shaderLibrary/output/OutputHighlight.glsl.js";import"../core/shaderLibrary/shading/MultipassTerrainTest.glsl.js";import"../core/shaderLibrary/shading/VisualVariables.glsl.js";import"../core/shaderLibrary/util/AlphaCutoff.js";import"../core/shaderLibrary/util/ColorConversion.glsl.js";import"../core/shaderLibrary/util/View.glsl.js";import"../core/shaderModules/Float4PassUniform.js";import"../core/shaderModules/FloatPassUniform.js";import"../core/shaderModules/interfaces.js";import"../core/shaderModules/ShaderBuilder.js";import"../lib/TransparencyPassType.js";import"../lib/VertexAttribute.js";import"../materials/PatternStyle.js";export{b as build}from"../../../../chunks/Pattern.glsl.js";
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.27/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as e}from"../../../../chunks/tslib.es6.js";import{ShaderOutput as t}from"../core/shaderLibrary/ShaderOutput.js";import{ReloadableShaderModule as o}from"../core/shaderTechnique/ReloadableShaderModule.js";import{ShaderTechnique as r}from"../core/shaderTechnique/ShaderTechnique.js";import{parameter as i}from"../core/shaderTechnique/ShaderTechniqueConfiguration.js";import{CullFaceOptions as s}from"../lib/basicInterfaces.js";import{blendingDefault as n,oitBlending as
|
|
5
|
+
import{_ as e}from"../../../../chunks/tslib.es6.js";import{ShaderOutput as t}from"../core/shaderLibrary/ShaderOutput.js";import{ReloadableShaderModule as o}from"../core/shaderTechnique/ReloadableShaderModule.js";import{ShaderTechnique as r}from"../core/shaderTechnique/ShaderTechnique.js";import{parameter as i}from"../core/shaderTechnique/ShaderTechniqueConfiguration.js";import{CullFaceOptions as s}from"../lib/basicInterfaces.js";import{blendingDefault as n,oitBlending as p,oitDepthTest as a,oitDepthWrite as l,getOITPolygonOffset as c}from"../lib/OrderIndependentTransparency.js";import{Program as u}from"../lib/Program.js";import{stencilWriteMaskOn as h,stencilToolMaskBaseParams as d,stencilBaseAllZerosParams as f}from"../lib/StencilUtils.js";import{TransparencyPassType as y}from"../lib/TransparencyPassType.js";import{VertexAttribute as m}from"../lib/VertexAttribute.js";import{DefaultTechniqueConfiguration as v}from"../materials/DefaultTechniqueConfiguration.js";import{Style as O}from"../materials/PatternStyle.js";import{P as T}from"../../../../chunks/Pattern.glsl.js";import{makePipelineState as P,cullingParams as g,defaultDepthWriteParams as S,defaultColorWriteParams as b}from"../../../webgl/renderState.js";class j extends r{initializeProgram(e){return new u(e.rctx,j.shader.get().build(this.configuration),U)}_setPipelineState(e,o){const r=this.configuration,i=e===y.NONE,s=e===y.FrontFace;return P({blending:r.output===t.Color||r.output===t.Alpha?i?n:p(e):null,culling:g(r.cullFace),depthTest:{func:a(e)},depthWrite:i?r.writeDepth?S:null:l(e),colorWrite:b,stencilWrite:r.hasOccludees?h:null,stencilTest:r.hasOccludees?o?d:f:null,polygonOffset:i||s?r.polygonOffset?C:null:c(r.enableOffset)})}initializePipeline(){return this._occludeePipelineState=this._setPipelineState(this.configuration.transparencyPassType,!0),this._setPipelineState(this.configuration.transparencyPassType,!1)}getPipelineState(e,t){return t?this._occludeePipelineState:super.getPipelineState(e,t)}}j.shader=new o(T,(()=>import("./Pattern.glsl.js")));const C={factor:1,units:1};class N extends v{constructor(){super(...arguments),this.output=t.Color,this.cullFace=s.None,this.transparencyPassType=y.NONE,this.hasSlicePlane=!1,this.hasVertexColors=!1,this.polygonOffset=!1,this.writeDepth=!0,this.hasOccludees=!1,this.enableOffset=!0,this.hasMultipassTerrain=!1,this.cullAboveGround=!1,this.vvColor=!1}}e([i({count:t.COUNT})],N.prototype,"output",void 0),e([i({count:s.COUNT})],N.prototype,"cullFace",void 0),e([i({count:O.COUNT})],N.prototype,"style",void 0),e([i({count:y.COUNT})],N.prototype,"transparencyPassType",void 0),e([i()],N.prototype,"hasSlicePlane",void 0),e([i()],N.prototype,"hasVertexColors",void 0),e([i()],N.prototype,"polygonOffset",void 0),e([i()],N.prototype,"writeDepth",void 0),e([i()],N.prototype,"hasOccludees",void 0),e([i()],N.prototype,"patternSpacing",void 0),e([i()],N.prototype,"lineWidth",void 0),e([i()],N.prototype,"enableOffset",void 0),e([i()],N.prototype,"draped",void 0),e([i()],N.prototype,"hasMultipassTerrain",void 0),e([i()],N.prototype,"cullAboveGround",void 0),e([i()],N.prototype,"vvColor",void 0),e([i({constValue:!1})],N.prototype,"hasVvInstancing",void 0),e([i({constValue:!1})],N.prototype,"vvSize",void 0),e([i({constValue:!1})],N.prototype,"vvOpacity",void 0);const U=new Map([[m.POSITION,0],[m.COLOR,3],[m.UVMAPSPACE,4],[m.COLORFEATUREATTRIBUTE,5],[m.BOUNDINGRECT,6]]);export{j as PatternTechnique,N as PatternTechniqueConfiguration,U as vertexAttributeLocations};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/*
|
|
2
|
+
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
|
+
See https://js.arcgis.com/4.27/esri/copyright.txt for details.
|
|
4
|
+
*/
|
|
5
|
+
import{BufferObject as e}from"./BufferObject.js";import{Usage as r,BufferType as t,PrimitiveType as i,DataType as s}from"./enums.js";class n{constructor(e){this._rctx=e,this._indexBuffer=this._createIndexbuffer(),this._program=this._createHelperProgram()}static getShaderSources(){return{vertex:"#version 300 es\n precision highp float;\n\n void main(void) {\n gl_Position = vec4(0.0, 0.0, float(gl_VertexID)-2.0, 1.0);\n }",fragment:"#version 300 es\n precision highp float;\n\n out vec4 fragColor;\n\n void main(void) {\n fragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }"}}_createHelperProgram(){const e=n.getShaderSources();return this._rctx.programCache.acquire(e.vertex,e.fragment,new Map([]))}_createIndexbuffer(){return e.createIndex(this._rctx,r.STATIC_DRAW,new Uint32Array([0]))}resetIndicesType(){this._program.compiled&&this._indexBuffer&&(this._rctx.bindVAO(null),this._rctx.useProgram(this._program),this._rctx.bindBuffer(this._indexBuffer,t.ELEMENT_ARRAY_BUFFER),this._rctx.drawElements(i.POINTS,1,s.UNSIGNED_INT,0))}dispose(){this._program.dispose(),this._indexBuffer.dispose()}}export{n as AppleAmdDriverHelper};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.27/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import has from"../../core/has.js";import{glsl as
|
|
5
|
+
import has from"../../core/has.js";import{glsl as r}from"../3d/webgl-engine/core/shaderModules/interfaces.js";import{AppleAmdDriverHelper as e}from"./AppleAmdDriverHelper.js";import{BufferObject as t}from"./BufferObject.js";import{ContextType as o}from"./contextUtils.js";import{TextureWrapMode as n,TextureSamplingMode as s,Usage as i,BufferType as a,PrimitiveType as p,DataType as c,PixelFormat as l,PixelType as m}from"./enums.js";import{FramebufferObject as f}from"./FramebufferObject.js";import{TextureDescriptor as g}from"./TextureDescriptor.js";import{WebGLDriverTestModule as d}from"./WebGLDriverTestModule.js";class h extends d{constructor(r){super(),this._rctx=r,this._helperProgram=null,this._rctx.type===o.WEBGL2&&has("mac")&&has("chrome")&&(this._program=this._prepareProgram(),this._helperProgram=this._prepareHelperProgram())}dispose(){super.dispose(),this._helperProgram?.dispose(),this._helperProgram=null}_test(r){const e=this._rctx;e.resetState();const o=new g(1);o.wrapMode=n.CLAMP_TO_EDGE,o.samplingMode=s.NEAREST;const d=new f(e,o),h=t.createIndex(this._rctx,i.STATIC_DRAW,new Uint8Array([0]));e.bindFramebuffer(d),e.setViewport(0,0,1,1),e.useProgram(this._helperProgram),e.bindBuffer(h,a.ELEMENT_ARRAY_BUFFER),e.drawElements(p.POINTS,1,c.UNSIGNED_BYTE,0),e.useProgram(r),e.bindVAO(null),e.drawArrays(p.TRIANGLES,0,258);const _=new Uint8Array(4);return d.readPixels(0,0,1,1,l.RGBA,m.UNSIGNED_BYTE,_),d.dispose(),h.dispose(),255===_[0]}_prepareProgram(){const e=85,t=`#version 300 es\n precision highp float;\n\n out float triangleId;\n\n const vec3 triangleVertices[3] = vec3[3](vec3(-0.5, -0.5, 0.0), vec3(0.5, -0.5, 0.0), vec3(0.0, 0.5, 0.0));\n\n void main(void) {\n triangleId = floor(float(gl_VertexID)/3.0);\n\n vec3 position = triangleVertices[gl_VertexID % 3];\n float offset = triangleId / ${r.float(e)};\n position.z = 0.5 - offset;\n\n gl_Position = vec4(position, 1.0);\n }\n `,o=`#version 300 es\n precision highp float;\n\n in float triangleId;\n\n out vec4 fragColor;\n\n void main(void) {\n fragColor = triangleId == ${r.float(e)} ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0);\n }\n `;return this._rctx.programCache.acquire(t,o,new Map([]))}_prepareHelperProgram(){const r=e.getShaderSources();return this._rctx.programCache.acquire(r.vertex,r.fragment,new Map([]))}}export{h as DrawArraysRequiresIndicesTypeReset};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.27/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{Pos2us as e}from"../2d/engine/webgl/DefaultVertexAttributeLayouts.js";import{BufferObject as r}from"./BufferObject.js";import{TextureWrapMode as t,TextureSamplingMode as
|
|
5
|
+
import{Pos2us as e}from"../2d/engine/webgl/DefaultVertexAttributeLayouts.js";import{BufferObject as r}from"./BufferObject.js";import{TextureWrapMode as t,TextureSamplingMode as o,Usage as n,ClearBufferBit as s,PrimitiveType as i,PixelFormat as a,PixelType as p}from"./enums.js";import{FramebufferObject as m}from"./FramebufferObject.js";import{Texture as u}from"./Texture.js";import{TextureDescriptor as c}from"./TextureDescriptor.js";import{VertexArrayObject as d}from"./VertexArrayObject.js";import{WebGLDriverTestModule as g}from"./WebGLDriverTestModule.js";class f extends g{constructor(e){super(),this._rctx=e;const r="\n precision highp float;\n\n attribute vec2 a_pos;\n varying vec2 v_uv;\n\n void main() {\n v_uv = a_pos;\n gl_Position = vec4(a_pos * 2.0 - 1.0, 0.0, 1.0);\n }\n ",t="\n precision highp float;\n\n varying vec2 v_uv;\n\n uniform sampler2D u_texture;\n\n void main() {\n gl_FragColor = texture2D(u_texture, v_uv);\n }\n ";this._program=e.programCache.acquire(r,t,new Map([["a_pos",0]]))}dispose(){super.dispose()}_test(g){const f=this._rctx;if(!f.gl)return g.dispose(),!0;const l=new c(1);l.wrapMode=t.CLAMP_TO_EDGE,l.samplingMode=o.NEAREST;const w=new m(f,l),v=r.createVertex(f,n.STATIC_DRAW,new Uint16Array([0,0,1,0,0,1,1,1])),x=new d(f,new Map([["a_pos",0]]),e,{geometry:v}),h=new c;h.samplingMode=o.LINEAR,h.wrapMode=t.CLAMP_TO_EDGE;const b=new u(f,h,_);f.useProgram(g),f.bindTexture(b,0),g.setUniform1i("u_texture",0);const A=f.getBoundFramebufferObject(),{x:E,y:T,width:j,height:C}=f.getViewport();f.bindFramebuffer(w),f.setViewport(0,0,1,1),f.setClearColor(0,0,0,0),f.setBlendingEnabled(!1),f.clearSafe(s.COLOR_BUFFER_BIT),f.bindVAO(x),f.drawArrays(i.TRIANGLE_STRIP,0,4);const y=new Uint8Array(4);return w.readPixels(0,0,1,1,a.RGBA,p.UNSIGNED_BYTE,y),x.dispose(),w.dispose(),b.dispose(),f.setViewport(E,T,j,C),f.bindFramebuffer(A),255!==y[0]}}const _=new Image;_.src="data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg width='5' height='5' version='1.1' viewBox='0 0 5 5' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='5' height='5' fill='%23f00' fill-opacity='.5'/%3E%3C/svg%3E%0A",_.width=5,_.height=5,_.decode();export{f as SVGPremultipliedAlpha};
|
package/widgets/Attachments.js
CHANGED
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.27/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as e}from"../chunks/tslib.es6.js";import t from"../core/Error.js";import{on as s,watch as i,initial as a}from"../core/reactiveUtils.js";import{formatFileSize as n}from"../core/unitFormatUtils.js";import{property as r}from"../core/accessorSupport/decorators/property.js";import{cast as l}from"../core/accessorSupport/decorators/cast.js";import"../core/arrayUtils.js";import"../core/has.js";import{subclass as o}from"../core/accessorSupport/decorators/subclass.js";import d from"./Widget.js";import c from"./Attachments/AttachmentsViewModel.js";import{getIconPath as m,isSupportedImage as h}from"./Attachments/support/attachmentUtils.js";import{loadCalciteComponents as u}from"./support/componentsUtils.js";import{storeNode as p,discardNode as g,isRTL as b}from"./support/widgetUtils.js";import{messageBundle as f}from"./support/decorators/messageBundle.js";import{tsx as _}from"./support/jsxFactory.js";const v={addButton:!0,addSubmitButton:!0,cancelAddButton:!0,cancelUpdateButton:!0,deleteButton:!0,errorMessage:!0,progressBar:!0,updateButton:!0},y="esri-attachments",w="esri-button",A={base:y,loaderContainer:`${y}__loader-container`,loader:`${y}__loader`,fadeIn:`${y}--fade-in`,container:`${y}__container`,containerList:`${y}__container--list`,containerPreview:`${y}__container--preview`,actions:`${y}__actions`,deleteButton:`${y}__delete-button`,addAttachmentButton:`${y}__add-attachment-button`,errorMessage:`${y}__error-message`,items:`${y}__items`,item:`${y}__item`,itemButton:`${y}__item-button`,itemMask:`${y}__item-mask`,itemMaskIcon:`${y}__item-mask--icon`,itemImage:`${y}__image`,itemImageResizable:`${y}__image--resizable`,itemLabel:`${y}__label`,itemFilename:`${y}__filename`,itemChevronIcon:`${y}__item-chevron-icon`,itemLink:`${y}__item-link`,itemLinkOverlay:`${y}__item-link-overlay`,itemLinkOverlayIcon:`${y}__item-link-overlay-icon`,itemEditIcon:`${y}__item-edit-icon`,itemAddIcon:`${y}__item-add-icon`,itemAddButton:`${y}__item-add-button`,formNode:`${y}__form-node`,fileFieldset:`${y}__file-fieldset`,fileLabel:`${y}__file-label`,fileName:`${y}__file-name`,fileInput:`${y}__file-input`,metadata:`${y}__metadata`,metadataFieldset:`${y}__metadata-fieldset`,progressBar:`${y}__progress-bar`,esriWidget:"esri-widget",esriButton:w,buttonDisabled:`${w}--disabled`,esriButtonSecondary:`${w}--secondary`,esriButtonTertiary:`${w}--tertiary`,esriButtonThird:`${w}--third`,esriButtonSmall:`${w}--small`,esriButtonHalf:`${w}--half`,empty:"esri-widget__content--empty",iconExternalLink:"esri-icon-link-external",iconEdit:"esri-icon-edit",iconRight:"esri-icon-right",iconLeft:"esri-icon-left",iconPlus:"esri-icon-plus"},F=window.CSS;let k=class extends d{constructor(e,t){super(e,t),this.displayType="auto",this.messages=null,this.messagesUnits=null,this.selectedFile=null,this.submitting=!1,this.viewModel=null,this.visibleElements={...v},this._supportsImageOrientation=F&&F.supports&&F.supports("image-orientation","from-image"),this._addAttachmentForm=null,this._updateAttachmentForm=null}initialize(){this.viewModel||(this.viewModel=new c),this.addHandles([s((()=>this.viewModel?.attachmentInfos),"change",(()=>this.scheduleRender())),s((()=>this.viewModel?.fileInfos),"change",(()=>this.scheduleRender())),i((()=>this.viewModel?.mode),(()=>this._modeChanged()),a)])}loadDependencies(){return u({icon:()=>import("@esri/calcite-components/dist/components/calcite-icon.js")})}get capabilities(){return this.viewModel.capabilities}set capabilities(e){this.viewModel.capabilities=e}get effectiveDisplayType(){const{displayType:e}=this;return e&&"auto"!==e?e:this.viewModel.supportsResizeAttachments?"preview":"list"}get graphic(){return this.viewModel.graphic}set graphic(e){this.viewModel.graphic=e}get label(){return this.messages?.widgetLabel??""}set label(e){this._overrideIfSome("label",e)}castVisibleElements(e){return{...v,...e}}addAttachment(){const{_addAttachmentForm:e,viewModel:s}=this;return this._set("submitting",!0),this._set("error",null),s.addAttachment(e).then((e=>(this._set("submitting",!1),this._set("error",null),s.mode="view",e))).catch((e=>{throw this._set("submitting",!1),this._set("error",new t("attachments:add-attachment",this.messages.addErrorMessage,e)),e}))}deleteAttachment(e){const{viewModel:s}=this;return this._set("submitting",!0),this._set("error",null),s.deleteAttachment(e).then((e=>(this._set("submitting",!1),this._set("error",null),s.mode="view",e))).catch((e=>{throw this._set("submitting",!1),this._set("error",new t("attachments:delete-attachment",this.messages.deleteErrorMessage,e)),e}))}updateAttachment(){const{viewModel:e}=this,{_updateAttachmentForm:s}=this;return this._set("submitting",!0),this._set("error",null),e.updateAttachment(s).then((t=>(this._set("submitting",!1),this._set("error",null),e.mode="view",t))).catch((e=>{throw this._set("submitting",!1),this._set("error",new t("attachments:update-attachment",this.messages.updateErrorMessage,e)),e}))}addFile(){const e=this.viewModel.addFile(this.selectedFile,this._addAttachmentForm);return this.viewModel.mode="view",e}updateFile(){const{viewModel:e}=this,t=e.updateFile(this.selectedFile,this._updateAttachmentForm,e.activeFileInfo);return e.mode="view",t}deleteFile(e){const t=this.viewModel.deleteFile(e||this.viewModel.activeFileInfo?.file);return this.viewModel.mode="view",t}render(){const{submitting:e,viewModel:t}=this,{state:s}=t;return _("div",{class:this.classes(A.base,A.esriWidget)},e?this.renderProgressBar():null,"loading"===s?this.renderLoading():this.renderAttachments(),this.renderErrorMessage())}renderErrorMessage(){const{error:e,visibleElements:t}=this;return e&&t.errorMessage?_("div",{key:"error-message",class:A.errorMessage},e.message):null}renderAttachments(){const{activeFileInfo:e,mode:t,activeAttachmentInfo:s}=this.viewModel;return"add"===t?this.renderAddForm():"edit"===t?this.renderDetailsForm(s||e):this.renderAttachmentContainer()}renderLoading(){return _("div",{class:A.loaderContainer,key:"loader"},_("div",{class:A.loader}))}renderProgressBar(){return this.visibleElements.progressBar?_("div",{class:A.progressBar,key:"progress-bar"}):null}renderAddForm(){const{submitting:e,selectedFile:t}=this,s=e||!t,i=this.visibleElements.cancelAddButton?_("button",{type:"button",bind:this,disabled:e,onclick:this._cancelForm,class:this.classes(A.esriButton,A.esriButtonTertiary,A.esriButtonSmall,A.esriButtonHalf,e&&A.buttonDisabled)},this.messages.cancel):null,a=this.visibleElements.addSubmitButton?_("button",{type:"submit",disabled:s,class:this.classes(A.esriButton,A.esriButtonSecondary,A.esriButtonSmall,A.esriButtonHalf,{[A.buttonDisabled]:s})},this.messages.add):null,n=t?_("span",{key:"file-name",class:A.fileName},t.name):null,r=_("form",{bind:this,afterCreate:p,afterRemoved:g,"data-node-ref":"_addAttachmentForm",onsubmit:this._submitAddAttachment},_("fieldset",{class:A.fileFieldset},n,_("label",{class:this.classes(A.fileLabel,A.esriButton,A.esriButtonSecondary)},t?this.messages.changeFile:this.messages.selectFile,_("input",{class:A.fileInput,type:"file",name:"attachment",bind:this,onchange:this._handleFileInputChange}))),a,i);return _("div",{key:"add-form-container",class:A.formNode},r)}renderDetailsForm(e){const{visibleElements:t,viewModel:s,selectedFile:i,submitting:a}=this,{capabilities:r}=s,l=a||!i;let o,d,c,m;i?(o=i.type,d=i.name,c=i.size):e&&"file"in e?(o=e.file.type,d=e.file.name,c=e.file.size):e&&"contentType"in e&&(o=e.contentType,d=e.name,c=e.size,m=e.url);const h=r.editing&&r.operations?.delete&&t.deleteButton?_("button",{key:"delete-button",type:"button",disabled:a,bind:this,onclick:t=>this._submitDeleteAttachment(t,e),class:this.classes(A.esriButton,A.esriButtonSmall,A.esriButtonTertiary,A.deleteButton,{[A.buttonDisabled]:a})},this.messages.delete):void 0,u=r.editing&&r.operations?.update&&t.updateButton?_("button",{disabled:l,key:"update-button",type:"submit",class:this.classes(A.esriButton,A.esriButtonSmall,A.esriButtonThird,{[A.buttonDisabled]:l})},this.messages.update):void 0,b=this.visibleElements.cancelUpdateButton?_("button",{disabled:a,key:"cancel-button",type:"button",bind:this,onclick:this._cancelForm,class:this.classes(A.esriButton,A.esriButtonSmall,A.esriButtonTertiary,A.esriButtonThird,{[A.buttonDisabled]:a})},this.messages.cancel):void 0,f=r.editing&&r.operations?.update?_("fieldset",{key:"file",class:A.fileFieldset},_("span",{key:"file-name",class:A.fileName},d),_("label",{class:this.classes(A.fileLabel,A.esriButton,A.esriButtonSecondary)},this.messages.changeFile,_("input",{class:A.fileInput,type:"file",name:"attachment",bind:this,onchange:this._handleFileInputChange}))):void 0,v=_("fieldset",{key:"size",class:A.metadataFieldset},_("label",null,n(this.messagesUnits,c??0))),y=_("fieldset",{key:"content-type",class:A.metadataFieldset},_("label",null,o)),w=null!=m?_("a",{class:A.itemLink,href:m,rel:"noreferrer",target:"_blank"},this.renderImageMask(e,400),_("div",{class:A.itemLinkOverlay},_("span",{class:A.itemLinkOverlayIcon},_("calcite-icon",{icon:"launch"})))):this.renderImageMask(e,400),F=_("form",{bind:this,afterCreate:p,afterRemoved:g,"data-node-ref":"_updateAttachmentForm",onsubmit:t=>this._submitUpdateAttachment(t,e)},_("div",{class:A.metadata},v,y),f,_("div",{class:A.actions},h,b,u));return _("div",{key:"edit-form-container",class:A.formNode},w,F)}renderImageMask(e,t){return e?"file"in e?this.renderGenericImageMask(e.file.name,e.file.type):this.renderImageMaskForAttachment(e,t):null}renderGenericImageMask(e,t){const{supportsResizeAttachments:s}=this.viewModel,i=m(t),a={[A.itemImageResizable]:s};return _("div",{class:this.classes(A.itemMaskIcon,A.itemMask)},_("img",{title:e,alt:e,src:i,class:this.classes(a,A.itemImage)}))}renderImageMaskForAttachment(e,t){const{supportsResizeAttachments:s}=this.viewModel;if(!e)return null;const{contentType:i,name:a,url:n}=e;if(!s||!h(i))return this.renderGenericImageMask(a,i);const r=this._getCSSTransform(e),l=r?{transform:r,"image-orientation":"none"}:{},o=`${n}${n?.includes("?")?"&":"?"}w=${t}`,d={[A.itemImageResizable]:s};return _("div",{class:this.classes(A.itemMask)},_("img",{styles:l,alt:a,title:a,src:o,class:this.classes(d,A.itemImage)}))}renderFile(e){const{file:t}=e;return _("li",{class:A.item,key:t},_("button",{key:"details-button",bind:this,class:A.itemButton,title:this.messages.attachmentDetails,"aria-label":this.messages.attachmentDetails,onclick:()=>this._startEditFile(e),type:"button"},this.renderImageMask(e),_("label",{class:A.itemLabel},_("span",{class:A.itemFilename},t.name||this.messages.noTitle),_("span",{"aria-hidden":"true",class:this.classes(A.itemChevronIcon,b(this.container)?A.iconLeft:A.iconRight)}))))}renderAttachmentInfo({attachmentInfo:e,displayType:t}){const{viewModel:s,effectiveDisplayType:i}=this,{capabilities:a,supportsResizeAttachments:n}=s,{contentType:r,name:l,url:o}=e,d=this.renderImageMask(e,"list"===t?48:400),c=a.editing?_("span",{"aria-hidden":"true",class:this.classes(A.itemChevronIcon,b(this.container)?A.iconLeft:A.iconRight)}):null,m=[d,"preview"===i&&n&&h(r)?null:_("label",{class:A.itemLabel},_("span",{class:A.itemFilename},l||this.messages.noTitle),c)],u=a.editing?_("button",{key:"details-button",bind:this,class:A.itemButton,title:this.messages.attachmentDetails,"aria-label":this.messages.attachmentDetails,"data-attachment-info-id":e.id,onclick:()=>this._startEditAttachment(e),type:"button"},m):_("a",{key:"details-link",class:A.itemButton,href:o??void 0,target:"_blank"},m);return _("li",{class:A.item,key:e},u)}renderAttachmentContainer(){const{effectiveDisplayType:e,viewModel:t,visibleElements:s}=this,{attachmentInfos:i,capabilities:a,fileInfos:n}=t,r=!!i?.length,l=!!n?.length,o={[A.containerList]:"preview"!==e,[A.containerPreview]:"preview"===e},d=a.editing&&a.operations?.add&&s.addButton?_("button",{bind:this,onclick:()=>this._startAddAttachment(),class:this.classes(A.esriButton,A.esriButtonTertiary,A.addAttachmentButton),type:"button"},_("span",{"aria-hidden":"true",class:this.classes(A.itemAddIcon,A.iconPlus)}),this.messages.add):void 0,c=r?_("ul",{key:"attachments-list",class:A.items},i.toArray().map((t=>this.renderAttachmentInfo({attachmentInfo:t,displayType:e})))):void 0,m=l?_("ul",{key:"file-list",class:A.items},n.toArray().map((e=>this.renderFile(e)))):void 0,h=l||r?void 0:_("div",{class:A.empty},this.messages.noAttachments);return _("div",{key:"attachments-container",class:this.classes(A.container,o)},c,m,h,d)}_modeChanged(){this._set("error",null),this._set("selectedFile",null)}_handleFileInputChange(e){const t=e.target,s=t&&t.files&&t.files.item(0);this._set("selectedFile",s)}_submitDeleteAttachment(e,t){e.preventDefault(),t&&("file"in t?this.deleteFile(t.file):t&&this.deleteAttachment(t))}_submitAddAttachment(e){e.preventDefault(),this.viewModel.filesEnabled?this.addFile():this.addAttachment()}_submitUpdateAttachment(e,t){e.preventDefault(),t&&"file"in t?this.updateFile():this.updateAttachment()}_startEditAttachment(e){const{viewModel:t}=this;t.activeFileInfo=null,t.activeAttachmentInfo=e,t.mode="edit"}_startEditFile(e){const{viewModel:t}=this;t.activeAttachmentInfo=null,t.activeFileInfo=e,t.mode="edit"}_startAddAttachment(){this.viewModel.mode="add"}_cancelForm(e){e.preventDefault(),this.viewModel.mode="view"}_getCSSTransform(e){const{orientationInfo:t}=e;return!this._supportsImageOrientation&&t?[t.rotation?`rotate(${t.rotation}deg)`:"",t.mirrored?"scaleX(-1)":""].join(" "):""}};e([r()],k.prototype,"capabilities",null),e([r()],k.prototype,"displayType",void 0),e([r({readOnly:!0})],k.prototype,"effectiveDisplayType",null),e([r()],k.prototype,"graphic",null),e([r()],k.prototype,"label",null),e([r(),f("esri/widgets/Attachments/t9n/Attachments")],k.prototype,"messages",void 0),e([r(),f("esri/core/t9n/Units")],k.prototype,"messagesUnits",void 0),e([r({readOnly:!0})],k.prototype,"selectedFile",void 0),e([r({readOnly:!0})],k.prototype,"submitting",void 0),e([r({readOnly:!0})],k.prototype,"error",void 0),e([r({type:c})],k.prototype,"viewModel",void 0),e([r()],k.prototype,"visibleElements",void 0),e([l("visibleElements")],k.prototype,"castVisibleElements",null),k=e([o("esri.widgets.Attachments")],k);const B=k;export{B as default};
|
|
5
|
+
import{_ as e}from"../chunks/tslib.es6.js";import t from"../core/Error.js";import{on as s,watch as i,initial as a}from"../core/reactiveUtils.js";import{formatFileSize as n}from"../core/unitFormatUtils.js";import{property as r}from"../core/accessorSupport/decorators/property.js";import{cast as l}from"../core/accessorSupport/decorators/cast.js";import"../core/arrayUtils.js";import"../core/has.js";import{subclass as o}from"../core/accessorSupport/decorators/subclass.js";import d from"./Widget.js";import c from"./Attachments/AttachmentsViewModel.js";import{getIconPath as m,isSupportedImage as h}from"./Attachments/support/attachmentUtils.js";import{loadCalciteComponents as u}from"./support/componentsUtils.js";import{storeNode as p,discardNode as g,isRTL as b}from"./support/widgetUtils.js";import{messageBundle as f}from"./support/decorators/messageBundle.js";import{tsx as _}from"./support/jsxFactory.js";const v={addButton:!0,addSubmitButton:!0,cancelAddButton:!0,cancelUpdateButton:!0,deleteButton:!0,errorMessage:!0,progressBar:!0,updateButton:!0},y="esri-attachments",w="esri-button",A={base:y,loaderContainer:`${y}__loader-container`,loader:`${y}__loader`,fadeIn:`${y}--fade-in`,container:`${y}__container`,containerList:`${y}__container--list`,containerPreview:`${y}__container--preview`,actions:`${y}__actions`,deleteButton:`${y}__delete-button`,addAttachmentButton:`${y}__add-attachment-button`,errorMessage:`${y}__error-message`,items:`${y}__items`,item:`${y}__item`,itemButton:`${y}__item-button`,itemMask:`${y}__item-mask`,itemMaskIcon:`${y}__item-mask--icon`,itemImage:`${y}__image`,itemImageResizable:`${y}__image--resizable`,itemLabel:`${y}__label`,itemFilename:`${y}__filename`,itemChevronIcon:`${y}__item-chevron-icon`,itemLink:`${y}__item-link`,itemLinkOverlay:`${y}__item-link-overlay`,itemLinkOverlayIcon:`${y}__item-link-overlay-icon`,itemEditIcon:`${y}__item-edit-icon`,itemAddIcon:`${y}__item-add-icon`,itemAddButton:`${y}__item-add-button`,formNode:`${y}__form-node`,fileFieldset:`${y}__file-fieldset`,fileLabel:`${y}__file-label`,fileName:`${y}__file-name`,fileInput:`${y}__file-input`,metadata:`${y}__metadata`,metadataFieldset:`${y}__metadata-fieldset`,progressBar:`${y}__progress-bar`,esriWidget:"esri-widget",esriButton:w,buttonDisabled:`${w}--disabled`,esriButtonSecondary:`${w}--secondary`,esriButtonTertiary:`${w}--tertiary`,esriButtonThird:`${w}--third`,esriButtonSmall:`${w}--small`,esriButtonHalf:`${w}--half`,empty:"esri-widget__content--empty",iconExternalLink:"esri-icon-link-external",iconEdit:"esri-icon-edit",iconRight:"esri-icon-right",iconLeft:"esri-icon-left",iconPlus:"esri-icon-plus"},k=window.CSS;let F=class extends d{constructor(e,t){super(e,t),this.displayType="auto",this.messages=null,this.messagesUnits=null,this.selectedFile=null,this.submitting=!1,this.viewModel=null,this.visibleElements={...v},this._supportsImageOrientation=k&&k.supports&&k.supports("image-orientation","from-image"),this._addAttachmentForm=null,this._updateAttachmentForm=null}initialize(){this.viewModel||(this.viewModel=new c),this.addHandles([s((()=>this.viewModel?.attachmentInfos),"change",(()=>this.scheduleRender())),s((()=>this.viewModel?.fileInfos),"change",(()=>this.scheduleRender())),i((()=>this.viewModel?.mode),(()=>this._modeChanged()),a)])}loadDependencies(){return u({icon:()=>import("@esri/calcite-components/dist/components/calcite-icon.js")})}get capabilities(){return this.viewModel.capabilities}set capabilities(e){this.viewModel.capabilities=e}get effectiveDisplayType(){const{displayType:e}=this;return e&&"auto"!==e?e:this.viewModel.supportsResizeAttachments?"preview":"list"}get graphic(){return this.viewModel.graphic}set graphic(e){this.viewModel.graphic=e}get label(){return this.messages?.widgetLabel??""}set label(e){this._overrideIfSome("label",e)}castVisibleElements(e){return{...v,...e}}addAttachment(){const{_addAttachmentForm:e,viewModel:s}=this;return this._set("submitting",!0),this._set("error",null),s.addAttachment(e).then((e=>(this._set("submitting",!1),this._set("error",null),s.mode="view",e))).catch((e=>{throw this._set("submitting",!1),this._set("error",new t("attachments:add-attachment",this.messages.addErrorMessage,e)),e}))}deleteAttachment(e){const{viewModel:s}=this;return this._set("submitting",!0),this._set("error",null),s.deleteAttachment(e).then((e=>(this._set("submitting",!1),this._set("error",null),s.mode="view",e))).catch((e=>{throw this._set("submitting",!1),this._set("error",new t("attachments:delete-attachment",this.messages.deleteErrorMessage,e)),e}))}updateAttachment(){const{viewModel:e}=this,{_updateAttachmentForm:s}=this;return this._set("submitting",!0),this._set("error",null),e.updateAttachment(s).then((t=>(this._set("submitting",!1),this._set("error",null),e.mode="view",t))).catch((e=>{throw this._set("submitting",!1),this._set("error",new t("attachments:update-attachment",this.messages.updateErrorMessage,e)),e}))}addFile(){const e=this.viewModel.addFile(this.selectedFile,this._addAttachmentForm);return this.viewModel.mode="view",e}updateFile(){const{viewModel:e}=this,t=e.updateFile(this.selectedFile,this._updateAttachmentForm,e.activeFileInfo);return e.mode="view",t}deleteFile(e){const t=this.viewModel.deleteFile(e||this.viewModel.activeFileInfo?.file);return this.viewModel.mode="view",t}render(){const{submitting:e,viewModel:t}=this,{state:s}=t;return _("div",{class:this.classes(A.base,A.esriWidget)},e?this.renderProgressBar():null,"loading"===s?this.renderLoading():this.renderAttachments(),this.renderErrorMessage())}renderErrorMessage(){const{error:e,visibleElements:t}=this;return e&&t.errorMessage?_("div",{key:"error-message",class:A.errorMessage},e.message):null}renderAttachments(){const{activeFileInfo:e,mode:t,activeAttachmentInfo:s}=this.viewModel;return"add"===t?this.renderAddForm():"edit"===t?this.renderDetailsForm(s||e):this.renderAttachmentContainer()}renderLoading(){return _("div",{class:A.loaderContainer,key:"loader"},_("div",{class:A.loader}))}renderProgressBar(){return this.visibleElements.progressBar?_("div",{class:A.progressBar,key:"progress-bar"}):null}renderAddForm(){const{submitting:e,selectedFile:t}=this,s=e||!t,i=this.visibleElements.cancelAddButton?_("button",{type:"button",bind:this,disabled:e,onclick:this._cancelForm,class:this.classes(A.esriButton,A.esriButtonTertiary,A.esriButtonSmall,A.esriButtonHalf,e&&A.buttonDisabled)},this.messages.cancel):null,a=this.visibleElements.addSubmitButton?_("button",{type:"submit",disabled:s,class:this.classes(A.esriButton,A.esriButtonSecondary,A.esriButtonSmall,A.esriButtonHalf,{[A.buttonDisabled]:s})},this.messages.add):null,n=t?_("span",{key:"file-name",class:A.fileName},t.name):null,r=_("form",{bind:this,afterCreate:p,afterRemoved:g,"data-node-ref":"_addAttachmentForm",onsubmit:this._submitAddAttachment},_("fieldset",{class:A.fileFieldset},n,_("label",{class:this.classes(A.fileLabel,A.esriButton,A.esriButtonSecondary)},t?this.messages.changeFile:this.messages.selectFile,_("input",{class:A.fileInput,type:"file",name:"attachment",bind:this,onchange:this._handleFileInputChange}))),a,i);return _("div",{key:"add-form-container",class:A.formNode},r)}renderDetailsForm(e){const{visibleElements:t,viewModel:s,selectedFile:i,submitting:a}=this,{capabilities:r}=s,l=a||!i;let o,d,c,m;i?(o=i.type,d=i.name,c=i.size):e&&"file"in e?(o=e.file.type,d=e.file.name,c=e.file.size):e&&"contentType"in e&&(o=e.contentType,d=e.name,c=e.size,m=e.url);const h=r.editing&&r.operations?.delete&&t.deleteButton?_("button",{key:"delete-button",type:"button",disabled:a,bind:this,onclick:t=>this._submitDeleteAttachment(t,e),class:this.classes(A.esriButton,A.esriButtonSmall,A.esriButtonTertiary,A.deleteButton,{[A.buttonDisabled]:a})},this.messages.delete):void 0,u=r.editing&&r.operations?.update&&t.updateButton?_("button",{disabled:l,key:"update-button",type:"submit",class:this.classes(A.esriButton,A.esriButtonSmall,A.esriButtonThird,{[A.buttonDisabled]:l})},this.messages.update):void 0,b=this.visibleElements.cancelUpdateButton?_("button",{disabled:a,key:"cancel-button",type:"button",bind:this,onclick:this._cancelForm,class:this.classes(A.esriButton,A.esriButtonSmall,A.esriButtonTertiary,A.esriButtonThird,{[A.buttonDisabled]:a})},this.messages.cancel):void 0,f=r.editing&&r.operations?.update?_("fieldset",{key:"file",class:A.fileFieldset},_("span",{key:"file-name",class:A.fileName},d),_("label",{class:this.classes(A.fileLabel,A.esriButton,A.esriButtonSecondary)},this.messages.changeFile,_("input",{class:A.fileInput,type:"file",name:"attachment",bind:this,onchange:this._handleFileInputChange}))):void 0,v=_("fieldset",{key:"size",class:A.metadataFieldset},_("label",null,n(this.messagesUnits,c??0))),y=_("fieldset",{key:"content-type",class:A.metadataFieldset},_("label",null,o)),w=null!=m?_("a",{class:A.itemLink,href:m,rel:"noreferrer",target:"_blank"},this.renderImageMask(e,400),_("div",{class:A.itemLinkOverlay},_("span",{class:A.itemLinkOverlayIcon},_("calcite-icon",{icon:"launch"})))):this.renderImageMask(e,400),k=_("form",{bind:this,afterCreate:p,afterRemoved:g,"data-node-ref":"_updateAttachmentForm",onsubmit:t=>this._submitUpdateAttachment(t,e)},_("div",{class:A.metadata},v,y),f,_("div",{class:A.actions},h,b,u));return _("div",{key:"edit-form-container",class:A.formNode},w,k)}renderImageMask(e,t){return e?"file"in e?this.renderGenericImageMask(e.file.name,e.file.type):this.renderImageMaskForAttachment(e,t):null}renderGenericImageMask(e,t){const{supportsResizeAttachments:s}=this.viewModel,i=m(t),a={[A.itemImageResizable]:s};return _("div",{key:i,class:this.classes(A.itemMaskIcon,A.itemMask)},_("img",{title:e,alt:e,src:i,class:this.classes(a,A.itemImage)}))}renderImageMaskForAttachment(e,t){const{supportsResizeAttachments:s}=this.viewModel;if(!e)return null;const{contentType:i,name:a,url:n}=e;if(!s||!h(i))return this.renderGenericImageMask(a,i);const r=this._getCSSTransform(e),l=r?{transform:r,"image-orientation":"none"}:{},o=`${n}${n?.includes("?")?"&":"?"}w=${t}`,d={[A.itemImageResizable]:s};return _("div",{key:o,class:this.classes(A.itemMask)},_("img",{styles:l,alt:a,title:a,src:o,class:this.classes(d,A.itemImage)}))}renderFile(e){const{file:t}=e;return _("li",{class:A.item,key:t},_("button",{key:"details-button",bind:this,class:A.itemButton,title:this.messages.attachmentDetails,"aria-label":this.messages.attachmentDetails,onclick:()=>this._startEditFile(e),type:"button"},this.renderImageMask(e),_("label",{class:A.itemLabel},_("span",{class:A.itemFilename},t.name||this.messages.noTitle),_("span",{"aria-hidden":"true",class:this.classes(A.itemChevronIcon,b(this.container)?A.iconLeft:A.iconRight)}))))}renderAttachmentInfo({attachmentInfo:e,displayType:t}){const{viewModel:s,effectiveDisplayType:i}=this,{capabilities:a,supportsResizeAttachments:n}=s,{contentType:r,name:l,url:o}=e,d=this.renderImageMask(e,"list"===t?48:400),c=a.editing?_("span",{"aria-hidden":"true",class:this.classes(A.itemChevronIcon,b(this.container)?A.iconLeft:A.iconRight)}):null,m=[d,"preview"===i&&n&&h(r)?null:_("label",{class:A.itemLabel},_("span",{class:A.itemFilename},l||this.messages.noTitle),c)],u=a.editing?_("button",{key:"details-button",bind:this,class:A.itemButton,title:this.messages.attachmentDetails,"aria-label":this.messages.attachmentDetails,"data-attachment-info-id":e.id,onclick:()=>this._startEditAttachment(e),type:"button"},m):_("a",{key:"details-link",class:A.itemButton,href:o??void 0,target:"_blank"},m);return _("li",{class:A.item,key:e},u)}renderAttachmentContainer(){const{effectiveDisplayType:e,viewModel:t,visibleElements:s}=this,{attachmentInfos:i,capabilities:a,fileInfos:n}=t,r=!!i?.length,l=!!n?.length,o={[A.containerList]:"preview"!==e,[A.containerPreview]:"preview"===e},d=a.editing&&a.operations?.add&&s.addButton?_("button",{bind:this,onclick:()=>this._startAddAttachment(),class:this.classes(A.esriButton,A.esriButtonTertiary,A.addAttachmentButton),type:"button"},_("span",{"aria-hidden":"true",class:this.classes(A.itemAddIcon,A.iconPlus)}),this.messages.add):void 0,c=r?_("ul",{key:"attachments-list",class:A.items},i.toArray().map((t=>this.renderAttachmentInfo({attachmentInfo:t,displayType:e})))):void 0,m=l?_("ul",{key:"file-list",class:A.items},n.toArray().map((e=>this.renderFile(e)))):void 0,h=l||r?void 0:_("div",{class:A.empty},this.messages.noAttachments);return _("div",{key:"attachments-container",class:this.classes(A.container,o)},c,m,h,d)}_modeChanged(){this._set("error",null),this._set("selectedFile",null)}_handleFileInputChange(e){const t=e.target,s=t&&t.files&&t.files.item(0);this._set("selectedFile",s)}_submitDeleteAttachment(e,t){e.preventDefault(),t&&("file"in t?this.deleteFile(t.file):t&&this.deleteAttachment(t))}_submitAddAttachment(e){e.preventDefault(),this.viewModel.filesEnabled?this.addFile():this.addAttachment()}_submitUpdateAttachment(e,t){e.preventDefault(),t&&"file"in t?this.updateFile():this.updateAttachment()}_startEditAttachment(e){const{viewModel:t}=this;t.activeFileInfo=null,t.activeAttachmentInfo=e,t.mode="edit"}_startEditFile(e){const{viewModel:t}=this;t.activeAttachmentInfo=null,t.activeFileInfo=e,t.mode="edit"}_startAddAttachment(){this.viewModel.mode="add"}_cancelForm(e){e.preventDefault(),this.viewModel.mode="view"}_getCSSTransform(e){const{orientationInfo:t}=e;return!this._supportsImageOrientation&&t?[t.rotation?`rotate(${t.rotation}deg)`:"",t.mirrored?"scaleX(-1)":""].join(" "):""}};e([r()],F.prototype,"capabilities",null),e([r()],F.prototype,"displayType",void 0),e([r({readOnly:!0})],F.prototype,"effectiveDisplayType",null),e([r()],F.prototype,"graphic",null),e([r()],F.prototype,"label",null),e([r(),f("esri/widgets/Attachments/t9n/Attachments")],F.prototype,"messages",void 0),e([r(),f("esri/core/t9n/Units")],F.prototype,"messagesUnits",void 0),e([r({readOnly:!0})],F.prototype,"selectedFile",void 0),e([r({readOnly:!0})],F.prototype,"submitting",void 0),e([r({readOnly:!0})],F.prototype,"error",void 0),e([r({type:c})],F.prototype,"viewModel",void 0),e([r()],F.prototype,"visibleElements",void 0),e([l("visibleElements")],F.prototype,"castVisibleElements",null),F=e([o("esri.widgets.Attachments")],F);const B=F;export{B as default};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.27/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as e}from"../../chunks/tslib.es6.js";import{remove as t}from"../../core/arrayUtils.js";import{makeHandle as a,handlesGroup as i}from"../../core/handleUtils.js";import{removeMaybe as r,destroyMaybe as n}from"../../core/maybe.js";import{throwIfAborted as o}from"../../core/promiseUtils.js";import{whenOnce as s,watch as c,syncAndInitial as l}from"../../core/reactiveUtils.js";import{generateBracedUUID as d}from"../../core/uuid.js";import{property as u}from"../../core/accessorSupport/decorators/property.js";import"../../core/accessorSupport/ensureType.js";import"../../core/has.js";import{subclass as h}from"../../core/accessorSupport/decorators/subclass.js";import{getEffectiveLayerCapabilities as p,getEffectiveEditingEnabled as f,isTable as m}from"../../layers/support/layerUtils.js";import{getDrawHelpMessage as g}from"../../views/draw/support/helpMessageUtils.js";import w from"../../views/interactive/snapping/FeatureSnappingLayerSource.js";import{CreateFeaturesWorkflowData as y}from"./CreateFeaturesWorkflowData.js";import{isModelUpload as v,waitForModelUpload as _}from"./modelUploadUtils.js";import F from"./Workflow.js";import{shouldShowAttachmentsForCreateWorkflow as b,startCreatingNewFeature as I,findLayerInfo as M,updateGraphicSymbolWhenRequired as A,isTerminalUpdateEventType as k,getVisualVariableAttributes as C,startUpdatingFeature as V,createWorkflowSteps as S,avoidFeatureTemplateSelectionWithOnlyOneItem as j,showProgressCursor as E,visualVariableInteractiveUpdate as U,prepareAttachmentsForCreateWorkflow as G}from"./workflowUtils.js";var H;const O=Symbol();let D=H=class extends F{constructor(e){super(e),this.type="create-features",this.createFeatureState="create-new",this._featureFormHandle=null,this._visualVariableAttributes={rotation:null,size:null},this._attachmentFileInfos=new Map,this._highlightHandles=new Map,this._preventDefaultActionOnCancel=!1,this._lastActiveGraphics=[]}get hasPendingEdits(){if(this.numPendingFeatures)return!0;const{data:e}=this,{upload:t}=e;return!(!t||t.error)||!!e.creationInfo?.geometryToPlace}get helpMessage(){const{creationInfo:e,viewModel:t}=this.data;if("creating-features"!==this.stepId||!e)return;const a=e.layer.geometryType,i=t.sketchViewModel.createGraphic?.geometry;return g(a,i,t.view)}get numPendingFeatures(){return this.pendingFeatures.length}get pendingFeatures(){return this.data.pendingFeatures}get keyboardCancellationEnabled(){return 0===this.numPendingFeatures}get reliesOnOwnerAdminPrivileges(){const{creationInfo:e}=this.data;if(!e)return!1;const{layer:t}=e,a=t.capabilities?.operations.supportsAdd,i=p(t)?.operations.supportsAdd;return f(t)&&!t.editingEnabled||!!i&&!a}get shouldShowAttachments(){return!!(this.data&&this.data.creationInfo&&this.data.viewModel)&&b(this.data)}get shouldAllowAttachmentEditing(){return this.shouldShowAttachments}get updating(){return this.updatingHandles.updating}get test(){return{addAttachment:(e,t)=>{this._attachmentFileInfos.set(e,t)}}}async enter(){}exit(){}async updatePendingFeature(e,a){return this._preventDefaultActionOnCancel=!0,this.data.viewModel.sketchViewModel.cancel(),t(this._lastActiveGraphics,e),this._startUpdating(e,a)}static create(e){const{addAttachmentsCallback:t,applyEditsCallback:a,creationInfo:i,startAt:r,viewModel:n}=e,o=new H({data:new y({creationInfo:i,viewModel:n}),onCommit:async e=>{const{creationInfo:i}=e;if(!i)return;i.geometryToPlace&&(e.creationInfo=null);const r=e.pendingFeatures.toArray(),{layer:n}=i,s=n.capabilities?.editing.supportsGlobalId&&"globalIdField"in n,c=o._attachmentFileInfos;if(s){const e=x(r,n,c);return void await a(n,e,{globalIdUsed:!0})}const l=await a(n,{addFeatures:r});if(c.size>0){const e=l?.addFeatureResults??[];await t(n,T(r,e,n,c))}}});return o._set("steps",this._createWorkflowSteps(o,r)),o}_fadeExistingFeatures(e){if("effect"in e){const t=e.effect;return e.effect="saturate(0.6) opacity(0.8)",a((()=>e.effect=t))}const t=e.opacity;return e.opacity=.7,a((()=>e.opacity=t))}_highlight(e){const t=this.data.viewModel.view;"3d"===t?.type&&this._highlightHandles.set(e,t.highlight(e))}_removeHighlight(e){r(this._highlightHandles.get(e)),this._highlightHandles.delete(e)}async _startCreating(e){const{data:t}=this,{creationInfo:a}=t;if(a)return this.createFeatureState="create-new",I(t.viewModel.sketchViewModel,a,e)}async _startUpdating(e,t){const{pendingFeatures:a}=this;a.includes(e)||a.add(e);const{creationInfo:n,viewModel:o}=this.data,{featureFormViewModel:s,layerInfos:c,sketchViewModel:l,view:d}=o;if(!d||!n)return;const u=n.layer,h=M(c,u),p=h?.formTemplate,f=d.spatialReference;return s.set({arcadeEditType:"INSERT",feature:e,formTemplate:p,spatialReference:f,map:d.map}),this._removeHighlight(e),await A(e,t),r(this._featureFormHandle),this._featureFormHandle=i([s.on("value-change",(async()=>{e.attributes=s.getValues(),await A(e,t)})),l.on(["update","undo","redo"],(e=>{("undo"===e.type||"redo"===e.type||"update"===e.type&&null!=e.toolEventInfo&&k(e.toolEventInfo.type))&&s.notifyFeatureGeometryChanged()}))]),this.createFeatureState="update-pending",this._visualVariableAttributes=C(e),m(u)?void 0:V({graphic:e,sketchViewModel:l,sourceLayer:u,visualVariables:this._visualVariableAttributes,webStyleCache:t})}static _createWorkflowSteps(e,t="awaiting-feature-creation-info"){const{data:a,handles:i}=e,n=S(["awaiting-feature-creation-info","creating-features","adding-attachment","editing-attachment"],t,{"awaiting-feature-creation-info":()=>({id:"awaiting-feature-creation-info",async setUp(t){const{creationInfo:r,viewModel:n}=a,{view:s}=n;if(s)if(v(r)){const r=await _({view:s,data:a,signal:t,next:()=>e.next(),cancel:()=>n.cancelWorkflow()});o(t),i.add(r,this.id)}else a.creationInfo=null,i.add(n.featureTemplatesViewModel.on("select",(({item:e})=>{e&&(a.creationInfo=e,n.activeWorkflow?.next())})),this.id)},async tearDown(){i.remove(this.id)}}),"creating-features":()=>({id:"creating-features",async setUp(){if(i.has(this.id))return;const{viewModel:t}=a,{view:n}=t;if(!n)return;const o=new Map,s=[],l=[];e._lastActiveGraphics=[],e._featureFormHandle=r(e._featureFormHandle),e._visualVariableAttributes={rotation:null,size:null},G(t.attachmentsViewModel),s.push(c((()=>t.attachmentsViewModel.mode),(t=>{switch(t){case"add":e.go("adding-attachment");break;case"edit":e.go("editing-attachment")}})));const d=E(n);s.push(d);const u=m(e.data.creationInfo?.layer);try{if(!u){const t=H._configureSketchViewModel(e,o);s.push(t.beforeCommit),l.push(t.afterCommit)}const i=a.creationInfo?.initialFeature;i?(u||t.sketchViewModel.layer.add(i),await e._startUpdating(i,o)):await e._startCreating(o)}finally{d.remove()}s.push(e._featureFormHandle),i.add(s,e._handleKeys.beforeCommit),i.add([...s,...l],this.id)},async tearDown(t){const{viewModel:r}=a;if(t.canceled){const{pendingFeatures:t}=e;t.drain((e=>r.sketchViewModel.layer.remove(e))),i.remove([this.id,O]),r.attachmentsViewModel.fileInfos.removeAll(),e._attachmentFileInfos.clear()}}}),"adding-attachment":()=>({id:"adding-attachment",parent:"creating-features",async setUp(){},async tearDown(){const{attachmentsViewModel:t}=a.viewModel,{graphic:i,fileInfos:r}=t;e._attachmentFileInfos.set(i,r.toArray()),t.mode="view"}}),"editing-attachment":()=>({id:"editing-attachment",parent:"creating-features",async setUp(){},async tearDown(){const{attachmentsViewModel:t}=a.viewModel,{graphic:i,fileInfos:r}=t;e._attachmentFileInfos.set(i,r.toArray()),t.mode="view"}})});return j(a,n)}static _configureSketchViewModel(e,r){const{data:n,handles:o}=e,{viewModel:c}=n,{view:l}=c,d=c.sketchViewModel;let u=null;const h=[];if(!l)return{beforeCommit:a(),afterCommit:a()};const p=d.updateOnGraphicClick;return d.updateOnGraphicClick=!1,"2d"===l.type&&n.creationInfo&&h.push(e._fadeExistingFeatures(n.creationInfo.layer)),h.push(d.on("create",(async t=>{if("cancel"===t.state){if(e._preventDefaultActionOnCancel)return void(e._preventDefaultActionOnCancel=!1);if(e._lastActiveGraphics.length<1)return e._startCreating(r);const t=e._lastActiveGraphics.pop();return e._startUpdating(t,r)}if("complete"===t.state&&t.graphic)return e._startUpdating(t.graphic,r)})),d.on("update",(async t=>{const{viewModel:a}=n,{attachmentsViewModel:i,featureFormViewModel:c}=a,d=t.graphics[0];if("complete"===t.state){if(d!==u&&(e._lastActiveGraphics.push(d),e._highlight(d)),u=null,e.numPendingFeatures===n.creationInfo?.maxFeatures){const t=e._lastActiveGraphics.pop();return e._startUpdating(t,r)}if("add"!==i.mode&&"edit"!==i.mode||a.activeWorkflow?.previous(),t.aborted&&e._preventDefaultActionOnCancel)return void(e._preventDefaultActionOnCancel=!1);o.add([E(l),l.on("click",(e=>e.preventDefault()))],O),await s((()=>!c.updating)),o.remove(O),e._startCreating(r)}if("start"===t.state){e._removeHighlight(d),"add"!==i.mode&&"edit"!==i.mode||a.activeWorkflow?.previous(),i.fileInfos.removeAll(),i.graphic=d,i.mode="view";(e._attachmentFileInfos.get(d)||[]).forEach((({file:e,form:t})=>i.addFile(e,t)))}const h=e._visualVariableAttributes;await U(l,d,t,h,r);const p=d.attributes,{rotation:f,size:m}=h;if(null!=f){const{field:e}=f;c.setValue(e,p[e])}if(null!=m){const{field:e}=m;c.setValue(e,p[e])}})),d.on("delete",(async a=>{const i=a.graphics[0];e.pendingFeatures.remove(i),t(e._lastActiveGraphics,i),u=i})),l.on("immediate-click",(async t=>{if(v(n.creationInfo))return;const{results:a}=await l.hitTest(t,{include:d.layer}),i=a.find((e=>"graphic"===e.type));if(!i)return;const o=i.graphic;if("transform"===d.activeTool||"reshape"===d.activeTool){if(d.updateGraphics.at(0)===o)return;await e.updatePendingFeature(o,r)}})),a((()=>d.cancel())),P(d,n)),{beforeCommit:i(h),afterCommit:a((()=>{d.updateOnGraphicClick=p}))}}};function P(e,t){let r=null;const o=()=>e.snappingOptions.featureSources,s=()=>(r=new w({layer:e.layer}),o().add(r),r),d=()=>{null!=r&&(o().remove(r),r=n(r))};return i([c((()=>{const e=t.creationInfo?.layer,a=o().find((t=>t.layer===e));return{hasFeatureLayerSource:!!a,enabled:a?.enabled??!1}}),(({hasFeatureLayerSource:e,enabled:t})=>{if(!e)return d();r??=s(),r.enabled=t}),l),a(d)])}function T(e,t,a,i){const r=[];return t.forEach(((t,n)=>{if(!t.error){const o=e[n],s=i.get(o)||[];o.attributes[a.objectIdField]=t.objectId,s.forEach((({form:e})=>r.push({feature:o,attachment:e})))}})),r}function x(e,t,a){const i=[],r=t.globalIdField;return e.forEach(((t,n)=>{e[n].attributes[r]??=d(),(a?.get(t)||[]).forEach((({file:e})=>i.push({feature:t,attachment:{globalId:d(),data:e}})))})),i.length?{addFeatures:e,addAttachments:i}:{addFeatures:e}}e([u()],D.prototype,"hasPendingEdits",null),e([u()],D.prototype,"helpMessage",null),e([u()],D.prototype,"keyboardCancellationEnabled",null),e([u()],D.prototype,"reliesOnOwnerAdminPrivileges",null),e([u()],D.prototype,"shouldShowAttachments",null),e([u()],D.prototype,"shouldAllowAttachmentEditing",null),e([u()],D.prototype,"updating",null),D=H=e([h("esri.widgets.Editor.CreateFeaturesWorkflow")],D);const W=D;export{W as default};
|
|
5
|
+
import{_ as e}from"../../chunks/tslib.es6.js";import{remove as t}from"../../core/arrayUtils.js";import{makeHandle as a,handlesGroup as i}from"../../core/handleUtils.js";import{removeMaybe as r,destroyMaybe as n}from"../../core/maybe.js";import{throwIfAborted as o}from"../../core/promiseUtils.js";import{whenOnce as s,watch as l,syncAndInitial as c}from"../../core/reactiveUtils.js";import{generateBracedUUID as d}from"../../core/uuid.js";import{property as u}from"../../core/accessorSupport/decorators/property.js";import"../../core/accessorSupport/ensureType.js";import"../../core/has.js";import{subclass as h}from"../../core/accessorSupport/decorators/subclass.js";import{getEffectiveLayerCapabilities as p,getEffectiveEditingEnabled as f,isTable as m}from"../../layers/support/layerUtils.js";import{getDrawHelpMessage as g}from"../../views/draw/support/helpMessageUtils.js";import w from"../../views/interactive/snapping/FeatureSnappingLayerSource.js";import{CreateFeaturesWorkflowData as v}from"./CreateFeaturesWorkflowData.js";import{isModelUpload as y,waitForModelUpload as _}from"./modelUploadUtils.js";import b from"./Workflow.js";import{shouldShowAttachmentsForCreateWorkflow as F,startCreatingNewFeature as I,findLayerInfo as M,updateGraphicSymbolWhenRequired as A,isTerminalUpdateEventType as k,getVisualVariableAttributes as C,startUpdatingFeature as V,createWorkflowSteps as S,avoidFeatureTemplateSelectionWithOnlyOneItem as j,showProgressCursor as E,visualVariableInteractiveUpdate as U,prepareAttachmentsForCreateWorkflow as H}from"./workflowUtils.js";var G;const O=Symbol(),D=Symbol();let P=G=class extends b{constructor(e){super(e),this.type="create-features",this.createFeatureState="create-new",this._featureFormHandle=null,this._visualVariableAttributes={rotation:null,size:null},this._attachmentFileInfos=new Map,this._highlightHandles=new Map,this._preventDefaultActionOnCancel=!1,this._lastActiveGraphics=[]}get hasPendingEdits(){if(this.numPendingFeatures)return!0;const{data:e}=this,{upload:t}=e;return!(!t||t.error)||!!e.creationInfo?.geometryToPlace}get helpMessage(){const{creationInfo:e,viewModel:t}=this.data;if("creating-features"!==this.stepId||!e)return;const a=e.layer.geometryType,i=t.sketchViewModel.createGraphic?.geometry;return g(a,i,t.view)}get numPendingFeatures(){return this.pendingFeatures.length}get pendingFeatures(){return this.data.pendingFeatures}get keyboardCancellationEnabled(){return 0===this.numPendingFeatures}get reliesOnOwnerAdminPrivileges(){const{creationInfo:e}=this.data;if(!e)return!1;const{layer:t}=e,a=t.capabilities?.operations.supportsAdd,i=p(t)?.operations.supportsAdd;return f(t)&&!t.editingEnabled||!!i&&!a}get shouldShowAttachments(){return!!(this.data&&this.data.creationInfo&&this.data.viewModel)&&F(this.data)}get shouldAllowAttachmentEditing(){return this.shouldShowAttachments}get updating(){return this.updatingHandles.updating}get test(){return{addAttachment:(e,t)=>{this._attachmentFileInfos.set(e,t)}}}async enter(){const{featureFormViewModel:e}=this.data.viewModel,t=e.relatedRecordCallbacks;e.relatedRecordCallbacks=null,this.addHandles(a((()=>{e.relatedRecordCallbacks=t})),D)}exit(){this.removeHandles(D)}async updatePendingFeature(e,a){return this._preventDefaultActionOnCancel=!0,this.data.viewModel.sketchViewModel.cancel(),t(this._lastActiveGraphics,e),this._startUpdating(e,a)}static create(e){const{addAttachmentsCallback:t,applyEditsCallback:a,creationInfo:i,startAt:r,viewModel:n}=e,o=new G({data:new v({creationInfo:i,viewModel:n}),onCommit:async e=>{const{creationInfo:i}=e;if(!i)return;i.geometryToPlace&&(e.creationInfo=null);const r=e.pendingFeatures.toArray(),{layer:n}=i,s=n.capabilities?.editing.supportsGlobalId&&"globalIdField"in n,l=o._attachmentFileInfos;if(s){const e=W(r,n,l);return void await a(n,e,{globalIdUsed:!0})}const c=await a(n,{addFeatures:r});if(l.size>0){const e=c?.addFeatureResults??[];await t(n,x(r,e,n,l))}}});return o._set("steps",this._createWorkflowSteps(o,r)),o}_fadeExistingFeatures(e){if("effect"in e){const t=e.effect;return e.effect="saturate(0.6) opacity(0.8)",a((()=>e.effect=t))}const t=e.opacity;return e.opacity=.7,a((()=>e.opacity=t))}_highlight(e){const t=this.data.viewModel.view;"3d"===t?.type&&this._highlightHandles.set(e,t.highlight(e))}_removeHighlight(e){r(this._highlightHandles.get(e)),this._highlightHandles.delete(e)}async _startCreating(e){const{data:t}=this,{creationInfo:a}=t;if(a)return this.createFeatureState="create-new",I(t.viewModel.sketchViewModel,a,e)}async _startUpdating(e,t){const{pendingFeatures:a}=this;a.includes(e)||a.add(e);const{creationInfo:n,viewModel:o}=this.data,{featureFormViewModel:s,layerInfos:l,sketchViewModel:c,view:d}=o;if(!d||!n)return;const u=n.layer,h=M(l,u),p=h?.formTemplate,f=d.spatialReference;return s.set({arcadeEditType:"INSERT",feature:e,formTemplate:p,spatialReference:f,map:d.map}),this._removeHighlight(e),await A(e,t),r(this._featureFormHandle),this._featureFormHandle=i([s.on("value-change",(async()=>{e.attributes=s.getValues(),await A(e,t)})),c.on(["update","undo","redo"],(e=>{("undo"===e.type||"redo"===e.type||"update"===e.type&&null!=e.toolEventInfo&&k(e.toolEventInfo.type))&&s.notifyFeatureGeometryChanged()}))]),this.createFeatureState="update-pending",this._visualVariableAttributes=C(e),m(u)?void 0:V({graphic:e,sketchViewModel:c,sourceLayer:u,visualVariables:this._visualVariableAttributes,webStyleCache:t})}static _createWorkflowSteps(e,t="awaiting-feature-creation-info"){const{data:a,handles:i}=e,n=S(["awaiting-feature-creation-info","creating-features","adding-attachment","editing-attachment"],t,{"awaiting-feature-creation-info":()=>({id:"awaiting-feature-creation-info",async setUp(t){const{creationInfo:r,viewModel:n}=a,{view:s}=n;if(s)if(y(r)){const r=await _({view:s,data:a,signal:t,next:()=>e.next(),cancel:()=>n.cancelWorkflow()});o(t),i.add(r,this.id)}else a.creationInfo=null,i.add(n.featureTemplatesViewModel.on("select",(({item:e})=>{e&&(a.creationInfo=e,n.activeWorkflow?.next())})),this.id)},async tearDown(){i.remove(this.id)}}),"creating-features":()=>({id:"creating-features",async setUp(){if(i.has(this.id))return;const{viewModel:t}=a,{view:n}=t;if(!n)return;const o=new Map,s=[],c=[];e._lastActiveGraphics=[],e._featureFormHandle=r(e._featureFormHandle),e._visualVariableAttributes={rotation:null,size:null},H(t.attachmentsViewModel),s.push(l((()=>t.attachmentsViewModel.mode),(t=>{switch(t){case"add":e.go("adding-attachment");break;case"edit":e.go("editing-attachment")}})));const d=E(n);s.push(d);const u=m(e.data.creationInfo?.layer);try{if(!u){const t=G._configureSketchViewModel(e,o);s.push(t.beforeCommit),c.push(t.afterCommit)}const i=a.creationInfo?.initialFeature;i?(u||t.sketchViewModel.layer.add(i),await e._startUpdating(i,o)):await e._startCreating(o)}finally{d.remove()}s.push(e._featureFormHandle),i.add(s,e._handleKeys.beforeCommit),i.add([...s,...c],this.id)},async tearDown(t){const{viewModel:r}=a;if(t.canceled){const{pendingFeatures:t}=e;t.drain((e=>r.sketchViewModel.layer.remove(e))),i.remove([this.id,O]),r.attachmentsViewModel.fileInfos.removeAll(),e._attachmentFileInfos.clear()}}}),"adding-attachment":()=>({id:"adding-attachment",parent:"creating-features",async setUp(){},async tearDown(){const{attachmentsViewModel:t}=a.viewModel,{graphic:i,fileInfos:r}=t;e._attachmentFileInfos.set(i,r.toArray()),t.mode="view"}}),"editing-attachment":()=>({id:"editing-attachment",parent:"creating-features",async setUp(){},async tearDown(){const{attachmentsViewModel:t}=a.viewModel,{graphic:i,fileInfos:r}=t;e._attachmentFileInfos.set(i,r.toArray()),t.mode="view"}})});return j(a,n)}static _configureSketchViewModel(e,r){const{data:n,handles:o}=e,{viewModel:l}=n,{view:c}=l,d=l.sketchViewModel;let u=null;const h=[];if(!c)return{beforeCommit:a(),afterCommit:a()};const p=d.updateOnGraphicClick;return d.updateOnGraphicClick=!1,"2d"===c.type&&n.creationInfo&&h.push(e._fadeExistingFeatures(n.creationInfo.layer)),h.push(d.on("create",(async t=>{if("cancel"===t.state){if(e._preventDefaultActionOnCancel)return void(e._preventDefaultActionOnCancel=!1);if(e._lastActiveGraphics.length<1)return e._startCreating(r);const t=e._lastActiveGraphics.pop();return e._startUpdating(t,r)}if("complete"===t.state&&t.graphic)return e._startUpdating(t.graphic,r)})),d.on("update",(async t=>{const{viewModel:a}=n,{attachmentsViewModel:i,featureFormViewModel:l}=a,d=t.graphics[0];if("complete"===t.state){if(d!==u&&(e._lastActiveGraphics.push(d),e._highlight(d)),u=null,e.numPendingFeatures===n.creationInfo?.maxFeatures){const t=e._lastActiveGraphics.pop();return e._startUpdating(t,r)}if("add"!==i.mode&&"edit"!==i.mode||a.activeWorkflow?.previous(),t.aborted&&e._preventDefaultActionOnCancel)return void(e._preventDefaultActionOnCancel=!1);o.add([E(c),c.on("click",(e=>e.preventDefault()))],O),await s((()=>!l.updating)),o.remove(O),e._startCreating(r)}if("start"===t.state){e._removeHighlight(d),"add"!==i.mode&&"edit"!==i.mode||a.activeWorkflow?.previous(),i.fileInfos.removeAll(),i.graphic=d,i.mode="view";(e._attachmentFileInfos.get(d)||[]).forEach((({file:e,form:t})=>i.addFile(e,t)))}const h=e._visualVariableAttributes;await U(c,d,t,h,r);const p=d.attributes,{rotation:f,size:m}=h;if(null!=f){const{field:e}=f;l.setValue(e,p[e])}if(null!=m){const{field:e}=m;l.setValue(e,p[e])}})),d.on("delete",(async a=>{const i=a.graphics[0];e.pendingFeatures.remove(i),t(e._lastActiveGraphics,i),u=i})),c.on("immediate-click",(async t=>{if(y(n.creationInfo))return;const{results:a}=await c.hitTest(t,{include:d.layer}),i=a.find((e=>"graphic"===e.type));if(!i)return;const o=i.graphic;if("transform"===d.activeTool||"reshape"===d.activeTool){if(d.updateGraphics.at(0)===o)return;await e.updatePendingFeature(o,r)}})),a((()=>d.cancel())),T(d,n)),{beforeCommit:i(h),afterCommit:a((()=>{d.updateOnGraphicClick=p}))}}};function T(e,t){let r=null;const o=()=>e.snappingOptions.featureSources,s=()=>(r=new w({layer:e.layer}),o().add(r),r),d=()=>{null!=r&&(o().remove(r),r=n(r))};return i([l((()=>{const e=t.creationInfo?.layer,a=o().find((t=>t.layer===e));return{hasFeatureLayerSource:!!a,enabled:a?.enabled??!1}}),(({hasFeatureLayerSource:e,enabled:t})=>{if(!e)return d();r??=s(),r.enabled=t}),c),a(d)])}function x(e,t,a,i){const r=[];return t.forEach(((t,n)=>{if(!t.error){const o=e[n],s=i.get(o)||[];o.attributes[a.objectIdField]=t.objectId,s.forEach((({form:e})=>r.push({feature:o,attachment:e})))}})),r}function W(e,t,a){const i=[],r=t.globalIdField;return e.forEach(((t,n)=>{e[n].attributes[r]??=d(),(a?.get(t)||[]).forEach((({file:e})=>i.push({feature:t,attachment:{globalId:d(),data:e}})))})),i.length?{addFeatures:e,addAttachments:i}:{addFeatures:e}}e([u()],P.prototype,"hasPendingEdits",null),e([u()],P.prototype,"helpMessage",null),e([u()],P.prototype,"keyboardCancellationEnabled",null),e([u()],P.prototype,"reliesOnOwnerAdminPrivileges",null),e([u()],P.prototype,"shouldShowAttachments",null),e([u()],P.prototype,"shouldAllowAttachmentEditing",null),e([u()],P.prototype,"updating",null),P=G=e([h("esri.widgets.Editor.CreateFeaturesWorkflow")],P);const R=P;export{R as default};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.27/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as e}from"../../chunks/tslib.es6.js";import t from"../../Graphic.js";import a from"../../core/Error.js";import{makeHandle as i}from"../../core/handleUtils.js";import o from"../../core/Logger.js";import{abortMaybe as r}from"../../core/maybe.js";import{onAbort as s,createAbortError as n,throwIfAborted as l,debounce as d}from"../../core/promiseUtils.js";import c from"../../core/Queue.js";import{whenOnce as p,watch as u,sync as h}from"../../core/reactiveUtils.js";import{property as w}from"../../core/accessorSupport/decorators/property.js";import"../../core/accessorSupport/ensureType.js";import"../../core/arrayUtils.js";import"../../core/has.js";import{subclass as f}from"../../core/accessorSupport/decorators/subclass.js";import{isEditableLayer as m}from"../../layers/support/editableLayers.js";import{isTable as g}from"../../layers/support/layerUtils.js";import{highlightsSupported as k}from"../../views/support/layerViewUtils.js";import y from"./CreateFeaturesWorkflow.js";import{UpdateFeatureWorkflow as v}from"./UpdateFeatureWorkflow.js";import{UpdateRecordWorkflow as b}from"./UpdateRecordWorkflow.js";import W from"./UpdateWorkflowData.js";import _ from"./Workflow.js";import{createWorkflowSteps as C,fetchCandidates as S}from"./workflowUtils.js";import{isGraphicForRelatableFeatureSupportedLayer as F}from"../Feature/support/featureUtils.js";var U;const j="candidate-highlight",A="esri.widgets.Editor.UpdateWorkflow",M=o.getLogger(A);let I=U=class extends _{constructor(e){super(e),this._workflowStack=new c((e=>{let t;for(t of e);return t})),this.type="update"}initialize(){const{featureFormViewModel:e}=this.data.viewModel,t=e.relatedRecordCallbacks;e.relatedRecordCallbacks={addRelatedRecord:e=>this.startCreatingRelatedRecord(e),editRelatedRecord:({relatedFeature:e})=>this.startUpdating(e),showAllRelatedRecords:t=>e.relationshipId=t.relationshipId},this.addHandles(i((()=>e.relatedRecordCallbacks=t)))}get activeEditableItem(){const{activeWorkflow:e}=this;return R(e)?e.data.editableItem:void 0}get activeWorkflow(){return this._workflowStack.last()}get nestedWorkflowCount(){return this._workflowStack.length}get shouldShowAttachments(){return!!this.activeEditableItem?.attachmentsOnUpdateEnabled}get shouldAllowAttachmentEditing(){return!!this.activeEditableItem?.supports.includes("update")}get hasPendingEdits(){return Array.from(this._workflowStack).some((e=>e.hasPendingEdits))}get helpMessage(){return"awaiting-feature-to-update"===this.stepId?"select":void 0}get reliesOnOwnerAdminPrivileges(){return this.activeWorkflow?.reliesOnOwnerAdminPrivileges??!1}get hasInvalidFormTemplate(){return!!this.activeEditableItem?.hasInvalidFormTemplate}get hasUnsupportedFields(){return!!this.activeEditableItem?.hasUnsupportedFields}get updating(){return this.updatingHandles.updating}async back(e=(()=>Promise.resolve(!0))){const{featureFormViewModel:t}=this.data.viewModel;if(null==t.relationshipId)if(this.activeWorkflow){if(this.activeWorkflow.hasPendingEdits){if(!await e())return}this.activeWorkflow.hasPreviousStep?await this.activeWorkflow.previous({cancelCurrentStep:!0}):await this.cancelActiveWorkflow({force:!0})}else this.hasPreviousStep?await this.previous({cancelCurrentStep:!0}):await this.cancel({force:!0});else t.relationshipId=null}async cancelActiveWorkflow(e){await(this.activeWorkflow?.cancel(e)),await this._popWorkflow()}async commit(){await this._drainWorkflowStack((e=>e.commit())),await super.commit()}static create(e,t,a){const i=new U({data:new W({applyEditsCallback:a,viewModel:e}),onCommit:async()=>{}});return i._set("steps",this._createWorkflowSteps(i,t)),i}async save(){this.nestedWorkflowCount>1?(await(this.activeWorkflow?.commit()),await this._popWorkflow()):await this.commit()}async startCreatingRelatedRecord(e){try{const t=await this._createNestedCreateFeaturesWorkflow(e);await this._pushWorkflow(t)}catch(t){throw new a("editor:unable-to-start-creating","Could not begin updating the provided feature or table record.",{error:t})}}async startUpdating(e){try{const t=await this._createNestedUpdateWorkflow(e);await this._pushWorkflow(t)}catch(t){throw new a("editor:unable-to-start-updating","Could not begin updating the provided feature or table record.",{error:t})}}async deleteActiveFeature(){const{activeWorkflow:e}=this;if(!e)throw new a("editor:nothing-to-delete","There is no feature to delete");R(e)?await e.deleteAndCommit():await e.cancel(),1===this.nestedWorkflowCount?await this.reset():await this._popWorkflow()}async cancelAll(){await this._drainWorkflowStack((e=>e.cancel({force:!0})))}async _createNestedCreateFeaturesWorkflow(e){const{relatedLayer:i}=e,{addAttachmentsCallback:o,applyEditsCallback:r,viewModel:s}=this.data;if(!m(i))throw new a("editor:unsupported-layer","Editing is not supported on the provided layer");const n=new t({sourceLayer:i,attributes:this._makeRelatedRecordAttributes(e)});return y.create({addAttachmentsCallback:o,applyEditsCallback:r,creationInfo:{layer:i,initialFeature:n,maxFeatures:1},startAt:"creating-features",viewModel:s})}async _createNestedUpdateWorkflow(e){const t=g(e.sourceLayer)?b:v,{applyEditsCallback:a,viewModel:i}=this.data,o=await t.create({feature:e,viewModel:i,applyEdits:a});return await p((()=>!o.updating)),o}async _drainWorkflowStack(e){const t=this._workflowStack,a=[];for(;t.length>0;){const i=t.pop(),o=e(i).then((()=>i.destroy()));this.updatingHandles.addPromise(o),a.push(o)}await Promise.all(a)}_highlight(e){this._removeHighlight();const t=this.data.viewModel.view;if(!t||!e)return;const a=e&&t.allLayerViews.items.find((({layer:t})=>t===e.layer||"subtype-sublayer"===e.layer?.type&&e.layer?.parent===t));k(a)&&this.handles.add(a.highlight(e),j)}_makeRelatedRecordAttributes(e){const{parentFeature:t,relatedLayer:a,relationshipId:i}=e;if(!F(t))return;const o=a.relationships?.find((e=>e.id===i));if(!o)return void E("relationship-not-found","Could not begin creating a related record because the relationship specified could not be found on the destination layer.");if("origin"===o.role)return void E("unsupported-role","Creating new related records in the 'origin' table of a relationship is not yet supported");const r=t.sourceLayer;o.relatedTableId!==r.layerId&&E("invalid-argument-combination","The given parent feature does not belong to the relationship designated by the given relationship ID.");const s=r.relationships?.find((e=>e.id===i));if(!s)return void E("relationship-not-found","Could not begin creating a related record because the relationship specified could not be found on the origin layer.");const n=t.getAttribute(s.keyField);return n||E("no-key-on-origin-feature","The given parent feature does not have a value for the relationship's origin primary key field."),{[o.keyField]:n}}async _popWorkflow(){this._workflowStack.pop()?.destroy();const e=await this._reconcileWorkflowStack();if(e.failureCount>0)throw new a("editor:next-workflow-failed","Popped the top workflow, but the next workflow in the stack failed to activate",e)}async _pushWorkflow(e){const t=this._workflowRequiresSketchViewModel(e);this.activeWorkflow?.exit({removeSketchHandles:t}),await e.start(),this._workflowStack.push(e);const i=await this._reconcileWorkflowStack();if(i.failureCount>0)throw new a("editor:failed-to-start-updating-feature","Failed to enter the provided workflow.",i)}async _reconcileWorkflowStack(){const e=this._workflowStack;try{const t=e.peek();return await(t?.enter()),{activeWorkflow:t,failureCount:0}}catch(t){e.pop().destroy();const{activeWorkflow:a,failureCount:i}=await this._reconcileWorkflowStack();return{activeWorkflow:a,failureCount:i+1}}}_removeHighlight(){this.handles.remove(j)}_workflowRequiresSketchViewModel(e){const{type:t}=e;return"update-features"===t||"create-features"===t&&!g(e.data.creationInfo?.layer)}static _createWorkflowSteps(e,t="awaiting-feature-to-update"){const{data:o,handles:c}=e;return C(["awaiting-feature-to-update","awaiting-update-feature-candidate","editing-existing-feature","adding-attachment","editing-attachment"],t,{"awaiting-feature-to-update":()=>({id:"awaiting-feature-to-update",async setUp(){const{spinnerViewModel:t}=o.viewModel,a=o.viewModel.view;let d=null;c.add(i((()=>{d=r(d)})),this.id),o.rootFeature=null,o.candidates=[];const p=a.on("immediate-click",(async i=>{t.location=i.mapPoint,t.visible=!0,d?.abort();const{editableItems:r}=o.viewModel;d=new AbortController;const c=await new Promise(((e,t)=>{s(d?.signal,(()=>t(n()))),e(S(r,a,i,d?.signal))}));l(d),o.candidates=c.reduce(((e,t)=>t.error?e:[...e,...t.value]),[]),t.visible=1===o.candidates.length,0!==o.candidates.length&&(1===o.candidates.length?(o.rootFeature=o.candidates[0],e.go("editing-existing-feature").catch((()=>{})).then((()=>t.visible=!1))):e.next())}));a.focus(),c.add(p,this.id)},async tearDown(){c.remove(this.id)}}),"awaiting-update-feature-candidate":()=>({id:"awaiting-update-feature-candidate",async setUp(){o.rootFeature=null,c.add([u((()=>o.rootFeature),(t=>e._highlight(t)),h),i((()=>e._removeHighlight()))],this.id)},async tearDown(){c.remove(this.id)}}),"editing-existing-feature":()=>({id:"editing-existing-feature",async setUp(){const{rootFeature:t,viewModel:i}=e.data;if(!t)throw new a("editor:no-feature-specified","Cannot setup the 'updating-existing-feature' step until the root feature is defined");await e.startUpdating(t),i.spinnerViewModel.visible=!1;const o=d((async()=>{await p((()=>!e.updating)),e.previous()}));c.add(u((()=>e.nestedWorkflowCount),((e,t)=>{0===e&&0!==t&&o()}),h),this.id)},async tearDown(){await e.cancelAll(),c.remove(this.id)}}),"adding-attachment":()=>({id:"adding-attachment",parent:"editing-existing-feature",async setUp(){},async tearDown(){o.viewModel.attachmentsViewModel.mode="view"}}),"editing-attachment":()=>({id:"editing-attachment",parent:"editing-existing-feature",async setUp(){},async tearDown(){o.viewModel.attachmentsViewModel.mode="view"}})})}};e([w()],I.prototype,"activeEditableItem",null),e([w()],I.prototype,"activeWorkflow",null),e([w()],I.prototype,"nestedWorkflowCount",null),e([w()],I.prototype,"shouldShowAttachments",null),e([w()],I.prototype,"shouldAllowAttachmentEditing",null),e([w()],I.prototype,"hasPendingEdits",null),e([w()],I.prototype,"helpMessage",null),e([w()],I.prototype,"reliesOnOwnerAdminPrivileges",null),e([w()],I.prototype,"hasInvalidFormTemplate",null),e([w()],I.prototype,"hasUnsupportedFields",null),e([w()],I.prototype,"updating",null),I=U=e([f(A)],I);const E=(e,t)=>M.warn(`editor:${e}`,t,"The create operation will be allowed to proceed, but the resulting feature may not be related to the given parent feature."),R=e=>!!e&&/update-/.test(e.type),P=I;export{P as default};
|
|
5
|
+
import{_ as e}from"../../chunks/tslib.es6.js";import t from"../../Graphic.js";import a from"../../core/Error.js";import{makeHandle as o}from"../../core/handleUtils.js";import i from"../../core/Logger.js";import{abortMaybe as r}from"../../core/maybe.js";import{onAbort as s,createAbortError as n,throwIfAborted as l,debounce as d}from"../../core/promiseUtils.js";import c from"../../core/Queue.js";import{whenOnce as p,watch as u,sync as h}from"../../core/reactiveUtils.js";import{property as w}from"../../core/accessorSupport/decorators/property.js";import"../../core/accessorSupport/ensureType.js";import"../../core/arrayUtils.js";import"../../core/has.js";import{subclass as f}from"../../core/accessorSupport/decorators/subclass.js";import{isEditableLayer as m}from"../../layers/support/editableLayers.js";import{isTable as g}from"../../layers/support/layerUtils.js";import{highlightsSupported as k}from"../../views/support/layerViewUtils.js";import y from"./CreateFeaturesWorkflow.js";import{UpdateFeatureWorkflow as v}from"./UpdateFeatureWorkflow.js";import{UpdateRecordWorkflow as b}from"./UpdateRecordWorkflow.js";import W from"./UpdateWorkflowData.js";import _ from"./Workflow.js";import{createWorkflowSteps as C,fetchCandidates as S}from"./workflowUtils.js";import{isGraphicForRelatableFeatureSupportedLayer as F}from"../Feature/support/featureUtils.js";var U;const j="candidate-highlight",A="esri.widgets.Editor.UpdateWorkflow",I=i.getLogger(A);let M=U=class extends _{constructor(e){super(e),this._workflowStack=new c((e=>{let t;for(t of e);return t})),this.type="update"}get activeEditableItem(){const{activeWorkflow:e}=this;return R(e)?e.data.editableItem:void 0}get activeWorkflow(){return this._workflowStack.last()}get nestedWorkflowCount(){return this._workflowStack.length}get shouldShowAttachments(){return!!this.activeEditableItem?.attachmentsOnUpdateEnabled}get shouldAllowAttachmentEditing(){return!!this.activeEditableItem?.supports.includes("update")}get hasPendingEdits(){return Array.from(this._workflowStack).some((e=>e.hasPendingEdits))}get helpMessage(){return"awaiting-feature-to-update"===this.stepId?"select":void 0}get reliesOnOwnerAdminPrivileges(){return this.activeWorkflow?.reliesOnOwnerAdminPrivileges??!1}get hasInvalidFormTemplate(){return!!this.activeEditableItem?.hasInvalidFormTemplate}get hasUnsupportedFields(){return!!this.activeEditableItem?.hasUnsupportedFields}get updating(){return this.updatingHandles.updating}async back(e=(()=>Promise.resolve(!0))){const{featureFormViewModel:t}=this.data.viewModel;if(null==t.relationshipId)if(this.activeWorkflow){if(this.activeWorkflow.hasPendingEdits){if(!await e())return}this.activeWorkflow.hasPreviousStep?await this.activeWorkflow.previous({cancelCurrentStep:!0}):await this.cancelActiveWorkflow({force:!0})}else this.hasPreviousStep?await this.previous({cancelCurrentStep:!0}):await this.cancel({force:!0});else t.relationshipId=null}async cancelActiveWorkflow(e){await(this.activeWorkflow?.cancel(e)),await this._popWorkflow()}async commit(){await this._drainWorkflowStack((e=>e.commit())),await super.commit()}static create(e,t,a){const o=new U({data:new W({applyEditsCallback:a,viewModel:e}),onCommit:async()=>{}});return o._set("steps",this._createWorkflowSteps(o,t)),o}async save(){this.nestedWorkflowCount>1?(await(this.activeWorkflow?.commit()),await this._popWorkflow()):await this.commit()}async startCreatingRelatedRecord(e){try{const t=await this._createNestedCreateFeaturesWorkflow(e);await this._pushWorkflow(t)}catch(t){throw new a("editor:unable-to-start-creating","Could not begin updating the provided feature or table record.",{error:t})}}async startUpdating(e){try{const t=await this._createNestedUpdateWorkflow(e);await this._pushWorkflow(t)}catch(t){throw new a("editor:unable-to-start-updating","Could not begin updating the provided feature or table record.",{error:t})}}async deleteActiveFeature(){const{activeWorkflow:e}=this;if(!e)throw new a("editor:nothing-to-delete","There is no feature to delete");R(e)?await e.deleteAndCommit():await e.cancel(),1===this.nestedWorkflowCount?await this.reset():await this._popWorkflow()}async cancelAll(){await this._drainWorkflowStack((e=>e.cancel({force:!0})))}async _createNestedCreateFeaturesWorkflow(e){const{relatedLayer:o}=e,{addAttachmentsCallback:i,applyEditsCallback:r,viewModel:s}=this.data;if(!m(o))throw new a("editor:unsupported-layer","Editing is not supported on the provided layer");const n=new t({sourceLayer:o,attributes:this._makeRelatedRecordAttributes(e)});return y.create({addAttachmentsCallback:i,applyEditsCallback:r,creationInfo:{layer:o,initialFeature:n,maxFeatures:1},startAt:"creating-features",viewModel:s})}async _createNestedUpdateWorkflow(e){const t=g(e.sourceLayer)?b:v,{applyEditsCallback:a,viewModel:o}=this.data,i=await t.create({feature:e,viewModel:o,applyEdits:a});return await p((()=>!i.updating)),i}async _drainWorkflowStack(e){const t=this._workflowStack,a=[];for(;t.length>0;){const o=t.pop(),i=e(o).then((()=>o.destroy()));this.updatingHandles.addPromise(i),a.push(i)}await Promise.all(a)}_highlight(e){this._removeHighlight();const t=this.data.viewModel.view;if(!t||!e)return;const a=e&&t.allLayerViews.items.find((({layer:t})=>t===e.layer||"subtype-sublayer"===e.layer?.type&&e.layer?.parent===t));k(a)&&this.handles.add(a.highlight(e),j)}_makeRelatedRecordAttributes(e){const{parentFeature:t,relatedLayer:a,relationshipId:o}=e;if(!F(t))return;const i=a.relationships?.find((e=>e.id===o));if(!i)return void E("relationship-not-found","Could not begin creating a related record because the relationship specified could not be found on the destination layer.");if("origin"===i.role)return void E("unsupported-role","Creating new related records in the 'origin' table of a relationship is not yet supported");const r=t.sourceLayer;i.relatedTableId!==r.layerId&&E("invalid-argument-combination","The given parent feature does not belong to the relationship designated by the given relationship ID.");const s=r.relationships?.find((e=>e.id===o));if(!s)return void E("relationship-not-found","Could not begin creating a related record because the relationship specified could not be found on the origin layer.");const n=t.getAttribute(s.keyField);return n||E("no-key-on-origin-feature","The given parent feature does not have a value for the relationship's origin primary key field."),{[i.keyField]:n}}async _popWorkflow(){this._workflowStack.pop()?.destroy();const e=await this._reconcileWorkflowStack();if(e.failureCount>0)throw new a("editor:next-workflow-failed","Popped the top workflow, but the next workflow in the stack failed to activate",e)}async _pushWorkflow(e){const t=this._workflowRequiresSketchViewModel(e);this.activeWorkflow?.exit({removeSketchHandles:t}),await e.start(),this._workflowStack.push(e);const o=await this._reconcileWorkflowStack();if(o.failureCount>0)throw new a("editor:failed-to-start-updating-feature","Failed to enter the provided workflow.",o)}async _reconcileWorkflowStack(){const e=this._workflowStack;try{const t=e.peek();return await(t?.enter()),{activeWorkflow:t,failureCount:0}}catch(t){e.pop().destroy();const{activeWorkflow:a,failureCount:o}=await this._reconcileWorkflowStack();return{activeWorkflow:a,failureCount:o+1}}}_removeHighlight(){this.handles.remove(j)}_workflowRequiresSketchViewModel(e){const{type:t}=e;return"update-features"===t||"create-features"===t&&!g(e.data.creationInfo?.layer)}static _createWorkflowSteps(e,t="awaiting-feature-to-update"){const{data:i,handles:c}=e;return C(["awaiting-feature-to-update","awaiting-update-feature-candidate","editing-existing-feature","adding-attachment","editing-attachment"],t,{"awaiting-feature-to-update":()=>({id:"awaiting-feature-to-update",async setUp(){const{spinnerViewModel:t}=i.viewModel,a=i.viewModel.view;let d=null;c.add(o((()=>{d=r(d)})),this.id),i.rootFeature=null,i.candidates=[];const p=a.on("immediate-click",(async o=>{t.location=o.mapPoint,t.visible=!0,d?.abort();const{editableItems:r}=i.viewModel;d=new AbortController;const c=await new Promise(((e,t)=>{s(d?.signal,(()=>t(n()))),e(S(r,a,o,d?.signal))}));l(d),i.candidates=c.reduce(((e,t)=>t.error?e:[...e,...t.value]),[]),t.visible=1===i.candidates.length,0!==i.candidates.length&&(1===i.candidates.length?(i.rootFeature=i.candidates[0],e.go("editing-existing-feature").catch((()=>{})).then((()=>t.visible=!1))):e.next())}));a.focus(),c.add(p,this.id)},async tearDown(){c.remove(this.id)}}),"awaiting-update-feature-candidate":()=>({id:"awaiting-update-feature-candidate",async setUp(){i.rootFeature=null,c.add([u((()=>i.rootFeature),(t=>e._highlight(t)),h),o((()=>e._removeHighlight()))],this.id)},async tearDown(){c.remove(this.id)}}),"editing-existing-feature":()=>({id:"editing-existing-feature",async setUp(){const{rootFeature:t,viewModel:r}=e.data;if(!t)throw new a("editor:no-feature-specified","Cannot setup the 'updating-existing-feature' step until the root feature is defined");await e.startUpdating(t),r.spinnerViewModel.visible=!1;const s=d((async()=>{await p((()=>!e.updating)),e.previous()})),{featureFormViewModel:n}=i.viewModel,l=n.relatedRecordCallbacks;n.relatedRecordCallbacks={addRelatedRecord:async t=>{await e.startCreatingRelatedRecord(t),n.relationshipId=null},editRelatedRecord:async({relatedFeature:t})=>{await e.startUpdating(t),n.relationshipId=null},showAllRelatedRecords:e=>n.relationshipId=e.relationshipId},c.add([o((()=>n.relatedRecordCallbacks=l)),u((()=>e.nestedWorkflowCount),((e,t)=>{0===e&&0!==t&&s()}),h)],this.id)},async tearDown(){await e.cancelAll(),c.remove(this.id)}}),"adding-attachment":()=>({id:"adding-attachment",parent:"editing-existing-feature",async setUp(){},async tearDown(){i.viewModel.attachmentsViewModel.mode="view"}}),"editing-attachment":()=>({id:"editing-attachment",parent:"editing-existing-feature",async setUp(){},async tearDown(){i.viewModel.attachmentsViewModel.mode="view"}})})}};e([w()],M.prototype,"activeEditableItem",null),e([w()],M.prototype,"activeWorkflow",null),e([w()],M.prototype,"nestedWorkflowCount",null),e([w()],M.prototype,"shouldShowAttachments",null),e([w()],M.prototype,"shouldAllowAttachmentEditing",null),e([w()],M.prototype,"hasPendingEdits",null),e([w()],M.prototype,"helpMessage",null),e([w()],M.prototype,"reliesOnOwnerAdminPrivileges",null),e([w()],M.prototype,"hasInvalidFormTemplate",null),e([w()],M.prototype,"hasUnsupportedFields",null),e([w()],M.prototype,"updating",null),M=U=e([f(A)],M);const E=(e,t)=>I.warn(`editor:${e}`,t,"The create operation will be allowed to proceed, but the resulting feature may not be related to the given parent feature."),R=e=>!!e&&/update-/.test(e.type),P=M;export{P as default};
|