datastake-daf 0.6.811 → 0.6.813

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.
Files changed (57) hide show
  1. package/dist/components/index.js +1509 -379
  2. package/dist/hooks/index.js +11 -4
  3. package/dist/pages/index.js +138 -16
  4. package/dist/services/index.js +56 -6
  5. package/dist/utils/index.js +28 -5
  6. package/package.json +1 -1
  7. package/src/@daf/core/components/AuthForm/index.jsx +12 -3
  8. package/src/@daf/core/components/Dashboard/Widget/FaunaWidget/index.jsx +1 -2
  9. package/src/@daf/core/components/Screens/Admin/AdminDashboard/components/UserStatistics/TopContributors/index.jsx +0 -1
  10. package/src/@daf/core/components/Screens/Admin/AdminDashboard/components/UserStatistics/UserGrowth/hook.js +0 -1
  11. package/src/@daf/core/components/Screens/Admin/AdminDashboard/components/UserStatistics/UserGrowth/index.jsx +1 -3
  12. package/src/@daf/core/components/Screens/Admin/AdminModals/CombineLocation/index.jsx +51 -51
  13. package/src/@daf/core/components/Screens/Admin/AdminModals/CombineSubjects/index.jsx +6 -1
  14. package/src/@daf/core/components/Screens/Admin/AdminModals/NewAccount/index.jsx +56 -31
  15. package/src/@daf/core/components/Screens/Admin/AdminModals/NewUser/index.jsx +36 -10
  16. package/src/@daf/core/components/Screens/Admin/AdminModals/TransferRights/index.jsx +1 -1
  17. package/src/@daf/core/components/Screens/Admin/AdminScreens/Accounts.jsx +37 -10
  18. package/src/@daf/core/components/Screens/Admin/AdminScreens/Dashboard.jsx +2 -2
  19. package/src/@daf/core/components/Screens/Admin/AdminScreens/Documents.jsx +81 -0
  20. package/src/@daf/core/components/Screens/Admin/AdminScreens/Events.jsx +77 -0
  21. package/src/@daf/core/components/Screens/Admin/AdminScreens/index.js +2 -0
  22. package/src/@daf/core/components/Screens/Admin/AdminTables/AccountTable/helper.js +22 -30
  23. package/src/@daf/core/components/Screens/Admin/AdminTables/AccountTable/index.jsx +25 -13
  24. package/src/@daf/core/components/Screens/Admin/AdminTables/DocumentsTable/column.js +127 -0
  25. package/src/@daf/core/components/Screens/Admin/AdminTables/DocumentsTable/helper.js +43 -0
  26. package/src/@daf/core/components/Screens/Admin/AdminTables/DocumentsTable/index.jsx +201 -0
  27. package/src/@daf/core/components/Screens/Admin/AdminTables/EventsTable/column.js +146 -0
  28. package/src/@daf/core/components/Screens/Admin/AdminTables/EventsTable/helper.js +58 -0
  29. package/src/@daf/core/components/Screens/Admin/AdminTables/EventsTable/index.jsx +176 -0
  30. package/src/@daf/core/components/Screens/Admin/AdminTables/LocationTable/index.jsx +17 -2
  31. package/src/@daf/core/components/Screens/Admin/AdminTables/SubjectsTable/index.jsx +27 -13
  32. package/src/@daf/core/components/Screens/Admin/AdminTables/UserTable/index.jsx +0 -1
  33. package/src/@daf/core/components/Screens/Admin/AdminTables/components/index.jsx +4 -2
  34. package/src/@daf/core/components/Screens/Admin/AdminTables/hook.js +3 -0
  35. package/src/@daf/core/components/Screens/Admin/AdminViews/components/Edit/index.jsx +12 -9
  36. package/src/@daf/core/components/Screens/Admin/AdminViews/components/Users/index.jsx +16 -4
  37. package/src/@daf/core/components/Screens/Admin/AdminViews/components/View/helpers.js +9 -17
  38. package/src/@daf/core/components/Screens/Admin/AdminViews/index.jsx +9 -8
  39. package/src/@daf/core/components/Screens/Admin/AppInvitation/index.jsx +124 -99
  40. package/src/@daf/core/components/Screens/Admin/adminRoutes.js +48 -1
  41. package/src/@daf/hooks/useAdminDashboard.js +7 -4
  42. package/src/@daf/pages/Summary/Activities/Monitoring/components/BiodiversityAndHabitat/index.jsx +2 -2
  43. package/src/@daf/pages/Summary/Activities/Monitoring/helper.js +24 -0
  44. package/src/@daf/pages/View/hooks/useViewActions.js +13 -0
  45. package/src/@daf/pages/View/hooks/useViewPermissions.js +16 -0
  46. package/src/@daf/pages/View/index.jsx +29 -4
  47. package/src/@daf/services/AdminService.js +47 -5
  48. package/src/@daf/services/DashboardService.js +3 -3
  49. package/src/@daf/utils/filters.js +13 -15
  50. package/src/constants/locales/en/translation.js +13 -0
  51. package/src/helpers/copyToClipboard.js +60 -0
  52. package/build/favicon.ico +0 -0
  53. package/build/logo192.png +0 -0
  54. package/build/logo512.png +0 -0
  55. package/build/manifest.json +0 -25
  56. package/build/robots.txt +0 -3
  57. package/dist/style/datastake/mapbox-gl.css +0 -330
