Skip to content
Merged
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 @@ -47,6 +47,7 @@ export interface FormErrors {
tags?: string;
nextReviewDate?: string;
assignedReviewers?: string;
content?: string;
}

const PolicyDetailModal: React.FC<Props> = ({
Expand Down Expand Up @@ -89,6 +90,7 @@ const PolicyDetailModal: React.FC<Props> = ({
const validateForm = (): boolean => {
const newErrors: FormErrors = {};

// Title validation
const policyTitle = checkStringValidation(
"Policy title",
formData.title,
Expand Down Expand Up @@ -116,6 +118,7 @@ const PolicyDetailModal: React.FC<Props> = ({
newErrors.nextReviewDate = policyNextReviewDate.message;
}

// Assigned reviewers validation
const policyAssignedReviewers = formData.assignedReviewers.filter(
(user) => user.id !== undefined
);
Expand All @@ -129,7 +132,7 @@ const PolicyDetailModal: React.FC<Props> = ({

const [formData, setFormData] = useState<FormData>({
title: "",
status: "Draft",
status: "Under Review",
tags: [],
nextReviewDate: "",
assignedReviewers: [],
Expand All @@ -155,7 +158,7 @@ const PolicyDetailModal: React.FC<Props> = ({
} else {
setFormData({
title: "",
status: "Draft",
status: "Under Review",
tags: [],
nextReviewDate: "",
assignedReviewers: [],
Expand Down Expand Up @@ -219,9 +222,40 @@ const PolicyDetailModal: React.FC<Props> = ({
await updatePolicy(policy!.id, payload);
}
onSaved();
} catch (err) {
} catch (err: any) {
// setIsSubmitting(false);
console.error(err);
console.error("Full error object:", err);
console.error("Original error:", err?.originalError);
console.error("Original error response:", err?.originalError?.response);

// Handle server validation errors - the CustomException is in originalError
const errorData = err?.originalError?.response || err?.response?.data || err?.response;
console.error("Error data:", errorData);

if (errorData?.errors) {
console.error("Processing server errors:", errorData.errors);
const serverErrors: FormErrors = {};
errorData.errors.forEach((error: any) => {
console.error("Processing error:", error);
if (error.field === 'title') {
serverErrors.title = error.message;
} else if (error.field === 'status') {
serverErrors.status = error.message;
} else if (error.field === 'tags') {
serverErrors.tags = error.message;
} else if (error.field === 'content_html') {
serverErrors.content = error.message;
} else if (error.field === 'next_review_date') {
serverErrors.nextReviewDate = error.message;
} else if (error.field === 'assigned_reviewer_ids') {
serverErrors.assignedReviewers = error.message;
}
});
console.error("Setting server errors:", serverErrors);
setErrors(serverErrors);
} else {
console.error("No errors found in response");
}
}
Comment on lines +225 to 259
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 | 🟡 Minor

Remove excessive console.error statements before production.

The error handling logic correctly extracts and maps server validation errors to the form state. However, there are 8 console.error statements (lines 227-230, 233, 236, 239, 254, 257) that appear to be debugging artifacts.

Apply this diff to remove debugging console statements:

     } catch (err: any) {
       // setIsSubmitting(false);
-      console.error("Full error object:", err);
-      console.error("Original error:", err?.originalError);
-      console.error("Original error response:", err?.originalError?.response);
-      
       // Handle server validation errors - the CustomException is in originalError
       const errorData = err?.originalError?.response || err?.response?.data || err?.response;
-      console.error("Error data:", errorData);
       
       if (errorData?.errors) {
-        console.error("Processing server errors:", errorData.errors);
         const serverErrors: FormErrors = {};
         errorData.errors.forEach((error: any) => {
-          console.error("Processing error:", error);
           if (error.field === 'title') {
             serverErrors.title = error.message;
           } else if (error.field === 'status') {
             serverErrors.status = error.message;
           } else if (error.field === 'tags') {
             serverErrors.tags = error.message;
           } else if (error.field === 'content_html') {
             serverErrors.content = error.message;
           } else if (error.field === 'next_review_date') {
             serverErrors.nextReviewDate = error.message;
           } else if (error.field === 'assigned_reviewer_ids') {
             serverErrors.assignedReviewers = error.message;
           }
         });
-        console.error("Setting server errors:", serverErrors);
         setErrors(serverErrors);
-      } else {
-        console.error("No errors found in response");
       }
     }
📝 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
} catch (err: any) {
// setIsSubmitting(false);
console.error(err);
console.error("Full error object:", err);
console.error("Original error:", err?.originalError);
console.error("Original error response:", err?.originalError?.response);
// Handle server validation errors - the CustomException is in originalError
const errorData = err?.originalError?.response || err?.response?.data || err?.response;
console.error("Error data:", errorData);
if (errorData?.errors) {
console.error("Processing server errors:", errorData.errors);
const serverErrors: FormErrors = {};
errorData.errors.forEach((error: any) => {
console.error("Processing error:", error);
if (error.field === 'title') {
serverErrors.title = error.message;
} else if (error.field === 'status') {
serverErrors.status = error.message;
} else if (error.field === 'tags') {
serverErrors.tags = error.message;
} else if (error.field === 'content_html') {
serverErrors.content = error.message;
} else if (error.field === 'next_review_date') {
serverErrors.nextReviewDate = error.message;
} else if (error.field === 'assigned_reviewer_ids') {
serverErrors.assignedReviewers = error.message;
}
});
console.error("Setting server errors:", serverErrors);
setErrors(serverErrors);
} else {
console.error("No errors found in response");
}
}
} catch (err: any) {
// setIsSubmitting(false);
// Handle server validation errors - the CustomException is in originalError
const errorData = err?.originalError?.response || err?.response?.data || err?.response;
if (errorData?.errors) {
const serverErrors: FormErrors = {};
errorData.errors.forEach((error: any) => {
if (error.field === 'title') {
serverErrors.title = error.message;
} else if (error.field === 'status') {
serverErrors.status = error.message;
} else if (error.field === 'tags') {
serverErrors.tags = error.message;
} else if (error.field === 'content_html') {
serverErrors.content = error.message;
} else if (error.field === 'next_review_date') {
serverErrors.nextReviewDate = error.message;
} else if (error.field === 'assigned_reviewer_ids') {
serverErrors.assignedReviewers = error.message;
}
});
setErrors(serverErrors);
}
}
🤖 Prompt for AI Agents
In Clients/src/presentation/components/Policies/PolicyDetailsModal.tsx around
lines 225 to 259, remove the debugging console.error statements (the multiple
logs printing the full error object, originalError, response, intermediate
"Processing..." logs and "Setting server errors"/"No errors found" logs) and
leave only the functional error-handling logic that extracts errorData, maps
server validation errors into the serverErrors object and calls
setErrors(serverErrors); ensure no other behavior is changed.

};

Expand Down Expand Up @@ -455,6 +489,19 @@ const PolicyDetailModal: React.FC<Props> = ({
placeholder="Start typing..."
/>
</Plate>
{errors.content && (
<Typography
component="span"
color={theme.palette.status?.error?.text || theme.palette.error.main}
sx={{
opacity: 0.8,
fontSize: 11,
mt: 1,
}}
>
{errors.content}
</Typography>
)}
</Stack>
</Stack>

Expand Down
16 changes: 15 additions & 1 deletion Clients/src/presentation/components/Policies/PolicyForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,11 @@ interface Props {

const statuses: FormData["status"][] = [
"Draft",
"In review",
"Under Review",
"Approved",
"Published",
"Archived",
"Deprecated",
];

const PolicyForm: React.FC<Props> = ({ formData, setFormData, tags, errors }) => {
Expand Down Expand Up @@ -272,6 +273,19 @@ const PolicyForm: React.FC<Props> = ({ formData, setFormData, tags, errors }) =>
},
}}
/>
{errors.tags && (
<Typography
component="span"
color={theme.palette.error.main}
sx={{
opacity: 0.8,
fontSize: 11,
mt: 1,
}}
>
{errors.tags}
</Typography>
)}
</Stack>
</Stack>

Expand Down