From 4299f57e2d6c23a716373365d5d6d12e24136420 Mon Sep 17 00:00:00 2001 From: Umar Adilov <99314948+adilovcode@users.noreply.github.com> Date: Wed, 14 May 2025 20:21:29 +0500 Subject: [PATCH] Added loader while loading transactions --- .../(dashboard)/corporate-dashboard/index.tsx | 8 ++++-- .../(dashboard)/customer-dashboard/index.tsx | 8 ++++-- src/pages-templates/login/index.tsx | 5 +++- src/shared/components/spinner.tsx | 20 +++++++++++++ .../components/table-loading-overlay.tsx | 28 +++++++++++++++++++ src/widgets/transactions-table.tsx | 8 ++++-- 6 files changed, 70 insertions(+), 7 deletions(-) create mode 100644 src/shared/components/spinner.tsx create mode 100644 src/shared/components/table-loading-overlay.tsx diff --git a/src/pages-templates/(dashboard)/corporate-dashboard/index.tsx b/src/pages-templates/(dashboard)/corporate-dashboard/index.tsx index 912c887..6b65627 100644 --- a/src/pages-templates/(dashboard)/corporate-dashboard/index.tsx +++ b/src/pages-templates/(dashboard)/corporate-dashboard/index.tsx @@ -32,8 +32,11 @@ export function CorporateDashboard() { page: 1, }); - const { data: transactionsResponse, refetch } = - useFetchCorporateTransactionsQuery(request); + const { + data: transactionsResponse, + refetch, + isLoading, + } = useFetchCorporateTransactionsQuery(request); useEffect(() => { refetch(); @@ -160,6 +163,7 @@ export function CorporateDashboard() { { refetch(); @@ -149,6 +152,7 @@ export function CustomerDashboard() {

{t('auth.loginIssues')}{' '} - + {t('auth.contactLink')}

diff --git a/src/shared/components/spinner.tsx b/src/shared/components/spinner.tsx new file mode 100644 index 0000000..db4fab9 --- /dev/null +++ b/src/shared/components/spinner.tsx @@ -0,0 +1,20 @@ +import { Loader2 } from 'lucide-react'; + +import { cn } from '../lib/utils'; + +interface SpinnerProps { + className?: string; + size?: 'sm' | 'md' | 'lg'; +} + +export function Spinner({ className, size = 'md' }: SpinnerProps) { + const sizeClasses = { + sm: 'h-4 w-4', + md: 'h-6 w-6', + lg: 'h-8 w-8', + }; + + return ( + + ); +} diff --git a/src/shared/components/table-loading-overlay.tsx b/src/shared/components/table-loading-overlay.tsx new file mode 100644 index 0000000..1c8ad34 --- /dev/null +++ b/src/shared/components/table-loading-overlay.tsx @@ -0,0 +1,28 @@ +import { cn } from '../lib/utils'; +import { Spinner } from './spinner'; + +interface TableLoadingOverlayProps { + isLoading: boolean; + message?: string; + className?: string; +} + +export default function TableLoadingOverlay({ + isLoading, + message = 'Загрузка данных...', + className, +}: TableLoadingOverlayProps) { + if (!isLoading) return null; + + return ( +
+ +

{message}

+
+ ); +} diff --git a/src/widgets/transactions-table.tsx b/src/widgets/transactions-table.tsx index 9a90181..f0c71ef 100644 --- a/src/widgets/transactions-table.tsx +++ b/src/widgets/transactions-table.tsx @@ -10,6 +10,7 @@ import { TransactionResponse, } from '@/entities/transactions/model/types'; +import TableLoadingOverlay from '@/shared/components/table-loading-overlay'; import { useTextController } from '@/shared/language/hooks/use-text-controller'; import { Button } from '@/shared/shadcn-ui/button'; import { Calendar } from '@/shared/shadcn-ui/calendar'; @@ -39,11 +40,13 @@ import { export interface TransactionsTableProps { onChange: (request: TransactionRequest) => void; + isLoading: boolean; data: TransactionResponse; } export const TransactionsTable = ({ data, + isLoading, onChange, }: TransactionsTableProps) => { const [startDate, setStartDate] = useState( @@ -98,7 +101,8 @@ export const TransactionsTable = ({ if (!data) return null; return ( -
+
+

{t('corporate.transactions.title')} @@ -169,7 +173,7 @@ export const TransactionsTable = ({

-
+