@djb25/digit-ui-module-ekyc 1.0.24 → 1.0.25

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@djb25/digit-ui-module-ekyc",
3
- "version": "1.0.24",
3
+ "version": "1.0.25",
4
4
  "description": "Digit UI Module for Ekyc",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.modern.js",
@@ -23,6 +23,8 @@
23
23
  "microbundle-crl": "^0.13.11",
24
24
  "react": "17.0.2",
25
25
  "react-dom": "17.0.2",
26
+ "jspdf": "^2.5.1",
27
+ "jspdf-autotable": "^3.8.2",
26
28
  "react-i18next": "11.16.2",
27
29
  "react-icons": "^5.6.0",
28
30
  "react-router-dom": "5.3.0",
package/src/Module.js CHANGED
@@ -12,7 +12,6 @@ import CitizenApp from "./pages/citizen";
12
12
  import PropertyInfo from "./components/PropertyInfo";
13
13
  import MeterDetails from "./components/MeterDetails";
14
14
  import AadhaarVerification from "./components/AadhaarVerification";
15
- import AddressDetails from "./components/AddressDetails";
16
15
 
17
16
  export const EkycModule = ({ stateCode, userType, tenants }) => {
18
17
  const { path, url } = useRouteMatch();
@@ -66,7 +65,6 @@ const componentsToRegister = {
66
65
  EKYC_INBOX_FILTER: (props) => <Filter {...props} />,
67
66
  EkycLinks,
68
67
  AadhaarVerification,
69
- AddressDetails,
70
68
  PropertyInfo,
71
69
  MeterDetails,
72
70
  };
@@ -1,17 +1,6 @@
1
-
2
1
  import React, { useState, Fragment, useEffect } from "react";
3
2
  import { useLocation } from "react-router-dom";
4
- import {
5
- CardLabel,
6
- TextInput,
7
- Dropdown,
8
- UploadFile,
9
- RadioButtons,
10
- Toast,
11
- FormStep,
12
- Loader,
13
- CheckBox
14
- } from "@djb25/digit-ui-react-components";
3
+ import { CardLabel, TextInput, Dropdown, UploadFile, RadioButtons, Toast, FormStep, Loader, CheckBox } from "@djb25/digit-ui-react-components";
15
4
  const AadhaarVerification = ({ config, onSelect, formData }) => {
16
5
  const location = useLocation();
17
6
  const flowState = location.state || {};
@@ -122,30 +111,13 @@ const AadhaarVerification = ({ config, onSelect, formData }) => {
122
111
  }, [searchData, formData?.connectionDetails, searchKno]);
123
112
 
124
113
  // 🔹 OPTIONS
125
- const consumerTypeOptions = [
126
- { name: "Individual" },
127
- { name: "Govt" },
128
- { name: "Company_Society_Org" },
129
- ];
130
-
131
- const occupantOptions = [
132
- { name: "Self" },
133
- { name: "Tenanted" },
134
- ];
135
-
136
- const genderOptions = [
137
- { name: "Male" },
138
- { name: "Female" },
139
- { name: "Others" },
140
- { name: "Not prefer to say" },
141
- ];
142
-
143
- const identityTypeOptions = [
144
- { name: "Aadhaar Card" },
145
- { name: "Driving License" },
146
- { name: "Passport" },
147
- { name: "Voter ID" },
148
- ];
114
+ const consumerTypeOptions = [{ name: "Individual" }, { name: "Govt" }, { name: "Company_Society_Org" }];
115
+
116
+ const occupantOptions = [{ name: "Self" }, { name: "Tenanted" }];
117
+
118
+ const genderOptions = [{ name: "Male" }, { name: "Female" }, { name: "Others" }, { name: "Not prefer to say" }];
119
+
120
+ const identityTypeOptions = [{ name: "Aadhaar Card" }, { name: "Driving License" }, { name: "Passport" }, { name: "Voter ID" }];
149
121
 
150
122
  const yesNo = [{ name: "Yes" }, { name: "No" }];
151
123
 
@@ -176,8 +148,7 @@ const AadhaarVerification = ({ config, onSelect, formData }) => {
176
148
  if (!mobile) return false;
177
149
  if (!residents || Number(residents) <= 0) return false;
178
150
 
179
- if (occupantType?.name === "Tenanted" && !documentId && !ownerMobile)
180
- return false;
151
+ if (occupantType?.name === "Tenanted" && !documentId && !ownerMobile) return false;
181
152
 
182
153
  return consent; // consent must be true
183
154
  };
@@ -230,7 +201,7 @@ const AadhaarVerification = ({ config, onSelect, formData }) => {
230
201
  await updateMutation.mutateAsync({
231
202
  RequestInfo: {},
232
203
  updateType: "CONSUMER",
233
- ...data
204
+ ...data,
234
205
  });
235
206
  setToast({ type: "success", message: "Data updated successfully!" });
236
207
  onSelect(config.key, data);
@@ -246,7 +217,6 @@ const AadhaarVerification = ({ config, onSelect, formData }) => {
246
217
  return (
247
218
  <Fragment>
248
219
  <FormStep onSelect={onStepSelect} config={config} isDisabled={!isValid()}>
249
-
250
220
  <div>
251
221
  <CardLabel>Consumer Type *</CardLabel>
252
222
  <Dropdown option={consumerTypeOptions} selected={consumerType} select={setConsumerType} />
@@ -306,8 +276,7 @@ const AadhaarVerification = ({ config, onSelect, formData }) => {
306
276
  <CardLabel>No. of Residents *</CardLabel>
307
277
  <TextInput value={residents} onChange={(e) => setResidents(e.target.value)} />
308
278
  </div>
309
- <div>
310
- {console.log("identityType",identityType)}
279
+ <div>
311
280
  <CardLabel>Type of Identity *</CardLabel>
312
281
  <Dropdown option={identityTypeOptions} selected={identityType} select={setIdentityType} />
313
282
  </div>
@@ -322,10 +291,10 @@ const AadhaarVerification = ({ config, onSelect, formData }) => {
322
291
 
323
292
  <div>
324
293
  <CardLabel>Informant Is Consumer</CardLabel>
325
- <CheckBox
326
- label="Yes, the informant is the consumer"
327
- checked={informantIsConsumer}
328
- onChange={(e) => setInformantIsConsumer(e.target.checked)}
294
+ <CheckBox
295
+ label="Yes, the informant is the consumer"
296
+ checked={informantIsConsumer}
297
+ onChange={(e) => setInformantIsConsumer(e.target.checked)}
329
298
  />
330
299
  </div>
331
300
 
@@ -401,15 +370,9 @@ const AadhaarVerification = ({ config, onSelect, formData }) => {
401
370
  </Fragment>
402
371
  )}
403
372
  </FormStep>
404
- {toast && (
405
- <Toast
406
- error={toast.type === "error"}
407
- label={toast.message}
408
- onClose={() => setToast(null)}
409
- />
410
- )}
373
+ {toast && <Toast error={toast.type === "error"} label={toast.message} onClose={() => setToast(null)} />}
411
374
  </Fragment>
412
375
  );
413
376
  };
414
377
 
415
- export default AadhaarVerification;
378
+ export default AadhaarVerification;
@@ -1,8 +1,8 @@
1
- import React, { useMemo, useCallback, useReducer, useState } from "react";
2
- import { useLocation } from "react-router-dom";
1
+ import React, { useMemo, useCallback, useReducer } from "react";
3
2
  import { InboxComposer } from "@djb25/digit-ui-react-components";
4
3
  import SupervisorInboxTableConfig from "../hook/SupervisorInboxTableConfig";
5
4
  import SearchFormFieldsComponents from "./SearchFormFieldsComponent";
5
+ import { formInitValue, formReducer } from "../../../vendor/src/config/tableConfig";
6
6
 
7
7
  // Mock data removed in favor of API integration
8
8
 
@@ -11,20 +11,8 @@ const AssignEkyc = () => {
11
11
  if (!tenantId || tenantId === "dl") {
12
12
  tenantId = "dl.djb"; // Force tenantId to dl.djb for EKYC APIs in citizen portal
13
13
  }
14
- const location = useLocation();
15
- const formInitValue = {
16
- filterForm: {},
17
- searchForm: {},
18
- tableForm: {
19
- limit: 10,
20
- offset: 0,
21
- sortBy: "createdTime",
22
- sortOrder: "DESC",
23
- },
24
- };
25
14
 
26
15
  const [formState, dispatch] = useReducer(formReducer, formInitValue);
27
- const userDetails = Digit.SessionStorage.get("User");
28
16
 
29
17
  let paginationParms = {
30
18
  limit: formState?.tableForm?.limit || 10,
@@ -45,11 +33,7 @@ const AssignEkyc = () => {
45
33
  filters.mobileNumber = mobileNumber;
46
34
  }
47
35
 
48
- const { data: dashboardData, isLoading } = Digit.Hooks.fsm.useSurveyorSearch(
49
- tenantId,
50
- filters,
51
- { enabled: !!tenantId, keepPreviousData: true }
52
- );
36
+ const { data: dashboardData, isLoading } = Digit.Hooks.fsm.useSurveyorSearch(tenantId, filters, { enabled: !!tenantId, keepPreviousData: true });
53
37
 
54
38
  const { isLoading: isDataSearchLoading, data } = Digit.Hooks.ekyc.useEkycAssignmentProgress({
55
39
  enabled: !!tenantId,
@@ -63,38 +47,23 @@ const AssignEkyc = () => {
63
47
  const filteredData = useMemo(() => {
64
48
  return (sourceData || []).map((item) => {
65
49
  const owner = item?.owner || {};
66
-
67
50
  const roleCodes = owner?.roles?.map((role) => role.code)?.join(", ") || "";
68
51
 
69
52
  return {
70
53
  ...item,
71
-
72
54
  id: item?.id || "",
73
-
74
55
  surveyorName: item?.name || owner?.name || "",
75
-
76
56
  mobileNo: item?.mobileNo || owner?.mobileNumber || "",
77
-
78
57
  email: owner?.emailId || "",
79
-
80
58
  vendorId: item?.vendorId || "",
81
-
82
59
  tenantId: item?.tenantId || "",
83
-
84
60
  supervisorId: item?.supervisorId || "",
85
-
86
61
  status: item?.status || "",
87
-
88
62
  roleCodes,
89
-
90
63
  userName: owner?.userName || "",
91
-
92
64
  gender: owner?.gender || "",
93
-
94
65
  serviceType: item?.additionalDetails?.serviceType || "",
95
-
96
66
  createdTime: item?.auditDetails?.createdTime || 0,
97
-
98
67
  lastModifiedTime: item?.auditDetails?.lastModifiedTime || 0,
99
68
  };
100
69
  });
@@ -102,9 +71,8 @@ const AssignEkyc = () => {
102
71
 
103
72
  const totalRecords = dashboardData?.dashboardInfo?.totalRecords || dashboardData?.totalCount || 0;
104
73
 
105
- const checkPathName = location.pathname.includes("ekyc/inbox");
106
74
  const PropsForInboxLinks = {
107
- headerText: checkPathName ? "EKYC_MODULE" : "MODULE_SW",
75
+ headerText: "EKYC_MODULE",
108
76
  };
109
77
 
110
78
  const SearchFormFields = useCallback(
@@ -123,8 +91,8 @@ const AssignEkyc = () => {
123
91
 
124
92
  const onSearchFormSubmit = (data) => {
125
93
  data.hasOwnProperty("") && delete data?.[""];
126
- dispatch({ action: "mutateTableForm", data: { ...tableOrderFormDefaultValues }, checkPathName });
127
- dispatch({ action: "mutateSearchForm", data, checkPathName });
94
+ dispatch({ action: "mutateTableForm", data: { ...tableOrderFormDefaultValues } });
95
+ dispatch({ action: "mutateSearchForm", data });
128
96
  };
129
97
 
130
98
  const searchFormDefaultValues = {
@@ -156,34 +124,12 @@ const AssignEkyc = () => {
156
124
 
157
125
  const propsForFilterForm = {
158
126
  FilterFormFields,
159
- onFilterFormSubmit: () => {},
127
+ onFilterFormSubmit: () => { },
160
128
  filterFormDefaultValues: "",
161
129
  resetFilterFormDefaultValues: "",
162
- onFilterFormReset: () => {},
130
+ onFilterFormReset: () => { },
163
131
  };
164
132
 
165
- function formReducer(state, payload) {
166
- const storageKey = payload.checkPathName ? "EKYC.INBOX" : "EKYC.SW.INBOX";
167
-
168
- // ✅ safety for SLA
169
- switch (payload.action) {
170
- case "mutateSearchForm":
171
- Digit.SessionStorage.set(storageKey, { ...state, searchForm: payload.data });
172
- return { ...state, searchForm: payload.data };
173
-
174
- case "mutateFilterForm":
175
- Digit.SessionStorage.set(storageKey, { ...state, filterForm: payload.data });
176
- return { ...state, filterForm: payload.data };
177
-
178
- case "mutateTableForm":
179
- Digit.SessionStorage.set(storageKey, { ...state, tableForm: payload.data });
180
- return { ...state, tableForm: payload.data };
181
-
182
- default:
183
- return state; // ✅ IMPORTANT
184
- }
185
- }
186
-
187
133
  const onPageSizeChange = (e) => {
188
134
  const newLimit = Number(e.target.value);
189
135
 
@@ -194,7 +140,6 @@ const AssignEkyc = () => {
194
140
  limit: newLimit,
195
141
  offset: 0, // reset page
196
142
  },
197
- checkPathName,
198
143
  });
199
144
  };
200
145
 
@@ -212,7 +157,6 @@ const AssignEkyc = () => {
212
157
  sortBy: id,
213
158
  sortOrder: desc ? "DESC" : "ASC",
214
159
  },
215
- checkPathName,
216
160
  });
217
161
  }
218
162
  }
@@ -227,7 +171,6 @@ const AssignEkyc = () => {
227
171
  dispatch,
228
172
  onSortingByData,
229
173
  tenantId,
230
- checkPathName,
231
174
  inboxStyles: { overflowX: "scroll", overflowY: "hidden" },
232
175
  tableStyle: { width: "70%" },
233
176
  },
@@ -274,9 +217,9 @@ const AssignEkyc = () => {
274
217
  <InboxComposer
275
218
  {...{
276
219
  isInboxLoading,
277
- PropsForInboxLinks,
220
+ // PropsForInboxLinks,
278
221
  ...propsForSearchForm,
279
- ...propsForFilterForm,
222
+ // ...propsForFilterForm,
280
223
  // ...propsForMobileSortForm,
281
224
  propsForInboxTable,
282
225
  // propsForInboxMobileCards,
@@ -1,7 +1,7 @@
1
1
  import React, { useMemo, useState, useEffect } from "react";
2
2
  import { Modal, Close, Table, Toast } from "@djb25/digit-ui-react-components";
3
3
 
4
- const AssignEkycModal = ({ surveyor, closeModal }) => {
4
+ const AssignEkycModal = ({ surveyor, closeModal, refetchDashboard }) => {
5
5
  const [selectedKnos, setSelectedKnos] = useState([]);
6
6
  const [isBulkSelection, setIsBulkSelection] = useState(false);
7
7
  const [currentPage, setCurrentPage] = useState(0);
@@ -95,7 +95,8 @@ const AssignEkycModal = ({ surveyor, closeModal }) => {
95
95
  setShowToast(true);
96
96
 
97
97
  // optional delay so user can see the success toast
98
- setTimeout(() => {
98
+ setTimeout(async () => {
99
+ await refetchDashboard();
99
100
  closeModal();
100
101
  }, 1000);
101
102
  },
@@ -255,7 +256,23 @@ const AssignEkycModal = ({ surveyor, closeModal }) => {
255
256
  onChange={(e) => handleFilterChange("zoneName", e.target.value)}
256
257
  />
257
258
 
258
- <input className="form-control" placeholder="Ward" value={filters.ward} onChange={(e) => handleFilterChange("ward", e.target.value)} />
259
+ {/* <SelectEkycZones
260
+ t={t}
261
+ isMultiSelect={false}
262
+ config={{
263
+ key: "zoneCode",
264
+ }}
265
+ formData={{
266
+ zoneIds: filters.zoneCode ? [{ code: filters.zoneCode, name: filters.zoneName }] : [],
267
+ }}
268
+ onSelect={(key, value) => {
269
+ console.log(value);
270
+ handleFilterChange("zoneName", value);
271
+ }}
272
+ placeHolder="Zones"
273
+ /> */}
274
+
275
+ {/* <input className="form-control" placeholder="Ward" value={filters.ward} onChange={(e) => handleFilterChange("ward", e.target.value)} />
259
276
 
260
277
  <input
261
278
  className="form-control"
@@ -271,7 +288,7 @@ const AssignEkycModal = ({ surveyor, closeModal }) => {
271
288
  <option value="PENDING">Pending</option>
272
289
  <option value="APPROVED">Approved</option>
273
290
  <option value="REJECTED">Rejected</option>
274
- </select>
291
+ </select> */}
275
292
  </div>
276
293
 
277
294
  {/* Table */}
@@ -17,9 +17,13 @@ const EKYCCard = () => {
17
17
  ],
18
18
  links: [
19
19
  {
20
- label: t("EKYC_DASHBOARD"),
21
- link: `/digit-ui/employee/ekyc/dashboard`,
20
+ label: t("CEO_M.F_DOR_FINANCE_VIEW"),
21
+ link: `/digit-ui/employee/ekyc/ceo-dashboard`,
22
22
  },
23
+ // {
24
+ // label: t("EKYC_DASHBOARD"),
25
+ // link: `/digit-ui/employee/ekyc/dashboard`,
26
+ // },
23
27
  {
24
28
  label: t("EKYC_INBOX"),
25
29
  link: `/digit-ui/employee/ekyc/inbox`,
@@ -32,16 +36,10 @@ const EKYCCard = () => {
32
36
  // label: t("EKYC_UPDATE_KYC"),
33
37
  // link: `/digit-ui/employee/ekyc/update-kyc`
34
38
  // },
35
- {
36
- label: t("CEO_M.F_DOR_FINANCE_VIEW"),
37
- link: `/digit-ui/employee/ekyc/ceo-dashboard`,
38
- },
39
-
40
39
  // {
41
40
  // label: t("EKYC_MAPPING"),
42
41
  // link: `/digit-ui/employee/ekyc/mapping`,
43
42
  // },
44
-
45
43
  {
46
44
  label: t("EKYC_ASSIGN"),
47
45
  link: `/digit-ui/employee/ekyc/assign`,
@@ -12,24 +12,24 @@ const SearchFormFieldsComponents = ({ searchFormState, controlSearchForm }) => {
12
12
  {/* MOBILE NUMBER */}
13
13
  <span className="mobile-input">
14
14
  <Label className="flex-roww flex-gap-2">
15
- {t("EKYC_MOBILE_NUMBER") || "Mobile Number"}
15
+ {t("EKYC_K.NUMBER") || "K Number"}
16
16
  <CustomTooltip message={t("EKYC_MOBILE_NUMBER_MESSAGE")} />
17
17
  </Label>
18
18
 
19
19
  <Controller
20
- name="mobileNumber"
20
+ name="kNumber"
21
21
  control={controlSearchForm}
22
22
  defaultValue=""
23
23
  rules={{
24
24
  pattern: {
25
25
  value: /^[0-9]{10}$/,
26
- message: t("ERR_INVALID_MOBILE_NO"),
26
+ message: t("ERR_INVALID_KNO"),
27
27
  },
28
28
  }}
29
29
  render={({ onChange, value }) => <TextInput value={value || ""} onChange={(e) => onChange(e.target.value)} />}
30
30
  />
31
31
 
32
- {errors?.mobileNumber && <CardLabelError>{errors.mobileNumber.message}</CardLabelError>}
32
+ {errors?.kNumber && <CardLabelError>{errors.kNumber.message}</CardLabelError>}
33
33
  </span>
34
34
 
35
35
  {/* K NAME */}