agviewermap-react 0.1.29 → 0.1.30
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.
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { j as e, M as z, u as A, a as H, B as P, T as b, b as U, C as V, c as W, d as O, t as q, S as G, e as J, I as K, f as Q, g as S, h as X } from "./index-
|
|
1
|
+
import { j as e, M as z, u as A, a as H, B as P, T as b, b as U, C as V, c as W, d as O, t as q, S as G, e as J, I as K, f as Q, g as S, h as X } from "./index-DVURNUFU.js";
|
|
2
2
|
import { useState as g, useContext as Y, useCallback as o, useRef as Z, useMemo as N, useEffect as $ } from "react";
|
|
3
3
|
const D = (s) => /* @__PURE__ */ e.jsxs(
|
|
4
4
|
"svg",
|
|
@@ -1159,7 +1159,7 @@ function evaluatePixel(samples) {
|
|
|
1159
1159
|
// Return color values with full opacity
|
|
1160
1160
|
return imgVals.concat([1]); // RGBA: fully opaque
|
|
1161
1161
|
}
|
|
1162
|
-
}`,fx={},px=new Map,W6=50;function o3e(e){const t=Object.keys(e);if(t.length>W6){const n=t.slice(0,t.length-W6);n.forEach(r=>{delete e[r]}),console.log(`Cleaned up ${n.length} cache entries`)}}async function l3e(e,{weeksBefore:t=0,accessToken:n,dateRange:r}){if(console.log("downloading cropped ndvi",r),!n)return console.error("No access token provided"),null;const i=new Date(r.start),a=new Date(r.end);i.setHours(0,0,0,0),a.setHours(23,59,59,999);const o=i.toISOString(),s=a.toISOString(),u=`${e.properties.id}-${o.split("T")[0]}-${s.split("T")[0]}`;if(console.log("crop cacheKey",u),fx[u])return console.log("NDVI data found in cache"),fx[u];if(px.has(u))return console.log("Waiting for existing request to complete for:",u),px.get(u);if(console.log("access Token",n),!Rse(Aa(e)))throw new Error("Invalid BBOX");const g="https://services.sentinel-hub.com/api/v1/process",p={input:{bounds:{geometry:{type:"Polygon",coordinates:e.geometry.coordinates},properties:{crs:"http://www.opengis.net/def/crs/EPSG/0/4326"}},data:[{type:"sentinel-2-l2a",dataFilter:{timeRange:{from:o,to:s}}}]},output:{width:512,height:512,responses:[{identifier:"default",format:{type:"image/png"}}]},evalscript:s3e},y=(async()=>{try{const _=await fetch(g,{method:"POST",headers:{Authorization:`Bearer ${n}`,"Content-Type":"application/json"},body:JSON.stringify(p)});if(!_.ok)throw new Error("Failed to fetch NDVI data");const x=await _.blob();if(!x)return null;const b=URL.createObjectURL(x);return fx[u]=b,o3e(fx),b}catch(_){return console.error("Error fetching NDVI data:",_),null}finally{px.delete(u)}})();return px.set(u,y),y}async function c3e(e,t){return new Promise(n=>{const r=new Image;r.onload=function(){const i=document.createElement("canvas"),a=i.getContext("2d");i.width=r.width,i.height=r.height,a.drawImage(r,0,0,r.width,r.height);const o=t.geometry.coordinates[0].map(([s,u])=>u3e(s,u,Aa(t),r.width,r.height));a.globalCompositeOperation="destination-in",a.beginPath(),o.forEach(([s,u],h)=>{h===0?a.moveTo(s,u):a.lineTo(s,u)}),a.closePath(),a.fill(),n(i.toDataURL("image/png"))},r.src=e})}function u3e(e,t,n,r,i){const[a,o,s,u]=n,h=(e-a)/(s-a)*r,g=i-(t-o)/(u-o)*i;return[h,g]}async function d3e(e,{rasterLayer:t,dateRange:n,accessToken:r,map:i}){if(console.log("getCroppedRaster rasterLayer",t,n),!(n!=null&&n.start)||!(n!=null&&n.end)||!(n.start instanceof Date)||!(n.end instanceof Date)){console.error("DateRange is invalid or not Date objects:",n);return}if(t==="ET"||(t==null?void 0:t.value)==="ET"){const a=await a3e(e,n);if(!a)return null;const o=await c3e(a,e);return console.log("croppedImageURl",o),o?(console.log("crop getCroppedRaster crop image URL",a),o):null}else if(t==="3_NDVI"||(t==null?void 0:t.value)==="3_NDVI")return await l3e(e,{accessToken:r,dateRange:n})}const og=R.createContext(null),h3e=()=>{try{const e=c1("agviewer_user_preferences");if(e)return e.isRasterVisible??!1}catch(e){console.error("Failed to get initial isVisible state:",e)}return!1};function f3e({children:e}){const[t,n]=R.useState(bp[0]),[r,i]=R.useState(h3e),[a,o]=R.useState(100),[s,u]=R.useState(!1),[h,g]=R.useState(!1),p=y=>{o(y.target.value)};return M.jsx(og.Provider,{value:{layer:t,setLayer:n,opacity:a,setOpacity:o,handleOpacityChange:p,layerOptions:bp,isVisible:r,setIsVisible:i,isDetailActive:s,datesLoading:h,setDatesLoading:g},children:e})}function U6({mapRef:e,dateRange:t}){var Se;const{plots:n,showPlots:r,clickedPlot:i,setClickedPlot:a}=R.useContext(ja),[o,s]=R.useState(!1),[u,h]=R.useState(null),[g,p]=R.useState(null),[y,_]=R.useState(null),x=Et(Fe=>Fe.pickerData),b=Et(Fe=>Fe.setPickerData),C=Et(Fe=>Fe.isHistogramSelectionMode),I=R.useRef(x);R.useEffect(()=>{I.current=x},[x]);const T=R.useRef(y);R.useEffect(()=>{T.current=y},[y]);const P=Et(Fe=>Fe.showCroppedImages),D=Et(Fe=>Fe.datesLoading);Et(Fe=>Fe.mapMode);const A=Et(Fe=>Fe.rasterLayer),O=R.useRef(null),F=R.useRef(null),V=R.useRef(new Map),{isVisible:Z,setIsVisible:q}=R.useContext(og);R.useContext(xp);const z=Or(),G=Et(Fe=>Fe.setCursor),W=Et(Fe=>Fe.resetCursor),{drawRef:$}=R.useContext(wi),{accessToken:B,isLoading:X,retry:K}=R.useContext(tg);R.useEffect(()=>{var Fe;console.log("Access token status:",{hasToken:!!B,tokenLength:(B==null?void 0:B.length)||0,tokenPreview:B?`${B.substring(0,20)}...`:"none",isLoading:X}),console.log("Environment check:",{fromEnv:!0,fromLocalStorage:!!localStorage.getItem("VITE_SENTINAL_HUB_CLIENT_ID"),fromStore:!!((Fe=Et.getState().configs)!=null&&Fe.VITE_SENTINAL_HUB_CLIENT_ID)}),!B&&!X&&console.log("To manually retry token fetch, call: retryToken()")},[B,X,K]);const Q=(Se=e==null?void 0:e.current)==null?void 0:Se.getMap(),ae=Et(Fe=>Fe.viewMode),re=Et(Fe=>Fe.addLoadingNDVIImage),ue=Et(Fe=>Fe.removeLoadingNDVIImage);Et(Fe=>Fe.toPickerMode);const ve=Et(Fe=>Fe.isNDVIImageLoading);Et(Fe=>Fe.setShowCroppedImages);const ie=R.useCallback((Fe,Ue,{map:Me},Pe=0)=>{if(console.log("eeeeee croppp adding image to map",Fe,Ue,Me),!Me)throw new Error("map is not defined");const Ne=100;if(Pe>=Ne)return console.warn("Style not loaded after maximum retries, aborting"),null;if(!Me.isStyleLoaded()){console.log("Style not loaded yet, waiting with requestAnimationFrame...",Pe);let Ot=Pe;const _t=()=>{Me.isStyleLoaded()?ie(Fe,Ue,{map:Me},0):Ot<Ne?(Ot++,requestAnimationFrame(_t)):console.warn("Style not loaded after maximum retries, aborting")};return requestAnimationFrame(_t),null}if(console.log("DEBUG: showCroppedImages =",P,"isVisible =",Z),!P||!Z)return console.log("showCroppedImages is off",P,"isVisible is off",Z),null;if(console.log("plotss",Ue),!Ue||!Ue.geometry||Ue.geometry.type!=="Polygon")return null;const[Re,Ye,We,Je]=Aa(Ue.geometry),rt=[[Re,Je],[We,Je],[We,Ye],[Re,Ye]],ot=`croppedImageSource-${Ue.properties.id}`,pt=`croppedImageLayer-${Ue.properties.id}`,nt=Ue.properties.id;if(V.current.get(nt)===Fe&&Me.getLayer(pt)&&Me.getSource(ot)){console.log("PLOTS: Image URL unchanged for plot",nt,"- skipping recreation");return}V.current.set(nt,Fe),Me.getLayer(pt)&&Me.removeLayer(pt),Me.getSource(ot)&&Me.removeSource(ot),console.log("adding the cropped raster to map"),console.log("adding source"),Me.addSource(ot,{type:"image",url:Fe,coordinates:rt});let xt=Me.getLayer("plots-line-layer")?"plots-line-layer":void 0;console.log("cropped beforeId",xt),console.log("adding layer"),Me.addLayer({id:pt,type:"raster",source:ot,paint:{"raster-opacity":1}},xt);const Dt=Me.getPitch();Me.setPitch(Dt+.01),console.log("croppp layer order",Me.getLayersOrder())},[P,Z]),pe=R.useCallback(async(Fe,{accessToken:Ue,map:Me,timeTravel:Pe,dateRange:Ne})=>{if(console.log("PLOTS: handleCroppedImageDownload started"),console.log("PLOTS: handleCroppedImageDownload - isVisible from context:",Z),console.log("crop download plot",Fe),!Me)throw new Error("map is not defined");if(!Me.isStyleLoaded()){console.log("PLOTS: Style not loaded, waiting with requestAnimationFrame...");const Ye=100;let We=0;const Je=()=>{Me.isStyleLoaded()?pe(Fe,{accessToken:Ue,map:Me,timeTravel:Pe,dateRange:Ne}):We<Ye?(We++,requestAnimationFrame(Je)):(console.warn("PLOTS: Style not loaded after maximum retries, aborting"),ue(Fe.properties.id))};requestAnimationFrame(Je);return}const Re=`croppedImageLayer-${Fe.properties.id}`;if(console.log("crop visible, showCropped",Z,P),!Z||!P){console.log("crop either isVisible or not plot mode selected, deleting layer and returning"),Me.getLayer(Re)&&Me.removeLayer(Re);return}if(Me.getLayer(Re))if(Pe)console.log("only time travel"),Me.removeLayer(Re);else{console.log("NDVI layer already added for this plot",Re);return}try{if(!Ue){if(X){console.log("Access token is loading, waiting...");return}console.warn("Access token not available, skipping NDVI fetch");return}if(ve(Fe.properties.id))return;re(Fe.properties.id);const Ye=await d3e(Fe,{rasterLayer:A,dateRange:Ne,accessToken:Ue});if(console.log("ndvi URL",Ye),!Fe)throw new Error("plot is not defined");console.log("mapp",Me),Ye&&(console.log(),ie(Ye,Fe,{map:Me}))}catch(Ye){console.log("error in loading ndvi layer",Ye)}finally{ue(Fe.properties.id)}},[A,B,X,ve,re,ie,ue,P,Z]),_e={id:"plots-line-layer",type:"line",paint:{"line-color":"#86efac","line-width":2,"line-opacity":.7}},Ae={id:"plots-layer",type:"fill",paint:{"fill-color":"#86efac","fill-opacity":0}},De=R.useCallback(()=>{var Me;const Fe=(Me=$==null?void 0:$.current)==null?void 0:Me.getAll();return((Fe==null?void 0:Fe.features)||[]).length>0},[$]),oe=R.useCallback(Fe=>{if(C){console.log("Histogram selection mode active, skipping AreaDetails");return}if(De()){console.log("no popup info"),b(null);return}const Ue=Q.queryRenderedFeatures(Fe.point,{layers:["plots-layer"]});if(Ue.length>0){const Me=Ue[0];console.log("clickedPlot",Me),console.log("clickedPlot LongLat",Fe.lngLat),b({lngLat:Fe.lngLat,plot:Me,coordinates:Fe.lngLat})}else b(null)},[De,Q,b,C]),te=R.useCallback(Fe=>{var Me,Pe;G("pointer");let Ue=null;if(Fe.features&&Fe.features.length>0)Ue=((Me=Fe.features[0].properties)==null?void 0:Me.id)||Fe.features[0].id;else if(Fe.point&&Q){const Ne=Q.queryRenderedFeatures(Fe.point,{layers:["plots-layer"]});Ne.length>0&&(Ue=((Pe=Ne[0].properties)==null?void 0:Pe.id)||Ne[0].id)}Ue&&p(Ue)},[G,Q]),de=R.useCallback(()=>{W(),setTimeout(()=>{T.current||p(null)},200)},[W]),ye=R.useCallback((Fe,Ue)=>{const[Me,Pe,Ne,Re]=Fe,[[Ye,We],[Je,rt]]=Ue.toArray();return!(Me>Je||Ne<Ye||Pe>rt||Re<We)},[]),H=R.useCallback((Fe,Ue)=>{const[Me,Pe,Ne,Re]=Fe,[[Ye,We],[Je,rt]]=Ue.toArray();return Me>=Ye&&Ne<=Je&&Pe>=We&&Re<=rt},[]),fe=R.useCallback(()=>{if(!Q||!r)return[];const Fe=Q.getBounds(),Ue=[];return n.forEach(Me=>{if(zv(Me.options)||!Me.options.geometry)return;const Pe=Aa(Me.options.geometry);if(H(Pe,Fe)){const Ne=(Pe[0]+Pe[2])/2,Re=(Pe[1]+Pe[3])/2,Ye=Q.project([Ne,Re]),Je=Q.queryRenderedFeatures(Ye,{layers:["plots-layer"]}).find(rt=>{var ot,pt;return((ot=rt.properties)==null?void 0:ot.id)===((pt=Me.options.properties)==null?void 0:pt.id)||rt.id===Me.options.id||rt.geometry&&JSON.stringify(rt.geometry)===JSON.stringify(Me.options.geometry)});Je&&Ue.push(Je)}}),Ue},[Q,n,r,H]),ce=R.useCallback(()=>{var Pe,Ne;if(!Q||!r||ae!=="NORMAL"||C||De())return;const Fe=I.current;if((Pe=Fe==null?void 0:Fe.plot)!=null&&Pe.geometry){const Re=Q.getBounds(),Ye=Aa(Fe.plot.geometry);if(ye(Ye,Re))return}const Ue=fe();if(Ue.length===0){Fe!=null&&Fe.plot&&b(null);return}let Me;if(Ue.length===1)Me=Ue[0];else{const Re=Math.floor(Math.random()*Ue.length);Me=Ue[Re]}if(Me){const Re=Aa(Me.geometry),Ye=(Re[0]+Re[2])/2,We=(Re[1]+Re[3])/2,Je=((Ne=Me.properties)==null?void 0:Ne.id)||Me.id;console.log("AUTO-SELECT: Plot selected:",Je),b({lngLat:{lng:Ye,lat:We},plot:Me,coordinates:{lng:Ye,lat:We},isAutoSelected:!0})}},[Q,r,ae,C,De,fe,b,ye]),Ce=R.useCallback(({timeTravel:Fe=!1})=>{if(console.log("handleLoadingCroppedRasterLayerToMap start"),!Q||D){console.log("ddd either map or dates are loading");return}if(Q.getZoom()<10)return;const Me=Q.getBounds(),Pe=n.filter(Ne=>{if(zv(Ne.options))return!1;if(!Fe){const Re=`croppedImageLayer-${Ne.options.properties.id}`;if(Q.getLayer(Re))return console.log("PLOTS: Skipping plot with existing layer:",Ne.options.properties.id),!1}return!0});Pe.length>0&&console.log(`PLOTS: Processing ${Pe.length} plots out of ${n.length} total`),Pe.forEach(Ne=>{const Re=Aa(Ne.options);ye(Re,Me)&&pe(Ne.options,{dateRange:t,accessToken:B,map:Q,timeTravel:Fe})}),console.log("handleLoadingCroppedRasterLayerToMap end")},[Q,n,B,t,ye,ae,Z,A,pe,D]),he=R.useCallback(()=>{if(Q){if(!Q.isStyleLoaded()){console.log("PLOTS: Style not loaded, waiting with requestAnimationFrame to remove layers...");const Fe=()=>{Q.isStyleLoaded()?he():requestAnimationFrame(Fe)};requestAnimationFrame(Fe);return}console.log("PLOTS: Removing all cropped image layers"),n.forEach(Fe=>{if(zv(Fe.options))return;const Ue=`croppedImageLayer-${Fe.options.properties.id}`,Me=`croppedImageSource-${Fe.options.properties.id}`;Q.getLayer(Ue)&&(console.log("PLOTS: Removing layer:",Ue),Q.removeLayer(Ue)),Q.getSource(Me)&&(console.log("PLOTS: Removing source:",Me),Q.removeSource(Me))}),V.current.clear()}},[Q,n]),Oe=R.useMemo(()=>Xd(Ce,1e3),[Ce]);R.useMemo(()=>Xd(ce,1e3),[ce]),R.useEffect(()=>{var Fe,Ue,Me,Pe,Ne,Re,Ye;if(console.log("PLOTS: useEffect triggered - isVisible:",Z,"showCroppedImages:",P,"accessToken:",!!B,"tokenLoading:",X),!Z||!P){console.log("PLOTS: isVisible is false or showCroppedImages is false, removing all cropped images"),he(),V.current.clear();return}if(X||!B){console.log("PLOTS: Access token not ready yet, waiting...",{tokenLoading:X,hasToken:!!B});return}if(Z&&P&&Q&&!D&&B){const We=O.current===null||((Ue=(Fe=O.current)==null?void 0:Fe.start)==null?void 0:Ue.getTime())!==((Me=t==null?void 0:t.start)==null?void 0:Me.getTime())||((Ne=(Pe=O.current)==null?void 0:Pe.end)==null?void 0:Ne.getTime())!==((Re=t==null?void 0:t.end)==null?void 0:Re.getTime()),Je=F.current===null||((Ye=F.current)==null?void 0:Ye.value)!==(A==null?void 0:A.value),rt=We||Je;rt?(console.log("PLOTS: Date range or raster layer changed, reloading all images",{dateRangeChanged:We,rasterLayerChanged:Je,prevDateRange:O.current,currentDateRange:t,prevRasterLayer:F.current,currentRasterLayer:A}),V.current.clear()):console.log("PLOTS: No date/layer change detected, loading only new images"),Ce({timeTravel:rt}),O.current=t,F.current=A}},[t,Z,P,Q,D,A,he,Ce,B,X]),R.useEffect(()=>{if(Q&&r&&ae!=="PICKER"){Q.on("click","plots-layer",oe);let Fe=null,Ue=null;const Me=Ne=>{Ne.point&&(Fe=Ne.point,Ue=Date.now())},Pe=Ne=>{if(!Fe||!Ne.point)return;const Re=Date.now()-Ue,Ye=Math.sqrt(Math.pow(Ne.point.x-Fe.x,2)+Math.pow(Ne.point.y-Fe.y,2));if(Re<300&&Ye<10&&Q.queryRenderedFeatures(Ne.point,{layers:["plots-layer"]}).length>0){const Je={point:Ne.point,lngLat:Ne.lngLat,originalEvent:Ne.originalEvent};oe(Je)}Fe=null,Ue=null};return Q.on("touchstart",Me),Q.on("touchend",Pe),()=>{Q&&(Q.off("click","plots-layer",oe),Q.off("touchstart",Me),Q.off("touchend",Pe))}}return()=>{Q&&Q.off("click","plots-layer",oe)}},[oe,ae,r,Q]),R.useEffect(()=>{if(console.log("running useEffect inside plots"),!(!Q||ae!=="NORMAL"||!r||!P))return console.log("adding viewport change event to map"),Q.on("moveend",Oe),Q.on("zoomend",Oe),Q.on("style.load",Oe),()=>{console.log("removing viewport change event from map"),Oe.cancel(),Q.off("style.load",Oe),Q.off("moveend",Oe),Q.off("zoomend",Oe)}},[Q,r,ae,Oe,P]),R.useEffect(()=>(Q&&ae!=="PICKER"&&(Q.on("mousemove","plots-layer",te),Q.on("mouseleave","plots-layer",de)),()=>{Q&&ae!=="PICKER"&&(Q.off("mousemove","plots-layer",te),Q.off("mouseleave","plots-layer",de))}),[Q,te,de,ae]);const ze=R.useCallback(Fe=>{var Pe;const Ue=((Pe=Fe==null?void 0:Fe.properties)==null?void 0:Pe.id)||(Fe==null?void 0:Fe.id),Me=n.find(Ne=>{var Re,Ye,We;return((Re=Ne.options)==null?void 0:Re.id)===Ue||((We=(Ye=Ne.options)==null?void 0:Ye.properties)==null?void 0:We.id)===Ue||Ne.id===Ue});Me&&(h(Me),s(!0))},[n]),$e=R.useCallback(()=>{s(!1),h(null)},[]);return R.useEffect(()=>{var Je;const Fe=()=>{!Q||!Q.isStyleLoaded()||n.forEach(rt=>{var xt;const ot=rt.id||((xt=rt.options)==null?void 0:xt.id),pt=`plot-highlight-${ot}`,nt=`plot-highlight-outline-${ot}`,gt=`plot-highlight-source-${ot}`;Q.getLayer(pt)&&Q.removeLayer(pt),Q.getLayer(nt)&&Q.removeLayer(nt),Q.getSource(gt)&&Q.removeSource(gt)})},Ue=()=>{var Dt,Ot;if(!Q||!Q.isStyleLoaded())return;const rt=x.plot,ot=((Dt=rt.properties)==null?void 0:Dt.id)||rt.id,pt=n.find(_t=>{var jt,Ft,$t;return((jt=_t.options)==null?void 0:jt.id)===ot||(($t=(Ft=_t.options)==null?void 0:Ft.properties)==null?void 0:$t.id)===ot||_t.id===ot});if(!pt||!((Ot=pt.options)!=null&&Ot.geometry))return;const nt=`plot-highlight-${pt.id||ot}`,gt=`plot-highlight-outline-${pt.id||ot}`,xt=`plot-highlight-source-${pt.id||ot}`;Q.getLayer(nt)&&Q.removeLayer(nt),Q.getLayer(gt)&&Q.removeLayer(gt),Q.getSource(xt)&&Q.removeSource(xt),Q.addSource(xt,{type:"geojson",data:pt.options.geometry}),Q.addLayer({id:gt,type:"line",source:xt,layout:{"line-cap":"round","line-join":"round"},paint:{"line-color":"#ffffff","line-width":4,"line-opacity":1}},"plots-line-layer"),Q.addLayer({id:nt,type:"line",source:xt,layout:{"line-cap":"round","line-join":"round"},paint:{"line-color":"#16a34a","line-width":6,"line-opacity":1}},gt)};if(!Q||!(x!=null&&x.plot)||ae!=="NORMAL"||C){Fe();return}if(!Q.isStyleLoaded()){console.log("Style not loaded yet, waiting with requestAnimationFrame to add highlight layers...");let rt=!1;const ot=()=>{rt||(Q.isStyleLoaded()?Ue():requestAnimationFrame(ot))};return requestAnimationFrame(ot),()=>{rt=!0}}Ue();const Me=x.plot,Pe=((Je=Me.properties)==null?void 0:Je.id)||Me.id,Ne=n.find(rt=>{var ot,pt,nt;return((ot=rt.options)==null?void 0:ot.id)===Pe||((nt=(pt=rt.options)==null?void 0:pt.properties)==null?void 0:nt.id)===Pe||rt.id===Pe}),Re=`plot-highlight-${(Ne==null?void 0:Ne.id)||Pe}`,Ye=`plot-highlight-outline-${(Ne==null?void 0:Ne.id)||Pe}`,We=`plot-highlight-source-${(Ne==null?void 0:Ne.id)||Pe}`;return()=>{Q&&Q.isStyleLoaded()&&(Q.getLayer(Re)&&Q.removeLayer(Re),Q.getLayer(Ye)&&Q.removeLayer(Ye),Q.getSource(We)&&Q.removeSource(We))}},[Q,x,n,ae,C]),r?M.jsxs(M.Fragment,{children:[M.jsxs(V1,{id:"plots",type:"geojson",data:{type:"FeatureCollection",features:n.map(Fe=>Fe==null?void 0:Fe.options)},children:[M.jsx(kd,{...Ae},"12kmsn"),M.jsx(kd,{..._e},"12kkd")]}),ae!==Wn.PICKER&&r&&n.map((Fe,Ue)=>{var Je,rt,ot,pt;if(!((Je=Fe==null?void 0:Fe.options)!=null&&Je.geometry))return null;const Me=Fe.options.id||((rt=Fe.options.properties)==null?void 0:rt.id)||Fe.id;if(g!==Me&&y!==Me)return null;const Pe=Aa(Fe.options.geometry),Ne=(Pe[0]+Pe[2])/2,Re=(Pe[1]+Pe[3])/2,Ye={lng:Ne,lat:Re},We=`edit-${Fe.options.id||Fe.id||Ue}-${Ue}`;return M.jsx(Od,{longitude:Ye.lng,latitude:Ye.lat,anchor:"center",children:M.jsxs("div",{className:"flex items-center gap-1 bg-gray-900/90 text-white rounded-lg px-2 py-1 shadow-lg z-10",onMouseEnter:()=>{_(Me),p(Me)},onMouseLeave:()=>{_(null),p(null)},children:[M.jsx("span",{className:"text-xs font-medium max-w-[120px] truncate",children:((ot=Fe.options.properties)==null?void 0:ot.name)||"Unknown Plot"}),M.jsx(es,{text:z.formatMessage({id:"app.agviewer_map.edit_plot_with_name",defaultMessage:"Edit"},{plotName:((pt=Fe.options.properties)==null?void 0:pt.name)||"Unknown Plot"}),children:M.jsx("button",{onClick:nt=>{nt.stopPropagation(),nt.preventDefault(),ze(Fe.options)},className:"hover:bg-white/10 rounded-full p-1 flex items-center justify-center",style:{width:"24px",height:"24px"},children:M.jsx(Ev,{size:12})})}),M.jsx("button",{onClick:nt=>{nt.stopPropagation(),nt.preventDefault();const gt={lng:Ye.lng,lat:Ye.lat};b({lngLat:gt,plot:Fe.options,coordinates:gt})},className:"hover:bg-white/10 rounded-full p-1 flex items-center justify-center",style:{width:"24px",height:"24px"},children:M.jsx(Mv,{size:12})})]})},We)}),u&&M.jsx(IDe,{plot:u,open:o,setOpen:s,onClose:$e})]}):null}const Ds=J.forwardRef(({className:e,type:t,...n},r)=>M.jsx("input",{type:t,className:It("flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",e),ref:r,...n}));Ds.displayName="Input";function p3e(e,t,{checkForDefaultPrevented:n=!0}={}){return function(i){if(e==null||e(i),n===!1||!i.defaultPrevented)return t==null?void 0:t(i)}}function m3e(e){const t=J.useRef({value:e,previous:e});return J.useMemo(()=>(t.current.value!==e&&(t.current.previous=t.current.value,t.current.value=e),t.current.previous),[e])}var mx="Switch",[g3e,O$e]=Us(mx),[y3e,v3e]=g3e(mx),H6=J.forwardRef((e,t)=>{const{__scopeSwitch:n,name:r,checked:i,defaultChecked:a,required:o,disabled:s,value:u="on",onCheckedChange:h,form:g,...p}=e,[y,_]=J.useState(null),x=$n(t,P=>_(P)),b=J.useRef(!1),C=y?g||!!y.closest("form"):!0,[I,T]=al({prop:i,defaultProp:a??!1,onChange:h,caller:mx});return M.jsxs(y3e,{scope:n,checked:I,disabled:s,children:[M.jsx(Dn.button,{type:"button",role:"switch","aria-checked":I,"aria-required":o,"data-state":q6(I),"data-disabled":s?"":void 0,disabled:s,value:u,...p,ref:x,onClick:p3e(e.onClick,P=>{T(D=>!D),C&&(b.current=P.isPropagationStopped(),b.current||P.stopPropagation())})}),C&&M.jsx(Z6,{control:y,bubbles:!b.current,name:r,value:u,checked:I,required:o,disabled:s,form:g,style:{transform:"translateX(-100%)"}})]})});H6.displayName=mx;var X6="SwitchThumb",Y6=J.forwardRef((e,t)=>{const{__scopeSwitch:n,...r}=e,i=v3e(X6,n);return M.jsx(Dn.span,{"data-state":q6(i.checked),"data-disabled":i.disabled?"":void 0,...r,ref:t})});Y6.displayName=X6;var b3e="SwitchBubbleInput",Z6=J.forwardRef(({__scopeSwitch:e,control:t,checked:n,bubbles:r=!0,...i},a)=>{const o=J.useRef(null),s=$n(o,a),u=m3e(n),h=av(t);return J.useEffect(()=>{const g=o.current;if(!g)return;const p=window.HTMLInputElement.prototype,_=Object.getOwnPropertyDescriptor(p,"checked").set;if(u!==n&&_){const x=new Event("click",{bubbles:r});_.call(g,n),g.dispatchEvent(x)}},[u,n,r]),M.jsx("input",{type:"checkbox","aria-hidden":!0,defaultChecked:n,...i,tabIndex:-1,ref:s,style:{...i.style,...h,position:"absolute",pointerEvents:"none",opacity:0,margin:0}})});Z6.displayName=b3e;function q6(e){return e?"checked":"unchecked"}var J6=H6,x3e=Y6;const gx=J.forwardRef(({className:e,...t},n)=>M.jsx(J6,{className:It("peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",e),...t,ref:n,children:M.jsx(x3e,{className:It("pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0")})}));gx.displayName=J6.displayName;function _3e(e,t,{checkForDefaultPrevented:n=!0}={}){return function(i){if(e==null||e(i),n===!1||!i.defaultPrevented)return t==null?void 0:t(i)}}var w3e=Symbol("radix.slottable");function S3e(e){const t=({children:n})=>M.jsx(M.Fragment,{children:n});return t.displayName=`${e}.Slottable`,t.__radixId=w3e,t}var K6="AlertDialog",[C3e,k$e]=Us(K6,[ND]),Sl=ND(),Q6=e=>{const{__scopeAlertDialog:t,...n}=e,r=Sl(t);return M.jsx(Kd,{...r,...n,modal:!0})};Q6.displayName=K6;var M3e="AlertDialogTrigger",E3e=J.forwardRef((e,t)=>{const{__scopeAlertDialog:n,...r}=e,i=Sl(n);return M.jsx(ZD,{...i,...r,ref:t})});E3e.displayName=M3e;var T3e="AlertDialogPortal",ez=e=>{const{__scopeAlertDialog:t,...n}=e,r=Sl(t);return M.jsx(Qd,{...r,...n})};ez.displayName=T3e;var A3e="AlertDialogOverlay",tz=J.forwardRef((e,t)=>{const{__scopeAlertDialog:n,...r}=e,i=Sl(n);return M.jsx(uc,{...i,...r,ref:t})});tz.displayName=A3e;var qh="AlertDialogContent",[I3e,P3e]=C3e(qh),O3e=S3e("AlertDialogContent"),nz=J.forwardRef((e,t)=>{const{__scopeAlertDialog:n,children:r,...i}=e,a=Sl(n),o=J.useRef(null),s=$n(t,o),u=J.useRef(null);return M.jsx(Vae,{contentName:qh,titleName:rz,docsSlug:"alert-dialog",children:M.jsx(I3e,{scope:n,cancelRef:u,children:M.jsxs(dc,{role:"alertdialog",...a,...i,ref:s,onOpenAutoFocus:_3e(i.onOpenAutoFocus,h=>{var g;h.preventDefault(),(g=u.current)==null||g.focus({preventScroll:!0})}),onPointerDownOutside:h=>h.preventDefault(),onInteractOutside:h=>h.preventDefault(),children:[M.jsx(O3e,{children:r}),M.jsx(N3e,{contentRef:o})]})})})});nz.displayName=qh;var rz="AlertDialogTitle",iz=J.forwardRef((e,t)=>{const{__scopeAlertDialog:n,...r}=e,i=Sl(n);return M.jsx(Zs,{...i,...r,ref:t})});iz.displayName=rz;var az="AlertDialogDescription",sz=J.forwardRef((e,t)=>{const{__scopeAlertDialog:n,...r}=e,i=Sl(n);return M.jsx(sl,{...i,...r,ref:t})});sz.displayName=az;var k3e="AlertDialogAction",oz=J.forwardRef((e,t)=>{const{__scopeAlertDialog:n,...r}=e,i=Sl(n);return M.jsx(uu,{...i,...r,ref:t})});oz.displayName=k3e;var lz="AlertDialogCancel",cz=J.forwardRef((e,t)=>{const{__scopeAlertDialog:n,...r}=e,{cancelRef:i}=P3e(lz,n),a=Sl(n),o=$n(t,i);return M.jsx(uu,{...a,...r,ref:o})});cz.displayName=lz;var N3e=({contentRef:e})=>{const t=`\`${qh}\` requires a description for the component to be accessible for screen reader users.
|
|
1162
|
+
}`,fx={},px=new Map,W6=50;function o3e(e){const t=Object.keys(e);if(t.length>W6){const n=t.slice(0,t.length-W6);n.forEach(r=>{delete e[r]}),console.log(`Cleaned up ${n.length} cache entries`)}}async function l3e(e,{weeksBefore:t=0,accessToken:n,dateRange:r}){if(console.log("downloading cropped ndvi",r),!n)return console.error("No access token provided"),null;const i=new Date(r.start),a=new Date(r.end);i.setHours(0,0,0,0),a.setHours(23,59,59,999);const o=i.toISOString(),s=a.toISOString(),u=`${e.properties.id}-${o.split("T")[0]}-${s.split("T")[0]}`;if(console.log("crop cacheKey",u),fx[u])return console.log("NDVI data found in cache"),fx[u];if(px.has(u))return console.log("Waiting for existing request to complete for:",u),px.get(u);if(console.log("access Token",n),!Rse(Aa(e)))throw new Error("Invalid BBOX");const g="https://services.sentinel-hub.com/api/v1/process",p={input:{bounds:{geometry:{type:"Polygon",coordinates:e.geometry.coordinates},properties:{crs:"http://www.opengis.net/def/crs/EPSG/0/4326"}},data:[{type:"sentinel-2-l2a",dataFilter:{timeRange:{from:o,to:s}}}]},output:{width:512,height:512,responses:[{identifier:"default",format:{type:"image/png"}}]},evalscript:s3e},y=(async()=>{try{const _=await fetch(g,{method:"POST",headers:{Authorization:`Bearer ${n}`,"Content-Type":"application/json"},body:JSON.stringify(p)});if(!_.ok)throw new Error("Failed to fetch NDVI data");const x=await _.blob();if(!x)return null;const b=URL.createObjectURL(x);return fx[u]=b,o3e(fx),b}catch(_){return console.error("Error fetching NDVI data:",_),null}finally{px.delete(u)}})();return px.set(u,y),y}async function c3e(e,t){return new Promise(n=>{const r=new Image;r.onload=function(){const i=document.createElement("canvas"),a=i.getContext("2d");i.width=r.width,i.height=r.height,a.drawImage(r,0,0,r.width,r.height);const o=t.geometry.coordinates[0].map(([s,u])=>u3e(s,u,Aa(t),r.width,r.height));a.globalCompositeOperation="destination-in",a.beginPath(),o.forEach(([s,u],h)=>{h===0?a.moveTo(s,u):a.lineTo(s,u)}),a.closePath(),a.fill(),n(i.toDataURL("image/png"))},r.src=e})}function u3e(e,t,n,r,i){const[a,o,s,u]=n,h=(e-a)/(s-a)*r,g=i-(t-o)/(u-o)*i;return[h,g]}async function d3e(e,{rasterLayer:t,dateRange:n,accessToken:r,map:i}){if(console.log("getCroppedRaster rasterLayer",t,n),!(n!=null&&n.start)||!(n!=null&&n.end)||!(n.start instanceof Date)||!(n.end instanceof Date)){console.error("DateRange is invalid or not Date objects:",n);return}if(t==="ET"||(t==null?void 0:t.value)==="ET"){const a=await a3e(e,n);if(!a)return null;const o=await c3e(a,e);return console.log("croppedImageURl",o),o?(console.log("crop getCroppedRaster crop image URL",a),o):null}else if(t==="3_NDVI"||(t==null?void 0:t.value)==="3_NDVI")return await l3e(e,{accessToken:r,dateRange:n})}const og=R.createContext(null),h3e=()=>{try{const e=c1("agviewer_user_preferences");if(e)return e.isRasterVisible??!1}catch(e){console.error("Failed to get initial isVisible state:",e)}return!1};function f3e({children:e}){const[t,n]=R.useState(bp[0]),[r,i]=R.useState(h3e),[a,o]=R.useState(100),[s,u]=R.useState(!1),[h,g]=R.useState(!1),p=y=>{o(y.target.value)};return M.jsx(og.Provider,{value:{layer:t,setLayer:n,opacity:a,setOpacity:o,handleOpacityChange:p,layerOptions:bp,isVisible:r,setIsVisible:i,isDetailActive:s,datesLoading:h,setDatesLoading:g},children:e})}function U6({mapRef:e,dateRange:t}){var Se;const{plots:n,showPlots:r,clickedPlot:i,setClickedPlot:a}=R.useContext(ja),[o,s]=R.useState(!1),[u,h]=R.useState(null),[g,p]=R.useState(null),[y,_]=R.useState(null),x=Et(Fe=>Fe.pickerData),b=Et(Fe=>Fe.setPickerData),C=Et(Fe=>Fe.isHistogramSelectionMode),I=R.useRef(x);R.useEffect(()=>{I.current=x},[x]);const T=R.useRef(y);R.useEffect(()=>{T.current=y},[y]);const P=Et(Fe=>Fe.showCroppedImages),D=Et(Fe=>Fe.datesLoading);Et(Fe=>Fe.mapMode);const A=Et(Fe=>Fe.rasterLayer),O=R.useRef(null),F=R.useRef(null),V=R.useRef(new Map),{isVisible:Z,setIsVisible:q}=R.useContext(og);R.useContext(xp);const z=Or(),G=Et(Fe=>Fe.setCursor),W=Et(Fe=>Fe.resetCursor),{drawRef:$}=R.useContext(wi),{accessToken:B,isLoading:X,retry:K}=R.useContext(tg);R.useEffect(()=>{var Fe;console.log("Access token status:",{hasToken:!!B,tokenLength:(B==null?void 0:B.length)||0,tokenPreview:B?`${B.substring(0,20)}...`:"none",isLoading:X}),console.log("Environment check:",{fromEnv:!0,fromLocalStorage:!!localStorage.getItem("VITE_SENTINAL_HUB_CLIENT_ID"),fromStore:!!((Fe=Et.getState().configs)!=null&&Fe.VITE_SENTINAL_HUB_CLIENT_ID)}),!B&&!X&&console.log("To manually retry token fetch, call: retryToken()")},[B,X,K]);const Q=(Se=e==null?void 0:e.current)==null?void 0:Se.getMap(),ae=Et(Fe=>Fe.viewMode),re=Et(Fe=>Fe.addLoadingNDVIImage),ue=Et(Fe=>Fe.removeLoadingNDVIImage);Et(Fe=>Fe.toPickerMode);const ve=Et(Fe=>Fe.isNDVIImageLoading);Et(Fe=>Fe.setShowCroppedImages);const ie=R.useCallback((Fe,Ue,{map:Me},Pe=0)=>{if(console.log("eeeeee croppp adding image to map",Fe,Ue,Me),!Me)throw new Error("map is not defined");const Ne=100;if(Pe>=Ne)return console.warn("Style not loaded after maximum retries, aborting"),null;if(!Me.isStyleLoaded()){console.log("Style not loaded yet, waiting with requestAnimationFrame...",Pe);let Ot=Pe;const _t=()=>{Me.isStyleLoaded()?ie(Fe,Ue,{map:Me},0):Ot<Ne?(Ot++,requestAnimationFrame(_t)):console.warn("Style not loaded after maximum retries, aborting")};return requestAnimationFrame(_t),null}if(console.log("DEBUG: showCroppedImages =",P,"isVisible =",Z),!P||!Z)return console.log("showCroppedImages is off",P,"isVisible is off",Z),null;if(console.log("plotss",Ue),!Ue||!Ue.geometry||Ue.geometry.type!=="Polygon")return null;const[Re,Ye,We,Je]=Aa(Ue.geometry),rt=[[Re,Je],[We,Je],[We,Ye],[Re,Ye]],ot=`croppedImageSource-${Ue.properties.id}`,pt=`croppedImageLayer-${Ue.properties.id}`,nt=Ue.properties.id;if(V.current.get(nt)===Fe&&Me.getLayer(pt)&&Me.getSource(ot)){console.log("PLOTS: Image URL unchanged for plot",nt,"- skipping recreation");return}V.current.set(nt,Fe),Me.getLayer(pt)&&Me.removeLayer(pt),Me.getSource(ot)&&Me.removeSource(ot),console.log("adding the cropped raster to map"),console.log("adding source"),Me.addSource(ot,{type:"image",url:Fe,coordinates:rt});let xt=Me.getLayer("plots-line-layer")?"plots-line-layer":void 0;console.log("cropped beforeId",xt),console.log("adding layer"),Me.addLayer({id:pt,type:"raster",source:ot,paint:{"raster-opacity":1}},xt);const Dt=Me.getPitch();Me.setPitch(Dt+.01),console.log("croppp layer order",Me.getLayersOrder())},[P,Z]),pe=R.useCallback(async(Fe,{accessToken:Ue,map:Me,timeTravel:Pe,dateRange:Ne})=>{if(console.log("PLOTS: handleCroppedImageDownload started"),console.log("PLOTS: handleCroppedImageDownload - isVisible from context:",Z),console.log("crop download plot",Fe),!Me)throw new Error("map is not defined");if(!Me.isStyleLoaded()){console.log("PLOTS: Style not loaded, waiting with requestAnimationFrame...");const Ye=100;let We=0;const Je=()=>{Me.isStyleLoaded()?pe(Fe,{accessToken:Ue,map:Me,timeTravel:Pe,dateRange:Ne}):We<Ye?(We++,requestAnimationFrame(Je)):(console.warn("PLOTS: Style not loaded after maximum retries, aborting"),ue(Fe.properties.id))};requestAnimationFrame(Je);return}const Re=`croppedImageLayer-${Fe.properties.id}`;if(console.log("crop visible, showCropped",Z,P),!Z||!P){console.log("crop either isVisible or not plot mode selected, deleting layer and returning"),Me.getLayer(Re)&&Me.removeLayer(Re);return}if(Me.getLayer(Re))if(Pe)console.log("only time travel"),Me.removeLayer(Re);else{console.log("NDVI layer already added for this plot",Re);return}try{if(!Ue){if(X){console.log("Access token is loading, waiting...");return}console.warn("Access token not available, skipping NDVI fetch");return}if(ve(Fe.properties.id))return;re(Fe.properties.id);const Ye=await d3e(Fe,{rasterLayer:A,dateRange:Ne,accessToken:Ue});if(console.log("ndvi URL",Ye),!Fe)throw new Error("plot is not defined");console.log("mapp",Me),Ye&&(console.log(),ie(Ye,Fe,{map:Me}))}catch(Ye){console.log("error in loading ndvi layer",Ye)}finally{ue(Fe.properties.id)}},[A,B,X,ve,re,ie,ue,P,Z]),_e={id:"plots-line-layer",type:"line",paint:{"line-color":"#86efac","line-width":2,"line-opacity":.7}},Ae={id:"plots-layer",type:"fill",paint:{"fill-color":"#86efac","fill-opacity":0}},De=R.useCallback(()=>{var Me;const Fe=(Me=$==null?void 0:$.current)==null?void 0:Me.getAll();return((Fe==null?void 0:Fe.features)||[]).length>0},[$]),oe=R.useCallback(Fe=>{if(C){console.log("Histogram selection mode active, skipping AreaDetails");return}if(De()){console.log("no popup info"),b(null);return}const Ue=Q.queryRenderedFeatures(Fe.point,{layers:["plots-layer"]});if(Ue.length>0){const Me=Ue[0];console.log("clickedPlot",Me),console.log("clickedPlot LongLat",Fe.lngLat),b({lngLat:Fe.lngLat,plot:Me,coordinates:Fe.lngLat})}else b(null)},[De,Q,b,C]),te=R.useCallback(Fe=>{var Me,Pe;G("pointer");let Ue=null;if(Fe.features&&Fe.features.length>0)Ue=((Me=Fe.features[0].properties)==null?void 0:Me.id)||Fe.features[0].id;else if(Fe.point&&Q){const Ne=Q.queryRenderedFeatures(Fe.point,{layers:["plots-layer"]});Ne.length>0&&(Ue=((Pe=Ne[0].properties)==null?void 0:Pe.id)||Ne[0].id)}Ue&&p(Ue)},[G,Q]),de=R.useCallback(()=>{W(),setTimeout(()=>{T.current||p(null)},200)},[W]),ye=R.useCallback((Fe,Ue)=>{const[Me,Pe,Ne,Re]=Fe,[[Ye,We],[Je,rt]]=Ue.toArray();return!(Me>Je||Ne<Ye||Pe>rt||Re<We)},[]),H=R.useCallback((Fe,Ue)=>{const[Me,Pe,Ne,Re]=Fe,[[Ye,We],[Je,rt]]=Ue.toArray();return Me>=Ye&&Ne<=Je&&Pe>=We&&Re<=rt},[]),fe=R.useCallback(()=>{if(!Q||!r)return[];const Fe=Q.getBounds(),Ue=[];return n.forEach(Me=>{if(zv(Me.options)||!Me.options.geometry)return;const Pe=Aa(Me.options.geometry);if(H(Pe,Fe)){const Ne=(Pe[0]+Pe[2])/2,Re=(Pe[1]+Pe[3])/2,Ye=Q.project([Ne,Re]),Je=Q.queryRenderedFeatures(Ye,{layers:["plots-layer"]}).find(rt=>{var ot,pt;return((ot=rt.properties)==null?void 0:ot.id)===((pt=Me.options.properties)==null?void 0:pt.id)||rt.id===Me.options.id||rt.geometry&&JSON.stringify(rt.geometry)===JSON.stringify(Me.options.geometry)});Je&&Ue.push(Je)}}),Ue},[Q,n,r,H]),ce=R.useCallback(()=>{var Pe,Ne;if(!Q||!r||ae!=="NORMAL"||C||De())return;const Fe=I.current;if((Pe=Fe==null?void 0:Fe.plot)!=null&&Pe.geometry){const Re=Q.getBounds(),Ye=Aa(Fe.plot.geometry);if(ye(Ye,Re))return}const Ue=fe();if(Ue.length===0){Fe!=null&&Fe.plot&&b(null);return}let Me;if(Ue.length===1)Me=Ue[0];else{const Re=Math.floor(Math.random()*Ue.length);Me=Ue[Re]}if(Me){const Re=Aa(Me.geometry),Ye=(Re[0]+Re[2])/2,We=(Re[1]+Re[3])/2,Je=((Ne=Me.properties)==null?void 0:Ne.id)||Me.id;console.log("AUTO-SELECT: Plot selected:",Je),b({lngLat:{lng:Ye,lat:We},plot:Me,coordinates:{lng:Ye,lat:We},isAutoSelected:!0})}},[Q,r,ae,C,De,fe,b,ye]),Ce=R.useCallback(({timeTravel:Fe=!1})=>{if(console.log("handleLoadingCroppedRasterLayerToMap start"),!Q||D){console.log("ddd either map or dates are loading");return}if(Q.getZoom()<10)return;const Me=Q.getBounds(),Pe=n.filter(Ne=>{if(zv(Ne.options)||!Ne.options.geometry)return!1;const Re=Aa(Ne.options.geometry);if(!ye(Re,Me))return!1;if(!Fe){const Ye=`croppedImageLayer-${Ne.options.properties.id}`;if(Q.getLayer(Ye))return console.log("PLOTS: Skipping plot with existing layer:",Ne.options.properties.id),!1}return!0});Pe.length>0&&console.log(`PLOTS: Processing ${Pe.length} plots out of ${n.length} total`),Pe.forEach(Ne=>{pe(Ne.options,{dateRange:t,accessToken:B,map:Q,timeTravel:Fe})}),console.log("handleLoadingCroppedRasterLayerToMap end")},[Q,n,B,t,ye,ae,Z,A,pe,D]),he=R.useCallback(()=>{if(Q){if(!Q.isStyleLoaded()){console.log("PLOTS: Style not loaded, waiting with requestAnimationFrame to remove layers...");const Fe=()=>{Q.isStyleLoaded()?he():requestAnimationFrame(Fe)};requestAnimationFrame(Fe);return}console.log("PLOTS: Removing all cropped image layers"),n.forEach(Fe=>{if(zv(Fe.options))return;const Ue=`croppedImageLayer-${Fe.options.properties.id}`,Me=`croppedImageSource-${Fe.options.properties.id}`;Q.getLayer(Ue)&&(console.log("PLOTS: Removing layer:",Ue),Q.removeLayer(Ue)),Q.getSource(Me)&&(console.log("PLOTS: Removing source:",Me),Q.removeSource(Me))}),V.current.clear()}},[Q,n]),Oe=R.useMemo(()=>Xd(Ce,1e3),[Ce]);R.useMemo(()=>Xd(ce,1e3),[ce]),R.useEffect(()=>{var Fe,Ue,Me,Pe,Ne,Re,Ye;if(console.log("PLOTS: useEffect triggered - isVisible:",Z,"showCroppedImages:",P,"accessToken:",!!B,"tokenLoading:",X),!Z||!P){console.log("PLOTS: isVisible is false or showCroppedImages is false, removing all cropped images"),he(),V.current.clear();return}if(X||!B){console.log("PLOTS: Access token not ready yet, waiting...",{tokenLoading:X,hasToken:!!B});return}if(Z&&P&&Q&&!D&&B){const We=O.current===null||((Ue=(Fe=O.current)==null?void 0:Fe.start)==null?void 0:Ue.getTime())!==((Me=t==null?void 0:t.start)==null?void 0:Me.getTime())||((Ne=(Pe=O.current)==null?void 0:Pe.end)==null?void 0:Ne.getTime())!==((Re=t==null?void 0:t.end)==null?void 0:Re.getTime()),Je=F.current===null||((Ye=F.current)==null?void 0:Ye.value)!==(A==null?void 0:A.value),rt=We||Je;rt?(console.log("PLOTS: Date range or raster layer changed, reloading all images",{dateRangeChanged:We,rasterLayerChanged:Je,prevDateRange:O.current,currentDateRange:t,prevRasterLayer:F.current,currentRasterLayer:A}),V.current.clear()):console.log("PLOTS: No date/layer change detected, loading only new images"),Ce({timeTravel:rt}),O.current=t,F.current=A}},[t,Z,P,Q,D,A,he,Ce,B,X]),R.useEffect(()=>{if(Q&&r&&ae!=="PICKER"){Q.on("click","plots-layer",oe);let Fe=null,Ue=null;const Me=Ne=>{Ne.point&&(Fe=Ne.point,Ue=Date.now())},Pe=Ne=>{if(!Fe||!Ne.point)return;const Re=Date.now()-Ue,Ye=Math.sqrt(Math.pow(Ne.point.x-Fe.x,2)+Math.pow(Ne.point.y-Fe.y,2));if(Re<300&&Ye<10&&Q.queryRenderedFeatures(Ne.point,{layers:["plots-layer"]}).length>0){const Je={point:Ne.point,lngLat:Ne.lngLat,originalEvent:Ne.originalEvent};oe(Je)}Fe=null,Ue=null};return Q.on("touchstart",Me),Q.on("touchend",Pe),()=>{Q&&(Q.off("click","plots-layer",oe),Q.off("touchstart",Me),Q.off("touchend",Pe))}}return()=>{Q&&Q.off("click","plots-layer",oe)}},[oe,ae,r,Q]),R.useEffect(()=>{if(console.log("running useEffect inside plots"),!(!Q||ae!=="NORMAL"||!r||!P))return console.log("adding viewport change event to map"),Q.on("moveend",Oe),Q.on("zoomend",Oe),Q.on("style.load",Oe),()=>{console.log("removing viewport change event from map"),Oe.cancel(),Q.off("style.load",Oe),Q.off("moveend",Oe),Q.off("zoomend",Oe)}},[Q,r,ae,Oe,P]),R.useEffect(()=>(Q&&ae!=="PICKER"&&(Q.on("mousemove","plots-layer",te),Q.on("mouseleave","plots-layer",de)),()=>{Q&&ae!=="PICKER"&&(Q.off("mousemove","plots-layer",te),Q.off("mouseleave","plots-layer",de))}),[Q,te,de,ae]);const ze=R.useCallback(Fe=>{var Pe;const Ue=((Pe=Fe==null?void 0:Fe.properties)==null?void 0:Pe.id)||(Fe==null?void 0:Fe.id),Me=n.find(Ne=>{var Re,Ye,We;return((Re=Ne.options)==null?void 0:Re.id)===Ue||((We=(Ye=Ne.options)==null?void 0:Ye.properties)==null?void 0:We.id)===Ue||Ne.id===Ue});Me&&(h(Me),s(!0))},[n]),$e=R.useCallback(()=>{s(!1),h(null)},[]);return R.useEffect(()=>{var Je;const Fe=()=>{!Q||!Q.isStyleLoaded()||n.forEach(rt=>{var xt;const ot=rt.id||((xt=rt.options)==null?void 0:xt.id),pt=`plot-highlight-${ot}`,nt=`plot-highlight-outline-${ot}`,gt=`plot-highlight-source-${ot}`;Q.getLayer(pt)&&Q.removeLayer(pt),Q.getLayer(nt)&&Q.removeLayer(nt),Q.getSource(gt)&&Q.removeSource(gt)})},Ue=()=>{var Dt,Ot;if(!Q||!Q.isStyleLoaded())return;const rt=x.plot,ot=((Dt=rt.properties)==null?void 0:Dt.id)||rt.id,pt=n.find(_t=>{var jt,Ft,$t;return((jt=_t.options)==null?void 0:jt.id)===ot||(($t=(Ft=_t.options)==null?void 0:Ft.properties)==null?void 0:$t.id)===ot||_t.id===ot});if(!pt||!((Ot=pt.options)!=null&&Ot.geometry))return;const nt=`plot-highlight-${pt.id||ot}`,gt=`plot-highlight-outline-${pt.id||ot}`,xt=`plot-highlight-source-${pt.id||ot}`;Q.getLayer(nt)&&Q.removeLayer(nt),Q.getLayer(gt)&&Q.removeLayer(gt),Q.getSource(xt)&&Q.removeSource(xt),Q.addSource(xt,{type:"geojson",data:pt.options.geometry}),Q.addLayer({id:gt,type:"line",source:xt,layout:{"line-cap":"round","line-join":"round"},paint:{"line-color":"#ffffff","line-width":4,"line-opacity":1}},"plots-line-layer"),Q.addLayer({id:nt,type:"line",source:xt,layout:{"line-cap":"round","line-join":"round"},paint:{"line-color":"#16a34a","line-width":6,"line-opacity":1}},gt)};if(!Q||!(x!=null&&x.plot)||ae!=="NORMAL"||C){Fe();return}if(!Q.isStyleLoaded()){console.log("Style not loaded yet, waiting with requestAnimationFrame to add highlight layers...");let rt=!1;const ot=()=>{rt||(Q.isStyleLoaded()?Ue():requestAnimationFrame(ot))};return requestAnimationFrame(ot),()=>{rt=!0}}Ue();const Me=x.plot,Pe=((Je=Me.properties)==null?void 0:Je.id)||Me.id,Ne=n.find(rt=>{var ot,pt,nt;return((ot=rt.options)==null?void 0:ot.id)===Pe||((nt=(pt=rt.options)==null?void 0:pt.properties)==null?void 0:nt.id)===Pe||rt.id===Pe}),Re=`plot-highlight-${(Ne==null?void 0:Ne.id)||Pe}`,Ye=`plot-highlight-outline-${(Ne==null?void 0:Ne.id)||Pe}`,We=`plot-highlight-source-${(Ne==null?void 0:Ne.id)||Pe}`;return()=>{Q&&Q.isStyleLoaded()&&(Q.getLayer(Re)&&Q.removeLayer(Re),Q.getLayer(Ye)&&Q.removeLayer(Ye),Q.getSource(We)&&Q.removeSource(We))}},[Q,x,n,ae,C]),r?M.jsxs(M.Fragment,{children:[M.jsxs(V1,{id:"plots",type:"geojson",data:{type:"FeatureCollection",features:n.map(Fe=>Fe==null?void 0:Fe.options)},children:[M.jsx(kd,{...Ae},"12kmsn"),M.jsx(kd,{..._e},"12kkd")]}),ae!==Wn.PICKER&&r&&n.map((Fe,Ue)=>{var Je,rt,ot,pt;if(!((Je=Fe==null?void 0:Fe.options)!=null&&Je.geometry))return null;const Me=Fe.options.id||((rt=Fe.options.properties)==null?void 0:rt.id)||Fe.id;if(g!==Me&&y!==Me)return null;const Pe=Aa(Fe.options.geometry),Ne=(Pe[0]+Pe[2])/2,Re=(Pe[1]+Pe[3])/2,Ye={lng:Ne,lat:Re},We=`edit-${Fe.options.id||Fe.id||Ue}-${Ue}`;return M.jsx(Od,{longitude:Ye.lng,latitude:Ye.lat,anchor:"center",children:M.jsxs("div",{className:"flex items-center gap-1 bg-gray-900/90 text-white rounded-lg px-2 py-1 shadow-lg z-10",onMouseEnter:()=>{_(Me),p(Me)},onMouseLeave:()=>{_(null),p(null)},children:[M.jsx("span",{className:"text-xs font-medium max-w-[120px] truncate",children:((ot=Fe.options.properties)==null?void 0:ot.name)||"Unknown Plot"}),M.jsx(es,{text:z.formatMessage({id:"app.agviewer_map.edit_plot_with_name",defaultMessage:"Edit"},{plotName:((pt=Fe.options.properties)==null?void 0:pt.name)||"Unknown Plot"}),children:M.jsx("button",{onClick:nt=>{nt.stopPropagation(),nt.preventDefault(),ze(Fe.options)},className:"hover:bg-white/10 rounded-full p-1 flex items-center justify-center",style:{width:"24px",height:"24px"},children:M.jsx(Ev,{size:12})})}),M.jsx("button",{onClick:nt=>{nt.stopPropagation(),nt.preventDefault();const gt={lng:Ye.lng,lat:Ye.lat};b({lngLat:gt,plot:Fe.options,coordinates:gt})},className:"hover:bg-white/10 rounded-full p-1 flex items-center justify-center",style:{width:"24px",height:"24px"},children:M.jsx(Mv,{size:12})})]})},We)}),u&&M.jsx(IDe,{plot:u,open:o,setOpen:s,onClose:$e})]}):null}const Ds=J.forwardRef(({className:e,type:t,...n},r)=>M.jsx("input",{type:t,className:It("flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",e),ref:r,...n}));Ds.displayName="Input";function p3e(e,t,{checkForDefaultPrevented:n=!0}={}){return function(i){if(e==null||e(i),n===!1||!i.defaultPrevented)return t==null?void 0:t(i)}}function m3e(e){const t=J.useRef({value:e,previous:e});return J.useMemo(()=>(t.current.value!==e&&(t.current.previous=t.current.value,t.current.value=e),t.current.previous),[e])}var mx="Switch",[g3e,O$e]=Us(mx),[y3e,v3e]=g3e(mx),H6=J.forwardRef((e,t)=>{const{__scopeSwitch:n,name:r,checked:i,defaultChecked:a,required:o,disabled:s,value:u="on",onCheckedChange:h,form:g,...p}=e,[y,_]=J.useState(null),x=$n(t,P=>_(P)),b=J.useRef(!1),C=y?g||!!y.closest("form"):!0,[I,T]=al({prop:i,defaultProp:a??!1,onChange:h,caller:mx});return M.jsxs(y3e,{scope:n,checked:I,disabled:s,children:[M.jsx(Dn.button,{type:"button",role:"switch","aria-checked":I,"aria-required":o,"data-state":q6(I),"data-disabled":s?"":void 0,disabled:s,value:u,...p,ref:x,onClick:p3e(e.onClick,P=>{T(D=>!D),C&&(b.current=P.isPropagationStopped(),b.current||P.stopPropagation())})}),C&&M.jsx(Z6,{control:y,bubbles:!b.current,name:r,value:u,checked:I,required:o,disabled:s,form:g,style:{transform:"translateX(-100%)"}})]})});H6.displayName=mx;var X6="SwitchThumb",Y6=J.forwardRef((e,t)=>{const{__scopeSwitch:n,...r}=e,i=v3e(X6,n);return M.jsx(Dn.span,{"data-state":q6(i.checked),"data-disabled":i.disabled?"":void 0,...r,ref:t})});Y6.displayName=X6;var b3e="SwitchBubbleInput",Z6=J.forwardRef(({__scopeSwitch:e,control:t,checked:n,bubbles:r=!0,...i},a)=>{const o=J.useRef(null),s=$n(o,a),u=m3e(n),h=av(t);return J.useEffect(()=>{const g=o.current;if(!g)return;const p=window.HTMLInputElement.prototype,_=Object.getOwnPropertyDescriptor(p,"checked").set;if(u!==n&&_){const x=new Event("click",{bubbles:r});_.call(g,n),g.dispatchEvent(x)}},[u,n,r]),M.jsx("input",{type:"checkbox","aria-hidden":!0,defaultChecked:n,...i,tabIndex:-1,ref:s,style:{...i.style,...h,position:"absolute",pointerEvents:"none",opacity:0,margin:0}})});Z6.displayName=b3e;function q6(e){return e?"checked":"unchecked"}var J6=H6,x3e=Y6;const gx=J.forwardRef(({className:e,...t},n)=>M.jsx(J6,{className:It("peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",e),...t,ref:n,children:M.jsx(x3e,{className:It("pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0")})}));gx.displayName=J6.displayName;function _3e(e,t,{checkForDefaultPrevented:n=!0}={}){return function(i){if(e==null||e(i),n===!1||!i.defaultPrevented)return t==null?void 0:t(i)}}var w3e=Symbol("radix.slottable");function S3e(e){const t=({children:n})=>M.jsx(M.Fragment,{children:n});return t.displayName=`${e}.Slottable`,t.__radixId=w3e,t}var K6="AlertDialog",[C3e,k$e]=Us(K6,[ND]),Sl=ND(),Q6=e=>{const{__scopeAlertDialog:t,...n}=e,r=Sl(t);return M.jsx(Kd,{...r,...n,modal:!0})};Q6.displayName=K6;var M3e="AlertDialogTrigger",E3e=J.forwardRef((e,t)=>{const{__scopeAlertDialog:n,...r}=e,i=Sl(n);return M.jsx(ZD,{...i,...r,ref:t})});E3e.displayName=M3e;var T3e="AlertDialogPortal",ez=e=>{const{__scopeAlertDialog:t,...n}=e,r=Sl(t);return M.jsx(Qd,{...r,...n})};ez.displayName=T3e;var A3e="AlertDialogOverlay",tz=J.forwardRef((e,t)=>{const{__scopeAlertDialog:n,...r}=e,i=Sl(n);return M.jsx(uc,{...i,...r,ref:t})});tz.displayName=A3e;var qh="AlertDialogContent",[I3e,P3e]=C3e(qh),O3e=S3e("AlertDialogContent"),nz=J.forwardRef((e,t)=>{const{__scopeAlertDialog:n,children:r,...i}=e,a=Sl(n),o=J.useRef(null),s=$n(t,o),u=J.useRef(null);return M.jsx(Vae,{contentName:qh,titleName:rz,docsSlug:"alert-dialog",children:M.jsx(I3e,{scope:n,cancelRef:u,children:M.jsxs(dc,{role:"alertdialog",...a,...i,ref:s,onOpenAutoFocus:_3e(i.onOpenAutoFocus,h=>{var g;h.preventDefault(),(g=u.current)==null||g.focus({preventScroll:!0})}),onPointerDownOutside:h=>h.preventDefault(),onInteractOutside:h=>h.preventDefault(),children:[M.jsx(O3e,{children:r}),M.jsx(N3e,{contentRef:o})]})})})});nz.displayName=qh;var rz="AlertDialogTitle",iz=J.forwardRef((e,t)=>{const{__scopeAlertDialog:n,...r}=e,i=Sl(n);return M.jsx(Zs,{...i,...r,ref:t})});iz.displayName=rz;var az="AlertDialogDescription",sz=J.forwardRef((e,t)=>{const{__scopeAlertDialog:n,...r}=e,i=Sl(n);return M.jsx(sl,{...i,...r,ref:t})});sz.displayName=az;var k3e="AlertDialogAction",oz=J.forwardRef((e,t)=>{const{__scopeAlertDialog:n,...r}=e,i=Sl(n);return M.jsx(uu,{...i,...r,ref:t})});oz.displayName=k3e;var lz="AlertDialogCancel",cz=J.forwardRef((e,t)=>{const{__scopeAlertDialog:n,...r}=e,{cancelRef:i}=P3e(lz,n),a=Sl(n),o=$n(t,i);return M.jsx(uu,{...a,...r,ref:o})});cz.displayName=lz;var N3e=({contentRef:e})=>{const t=`\`${qh}\` requires a description for the component to be accessible for screen reader users.
|
|
1163
1163
|
|
|
1164
1164
|
You can add a description to the \`${qh}\` by passing a \`${az}\` component as a child, which also benefits sighted users by adding visible context to the dialog.
|
|
1165
1165
|
|
|
@@ -69931,17 +69931,19 @@ function T3({ mapRef: e, dateRange: t }) {
|
|
|
69931
69931
|
}
|
|
69932
69932
|
if (K.getZoom() < 10) return;
|
|
69933
69933
|
const Ce = K.getBounds(), Ie = n.filter((Ne) => {
|
|
69934
|
-
if ($0(Ne.options)) return !1;
|
|
69934
|
+
if ($0(Ne.options) || !Ne.options.geometry) return !1;
|
|
69935
|
+
const je = za(Ne.options.geometry);
|
|
69936
|
+
if (!ge(je, Ce))
|
|
69937
|
+
return !1;
|
|
69935
69938
|
if (!Le) {
|
|
69936
|
-
const
|
|
69937
|
-
if (K.getLayer(
|
|
69939
|
+
const Ye = `croppedImageLayer-${Ne.options.properties.id}`;
|
|
69940
|
+
if (K.getLayer(Ye))
|
|
69938
69941
|
return console.log("PLOTS: Skipping plot with existing layer:", Ne.options.properties.id), !1;
|
|
69939
69942
|
}
|
|
69940
69943
|
return !0;
|
|
69941
69944
|
});
|
|
69942
69945
|
Ie.length > 0 && console.log(`PLOTS: Processing ${Ie.length} plots out of ${n.length} total`), Ie.forEach((Ne) => {
|
|
69943
|
-
|
|
69944
|
-
ge(je, Ce) && fe(Ne.options, {
|
|
69946
|
+
fe(Ne.options, {
|
|
69945
69947
|
dateRange: t,
|
|
69946
69948
|
accessToken: F,
|
|
69947
69949
|
map: K,
|
|
@@ -79805,7 +79807,7 @@ const t$e = ({ width: e = 24, height: t = 24, fill: n = "#000" }) => /* @__PURE_
|
|
|
79805
79807
|
/* @__PURE__ */ E.jsx("path", { d: "M25.6006,21.8008l-1.2012-1.6a9.001,9.001,0,0,0,0-14.4019l1.2012-1.6a11.002,11.002,0,0,1,0,17.6011Z" })
|
|
79806
79808
|
]
|
|
79807
79809
|
}
|
|
79808
|
-
), n$e = aU(() => import("./LazyModalContent-
|
|
79810
|
+
), n$e = aU(() => import("./LazyModalContent-cR858FvP.js"));
|
|
79809
79811
|
function r$e({
|
|
79810
79812
|
activePanel: e,
|
|
79811
79813
|
togglePanel: t,
|