@djb25/digit-ui-module-ekyc 1.0.24 → 1.0.26
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/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.modern.js +2011 -1164
- package/dist/index.modern.js.map +1 -1
- package/package.json +3 -1
- package/src/Module.js +0 -2
- package/src/components/AadhaarVerification.js +239 -339
- package/src/components/AssignEkyc.js +10 -67
- package/src/components/AssignEkycModal.js +21 -4
- package/src/components/DesktopInbox.js +1 -1
- package/src/components/EKYCCard.js +6 -8
- package/src/components/MeterDetails.js +227 -263
- package/src/components/PropertyInfo.js +176 -215
- package/src/components/Review.js +70 -13
- package/src/components/SearchFormFieldsComponent.js +4 -4
- package/src/components/SurveyorDetailsCard.js +220 -27
- package/src/config/AadhaarVerificationConfig.js +367 -0
- package/src/config/MeterDetailsConfig.js +297 -0
- package/src/config/PropertyInfoConfig.js +145 -0
- package/src/config/config.js +1 -0
- package/src/hook/SupervisorInboxTableConfig.js +2 -53
- package/src/hook/useInboxTableConfig.js +5 -5
- package/src/pages/citizen/Inbox.js +19 -9
- package/src/pages/citizen/index.js +44 -17
- package/src/pages/employee/ConsumerDetails.js +82 -24
- package/src/pages/employee/EKYCForm.js +21 -20
- package/src/pages/employee/Inbox.js +13 -7
- package/src/pages/employee/index.js +42 -13
- package/src/utils/reportDownloader.js +75 -0
- package/src/components/AddressDetails.js +0 -207
|
@@ -1,24 +1,27 @@
|
|
|
1
1
|
import React, { useState, Fragment, useEffect } from "react";
|
|
2
2
|
import { useLocation } from "react-router-dom";
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
Dropdown,
|
|
7
|
-
UploadFile,
|
|
8
|
-
Toast,
|
|
9
|
-
FormStep,
|
|
10
|
-
Loader
|
|
11
|
-
} from "@djb25/digit-ui-react-components";
|
|
3
|
+
import { Toast, Loader, FormComposer } from "@djb25/digit-ui-react-components";
|
|
4
|
+
import { useTranslation } from "react-i18next";
|
|
5
|
+
import MeterDetailsConfig from "../config/MeterDetailsConfig";
|
|
12
6
|
|
|
13
7
|
const MeterDetails = ({ config, onSelect, formData }) => {
|
|
8
|
+
const { t } = useTranslation();
|
|
14
9
|
const location = useLocation();
|
|
15
10
|
const flowState = location.state || {};
|
|
16
11
|
const tenantId = Digit.ULBService.getCurrentTenantId();
|
|
17
12
|
|
|
18
|
-
const
|
|
13
|
+
const queryParams = new URLSearchParams(location.search);
|
|
14
|
+
const urlKno = queryParams.get("kno");
|
|
15
|
+
const searchKno =
|
|
16
|
+
urlKno ||
|
|
17
|
+
flowState?.kNumber ||
|
|
18
|
+
flowState?.kno ||
|
|
19
|
+
formData?.kNumber ||
|
|
20
|
+
formData?.kno ||
|
|
21
|
+
sessionStorage.getItem("EKYC_K_NUMBER");
|
|
19
22
|
|
|
20
23
|
const { isLoading, data: searchData } = Digit.Hooks.ekyc.useSearchConnection(
|
|
21
|
-
{ tenantId, details: { kno: searchKno } },
|
|
24
|
+
{ tenantId, details: { kno: searchKno, fetchType: "METER" } },
|
|
22
25
|
{ enabled: !!searchKno, cacheTime: 0 }
|
|
23
26
|
);
|
|
24
27
|
|
|
@@ -27,101 +30,92 @@ const MeterDetails = ({ config, onSelect, formData }) => {
|
|
|
27
30
|
const savedData = formData?.meterDetails || {};
|
|
28
31
|
|
|
29
32
|
// 🔹 STATES
|
|
30
|
-
const [connectionCategory, setConnectionCategory] = useState(savedData.connectionCategory || "");
|
|
31
|
-
const [saType, setSaType] = useState(savedData.saType || "");
|
|
32
|
-
const [status, setStatus] = useState(savedData.status || "");
|
|
33
|
-
|
|
34
|
-
const [mrCode, setMrCode] = useState(savedData.mrCode || "");
|
|
35
|
-
const [areaCode, setAreaCode] = useState(savedData.areaCode || "");
|
|
36
|
-
const [mrKey, setMrKey] = useState(savedData.mrKey || "");
|
|
37
|
-
|
|
38
|
-
const [meterNumber, setMeterNumber] = useState(savedData.meterNumber || "");
|
|
39
|
-
const [meterMaker, setMeterMaker] = useState(savedData.meterMaker || "");
|
|
40
|
-
|
|
41
|
-
const [meterStatus, setMeterStatus] = useState(savedData.meterStatus ? { name: savedData.meterStatus } : null);
|
|
42
|
-
const [meterCondition, setMeterCondition] = useState(savedData.meterCondition ? { name: savedData.meterCondition } : null);
|
|
43
|
-
const [meterLocation, setMeterLocation] = useState(savedData.meterLocation ? { name: savedData.meterLocation } : null);
|
|
44
|
-
|
|
45
|
-
const [lastBillReceived, setLastBillReceived] = useState(savedData.lastBillReceived ? { name: savedData.lastBillReceived } : null);
|
|
46
|
-
const [billMonthYear, setBillMonthYear] = useState(savedData.billMonthYear ? { name: savedData.billMonthYear } : null);
|
|
47
|
-
const [reason, setReason] = useState(savedData.reason || "");
|
|
48
|
-
|
|
49
|
-
const [accessToMeter, setAccessToMeter] = useState(savedData.accessToMeter ? { name: savedData.accessToMeter } : null);
|
|
50
|
-
const [sewerConnection, setSewerConnection] = useState(savedData.sewerConnection ? { name: savedData.sewerConnection } : null);
|
|
51
|
-
const [septicTank, setSepticTank] = useState(savedData.septicTank ? { name: savedData.septicTank } : null);
|
|
52
|
-
|
|
53
33
|
const [meterPhoto, setMeterPhoto] = useState(null);
|
|
54
34
|
const [meterPhotoId, setMeterPhotoId] = useState(savedData.meterPhotoId || null);
|
|
55
|
-
|
|
56
35
|
const [toast, setToast] = useState(null);
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
{ name:
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
{ name:
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
36
|
+
const [isDataLoaded, setIsDataLoaded] = useState(false);
|
|
37
|
+
const [canSubmit, setCanSubmit] = useState(false);
|
|
38
|
+
|
|
39
|
+
const [defaultValues, setDefaultValues] = useState(() => ({
|
|
40
|
+
connectionCategory: savedData.connectionCategory || "",
|
|
41
|
+
saType: savedData.saType || "",
|
|
42
|
+
status: savedData.status || "",
|
|
43
|
+
mrCode: savedData.mrCode || "",
|
|
44
|
+
areaCode: savedData.areaCode || "",
|
|
45
|
+
mrKey: savedData.mrKey || "",
|
|
46
|
+
meterNumber: savedData.meterNumber || "",
|
|
47
|
+
meterMaker: savedData.meterMaker || "",
|
|
48
|
+
meterStatus: savedData.meterStatus ? { name: savedData.meterStatus } : null,
|
|
49
|
+
meterCondition: savedData.meterCondition ? { name: savedData.meterCondition } : null,
|
|
50
|
+
meterLocation: savedData.meterLocation ? { name: savedData.meterLocation } : null,
|
|
51
|
+
lastBillReceived: savedData.lastBillReceived ? { name: savedData.lastBillReceived } : null,
|
|
52
|
+
billMonthYear: savedData.billMonthYear ? { name: savedData.billMonthYear } : null,
|
|
53
|
+
reason: savedData.reason || "",
|
|
54
|
+
accessToMeter: savedData.accessToMeter ? { name: savedData.accessToMeter } : null,
|
|
55
|
+
sewerConnection: savedData.sewerConnection ? { name: savedData.sewerConnection } : null,
|
|
56
|
+
septicTank: savedData.septicTank ? { name: savedData.septicTank } : null,
|
|
57
|
+
meterPhoto: savedData.meterPhotoId ? "Uploaded" : null,
|
|
58
|
+
}));
|
|
59
|
+
|
|
60
|
+
const [localFormData, setLocalFormData] = useState(defaultValues);
|
|
61
|
+
|
|
62
|
+
const extractApplicationData = (searchData) => {
|
|
63
|
+
if (!searchData) return null;
|
|
64
|
+
const reviewWrapper =
|
|
65
|
+
searchData?.applicationReviewInfo || searchData?.applicationReview || searchData;
|
|
66
|
+
const applicationData = (Array.isArray(reviewWrapper) ? reviewWrapper[0] : reviewWrapper) || {};
|
|
67
|
+
return applicationData?.newData || applicationData;
|
|
68
|
+
};
|
|
84
69
|
|
|
85
70
|
useEffect(() => {
|
|
86
|
-
const
|
|
71
|
+
const appData = extractApplicationData(searchData);
|
|
72
|
+
const rawData = appData || formData?.connectionDetails;
|
|
87
73
|
const apiMeter = rawData?.meterDetails || rawData || {};
|
|
88
74
|
|
|
89
|
-
if (apiMeter && Object.keys(apiMeter).length > 0 && !
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
if (apiMeter.meterNumber) setMeterNumber(apiMeter.meterNumber);
|
|
99
|
-
if (apiMeter.meterMake) setMeterMaker(apiMeter.meterMake);
|
|
75
|
+
if (apiMeter && Object.keys(apiMeter).length > 0 && !isDataLoaded) {
|
|
76
|
+
let mStatus = null;
|
|
77
|
+
let mCondition = null;
|
|
78
|
+
let mLoc = null;
|
|
79
|
+
let billRec = null;
|
|
80
|
+
let billMonYr = null;
|
|
81
|
+
let accToMeter = null;
|
|
82
|
+
let sewerConn = null;
|
|
83
|
+
let sepTank = null;
|
|
100
84
|
|
|
101
85
|
if (apiMeter.meterStatus) {
|
|
102
|
-
const matchingStatus =
|
|
103
|
-
|
|
104
|
-
|
|
86
|
+
const matchingStatus = [
|
|
87
|
+
{ name: "Metered" },
|
|
88
|
+
{ name: "Unmetered" },
|
|
89
|
+
{ name: "Can not be identified" },
|
|
90
|
+
].find((o) => o.name.toLowerCase() === apiMeter.meterStatus.toLowerCase());
|
|
91
|
+
if (matchingStatus) mStatus = matchingStatus;
|
|
92
|
+
else mStatus = { name: apiMeter.meterStatus };
|
|
105
93
|
} else if (apiMeter.metered !== undefined) {
|
|
106
|
-
|
|
94
|
+
mStatus = { name: apiMeter.metered ? "Metered" : "Unmetered" };
|
|
107
95
|
}
|
|
108
96
|
|
|
109
97
|
if (apiMeter.meterCondition) {
|
|
110
|
-
const matchingCond =
|
|
111
|
-
|
|
112
|
-
|
|
98
|
+
const matchingCond = [{ name: "Damaged" }, { name: "Not-Damaged" }].find(
|
|
99
|
+
(o) => o.name.toLowerCase() === apiMeter.meterCondition.toLowerCase()
|
|
100
|
+
);
|
|
101
|
+
if (matchingCond) mCondition = matchingCond;
|
|
102
|
+
else mCondition = { name: apiMeter.meterCondition };
|
|
113
103
|
}
|
|
114
104
|
|
|
115
105
|
if (apiMeter.meterLocation) {
|
|
116
|
-
const matchingLoc =
|
|
117
|
-
|
|
118
|
-
|
|
106
|
+
const matchingLoc = [{ name: "Inside" }, { name: "Outside" }].find(
|
|
107
|
+
(o) =>
|
|
108
|
+
o.name.toLowerCase() === apiMeter.meterLocation.toLowerCase() ||
|
|
109
|
+
apiMeter.meterLocation.toLowerCase().includes(o.name.toLowerCase())
|
|
110
|
+
);
|
|
111
|
+
if (matchingLoc) mLoc = matchingLoc;
|
|
112
|
+
else mLoc = { name: apiMeter.meterLocation };
|
|
119
113
|
}
|
|
120
114
|
|
|
121
115
|
if (apiMeter.lastBillRaised !== undefined && apiMeter.lastBillRaised !== null) {
|
|
122
116
|
const strVal = String(apiMeter.lastBillRaised).toLowerCase();
|
|
123
|
-
if (strVal === "true" || strVal === "yes")
|
|
124
|
-
else
|
|
117
|
+
if (strVal === "true" || strVal === "yes") billRec = { name: "Yes" };
|
|
118
|
+
else billRec = { name: "No" };
|
|
125
119
|
}
|
|
126
120
|
|
|
127
121
|
if (apiMeter.lastBillReceivedDate) {
|
|
@@ -130,106 +124,157 @@ const MeterDetails = ({ config, onSelect, formData }) => {
|
|
|
130
124
|
if (parsedParts.length === 2) {
|
|
131
125
|
const mon = parseInt(parsedParts[0], 10);
|
|
132
126
|
const yr = parseInt(parsedParts[1], 10);
|
|
133
|
-
|
|
127
|
+
billMonYr = { name: `${mon}/${yr}` };
|
|
134
128
|
} else {
|
|
135
|
-
|
|
129
|
+
billMonYr = { name: apiMeter.lastBillReceivedDate };
|
|
136
130
|
}
|
|
137
131
|
}
|
|
138
132
|
|
|
139
|
-
if (apiMeter.lastBillNotRaisedReason) setReason(apiMeter.lastBillNotRaisedReason);
|
|
140
|
-
|
|
141
133
|
if (apiMeter.accessToMeter !== undefined && apiMeter.accessToMeter !== null) {
|
|
142
134
|
const strVal = String(apiMeter.accessToMeter).toLowerCase();
|
|
143
|
-
if (strVal === "true" || strVal === "yes")
|
|
144
|
-
else
|
|
135
|
+
if (strVal === "true" || strVal === "yes") accToMeter = { name: "Yes" };
|
|
136
|
+
else accToMeter = { name: "No" };
|
|
145
137
|
}
|
|
146
138
|
|
|
147
139
|
if (apiMeter.sewerConnection !== undefined && apiMeter.sewerConnection !== null) {
|
|
148
140
|
const strVal = String(apiMeter.sewerConnection).toLowerCase();
|
|
149
|
-
if (strVal === "true" || strVal === "yes")
|
|
150
|
-
else
|
|
141
|
+
if (strVal === "true" || strVal === "yes") sewerConn = { name: "Yes" };
|
|
142
|
+
else sewerConn = { name: "No" };
|
|
151
143
|
}
|
|
152
144
|
|
|
153
145
|
if (apiMeter.septicTank !== undefined && apiMeter.septicTank !== null) {
|
|
154
146
|
const strVal = String(apiMeter.septicTank).toLowerCase();
|
|
155
|
-
if (strVal === "true" || strVal === "yes")
|
|
156
|
-
else
|
|
147
|
+
if (strVal === "true" || strVal === "yes") sepTank = { name: "Yes" };
|
|
148
|
+
else sepTank = { name: "No" };
|
|
157
149
|
}
|
|
158
150
|
|
|
159
|
-
|
|
151
|
+
const updatedDefaults = {
|
|
152
|
+
connectionCategory: savedData.connectionCategory || apiMeter.connectionCategory || "",
|
|
153
|
+
saType: savedData.saType || apiMeter.saType || "",
|
|
154
|
+
status: savedData.status || apiMeter.statusFlag || "",
|
|
155
|
+
mrCode: savedData.mrCode || (apiMeter.mrcode ? String(apiMeter.mrcode) : ""),
|
|
156
|
+
areaCode: savedData.areaCode || (apiMeter.areacode ? String(apiMeter.areacode) : ""),
|
|
157
|
+
mrKey: savedData.mrKey || (apiMeter.mrkey ? String(apiMeter.mrkey) : ""),
|
|
158
|
+
meterNumber: savedData.meterNumber || apiMeter.meterNumber || "",
|
|
159
|
+
meterMaker: savedData.meterMaker || apiMeter.meterMake || "",
|
|
160
|
+
meterStatus: savedData.meterStatus ? { name: savedData.meterStatus } : mStatus,
|
|
161
|
+
meterCondition: savedData.meterCondition ? { name: savedData.meterCondition } : mCondition,
|
|
162
|
+
meterLocation: savedData.meterLocation ? { name: savedData.meterLocation } : mLoc,
|
|
163
|
+
lastBillReceived: savedData.lastBillReceived ? { name: savedData.lastBillReceived } : billRec,
|
|
164
|
+
billMonthYear: savedData.billMonthYear ? { name: savedData.billMonthYear } : billMonYr,
|
|
165
|
+
reason: savedData.reason || apiMeter.lastBillNotRaisedReason || "",
|
|
166
|
+
accessToMeter: savedData.accessToMeter ? { name: savedData.accessToMeter } : accToMeter,
|
|
167
|
+
sewerConnection: savedData.sewerConnection ? { name: savedData.sewerConnection } : sewerConn,
|
|
168
|
+
septicTank: savedData.septicTank ? { name: savedData.septicTank } : sepTank,
|
|
169
|
+
meterPhoto: savedData.meterPhotoId || apiMeter.meterPhotoFileStoreId || null,
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
setDefaultValues(updatedDefaults);
|
|
173
|
+
setLocalFormData(updatedDefaults);
|
|
174
|
+
if (updatedDefaults.meterPhoto) {
|
|
175
|
+
setMeterPhotoId(updatedDefaults.meterPhoto);
|
|
176
|
+
}
|
|
177
|
+
setIsDataLoaded(true);
|
|
160
178
|
}
|
|
161
|
-
}, [searchData, formData?.connectionDetails]);
|
|
162
|
-
|
|
163
|
-
// 🔹 FREEZE LOGIC
|
|
164
|
-
const isFrozen = meterStatus?.name === "Can not be identified";
|
|
179
|
+
}, [searchData, formData?.connectionDetails, isDataLoaded]);
|
|
165
180
|
|
|
166
181
|
// 🔹 FILE UPLOAD
|
|
167
|
-
const
|
|
182
|
+
const handleUpload = async (e, onChange) => {
|
|
168
183
|
const file = e.target.files[0];
|
|
169
184
|
if (!file) return;
|
|
170
185
|
|
|
186
|
+
if (file.size > 2000000) {
|
|
187
|
+
setToast({ type: "error", message: t("Max size 2MB exceeded") });
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
|
|
171
191
|
try {
|
|
172
192
|
const res = await Digit.UploadServices.Filestorage("EKYC", file, tenantId);
|
|
173
|
-
const
|
|
193
|
+
const fileStoreId = res?.data?.files?.[0]?.fileStoreId;
|
|
174
194
|
|
|
175
|
-
if (
|
|
176
|
-
|
|
195
|
+
if (fileStoreId) {
|
|
196
|
+
onChange(file.name);
|
|
197
|
+
setMeterPhotoId(fileStoreId);
|
|
177
198
|
|
|
178
199
|
const reader = new FileReader();
|
|
179
200
|
reader.onloadend = () => setMeterPhoto(reader.result);
|
|
180
201
|
reader.readAsDataURL(file);
|
|
202
|
+
|
|
203
|
+
setToast({ type: "success", message: t("Upload successful") });
|
|
181
204
|
}
|
|
182
205
|
} catch {
|
|
183
|
-
setToast({ type: "error", message: "Upload failed" });
|
|
206
|
+
setToast({ type: "error", message: t("Upload failed") });
|
|
184
207
|
}
|
|
185
208
|
};
|
|
186
209
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
if (!meterLocation) return false;
|
|
192
|
-
if (!lastBillReceived) return false;
|
|
193
|
-
if (!sewerConnection) return false;
|
|
210
|
+
const onFormValueChange = (setValue, data) => {
|
|
211
|
+
const meterStatusChanged =
|
|
212
|
+
(data?.meterStatus?.name || data?.meterStatus) !==
|
|
213
|
+
(localFormData?.meterStatus?.name || localFormData?.meterStatus);
|
|
194
214
|
|
|
195
|
-
|
|
215
|
+
const lastBillReceivedChanged =
|
|
216
|
+
(data?.lastBillReceived?.name || data?.lastBillReceived) !==
|
|
217
|
+
(localFormData?.lastBillReceived?.name || localFormData?.lastBillReceived);
|
|
196
218
|
|
|
197
|
-
|
|
198
|
-
|
|
219
|
+
const sewerConnectionChanged =
|
|
220
|
+
(data?.sewerConnection?.name || data?.sewerConnection) !==
|
|
221
|
+
(localFormData?.sewerConnection?.name || localFormData?.sewerConnection);
|
|
199
222
|
|
|
200
|
-
if (
|
|
223
|
+
if (meterStatusChanged || lastBillReceivedChanged || sewerConnectionChanged) {
|
|
224
|
+
setLocalFormData((prev) => ({
|
|
225
|
+
...prev,
|
|
226
|
+
...data,
|
|
227
|
+
}));
|
|
228
|
+
}
|
|
201
229
|
|
|
202
|
-
|
|
230
|
+
// Determine validation
|
|
231
|
+
const connCatVal = data?.connectionCategory;
|
|
232
|
+
const mStatusVal = data?.meterStatus;
|
|
233
|
+
const mLocVal = data?.meterLocation;
|
|
234
|
+
const billRecVal = data?.lastBillReceived;
|
|
235
|
+
const sewerConnVal = data?.sewerConnection;
|
|
236
|
+
const mPhotoId = meterPhotoId || data?.meterPhoto;
|
|
237
|
+
const reasonVal = data?.reason;
|
|
238
|
+
const billMonYrVal = data?.billMonthYear;
|
|
239
|
+
const sepTankVal = data?.septicTank;
|
|
240
|
+
|
|
241
|
+
let valid = true;
|
|
242
|
+
if (!connCatVal) valid = false;
|
|
243
|
+
if (!mStatusVal) valid = false;
|
|
244
|
+
if (!mLocVal) valid = false;
|
|
245
|
+
if (!billRecVal) valid = false;
|
|
246
|
+
if (!sewerConnVal) valid = false;
|
|
247
|
+
|
|
248
|
+
if (mStatusVal?.name === "Metered" && !mPhotoId) valid = false;
|
|
249
|
+
if (billRecVal?.name === "No" && !reasonVal) valid = false;
|
|
250
|
+
if (billRecVal?.name === "Yes" && !billMonYrVal) valid = false;
|
|
251
|
+
if (sewerConnVal?.name === "No" && !sepTankVal) valid = false;
|
|
252
|
+
|
|
253
|
+
if (valid !== canSubmit) {
|
|
254
|
+
setCanSubmit(valid);
|
|
255
|
+
}
|
|
203
256
|
};
|
|
204
257
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
meterLocation: meterLocation?.name,
|
|
226
|
-
lastBillReceived: lastBillReceived?.name,
|
|
227
|
-
billMonthYear: billMonthYear?.name,
|
|
228
|
-
reason,
|
|
229
|
-
accessToMeter: accessToMeter?.name,
|
|
230
|
-
sewerConnection: sewerConnection?.name,
|
|
231
|
-
septicTank: septicTank?.name,
|
|
232
|
-
meterPhotoId,
|
|
258
|
+
const onSubmit = async (data) => {
|
|
259
|
+
const submitData = {
|
|
260
|
+
connectionCategory: data.connectionCategory,
|
|
261
|
+
saType: data.saType,
|
|
262
|
+
status: data.status,
|
|
263
|
+
mrCode: data.mrCode,
|
|
264
|
+
areaCode: data.areaCode,
|
|
265
|
+
mrKey: data.mrKey,
|
|
266
|
+
meterNumber: data.meterNumber,
|
|
267
|
+
meterMaker: data.meterMaker,
|
|
268
|
+
meterStatus: data.meterStatus?.name || data.meterStatus,
|
|
269
|
+
meterCondition: data.meterCondition?.name || data.meterCondition,
|
|
270
|
+
meterLocation: data.meterLocation?.name || data.meterLocation,
|
|
271
|
+
lastBillReceived: data.lastBillReceived?.name || data.lastBillReceived,
|
|
272
|
+
billMonthYear: data.billMonthYear?.name || data.billMonthYear,
|
|
273
|
+
reason: data.reason,
|
|
274
|
+
accessToMeter: data.accessToMeter?.name || data.accessToMeter,
|
|
275
|
+
sewerConnection: data.sewerConnection?.name || data.sewerConnection,
|
|
276
|
+
septicTank: data.septicTank?.name || data.septicTank,
|
|
277
|
+
meterPhotoId: meterPhotoId,
|
|
233
278
|
};
|
|
234
279
|
|
|
235
280
|
try {
|
|
@@ -237,12 +282,12 @@ const MeterDetails = ({ config, onSelect, formData }) => {
|
|
|
237
282
|
RequestInfo: {},
|
|
238
283
|
updateType: "METER",
|
|
239
284
|
kno: searchKno,
|
|
240
|
-
...
|
|
285
|
+
...submitData,
|
|
241
286
|
});
|
|
242
|
-
setToast({ type: "success", message: "Meter details updated successfully!" });
|
|
243
|
-
onSelect(config.key,
|
|
287
|
+
setToast({ type: "success", message: t("Meter details updated successfully!") });
|
|
288
|
+
onSelect(config.key, submitData);
|
|
244
289
|
} catch (error) {
|
|
245
|
-
setToast({ type: "error", message: "Failed to update meter details" });
|
|
290
|
+
setToast({ type: "error", message: t("Failed to update meter details") });
|
|
246
291
|
}
|
|
247
292
|
};
|
|
248
293
|
|
|
@@ -250,121 +295,40 @@ const MeterDetails = ({ config, onSelect, formData }) => {
|
|
|
250
295
|
return <Loader />;
|
|
251
296
|
}
|
|
252
297
|
|
|
298
|
+
const Config = MeterDetailsConfig(
|
|
299
|
+
t,
|
|
300
|
+
localFormData,
|
|
301
|
+
handleUpload,
|
|
302
|
+
meterPhoto,
|
|
303
|
+
meterPhotoId,
|
|
304
|
+
setMeterPhoto,
|
|
305
|
+
setMeterPhotoId
|
|
306
|
+
);
|
|
307
|
+
|
|
253
308
|
return (
|
|
254
309
|
<Fragment>
|
|
255
|
-
<
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
<
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
<CardLabel>Area Code</CardLabel>
|
|
278
|
-
<TextInput value={areaCode} onChange={(e) => setAreaCode(e.target.value)} />
|
|
279
|
-
</div>
|
|
280
|
-
|
|
281
|
-
<div>
|
|
282
|
-
<CardLabel>MR Key</CardLabel>
|
|
283
|
-
<TextInput value={mrKey} onChange={(e) => setMrKey(e.target.value)} />
|
|
284
|
-
</div>
|
|
285
|
-
|
|
286
|
-
{!isFrozen && (
|
|
287
|
-
<Fragment>
|
|
288
|
-
<div>
|
|
289
|
-
<CardLabel>Meter Number</CardLabel>
|
|
290
|
-
<TextInput value={meterNumber} onChange={(e) => setMeterNumber(e.target.value)} />
|
|
291
|
-
</div>
|
|
292
|
-
|
|
293
|
-
<div>
|
|
294
|
-
<CardLabel>Meter Maker</CardLabel>
|
|
295
|
-
<TextInput value={meterMaker} onChange={(e) => setMeterMaker(e.target.value)} />
|
|
296
|
-
</div>
|
|
297
|
-
|
|
298
|
-
<div>
|
|
299
|
-
<CardLabel>Meter Condition</CardLabel>
|
|
300
|
-
<Dropdown option={meterConditionOptions} selected={meterCondition} select={setMeterCondition} />
|
|
301
|
-
</div>
|
|
302
|
-
|
|
303
|
-
{meterStatus?.name === "Metered" && (
|
|
304
|
-
<Fragment>
|
|
305
|
-
<div>
|
|
306
|
-
<CardLabel>Meter Photo *</CardLabel>
|
|
307
|
-
<UploadFile onUpload={uploadPhoto} message={meterPhotoId ? "Uploaded" : "No file"} />
|
|
308
|
-
</div>
|
|
309
|
-
{meterPhoto && (
|
|
310
|
-
<div style={{ gridColumn: "span 2" }}>
|
|
311
|
-
<img src={meterPhoto} style={{ width: "100%" }} />
|
|
312
|
-
</div>
|
|
313
|
-
)}
|
|
314
|
-
</Fragment>
|
|
315
|
-
)}
|
|
316
|
-
</Fragment>
|
|
317
|
-
)}
|
|
318
|
-
|
|
319
|
-
<div>
|
|
320
|
-
<CardLabel>Meter Status *</CardLabel>
|
|
321
|
-
<Dropdown option={meterStatusOptions} selected={meterStatus} select={setMeterStatus} />
|
|
322
|
-
</div>
|
|
323
|
-
|
|
324
|
-
<div>
|
|
325
|
-
<CardLabel>Meter Location *</CardLabel>
|
|
326
|
-
<Dropdown option={meterLocationOptions} selected={meterLocation} select={setMeterLocation} />
|
|
327
|
-
</div>
|
|
328
|
-
|
|
329
|
-
<div>
|
|
330
|
-
<CardLabel>Last Bill Received *</CardLabel>
|
|
331
|
-
<Dropdown option={yesNo} selected={lastBillReceived} select={setLastBillReceived} />
|
|
332
|
-
</div>
|
|
333
|
-
|
|
334
|
-
{lastBillReceived?.name === "Yes" && (
|
|
335
|
-
<div>
|
|
336
|
-
<CardLabel>When was the last bill received *</CardLabel>
|
|
337
|
-
<Dropdown option={monthYearOptions} selected={billMonthYear} select={setBillMonthYear} />
|
|
338
|
-
</div>
|
|
339
|
-
)}
|
|
340
|
-
|
|
341
|
-
{lastBillReceived?.name === "No" && (
|
|
342
|
-
<div>
|
|
343
|
-
<CardLabel>Reason *</CardLabel>
|
|
344
|
-
<TextInput value={reason} onChange={(e) => setReason(e.target.value)} />
|
|
345
|
-
</div>
|
|
346
|
-
)}
|
|
347
|
-
|
|
348
|
-
<div>
|
|
349
|
-
<CardLabel>Access to Meter</CardLabel>
|
|
350
|
-
<Dropdown option={yesNo} selected={accessToMeter} select={setAccessToMeter} />
|
|
351
|
-
</div>
|
|
352
|
-
|
|
353
|
-
<div>
|
|
354
|
-
<CardLabel>Sewer Connection *</CardLabel>
|
|
355
|
-
<Dropdown option={yesNo} selected={sewerConnection} select={setSewerConnection} />
|
|
356
|
-
</div>
|
|
357
|
-
|
|
358
|
-
{sewerConnection?.name === "No" && (
|
|
359
|
-
<div>
|
|
360
|
-
<CardLabel>Septic Tank *</CardLabel>
|
|
361
|
-
<Dropdown option={yesNo} selected={septicTank} select={setSepticTank} />
|
|
362
|
-
</div>
|
|
363
|
-
)}
|
|
364
|
-
|
|
365
|
-
{toast && <Toast label={toast.message} error={toast.type === "error"} onClose={() => setToast(null)} />}
|
|
366
|
-
|
|
367
|
-
</FormStep>
|
|
310
|
+
<FormComposer
|
|
311
|
+
key={isDataLoaded ? "loaded" : "loading"}
|
|
312
|
+
isDisabled={!canSubmit}
|
|
313
|
+
label={t("ES_COMMON_CONTINUE")}
|
|
314
|
+
config={Config.map((item) => ({
|
|
315
|
+
...item,
|
|
316
|
+
isCollapsible: true,
|
|
317
|
+
isDefaultOpen: true,
|
|
318
|
+
}))}
|
|
319
|
+
onSubmit={onSubmit}
|
|
320
|
+
defaultValues={defaultValues}
|
|
321
|
+
onFormValueChange={onFormValueChange}
|
|
322
|
+
noCard={false}
|
|
323
|
+
submitInForm={true}
|
|
324
|
+
/>
|
|
325
|
+
{toast && (
|
|
326
|
+
<Toast
|
|
327
|
+
error={toast.type === "error"}
|
|
328
|
+
label={toast.message}
|
|
329
|
+
onClose={() => setToast(null)}
|
|
330
|
+
/>
|
|
331
|
+
)}
|
|
368
332
|
</Fragment>
|
|
369
333
|
);
|
|
370
334
|
};
|