From e68f96a929b42f10d9a17490f3e0575b49309dbe Mon Sep 17 00:00:00 2001 From: laxman h Date: Tue, 31 Mar 2026 21:09:31 +0530 Subject: [PATCH] hirarchy made stable and flow strted checking end to end level 3 completed --- src/api/API.ts | 1 + src/components/admin/QuestionnaireBuilder.tsx | 23 +- src/components/admin/UserManagementPage.tsx | 6 +- .../applications/ApplicationDetails.tsx | 298 ++++++++++++------ src/components/applications/MasterPage.tsx | 14 +- .../MasterPage/UserManagementTable.tsx | 9 +- .../applications/MasterPage/ZMManagement.tsx | 2 +- .../applications/MasterPage/ZoneDetails.tsx | 34 +- .../applications/MasterPage/ZoneDialog.tsx | 10 +- src/hooks/useMasterData.ts | 10 +- src/lib/mock-data.ts | 1 + src/pages/public/PublicQuestionnairePage.tsx | 44 ++- src/services/onboarding.service.ts | 9 + src/store/slices/masterSlice.ts | 8 +- 14 files changed, 309 insertions(+), 160 deletions(-) diff --git a/src/api/API.ts b/src/api/API.ts index aae4a6f..16c21fb 100644 --- a/src/api/API.ts +++ b/src/api/API.ts @@ -47,6 +47,7 @@ export const API = { updateArchitectureStatus: (applicationId: string, status: string, remarks?: string) => client.post(`/onboarding/applications/${applicationId}/architecture-status`, { status, remarks }), generateDealerCodes: (applicationId: string) => client.post(`/onboarding/applications/${applicationId}/generate-codes`), updateApplicationStatus: (id: string, data: any) => client.put(`/onboarding/applications/${id}/status`, data), + retriggerEvaluators: (id: string) => client.post(`/onboarding/applications/${id}/retrigger-evaluators`), // Documents uploadDocument: (id: string, data: any) => client.post(`/onboarding/applications/${id}/documents`, data, { diff --git a/src/components/admin/QuestionnaireBuilder.tsx b/src/components/admin/QuestionnaireBuilder.tsx index ee174cd..9fcf188 100644 --- a/src/components/admin/QuestionnaireBuilder.tsx +++ b/src/components/admin/QuestionnaireBuilder.tsx @@ -8,7 +8,7 @@ interface Question { id?: string; sectionName: string; questionText: string; - inputType: 'text' | 'yesno' | 'file' | 'number' | 'select'; + inputType: 'text' | 'yesno' | 'file' | 'number' | 'select' | 'mcq' | 'radio' | 'textarea' | 'email'; options?: { text: string; score: number }[]; weight: number; order: number; @@ -58,7 +58,7 @@ const QuestionnaireBuilder: React.FC = () => { if (normalizedType === 'mcq') normalizedType = 'select'; // Fallback validity check - const validTypes = ['text', 'number', 'file', 'yesno', 'select']; + const validTypes = ['text', 'number', 'file', 'yesno', 'select', 'radio', 'textarea', 'email', 'mcq']; if (!validTypes.includes(normalizedType)) normalizedType = 'text'; return { @@ -295,10 +295,13 @@ const QuestionnaireBuilder: React.FC = () => { className="w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-amber-500 outline-none bg-white" > + + - + + @@ -308,8 +311,8 @@ const QuestionnaireBuilder: React.FC = () => {
updateQuestion(index, 'weight', parseFloat(e.target.value))} + value={isNaN(q.weight) ? 0 : q.weight} + onChange={(e) => updateQuestion(index, 'weight', parseFloat(e.target.value) || 0)} className="w-full border border-slate-300 p-2.5 rounded-lg focus:ring-2 focus:ring-amber-500 outline-none pl-3 pr-8" title="Weightage" /> @@ -330,7 +333,7 @@ const QuestionnaireBuilder: React.FC = () => {
{/* Options Editor for Select/YesNo */} - {(q.inputType === 'select' || q.inputType === 'yesno') && ( + {(q.inputType === 'select' || q.inputType === 'yesno' || q.inputType === 'radio' || q.inputType === 'mcq') && (
+ ); + } + return null; + })()} {/* Stage Docs Link */} {(() => { const stageDocsCount = documents.filter(doc => @@ -2344,7 +2416,8 @@ export function ApplicationDetails() { Work Note - {currentUser && ['DD Admin', 'Super Admin', 'DD AM', 'ASM'].includes(currentUser.role) && ( + {currentUser && ['DD Admin', 'Super Admin', 'DD AM', 'ASM'].includes(currentUser.role) && + !([1, 2, 3].every(level => interviews.some(i => i.level === level))) && (