From ef4e17f853a367a85edef2571c4677efacf8f66b Mon Sep 17 00:00:00 2001
From: Malini
Date: Mon, 9 Feb 2026 13:13:19 +0530
Subject: [PATCH] fixed client change request and added validation for save as
draft
---
.../survey/ProductData/ProductData.jsx | 71 +++++++++++++++++--
.../src/pages/LandingPage/component/Cards.jsx | 4 +-
.../src/pages/LandingPage/component/Cta.jsx | 2 +-
.../LandingPage/component/Industrial.jsx | 4 +-
4 files changed, 72 insertions(+), 9 deletions(-)
diff --git a/ipi-survey-platform/src/components/survey/ProductData/ProductData.jsx b/ipi-survey-platform/src/components/survey/ProductData/ProductData.jsx
index 7d62043..3389238 100644
--- a/ipi-survey-platform/src/components/survey/ProductData/ProductData.jsx
+++ b/ipi-survey-platform/src/components/survey/ProductData/ProductData.jsx
@@ -603,6 +603,19 @@ useEffect(() => {
const handleSaveDraft = async () => {
try {
+ // Validate draft form before saving
+ if (!validateDraftForm()) {
+ // Scroll to first error
+ const firstErrorKey = Object.keys(formErrors)[0];
+ if (firstErrorKey) {
+ const element = document.querySelector(`[data-field="${firstErrorKey}"]`);
+ if (element) {
+ element.scrollIntoView({ behavior: 'smooth', block: 'center' });
+ }
+ }
+ return;
+ }
+
setIsSavingDraft(true);
// Get current submission from localStorage
@@ -1180,6 +1193,55 @@ useEffect(() => {
return isValid;
};
+ // Validation function for Save as Draft - requires at least one field to be filled
+ const validateDraftForm = () => {
+ const errors = {};
+ let hasAnyData = false;
+
+ products.forEach((product, index) => {
+ // Check if product has any data
+ const hasProduct = product.product || product.productId || product.product_id;
+ const hasUnit = product.unit || product.unit_id;
+ const hasCapacity = product.capacity;
+ const hasQuantity = product.octQuantity || product.novQuantity || product.decQuantity ||
+ product.janQuantity || product.febQuantity || product.marQuantity ||
+ product.aprQuantity || product.mayQuantity || product.junQuantity;
+ const hasCost = product.octCost || product.novCost || product.decCost ||
+ product.janCost || product.febCost || product.marCost ||
+ product.aprCost || product.mayCost || product.junCost;
+ const hasVariationReason = product.variationReason || product.otherVariationReason;
+ const hasZeroReason = product.zeroTargetReason || product.otherZeroTargetReason;
+ const hasRemarks = product.remarks;
+
+ // If any field has data, mark hasAnyData as true
+ if (hasProduct || hasUnit || hasCapacity || hasQuantity || hasCost ||
+ hasVariationReason || hasZeroReason || hasRemarks) {
+ hasAnyData = true;
+ }
+
+ // If product has some data, validate mandatory fields
+ if (hasProduct || hasUnit || hasCapacity || hasQuantity || hasCost) {
+ // Product is mandatory if any other field is filled
+ if (!hasProduct) {
+ errors[`product_${index}`] = 'Please enter product field';
+ }
+
+ // Unit is mandatory if product is selected or any quantity/cost is entered
+ if (!hasUnit && (hasProduct || hasQuantity || hasCost)) {
+ errors[`unit_${index}`] = 'Unit is required when product or quantities are entered';
+ }
+ }
+ });
+
+ // Check if at least one product has any data
+ if (!hasAnyData) {
+ errors['draft_general'] = 'Please enter at least one field before saving as draft';
+ }
+
+ setFormErrors(errors);
+ return Object.keys(errors).length === 0;
+ };
+
const handleNext = () => {
if (validateForm()) {
onNext();
@@ -1782,7 +1844,7 @@ useEffect(() => {
Monthly entries: Enter Qty and Cost for each month in the Current and Forecast quarters. Use 0 where there is no output or cost.
Number only: Use a decimal point where needed. No negative values.
Units: Use one measurement unit per product across all months.
- Delete: Removing a product here affects this survey only; it does not change your profile.
+ {/* Delete: Removing a product here affects this survey only; it does not change your profile.
*/}
)}
@@ -2453,18 +2515,19 @@ useEffect(() => {
- {(hasError || isInitialLoad) && (
+ {(hasError || isInitialLoad || Object.keys(formErrors).length > 0) && (
- {isInitialLoad && !hasError && (
+ {isInitialLoad && !hasError && Object.keys(formErrors).length === 0 && (
Loading product data...
)}
- {hasError && (
+ {(hasError || Object.keys(formErrors).length > 0) && (
{error &&
{error}
}
{reasonsError &&
{reasonsError}
}
{zeroReasonsError &&
{zeroReasonsError}
}
{productsError &&
{productsError}
}
{unitsError &&
{unitsError}
}
+ {formErrors['draft_general'] &&
{formErrors['draft_general']}
}
)}
diff --git a/ipi-survey-platform/src/pages/LandingPage/component/Cards.jsx b/ipi-survey-platform/src/pages/LandingPage/component/Cards.jsx
index 888a3c2..f2df782 100644
--- a/ipi-survey-platform/src/pages/LandingPage/component/Cards.jsx
+++ b/ipi-survey-platform/src/pages/LandingPage/component/Cards.jsx
@@ -40,7 +40,7 @@ const steps = [
const Cards = () => {
return (
-
+
How the survey works
A simple quarterly cycle
@@ -65,7 +65,7 @@ const Cards = () => {
))}
-
+
Accounts are issued by FCSC. There is no self-registration.
diff --git a/ipi-survey-platform/src/pages/LandingPage/component/Cta.jsx b/ipi-survey-platform/src/pages/LandingPage/component/Cta.jsx
index b18ac66..371b436 100644
--- a/ipi-survey-platform/src/pages/LandingPage/component/Cta.jsx
+++ b/ipi-survey-platform/src/pages/LandingPage/component/Cta.jsx
@@ -13,7 +13,7 @@ const Cta = () => {
Our support team can assist with access, questions, or clarifications.
- Support hours: Sun–Thu, 8:00–16:00 GST
+ Support hours: Monday–Friday, 8:00–16:00 GST
diff --git a/ipi-survey-platform/src/pages/LandingPage/component/Industrial.jsx b/ipi-survey-platform/src/pages/LandingPage/component/Industrial.jsx
index 0047e9d..5c6418a 100644
--- a/ipi-survey-platform/src/pages/LandingPage/component/Industrial.jsx
+++ b/ipi-survey-platform/src/pages/LandingPage/component/Industrial.jsx
@@ -30,10 +30,10 @@ const Industrial = () => {
Reference area: United Arab Emirates
- Respondents: Registered manufacturing establishments
+ Respondents: Representatives from selected manufacturing establishments.
- Classification: ISIC Rev.4
+ Classification: ISIC Rev 4 , HS 2022 8dgt for products.