From d24884f7e6f854d05e79410549c793c30959a12d Mon Sep 17 00:00:00 2001 From: smanylov Date: Tue, 28 Apr 2026 13:08:35 +0700 Subject: [PATCH] add final summary block --- src/app/actions/violationActions.ts | 36 +++++++++++++++++++ .../useViolationFinalSummaryStatistic.tsx | 27 ++++++++++++++ src/app/ui/reports/final-summary.tsx | 29 ++++++++------- src/app/ui/reports/reports-info.tsx | 5 --- src/i18n/messages/en.json | 3 +- src/i18n/messages/ru.json | 3 +- 6 files changed, 81 insertions(+), 22 deletions(-) create mode 100644 src/app/hooks/react-query/useViolationFinalSummaryStatistic.tsx diff --git a/src/app/actions/violationActions.ts b/src/app/actions/violationActions.ts index b95e12e..ffc0f22 100644 --- a/src/app/actions/violationActions.ts +++ b/src/app/actions/violationActions.ts @@ -262,6 +262,42 @@ export async function fetchViolationStatistic() { } } +export async function fetchViolationFinalSummaryStatistic() { + const token = await getSessionData('token'); + + try { + const response = await fetch(`${API_BASE_URL}/api/v1/data`, { + method: 'POST', + body: JSON.stringify({ + version: 1, + msg_id: 30023, + message_body: { + token: token, + } + }), + headers: { + 'Content-Type': 'application/json', + 'Accept': 'application/json' + } + }); + + if (response.ok) { + let parsed = await response.json(); + console.log(parsed); + + if (parsed?.message_code === 0) { + return parsed?.message_body; + } else { + throw null; + } + } else { + throw (`${response.status}`); + } + } catch (error) { + return null + } +} + interface complainBody { previousText: string, violationID: string | null, diff --git a/src/app/hooks/react-query/useViolationFinalSummaryStatistic.tsx b/src/app/hooks/react-query/useViolationFinalSummaryStatistic.tsx new file mode 100644 index 0000000..074fd2d --- /dev/null +++ b/src/app/hooks/react-query/useViolationFinalSummaryStatistic.tsx @@ -0,0 +1,27 @@ +import { useQuery } from '@tanstack/react-query'; +import { fetchViolationFinalSummaryStatistic } from '@/app/actions/violationActions'; + +export interface UseViolationFinalSummaryStatistic { + complaints_without_case: number; + total_complaints: number; + total_law_cases: number; + total_violations: number; + violations_with_complaint: number; + violations_without_complaint: number; +} + +export const useViolationFinalSummaryStatistic = () => { + return useQuery({ + queryKey: ['violationFinalSummaryStatistic'], + queryFn: () => { + return fetchViolationFinalSummaryStatistic() + }, + select: (data: UseViolationFinalSummaryStatistic | null) => { + if (!data) { + return null + } + return data; + }, + retry: false + }); +}; \ No newline at end of file diff --git a/src/app/ui/reports/final-summary.tsx b/src/app/ui/reports/final-summary.tsx index 1457404..f4a511b 100644 --- a/src/app/ui/reports/final-summary.tsx +++ b/src/app/ui/reports/final-summary.tsx @@ -2,21 +2,20 @@ import { useUserFilesInfo } from '@/app/hooks/react-query/useUserFilesInfo'; import { useTranslations } from 'next-intl'; -import { useEffect } from 'react'; -import { useViolationStatistic } from '@/app/hooks/react-query/useViolationStatistic'; -import {useMonitoringStats} from '@/app/hooks/react-query/useMonitoringStats'; +import { useMonitoringStats } from '@/app/hooks/react-query/useMonitoringStats'; +import { useViolationFinalSummaryStatistic } from '@/app/hooks/react-query/useViolationFinalSummaryStatistic'; export default function FinalSummary() { const t = useTranslations('Global'); const { data: filesInfo, isLoading, isError, error } = useUserFilesInfo(); - const { data: violationStatistic } = useViolationStatistic(); + const { data: violationStatistic } = useViolationFinalSummaryStatistic(); const { data: monitoringStats } = useMonitoringStats(); return (

- {t('summary-statistics')} {/* за Декабрь 2025 */} + {t('summary-statistics')}

{t('general-indicators-of-the-protection-system')} @@ -24,18 +23,14 @@ export default function FinalSummary() {

- {/*
🔍
*/}
{monitoringStats?.total_searches ? monitoringStats?.total_searches : 0} - {/* {filesInfo?.total.check ? filesInfo?.total.check : 0} */} -
+
{t('total-number-of-checks')}
- {/*
+15% к прошлому месяцу
*/}
- {/*
🚨
*/}
{violationStatistic?.total_violations ?? 0} @@ -46,22 +41,26 @@ export default function FinalSummary() {
- {violationStatistic?.in_progress_violations ?? 0} + {violationStatistic?.total_complaints ?? 0}
{t('violations-registered')}
- - {/*
Отличный результат!
*/} +
+
+ {violationStatistic?.total_law_cases ?? 0} +
+
+ {t('claims-registered')} +
+
- {/*
🛡️
*/}
{filesInfo?.total.quantity ? filesInfo?.total.quantity : 0}
{t('protected-content')}
- {/*
+0 за период
*/}
diff --git a/src/app/ui/reports/reports-info.tsx b/src/app/ui/reports/reports-info.tsx index 7557204..f2000a7 100644 --- a/src/app/ui/reports/reports-info.tsx +++ b/src/app/ui/reports/reports-info.tsx @@ -5,7 +5,6 @@ import { useUserFilesInfo } from '@/app/hooks/react-query/useUserFilesInfo'; import { IconDocument, IconSearch, IconWarning, IconGraph } from '@/app/ui/icons/icons'; import { useViolationStatistic } from '@/app/hooks/react-query/useViolationStatistic'; import { useMonitoringCount } from '@/app/hooks/react-query/useMonitoringCount'; -import { useEffect } from 'react'; export default function ReportsInfo() { const t = useTranslations("Global"); @@ -13,10 +12,6 @@ export default function ReportsInfo() { const { data: violationStatistic } = useViolationStatistic(); const { data: monitoringCount, isLoading: isLoadingMonitoringCount } = useMonitoringCount(); - useEffect(() => { - console.log(monitoringCount); - }, [monitoringCount]) - return ( <>
diff --git a/src/i18n/messages/en.json b/src/i18n/messages/en.json index f51df41..76619a0 100644 --- a/src/i18n/messages/en.json +++ b/src/i18n/messages/en.json @@ -204,6 +204,7 @@ "violations-found": "Violations found", "total-violations": "Total violations", "violations-registered": "Violations registered", + "claims-registered": "Claims registered", "new": "new", "in-progress": "In progress", "it-decided": "It's decided", @@ -439,7 +440,7 @@ "in": "in", "last-content-check": "Last content check", "day": "day", - "week": "week", + "week_accusative": "week", "month": "month", "every": "every", "country": "Country", diff --git a/src/i18n/messages/ru.json b/src/i18n/messages/ru.json index b7161f3..ec8b534 100644 --- a/src/i18n/messages/ru.json +++ b/src/i18n/messages/ru.json @@ -203,7 +203,8 @@ "document-occupy": "Занимают документы", "violations-found": "Найдено нарушений", "total-violations": "Всего нарушений", - "violations-registered": "Нарушений зарегистрированно", + "violations-registered": "Жалоб зарегистрированно", + "claims-registered": "Претензий зарегистрированно", "new": "Новые", "in-progress": "В работе", "it-decided": "Решено",