From 1508c54700b20124548e1c304c4747f36a91b5d8 Mon Sep 17 00:00:00 2001 From: deepvasoya Date: Tue, 20 May 2025 14:53:48 +0530 Subject: [PATCH] feat: clinic approval --- src/services/clinics.service.js | 2 +- .../ClinicDetails/component/FileEvaluate.jsx | 202 +++++++++--------- src/views/ClinicDetails/index.jsx | 90 +++++--- 3 files changed, 162 insertions(+), 132 deletions(-) diff --git a/src/services/clinics.service.js b/src/services/clinics.service.js index 828ec29..e854075 100644 --- a/src/services/clinics.service.js +++ b/src/services/clinics.service.js @@ -56,7 +56,7 @@ export const getClinicsById = (id) => { }; export const updateClinicStatus = (data) => { - const url = `/admin/clinic/status/`; + const url = `/admin/clinic/status`; return new Promise((resolve, reject) => { axiosInstance .put(url, data) diff --git a/src/views/ClinicDetails/component/FileEvaluate.jsx b/src/views/ClinicDetails/component/FileEvaluate.jsx index 2f8e27d..d15a913 100644 --- a/src/views/ClinicDetails/component/FileEvaluate.jsx +++ b/src/views/ClinicDetails/component/FileEvaluate.jsx @@ -1,21 +1,21 @@ -import CloseIcon from '@mui/icons-material/Close'; -import DoneIcon from '@mui/icons-material/Done'; -import RemoveRedEyeOutlinedIcon from '@mui/icons-material/RemoveRedEyeOutlined'; -import SaveAltIcon from '@mui/icons-material/SaveAlt'; -import VerifiedIcon from '@mui/icons-material/Verified'; -import { Box, Button, Grid, Modal, Typography } from '@mui/material'; -import { format } from 'date-fns'; -import React, { useEffect, useState } from 'react'; -import downloadIcon from '../../../assets/images/icon/download.svg'; -import ImagePreviewComponent from '../../../components/ImagePreviewComponent'; +import CloseIcon from "@mui/icons-material/Close"; +import DoneIcon from "@mui/icons-material/Done"; +import RemoveRedEyeOutlinedIcon from "@mui/icons-material/RemoveRedEyeOutlined"; +import SaveAltIcon from "@mui/icons-material/SaveAlt"; +import VerifiedIcon from "@mui/icons-material/Verified"; +import { Box, Button, Grid, Modal, Typography } from "@mui/material"; +import { format } from "date-fns"; +import React, { useEffect, useState } from "react"; +import downloadIcon from "../../../assets/images/icon/download.svg"; +import ImagePreviewComponent from "../../../components/ImagePreviewComponent"; import { ABN_NUMBER_LENGTH, CLINIC_DOCUMENT_STATUS, CLINIC_STATUS, FILE_EXTENTIONS_ICONS, GST_NUMBER_LENGTH, -} from '../../../constants'; -import { useStyles } from './styles/fileEvaluateStyles'; +} from "../../../constants"; +import { useStyles } from "./styles/fileEvaluateStyles"; const FileEvaluate = ({ companyStatus, @@ -32,68 +32,90 @@ const FileEvaluate = ({ const [notReviewedOtherFiles, setNotReviewedOtherFiles] = useState([]); // const getAscendingArray = (array) => { - // return filteredArray; // }; useEffect(() => { if (!Array.isArray(files)) return; - + // Process all files at once to avoid multiple iterations const reviewedLogo = []; const notReviewedLogo = []; const reviewedOther = []; const notReviewedOther = []; - - files.forEach(file => { + + files.forEach((file) => { // Handle logo documents if (file.logo_doc) { - if (file.logo_doc_is_verified) { - reviewedLogo.push({file: file.logo_doc, documentType: 'LOGO', isVerified: file.logo_doc_is_verified}); + if (file.logo_is_verified) { + reviewedLogo.push({ + file: file.logo_doc, + documentType: "LOGO", + isVerified: file.logo_is_verified, + }); } else { - notReviewedLogo.push({file: file.logo_doc, documentType: 'LOGO', isVerified: file.logo_doc_is_verified}); + notReviewedLogo.push({ + file: file.logo_doc, + documentType: "LOGO", + isVerified: file.logo_is_verified, + }); } } - + // Handle ABN and contract documents (excluding logo docs which are handled separately) - if (file.abn_doc ) { + if (file.abn_doc) { if (file.abn_doc_is_verified) { - reviewedOther.push({file: file.abn_doc, documentType: 'ABN', isVerified: file.abn_doc_is_verified}); - } - else{ - notReviewedOther.push({file: file.abn_doc, documentType: 'ABN', isVerified: file.abn_doc_is_verified}); + reviewedOther.push({ + file: file.abn_doc, + documentType: "ABN", + isVerified: file.abn_doc_is_verified, + }); + } else { + notReviewedOther.push({ + file: file.abn_doc, + documentType: "ABN", + isVerified: file.abn_doc_is_verified, + }); } } - + if (file.contract_doc) { if (file.contract_doc_is_verified) { - reviewedOther.push({file: file.contract_doc, documentType: 'CONTRACT', isVerified: file.contract_doc_is_verified}); - } else{ - notReviewedOther.push({file: file.contract_doc, documentType: 'CONTRACT', isVerified: file.contract_doc_is_verified}); + reviewedOther.push({ + file: file.contract_doc, + documentType: "CONTRACT", + isVerified: file.contract_doc_is_verified, + }); + } else { + notReviewedOther.push({ + file: file.contract_doc, + documentType: "CONTRACT", + isVerified: file.contract_doc_is_verified, + }); } } }); - + // Update state with filtered files setReviewedLogoFiles(reviewedLogo); setNotReviewedLogoFiles(notReviewedLogo); setReviewedOtherFiles(reviewedOther); setNotReviewedOtherFiles(notReviewedOther); - + // Debug logs - console.log('Files processed:', files.length); - console.log('reviewedLogoFiles:', reviewedLogo); - console.log('notReviewedLogoFiles:', notReviewedLogo); - console.log('reviewedOtherFiles:', reviewedOther); - console.log('notReviewedOtherFiles:', notReviewedOther); + console.log("Files processed:", files.length); + console.log("reviewedLogoFiles:", reviewedLogo); + console.log("notReviewedLogoFiles:", notReviewedLogo); + console.log("reviewedOtherFiles:", reviewedOther); + console.log("notReviewedOtherFiles:", notReviewedOther); }, [files]); // .........................get file name and extention function....................... const getFileNameUsingFile = (file) => { if (file) { // const url = new URL(file); // return url.pathname.split('/').pop(); - return file + return file; } return; }; @@ -101,8 +123,8 @@ const FileEvaluate = ({ const getFileExtentionUsingFile = (file) => { if (file) { const url = new URL(file.file); - const fileName = url.pathname.split('/').pop(); - return fileName.split('.').pop(); + const fileName = url.pathname.split("/").pop(); + return fileName.split(".").pop(); } return; }; @@ -111,20 +133,20 @@ const FileEvaluate = ({ const handleActionClick = (index, file, actionType) => { const newFile = { ...file, - status: - actionType === 'ACCEPT' - ? CLINIC_DOCUMENT_STATUS.APPROVED - : CLINIC_DOCUMENT_STATUS.REJECTED, + isVerified: + actionType === "ACCEPT" + ? true + : false, }; - if (file.logo_doc) { + if (file.documentType == "LOGO") { const updatedFiles = [...notReviewedLogoFiles]; updatedFiles.splice(index, 1, newFile); setNotReviewedLogoFiles(updatedFiles); } else { const updatedFiles = [...notReviewedOtherFiles]; updatedFiles.splice(index, 1, newFile); - setNotReviewedOtherFile(updatedFiles); + setNotReviewedOtherFiles(updatedFiles); } onFileButtonClick(newFile); @@ -132,14 +154,14 @@ const FileEvaluate = ({ // ..............buttons................. const ActionButton = ({ index, file, actionType, onClick }) => { - const isAccept = actionType === 'ACCEPT'; + const isAccept = actionType === "ACCEPT"; const buttonClass = isAccept ? classes.acceptButton : classes.rejectButton; const icon = isAccept ? ( ) : ( ); - const buttonText = isAccept ? 'Accept' : 'Reject'; + const buttonText = isAccept ? "Accept" : "Reject"; return ( - - ) : ( + clinicData.status !== CLINIC_STATUS.ACTIVE.toLowerCase() && ( {/* ...rejected button.... */} @@ -439,7 +461,7 @@ function ClinicDetails() { contract_doc_is_verified: clinicFiles?.contract_doc_is_verified, logo_doc: clinicData?.logo, - logo_doc_is_verified: clinicFiles?.logo_is_verified, + logo_is_verified: clinicFiles?.logo_is_verified, }, ] }