Files
no-copy-frontend/src/app/ui/file-page/violation-table/file-page-violation-info-tabs.tsx
T

130 lines
4.0 KiB
TypeScript
Raw Normal View History

2026-04-14 12:50:52 +07:00
'use client'
import CaseComplaint from '@/app/ui/file-page/violation-table/case-complaint';
2026-04-30 13:39:22 +07:00
import CaseLegal from '@/app/ui/file-page/violation-table/case-claims';
2026-04-14 12:50:52 +07:00
import { ViolationFileDetail } from '@/app/hooks/react-query/useFileViolations';
import { MatchStatus } from '@/app/actions/violationActions';
import { useEffect, useState } from 'react';
2026-04-17 13:13:27 +07:00
import { useUserProfile } from '@/app/hooks/react-query/useUserDataInfo';
import { useTranslations } from 'next-intl';
2026-04-14 12:50:52 +07:00
type UpdateStatusHandler = (id: number, status: MatchStatus) => Promise<boolean>;
const STATUSES_IN_WORK = ['COMPLAINT_IN_WORK', 'LEGAL_IN_WORK', 'COMPLAINT_AND_LEGAL_IN_WORK'];
type TabType = 'complaint' | 'claim'
2026-04-14 12:50:52 +07:00
export default function FilePageViolationInfoTabs({ selectedViolation, updateStatusHandler, caseType }: { selectedViolation: ViolationFileDetail, updateStatusHandler: UpdateStatusHandler, caseType?: 'claim' | 'complaint' }) {
const t = useTranslations('Global');
2026-04-14 12:50:52 +07:00
const [activeTab, setActiveTab] = useState<TabType>('complaint');
const [showTabs, setShowTabs] = useState(false);
const isInWork = STATUSES_IN_WORK.includes(selectedViolation.status);
2026-04-17 13:13:27 +07:00
const { data: userData, isLoading, isError, error } = useUserProfile();
2026-04-14 12:50:52 +07:00
2026-04-15 15:55:54 +07:00
const [localViolation, setLocalViolation] = useState<ViolationFileDetail>(selectedViolation);
2026-04-14 12:50:52 +07:00
useEffect(() => {
2026-04-15 15:55:54 +07:00
setLocalViolation(selectedViolation);
2026-04-14 12:50:52 +07:00
if (caseType) {
setActiveTab(caseType)
}
}, [selectedViolation]);
2026-04-15 15:55:54 +07:00
2026-04-14 12:50:52 +07:00
useEffect(() => {
setShowTabs(false);
2026-04-15 15:55:54 +07:00
}, [localViolation.id]);
2026-04-14 12:50:52 +07:00
2026-04-17 13:13:27 +07:00
if (userData?.verifiedStatus !== "VERIFIED") {
return (
<div
className="violation-info-not-verified"
>
<div>
Подача жалобы/претензии невозможна,
<br />
так как вы не подтвердили свою личность
</div>
<div>
<button
className="btn-s"
>
Подтвердить
</button>
</div>
</div>
)
}
2026-04-14 12:50:52 +07:00
if (!isInWork && !showTabs) {
return (
<div className="violation-info-choice">
<h4>
{t('you-can')}
</h4>
2026-04-14 12:50:52 +07:00
<div className="violation-info-choice-buttons">
<button
2026-04-14 16:01:49 +07:00
className="btn btn-primary"
2026-04-14 12:50:52 +07:00
onClick={() => {
setShowTabs(true);
setActiveTab('complaint');
}}
>
{t('file-a-complaint')}
2026-04-14 12:50:52 +07:00
</button>
<span>
{t('or')}
2026-04-14 12:50:52 +07:00
</span>
<button
2026-04-14 16:01:49 +07:00
className="btn btn-primary"
2026-04-14 12:50:52 +07:00
onClick={() => {
setShowTabs(true);
setActiveTab('claim');
2026-04-14 12:50:52 +07:00
}}
>
{t('file-a-claim')}
2026-04-14 12:50:52 +07:00
</button>
</div>
</div>
);
}
return (
<div className="violation-info-tabs-wrapper">
<div className="violation-info-tabs">
<button
className={`btn-s btn-primary ${activeTab === 'complaint' ? 'active' : ''} ${localViolation.status === 'COMPLAINT_IN_WORK' || localViolation.status === 'COMPLAINT_AND_LEGAL_IN_WORK' ? '' : 'action'}`}
2026-04-14 12:50:52 +07:00
onClick={() => setActiveTab('complaint')}
>
{localViolation.status === 'COMPLAINT_IN_WORK' || localViolation.status === 'COMPLAINT_AND_LEGAL_IN_WORK' ? t('complaint') : t('file-a-complaint')}
2026-04-14 12:50:52 +07:00
</button>
<button
className={`btn-s btn-primary ${activeTab === 'claim' ? 'active' : ''} ${localViolation.status === 'LEGAL_IN_WORK' || localViolation.status === 'COMPLAINT_AND_LEGAL_IN_WORK' ? '' : 'action'}`}
onClick={() => setActiveTab('claim')}
2026-04-14 12:50:52 +07:00
>
{localViolation.status === 'LEGAL_IN_WORK' || localViolation.status === 'COMPLAINT_AND_LEGAL_IN_WORK' ? t('case') : t('file-a-claim')}
2026-04-14 12:50:52 +07:00
</button>
</div>
<div className="violation-info-content">
{activeTab === 'complaint' && (
<CaseComplaint
2026-04-15 15:55:54 +07:00
key={"complaint_" + localViolation.id}
selectedViolation={localViolation}
2026-04-14 12:50:52 +07:00
updateStatusHandler={updateStatusHandler}
2026-04-30 13:37:01 +07:00
setLocalViolation={setLocalViolation}
2026-04-14 12:50:52 +07:00
/>
)}
{activeTab === 'claim' && (
2026-04-14 12:50:52 +07:00
<CaseLegal
2026-04-15 15:55:54 +07:00
key={"legal_" + localViolation.id}
selectedViolation={localViolation}
2026-04-14 12:50:52 +07:00
updateStatusHandler={updateStatusHandler}
2026-04-30 13:37:01 +07:00
setLocalViolation={setLocalViolation}
2026-04-14 12:50:52 +07:00
/>
)}
</div>
</div>
);
}