'use client'; import { useEffect, useMemo, useState } from 'react'; import { Icon } from '@iconify/react'; import { BaseApproval } from '@/types/api/api-general'; import Button from '@/components/Button'; import { cn, formatDate } from '@/lib/helper'; interface ApprovalStepsV2Props { title?: string; approvals?: BaseApproval[]; steps: { step_number: number; step_name: string; }[]; maxVisibleSteps?: number; className?: { wrapper?: string; stepsWrapper?: string; stepsContainer?: string; }; } const ApprovalStepsV2 = ({ title = 'Progress Details', approvals, steps, maxVisibleSteps = 2, className, }: ApprovalStepsV2Props) => { const [isSeeAll, setIsSeeAll] = useState(false); const [formattedApprovals, setFormattedApprovals] = useState< (BaseApproval & { isActive: boolean })[] >([]); const latestApprovalStepNumber = approvals?.[approvals.length - 1].step_number ?? 0; const lastStepNumber = steps[steps.length - 1].step_number; const isLatestApprovalStepNumberLessThanLastStepNumber = latestApprovalStepNumber < lastStepNumber; const slicedFormattedApprovals = useMemo(() => { return formattedApprovals.slice(0, isSeeAll ? undefined : maxVisibleSteps); }, [formattedApprovals, isSeeAll]); const seeMoreClickHandler = () => { setIsSeeAll((prevVal) => !prevVal); }; useEffect(() => { if (approvals) { const tempFormattedApprovals: (BaseApproval & { isActive: boolean })[] = []; approvals.forEach((approval) => { tempFormattedApprovals.push({ ...approval, isActive: true, }); }); if (isLatestApprovalStepNumberLessThanLastStepNumber) { const latestApprovalStepNumberIndexInSteps = steps.findIndex( (step) => step.step_number === latestApprovalStepNumber ); const slicedSteps = steps.slice( latestApprovalStepNumberIndexInSteps + 1 ); slicedSteps.forEach((step) => { tempFormattedApprovals.push({ action: 'APPROVED', action_at: new Date().toISOString(), action_by: { id: 0, id_user: 0, email: '', name: '', }, step_name: step.step_name, step_number: step.step_number, isActive: false, }); }); } setFormattedApprovals(tempFormattedApprovals); } }, [approvals]); return (
Created at :{' '}
{formatDate(approval.action_at, 'DD-MM-YYYY, HH:mm')}
Notes : {approval.notes ?? '-'}