datastake-daf 0.6.837 → 0.6.838
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/build/favicon.ico +0 -0
- package/build/logo192.png +0 -0
- package/build/logo512.png +0 -0
- package/build/manifest.json +25 -0
- package/build/robots.txt +3 -0
- package/dist/components/index.js +1541 -1671
- package/dist/hooks/index.js +16 -3
- package/dist/pages/index.js +17 -4
- package/dist/style/datastake/mapbox-gl.css +330 -0
- package/package.json +1 -1
- package/src/@daf/hooks/useWidgetFetch.js +20 -7
- package/src/@daf/pages/Summary/Activities/PlantingCycle/components/PlantingLocations/index.jsx +5 -5
package/dist/hooks/index.js
CHANGED
|
@@ -2307,6 +2307,8 @@ const useWidgetFetch = ({
|
|
|
2307
2307
|
} = config;
|
|
2308
2308
|
const [data, setData] = React.useState(defaultData || {});
|
|
2309
2309
|
const [loading, setLoading] = React.useState(false);
|
|
2310
|
+
const [initFetchDone, setInitFetchDone] = React.useState(false);
|
|
2311
|
+
const isMounted = React.useRef(true);
|
|
2310
2312
|
const fetchData = async () => {
|
|
2311
2313
|
if (stop) {
|
|
2312
2314
|
return;
|
|
@@ -2316,6 +2318,7 @@ const useWidgetFetch = ({
|
|
|
2316
2318
|
const {
|
|
2317
2319
|
data
|
|
2318
2320
|
} = await getData(rest);
|
|
2321
|
+
if (!isMounted.current) return;
|
|
2319
2322
|
setData(data || defaultData);
|
|
2320
2323
|
if (isErrorResponse(data)) {
|
|
2321
2324
|
const errorMessage = getErrorMessage(data);
|
|
@@ -2323,18 +2326,28 @@ const useWidgetFetch = ({
|
|
|
2323
2326
|
return;
|
|
2324
2327
|
}
|
|
2325
2328
|
onFetch();
|
|
2329
|
+
setInitFetchDone(true);
|
|
2326
2330
|
} catch (err) {
|
|
2327
2331
|
console.log(err);
|
|
2328
2332
|
}
|
|
2329
|
-
|
|
2333
|
+
if (isMounted.current) {
|
|
2334
|
+
setLoading(false);
|
|
2335
|
+
}
|
|
2330
2336
|
};
|
|
2337
|
+
React.useEffect(() => {
|
|
2338
|
+
isMounted.current = true;
|
|
2339
|
+
return () => {
|
|
2340
|
+
isMounted.current = false;
|
|
2341
|
+
};
|
|
2342
|
+
}, []);
|
|
2331
2343
|
React.useEffect(() => {
|
|
2332
2344
|
fetchData();
|
|
2333
|
-
}, [JSON.stringify(
|
|
2345
|
+
}, [JSON.stringify(config)]);
|
|
2334
2346
|
return {
|
|
2335
2347
|
data,
|
|
2336
2348
|
loading,
|
|
2337
|
-
setData
|
|
2349
|
+
setData,
|
|
2350
|
+
initFetchDone
|
|
2338
2351
|
};
|
|
2339
2352
|
};
|
|
2340
2353
|
|
package/dist/pages/index.js
CHANGED
|
@@ -7506,6 +7506,8 @@ const useWidgetFetch = ({
|
|
|
7506
7506
|
} = config;
|
|
7507
7507
|
const [data, setData] = React.useState(defaultData || {});
|
|
7508
7508
|
const [loading, setLoading] = React.useState(false);
|
|
7509
|
+
const [initFetchDone, setInitFetchDone] = React.useState(false);
|
|
7510
|
+
const isMounted = React.useRef(true);
|
|
7509
7511
|
const fetchData = async () => {
|
|
7510
7512
|
if (stop) {
|
|
7511
7513
|
return;
|
|
@@ -7515,6 +7517,7 @@ const useWidgetFetch = ({
|
|
|
7515
7517
|
const {
|
|
7516
7518
|
data
|
|
7517
7519
|
} = await getData(rest);
|
|
7520
|
+
if (!isMounted.current) return;
|
|
7518
7521
|
setData(data || defaultData);
|
|
7519
7522
|
if (isErrorResponse(data)) {
|
|
7520
7523
|
const errorMessage = getErrorMessage(data);
|
|
@@ -7522,18 +7525,28 @@ const useWidgetFetch = ({
|
|
|
7522
7525
|
return;
|
|
7523
7526
|
}
|
|
7524
7527
|
onFetch();
|
|
7528
|
+
setInitFetchDone(true);
|
|
7525
7529
|
} catch (err) {
|
|
7526
7530
|
console.log(err);
|
|
7527
7531
|
}
|
|
7528
|
-
|
|
7532
|
+
if (isMounted.current) {
|
|
7533
|
+
setLoading(false);
|
|
7534
|
+
}
|
|
7529
7535
|
};
|
|
7536
|
+
React.useEffect(() => {
|
|
7537
|
+
isMounted.current = true;
|
|
7538
|
+
return () => {
|
|
7539
|
+
isMounted.current = false;
|
|
7540
|
+
};
|
|
7541
|
+
}, []);
|
|
7530
7542
|
React.useEffect(() => {
|
|
7531
7543
|
fetchData();
|
|
7532
|
-
}, [JSON.stringify(
|
|
7544
|
+
}, [JSON.stringify(config)]);
|
|
7533
7545
|
return {
|
|
7534
7546
|
data,
|
|
7535
7547
|
loading,
|
|
7536
|
-
setData
|
|
7548
|
+
setData,
|
|
7549
|
+
initFetchDone
|
|
7537
7550
|
};
|
|
7538
7551
|
};
|
|
7539
7552
|
|
|
@@ -55561,7 +55574,7 @@ const PlantingLocations = ({
|
|
|
55561
55574
|
return eventsWithGPS.map((event, index) => {
|
|
55562
55575
|
const locationCheckArrival = event.locationCheckArrival;
|
|
55563
55576
|
const matchingLocation = locations.find(location => locationCheckArrival.name === location.name || locationCheckArrival._id === location.id || location.id === locationCheckArrival._id) || locations[0];
|
|
55564
|
-
const area = matchingLocation?.perimeter ? matchingLocation.perimeter.map(coord => Array.isArray(coord) && coord.length >= 2 ? [coord[
|
|
55577
|
+
const area = matchingLocation?.perimeter ? matchingLocation.perimeter.map(coord => Array.isArray(coord) && coord.length >= 2 ? [coord[0], coord[1]] : coord) : null;
|
|
55565
55578
|
|
|
55566
55579
|
// Only include area if it has at least 3 valid coordinates
|
|
55567
55580
|
const validArea = area && Array.isArray(area) && area.length >= 3 ? area : null;
|
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
/* Isolated Mapbox GL CSS - Scoped to prevent Leaflet conflicts */
|
|
2
|
+
|
|
3
|
+
/* Mapbox GL Core Styles - Scoped with .mapbox-gl-scope */
|
|
4
|
+
.mapbox-gl-scope .mapboxgl-map {
|
|
5
|
+
font: 12px/20px Helvetica Neue, Arial, Helvetica, sans-serif;
|
|
6
|
+
overflow: hidden;
|
|
7
|
+
position: relative;
|
|
8
|
+
-webkit-tap-highlight-color: rgb(0 0 0/0);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.mapbox-gl-scope .mapboxgl-canvas {
|
|
12
|
+
left: 0;
|
|
13
|
+
position: absolute;
|
|
14
|
+
top: 0;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.mapbox-gl-scope .mapboxgl-map:-webkit-full-screen {
|
|
18
|
+
height: 100%;
|
|
19
|
+
width: 100%;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.mapbox-gl-scope .mapboxgl-canary {
|
|
23
|
+
background-color: salmon;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.mapbox-gl-scope .mapboxgl-canvas-container.mapboxgl-interactive,
|
|
27
|
+
.mapbox-gl-scope .mapboxgl-ctrl-group button.mapboxgl-ctrl-compass {
|
|
28
|
+
cursor: grab;
|
|
29
|
+
-webkit-user-select: none;
|
|
30
|
+
user-select: none;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.mapbox-gl-scope .mapboxgl-canvas-container.mapboxgl-interactive.mapboxgl-track-pointer {
|
|
34
|
+
cursor: pointer;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.mapbox-gl-scope .mapboxgl-canvas-container.mapboxgl-interactive:active,
|
|
38
|
+
.mapbox-gl-scope .mapboxgl-ctrl-group button.mapboxgl-ctrl-compass:active {
|
|
39
|
+
cursor: grabbing;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.mapbox-gl-scope .mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate,
|
|
43
|
+
.mapbox-gl-scope .mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate .mapboxgl-canvas {
|
|
44
|
+
touch-action: pan-x pan-y;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.mapbox-gl-scope .mapboxgl-canvas-container.mapboxgl-touch-drag-pan,
|
|
48
|
+
.mapbox-gl-scope .mapboxgl-canvas-container.mapboxgl-touch-drag-pan .mapboxgl-canvas {
|
|
49
|
+
touch-action: pinch-zoom;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.mapbox-gl-scope .mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate.mapboxgl-touch-drag-pan,
|
|
53
|
+
.mapbox-gl-scope .mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate.mapboxgl-touch-drag-pan .mapboxgl-canvas {
|
|
54
|
+
touch-action: none;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/* Control positioning */
|
|
58
|
+
.mapbox-gl-scope .mapboxgl-ctrl-bottom,
|
|
59
|
+
.mapbox-gl-scope .mapboxgl-ctrl-bottom-left,
|
|
60
|
+
.mapbox-gl-scope .mapboxgl-ctrl-bottom-right,
|
|
61
|
+
.mapbox-gl-scope .mapboxgl-ctrl-left,
|
|
62
|
+
.mapbox-gl-scope .mapboxgl-ctrl-right,
|
|
63
|
+
.mapbox-gl-scope .mapboxgl-ctrl-top,
|
|
64
|
+
.mapbox-gl-scope .mapboxgl-ctrl-top-left,
|
|
65
|
+
.mapbox-gl-scope .mapboxgl-ctrl-top-right {
|
|
66
|
+
pointer-events: none;
|
|
67
|
+
position: absolute;
|
|
68
|
+
z-index: 2;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.mapbox-gl-scope .mapboxgl-ctrl-top-left {
|
|
72
|
+
left: 0;
|
|
73
|
+
top: 0;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.mapbox-gl-scope .mapboxgl-ctrl-top {
|
|
77
|
+
left: 50%;
|
|
78
|
+
top: 0;
|
|
79
|
+
transform: translateX(-50%);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.mapbox-gl-scope .mapboxgl-ctrl-top-right {
|
|
83
|
+
right: 0;
|
|
84
|
+
top: 0;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.mapbox-gl-scope .mapboxgl-ctrl-right {
|
|
88
|
+
right: 0;
|
|
89
|
+
top: 50%;
|
|
90
|
+
transform: translateY(-50%);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.mapbox-gl-scope .mapboxgl-ctrl-bottom-right {
|
|
94
|
+
bottom: 0;
|
|
95
|
+
right: 0;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.mapbox-gl-scope .mapboxgl-ctrl-bottom {
|
|
99
|
+
bottom: 0;
|
|
100
|
+
left: 50%;
|
|
101
|
+
transform: translateX(-50%);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.mapbox-gl-scope .mapboxgl-ctrl-bottom-left {
|
|
105
|
+
bottom: 0;
|
|
106
|
+
left: 0;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.mapbox-gl-scope .mapboxgl-ctrl-left {
|
|
110
|
+
left: 0;
|
|
111
|
+
top: 50%;
|
|
112
|
+
transform: translateY(-50%);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.mapbox-gl-scope .mapboxgl-ctrl {
|
|
116
|
+
clear: both;
|
|
117
|
+
pointer-events: auto;
|
|
118
|
+
transform: translate(0);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.mapbox-gl-scope .mapboxgl-ctrl-top-left .mapboxgl-ctrl {
|
|
122
|
+
float: left;
|
|
123
|
+
margin: 10px 0 0 10px;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
.mapbox-gl-scope .mapboxgl-ctrl-top .mapboxgl-ctrl {
|
|
127
|
+
float: left;
|
|
128
|
+
margin: 10px 0;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.mapbox-gl-scope .mapboxgl-ctrl-top-right .mapboxgl-ctrl {
|
|
132
|
+
float: right;
|
|
133
|
+
margin: 10px 10px 0 0;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.mapbox-gl-scope .mapboxgl-ctrl-bottom-right .mapboxgl-ctrl,
|
|
137
|
+
.mapbox-gl-scope .mapboxgl-ctrl-right .mapboxgl-ctrl {
|
|
138
|
+
float: right;
|
|
139
|
+
margin: 0 10px 10px 0;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
.mapbox-gl-scope .mapboxgl-ctrl-bottom .mapboxgl-ctrl {
|
|
143
|
+
float: left;
|
|
144
|
+
margin: 10px 0;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.mapbox-gl-scope .mapboxgl-ctrl-bottom-left .mapboxgl-ctrl,
|
|
148
|
+
.mapbox-gl-scope .mapboxgl-ctrl-left .mapboxgl-ctrl {
|
|
149
|
+
float: left;
|
|
150
|
+
margin: 0 0 10px 10px;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/* Control group styling */
|
|
154
|
+
.mapbox-gl-scope .mapboxgl-ctrl-group {
|
|
155
|
+
background: #fff;
|
|
156
|
+
border-radius: 4px;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.mapbox-gl-scope .mapboxgl-ctrl-group:not(:empty) {
|
|
160
|
+
box-shadow: 0 0 0 2px #0000001a;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
.mapbox-gl-scope .mapboxgl-ctrl-group button {
|
|
164
|
+
background-color: initial;
|
|
165
|
+
border: 0;
|
|
166
|
+
box-sizing: border-box;
|
|
167
|
+
cursor: pointer;
|
|
168
|
+
display: block;
|
|
169
|
+
height: 29px;
|
|
170
|
+
outline: none;
|
|
171
|
+
overflow: hidden;
|
|
172
|
+
padding: 0;
|
|
173
|
+
width: 29px;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
.mapbox-gl-scope .mapboxgl-ctrl-group button+button {
|
|
177
|
+
border-top: 1px solid #ddd;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
.mapbox-gl-scope .mapboxgl-ctrl button .mapboxgl-ctrl-icon {
|
|
181
|
+
background-position: 50%;
|
|
182
|
+
background-repeat: no-repeat;
|
|
183
|
+
display: block;
|
|
184
|
+
height: 100%;
|
|
185
|
+
width: 100%;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
.mapbox-gl-scope .mapboxgl-ctrl-attrib-button:focus,
|
|
189
|
+
.mapbox-gl-scope .mapboxgl-ctrl-group button:focus {
|
|
190
|
+
box-shadow: 0 0 2px 2px #0096ff;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
.mapbox-gl-scope .mapboxgl-ctrl button:disabled {
|
|
194
|
+
cursor: not-allowed;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
.mapbox-gl-scope .mapboxgl-ctrl button:disabled .mapboxgl-ctrl-icon {
|
|
198
|
+
opacity: .25;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
.mapbox-gl-scope .mapboxgl-ctrl-group button:first-child {
|
|
202
|
+
border-radius: 4px 4px 0 0;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
.mapbox-gl-scope .mapboxgl-ctrl-group button:last-child {
|
|
206
|
+
border-radius: 0 0 4px 4px;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
.mapbox-gl-scope .mapboxgl-ctrl-group button:only-child {
|
|
210
|
+
border-radius: inherit;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
.mapbox-gl-scope .mapboxgl-ctrl button:not(:disabled):hover {
|
|
214
|
+
background-color: #0000000d;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/* Marker styles */
|
|
218
|
+
.mapbox-gl-scope .mapboxgl-marker {
|
|
219
|
+
position: absolute;
|
|
220
|
+
z-index: 1;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
.mapbox-gl-scope .mapboxgl-marker svg {
|
|
224
|
+
display: block;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/* Popup styles */
|
|
228
|
+
.mapbox-gl-scope .mapboxgl-popup {
|
|
229
|
+
position: absolute;
|
|
230
|
+
text-align: center;
|
|
231
|
+
margin-bottom: 20px;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
.mapbox-gl-scope .mapboxgl-popup-content-wrapper {
|
|
235
|
+
padding: 1px;
|
|
236
|
+
text-align: left;
|
|
237
|
+
border-radius: 12px;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
.mapbox-gl-scope .mapboxgl-popup-content {
|
|
241
|
+
margin: 13px 24px 13px 20px;
|
|
242
|
+
line-height: 1.3;
|
|
243
|
+
font-size: 13px;
|
|
244
|
+
min-height: 1px;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
.mapbox-gl-scope .mapboxgl-popup-content p {
|
|
248
|
+
margin: 17px 0;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
.mapbox-gl-scope .mapboxgl-popup-tip-container {
|
|
252
|
+
width: 40px;
|
|
253
|
+
height: 20px;
|
|
254
|
+
position: absolute;
|
|
255
|
+
left: 50%;
|
|
256
|
+
margin-top: -1px;
|
|
257
|
+
margin-left: -20px;
|
|
258
|
+
overflow: hidden;
|
|
259
|
+
pointer-events: none;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
.mapbox-gl-scope .mapboxgl-popup-tip {
|
|
263
|
+
width: 17px;
|
|
264
|
+
height: 17px;
|
|
265
|
+
padding: 1px;
|
|
266
|
+
margin: -10px auto 0;
|
|
267
|
+
pointer-events: auto;
|
|
268
|
+
-webkit-transform: rotate(45deg);
|
|
269
|
+
-moz-transform: rotate(45deg);
|
|
270
|
+
-ms-transform: rotate(45deg);
|
|
271
|
+
transform: rotate(45deg);
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
.mapbox-gl-scope .mapboxgl-popup-content-wrapper,
|
|
275
|
+
.mapbox-gl-scope .mapboxgl-popup-tip {
|
|
276
|
+
background: white;
|
|
277
|
+
color: #333;
|
|
278
|
+
box-shadow: 0 3px 14px rgba(0, 0, 0, 0.4);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
.mapbox-gl-scope .mapboxgl-popup-close-button {
|
|
282
|
+
position: absolute;
|
|
283
|
+
top: 0;
|
|
284
|
+
right: 0;
|
|
285
|
+
border: none;
|
|
286
|
+
text-align: center;
|
|
287
|
+
width: 24px;
|
|
288
|
+
height: 24px;
|
|
289
|
+
font: 16px/24px Tahoma, Verdana, sans-serif;
|
|
290
|
+
color: #757575;
|
|
291
|
+
text-decoration: none;
|
|
292
|
+
background: transparent;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
.mapbox-gl-scope .mapboxgl-popup-close-button:hover,
|
|
296
|
+
.mapbox-gl-scope .mapboxgl-popup-close-button:focus {
|
|
297
|
+
color: #585858;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/* Attribution */
|
|
301
|
+
.mapbox-gl-scope .mapboxgl-ctrl-attribution {
|
|
302
|
+
background: #fff;
|
|
303
|
+
background: rgba(255, 255, 255, 0.8);
|
|
304
|
+
margin: 0;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
.mapbox-gl-scope .mapboxgl-ctrl-attribution,
|
|
308
|
+
.mapbox-gl-scope .mapboxgl-ctrl-scale-line {
|
|
309
|
+
padding: 0 5px;
|
|
310
|
+
color: #333;
|
|
311
|
+
line-height: 1.4;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
.mapbox-gl-scope .mapboxgl-ctrl-attribution a {
|
|
315
|
+
text-decoration: none;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
.mapbox-gl-scope .mapboxgl-ctrl-attribution a:hover,
|
|
319
|
+
.mapbox-gl-scope .mapboxgl-ctrl-attribution a:focus {
|
|
320
|
+
text-decoration: underline;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/* Hide attribution by default */
|
|
324
|
+
.mapbox-gl-scope .mapboxgl-ctrl-attribution {
|
|
325
|
+
display: none !important;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
.mapbox-gl-scope .mapboxgl-ctrl-logo {
|
|
329
|
+
display: none !important;
|
|
330
|
+
}
|
package/package.json
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useState, useEffect } from "react";
|
|
1
|
+
import { useState, useEffect, useRef } from "react";
|
|
2
2
|
import DashboardService from "../services/DashboardService.js";
|
|
3
3
|
import { isErrorResponse, getErrorMessage } from "../../helpers/errorHandling.js";
|
|
4
4
|
import { message } from "antd";
|
|
@@ -15,7 +15,8 @@ export const useWidgetFetch = ({config, getData = DashboardService.getWidget, on
|
|
|
15
15
|
const { stop, defaultData, ...rest} = config;
|
|
16
16
|
const [ data, setData ] = useState(defaultData || {});
|
|
17
17
|
const [ loading, setLoading ] = useState(false);
|
|
18
|
-
|
|
18
|
+
const [ initFetchDone, setInitFetchDone ] = useState(false);
|
|
19
|
+
const isMounted = useRef(true);
|
|
19
20
|
|
|
20
21
|
const fetchData = async () => {
|
|
21
22
|
if (stop) {
|
|
@@ -26,27 +27,39 @@ export const useWidgetFetch = ({config, getData = DashboardService.getWidget, on
|
|
|
26
27
|
|
|
27
28
|
try {
|
|
28
29
|
const { data } = await getData(rest);
|
|
30
|
+
if (!isMounted.current) return;
|
|
29
31
|
setData(data || defaultData);
|
|
30
32
|
if (isErrorResponse(data)) {
|
|
31
33
|
const errorMessage = getErrorMessage(data);
|
|
32
34
|
message.error(errorMessage);
|
|
33
35
|
return;
|
|
34
36
|
}
|
|
35
|
-
onFetch()
|
|
37
|
+
onFetch();
|
|
38
|
+
setInitFetchDone(true);
|
|
36
39
|
} catch (err) {
|
|
37
40
|
console.log(err);
|
|
38
41
|
}
|
|
39
42
|
|
|
40
|
-
|
|
43
|
+
if (isMounted.current) {
|
|
44
|
+
setLoading(false);
|
|
45
|
+
}
|
|
41
46
|
};
|
|
42
47
|
|
|
43
48
|
useEffect(() => {
|
|
44
|
-
|
|
45
|
-
|
|
49
|
+
isMounted.current = true;
|
|
50
|
+
return () => {
|
|
51
|
+
isMounted.current = false;
|
|
52
|
+
};
|
|
53
|
+
}, []);
|
|
54
|
+
|
|
55
|
+
useEffect(() => {
|
|
56
|
+
fetchData();
|
|
57
|
+
}, [JSON.stringify(config)]);
|
|
46
58
|
|
|
47
59
|
return {
|
|
48
60
|
data,
|
|
49
61
|
loading,
|
|
50
|
-
setData
|
|
62
|
+
setData,
|
|
63
|
+
initFetchDone
|
|
51
64
|
}
|
|
52
65
|
}
|
package/src/@daf/pages/Summary/Activities/PlantingCycle/components/PlantingLocations/index.jsx
CHANGED
|
@@ -64,11 +64,11 @@ const PlantingLocations = ({
|
|
|
64
64
|
) || locations[0];
|
|
65
65
|
|
|
66
66
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
67
|
+
const area = matchingLocation?.perimeter ? matchingLocation.perimeter.map(coord =>
|
|
68
|
+
Array.isArray(coord) && coord.length >= 2
|
|
69
|
+
? [coord[0], coord[1]]
|
|
70
|
+
: coord
|
|
71
|
+
) : null;
|
|
72
72
|
|
|
73
73
|
// Only include area if it has at least 3 valid coordinates
|
|
74
74
|
const validArea = area && Array.isArray(area) && area.length >= 3 ? area : null;
|