@@ -9,13 +9,13 @@ class DashboardService extends BaseService {
9
9
  isApp: true,
10
10
  });
11
11
  }
12
-
13
- getUserGrowth(activeFilter) {
14
- return this.apiGet({
12
+ async getUserGrowth(activeFilter) {
13
+ const { data } = await this.apiGet({
15
14
  url: `/accounts/dashboard/user-growth`,
16
15
  isUserManager: true,
17
16
  params: { activeFilter },
18
17
  });
18
+ return data;
19
19
  }
20
20
 
21
21
  getAdminDashboard() {
@@ -63,29 +63,19 @@ export const getDefaultActiveFilters = (
63
63
  };
64
64
 
65
65
  const NEW_PAGINATION_APPS = ["nashiriki"];
66
-
67
66
  export const filterParams = (value, module) => {
68
67
  const { activeFilters, ...rest } = value;
69
68
 
70
- const {
71
- page = 1,
72
- pageSize = 20,
73
- sortDir,
74
- sortBy,
75
- search,
76
- searchParams,
77
- ...filters
78
- } = activeFilters || {};
69
+ const { page, pageSize, sortDir, sortBy, search, searchParams, ...filters } =
70
+ activeFilters || {};
79
71
 
80
72
  const params = {};
81
-
73
+
82
74
  params.pagination = JSON.stringify({
83
- page,
84
- pageSize,
75
+ [NEW_PAGINATION_APPS.includes(module) ? "skip" : "page"]: page,
76
+ [NEW_PAGINATION_APPS.includes(module) ? "take" : "pageSize"]: pageSize,
85
77
  });
86
78
 
87
- params.filters = JSON.stringify(filters);
88
-
89
79
  if (search && searchParams) {
90
80
  params.search = JSON.stringify({
91
81
  qs: search,
@@ -100,6 +90,14 @@ export const filterParams = (value, module) => {
100
90
  });
101
91
  }
102
92
 
93
+ if (Object.keys(filters).length) {
94
+ if (value.sourceId && value.sourceId === "overview") {
95
+ params.filters = JSON.stringify(filters);
96
+ } else {
97
+ params.filters = JSON.stringify({ ...filters, authorId: undefined });
98
+ }
99
+ }
100
+
103
101
  return { ...rest, ...params };
104
102
  };
105
103
 
@@ -1,4 +1,17 @@
1
1
  const en = {
2
+ "admin::events": "Events",
3
+ "admin::document": "Documents",
4
+ "events": "Events",
5
+ "merge-locations": "Merge Locations",
6
+ "edit-account": "Edit Account",
7
+ "Are-you-sure-you-want-to-remove-the-user-from-this-account?": "Are you sure you want to remove the user from this account?",
8
+ "The-user-will-lose-access-to-the-application-and-to-all-data-created-for-this-account.": "The user will lose access to the application and to all data created for this account.",
9
+ "merge": "Merge",
10
+ "Are-you-sure-you-want-to-suspend-this-account?": "Are you sure you want to suspend this account?",
11
+ "Associated-users-will-lose-access-to-the-application-and-to-all-data-created-for-this-account.": "Associated users will lose access to the application and to all data created for this account.",
12
+ "current_subjects": "Current Subjects",
13
+ "merged_output": "Merged Output",
14
+ "merge-subjects": "Merge Subjects",
2
15
  "All Data": "All Data",
3
16
  "sbg-admin::remove-user-title":"Remove User Title",
4
17
  "sbg-admin::remove-user-body":"Remove User Body",
@@ -41,3 +41,63 @@ export const copyToClipboard = (id) => {
41
41
  }
42
42
  }
43
43
  }
44
+
45
+ /**
46
+ * Copies a string directly to the clipboard.
47
+ *
48
+ * This function takes a string and copies it to the clipboard.
49
+ * It handles browser compatibility issues between IE and modern browsers.
50
+ *
51
+ * @param {string} text - The string to copy to clipboard
52
+ * @returns {Promise<boolean>} - Returns true if copying succeeded, false otherwise
53
+ *
54
+ * @example
55
+ * copyStringToClipboard('Text to copy'); // Copies "Text to copy" to clipboard
56
+ */
57
+ export const copyStringToClipboard = async (text) => {
58
+ if (!text) {
59
+ console.warn("No text provided to copy");
60
+ return false;
61
+ }
62
+
63
+ // Try modern Clipboard API first
64
+ if (navigator.clipboard && navigator.clipboard.writeText) {
65
+ try {
66
+ await navigator.clipboard.writeText(text);
67
+ return true;
68
+ } catch (ex) {
69
+ console.warn("Clipboard API failed, trying fallback:", ex);
70
+ // Fall through to fallback methods
71
+ }
72
+ }
73
+
74
+ // Fallback for older browsers or when Clipboard API fails
75
+ if (window.clipboardData && window.clipboardData.setData) {
76
+ // IE: prevent textarea being shown while dialog is visible
77
+ return window.clipboardData.setData("Text", text);
78
+ } else if (document.queryCommandSupported &&
79
+ document.queryCommandSupported("copy")) {
80
+ var textarea = document.createElement("textarea");
81
+ textarea.textContent = text;
82
+ // Prevent scrolling to bottom of page in MS Edge
83
+ textarea.style.position = "fixed";
84
+ textarea.style.opacity = "0";
85
+ textarea.style.left = "-9999px";
86
+ document.body.appendChild(textarea);
87
+ textarea.select();
88
+ try {
89
+ // Security exception may be thrown by some browsers
90
+ const success = document.execCommand("copy");
91
+ return success;
92
+ } catch (ex) {
93
+ console.warn("Copy to clipboard failed.", ex);
94
+ return false;
95
+ } finally {
96
+ document.body.removeChild(textarea);
97
+ }
98
+ }
99
+
100
+ return false;
101
+ }
102
+
103
+
package/build/favicon.ico DELETED
Binary file
package/build/logo192.png DELETED
Binary file
package/build/logo512.png DELETED
Binary file
@@ -1,25 +0,0 @@
1
- {
2
- "short_name": "React App",
3
- "name": "Create React App Sample",
4
- "icons": [
5
- {
6
- "src": "favicon.ico",
7
- "sizes": "64x64 32x32 24x24 16x16",
8
- "type": "image/x-icon"
9
- },
10
- {
11
- "src": "logo192.png",
12
- "type": "image/png",
13
- "sizes": "192x192"
14
- },
15
- {
16
- "src": "logo512.png",
17
- "type": "image/png",
18
- "sizes": "512x512"
19
- }
20
- ],
21
- "start_url": ".",
22
- "display": "standalone",
23
- "theme_color": "#000000",
24
- "background_color": "#ffffff"
25
- }
package/build/robots.txt DELETED
@@ -1,3 +0,0 @@
1
- # https://www.robotstxt.org/robotstxt.html
2
- User-agent: *
3
- Disallow:
@@ -1,330 +0,0 @@
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
- }