datastake-daf 0.6.783 → 0.6.785
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/dist/components/index.js +78 -70
- package/dist/hooks/index.js +3 -1
- package/dist/pages/index.js +1082 -270
- package/dist/style/datastake/mapbox-gl.css +330 -0
- package/dist/utils/index.js +67 -0
- package/package.json +1 -1
- package/src/@daf/core/components/Charts/BarChart/index.jsx +1 -1
- package/src/@daf/core/components/Dashboard/Map/ChainIcon/utils.js +2 -2
- package/src/@daf/core/components/Screens/BaseScreen/index.jsx +1 -0
- package/src/@daf/core/components/Select/MultiSelect/index.jsx +4 -2
- package/src/@daf/core/components/Select/MultiSelect/style.js +15 -0
- package/src/@daf/hooks/useGetQueryParams.js +3 -1
- package/src/@daf/pages/Dashboards/UserDashboard/components/ContributionsGraph/hook.js +6 -7
- package/src/@daf/pages/Dashboards/UserDashboard/components/ContributionsGraph/index.jsx +1 -1
- package/src/@daf/pages/Documents/config.js +5 -5
- package/src/@daf/pages/Events/Activities/columns.js +5 -0
- package/src/@daf/pages/Events/Activities/config.js +21 -17
- package/src/@daf/pages/Events/Incidents/columns.js +5 -0
- package/src/@daf/pages/Events/Incidents/config.js +14 -11
- package/src/@daf/pages/Events/columns.js +6 -0
- package/src/@daf/pages/Events/config.js +0 -16
- package/src/@daf/pages/Locations/MineSite/columns.js +5 -1
- package/src/@daf/pages/Locations/MineSite/config.js +21 -24
- package/src/@daf/pages/Partners/columns.js +3 -1
- package/src/@daf/pages/Partners/config.js +13 -9
- package/src/@daf/pages/Partners/create.jsx +5 -2
- package/src/@daf/pages/Partners/edit.jsx +4 -2
- package/src/@daf/pages/Stakeholders/Operators/columns.js +6 -0
- package/src/@daf/pages/Stakeholders/Operators/config.js +8 -8
- package/src/@daf/pages/Stakeholders/Workers/columns.js +19 -13
- package/src/@daf/pages/Stakeholders/Workers/config.js +8 -23
- package/src/@daf/pages/Summary/Activities/MonitoringCampaign/components/KeyInformation/index.jsx +48 -0
- package/src/@daf/pages/Summary/Activities/MonitoringCampaign/components/MangroveGrowth/PlantedSpecies.jsx +73 -0
- package/src/@daf/pages/Summary/Activities/MonitoringCampaign/components/MangroveGrowth/SeedlingsHeight.jsx +44 -0
- package/src/@daf/pages/Summary/Activities/MonitoringCampaign/components/MangroveGrowth/Stats.jsx +86 -0
- package/src/@daf/pages/Summary/Activities/MonitoringCampaign/components/MangroveGrowth/VegetationHealth.jsx +73 -0
- package/src/@daf/pages/Summary/Activities/MonitoringCampaign/components/MangroveGrowth/index.jsx +92 -0
- package/src/@daf/pages/Summary/Activities/MonitoringCampaign/components/MonitoringScopeAndFindings/index.jsx +348 -0
- package/src/@daf/pages/Summary/Activities/MonitoringCampaign/config.js +35 -0
- package/src/@daf/pages/Summary/Activities/MonitoringCampaign/index.jsx +30 -0
- package/src/@daf/pages/Summary/Activities/PlantingCycle/components/CommunityParticipation/CommunityStats/helper.js +1 -1
- package/src/@daf/pages/Summary/Activities/PlantingCycle/components/CycleIndicators/index.jsx +1 -1
- package/src/@daf/pages/Summary/Activities/PlantingCycle/components/CycleOutcomes/index.jsx +1 -1
- package/src/@daf/pages/Summary/Activities/PlantingCycle/helper.js +0 -56
- package/src/@daf/pages/Summary/Minesite/index.jsx +6 -4
- package/src/@daf/pages/Summary/Operator/components/TradeRelationships/index.js +2 -0
- package/src/@daf/pages/Summary/Operator/index.jsx +6 -3
- package/src/@daf/pages/TablePage/index.jsx +8 -2
- package/src/@daf/pages/Template/components/LinkingTemplate/config.js +14 -1
- package/src/@daf/pages/Template/components/LinkingTemplate/index.jsx +4 -2
- package/src/@daf/pages/Template/index.jsx +1 -10
- package/src/@daf/pages/View/hooks/usePrepareForm.js +4 -4
- package/src/@daf/pages/View/index.jsx +2 -1
- package/src/@daf/utils/numbers.js +57 -0
- package/src/constants/locales/en/translation.js +3 -0
- package/src/constants/locales/fr/translation.js +3 -0
- package/src/constants/locales/sp/translation.js +3 -0
- package/src/pages.js +1 -0
- package/src/utils.js +1 -1
|
@@ -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/dist/utils/index.js
CHANGED
|
@@ -7752,6 +7752,9 @@ function getRedirectPath(user, fallback = '', app, isDatastake) {
|
|
|
7752
7752
|
}
|
|
7753
7753
|
|
|
7754
7754
|
const en = {
|
|
7755
|
+
"Site": "Site",
|
|
7756
|
+
"Production Sites": "Production Sites",
|
|
7757
|
+
"Type of account": "Type of account",
|
|
7755
7758
|
"accounts": "Accounts",
|
|
7756
7759
|
"users": "Users",
|
|
7757
7760
|
"subjects": "Subjects",
|
|
@@ -9070,6 +9073,9 @@ const en = {
|
|
|
9070
9073
|
};
|
|
9071
9074
|
|
|
9072
9075
|
const fr = {
|
|
9076
|
+
"Site": "Site",
|
|
9077
|
+
"Production Sites": "Sites de production",
|
|
9078
|
+
"Type of account": "Type de compte",
|
|
9073
9079
|
"accounts": "Comptes",
|
|
9074
9080
|
"users": "Utilisateurs",
|
|
9075
9081
|
"subjects": "Sujets",
|
|
@@ -11022,6 +11028,9 @@ const fr = {
|
|
|
11022
11028
|
};
|
|
11023
11029
|
|
|
11024
11030
|
const sp = {
|
|
11031
|
+
"Site": "Sitio",
|
|
11032
|
+
"Production Sites": "Centros de producción",
|
|
11033
|
+
"Type of account": "Tipo de cuenta",
|
|
11025
11034
|
"Identified Customers": "Clientes identificados",
|
|
11026
11035
|
"Identified Suppliers": "Proveedores identificados",
|
|
11027
11036
|
"Associated Mine Sites": "Sitios mineros asociados",
|
|
@@ -13125,6 +13134,63 @@ const renderPercentage = val => {
|
|
|
13125
13134
|
return val + "%";
|
|
13126
13135
|
};
|
|
13127
13136
|
|
|
13137
|
+
/**
|
|
13138
|
+
* Calculates stat change object for StatCard component based on current and previous values
|
|
13139
|
+
* @param {Object} data - Object with current and previous values
|
|
13140
|
+
* @param {number} data.current - Current value
|
|
13141
|
+
* @param {number} data.previous - Previous value
|
|
13142
|
+
* @param {Object} options - Optional configuration
|
|
13143
|
+
* @param {string} options.tooltipText - Custom tooltip text
|
|
13144
|
+
* @param {string} options.format - Format type: 'percentage' (default) or 'absolute'
|
|
13145
|
+
* @param {number} options.decimalPlaces - Number of decimal places for percentage (default: 1)
|
|
13146
|
+
* @returns {Object|null} Change object for StatCard or null if data is invalid
|
|
13147
|
+
*/
|
|
13148
|
+
const calculateStatChange = (data, options = {}) => {
|
|
13149
|
+
if (!data || typeof data !== 'object') {
|
|
13150
|
+
return null;
|
|
13151
|
+
}
|
|
13152
|
+
const {
|
|
13153
|
+
current,
|
|
13154
|
+
previous
|
|
13155
|
+
} = data;
|
|
13156
|
+
|
|
13157
|
+
// Validate that both values are numbers
|
|
13158
|
+
if (typeof current !== 'number' || typeof previous !== 'number') {
|
|
13159
|
+
return null;
|
|
13160
|
+
}
|
|
13161
|
+
|
|
13162
|
+
// If previous is 0, we can't calculate percentage change
|
|
13163
|
+
if (previous === 0) {
|
|
13164
|
+
return null;
|
|
13165
|
+
}
|
|
13166
|
+
const {
|
|
13167
|
+
tooltipText,
|
|
13168
|
+
format = 'percentage',
|
|
13169
|
+
decimalPlaces = 1
|
|
13170
|
+
} = options;
|
|
13171
|
+
|
|
13172
|
+
// Calculate the difference
|
|
13173
|
+
const difference = current - previous;
|
|
13174
|
+
const isPositive = difference >= 0;
|
|
13175
|
+
const direction = isPositive ? 'up' : 'down';
|
|
13176
|
+
|
|
13177
|
+
// Format the value
|
|
13178
|
+
let value;
|
|
13179
|
+
if (format === 'absolute') {
|
|
13180
|
+
// Show absolute difference
|
|
13181
|
+
value = Math.abs(difference).toLocaleString();
|
|
13182
|
+
} else {
|
|
13183
|
+
// Show percentage change
|
|
13184
|
+
const percentageChange = Math.abs(difference) / previous * 100;
|
|
13185
|
+
value = `${percentageChange.toFixed(decimalPlaces)}%`;
|
|
13186
|
+
}
|
|
13187
|
+
return {
|
|
13188
|
+
value,
|
|
13189
|
+
direction,
|
|
13190
|
+
tooltipText: tooltipText || undefined
|
|
13191
|
+
};
|
|
13192
|
+
};
|
|
13193
|
+
|
|
13128
13194
|
/**
|
|
13129
13195
|
* Enum for message types used with Ant Design message component
|
|
13130
13196
|
* @enum {string}
|
|
@@ -14899,6 +14965,7 @@ exports.buildBreadCrumbsHelper = buildBreadCrumbs;
|
|
|
14899
14965
|
exports.buildBreadcrumbs = buildBreadcrumbs;
|
|
14900
14966
|
exports.buildKeyIndicatorsConfig = buildKeyIndicatorsConfig;
|
|
14901
14967
|
exports.buildQueryString = buildQueryString;
|
|
14968
|
+
exports.calculateStatChange = calculateStatChange;
|
|
14902
14969
|
exports.camelCaseToTitle = camelCaseToTitle;
|
|
14903
14970
|
exports.capitalize = capitalize;
|
|
14904
14971
|
exports.capitalizeAll = capitalizeAll;
|
package/package.json
CHANGED
|
@@ -123,7 +123,7 @@ export default function BarChart({
|
|
|
123
123
|
},
|
|
124
124
|
}
|
|
125
125
|
: {}),
|
|
126
|
-
...xAxisConfig,
|
|
126
|
+
...(Object.keys(xAxisConfig).length > 0 ? xAxisConfig : {}),
|
|
127
127
|
label: {
|
|
128
128
|
formatter: isPercentage
|
|
129
129
|
? (v) => `${v}`.replace(/\d{1,3}(?=(\d{3})+$)/g, (s) => `${s},`) + " %"
|
|
@@ -117,13 +117,13 @@ export function getStakeholderPosition({ zoom, totalMarkers, markerIndex }) {
|
|
|
117
117
|
return { x, y, center, radius, angleDeg };
|
|
118
118
|
}
|
|
119
119
|
|
|
120
|
-
function applyAnimationDirect(el, isShortLink) {
|
|
120
|
+
function applyAnimationDirect(el, isShortLink, lineFlow = "downstream") {
|
|
121
121
|
if (!(el instanceof SVGElement) || isShortLink) return;
|
|
122
122
|
|
|
123
123
|
el.style.strokeDasharray = "10, 10";
|
|
124
124
|
el.style.strokeDashoffset = "0";
|
|
125
125
|
|
|
126
|
-
el.style.animation =
|
|
126
|
+
el.style.animation = `dash-flow 1.2s linear infinite ${lineFlow === "upstream" && "reverse"}`;
|
|
127
127
|
|
|
128
128
|
el.classList.add('animated-polyline');
|
|
129
129
|
}
|
|
@@ -4,6 +4,7 @@ import PropTypes from "prop-types";
|
|
|
4
4
|
import { Avatar, Checkbox } from "antd";
|
|
5
5
|
import { theme } from "antd";
|
|
6
6
|
import React from "react";
|
|
7
|
+
import MultiSelectStyled from "./style";
|
|
7
8
|
const { useToken } = theme;
|
|
8
9
|
|
|
9
10
|
/**
|
|
@@ -163,7 +164,7 @@ export default function Multiselect({
|
|
|
163
164
|
};
|
|
164
165
|
|
|
165
166
|
return (
|
|
166
|
-
<
|
|
167
|
+
<MultiSelectStyled
|
|
167
168
|
mode={isSingle ? undefined : "multiple"}
|
|
168
169
|
value={selectValue}
|
|
169
170
|
onChange={onSelectChange}
|
|
@@ -231,6 +232,7 @@ export default function Multiselect({
|
|
|
231
232
|
display: "flex",
|
|
232
233
|
alignItems: "center",
|
|
233
234
|
justifyContent: "center",
|
|
235
|
+
padding: 0,
|
|
234
236
|
}}
|
|
235
237
|
>
|
|
236
238
|
{option?.avatar || getFirstChar(option?.label)}
|
|
@@ -289,7 +291,7 @@ export default function Multiselect({
|
|
|
289
291
|
}
|
|
290
292
|
}}
|
|
291
293
|
{...restProps}
|
|
292
|
-
></
|
|
294
|
+
></MultiSelectStyled>
|
|
293
295
|
);
|
|
294
296
|
}
|
|
295
297
|
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import styled from 'styled-components';
|
|
2
|
+
import { Select } from 'antd';
|
|
3
|
+
|
|
4
|
+
const MultiSelectStyled = styled(Select)`
|
|
5
|
+
&.ant-select-single {
|
|
6
|
+
.ant-select-selector {
|
|
7
|
+
padding-inline-end: 24px !important;
|
|
8
|
+
padding: 0 !important;
|
|
9
|
+
max-width: 56px !important;
|
|
10
|
+
width: 56px !important;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
`;
|
|
14
|
+
|
|
15
|
+
export default MultiSelectStyled;
|
|
@@ -12,6 +12,7 @@ export const useContributionsGraph = ({
|
|
|
12
12
|
}, [data, t]);
|
|
13
13
|
|
|
14
14
|
const isEmpty = useMemo(() => _data?.length === 0, [_data]);
|
|
15
|
+
console.log({_data, isEmpty})
|
|
15
16
|
|
|
16
17
|
const chartConfig = useMemo(() => {
|
|
17
18
|
return {
|
|
@@ -20,13 +21,11 @@ export const useContributionsGraph = ({
|
|
|
20
21
|
yFieldKey: "category",
|
|
21
22
|
seriesField: "type",
|
|
22
23
|
isGroup: true,
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
}
|
|
29
|
-
}),
|
|
24
|
+
xAxisConfig: isEmpty ? {
|
|
25
|
+
min: 0,
|
|
26
|
+
max: 10,
|
|
27
|
+
tickCount: 5,
|
|
28
|
+
} : {},
|
|
30
29
|
renderTooltipContent: (title, items) => {
|
|
31
30
|
const tooltipItems = items.map((item) => ({
|
|
32
31
|
label: item.name,
|
|
@@ -41,7 +41,7 @@ function ContributionsGraph({
|
|
|
41
41
|
title={t("Contributions")}
|
|
42
42
|
className="with-border-header h-w-btn-header no-px-body"
|
|
43
43
|
>
|
|
44
|
-
<BarChart {...chartConfig} height="400px" t={t} />
|
|
44
|
+
<BarChart {...chartConfig} height="400px" t={t} key={data?.length} />
|
|
45
45
|
</Widget>
|
|
46
46
|
)
|
|
47
47
|
}
|
|
@@ -14,6 +14,8 @@ export const getColumns = ({t, goTo, user, options, activeTab, getRedirectLink,
|
|
|
14
14
|
title: t('ID'),
|
|
15
15
|
ellipsis: true,
|
|
16
16
|
show: true,
|
|
17
|
+
key: "datastakeId",
|
|
18
|
+
sorter: () => 0 + 0,
|
|
17
19
|
render: (v, all) => {
|
|
18
20
|
if (all.empty) {
|
|
19
21
|
return <div className="daf-default-cell" />
|
|
@@ -27,6 +29,8 @@ export const getColumns = ({t, goTo, user, options, activeTab, getRedirectLink,
|
|
|
27
29
|
title: t('Title'),
|
|
28
30
|
ellipsis: true,
|
|
29
31
|
show: true,
|
|
32
|
+
key: "name",
|
|
33
|
+
sorter: () => 0 + 0,
|
|
30
34
|
render: (v, all) => {
|
|
31
35
|
if (all.empty) {
|
|
32
36
|
return <div className="daf-default-cell" />
|
|
@@ -39,6 +43,7 @@ export const getColumns = ({t, goTo, user, options, activeTab, getRedirectLink,
|
|
|
39
43
|
title: t("Date"),
|
|
40
44
|
dataIndex: "date",
|
|
41
45
|
key: "date",
|
|
46
|
+
sorter: () => 0 + 0,
|
|
42
47
|
render: (date, all) => {
|
|
43
48
|
if (all.empty) {
|
|
44
49
|
return <div className="daf-default-cell" />;
|