@argusoft/medplat-app-shell 1.0.5 → 1.0.7
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 +139 -141
- package/src/GlobalErrorBoundary.jsx +31 -0
- package/src/SilentErrorFallback.jsx +68 -0
- package/src/TrackingProviderWrapper.jsx +40 -0
- package/src/_tests_/__mocks__/MockTranslationProvider.jsx +21 -0
- package/src/_tests_/__mocks__/ckeditor.js +45 -0
- package/src/_tests_/__mocks__/fileMock.js +1 -0
- package/src/_tests_/__mocks__/useranalytics.js +5 -0
- package/src/_tests_/views/components/Dashboard/DashboardUI.test.jsx +137 -0
- package/src/_tests_/views/components/Dashboard/DashboardUIMock.js +877 -0
- package/src/_tests_/views/components/ForgotPassword/ForgotPassword.test.jsx +314 -0
- package/src/_tests_/views/components/LocationDirective/LocationDirective.test.jsx.disable +229 -0
- package/src/_tests_/views/components/LocationDirective/mockLocationDirective.js +810 -0
- package/src/_tests_/views/components/LocationType/MockLocationType.js +42259 -0
- package/src/_tests_/views/components/LocationType/addlocationtype.test.jsx.disable +276 -0
- package/src/_tests_/views/components/LocationType/editlocationtype.test.jsx.disable +262 -0
- package/src/_tests_/views/components/LocationType/locationtype.test.jsx.disable +148 -0
- package/src/_tests_/views/components/Profile/UpdateProfileModalData.js +4396 -0
- package/src/_tests_/views/components/Profile/updateprofilemodal.test.jsx +282 -0
- package/src/_tests_/views/components/SideBar/MockSideBar.js +1379 -0
- package/src/_tests_/views/components/SideBar/SideBar.test.jsx +98 -0
- package/src/_tests_/views/components/SystemConfig/ManageSystemConfig/AddManageSystemConfig.test.jsx.disable +164 -0
- package/src/_tests_/views/components/SystemConfig/ManageSystemConfig/UpdateManageSystemConfig.test.jsx.disable +157 -0
- package/src/_tests_/views/components/SystemConfig/MockSystemConfig.js +1280 -0
- package/src/_tests_/views/components/SystemConfig/SystemConfig.test.jsx.disable +165 -0
- package/src/_tests_/views/components/login/Login.test.jsx +276 -0
- package/src/_tests_/views/components/login/MockAuthorise.js +2414 -0
- package/src/_tests_/views/components/login/ServiceResponse.js +595 -0
- package/src/_tests_/views/components/user/MockManageUser.js +7965 -0
- package/src/_tests_/views/components/user/manageuser.test.jsx.disable +989 -0
- package/src/_tests_/views/components/user/mockUsersData.js +582 -0
- package/src/assets/img/OASISLogin.png +0 -0
- package/src/assets/img/bahaarNew.png +0 -0
- package/src/assets/img/dnhdd4K.png +0 -0
- package/src/assets/img/govtofup.png +0 -0
- package/src/assets/img/sewarural4K.png +0 -0
- package/src/assets/img/techo4K.png +0 -0
- package/src/assets/img/up4K.png +0 -0
- package/src/common/HolidayList.jsx +573 -0
- package/src/common/MalaciaousInputUtil.js +23 -0
- package/src/common/SafeHtml.jsx +17 -0
- package/src/common/VersionManager.jsx +109 -0
- package/src/common/constants/PerformanceDashboard.js +514 -0
- package/src/common/constants/app.constant.js +781 -0
- package/src/common/constants/cccVerificationConstants.js +18 -0
- package/src/common/constants/fhsrConstant.js +33 -0
- package/src/common/constants/gvk-verification.constant.js +76 -0
- package/src/common/constants/search.constant.js +23 -0
- package/src/common/constants/teleconsulatationConstant.jsx +1339 -0
- package/src/common/directives/SearchTemplate.jsx +784 -0
- package/src/common/directives/SearchTemplate.scss +14 -0
- package/src/common/dynamicView/DynamicView.jsx +353 -0
- package/src/common/dynamicView/InputFieldComponent.jsx +1501 -0
- package/src/common/dynamicView/InputViewComponent.jsx +298 -0
- package/src/common/dynamicView/InputViewComponent.scss +15 -0
- package/src/common/env.js +5 -0
- package/src/common/filters/locationNameFilter.js +26 -0
- package/src/common/fontAwesomeIcons/FontAwesomeIcons.jsx +27 -0
- package/src/common/fontAwesomeIcons/FontAwesomeIconsNames.js +1968 -0
- package/src/common/fontPreferences/fontSizeProvider.jsx +34 -0
- package/src/common/fontPreferences/fontSizeSelector.jsx +116 -0
- package/src/common/getAssignedFeature/getAssignedFeature.js +32 -0
- package/src/common/interceptors/AxiosInterceptor.js +216 -0
- package/src/common/languageTranslator/TranslationContext.js +5 -0
- package/src/common/languageTranslator/TranslationProvider.jsx +24 -0
- package/src/common/languageTranslator/i18n.js +49 -0
- package/src/common/services/AuthenticateService.js +116 -0
- package/src/common/services/DownloadFile.js +35 -0
- package/src/common/services/ForgotPassword.js +18 -0
- package/src/common/services/FormConfiguratorService.js +195 -0
- package/src/common/services/GlobalApis.js +84 -0
- package/src/common/services/InterceptorNavigationService.js +17 -0
- package/src/common/services/LocationService.js +65 -0
- package/src/common/services/LocationType.js +11 -0
- package/src/common/services/QueryBuilder.js +36 -0
- package/src/common/services/Roles.js +28 -0
- package/src/common/services/SyncWithServer.js +15 -0
- package/src/common/services/SystemConfig.js +15 -0
- package/src/common/services/TranslationService.js +70 -0
- package/src/common/services/TwoFactorService.js +7 -0
- package/src/common/services/Users.js +91 -0
- package/src/common/services/Webtasks.js +27 -0
- package/src/common/services/util/Convert-pad-data-to-API-format.jsx +167 -0
- package/src/common/services/util/Convert-to-UI-format.jsx +82 -0
- package/src/common/services/util/EmptyPrescriptionPadData.jsx +11 -0
- package/src/common/services/util/GeneralUtil.js +456 -0
- package/src/common/services/util/Prescription-pad-util.js +339 -0
- package/src/common/services/util/PrescriptionPadData.js +67 -0
- package/src/common/services/util/PrescriptionpadCommonUtil.js +96 -0
- package/src/common/services/util/ReportFieldUtil.jsx +398 -0
- package/src/common/services/util/WebSocketContext.jsx +261 -0
- package/src/common/syncWithServer/SyncWithServerDialog.jsx +170 -0
- package/src/common/syncWithServer/SyncWithServerDialogSkeleton.jsx +67 -0
- package/src/common/tests/CustomWrapper.jsx +49 -0
- package/src/common/tests/TranslationWrapper.jsx +38 -0
- package/src/common/themeProvider/ColorInputs.jsx +97 -0
- package/src/common/themeProvider/EditableColorInput.jsx +128 -0
- package/src/common/themeProvider/ThemeEditor.jsx +319 -0
- package/src/common/themeProvider/ThemeProvider.jsx +210 -0
- package/src/common/themeProvider/themeConfig.js +558 -0
- package/src/common/toaster/toaster.jsx +30 -0
- package/src/firebaseConfig.js +24 -0
- package/src/global.scss +221 -0
- package/src/hooks/.gitkeep +0 -0
- package/src/hooks/useAESEncryption.js +56 -0
- package/src/hooks/useCaching.js +43 -0
- package/src/hooks/useDebounce.js +34 -0
- package/src/hooks/useDebounceFn.js +50 -0
- package/src/hooks/useDownloadPdf.js +358 -0
- package/src/hooks/useDownloadXlsx.js +55 -0
- package/src/hooks/useListValueFieldValues.js +30 -0
- package/src/hooks/useLocationHierarchies.js +63 -0
- package/src/hooks/useLocationHierarchyTranslate.js +16 -0
- package/src/hooks/useOnline.js +27 -0
- package/src/hooks/usePagination.js +63 -0
- package/src/hooks/useRefreshToken.js +87 -0
- package/src/hooks/useScript.js +25 -0
- package/src/hooks/useStopwatch.js +75 -0
- package/src/hooks/useTrackEvent.js +22 -0
- package/src/hooks/useWebAudioRecorder.js +115 -0
- package/src/layout/LoaderComponet.jsx +22 -0
- package/src/layout/LoaderContext.jsx +29 -0
- package/src/layout/mainLayout/AdaptiveZoom.jsx +27 -0
- package/src/layout/mainLayout/Chatbot.jsx +243 -0
- package/src/layout/mainLayout/Layout.jsx +445 -0
- package/src/layout/mainLayout/Profile/UpdateProfileModal.jsx +684 -0
- package/src/layout/mainLayout/header/LogoutModal.jsx +131 -0
- package/src/layout/mainLayout/header/Navbar.jsx +1677 -0
- package/src/layout/mainLayout/header/Navbar.scss +4 -0
- package/src/layout/mainLayout/header/index.js +0 -0
- package/src/layout/mainLayout/sidebar/SideBar.jsx +1402 -0
- package/src/layout/mainLayout/sidebar/Sidebar.css +159 -0
- package/src/layout/mainLayout/sidebar/index.js +0 -0
- package/src/logo.svg +1 -0
- package/src/reportWebVitals.js +13 -0
- package/src/setupFirebaseMessaging.js +28 -0
- package/src/setupTests.js +8 -0
- package/src/store/actions/AuthenticationActions.js +0 -0
- package/src/store/actions/ReportsActions.js +0 -0
- package/src/store/actions/TranslationAction.js +0 -0
- package/src/store/index.js +8 -0
- package/src/store/reducer.js +46 -0
- package/src/store/reducers/AuthenticationReducer.js +50 -0
- package/src/store/reducers/CalendarEventReducer.js +41 -0
- package/src/store/reducers/ConditionClipboardReducer.js +45 -0
- package/src/store/reducers/FeatureReducer.js +27 -0
- package/src/store/reducers/FormConfiguratorReducer.js +38 -0
- package/src/store/reducers/LoadingReducer.js +20 -0
- package/src/store/reducers/MembersAuthenticationReducer.js +28 -0
- package/src/store/reducers/PrescriptionPadReducer.js +329 -0
- package/src/store/reducers/QuestionaireReducer.js +29 -0
- package/src/store/reducers/ReportsReducer.js +24 -0
- package/src/store/reducers/SkeletonReducer.js +20 -0
- package/src/store/reducers/ThemeReducer.js +106 -0
- package/src/store/reducers/TranslationReducer.js +126 -0
- package/src/store/reducers/dashboardEditorSlice.js +77 -0
- package/src/store/reducers/districtHealthDashboardSlice.js +58 -0
- package/src/store/reducers/immunizationSlice.js +234 -0
- package/src/store/slices/dashboardPagesSlice.js +51 -0
- package/src/utils/.gitkeep +0 -0
- package/src/utils/FormConstants.js +2629 -0
- package/src/utils/GujaratTopoChart.jsx +483 -0
- package/src/utils/UUIDgenerator.js +8 -0
- package/src/utils/appointment-utils/appointment-utils.js +123 -0
- package/src/utils/feature.js +42 -0
- package/src/utils/getThemeColor.js +12 -0
- package/src/utils/localStorageHelper.js +11 -0
- package/src/utils/notifications/enable-push-notifications.js +27 -0
- package/src/utils/resolveAppliedStyle.js +11 -0
- package/src/utils/themeConfigs.js +1483 -0
- package/src/views/custom-components/.gitkeep +0 -0
- package/src/views/custom-components/AgIconButton/RIf.jsx +14 -0
- package/src/views/custom-components/AgIconButton/button.jsx +108 -0
- package/src/views/custom-components/AgIconButton/waterDrop.jsx +95 -0
- package/src/views/custom-components/AgIconButton/waterDrop.scss +37 -0
- package/src/views/custom-components/AlertPlaceholder.jsx +32 -0
- package/src/views/custom-components/AllFaIconsSelector.jsx +56 -0
- package/src/views/custom-components/CkEditor/CkEditor.js +102 -0
- package/src/views/custom-components/CustomAccordion.jsx +72 -0
- package/src/views/custom-components/CustomActionIcons.jsx +118 -0
- package/src/views/custom-components/CustomAutoComplete.jsx +188 -0
- package/src/views/custom-components/CustomCheckBox.jsx +60 -0
- package/src/views/custom-components/CustomConfirmationModal.jsx +118 -0
- package/src/views/custom-components/CustomCountrySelect.jsx +129 -0
- package/src/views/custom-components/CustomDatePicker.jsx +122 -0
- package/src/views/custom-components/CustomDropdown.jsx +191 -0
- package/src/views/custom-components/CustomFileUpload.jsx +387 -0
- package/src/views/custom-components/CustomFullCalendar.jsx +514 -0
- package/src/views/custom-components/CustomInfiniteScroll.jsx +126 -0
- package/src/views/custom-components/CustomRadioComponent.jsx +65 -0
- package/src/views/custom-components/CustomStatsComponent.jsx +114 -0
- package/src/views/custom-components/CustomSvgUpload.jsx +170 -0
- package/src/views/custom-components/CustomSwitch.jsx +37 -0
- package/src/views/custom-components/CustomTabPanel.jsx +19 -0
- package/src/views/custom-components/CustomTextArea.jsx +62 -0
- package/src/views/custom-components/CustomTextArea.scss +27 -0
- package/src/views/custom-components/CustomTextField.jsx +116 -0
- package/src/views/custom-components/CustomToggleSwitch.jsx +138 -0
- package/src/views/custom-components/CustomTooltip.jsx +51 -0
- package/src/views/custom-components/CustomZoomImage.jsx +134 -0
- package/src/views/custom-components/CustomizedTable/CustomizedTableV2.jsx +1407 -0
- package/src/views/custom-components/CustomizedTable/VirtualizeTableBody.jsx +295 -0
- package/src/views/custom-components/CustomizedTable/helper.jsx +159 -0
- package/src/views/custom-components/CustomizedTable.jsx +532 -0
- package/src/views/custom-components/EditInputField.jsx +174 -0
- package/src/views/custom-components/FieldDescription.jsx +22 -0
- package/src/views/custom-components/FileDisplayComponent.jsx +138 -0
- package/src/views/custom-components/FormItem.jsx +53 -0
- package/src/views/custom-components/GenericChart.jsx +80 -0
- package/src/views/custom-components/InfoBadge.jsx +60 -0
- package/src/views/custom-components/PostgresEditor.jsx +801 -0
- package/src/views/custom-components/ResizableEditAutocompleteField.jsx +249 -0
- package/src/views/custom-components/ResizableEditInputField.jsx +215 -0
- package/src/views/custom-components/ResizeableEditSelectField.jsx +197 -0
- package/src/views/custom-components/SideOverlay.jsx +113 -0
- package/src/views/custom-components/SideOverlay.scss +42 -0
- package/src/views/custom-components/calendar.scss +571 -0
- package/src/views/feature-components/.gitkeep +0 -0
- package/src/views/feature-components/Dashboard/DashboardUI.jsx +1043 -0
- package/src/views/feature-components/Dashboard/DhnddModal/AshaDataQualityVerificationModal.jsx +278 -0
- package/src/views/feature-components/Dashboard/PinFeatureModal.jsx +143 -0
- package/src/views/feature-components/Dashboard/QuickLinks.jsx +163 -0
- package/src/views/feature-components/Dashboard/Taskbar.jsx +56 -0
- package/src/views/feature-components/Dashboard/WebtasksFilterForm.jsx +109 -0
- package/src/views/feature-components/Dashboard/WidgetCard.jsx +161 -0
- package/src/views/feature-components/Dashboard/actionModal.jsx +263 -0
- package/src/views/feature-components/Dashboard/ekavachModal/HealthWorkerIncorrectDetailsModal.jsx +332 -0
- package/src/views/feature-components/Dashboard/ekavachModal/MoMaternalDeathVerifcationModal.jsx +275 -0
- package/src/views/feature-components/Dashboard/ekavachModal/MoVerficationForChildScreeningMoadal.jsx +566 -0
- package/src/views/feature-components/FeatureUsageAnalytics/FeatureUsageAnalytics.jsx +989 -0
- package/src/views/feature-components/Features/NewServerManagement.jsx +217 -0
- package/src/views/feature-components/Features/ServerManagement.scss +120 -0
- package/src/views/feature-components/ForgotPassword/ForgotPassword.jsx +226 -0
- package/src/views/feature-components/LocationDirective/LocationDirective.jsx +992 -0
- package/src/views/feature-components/LocationDirective/LocationDirectiveV2.jsx +909 -0
- package/src/views/feature-components/NotFound.jsx +66 -0
- package/src/views/feature-components/Onboarding/Onboarding.jsx +1400 -0
- package/src/views/feature-components/Skeletons.js +115 -0
- package/src/views/feature-components/Unauthorized.jsx +48 -0
- package/src/views/feature-components/VerifyRoute.jsx +88 -0
- package/src/views/feature-components/YearlyRecap/YearlyRecap.jsx +357 -0
- package/src/views/feature-components/YearlyRecap/components/RecapSlide.jsx +183 -0
- package/src/views/feature-components/YearlyRecap/languageTranslator/TranslationContext.js +5 -0
- package/src/views/feature-components/YearlyRecap/languageTranslator/TranslationProvider.jsx +26 -0
- package/src/views/feature-components/YearlyRecap/languageTranslator/i18n.js +46 -0
- package/src/views/feature-components/YearlyRecap/languageTranslator/translations.json +167 -0
- package/src/views/feature-components/YearlyRecap/slides/IntroSlide.jsx +233 -0
- package/src/views/feature-components/YearlyRecap/slides/MaternalHealthSlide.jsx +146 -0
- package/src/views/feature-components/YearlyRecap/slides/MetricSlide.jsx +227 -0
- package/src/views/feature-components/YearlyRecap/slides/OutroSlide.jsx +701 -0
- package/src/views/feature-components/YearlyRecap/slides/ReachSlide.jsx +273 -0
- package/src/views/feature-components/login/Login.jsx +840 -0
- package/src/views/feature-components/login/Login.scss +154 -0
- package/src/views/feature-components/login/LoginConfigurator.jsx +1149 -0
- package/src/views/feature-components/login/TwoFactorSetupModal.jsx +411 -0
- package/src/views/feature-components/login/simplifyMenu.js +45 -0
- package/src/views/feature-components/system-config/ManageSystemConfigs.jsx +284 -0
- package/src/views/feature-components/system-config/SystemConfig.jsx +299 -0
- package/src/views/feature-components/users/ChangePasswordModal.jsx +243 -0
- package/src/views/feature-components/users/PasswordField.jsx +56 -0
- package/dist/index.css +0 -1
- package/dist/index.js +0 -32001
- package/dist/index.js.map +0 -1
package/src/views/feature-components/Dashboard/ekavachModal/HealthWorkerIncorrectDetailsModal.jsx
ADDED
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
import React, { useEffect, useState } from 'react';
|
|
2
|
+
import { Modal, Typography, IconButton, Button, Chip, Divider } from '@mui/material';
|
|
3
|
+
import Grid from '@mui/material/Grid2'; // Ensure you are using Grid2 as per your imports
|
|
4
|
+
import { useForm, FormProvider, useWatch } from 'react-hook-form';
|
|
5
|
+
import * as Yup from 'yup';
|
|
6
|
+
import { yupResolver } from '@hookform/resolvers/yup';
|
|
7
|
+
import PropTypes from 'prop-types';
|
|
8
|
+
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
9
|
+
import { faXmark, faUser, faPhone, faLocationDot } from '@fortawesome/free-solid-svg-icons';
|
|
10
|
+
import CustomCheckBox from '@/views/custom-components/CustomCheckBox';
|
|
11
|
+
import CustomTextField from '@/views/custom-components/CustomTextField';
|
|
12
|
+
import { showToast } from '@/common/toaster/toaster';
|
|
13
|
+
import { execute, executeAll } from '@/common/services/GlobalApis';
|
|
14
|
+
|
|
15
|
+
// --- Validation Schema ---
|
|
16
|
+
const validationSchema = Yup.object().shape({
|
|
17
|
+
currentMobileCorrect: Yup.boolean(),
|
|
18
|
+
mobileNumber: Yup.string().when('currentMobileCorrect', {
|
|
19
|
+
is: (val) => val === false, // If checkbox is NOT checked
|
|
20
|
+
then: () =>
|
|
21
|
+
Yup.string()
|
|
22
|
+
.required('Mobile number is required')
|
|
23
|
+
.matches(/^[0-9]{10}$/, 'Must be exactly 10 digits'),
|
|
24
|
+
otherwise: () => Yup.string().notRequired(), // If checked, ignore validation
|
|
25
|
+
}),
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
const HealthWorkerIncorrectDetailsModal = ({ open, onClose, task, onSave }) => {
|
|
29
|
+
const initialValues = {
|
|
30
|
+
currentMobileCorrect: false,
|
|
31
|
+
mobileNumber: '',
|
|
32
|
+
};
|
|
33
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
34
|
+
const [callData, setCallData] = useState(null);
|
|
35
|
+
const methods = useForm({
|
|
36
|
+
mode: 'onChange',
|
|
37
|
+
resolver: yupResolver(validationSchema),
|
|
38
|
+
defaultValues: initialValues,
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
const {
|
|
42
|
+
control,
|
|
43
|
+
handleSubmit,
|
|
44
|
+
formState: { errors },
|
|
45
|
+
reset,
|
|
46
|
+
setValue,
|
|
47
|
+
clearErrors,
|
|
48
|
+
} = methods;
|
|
49
|
+
|
|
50
|
+
// Watch the checkbox to conditionally disable the input
|
|
51
|
+
const isNumberCorrect = useWatch({ control, name: 'currentMobileCorrect' });
|
|
52
|
+
|
|
53
|
+
// Reset form when modal opens
|
|
54
|
+
useEffect(() => {
|
|
55
|
+
if (open) {
|
|
56
|
+
reset(initialValues);
|
|
57
|
+
}
|
|
58
|
+
}, [open, reset]);
|
|
59
|
+
|
|
60
|
+
// Handle Input Logic: Clear errors/value when checkbox toggles
|
|
61
|
+
useEffect(() => {
|
|
62
|
+
if (isNumberCorrect) {
|
|
63
|
+
// If checked: Set value from record
|
|
64
|
+
const recordNumber = task?.details?.['Phone Number on Record'];
|
|
65
|
+
setValue('mobileNumber', recordNumber || '');
|
|
66
|
+
clearErrors('mobileNumber');
|
|
67
|
+
} else {
|
|
68
|
+
// If unchecked: Clear the field
|
|
69
|
+
setValue('mobileNumber', '');
|
|
70
|
+
}
|
|
71
|
+
}, [isNumberCorrect, task, setValue]);
|
|
72
|
+
|
|
73
|
+
// 1. INIT: Fetch Call Data when modal opens
|
|
74
|
+
useEffect(() => {
|
|
75
|
+
if (open && task?.taskId) {
|
|
76
|
+
const fetchCallData = async () => {
|
|
77
|
+
setIsLoading(true);
|
|
78
|
+
try {
|
|
79
|
+
const response = await execute({
|
|
80
|
+
code: 'incorrect_details_retrieve_call_data',
|
|
81
|
+
parameters: {
|
|
82
|
+
taskId: task.taskId,
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
if (response?.data?.result?.length > 0) {
|
|
86
|
+
setCallData(response?.data?.result[0]);
|
|
87
|
+
}
|
|
88
|
+
} catch (error) {
|
|
89
|
+
console.error(error);
|
|
90
|
+
showToast({ message: 'Error in loading call data', type: 'error' });
|
|
91
|
+
} finally {
|
|
92
|
+
setIsLoading(false);
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
fetchCallData();
|
|
97
|
+
|
|
98
|
+
// Reset form
|
|
99
|
+
reset({ currentMobileCorrect: false, mobileNumber: '' });
|
|
100
|
+
}
|
|
101
|
+
}, [open, task, reset]);
|
|
102
|
+
|
|
103
|
+
// 3. SUBMIT: Handle API execution
|
|
104
|
+
const onSubmit = async (data) => {
|
|
105
|
+
setIsLoading(true);
|
|
106
|
+
|
|
107
|
+
// Base Query
|
|
108
|
+
const queryDtos = [
|
|
109
|
+
{
|
|
110
|
+
code: 'incorrect_details_update',
|
|
111
|
+
parameters: {
|
|
112
|
+
taskId: task.taskId,
|
|
113
|
+
mobileNumber: data.mobileNumber,
|
|
114
|
+
},
|
|
115
|
+
sequence: 1,
|
|
116
|
+
},
|
|
117
|
+
];
|
|
118
|
+
|
|
119
|
+
// Add logic based on Call Types (from init API)
|
|
120
|
+
if (callData && callData.callTypes) {
|
|
121
|
+
const callTypes = callData.callTypes.split(',');
|
|
122
|
+
|
|
123
|
+
callTypes.forEach((callType) => {
|
|
124
|
+
switch (callType) {
|
|
125
|
+
case 'ASHA_VERI':
|
|
126
|
+
queryDtos.push({
|
|
127
|
+
code: 'incorrect_details_update_insert_gvk_asha_verification_info',
|
|
128
|
+
parameters: { taskId: task?.taskId },
|
|
129
|
+
sequence: queryDtos.length + 1,
|
|
130
|
+
});
|
|
131
|
+
break;
|
|
132
|
+
case 'ASHA_TRAINING_VERI':
|
|
133
|
+
queryDtos.push({
|
|
134
|
+
code: 'incorrect_details_update_insert_gvk_training_verification_info',
|
|
135
|
+
parameters: { taskId: task?.taskId },
|
|
136
|
+
sequence: queryDtos.length + 1,
|
|
137
|
+
});
|
|
138
|
+
break;
|
|
139
|
+
default:
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
try {
|
|
146
|
+
await executeAll(queryDtos);
|
|
147
|
+
const updatedTask = {
|
|
148
|
+
...task,
|
|
149
|
+
selectedAction: 'VERIFIED',
|
|
150
|
+
};
|
|
151
|
+
await onSave(updatedTask);
|
|
152
|
+
// Pass the task back to parent on success, similar to $uibModalInstance.close($scope.task)
|
|
153
|
+
onClose(task);
|
|
154
|
+
} catch (error) {
|
|
155
|
+
console.error(error);
|
|
156
|
+
showToast({ message: 'Error in updating call data', type: 'error' });
|
|
157
|
+
} finally {
|
|
158
|
+
setIsLoading(false);
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
// Helper for Details
|
|
163
|
+
const DetailItem = ({ label, value, icon }) => {
|
|
164
|
+
if (!value) return null;
|
|
165
|
+
return (
|
|
166
|
+
<div className="flex flex-col mb-3">
|
|
167
|
+
<Typography
|
|
168
|
+
variant="caption"
|
|
169
|
+
className="text-gray-500 uppercase tracking-wider mb-1 flex items-center gap-2 text-[11px] font-semibold"
|
|
170
|
+
>
|
|
171
|
+
{icon && <FontAwesomeIcon icon={icon} className="text-gray-400" />}
|
|
172
|
+
{label}
|
|
173
|
+
</Typography>
|
|
174
|
+
<Typography variant="body2" className="font-medium text-gray-900 text-[14px]">
|
|
175
|
+
{value}
|
|
176
|
+
</Typography>
|
|
177
|
+
</div>
|
|
178
|
+
);
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
DetailItem.propTypes = {
|
|
182
|
+
label: PropTypes.string,
|
|
183
|
+
value: PropTypes.string,
|
|
184
|
+
icon: PropTypes.object,
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
const currentMobileCorrectChanged = () => {};
|
|
188
|
+
return (
|
|
189
|
+
<Modal open={open} onClose={onClose} className="flex items-center justify-center">
|
|
190
|
+
{/* Main Container */}
|
|
191
|
+
<Grid container className="bg-white shadow-2xl rounded-lg flex flex-col w-[90%] max-w-[600px] outline-none">
|
|
192
|
+
{/* Header */}
|
|
193
|
+
<div className="flex justify-between items-center p-5 border-b border-gray-100">
|
|
194
|
+
<Typography variant="h6" className="font-bold text-customBlue">
|
|
195
|
+
Health Workers Incorrect Details Updation
|
|
196
|
+
</Typography>
|
|
197
|
+
<IconButton onClick={onClose} size="small">
|
|
198
|
+
<FontAwesomeIcon icon={faXmark} className="text-gray-400 hover:text-gray-600" />
|
|
199
|
+
</IconButton>
|
|
200
|
+
</div>
|
|
201
|
+
|
|
202
|
+
<FormProvider {...methods}>
|
|
203
|
+
<form onSubmit={handleSubmit(onSubmit)} className="flex flex-col">
|
|
204
|
+
{/* Body Content */}
|
|
205
|
+
<div className="max-h-[60vh] overflow-y-auto w-full">
|
|
206
|
+
<div className="p-6">
|
|
207
|
+
{/* Read-Only Details Grid */}
|
|
208
|
+
<div className="grid grid-cols-1 md:grid-cols-2 gap-x-8 gap-y-2 mb-6">
|
|
209
|
+
<DetailItem
|
|
210
|
+
label="Health Worker"
|
|
211
|
+
value={task?.details?.['Name of Health Worker'] || 'N/A'}
|
|
212
|
+
icon={faUser}
|
|
213
|
+
/>
|
|
214
|
+
<DetailItem label="Role" value={task?.details?.['Role'] || 'N/A'} />
|
|
215
|
+
<DetailItem
|
|
216
|
+
label="Phone on Record"
|
|
217
|
+
value={task?.details?.['Phone Number on Record'] || 'N/A'}
|
|
218
|
+
icon={faPhone}
|
|
219
|
+
/>
|
|
220
|
+
<DetailItem
|
|
221
|
+
label="Last Contact Attempt"
|
|
222
|
+
value={task?.details?.['Last Contact Attempted on'] || 'N/A'}
|
|
223
|
+
/>
|
|
224
|
+
<DetailItem label="Location" value={task?.details?.['Location'] || 'N/A'} icon={faLocationDot} />
|
|
225
|
+
|
|
226
|
+
{/* Issue Badge */}
|
|
227
|
+
{task?.details?.['Issue'] && (
|
|
228
|
+
<div className="flex flex-col mb-3">
|
|
229
|
+
<Typography
|
|
230
|
+
variant="caption"
|
|
231
|
+
className="text-gray-500 uppercase tracking-wider mb-1 font-semibold text-[11px]"
|
|
232
|
+
>
|
|
233
|
+
Reported Issue
|
|
234
|
+
</Typography>
|
|
235
|
+
<div>
|
|
236
|
+
<Chip
|
|
237
|
+
label={task?.details?.['Issue']}
|
|
238
|
+
color="warning"
|
|
239
|
+
size="small"
|
|
240
|
+
sx={{ borderRadius: '4px', height: '24px', fontSize: '12px', fontWeight: 600 }}
|
|
241
|
+
/>
|
|
242
|
+
</div>
|
|
243
|
+
</div>
|
|
244
|
+
)}
|
|
245
|
+
</div>
|
|
246
|
+
|
|
247
|
+
<Divider className="mb-6" />
|
|
248
|
+
|
|
249
|
+
{/* Form Section */}
|
|
250
|
+
<div className="bg-gray-50 p-5 rounded border border-gray-200">
|
|
251
|
+
{/* Checkbox */}
|
|
252
|
+
<div className="mb-4">
|
|
253
|
+
<CustomCheckBox
|
|
254
|
+
name="currentMobileCorrect"
|
|
255
|
+
control={control}
|
|
256
|
+
className="my-2"
|
|
257
|
+
label={' Current mobile number is correct'}
|
|
258
|
+
labelSizeInRem="1rem"
|
|
259
|
+
onChange={() => currentMobileCorrectChanged()}
|
|
260
|
+
/>
|
|
261
|
+
</div>
|
|
262
|
+
|
|
263
|
+
{/* Input Field */}
|
|
264
|
+
<div
|
|
265
|
+
className={`transition-opacity duration-300 ${isNumberCorrect ? 'opacity-50 pointer-events-none' : 'opacity-100'}`}
|
|
266
|
+
>
|
|
267
|
+
<CustomTextField
|
|
268
|
+
control={control}
|
|
269
|
+
name={`mobileNumber`}
|
|
270
|
+
errors={errors}
|
|
271
|
+
type="number"
|
|
272
|
+
placeholder="Updated Mobile Number"
|
|
273
|
+
/>
|
|
274
|
+
{/* <Controller
|
|
275
|
+
name="mobileNumber"
|
|
276
|
+
control={control}
|
|
277
|
+
render={({ field }) => (
|
|
278
|
+
<TextField
|
|
279
|
+
{...field}
|
|
280
|
+
fullWidth
|
|
281
|
+
label="Updated Mobile Number"
|
|
282
|
+
placeholder="Enter 10-digit number"
|
|
283
|
+
variant="outlined"
|
|
284
|
+
size="small"
|
|
285
|
+
disabled={isNumberCorrect}
|
|
286
|
+
error={!!errors.mobileNumber}
|
|
287
|
+
helperText={errors.mobileNumber?.message}
|
|
288
|
+
inputProps={{ maxLength: 10 }}
|
|
289
|
+
sx={{ backgroundColor: 'white' }}
|
|
290
|
+
/>
|
|
291
|
+
)}
|
|
292
|
+
/> */}
|
|
293
|
+
</div>
|
|
294
|
+
</div>
|
|
295
|
+
</div>
|
|
296
|
+
</div>
|
|
297
|
+
|
|
298
|
+
{/* Footer Buttons */}
|
|
299
|
+
<div className="p-4 px-6 bg-gray-50 border-t border-gray-100 flex justify-end gap-3 rounded-b-lg">
|
|
300
|
+
<Button
|
|
301
|
+
onClick={onClose}
|
|
302
|
+
variant="contained"
|
|
303
|
+
color="secondary"
|
|
304
|
+
// className="border-gray-300 text-gray-600 normal-case"
|
|
305
|
+
>
|
|
306
|
+
Cancel
|
|
307
|
+
</Button>
|
|
308
|
+
<Button
|
|
309
|
+
type="submit"
|
|
310
|
+
variant="contained"
|
|
311
|
+
color="primary"
|
|
312
|
+
disabled={isLoading}
|
|
313
|
+
// className="bg-blue-600 hover:bg-blue-700 normal-case shadow-none"
|
|
314
|
+
>
|
|
315
|
+
Save
|
|
316
|
+
</Button>
|
|
317
|
+
</div>
|
|
318
|
+
</form>
|
|
319
|
+
</FormProvider>
|
|
320
|
+
</Grid>
|
|
321
|
+
</Modal>
|
|
322
|
+
);
|
|
323
|
+
};
|
|
324
|
+
|
|
325
|
+
HealthWorkerIncorrectDetailsModal.propTypes = {
|
|
326
|
+
open: PropTypes.bool,
|
|
327
|
+
onClose: PropTypes.func,
|
|
328
|
+
task: PropTypes.object, // Passed from parent containing details
|
|
329
|
+
onSave: PropTypes.func,
|
|
330
|
+
};
|
|
331
|
+
|
|
332
|
+
export default HealthWorkerIncorrectDetailsModal;
|
package/src/views/feature-components/Dashboard/ekavachModal/MoMaternalDeathVerifcationModal.jsx
ADDED
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
import React, { useEffect, useState } from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import {
|
|
4
|
+
Modal,
|
|
5
|
+
Typography,
|
|
6
|
+
IconButton,
|
|
7
|
+
Button,
|
|
8
|
+
Divider,
|
|
9
|
+
MenuItem,
|
|
10
|
+
Select,
|
|
11
|
+
FormControl,
|
|
12
|
+
CircularProgress,
|
|
13
|
+
} from '@mui/material';
|
|
14
|
+
import { useForm, FormProvider, Controller } from 'react-hook-form';
|
|
15
|
+
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
16
|
+
import { faXmark, faSkull, faCalendar, faPhone, faLocationDot, faUserNurse } from '@fortawesome/free-solid-svg-icons';
|
|
17
|
+
import * as Yup from 'yup';
|
|
18
|
+
import { yupResolver } from '@hookform/resolvers/yup';
|
|
19
|
+
|
|
20
|
+
// --- Services/Utils (Mock Imports based on context) ---
|
|
21
|
+
import { execute } from '@/common/services/GlobalApis';
|
|
22
|
+
import { FormItem } from '@/views/custom-components/FormItem';
|
|
23
|
+
import CustomRadioGroup from '@/views/custom-components/CustomRadioComponent';
|
|
24
|
+
import { showToast } from '@/common/toaster/toaster';
|
|
25
|
+
|
|
26
|
+
// --- Validation Schema ---
|
|
27
|
+
const validationSchema = Yup.object().shape({
|
|
28
|
+
actionKey: Yup.string().required('Please select an action'),
|
|
29
|
+
// verbalAutopsy is required. We handle "true"/"false" strings from Radio and cast later if needed
|
|
30
|
+
verbalAutopsy: Yup.string().required('Please select a Verbal Autopsy option'),
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
// --- Detail Item Component ---
|
|
34
|
+
const DetailItem = ({ label, value, icon }) => {
|
|
35
|
+
if (!value) return null;
|
|
36
|
+
return (
|
|
37
|
+
<div className="flex flex-col mb-3">
|
|
38
|
+
<Typography
|
|
39
|
+
variant="caption"
|
|
40
|
+
className="text-gray-500 uppercase tracking-wider mb-1 flex items-center gap-2 text-[11px] font-semibold"
|
|
41
|
+
>
|
|
42
|
+
{icon && <FontAwesomeIcon icon={icon} className="text-gray-400" />}
|
|
43
|
+
{label}
|
|
44
|
+
</Typography>
|
|
45
|
+
<Typography variant="body2" className="font-medium text-gray-900 text-[14px]">
|
|
46
|
+
{value}
|
|
47
|
+
</Typography>
|
|
48
|
+
</div>
|
|
49
|
+
);
|
|
50
|
+
};
|
|
51
|
+
DetailItem.propTypes = {
|
|
52
|
+
label: PropTypes.string,
|
|
53
|
+
value: PropTypes.string,
|
|
54
|
+
icon: PropTypes.object,
|
|
55
|
+
};
|
|
56
|
+
const MoMaternalDeathVerifcationModal = ({ open, onClose, task, message, onSave }) => {
|
|
57
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
58
|
+
const [actionsList, setActionsList] = useState([]);
|
|
59
|
+
|
|
60
|
+
// --- Form Setup ---
|
|
61
|
+
const methods = useForm({
|
|
62
|
+
mode: 'onChange',
|
|
63
|
+
resolver: yupResolver(validationSchema),
|
|
64
|
+
defaultValues: {
|
|
65
|
+
actionKey: null,
|
|
66
|
+
verbalAutopsy: '', // Default empty to force selection
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
const {
|
|
71
|
+
control,
|
|
72
|
+
handleSubmit,
|
|
73
|
+
reset,
|
|
74
|
+
formState: { errors },
|
|
75
|
+
} = methods;
|
|
76
|
+
|
|
77
|
+
// --- 1. Init: Fetch Actions & Reset ---
|
|
78
|
+
useEffect(() => {
|
|
79
|
+
if (open) {
|
|
80
|
+
// Reset form
|
|
81
|
+
reset({ actionKey: null, verbalAutopsy: '' });
|
|
82
|
+
|
|
83
|
+
const fetchActions = async () => {
|
|
84
|
+
try {
|
|
85
|
+
// Logic: QueryDAO.executeQuery({ code: 'mo_death_verification_mo_actions' ... })
|
|
86
|
+
const response = await execute({
|
|
87
|
+
code: 'mo_death_verification_mo_actions',
|
|
88
|
+
parameters: {},
|
|
89
|
+
});
|
|
90
|
+
if (response?.data?.result?.length > 0) {
|
|
91
|
+
setActionsList(response.data.result);
|
|
92
|
+
}
|
|
93
|
+
} catch (error) {
|
|
94
|
+
console.error('Failed to fetch actions', error);
|
|
95
|
+
showToast({ message: 'Unable to fetch actions', type: 'error' });
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
fetchActions();
|
|
100
|
+
}
|
|
101
|
+
}, [open, reset]);
|
|
102
|
+
|
|
103
|
+
// --- 2. Submit Logic ---
|
|
104
|
+
const onSubmit = async (data) => {
|
|
105
|
+
setIsLoading(true);
|
|
106
|
+
|
|
107
|
+
// Convert string "true"/"false" back to boolean for API if necessary
|
|
108
|
+
const isVerbalAutopsy = data.verbalAutopsy === 'true';
|
|
109
|
+
|
|
110
|
+
try {
|
|
111
|
+
await execute({
|
|
112
|
+
code: 'maternal_death_verification_mo_verbal_autospy_updation',
|
|
113
|
+
parameters: {
|
|
114
|
+
taskId: task.taskId,
|
|
115
|
+
verbalAutopsy: isVerbalAutopsy,
|
|
116
|
+
},
|
|
117
|
+
});
|
|
118
|
+
const selectedAction = actionsList?.find((action) => action?.actionKey === Number(data?.actionKey || '0'));
|
|
119
|
+
console.log(actionsList, selectedAction, data.actionKey);
|
|
120
|
+
const updatedTask = {
|
|
121
|
+
...task,
|
|
122
|
+
isOtherDetailsRequired: selectedAction?.isOtherDetailsRequired,
|
|
123
|
+
selectedAction: Number(data.actionKey),
|
|
124
|
+
action: selectedAction,
|
|
125
|
+
};
|
|
126
|
+
await onSave(updatedTask);
|
|
127
|
+
onClose(updatedTask);
|
|
128
|
+
} catch (error) {
|
|
129
|
+
console.error(error);
|
|
130
|
+
showToast({ message: 'Unable to save task actions', type: 'error' });
|
|
131
|
+
} finally {
|
|
132
|
+
setIsLoading(false);
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
return (
|
|
137
|
+
<Modal open={open} onClose={() => onClose(null)} className="flex items-center justify-center">
|
|
138
|
+
{/* CHANGED: Replaced <Grid container ...> with <div ...>
|
|
139
|
+
The 'flex flex-col' classes already handle the layout logic previously done by Grid.
|
|
140
|
+
*/}
|
|
141
|
+
<div className="bg-white shadow-2xl rounded-lg flex flex-col w-[90%] max-w-[700px] outline-none max-h-[90vh]">
|
|
142
|
+
{/* Header */}
|
|
143
|
+
<div className="flex justify-between items-center p-5 border-b border-gray-100 bg-gray-50 rounded-t-lg">
|
|
144
|
+
<Typography variant="h6" className="font-bold text-customBlue">
|
|
145
|
+
{message || 'Perform Action'}
|
|
146
|
+
</Typography>
|
|
147
|
+
<IconButton onClick={() => onClose(null)} size="small" disabled={isLoading}>
|
|
148
|
+
<FontAwesomeIcon icon={faXmark} className="text-gray-400 hover:text-gray-600" />
|
|
149
|
+
</IconButton>
|
|
150
|
+
</div>
|
|
151
|
+
|
|
152
|
+
<FormProvider {...methods}>
|
|
153
|
+
<form onSubmit={handleSubmit(onSubmit)} className="flex flex-col flex-1 overflow-hidden">
|
|
154
|
+
<div className="overflow-y-auto p-6">
|
|
155
|
+
{/* Title */}
|
|
156
|
+
<Typography
|
|
157
|
+
variant="subtitle1"
|
|
158
|
+
className="font-bold text-primary-600 mb-4 border-l-4 border-blue-500 pl-3"
|
|
159
|
+
>
|
|
160
|
+
Maternal Death Verification
|
|
161
|
+
</Typography>
|
|
162
|
+
|
|
163
|
+
{/* Details Grid */}
|
|
164
|
+
<div className="grid grid-cols-1 md:grid-cols-2 gap-x-8 gap-y-4 mb-6 bg-gray-50 p-4 rounded-md border border-gray-100">
|
|
165
|
+
<DetailItem label="Birth Date" value={task?.details?.['Birth date'] || 'N/A'} icon={faCalendar} />
|
|
166
|
+
<DetailItem label="Death Type" value={task?.details?.['Death Type'] || 'N/A'} icon={faSkull} />
|
|
167
|
+
|
|
168
|
+
<DetailItem label="Death Date" value={task?.details?.['Death date'] || 'N/A'} icon={faCalendar} />
|
|
169
|
+
<DetailItem
|
|
170
|
+
label="Last Delivery Date"
|
|
171
|
+
value={task?.details?.['Last delivery date'] || 'N/A'}
|
|
172
|
+
icon={faCalendar}
|
|
173
|
+
/>
|
|
174
|
+
|
|
175
|
+
<DetailItem label="Death Reason" value={task?.details?.['Death Reason'] || 'N/A'} />
|
|
176
|
+
<DetailItem label="Location" value={task?.details?.['Location'] || 'N/A'} icon={faLocationDot} />
|
|
177
|
+
|
|
178
|
+
<DetailItem
|
|
179
|
+
label="Family Contact"
|
|
180
|
+
value={task?.details?.['Family Contact Detail'] || 'N/A'}
|
|
181
|
+
icon={faPhone}
|
|
182
|
+
/>
|
|
183
|
+
<DetailItem label="FHW Name" value={task?.details?.['FHW Name'] || 'N/A'} icon={faUserNurse} />
|
|
184
|
+
</div>
|
|
185
|
+
|
|
186
|
+
<Divider className="mb-6" />
|
|
187
|
+
|
|
188
|
+
{/* Form Controls */}
|
|
189
|
+
<div className="space-y-6">
|
|
190
|
+
{/* 1. Action Dropdown */}
|
|
191
|
+
<Controller
|
|
192
|
+
name="actionKey"
|
|
193
|
+
control={control}
|
|
194
|
+
render={({ field }) => (
|
|
195
|
+
<>
|
|
196
|
+
<FormItem label="Action" required>
|
|
197
|
+
<FormControl fullWidth error={!!errors.actionKey} size="small">
|
|
198
|
+
<Select
|
|
199
|
+
{...field}
|
|
200
|
+
labelId="action-select-label"
|
|
201
|
+
value={field.value || ''}
|
|
202
|
+
onChange={(e) => field.onChange(e.target.value)}
|
|
203
|
+
>
|
|
204
|
+
<MenuItem value="">
|
|
205
|
+
<em>-- Select --</em>
|
|
206
|
+
</MenuItem>
|
|
207
|
+
{actionsList.map((action, index) => (
|
|
208
|
+
<MenuItem key={index} value={action.actionKey}>
|
|
209
|
+
{action.displayText}
|
|
210
|
+
</MenuItem>
|
|
211
|
+
))}
|
|
212
|
+
</Select>
|
|
213
|
+
<p className="error-helper-text">{errors['actionKey']?.message}</p>
|
|
214
|
+
</FormControl>
|
|
215
|
+
</FormItem>
|
|
216
|
+
</>
|
|
217
|
+
)}
|
|
218
|
+
/>
|
|
219
|
+
|
|
220
|
+
{/* 2. Verbal Autopsy Radio */}
|
|
221
|
+
<FormControl component="fieldset" className="w-full">
|
|
222
|
+
<FormItem label="Verbal Autopsy" required>
|
|
223
|
+
<CustomRadioGroup
|
|
224
|
+
control={control}
|
|
225
|
+
name={`verbalAutopsy`}
|
|
226
|
+
errors={errors}
|
|
227
|
+
options={[
|
|
228
|
+
{ label: 'Yes', value: true },
|
|
229
|
+
{ label: 'No', value: false },
|
|
230
|
+
]}
|
|
231
|
+
direction="row"
|
|
232
|
+
/>
|
|
233
|
+
</FormItem>
|
|
234
|
+
</FormControl>
|
|
235
|
+
</div>
|
|
236
|
+
</div>
|
|
237
|
+
|
|
238
|
+
{/* Footer */}
|
|
239
|
+
<div className="p-4 px-6 bg-gray-50 border-t border-gray-100 flex justify-end gap-3 rounded-b-lg">
|
|
240
|
+
<Button
|
|
241
|
+
onClick={() => onClose(null)}
|
|
242
|
+
variant="outlined"
|
|
243
|
+
color="inherit"
|
|
244
|
+
disabled={isLoading}
|
|
245
|
+
className="border-gray-300 text-gray-600 normal-case"
|
|
246
|
+
>
|
|
247
|
+
Cancel
|
|
248
|
+
</Button>
|
|
249
|
+
<Button
|
|
250
|
+
type="submit"
|
|
251
|
+
variant="contained"
|
|
252
|
+
color="primary"
|
|
253
|
+
disabled={isLoading}
|
|
254
|
+
startIcon={isLoading ? <CircularProgress size={16} color="inherit" /> : null}
|
|
255
|
+
className="bg-blue-600 hover:bg-blue-700 normal-case shadow-none px-6"
|
|
256
|
+
>
|
|
257
|
+
{isLoading ? 'Saving...' : 'Save'}
|
|
258
|
+
</Button>
|
|
259
|
+
</div>
|
|
260
|
+
</form>
|
|
261
|
+
</FormProvider>
|
|
262
|
+
</div>
|
|
263
|
+
</Modal>
|
|
264
|
+
);
|
|
265
|
+
};
|
|
266
|
+
|
|
267
|
+
MoMaternalDeathVerifcationModal.propTypes = {
|
|
268
|
+
open: PropTypes.bool,
|
|
269
|
+
onClose: PropTypes.func, // onClose(task) on success, onClose(null) on cancel
|
|
270
|
+
task: PropTypes.object,
|
|
271
|
+
message: PropTypes.string,
|
|
272
|
+
onSave: PropTypes.func,
|
|
273
|
+
};
|
|
274
|
+
|
|
275
|
+
export default MoMaternalDeathVerifcationModal;
|