Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@ SKIP_PREFLIGHT_CHECK=true
REACT_APP_USER_TYPE=EMPLOYEE
REACT_APP_EMPLOYEE_TOKEN=c835932f-2ad4-4d05-83d6-49e0b8c59f8a
REACT_APP_CITIZEN_TOKEN=7cd58aae-30b3-41ed-a1b3-3417107a993c
REACT_APP_PROXY_API=https://hcm-demo.digit.org
REACT_APP_PROXY_ASSETS=https://hcm-demo.digit.org
REACT_APP_PROXY_API=https://health-demo.digit.org
REACT_APP_PROXY_ASSETS=https://health-demo.digit.org
REACT_APP_GLOBAL=https://hcm-demo-assets.s3.ap-south-1.amazonaws.com/demo/globalConfigsWorkbenchDemo.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ const AddOrEditMapping = forwardRef(({ schema, dispatch, boundaryHierarchy, allS
const [selectedLevel, setSelectedLevel] = useState(null);
const [selectedBoundary, setSelectedBoundary] = useState(null);


const [newdata, setNewData] = useState(
typeOfOperation === "edit" ? Object.fromEntries(columns.map((column) => [column.name, curData[column.name]])) : []
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,7 @@ const UpdateCampaign = ({ hierarchyData, ...props }) => {
const { mutate } = Digit.Hooks.campaign.useCreateCampaign(tenantId);
const { mutate: updateCampaign } = Digit.Hooks.campaign.useUpdateCampaign(tenantId);
const searchParams = new URLSearchParams(location.search);
const [urlParams, setUrlParams] = useState(() => new URLSearchParams(window.location.search));
const id = urlParams.get("id");
const [currentId, setCurrentId] = useState(() => urlParams.get("id"));
const [id,setId] = useState(searchParams.get("id"));
const isDraftCampaign = searchParams.get("isDraftCampaign") === "true";
const parentId = searchParams.get("parentId");
const isPreview = searchParams.get("preview");
Expand Down Expand Up @@ -83,19 +81,24 @@ const UpdateCampaign = ({ hierarchyData, ...props }) => {
{ schemaCode: `${"HCM-PROJECT-TYPES"}.projectTypes` }
);

const { isLoading: campaignDataLoading, data: CampaignData, error: campaignError, refetch: campaignRefetch } = Digit.Hooks.campaign.useSearchCampaign({
tenantId: tenantId,
filter: {
ids: currentId ? [currentId] : [parentId],
...(isDraftCampaign && { status: ["drafted"] }),
const reqCriteriaCampaign = {
url: `/project-factory/v1/project-type/search`,
body: {
CampaignDetails: {
tenantId: tenantId,
ids: [id?id:parentId],
...(isDraftCampaign && { status: ["drafted"] }),
},
},
config: {
enabled: currentId ? true : parentId ? true : false,
enabled: parentId ? true : false,
},
});
};

const { data: CampaignData } = Digit.Hooks.useCustomAPIHook(reqCriteriaCampaign);
Comment on lines +84 to +98
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Fix the enabled condition logic.

Line 94 enables the API call only when parentId is truthy, but Line 89 accepts either id or parentId. This creates a scenario where if only id exists (without parentId), the API call won't execute even though it should.

Apply this diff:

   config: {
-    enabled: parentId ? true : false,
+    enabled: !!(id || parentId),
   },
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
const reqCriteriaCampaign = {
url: `/project-factory/v1/project-type/search`,
body: {
CampaignDetails: {
tenantId: tenantId,
ids: [id?id:parentId],
...(isDraftCampaign && { status: ["drafted"] }),
},
},
config: {
enabled: currentId ? true : parentId ? true : false,
enabled: parentId ? true : false,
},
});
};
const { data: CampaignData } = Digit.Hooks.useCustomAPIHook(reqCriteriaCampaign);
const reqCriteriaCampaign = {
url: `/project-factory/v1/project-type/search`,
body: {
CampaignDetails: {
tenantId: tenantId,
ids: [id?id:parentId],
...(isDraftCampaign && { status: ["drafted"] }),
},
},
config: {
enabled: !!(id || parentId),
},
};
const { data: CampaignData } = Digit.Hooks.useCustomAPIHook(reqCriteriaCampaign);
🤖 Prompt for AI Agents
In
health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/UpdateCampaign.js
around lines 84 to 98, the API call is only enabled when parentId is truthy
which breaks the intended behavior that it should run when either id or parentId
exists; change the config.enabled logic to be true when either id or parentId is
present (e.g., use a boolean test for id OR parentId), and also ensure the ids
array is constructed to use id if present otherwise parentId so the request body
matches the same id-or-parentId semantics.


useEffect(() => {
setHierarchyType(CampaignData?.[0]?.hierarchyType);
setHierarchyType(CampaignData?.CampaignDetails?.[0]?.hierarchyType);
}, [CampaignData]);

const reqCriteria = useMemo(() => {
Expand All @@ -122,11 +125,11 @@ const UpdateCampaign = ({ hierarchyData, ...props }) => {
const { isLoading: draftLoading, data: draftData, error: draftError, refetch: draftRefetch } = Digit.Hooks.campaign.useSearchCampaign({
tenantId: tenantId,
filter: {
ids: currentId ? [currentId] : [parentId],
ids: id ? [id] : [parentId],
...(isDraftCampaign && { status: ["drafted"] }),
},
config: {
enabled: currentId ? true : false,
enabled: id ? true : false,
select: (data) => {
return data?.[0];
},
Expand Down Expand Up @@ -195,7 +198,7 @@ const UpdateCampaign = ({ hierarchyData, ...props }) => {
},
};
setParams({ ...restructureFormData });
}, [params, draftData, isLoading,projectType]);
}, [params, draftData, isLoading, projectType]);

useEffect(() => {
if (draftData?.additionalDetails?.facilityId && draftData?.additionalDetails?.targetId && draftData?.additionalDetails?.userId) {
Expand Down Expand Up @@ -225,13 +228,12 @@ const UpdateCampaign = ({ hierarchyData, ...props }) => {
UpdateBoundaryConfig({
totalFormData,
hierarchyData,
hierarchyType: CampaignData?.[0]?.hierarchyType,
projectType: CampaignData?.[0]?.projectType,
projectType: CampaignData?.CampaignDetails?.[0]?.projectType,
summaryErrors,
campaignData: CampaignData?.[0],
CampaignData: CampaignData,
})
);
}, [totalFormData, dataParams, isSubmitting, summaryErrors, hierarchyData, CampaignData?.[0]?.projectType]);
}, [totalFormData, dataParams, isSubmitting, summaryErrors, hierarchyData, CampaignData?.CampaignDetails?.[0]?.projectType]);

useEffect(() => {
setIsSubmitting(false);
Expand All @@ -243,8 +245,6 @@ const UpdateCampaign = ({ hierarchyData, ...props }) => {
}
}, [currentKey]);



function restructureBoundaryData(childBoundaries, parentBoundaries = []) {
if (!childBoundaries || !Array.isArray(childBoundaries) || childBoundaries.length === 0) {
return parentBoundaries;
Expand All @@ -255,22 +255,31 @@ const UpdateCampaign = ({ hierarchyData, ...props }) => {
//API CALL
useEffect(async () => {
if (shouldUpdate === true) {
if (filteredConfig?.[0]?.form?.[0]?.body?.[0]?.skipAPICall && !currentId) {
if (filteredConfig?.[0]?.form?.[0]?.body?.[0]?.skipAPICall && !id) {
return;
} else if (filteredConfig?.[0]?.form?.[0]?.isLast) {
const reqCreate = async () => {
let payloadData = { ...draftData };
payloadData.hierarchyType = hierarchyType;
payloadData.endDate = CampaignData?.[0]?.endDate;
payloadData.startDate = CampaignData?.[0]?.startDate;
payloadData.endDate = CampaignData?.CampaignDetails?.[0]?.endDate;
payloadData.startDate = CampaignData?.CampaignDetails?.[0]?.startDate;
payloadData.tenantId = tenantId;
payloadData.action = "create";
payloadData.parentId = CampaignData?.[0]?.parentId;
payloadData.campaignName = CampaignData?.[0]?.campaignName;
payloadData.parentId = CampaignData?.CampaignDetails?.[0]?.parentId;
payloadData.campaignName = CampaignData?.CampaignDetails?.[0]?.campaignName;

if(parentId){
payloadData.parentId =parentId;
}

if(id){
payloadData.id =id;
}

if (totalFormData?.HCM_CAMPAIGN_SELECTING_BOUNDARY_DATA?.boundaryType?.selectedData) {
const temp = restructureBoundaryData(
totalFormData?.HCM_CAMPAIGN_SELECTING_BOUNDARY_DATA?.boundaryType?.selectedData,
CampaignData?.[0]?.boundaries
CampaignData?.CampaignDetails?.[0]?.boundaries
);
payloadData.boundaries = temp;
}
Expand All @@ -281,23 +290,23 @@ const UpdateCampaign = ({ hierarchyData, ...props }) => {
);

payloadData.resources = temp;
payloadData.projectType = CampaignData?.[0]?.projectType;
payloadData.projectType = CampaignData?.CampaignDetails?.[0]?.projectType;
payloadData.additionalDetails = {
beneficiaryType:
projectType?.["HCM-PROJECT-TYPES"]?.projectTypes.find(
(projectType) => projectType.code === CampaignData?.[0]?.projectType
(projectType) => projectType.code === CampaignData?.CampaignDetails?.[0]?.projectType
)?.beneficiaryType || null,
key: currentKey,
targetId: dataParams?.boundaryId,
facilityId: dataParams?.facilityId,
userId: dataParams?.userId,
};
if (CampaignData?.[0]?.additionalDetails?.cycleData) {
payloadData.additionalDetails.cycleData = CampaignData?.[0]?.additionalDetails?.cycleData;
if (CampaignData?.CampaignDetails?.[0]?.additionalDetails?.cycleData) {
payloadData.additionalDetails.cycleData = CampaignData?.CampaignDetails?.[0]?.additionalDetails?.cycleData;
} else {
payloadData.additionalDetails.cycleData = {};
}
payloadData.deliveryRules = CampaignData?.[0]?.deliveryRules;
payloadData.deliveryRules = CampaignData?.CampaignDetails?.[0]?.deliveryRules;
if (compareIdentical(draftData, payloadData) === false) {
setIsDataCreating(true);
await updateCampaign(payloadData, {
Expand Down Expand Up @@ -328,20 +337,23 @@ const UpdateCampaign = ({ hierarchyData, ...props }) => {
};

reqCreate();
} else if (!isDraftCampaign && !isDraftCreated && !currentId) {
} else if (!isDraftCampaign && !isDraftCreated && !id) {
const reqCreate = async () => {
let payloadData = {};
payloadData.hierarchyType = hierarchyType;
payloadData.endDate = CampaignData?.[0]?.endDate;
payloadData.startDate = CampaignData?.[0]?.startDate;
payloadData.endDate = CampaignData?.CampaignDetails?.[0]?.endDate;
payloadData.startDate = CampaignData?.CampaignDetails?.[0]?.startDate;
payloadData.tenantId = tenantId;
payloadData.action = "draft";
payloadData.parentId = CampaignData?.[0]?.id;
payloadData.campaignName = CampaignData?.[0]?.campaignName;
payloadData.parentId = parentId;
if(id){
payloadData.id =id;
}
payloadData.campaignName = CampaignData?.CampaignDetails?.[0]?.campaignName;
if (totalFormData?.HCM_CAMPAIGN_SELECTING_BOUNDARY_DATA?.boundaryType?.selectedData) {
const temp = restructureBoundaryData(
totalFormData?.HCM_CAMPAIGN_SELECTING_BOUNDARY_DATA?.boundaryType?.selectedData,
CampaignData?.[0]?.boundaries
CampaignData?.CampaignDetails?.[0]?.boundaries
);
payloadData.boundaries = temp;
}
Expand All @@ -352,23 +364,23 @@ const UpdateCampaign = ({ hierarchyData, ...props }) => {
);

payloadData.resources = temp;
payloadData.projectType = CampaignData?.[0]?.projectType;
payloadData.projectType = CampaignData?.CampaignDetails?.[0]?.projectType;
payloadData.additionalDetails = {
beneficiaryType:
projectType?.["HCM-PROJECT-TYPES"]?.projectTypes.find(
(projectType) => projectType.code === CampaignData?.[0]?.projectType
(projectType) => projectType.code === CampaignData?.CampaignDetails?.[0]?.projectType
)?.beneficiaryType || null,
key: currentKey,
targetId: dataParams?.boundaryId,
facilityId: dataParams?.facilityId,
userId: dataParams?.userId,
};
if (CampaignData?.[0]?.additionalDetails?.cycleData) {
payloadData.additionalDetails.cycleData = CampaignData?.[0]?.additionalDetails?.cycleData;
if (CampaignData?.CampaignDetails?.[0]?.additionalDetails?.cycleData) {
payloadData.additionalDetails.cycleData = CampaignData?.CampaignDetails?.[0]?.additionalDetails?.cycleData;
} else {
payloadData.additionalDetails.cycleData = {};
}
payloadData.deliveryRules = CampaignData?.[0]?.deliveryRules;
payloadData.deliveryRules = CampaignData?.CampaignDetails?.[0]?.deliveryRules;
setIsDataCreating(true);

await mutate(payloadData, {
Expand All @@ -379,8 +391,9 @@ const UpdateCampaign = ({ hierarchyData, ...props }) => {
},
onSuccess: async (data) => {
updateUrlParams({ id: data?.CampaignDetails?.id });
setCurrentId(data?.CampaignDetails?.id);
setId(data?.CampaignDetails?.id);
setIsDraftCreated(true);

Comment on lines +394 to +396
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

Remove the stray empty line.

Line 396 appears to be a leftover from refactoring, possibly where a comment or TODO was removed.

Apply this diff:

               setId(data?.CampaignDetails?.id);
               setIsDraftCreated(true);
-              
               draftRefetch();
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
setId(data?.CampaignDetails?.id);
setIsDraftCreated(true);
setId(data?.CampaignDetails?.id);
setIsDraftCreated(true);
draftRefetch();
🤖 Prompt for AI Agents
In
health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/UpdateCampaign.js
around lines 394 to 396, there is a stray empty line after
setIsDraftCreated(true);—remove that blank line so the block has no extra empty
line (keep the two statements adjacent and save the file).

draftRefetch();
if (filteredConfig?.[0]?.form?.[0]?.body?.[0]?.mandatoryOnAPI) {
setCurrentKey(currentKey + 1);
Expand All @@ -397,18 +410,26 @@ const UpdateCampaign = ({ hierarchyData, ...props }) => {
reqCreate();
} else {
const reqCreate = async () => {
let payloadData = { ...CampaignData?.[0] };
let payloadData = { ...CampaignData?.CampaignDetails?.[0] };
payloadData.hierarchyType = hierarchyType;
payloadData.endDate = CampaignData?.[0]?.endDate;
payloadData.startDate = CampaignData?.[0]?.startDate;
payloadData.endDate = CampaignData?.CampaignDetails?.[0]?.endDate;
payloadData.startDate = CampaignData?.CampaignDetails?.[0]?.startDate;
payloadData.tenantId = tenantId;
payloadData.action = "draft";
payloadData.parentId = CampaignData?.[0]?.parentId;
payloadData.campaignName = CampaignData?.[0]?.campaignName;
payloadData.parentId = CampaignData?.CampaignDetails?.[0]?.parentId;
payloadData.campaignName = CampaignData?.CampaignDetails?.[0]?.campaignName;
if(parentId){
payloadData.parentId =parentId;
}

if(id){
payloadData.id =id;
}

if (totalFormData?.HCM_CAMPAIGN_SELECTING_BOUNDARY_DATA?.boundaryType?.selectedData) {
const temp = restructureBoundaryData(
totalFormData?.HCM_CAMPAIGN_SELECTING_BOUNDARY_DATA?.boundaryType?.selectedData,
CampaignData?.[0]?.boundaries
CampaignData?.CampaignDetails?.[0]?.boundaries
);
payloadData.boundaries = temp;
}
Expand All @@ -418,24 +439,24 @@ const UpdateCampaign = ({ hierarchyData, ...props }) => {
totalFormData?.HCM_CAMPAIGN_UPLOAD_USER_DATA?.uploadUser?.uploadedFile?.[0]
);
payloadData.resources = temp;
payloadData.projectType = CampaignData?.[0]?.projectType;
payloadData.projectType = CampaignData?.CampaignDetails?.[0]?.projectType;
payloadData.additionalDetails = {
beneficiaryType:
projectType?.["HCM-PROJECT-TYPES"]?.projectTypes.find(
(projectType) => projectType.code === CampaignData?.[0]?.projectType
(projectType) => projectType.code === CampaignData?.CampaignDetails?.[0]?.projectType
)?.beneficiaryType || null,
key: currentKey,
targetId: dataParams?.boundaryId,
facilityId: dataParams?.facilityId,
userId: dataParams?.userId,
};
if (CampaignData?.[0]?.additionalDetails?.cycleData) {
payloadData.additionalDetails.cycleData = CampaignData?.[0]?.additionalDetails?.cycleData;
if (CampaignData?.CampaignDetails?.[0]?.additionalDetails?.cycleData) {
payloadData.additionalDetails.cycleData = CampaignData?.CampaignDetails?.[0]?.additionalDetails?.cycleData;
} else {
payloadData.additionalDetails.cycleData = {};
}

payloadData.deliveryRules = CampaignData?.[0]?.deliveryRules;
payloadData.deliveryRules = CampaignData?.CampaignDetails?.[0]?.deliveryRules;
if (!payloadData?.startDate && !payloadData?.endDate) {
delete payloadData?.startDate;
delete payloadData?.endDate;
Expand Down Expand Up @@ -465,7 +486,7 @@ const UpdateCampaign = ({ hierarchyData, ...props }) => {
}
setShouldUpdate(false);
}
}, [shouldUpdate,]);
}, [shouldUpdate]);

function isBoundaryDiff(parentBoundaries, childBoundaries) {
const parentBoundaryCodesSet = new Set(parentBoundaries.map((boundary) => boundary.code));
Expand Down Expand Up @@ -595,7 +616,7 @@ const UpdateCampaign = ({ hierarchyData, ...props }) => {
case "summary":
const updateBoundary = restructureBoundaryData(
totalFormData?.HCM_CAMPAIGN_SELECTING_BOUNDARY_DATA?.boundaryType?.selectedData,
CampaignData?.[0]?.boundaries
CampaignData?.CampaignDetails?.[0]?.boundaries
);
const isTargetError = totalFormData?.HCM_CAMPAIGN_UPLOAD_BOUNDARY_DATA?.uploadBoundary?.uploadedFile?.[0]?.filestoreId
? false
Expand Down Expand Up @@ -643,7 +664,7 @@ const UpdateCampaign = ({ hierarchyData, ...props }) => {
setShowToast({ key: "error", label: "AT_LEAST_ONE_FILE_REQUIRED_ERROR" });
return false;
}
if (isTargetError && isBoundaryDiff(CampaignData?.[0]?.boundaries, updateBoundary)) {
if (isTargetError && isBoundaryDiff(CampaignData?.CampaignDetails?.[0]?.boundaries, updateBoundary)) {
setShowToast({ key: "error", label: "TARGET_DETAILS_ERROR" });
return false;
}
Expand Down Expand Up @@ -716,7 +737,7 @@ const UpdateCampaign = ({ hierarchyData, ...props }) => {
if (
filteredConfig?.[0]?.form?.[0]?.isLast ||
!filteredConfig[0].form[0].body[0].skipAPICall ||
(filteredConfig[0].form[0].body[0].skipAPICall && currentId)
(filteredConfig[0].form[0].body[0].skipAPICall && id)
) {
setShouldUpdate(true);
}
Expand Down Expand Up @@ -912,4 +933,4 @@ const UpdateCampaign = ({ hierarchyData, ...props }) => {
);
};

export default React.memo(UpdateCampaign);
export default React.memo(UpdateCampaign);
2 changes: 1 addition & 1 deletion micro-ui/web/workbench/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
],
"homepage": "/workbench-ui",
"dependencies": {
"@egovernments/digit-ui-libraries": "1.9.0",
"@egovernments/digit-ui-libraries": "1.9.0",
"@egovernments/digit-ui-module-workbench": "1.1.1",
"@egovernments/digit-ui-module-core": "1.9.1",
"@egovernments/digit-ui-module-utilities": "1.1.0",
Expand Down
Loading