typescript issues for build resolvded

This commit is contained in:
laxmanhalaki 2025-12-12 09:15:47 +05:30
parent a4f9962c38
commit 636dc4a1c5
13 changed files with 53 additions and 33 deletions

View File

@ -54,7 +54,6 @@ import { WorkNotesTab } from './components/tabs/WorkNotesTab';
import { SummaryTab } from './components/tabs/SummaryTab'; import { SummaryTab } from './components/tabs/SummaryTab';
import { IOTab } from './components/tabs/IOTab'; import { IOTab } from './components/tabs/IOTab';
import { isClaimManagementRequest } from '@/utils/claimRequestUtils'; import { isClaimManagementRequest } from '@/utils/claimRequestUtils';
import { determineUserRole } from '@/utils/claimDataMapper';
import { QuickActionsSidebar } from './components/QuickActionsSidebar'; import { QuickActionsSidebar } from './components/QuickActionsSidebar';
import { RequestDetailModals } from './components/RequestDetailModals'; import { RequestDetailModals } from './components/RequestDetailModals';
import { RequestDetailProps } from './types/requestDetail.types'; import { RequestDetailProps } from './types/requestDetail.types';

View File

@ -364,7 +364,9 @@ export function QuickActionsSidebar({
<ProcessDetailsCard <ProcessDetailsCard
ioDetails={claimSidebarData.claimRequest.ioDetails} ioDetails={claimSidebarData.claimRequest.ioDetails}
dmsDetails={claimSidebarData.claimRequest.dmsDetails} dmsDetails={claimSidebarData.claimRequest.dmsDetails}
claimAmount={claimSidebarData.claimRequest.claimAmount} claimAmount={{
amount: claimSidebarData.claimRequest.claimAmount.closed || claimSidebarData.claimRequest.claimAmount.estimated || 0,
}}
estimatedBudgetBreakdown={claimSidebarData.claimRequest.proposalDetails?.costBreakup} estimatedBudgetBreakdown={claimSidebarData.claimRequest.proposalDetails?.costBreakup}
closedExpensesBreakdown={claimSidebarData.claimRequest.activityInfo?.closedExpensesBreakdown} closedExpensesBreakdown={claimSidebarData.claimRequest.activityInfo?.closedExpensesBreakdown}
visibility={claimSidebarData.visibility} visibility={claimSidebarData.visibility}

View File

@ -138,7 +138,7 @@ export function ActivityInformationCard({ activityInfo, className }: ActivityInf
Closed Expenses Breakdown Closed Expenses Breakdown
</label> </label>
<div className="bg-blue-50 border border-blue-200 rounded-lg p-3 space-y-2"> <div className="bg-blue-50 border border-blue-200 rounded-lg p-3 space-y-2">
{activityInfo.closedExpensesBreakdown.map((item, index) => ( {activityInfo.closedExpensesBreakdown.map((item: { description: string; amount: number }, index: number) => (
<div key={index} className="flex justify-between items-center text-sm"> <div key={index} className="flex justify-between items-center text-sm">
<span className="text-gray-700">{item.description}</span> <span className="text-gray-700">{item.description}</span>
<span className="font-medium text-gray-900"> <span className="font-medium text-gray-900">
@ -150,7 +150,7 @@ export function ActivityInformationCard({ activityInfo, className }: ActivityInf
<span className="font-semibold text-gray-900">Total</span> <span className="font-semibold text-gray-900">Total</span>
<span className="font-bold text-blue-600"> <span className="font-bold text-blue-600">
{formatCurrency( {formatCurrency(
activityInfo.closedExpensesBreakdown.reduce((sum, item) => sum + item.amount, 0) activityInfo.closedExpensesBreakdown.reduce((sum: number, item: { description: string; amount: number }) => sum + item.amount, 0)
)} )}
</span> </span>
</div> </div>

View File

@ -51,7 +51,7 @@ export function CreditNoteSAPModal({
dealerInfo, dealerInfo,
activityName, activityName,
requestNumber, requestNumber,
requestId, requestId: _requestId,
dueDate, dueDate,
}: CreditNoteSAPModalProps) { }: CreditNoteSAPModalProps) {
const [downloading, setDownloading] = useState(false); const [downloading, setDownloading] = useState(false);

View File

@ -52,7 +52,7 @@ export function DealerCompletionDocumentsModal({
onSubmit, onSubmit,
dealerName = 'Jaipur Royal Enfield', dealerName = 'Jaipur Royal Enfield',
activityName = 'Activity', activityName = 'Activity',
requestId, requestId: _requestId,
}: DealerCompletionDocumentsModalProps) { }: DealerCompletionDocumentsModalProps) {
const [activityCompletionDate, setActivityCompletionDate] = useState(''); const [activityCompletionDate, setActivityCompletionDate] = useState('');
const [numberOfParticipants, setNumberOfParticipants] = useState(''); const [numberOfParticipants, setNumberOfParticipants] = useState('');

View File

@ -48,7 +48,7 @@ export function DealerProposalSubmissionModal({
onSubmit, onSubmit,
dealerName = 'Jaipur Royal Enfield', dealerName = 'Jaipur Royal Enfield',
activityName = 'Activity', activityName = 'Activity',
requestId, requestId: _requestId,
}: DealerProposalSubmissionModalProps) { }: DealerProposalSubmissionModalProps) {
const [proposalDocument, setProposalDocument] = useState<File | null>(null); const [proposalDocument, setProposalDocument] = useState<File | null>(null);
const [costItems, setCostItems] = useState<CostItem[]>([ const [costItems, setCostItems] = useState<CostItem[]>([
@ -135,12 +135,13 @@ export function DealerProposalSubmissionModal({
} }
// Calculate final completion date if using days mode // Calculate final completion date if using days mode
let finalCompletionDate = expectedCompletionDate; let finalCompletionDate: string = expectedCompletionDate || '';
if (timelineMode === 'days' && numberOfDays) { if (timelineMode === 'days' && numberOfDays) {
const days = parseInt(numberOfDays); const days = parseInt(numberOfDays);
const date = new Date(); const date = new Date();
date.setDate(date.getDate() + days); date.setDate(date.getDate() + days);
finalCompletionDate = date.toISOString().split('T')[0]; const isoString = date.toISOString();
finalCompletionDate = isoString.split('T')[0] as string;
} }
try { try {

View File

@ -40,7 +40,7 @@ export function DeptLeadIOApprovalModal({
onApprove, onApprove,
onReject, onReject,
requestTitle, requestTitle,
requestId, requestId: _requestId,
}: DeptLeadIOApprovalModalProps) { }: DeptLeadIOApprovalModalProps) {
const [actionType, setActionType] = useState<'approve' | 'reject'>('approve'); const [actionType, setActionType] = useState<'approve' | 'reject'>('approve');
const [ioNumber, setIoNumber] = useState(''); const [ioNumber, setIoNumber] = useState('');

View File

@ -4,7 +4,6 @@
* Uses modular card components for flexible rendering based on role and request state * Uses modular card components for flexible rendering based on role and request state
*/ */
import { useState } from 'react';
import { import {
ActivityInformationCard, ActivityInformationCard,
DealerInformationCard, DealerInformationCard,
@ -16,7 +15,6 @@ import {
mapToClaimManagementRequest, mapToClaimManagementRequest,
determineUserRole, determineUserRole,
getRoleBasedVisibility, getRoleBasedVisibility,
type ClaimManagementRequest,
type RequestRole, type RequestRole,
} from '@/utils/claimDataMapper'; } from '@/utils/claimDataMapper';
@ -30,11 +28,11 @@ interface ClaimManagementOverviewTabProps {
} }
export function ClaimManagementOverviewTab({ export function ClaimManagementOverviewTab({
request, request: _request,
apiRequest, apiRequest,
currentUserId, currentUserId,
isInitiator, isInitiator: _isInitiator,
onEditClaimAmount, onEditClaimAmount: _onEditClaimAmount,
className = '', className = '',
}: ClaimManagementOverviewTabProps) { }: ClaimManagementOverviewTabProps) {
// Check if this is a claim management request // Check if this is a claim management request

View File

@ -160,7 +160,7 @@ export function ClaimManagementWorkflowTab({
</CardHeader> </CardHeader>
<CardContent> <CardContent>
<div className="space-y-4"> <div className="space-y-4">
{steps.map((step, index) => ( {steps.map((step) => (
<div <div
key={step.stepNumber} key={step.stepNumber}
className={`relative p-5 rounded-lg border-2 transition-all ${getStepBorderColor(step.status)}`} className={`relative p-5 rounded-lg border-2 transition-all ${getStepBorderColor(step.status)}`}

View File

@ -9,7 +9,7 @@
* - Dealer-specific workflow steps * - Dealer-specific workflow steps
*/ */
import { useState, useMemo, useEffect } from 'react'; import { useState, useEffect } from 'react';
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';
import { Badge } from '@/components/ui/badge'; import { Badge } from '@/components/ui/badge';
import { Button } from '@/components/ui/button'; import { Button } from '@/components/ui/button';
@ -21,8 +21,8 @@ import { DeptLeadIOApprovalModal } from '../modals/DeptLeadIOApprovalModal';
import { DealerCompletionDocumentsModal } from '../modals/DealerCompletionDocumentsModal'; import { DealerCompletionDocumentsModal } from '../modals/DealerCompletionDocumentsModal';
import { CreditNoteSAPModal } from '../modals/CreditNoteSAPModal'; import { CreditNoteSAPModal } from '../modals/CreditNoteSAPModal';
import { toast } from 'sonner'; import { toast } from 'sonner';
import { submitProposal, updateIODetails, submitCompletion, updateEInvoice, updateCreditNote } from '@/services/dealerClaimApi'; import { submitProposal, updateIODetails, submitCompletion, updateEInvoice } from '@/services/dealerClaimApi';
import { getWorkflowDetails, approveLevel, rejectLevel, updateWorkflow } from '@/services/workflowApi'; import { getWorkflowDetails, approveLevel, rejectLevel } from '@/services/workflowApi';
import { uploadDocument } from '@/services/documentApi'; import { uploadDocument } from '@/services/documentApi';
import { createWorkNoteMultipart } from '@/services/workflowApi'; import { createWorkNoteMultipart } from '@/services/workflowApi';
@ -153,7 +153,7 @@ export function DealerClaimWorkflowTab({
request, request,
user, user,
isInitiator, isInitiator,
onSkipApprover, onSkipApprover: _onSkipApprover,
onRefresh onRefresh
}: DealerClaimWorkflowTabProps) { }: DealerClaimWorkflowTabProps) {
const [showProposalModal, setShowProposalModal] = useState(false); const [showProposalModal, setShowProposalModal] = useState(false);
@ -357,8 +357,6 @@ export function DealerClaimWorkflowTab({
}); });
const currentStep = activeStep ? activeStep.step : (request?.currentStep || 1); const currentStep = activeStep ? activeStep.step : (request?.currentStep || 1);
const completedCount = workflowSteps.filter(s => s.status === 'approved').length;
// Check if current user is the dealer (for steps 1 and 5) // Check if current user is the dealer (for steps 1 and 5)
const userEmail = (user as any)?.email?.toLowerCase() || ''; const userEmail = (user as any)?.email?.toLowerCase() || '';
const dealerEmail = ( const dealerEmail = (
@ -370,14 +368,6 @@ export function DealerClaimWorkflowTab({
); );
const isDealer = dealerEmail && userEmail === dealerEmail; const isDealer = dealerEmail && userEmail === dealerEmail;
// Check if current user is the approver for each step based on logged-in email
const getStepApproverEmail = (stepNumber: number) => {
const level = approvalFlow.find((l: any) =>
(l.step || l.levelNumber || l.level_number) === stepNumber
);
return (level?.approverEmail || '').toLowerCase();
};
// Check if current user is the approver for the current step // Check if current user is the approver for the current step
const currentApprovalLevel = approvalFlow.find((level: any) => const currentApprovalLevel = approvalFlow.find((level: any) =>
(level.step || level.levelNumber || level.level_number) === currentStep (level.step || level.levelNumber || level.level_number) === currentStep
@ -823,7 +813,6 @@ export function DealerClaimWorkflowTab({
// Step is active if it's pending or in_progress and matches currentStep // Step is active if it's pending or in_progress and matches currentStep
const isActive = (step.status === 'pending' || step.status === 'in_progress') && step.step === currentStep; const isActive = (step.status === 'pending' || step.status === 'in_progress') && step.step === currentStep;
const isCompleted = step.status === 'approved'; const isCompleted = step.status === 'approved';
const isWaiting = step.status === 'waiting';
// Debug logging for Step 1 // Debug logging for Step 1
if (step.step === 1) { if (step.step === 1) {

View File

@ -0,0 +1,31 @@
/**
* Claim Management TypeScript interfaces
* Types for Claim Management request components
*/
export interface ClaimActivityInfo {
activityName: string;
activityType: string;
requestedDate?: string;
location: string;
period?: {
startDate: string;
endDate: string;
};
estimatedBudget?: number;
closedExpenses?: number;
closedExpensesBreakdown?: Array<{
description: string;
amount: number;
}>;
description?: string;
}
export interface DealerInfo {
dealerCode: string;
dealerName: string;
email?: string;
phone?: string;
address?: string;
}

View File

@ -275,7 +275,7 @@ export async function listClosedByMe(params: { page?: number; limit?: number; se
}; };
} }
export async function getWorkflowDetails(requestId: string, workflowType?: string) { export async function getWorkflowDetails(requestId: string, _workflowType?: string) {
const res = await apiClient.get(`/workflows/${requestId}/details`); const res = await apiClient.get(`/workflows/${requestId}/details`);
return res.data?.data || res.data; return res.data?.data || res.data;
} }

View File

@ -96,7 +96,7 @@ export interface RoleVisibility {
*/ */
export function mapToClaimManagementRequest( export function mapToClaimManagementRequest(
apiRequest: any, apiRequest: any,
currentUserId: string _currentUserId: string
): ClaimManagementRequest | null { ): ClaimManagementRequest | null {
try { try {
if (!isClaimManagementRequest(apiRequest)) { if (!isClaimManagementRequest(apiRequest)) {