datastake-daf 0.6.813 → 0.6.815

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 (70) hide show
  1. package/build/favicon.ico +0 -0
  2. package/build/logo192.png +0 -0
  3. package/build/logo512.png +0 -0
  4. package/build/manifest.json +25 -0
  5. package/build/robots.txt +3 -0
  6. package/dist/components/index.js +3181 -4417
  7. package/dist/hooks/index.js +4 -11
  8. package/dist/layouts/index.js +478 -464
  9. package/dist/pages/index.js +1123 -742
  10. package/dist/services/index.js +6 -56
  11. package/dist/utils/index.js +511 -492
  12. package/package.json +1 -1
  13. package/src/@daf/core/components/AuthForm/index.jsx +3 -12
  14. package/src/@daf/core/components/Dashboard/Map/ChainIcon/index.js +123 -104
  15. package/src/@daf/core/components/Icon/configs/index.js +3 -1
  16. package/src/@daf/core/components/Screens/Admin/AdminDashboard/components/UserStatistics/TopContributors/index.jsx +1 -0
  17. package/src/@daf/core/components/Screens/Admin/AdminDashboard/components/UserStatistics/UserGrowth/hook.js +1 -0
  18. package/src/@daf/core/components/Screens/Admin/AdminDashboard/components/UserStatistics/UserGrowth/index.jsx +3 -1
  19. package/src/@daf/core/components/Screens/Admin/AdminModals/CombineLocation/index.jsx +51 -51
  20. package/src/@daf/core/components/Screens/Admin/AdminModals/CombineSubjects/index.jsx +1 -6
  21. package/src/@daf/core/components/Screens/Admin/AdminModals/NewAccount/index.jsx +31 -56
  22. package/src/@daf/core/components/Screens/Admin/AdminModals/NewUser/index.jsx +10 -36
  23. package/src/@daf/core/components/Screens/Admin/AdminModals/TransferRights/index.jsx +1 -1
  24. package/src/@daf/core/components/Screens/Admin/AdminScreens/Accounts.jsx +10 -37
  25. package/src/@daf/core/components/Screens/Admin/AdminScreens/Dashboard.jsx +2 -2
  26. package/src/@daf/core/components/Screens/Admin/AdminScreens/index.js +0 -2
  27. package/src/@daf/core/components/Screens/Admin/AdminTables/AccountTable/helper.js +30 -22
  28. package/src/@daf/core/components/Screens/Admin/AdminTables/AccountTable/index.jsx +13 -25
  29. package/src/@daf/core/components/Screens/Admin/AdminTables/LocationTable/index.jsx +2 -17
  30. package/src/@daf/core/components/Screens/Admin/AdminTables/SubjectsTable/index.jsx +13 -27
  31. package/src/@daf/core/components/Screens/Admin/AdminTables/UserTable/index.jsx +1 -0
  32. package/src/@daf/core/components/Screens/Admin/AdminTables/components/index.jsx +2 -4
  33. package/src/@daf/core/components/Screens/Admin/AdminTables/hook.js +0 -3
  34. package/src/@daf/core/components/Screens/Admin/AdminViews/components/Edit/index.jsx +9 -12
  35. package/src/@daf/core/components/Screens/Admin/AdminViews/components/Users/index.jsx +4 -16
  36. package/src/@daf/core/components/Screens/Admin/AdminViews/components/View/helpers.js +17 -9
  37. package/src/@daf/core/components/Screens/Admin/AdminViews/index.jsx +8 -9
  38. package/src/@daf/core/components/Screens/Admin/AppInvitation/index.jsx +99 -124
  39. package/src/@daf/core/components/Screens/Admin/adminRoutes.js +1 -48
  40. package/src/@daf/core/components/Table/index.jsx +11 -6
  41. package/src/@daf/hooks/useAdminDashboard.js +4 -7
  42. package/src/@daf/pages/Events/Activities/columns.js +15 -11
  43. package/src/@daf/pages/Events/Incidents/columns.js +15 -11
  44. package/src/@daf/pages/Events/Testimonials/columns.js +173 -0
  45. package/src/@daf/pages/Events/Testimonials/config.js +175 -0
  46. package/src/@daf/pages/Events/columns.js +7 -3
  47. package/src/@daf/pages/Locations/MineSite/columns.js +16 -11
  48. package/src/@daf/pages/Locations/columns.js +7 -3
  49. package/src/@daf/pages/Stakeholders/Operators/columns.js +16 -12
  50. package/src/@daf/pages/Stakeholders/Workers/columns.js +16 -12
  51. package/src/@daf/pages/Stakeholders/columns.js +8 -4
  52. package/src/@daf/pages/TablePage/helper.js +15 -0
  53. package/src/@daf/pages/View/hooks/useViewActions.js +0 -13
  54. package/src/@daf/pages/View/hooks/useViewPermissions.js +0 -16
  55. package/src/@daf/pages/View/index.jsx +4 -29
  56. package/src/@daf/services/AdminService.js +5 -47
  57. package/src/@daf/services/DashboardService.js +3 -3
  58. package/src/@daf/utils/filters.js +15 -13
  59. package/src/constants/locales/en/translation.js +0 -13
  60. package/src/helpers/copyToClipboard.js +0 -60
  61. package/src/helpers/errorHandling.js +142 -74
  62. package/src/utils.js +1 -1
  63. package/src/@daf/core/components/Screens/Admin/AdminScreens/Documents.jsx +0 -81
  64. package/src/@daf/core/components/Screens/Admin/AdminScreens/Events.jsx +0 -77
  65. package/src/@daf/core/components/Screens/Admin/AdminTables/DocumentsTable/column.js +0 -127
  66. package/src/@daf/core/components/Screens/Admin/AdminTables/DocumentsTable/helper.js +0 -43
  67. package/src/@daf/core/components/Screens/Admin/AdminTables/DocumentsTable/index.jsx +0 -201
  68. package/src/@daf/core/components/Screens/Admin/AdminTables/EventsTable/column.js +0 -146
  69. package/src/@daf/core/components/Screens/Admin/AdminTables/EventsTable/helper.js +0 -58
  70. package/src/@daf/core/components/Screens/Admin/AdminTables/EventsTable/index.jsx +0 -176
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "datastake-daf",
3
- "version": "0.6.813",
3
+ "version": "0.6.815",
4
4
  "dependencies": {
5
5
  "@ant-design/icons": "^5.2.5",
6
6
  "@antv/g2": "^5.1.1",
@@ -13,20 +13,13 @@ function AuthForm ({
13
13
  errors,
14
14
  t = (key) => key,
15
15
  executeRecaptcha = () => {},
16
- getCurrentStep = () => {},
17
- theme,
16
+ getCurrentStep = () => {}
18
17
  }){
19
18
  const [formInstance] = Form.useForm(form);
20
19
  const [currentStep, setCurrentStep] = useState(0);
21
20
  const [allFormValues, setAllFormValues] = useState(initialValues);
22
21
  const [formErrors, setFormErrors] = useState(null);
23
22
 
24
- const buttonStyle = theme?.colorPrimary ? {
25
- backgroundColor: theme.colorPrimary,
26
- borderColor: theme.colorPrimary,
27
- } : {};
28
-
29
-
30
23
  const isMultiStep = !!steps;
31
24
  const currentFields = isMultiStep ? steps?.[currentStep]?.fields : fields || [];
32
25
 
@@ -173,7 +166,6 @@ function AuthForm ({
173
166
  name: field.name,
174
167
  label: field.label,
175
168
  rules: field.rules,
176
- dependencies: field.dependencies,
177
169
  style: { marginBottom: 0 }
178
170
  };
179
171
  if (field.valuePropName && field.type !== 'select') {
@@ -225,7 +217,6 @@ function AuthForm ({
225
217
  htmlType="submit"
226
218
  disabled={isLastStep && !allFieldsFilled}
227
219
  block className="normal-br"
228
- style={buttonStyle}
229
220
  >
230
221
  {isLastStep ? submitText : t("Next")}
231
222
  </BorderedButton>
@@ -234,14 +225,14 @@ function AuthForm ({
234
225
  }}
235
226
  </Form.Item>
236
227
  <div className="buttons" style={{ marginTop: 0}}>
237
- <BorderedButton onClick={prev} block className="normal-br" style={buttonStyle}>
228
+ <BorderedButton onClick={prev} block className="normal-br">
238
229
  {t("Back")}
239
230
  </BorderedButton>
240
231
  </div>
241
232
  </div>
242
233
  ) : (
243
234
  <div className="buttons" style={{ marginTop: isMultiStep ? '16px' : 0}}>
244
- <BorderedButton type="primary" htmlType="submit" block className="normal-br" style={buttonStyle}>
235
+ <BorderedButton type="primary" htmlType="submit" block className="normal-br">
245
236
  {isMultiStep ? t("Next") : submitText}
246
237
  </BorderedButton>
247
238
  </div>
@@ -1,4 +1,5 @@
1
1
  import { useMemo, useEffect, useRef, useState } from "react";
2
+ import { createPortal } from "react-dom";
2
3
  import {
3
4
  isMineSite,
4
5
  getStakeholderPosition,
@@ -10,7 +11,6 @@ import {
10
11
  import MineSiteMarker from "./Markers/SVG/MinesiteMarker.js";
11
12
  import VillageMarker from "./Markers/SVG/VillageMarker.js";
12
13
  import StakeholderIcon from "./Markers/StakeholderMarker.js";
13
- import { createRoot } from "react-dom/client";
14
14
  import * as L from "leaflet";
15
15
  import { Popover } from "antd";
16
16
  import { renderTooltipJsx } from "../../../../../utils/tooltip.js";
@@ -32,8 +32,8 @@ export default function LocationIcon({
32
32
  activeMarker,
33
33
  setActiveMarker,
34
34
  }) {
35
- const rootsMapRef = useRef(new Map());
36
- const markersRef = useRef([])
35
+ const markersRef = useRef([]);
36
+ const [portalContainers, setPortalContainers] = useState([]);
37
37
  const isSelected = selectedMarkersId.includes(data.datastakeId);
38
38
  const Marker = useMemo(() => {
39
39
  if (isMineSite(data.type)) {
@@ -114,25 +114,31 @@ export default function LocationIcon({
114
114
  }, [JSON.stringify(allData), JSON.stringify(data.links), JSON.stringify(data.stakeholders), zoom]);
115
115
 
116
116
  const stakeholdersOfLocation = useMemo(() => {
117
- return data?.stakeholders || [];
118
- }, [data.stakeholders, zoom]);
117
+ return (data?.stakeholders || []).filter(stakeholder => {
118
+ if (!stakeholder.links || stakeholder.links.length === 0) {
119
+ return true;
120
+ }
121
+
122
+ const locationsWithThisStakeholder = allData
123
+ .filter(loc =>
124
+ loc.stakeholders?.some(s => s.datastakeId === stakeholder.datastakeId)
125
+ )
126
+ .map(loc => loc.datastakeId);
127
+
128
+ const primaryLocation = locationsWithThisStakeholder.sort()[0];
129
+ return data.datastakeId === primaryLocation;
130
+ });
131
+ }, [data.stakeholders, data.datastakeId, allData, zoom]);
119
132
 
120
133
  useEffect(() => {
121
- const currentRoots = rootsMapRef.current;
122
- const currentMarkers = markersRef.current;
123
-
124
- currentMarkers.forEach(marker => {
125
- if (mapRef.hasLayer(marker)) {
134
+ markersRef.current.forEach(marker => {
135
+ if (mapRef && mapRef.hasLayer(marker)) {
126
136
  mapRef.removeLayer(marker);
127
137
  }
128
138
  });
129
- currentRoots.forEach(root => {
130
- root.unmount();
131
- });
132
- currentRoots.clear();
133
139
  markersRef.current = [];
140
+ setPortalContainers([]);
134
141
 
135
- // Only create stakeholder markers if this location or any of its stakeholders are selected
136
142
  const shouldShowStakeholders = isSelected || stakeholdersOfLocation.some(stk =>
137
143
  selectedMarkersId.includes(stk.datastakeId)
138
144
  );
@@ -141,9 +147,11 @@ export default function LocationIcon({
141
147
  return;
142
148
  }
143
149
 
144
- // Create new markers only when selected
150
+ // Create markers and store their container references
151
+ const containers = [];
152
+
145
153
  stakeholdersOfLocation.forEach((stakeholder, index) => {
146
- const markerId = `${stakeholder.datastakeId}`;
154
+ const markerId = `${data.datastakeId}-${stakeholder.datastakeId}`;
147
155
  const { x, y, radius, center } = getStakeholderPosition({
148
156
  zoom,
149
157
  totalMarkers: stakeholdersOfLocation.length,
@@ -162,46 +170,30 @@ export default function LocationIcon({
162
170
  const isForceOpen = activeMarker?.datastakeId === data.datastakeId;
163
171
  const iconSize = isSmallMarker(zoom) || isExtraSmallMarker(zoom) ? [11, 11] : [25, 25];
164
172
 
173
+ // Create container div
174
+ const containerDiv = document.createElement('div');
175
+ containerDiv.id = markerId;
176
+
165
177
  const marker = L.marker(stakeholderLatLng, {
166
178
  icon: L.divIcon({
167
- html: `<div id="${markerId}"></div>`,
179
+ html: containerDiv.outerHTML,
168
180
  className: "marker-chain",
169
181
  iconSize: iconSize,
170
182
  }),
171
183
  }).addTo(mapRef);
172
184
 
173
185
  markersRef.current.push(marker);
174
-
175
- setTimeout(() => {
176
- const div = document.getElementById(markerId);
177
- if (div && !rootsMapRef.current.has(markerId)) {
178
- const root = createRoot(div);
179
- rootsMapRef.current.set(markerId, root);
180
-
181
- root.render(
182
- <StakeholderIcon
183
- data={stakeholder}
184
- zoom={zoom}
185
- allData={allData}
186
- link={link}
187
- parentId={data.datastakeId}
188
- renderTooltip={renderTooltip}
189
- onClickLink={onClickLink}
190
- selectedMarkersId={selectedMarkersId}
191
- handleSelectMarker={handleSelectMarker}
192
- mapRef={mapRef}
193
- radius={radius}
194
- index={index}
195
- x={x}
196
- y={y}
197
- openPopupIdRef={openPopupIdRef}
198
- polylinesRef={polylinesRef}
199
- isForceOpen={isForceOpen}
200
- activeMarker={activeMarker}
201
- />,
202
- );
203
- }
204
- }, 0);
186
+
187
+ // Store container info for portal rendering
188
+ containers.push({
189
+ markerId,
190
+ stakeholder,
191
+ x,
192
+ y,
193
+ radius,
194
+ index,
195
+ isForceOpen,
196
+ });
205
197
 
206
198
  setMapMarkers((prev) => {
207
199
  const array = [
@@ -236,21 +228,23 @@ export default function LocationIcon({
236
228
  isForceOpen,
237
229
  listOfPolylines: polylinesRef.current,
238
230
  stakeholderType: stakeholder.type,
239
- animated: true,
231
+ animated: true,
240
232
  });
241
233
  });
242
234
 
235
+ // Update portal containers after markers are created
236
+ setTimeout(() => {
237
+ setPortalContainers(containers);
238
+ }, 0);
239
+
243
240
  return () => {
244
241
  markersRef.current.forEach(marker => {
245
- if (mapRef.hasLayer(marker)) {
242
+ if (mapRef && mapRef.hasLayer(marker)) {
246
243
  mapRef.removeLayer(marker);
247
244
  }
248
245
  });
249
- rootsMapRef.current.forEach(root => {
250
- root.unmount();
251
- });
252
- rootsMapRef.current.clear();
253
246
  markersRef.current = [];
247
+ setPortalContainers([]);
254
248
  };
255
249
  }, [stakeholdersOfLocation, selectedMarkersId, activeMarker, zoom]);
256
250
 
@@ -344,56 +338,81 @@ useEffect(() => {
344
338
  }, [linkedNodesData, selectedMarkersId, zoom, stakeholdersOfLocation, isSelected]);
345
339
 
346
340
  return (
347
- <Popover
348
- content={renderTooltipJsx({
349
- title: data.name,
350
- subTitle: data.subTitle,
351
- total: data.sources,
352
- className: "pt-0 pb-0",
353
- items: renderTooltip(data),
354
- link,
355
- onClickLink: () => onClickLink(data),
356
- isNewTab: true,
357
- })}
358
- // open={
359
- // (!openPopupIdRef.current || openPopupIdRef.current === data.datastakeId) &&
360
- // isHovering
361
- // }
362
- getPopupContainer={(triggerNode) => {
363
- const mapElement = document.getElementById("map");
364
- return mapElement || triggerNode.parentElement || document.body;
365
- }}
366
- >
367
- <div style={{ position: "relative", display: "inline-block" }}>
368
- {(isSelected || selectedMarkersId.length === 0) && (
369
- <div
370
- style={{
371
- position: "absolute",
372
- bottom: "0",
373
- left: "50%",
374
- transform: "translateX(-50%)",
375
- width: "12px",
376
- height: "6px",
377
- background: "rgba(0,0,0,0.15)",
378
- borderRadius: "50%",
379
- filter: "blur(3px)",
341
+ <>
342
+ <Popover
343
+ content={renderTooltipJsx({
344
+ title: data.name,
345
+ subTitle: data.subTitle,
346
+ total: data.sources,
347
+ className: "pt-0 pb-0",
348
+ items: renderTooltip(data),
349
+ link,
350
+ onClickLink: () => onClickLink(data),
351
+ isNewTab: true,
352
+ })}
353
+ getPopupContainer={(triggerNode) => {
354
+ const mapElement = document.getElementById("map");
355
+ return mapElement || triggerNode.parentElement || document.body;
356
+ }}
357
+ >
358
+ <div style={{ position: "relative", display: "inline-block" }}>
359
+ {(isSelected || selectedMarkersId.length === 0) && (
360
+ <div
361
+ style={{
362
+ position: "absolute",
363
+ bottom: "0",
364
+ left: "50%",
365
+ transform: "translateX(-50%)",
366
+ width: "12px",
367
+ height: "6px",
368
+ background: "rgba(0,0,0,0.15)",
369
+ borderRadius: "50%",
370
+ filter: "blur(3px)",
371
+ }}
372
+ />
373
+ )}
374
+ <Marker
375
+ isSelected={isSelected}
376
+ onClick={() => {
377
+ handleSelectMarker(data);
378
+ setActiveMarker(isSelected ? null : data);
380
379
  }}
380
+ zoom={zoom}
381
+ selectedMarkersId={selectedMarkersId}
381
382
  />
382
- )}
383
- <Marker
384
- isSelected={isSelected}
385
- onClick={() => {
386
- handleSelectMarker(data);
387
- setActiveMarker(isSelected ? null : data);
388
- }}
389
- zoom={zoom}
390
- onMouseEnter={() => setIsHovering(true)}
391
- onMouseLeave={() => {
392
- setIsHovering(false);
393
- }}
394
- selectedMarkersId={selectedMarkersId}
395
- />
396
- </div>
397
- </Popover>
383
+ </div>
384
+ </Popover>
385
+
386
+ {/* Render stakeholder icons via portals */}
387
+ {portalContainers.map(({markerId, stakeholder, x, y, radius, index, isForceOpen}) => {
388
+ const container = document.getElementById(markerId);
389
+ if (!container) return null;
390
+
391
+ return createPortal(
392
+ <StakeholderIcon
393
+ key={markerId}
394
+ data={stakeholder}
395
+ zoom={zoom}
396
+ allData={allData}
397
+ link={link}
398
+ parentId={data.datastakeId}
399
+ renderTooltip={renderTooltip}
400
+ onClickLink={onClickLink}
401
+ selectedMarkersId={selectedMarkersId}
402
+ handleSelectMarker={handleSelectMarker}
403
+ mapRef={mapRef}
404
+ radius={radius}
405
+ index={index}
406
+ x={x}
407
+ y={y}
408
+ openPopupIdRef={openPopupIdRef}
409
+ polylinesRef={polylinesRef}
410
+ isForceOpen={isForceOpen}
411
+ activeMarker={activeMarker}
412
+ />,
413
+ container
414
+ );
415
+ })}
416
+ </>
398
417
  );
399
418
  }
@@ -230,6 +230,7 @@ import Up from "./Up";
230
230
  import Down from "./Down";
231
231
  import TrendUp from "./TrendUp";
232
232
  import Droplets from "./Droplets";
233
+ import AddDocument from "./AddDocument";
233
234
 
234
235
  const config = {
235
236
  AppAdmin,
@@ -463,7 +464,8 @@ const config = {
463
464
  Up,
464
465
  Down,
465
466
  TrendUp,
466
- Droplets
467
+ Droplets,
468
+ AddDocument
467
469
  };
468
470
 
469
471
  export default config;
@@ -8,6 +8,7 @@ export default function TopContributors({ data, loading, t }) {
8
8
  const container = useRef(null);
9
9
 
10
10
  useTopContributors({ container, data, t });
11
+ console.log("topcontributorshhhh", data);
11
12
  return (
12
13
  <Widget
13
14
  title={t(`admin::top-contributors`)}
@@ -12,6 +12,7 @@ export default function useUserGrowth({ container, data: mainData = {}, t, trans
12
12
  const [mainGraph, setMainGraph] = useState(null);
13
13
  const [data, setData] = useState([]);
14
14
  const { token } = useToken();
15
+ console.log("mainData", mainData);
15
16
  const fetchData = () => {
16
17
  const { dates = [] } = mainData;
17
18
  const _data = [];
@@ -9,11 +9,13 @@ export default function UserGrowth({ loading, data = [], t, translationKeys, fet
9
9
  const [selectValue, setSelectValue] = useState(selectOptions[0]?.value);
10
10
 
11
11
  useUserGrowth({ container, data, t, translationKeys });
12
+ console.log("usergrowthhhhh", data);
13
+
12
14
  useEffect(() => {
13
15
  if (typeof fetchUserGrowth === "function") {
14
16
  fetchUserGrowth(selectValue);
15
17
  }
16
- }, [selectValue, fetchUserGrowth]);
18
+ }, [selectValue]);
17
19
 
18
20
  return (
19
21
  <Widget
@@ -34,19 +34,19 @@ export default function CombineLocationModal({
34
34
 
35
35
  const onSubmit = () => {
36
36
  MainForm.validateFields().then((data) => {
37
- const ids = selectedLocations.map((location) => location.id);
37
+ const ids = selectedLocations.map((location) => location.id);
38
38
  const allowedKeys = [
39
- "id",
40
- "name",
41
- "country",
42
- "category",
43
- "administrativeLevel1",
39
+ "id",
40
+ "name",
41
+ "country",
42
+ "category",
43
+ "administrativeLevel1",
44
44
  "administrativeLevel2"
45
- ];
45
+ ];
46
46
  const filteredData = Object.fromEntries(
47
47
  Object.entries(data).filter(([key]) => allowedKeys.includes(key))
48
48
  );
49
-
49
+
50
50
  onSuccess({
51
51
  ids,
52
52
  data: filteredData,
@@ -66,15 +66,15 @@ export default function CombineLocationModal({
66
66
  destroyOnHidden={true}
67
67
  onValuesChange={() => {
68
68
  setIsDisabled(() => {
69
- const values = MainForm.getFieldsValue();
70
-
71
- const requiredFields = entity?.includes("location")
72
- ? ["id", "name", "category", "country", "administrativeLevel1", "administrativeLevel2"]
73
- : ["id", "name", "category", "country"];
74
-
75
- return requiredFields.some((field) => values[field] === undefined);
69
+ const values = MainForm.getFieldsValue();
70
+
71
+ const requiredFields = entity?.includes("location")
72
+ ? ["id", "name", "category", "country", "administrativeLevel1", "administrativeLevel2"]
73
+ : ["id", "name", "category", "country"];
74
+
75
+ return requiredFields.some((field) => values[field] === undefined);
76
76
  });
77
- }}
77
+ }}
78
78
  >
79
79
  <Container>
80
80
  <div className="daf-table-wrapper no-pagination">
@@ -124,7 +124,7 @@ export default function CombineLocationModal({
124
124
  options={selectedLocations.map((location) => {
125
125
  return {
126
126
  label: location?.datastakeId || "-",
127
- value: location?.id || "-",
127
+ value: location?.id || "-",
128
128
  };
129
129
  })}
130
130
  placeholder={t("ID")}
@@ -181,41 +181,41 @@ export default function CombineLocationModal({
181
181
 
182
182
  {entity?.includes("location") && (
183
183
  <>
184
- <Form.Item className="flex-1" name="administrativeLevel1">
185
- <Select
186
- placeholder={t("Province")}
187
- options={selectedLocations
188
- .map((location) => {
189
- const _data = getAdminLevelName(location?.linking?.SCL, "level_1");
190
- return {
191
- label: _data?.name || "-",
192
- value: _data?.id || "-",
193
- };
194
- })
195
- .filter(
196
- (option, index, self) =>
197
- index === self.findIndex((o) => o.value === option.value),
198
- )}
199
- />
200
- </Form.Item>
184
+ <Form.Item className="flex-1" name="administrativeLevel1">
185
+ <Select
186
+ placeholder={t("Province")}
187
+ options={selectedLocations
188
+ .map((location) => {
189
+ const _data = getAdminLevelName(location?.linking?.SCL, "level_1");
190
+ return {
191
+ label: _data?.name || "-",
192
+ value: _data?.id || "-",
193
+ };
194
+ })
195
+ .filter(
196
+ (option, index, self) =>
197
+ index === self.findIndex((o) => o.value === option.value),
198
+ )}
199
+ />
200
+ </Form.Item>
201
201
 
202
- <Form.Item className="flex-1" name="administrativeLevel2">
203
- <Select
204
- placeholder={t("Territory")}
205
- options={selectedLocations
206
- .map((location) => {
207
- const _data = getAdminLevelName(location?.linking?.SCL, "level_2");
208
- return {
209
- label: _data?.name || "-",
210
- value: _data?.id || "-",
211
- };
212
- })
213
- .filter(
214
- (option, index, self) =>
215
- index === self.findIndex((o) => o.value === option.value),
216
- )}
217
- />
218
- </Form.Item>
202
+ <Form.Item className="flex-1" name="administrativeLevel2">
203
+ <Select
204
+ placeholder={t("Territory")}
205
+ options={selectedLocations
206
+ .map((location) => {
207
+ const _data = getAdminLevelName(location?.linking?.SCL, "level_2");
208
+ return {
209
+ label: _data?.name || "-",
210
+ value: _data?.id || "-",
211
+ };
212
+ })
213
+ .filter(
214
+ (option, index, self) =>
215
+ index === self.findIndex((o) => o.value === option.value),
216
+ )}
217
+ />
218
+ </Form.Item>
219
219
  </>
220
220
  )}
221
221
  </Form>
@@ -37,8 +37,6 @@ export default function CombineSubjectsModal({
37
37
  const onSubmit = () => {
38
38
  MainForm.validateFields().then((data) => {
39
39
  const ids = selectedSubjects.map((subject) => subject.id);
40
- console.log(ids, "ids");
41
- console.log(data, "data");
42
40
  onSuccess({
43
41
  ids,
44
42
  data,
@@ -114,10 +112,7 @@ export default function CombineSubjectsModal({
114
112
  >
115
113
  <Form.Item className="flex-1" name="id">
116
114
  <Select
117
- options={selectedSubjects.map((s) => ({
118
- label: s?.datastakeId || "-",
119
- value: s?.id || "-",
120
- }))}
115
+ options={mapToSelectOptions(selectedSubjects, "datastakeId", selectOptions, null)}
121
116
  placeholder={t("ID")}
122
117
  ></Select>
123
118
  </Form.Item>