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 = ({

-
+