diff --git a/health/micro-ui/web/micro-ui-internals/packages/modules/microplan/src/components/ConfirmationPopUp.js b/health/micro-ui/web/micro-ui-internals/packages/modules/microplan/src/components/ConfirmationPopUp.js index 78b7b49f262..e03b4baa635 100644 --- a/health/micro-ui/web/micro-ui-internals/packages/modules/microplan/src/components/ConfirmationPopUp.js +++ b/health/micro-ui/web/micro-ui-internals/packages/modules/microplan/src/components/ConfirmationPopUp.js @@ -55,7 +55,7 @@ const ConfirmationPopUp = ({ onClose, alertHeading, alertMessage, submitLabel, u className="campaign-type-alert-button" type="button" size="large" - variation="secondary" + variation="primary" label={t(cancelLabel)} onClick={onClose} isDisabled={isSubmitting} // Disable button during submission @@ -65,7 +65,7 @@ const ConfirmationPopUp = ({ onClose, alertHeading, alertMessage, submitLabel, u className="campaign-type-alert-button" type="button" size="large" - variation="primary" + variation="secondary" label={t(submitLabel)} onClick={handleSave} isDisabled={isSubmitting} // Disable button during submission diff --git a/health/micro-ui/web/micro-ui-internals/packages/modules/microplan/src/components/FacilityPopup.js b/health/micro-ui/web/micro-ui-internals/packages/modules/microplan/src/components/FacilityPopup.js index 4181fb584de..7fd5ba60226 100644 --- a/health/micro-ui/web/micro-ui-internals/packages/modules/microplan/src/components/FacilityPopup.js +++ b/health/micro-ui/web/micro-ui-internals/packages/modules/microplan/src/components/FacilityPopup.js @@ -31,6 +31,8 @@ const FacilityPopUp = ({ details, onClose, updateDetails }) => { const [rowsPerPage, setRowsPerPage] = useState(10); const [disabledAction, setDisabledAction] = useState(false); const [boundaryData, setBoundaryData] = useState([]); + const [defaultHierarchy, setDefaultSelectedHierarchy] = useState(null); + const [defaultBoundaries, setDefaultBoundaries] = useState([]); const VillageHierarchyTooltipWrapper = Digit.ComponentRegistryService.getComponent("VillageHierarchyTooltipWrapper"); const [kpiParams, setKpiParams] = useState([]); const configNavItem = [ @@ -383,6 +385,25 @@ const FacilityPopUp = ({ details, onClose, updateDetails }) => { }, ]; + const onSearch = (selectedBoundaries, selectedHierarchy) => { + + if (selectedBoundaries.length === 0) { + setShowToast({ key: "warning", label: t("MICROPLAN_BOUNDARY_IS_EMPTY_WARNING"), transitionTime: 5000 }); + } else { + + setDefaultSelectedHierarchy(selectedHierarchy); + setDefaultBoundaries(selectedBoundaries); + censusSearch(selectedBoundaries); + } + + }; + + const onClear = () => { + setDefaultBoundaries([]); + setDefaultSelectedHierarchy(null); + censusSearch([]); + }; + useEffect(() => { if (details) { setKpiParams([ @@ -446,10 +467,12 @@ const FacilityPopUp = ({ details, onClose, updateDetails }) => { censusSearch([])} + onClear={onClear} /> diff --git a/health/micro-ui/web/micro-ui-internals/packages/modules/microplan/src/components/SearchJurisdiction.js b/health/micro-ui/web/micro-ui-internals/packages/modules/microplan/src/components/SearchJurisdiction.js index 778da5371bd..39647cac167 100644 --- a/health/micro-ui/web/micro-ui-internals/packages/modules/microplan/src/components/SearchJurisdiction.js +++ b/health/micro-ui/web/micro-ui-internals/packages/modules/microplan/src/components/SearchJurisdiction.js @@ -1,10 +1,13 @@ import { LabelFieldPair, CardLabel, SubmitBar, LinkLabel, InfoCard } from "@egovernments/digit-ui-components"; -import React, { useEffect, Fragment, useState } from "react"; +import React, { useEffect, Fragment, useState, useRef } from "react"; import { useTranslation } from "react-i18next"; import { useMyContext } from "../utils/context"; import { Dropdown, MultiSelectDropdown } from "@egovernments/digit-ui-components"; -const SearchJurisdiction = ({ boundaries, jurisdiction, onSubmit = () => { }, onClear = () => { }, style = {},showInstruction=false }) => { +const SearchJurisdiction = ({ boundaries, jurisdiction, onSubmit = () => { }, onClear = () => { }, style = {},showInstruction=false, +defaultHierarchy = null, + defaultBoundaries = [], + }) => { const { t } = useTranslation(); const { state: { hierarchyType, boundaryHierarchy }, @@ -15,10 +18,13 @@ const SearchJurisdiction = ({ boundaries, jurisdiction, onSubmit = () => { }, on const hierarchy = Digit.Utils.microplanv1.getFilteredHierarchy(boundaryHierarchy, jurisdiction.boundaryType, hierarchyType); const [boundaryOptions, setBoundaryOptions] = useState([]); - const [selectedBoundaries, setSelectedBoundaries] = useState([]); - const [selectedHierarchy, setSelectedHierarchy] = useState(null); + const [selectedBoundaries, setSelectedBoundaries] = useState(defaultBoundaries); + const [selectedHierarchy, setSelectedHierarchy] = useState(defaultHierarchy); const MultiSelectWrapper = Digit.ComponentRegistryService.getComponent("MultiSelectDropdownBoundary"); + // Ref to track if the component has mounted + const isInitialLoad = useRef(true); + useEffect(() => { if (!selectedHierarchy) { setBoundaryOptions([]); @@ -29,8 +35,12 @@ const SearchJurisdiction = ({ boundaries, jurisdiction, onSubmit = () => { }, on const filteredBoundaries = userBoundaries.filter((row) => row.type === selectedHierarchy.boundaryType); const filteredBoundariesGroupedByParent = Digit.Utils.microplanv1.groupByParent(filteredBoundaries); setBoundaryOptions(filteredBoundariesGroupedByParent); - //reset selected - setSelectedBoundaries([]) + // Reset selected boundaries only after the initial load + if (!isInitialLoad.current) { + setSelectedBoundaries([]); + } else { + isInitialLoad.current = false; + } //based on the select hierarchy filter from userBoundaries and form options object }, [selectedHierarchy]); @@ -99,7 +109,7 @@ const SearchJurisdiction = ({ boundaries, jurisdiction, onSubmit = () => { }, on > {t("CLEAR")} - onSubmit(selectedBoundaries)} /> + onSubmit(selectedBoundaries, selectedHierarchy)} /> diff --git a/health/micro-ui/web/micro-ui-internals/packages/modules/microplan/src/pages/employee/PlanInbox.js b/health/micro-ui/web/micro-ui-internals/packages/modules/microplan/src/pages/employee/PlanInbox.js index 9fe7ad65ea3..1d9813d8ce5 100644 --- a/health/micro-ui/web/micro-ui-internals/packages/modules/microplan/src/pages/employee/PlanInbox.js +++ b/health/micro-ui/web/micro-ui-internals/packages/modules/microplan/src/pages/employee/PlanInbox.js @@ -54,8 +54,10 @@ const PlanInbox = () => { const [selectedBoundaryCode, setSelectedBoundaryCode] = useState(null); const [selectedBusinessId, setSelectedBusinessId] = useState(null); const [assigneeUuids, setAssigneeUuids] = useState([]); + const [totalStatusCount, setTotalStatusCount] = useState({}); const [employeeNameMap, setEmployeeNameMap] = useState({}); - + const [defaultHierarchy, setDefaultSelectedHierarchy] = useState(null); + const [defaultBoundaries, setDefaultBoundaries] = useState([]); const userRoles = user?.info?.roles?.map((roleData) => roleData?.code); // Check if the user has the 'rootapprover' role @@ -74,6 +76,45 @@ const PlanInbox = () => { } ); + const mutation = Digit.Hooks.useCustomAPIMutationHook({ + url: "/plan-service/plan/_search", + }); + + + useEffect(() => { + fetchStatusCount(); + }, [planObject]); + + const fetchStatusCount = async () => { + if (planObject) { + try { + await mutation.mutateAsync( + { + body: { + PlanSearchCriteria: { + tenantId: tenantId, + planConfigurationId: microplanId, + ...(isRootApprover + ? {} + : { jurisdiction: jurisdiction }), + }, + } + }, + { + onSuccess: (data) => { + setTotalStatusCount(data?.StatusCount); + }, + onError: (error) => { + setShowToast({ key: "error", label: t(error?.response?.data?.Errors?.[0]?.code) }); + } + } + ); + } catch (error) { + setShowToast({ key: "error", label: t(error?.response?.data?.Errors?.[0]?.code) }); + } + } + }; + useEffect(() => { if (selectedFilter === "VALIDATED") { setActiveLink({ code: "", name: "" }); @@ -116,6 +157,7 @@ const PlanInbox = () => { data: planWithCensus, error: planWithCensusError, refetch: refetchPlanWithCensus, + isFetching, } = Digit.Hooks.microplanv1.usePlanSearchWithCensus({ tenantId: tenantId, microplanId: microplanId, @@ -182,7 +224,7 @@ const PlanInbox = () => { }, }); - const onSearch = (selectedBoundaries) => { + const onSearch = (selectedBoundaries, selectedHierarchy) => { if (selectedBoundaries.length === 0) { setShowToast({ key: "warning", label: t("MICROPLAN_BOUNDARY_IS_EMPTY_WARNING"), transitionTime: 5000 }); } else { @@ -191,7 +233,10 @@ const PlanInbox = () => { code: "ASSIGNED_TO_ME", name: "ASSIGNED_TO_ME" }); + + setDefaultSelectedHierarchy(selectedHierarchy); + setDefaultBoundaries(selectedBoundaries); // Extract the list of codes from the selectedBoundaries array const boundaryCodes = selectedBoundaries.map((boundary) => boundary.code); @@ -257,6 +302,8 @@ const PlanInbox = () => { }, [planEmployee]); const onClear = () => { + setDefaultBoundaries([]); + setDefaultSelectedHierarchy(null); setCensusJurisdiction(planEmployee?.planData?.[0]?.jurisdiction); }; @@ -298,11 +345,15 @@ const PlanInbox = () => { setCensusData(planWithCensus?.censusData); setTotalRows(planWithCensus?.TotalCount); const reorderedStatusCount = Object.fromEntries( - Object.entries(planWithCensus?.StatusCount || {}).sort(([keyA], [keyB]) => { - if (keyA === "PENDING_FOR_VALIDATION") return -1; - if (keyB === "PENDING_FOR_VALIDATION") return 1; - return 0; - }) + Object.entries(planWithCensus?.StatusCount || {}) + // Filter out the PENDING_FOR_APPROVAL status /// need to revisit as this is hardcoded to remove from workflow /// + .filter(([key]) => key !== "PENDING_FOR_APPROVAL") + // Sort the statuses, prioritizing PENDING_FOR_VALIDATION + .sort(([keyA], [keyB]) => { + if (keyA === "PENDING_FOR_VALIDATION") return -1; + if (keyB === "PENDING_FOR_VALIDATION") return 1; + return 0; + }) ); setActiveFilter(reorderedStatusCount); const activeFilterKeys = Object.keys(reorderedStatusCount || {}); @@ -630,7 +681,7 @@ const PlanInbox = () => { return false; }; - if (isLoadingPlanObject || isPlanEmpSearchLoading || isLoadingCampaignObject || isWorkflowLoading || isProcessLoading) { + if (isLoadingPlanObject || isPlanEmpSearchLoading || isLoadingCampaignObject || isWorkflowLoading || isProcessLoading || mutation.isLoading || isPlanWithCensusLoading) { return ; } // campaignObject?.campaignName @@ -679,6 +730,8 @@ const PlanInbox = () => { { onClear={onClear} /> -
+
@@ -790,6 +839,7 @@ const PlanInbox = () => { closePopUp(); setShowToast({ key: "success", label: t(`PLAN_INBOX_WORKFLOW_FOR_${workFlowPopUp}_UPDATE_SUCCESS`), transitionTime: 5000 }); refetchPlanWithCensus(); + fetchStatusCount(); }} onError={(data) => { closePopUp(); @@ -799,7 +849,7 @@ const PlanInbox = () => { )}
)} - {isPlanWithCensusLoading ? ( + {isFetching ? ( ) : planWithCensus?.tableData?.length===0 ? : ( {
- {isRootApprover && isStatusConditionMet(activeFilter) && planObject?.status === "RESOURCE_ESTIMATION_IN_PROGRESS" && ( + {isRootApprover && isStatusConditionMet(totalStatusCount) && ( { /> )} -{(!isRootApprover && isStatusConditionMet(activeFilter) && planObject?.status === "RESOURCE_ESTIMATION_IN_PROGRESS") || disabledAction && ( +{(!isRootApprover && isStatusConditionMet(totalStatusCount) && planObject?.status === "RESOURCE_ESTIMATION_IN_PROGRESS") || disabledAction && ( { diff --git a/health/micro-ui/web/micro-ui-internals/packages/modules/microplan/src/pages/employee/PopInbox.js b/health/micro-ui/web/micro-ui-internals/packages/modules/microplan/src/pages/employee/PopInbox.js index 7b83a47c09c..7b9f9ecb278 100644 --- a/health/micro-ui/web/micro-ui-internals/packages/modules/microplan/src/pages/employee/PopInbox.js +++ b/health/micro-ui/web/micro-ui-internals/packages/modules/microplan/src/pages/employee/PopInbox.js @@ -42,6 +42,8 @@ const PopInbox = () => { const [updatedCensus, setUpdatedCensus] = useState(null); const [triggerTotalCensus, setTriggerTotalCensus] = useState(false); const [totalStatusCount, setTotalStatusCount] = useState({}); + const [defaultHierarchy, setDefaultSelectedHierarchy] = useState(null); + const [defaultBoundaries, setDefaultBoundaries] = useState([]); const [limitAndOffset, setLimitAndOffset] = useState({ limit: rowsPerPage, offset: (currentPage - 1) * rowsPerPage }); const [activeLink, setActiveLink] = useState({ code: "ASSIGNED_TO_ME", @@ -64,7 +66,7 @@ const PopInbox = () => { }, }, { - enabled: isRootApprover ? true : false, + enabled: true, // queryKey: currentKey, } ); @@ -153,7 +155,7 @@ const PopInbox = () => { setactionBarPopUp(true); }; - const onSearch = (selectedBoundaries) => { + const onSearch = (selectedBoundaries, selectedHierarchy) => { if (selectedBoundaries.length === 0) { setShowToast({ key: "warning", label: t("MICROPLAN_BOUNDARY_IS_EMPTY_WARNING"), transitionTime: 5000 }); @@ -162,6 +164,9 @@ const PopInbox = () => { code: "ASSIGNED_TO_ME", name: "ASSIGNED_TO_ME" }); + + setDefaultSelectedHierarchy(selectedHierarchy); + setDefaultBoundaries(selectedBoundaries); // Extract the list of codes from the selectedBoundaries array const boundaryCodes = selectedBoundaries.map((boundary) => boundary.code); @@ -237,6 +242,8 @@ const PopInbox = () => { }, [planEmployee]); const onClear = () => { + setDefaultBoundaries([]); + setDefaultSelectedHierarchy(null); setCensusJurisdiction(planEmployee?.planData?.[0]?.jurisdiction); }; @@ -518,7 +525,7 @@ const PopInbox = () => { }, ]; - if (isPlanEmpSearchLoading || isLoadingCampaignObject || isLoading || isWorkflowLoading || isEmployeeLoading || mutation.isLoading || isFetching) { + if (isPlanEmpSearchLoading || isLoadingCampaignObject || isLoading || isWorkflowLoading || isEmployeeLoading || mutation.isLoading) { return ; } @@ -551,10 +558,12 @@ const PopInbox = () => {