diff --git a/src/Components/Common/FacilitySelect.tsx b/src/Components/Common/FacilitySelect.tsx index 052fe194ab..ac098cc212 100644 --- a/src/Components/Common/FacilitySelect.tsx +++ b/src/Components/Common/FacilitySelect.tsx @@ -13,6 +13,7 @@ interface FacilitySelectProps { multiple?: boolean; facilityType?: number; district?: string; + state?: string; showAll?: boolean; showNOptions?: number; freeText?: boolean; @@ -33,6 +34,7 @@ export const FacilitySelect = (props: FacilitySelectProps) => { className = "", facilityType, district, + state, freeText = false, errors = "", } = props; @@ -47,6 +49,7 @@ export const FacilitySelect = (props: FacilitySelectProps) => { facility_type: facilityType, exclude_user: exclude_user, district, + state, }; const { data } = await request( diff --git a/src/Components/ExternalResult/FacilitiesSelectDialogue.tsx b/src/Components/ExternalResult/FacilitiesSelectDialogue.tsx index 7239e0b912..4dfe885027 100644 --- a/src/Components/ExternalResult/FacilitiesSelectDialogue.tsx +++ b/src/Components/ExternalResult/FacilitiesSelectDialogue.tsx @@ -3,6 +3,7 @@ import DialogModal from "../Common/Dialog"; import { FacilitySelect } from "../Common/FacilitySelect"; import { FacilityModel } from "../Facility/models"; import { useTranslation } from "react-i18next"; +import useAuthUser from "../../Common/hooks/useAuthUser"; interface Props { show: boolean; @@ -15,6 +16,7 @@ interface Props { const FacilitiesSelectDialog = (props: Props) => { const { show, handleOk, handleCancel, selectedFacility, setSelected } = props; const { t } = useTranslation(); + const authUser = useAuthUser(); return ( { errors="" showAll={false} multiple={false} + district={ + authUser?.user_type === "DistrictAdmin" + ? authUser?.district?.toString() + : undefined + } + state={ + authUser?.user_type === "StateAdmin" + ? authUser?.state?.toString() + : undefined + } />
diff --git a/src/Components/Patient/ManagePatients.tsx b/src/Components/Patient/ManagePatients.tsx index ff4838c582..5ebfeb12d6 100644 --- a/src/Components/Patient/ManagePatients.tsx +++ b/src/Components/Patient/ManagePatients.tsx @@ -751,10 +751,36 @@ export const PatientManager = () => { { - if (qParams.facility) + const showAllFacilityUsers = ["DistrictAdmin", "StateAdmin"]; + if ( + qParams.facility && + showAllFacilityUsers.includes(authUser.user_type) + ) navigate(`/facility/${qParams.facility}/patient`); - else if (onlyAccessibleFacility) + else if ( + qParams.facility && + !showAllFacilityUsers.includes(authUser.user_type) && + authUser.home_facility_object?.id !== qParams.facility + ) + Notification.Error({ + msg: "Oops! Non-Home facility users don't have permission to perform this action.", + }); + else if ( + !showAllFacilityUsers.includes(authUser.user_type) && + authUser.home_facility_object?.id + ) { + navigate( + `/facility/${authUser.home_facility_object.id}/patient`, + ); + } else if (onlyAccessibleFacility) navigate(`/facility/${onlyAccessibleFacility.id}/patient`); + else if ( + !showAllFacilityUsers.includes(authUser.user_type) && + !authUser.home_facility_object?.id + ) + Notification.Error({ + msg: "Oops! No home facility found", + }); else setShowDialog("create"); }} className="w-full lg:w-fit" diff --git a/src/Components/Patient/PatientHome.tsx b/src/Components/Patient/PatientHome.tsx index 7492f29c5c..22c687face 100644 --- a/src/Components/Patient/PatientHome.tsx +++ b/src/Components/Patient/PatientHome.tsx @@ -657,11 +657,25 @@ export const PatientHome = (props: any) => { className="mt-4 w-full" disabled={!patientData.is_active} authorizeFor={NonReadOnlyUsers} - onClick={() => - navigate( - `/facility/${patientData?.facility}/patient/${id}/update`, - ) - } + onClick={() => { + const showAllFacilityUsers = [ + "DistrictAdmin", + "StateAdmin", + ]; + if ( + !showAllFacilityUsers.includes(authUser.user_type) && + authUser.home_facility_object?.id !== + patientData.facility + ) { + Notification.Error({ + msg: "Oops! Non-Home facility users don't have permission to perform this action.", + }); + } else { + navigate( + `/facility/${patientData?.facility}/patient/${id}/update`, + ); + } + }} > Update Details @@ -823,6 +837,7 @@ export const PatientHome = (props: any) => {
+
{ return ; } + const PatientRegisterAuth = () => { + const showAllFacilityUsers = ["DistrictAdmin", "StateAdmin"]; + if ( + !showAllFacilityUsers.includes(authUser.user_type) && + authUser.home_facility_object?.id === facilityId + ) { + return true; + } + if ( + authUser.user_type === "DistrictAdmin" && + authUser.district === facilityObject?.district + ) { + return true; + } + if ( + authUser.user_type === "StateAdmin" && + authUser.state === facilityObject?.state + ) { + return true; + } + + return false; + }; + + if (!isLoading && facilityId && facilityObject && !PatientRegisterAuth()) { + return ; + } + return (
{statusDialog.show && (