diff --git a/src/features/admin/api/adminApi.ts b/src/features/admin/api/adminApi.ts index f177de7..27d602b 100644 --- a/src/features/admin/api/adminApi.ts +++ b/src/features/admin/api/adminApi.ts @@ -6,6 +6,7 @@ import type { DocumentResponse, Organization, OrganizationListResponse, + PurchaseRequestListResponse, UpdateOrganizationRequest, WalletResponse, } from '../model/types' @@ -120,18 +121,15 @@ export function createOrganizationWallets(id: string): Promise ) } -export async function getDocuments(orgId: string): Promise { - const data = await doAdminRequest( +export function getDocuments(orgId: string): Promise { + return doAdminRequest( `/v1/organizations/${orgId}/documents`, {}, true, ) - // TEMP: inspect the real backend shape (download_url presence, fields). - console.log('[documents] list response:', data) - return data } -export async function uploadDocument( +export function uploadDocument( orgId: string, documentType: string, file: File, @@ -140,27 +138,32 @@ export async function uploadDocument( body.append('document_type', documentType) body.append('file', file) - const data = await doAdminRequest( + return doAdminRequest( `/v1/organizations/${orgId}/documents`, { method: 'POST', body }, true, ) - // TEMP: inspect the real backend shape after upload. - console.log('[documents] upload response:', data) - return data } -export async function getDocument( - orgId: string, - documentId: string, -): Promise { - const data = await doAdminRequest( - `/v1/organizations/${orgId}/documents/${documentId}`, +export async function getPurchaseRequests(params: { + organizationId?: string + status?: string + limit?: number + offset?: number +}): Promise { + const query = new URLSearchParams() + if (params.organizationId) query.set('organization_id', params.organizationId) + if (params.status) query.set('status', params.status) + query.set('limit', String(params.limit ?? 50)) + query.set('offset', String(params.offset ?? 0)) + + const data = await doAdminRequest( + `/v1/purchase-requests?${query.toString()}`, {}, true, ) - // TEMP: inspect single-document shape (this is where download_url should appear). - console.log('[documents] get-one response:', data) + // TEMP: inspect real backend shape — especially which `status` values appear. + console.log('[purchase-requests] list response:', data) return data } diff --git a/src/features/admin/hooks/useDownloadDocument.ts b/src/features/admin/hooks/useDownloadDocument.ts deleted file mode 100644 index 52fea3e..0000000 --- a/src/features/admin/hooks/useDownloadDocument.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { useState } from 'react' -import { getDocument } from '../api/adminApi' -import type { DocumentResponse } from '../model/types' - -/** - * Resolves a document's download URL and opens it. The list endpoint may not - * include a fresh `download_url`, so we fall back to fetching the single - * document (which is where the presigned URL is expected to appear). - */ -export function useDownloadDocument(orgId: string) { - const [downloadingId, setDownloadingId] = useState(null) - - async function download(doc: DocumentResponse) { - setDownloadingId(doc.id) - try { - let url = doc.download_url - if (!url) { - const fresh = await getDocument(orgId, doc.id) - url = fresh.download_url - } - if (url) { - window.open(url, '_blank', 'noopener,noreferrer') - } else { - throw new Error('Сервер не вернул ссылку для скачивания') - } - } finally { - setDownloadingId(null) - } - } - - return { download, downloadingId } -} diff --git a/src/features/admin/hooks/usePurchaseRequests.ts b/src/features/admin/hooks/usePurchaseRequests.ts new file mode 100644 index 0000000..a76da36 --- /dev/null +++ b/src/features/admin/hooks/usePurchaseRequests.ts @@ -0,0 +1,15 @@ +import { useQuery } from '@tanstack/react-query' +import { getPurchaseRequests } from '../api/adminApi' + +export const PURCHASE_REQUESTS_QUERY_KEY = (orgId: string) => [ + 'admin-purchase-requests', + orgId, +] + +export function usePurchaseRequests(orgId: string | undefined) { + return useQuery({ + queryKey: PURCHASE_REQUESTS_QUERY_KEY(orgId ?? ''), + queryFn: () => getPurchaseRequests({ organizationId: orgId }), + enabled: !!orgId, + }) +} diff --git a/src/features/admin/index.ts b/src/features/admin/index.ts index 4890abe..e9ec761 100644 --- a/src/features/admin/index.ts +++ b/src/features/admin/index.ts @@ -9,7 +9,7 @@ export { updateOrganization, getDocuments, uploadDocument, - getDocument, + getPurchaseRequests, refreshAdminToken, adminTokenStore, } from './api/adminApi' @@ -23,6 +23,8 @@ export type { UpdateOrganizationRequest, WalletResponse, DocumentResponse, + PurchaseRequestResponse, + PurchaseRequestListResponse, BankDetails, } from './model/types' export { useAdminAuth, ADMIN_AUTH_QUERY_KEY } from './hooks/useAdminAuth' @@ -35,4 +37,4 @@ export { useCreateOrganizationWallets } from './hooks/useCreateOrganizationWalle export { useUpdateOrganization } from './hooks/useUpdateOrganization' export { useDocuments, DOCUMENTS_QUERY_KEY } from './hooks/useDocuments' export { useUploadDocument } from './hooks/useUploadDocument' -export { useDownloadDocument } from './hooks/useDownloadDocument' +export { usePurchaseRequests, PURCHASE_REQUESTS_QUERY_KEY } from './hooks/usePurchaseRequests' diff --git a/src/features/admin/model/types.ts b/src/features/admin/model/types.ts index 42f919b..30d7389 100644 --- a/src/features/admin/model/types.ts +++ b/src/features/admin/model/types.ts @@ -70,6 +70,31 @@ export interface DocumentResponse { download_url: string | null } +// Monetary fields are strings to preserve decimal precision — do not coerce to number. +export interface PurchaseRequestResponse { + id: string + organization_id: string + status: string + usdt_amount: string + rub_amount: string | null + exchange_rate: string | null + service_fee_percent: string | null + comment: string | null + admin_comment: string | null + target_wallet_chain: string | null + target_wallet_address: string | null + tx_hash: string | null + assigned_to: string | null + created_at: string | null + updated_at: string | null + completed_at: string | null +} + +export interface PurchaseRequestListResponse { + items: PurchaseRequestResponse[] + total: number +} + export interface UpdateOrganizationRequest { name?: string | null short_name?: string | null diff --git a/src/pages/admin-organization/ui/AdminOrganizationPage.module.css b/src/pages/admin-organization/ui/AdminOrganizationPage.module.css index ad4fb8b..af102a9 100644 --- a/src/pages/admin-organization/ui/AdminOrganizationPage.module.css +++ b/src/pages/admin-organization/ui/AdminOrganizationPage.module.css @@ -39,9 +39,38 @@ gap: 24px; } -.documents { +.tabs { max-width: 900px; - margin: 24px auto 0; + margin: 0 auto 24px; + display: flex; + gap: 8px; + border-bottom: 1px solid rgba(255, 255, 255, 0.08); +} + +.tab { + background: none; + border: none; + border-bottom: 2px solid transparent; + color: var(--text-secondary, rgba(255, 255, 255, 0.6)); + font-size: 15px; + font-weight: 600; + padding: 12px 16px; + cursor: pointer; + transition: color 0.2s, border-color 0.2s; +} + +.tab:hover { + color: var(--text-primary, #fff); +} + +.tabActive { + color: var(--text-primary, #fff); + border-bottom-color: var(--interactive, #4a6dff); +} + +.tabPanel { + max-width: 900px; + margin: 0 auto; } .section { diff --git a/src/pages/admin-organization/ui/AdminOrganizationPage.tsx b/src/pages/admin-organization/ui/AdminOrganizationPage.tsx index 24fdad2..e3a4cc8 100644 --- a/src/pages/admin-organization/ui/AdminOrganizationPage.tsx +++ b/src/pages/admin-organization/ui/AdminOrganizationPage.tsx @@ -5,9 +5,18 @@ import { ROUTES } from '@shared/config/routes' import { FormField, Notification, PrimaryButton } from '@shared/ui' import { AdminLoginForm } from '@widgets/admin-login-form' import { OrganizationDocuments } from '@widgets/organization-documents' +import { OrganizationPurchaseRequests } from '@widgets/organization-purchase-requests' import { useOrganizationForm } from '../model/useOrganizationForm' import styles from './AdminOrganizationPage.module.css' +type Tab = 'info' | 'documents' | 'requests' + +const TABS: { id: Tab; label: string }[] = [ + { id: 'info', label: 'Общая информация' }, + { id: 'documents', label: 'Документы' }, + { id: 'requests', label: 'Заявки' }, +] + function formatDateTime(value: string | null): string { if (!value) return '—' const d = new Date(value) @@ -21,6 +30,7 @@ export function AdminOrganizationPage() { const navigate = useNavigate() const { data: org, isLoading, isError } = useOrganization(organizationId) const [notice, setNotice] = useState(false) + const [activeTab, setActiveTab] = useState('info') const { form, setField, handleSubmit, isSaving, error } = useOrganizationForm( org, organizationId ?? '', @@ -43,32 +53,47 @@ export function AdminOrganizationPage() { {isError &&
Не удалось загрузить организацию
} {org && ( +
+ {TABS.map((tab) => ( + + ))} +
+ )} + + {org && activeTab === 'info' && (

Реквизиты

- - + + - - - + + +

Адреса

- - + +

Контакты

- - + +
@@ -93,12 +118,18 @@ export function AdminOrganizationPage() {
)} - {org && ( -
+ {org && activeTab === 'documents' && ( +
)} + {org && activeTab === 'requests' && ( +
+ +
+ )} + {notice && ( (null) const [documentType, setDocumentType] = useState('') const [file, setFile] = useState(null) - const [downloadError, setDownloadError] = useState(null) function handleUpload(e: React.FormEvent) { e.preventDefault() - if (!file || !documentType.trim()) return + if (!file) return upload.mutate( - { documentType: documentType.trim(), file }, + { documentType: documentType.trim() || 'other', file }, { onSuccess: () => { setDocumentType('') @@ -59,15 +52,6 @@ export function OrganizationDocuments({ orgId }: Props) { ) } - async function handleDownload(doc: DocumentResponse) { - setDownloadError(null) - try { - await download(doc) - } catch (err) { - setDownloadError(extractErrorMessage(err)) - } - } - const uploadError = upload.isError ? extractErrorMessage(upload.error) : null return ( @@ -78,7 +62,7 @@ export function OrganizationDocuments({ orgId }: Props) { setDocumentType(e.target.value)} /> @@ -91,14 +75,13 @@ export function OrganizationDocuments({ orgId }: Props) { {uploadError &&

{uploadError}

} - {downloadError &&

{downloadError}

} {isLoading &&
Загрузка...
} {isError &&
Не удалось загрузить документы
} @@ -126,14 +109,18 @@ export function OrganizationDocuments({ orgId }: Props) { {formatSize(doc.file_size_bytes)} {formatDate(doc.created_at)} - + {doc.download_url ? ( + + Скачать + + ) : ( + + )} ))} diff --git a/src/widgets/organization-purchase-requests/index.ts b/src/widgets/organization-purchase-requests/index.ts new file mode 100644 index 0000000..29b1895 --- /dev/null +++ b/src/widgets/organization-purchase-requests/index.ts @@ -0,0 +1 @@ +export { OrganizationPurchaseRequests } from './ui/OrganizationPurchaseRequests' diff --git a/src/widgets/organization-purchase-requests/ui/OrganizationPurchaseRequests.module.css b/src/widgets/organization-purchase-requests/ui/OrganizationPurchaseRequests.module.css new file mode 100644 index 0000000..67d19cd --- /dev/null +++ b/src/widgets/organization-purchase-requests/ui/OrganizationPurchaseRequests.module.css @@ -0,0 +1,50 @@ +.tableWrap { + overflow-x: auto; +} + +.table { + width: 100%; + border-collapse: collapse; +} + +.table th { + text-align: left; + font-size: 12px; + letter-spacing: 1.5px; + text-transform: uppercase; + color: var(--text-secondary); + font-weight: 500; + padding: 0 16px 14px; + white-space: nowrap; +} + +.table td { + padding: 14px 16px; + border-top: 1px solid rgba(255, 255, 255, 0.06); + vertical-align: middle; + font-size: 14px; + color: var(--text-primary); +} + +.mono { + font-family: var(--font-mono, monospace); + font-size: 13px; +} + +.status { + display: inline-block; + padding: 4px 10px; + border-radius: 999px; + font-size: 12px; + font-weight: 600; + background: rgba(74, 109, 255, 0.12); + color: #7c95ff; + white-space: nowrap; +} + +.state { + padding: 32px 16px; + text-align: center; + color: var(--text-secondary, rgba(255, 255, 255, 0.6)); + font-size: 14px; +} diff --git a/src/widgets/organization-purchase-requests/ui/OrganizationPurchaseRequests.tsx b/src/widgets/organization-purchase-requests/ui/OrganizationPurchaseRequests.tsx new file mode 100644 index 0000000..257a663 --- /dev/null +++ b/src/widgets/organization-purchase-requests/ui/OrganizationPurchaseRequests.tsx @@ -0,0 +1,63 @@ +import { usePurchaseRequests } from '@features/admin' +import styles from './OrganizationPurchaseRequests.module.css' + +interface Props { + orgId: string +} + +function formatAmount(value: string | null, suffix: string): string { + if (!value) return '—' + return `${value} ${suffix}` +} + +function formatDate(value: string | null): string { + if (!value) return '—' + const d = new Date(value) + if (Number.isNaN(d.getTime())) return '—' + return d.toLocaleString('ru-RU') +} + +export function OrganizationPurchaseRequests({ orgId }: Props) { + const { data, isLoading, isError } = usePurchaseRequests(orgId) + + if (isLoading) { + return
Загрузка...
+ } + + if (isError) { + return
Не удалось загрузить заявки
+ } + + if (!data || data.items.length === 0) { + return
Заявок пока нет
+ } + + return ( +
+ + + + + + + + + + + + {data.items.map((req) => ( + + + + + + + + ))} + +
USDTСумма ₽КурсСтатусСоздана
{formatAmount(req.usdt_amount, 'USDT')}{formatAmount(req.rub_amount, '₽')}{req.exchange_rate ?? '—'} + {req.status} + {formatDate(req.created_at)}
+
+ ) +} diff --git a/tsconfig.tsbuildinfo b/tsconfig.tsbuildinfo index f235d24..5063107 100644 --- a/tsconfig.tsbuildinfo +++ b/tsconfig.tsbuildinfo @@ -1 +1 @@ -{"root":["./src/main.tsx","./src/vite-env.d.ts","./src/app/app.tsx","./src/app/providers/guestroute.tsx","./src/app/providers/protectedroute.tsx","./src/app/providers/queryprovider.tsx","./src/app/providers/routerprovider.tsx","./src/app/providers/scrolltotop.tsx","./src/app/providers/index.ts","./src/entities/commission/index.ts","./src/entities/commission/model/tiers.ts","./src/entities/commission/ui/commissiontable.tsx","./src/features/admin/index.ts","./src/features/admin/api/adminapi.ts","./src/features/admin/hooks/useadminauth.ts","./src/features/admin/hooks/useadminlogin.ts","./src/features/admin/hooks/useadminlogout.ts","./src/features/admin/hooks/usecreateorganization.ts","./src/features/admin/hooks/usecreateorganizationwallets.ts","./src/features/admin/hooks/usedocuments.ts","./src/features/admin/hooks/usedownloaddocument.ts","./src/features/admin/hooks/useorganization.ts","./src/features/admin/hooks/useorganizations.ts","./src/features/admin/hooks/useupdateorganization.ts","./src/features/admin/hooks/useuploaddocument.ts","./src/features/admin/model/types.ts","./src/features/auth/index.ts","./src/features/auth/api/profileapi.ts","./src/features/auth/api/registrationapi.ts","./src/features/auth/hooks/useauth.ts","./src/features/auth/hooks/useisauthenticated.ts","./src/features/auth/hooks/useme.ts","./src/features/auth/hooks/useupdatephone.ts","./src/features/auth/hooks/useuploadavatar.ts","./src/features/kyc/api/kycapi.ts","./src/features/payment/index.ts","./src/features/payment/api/paymentapi.ts","./src/features/payment/hooks/usecreateorder.ts","./src/features/payment/hooks/useorders.ts","./src/features/payment/hooks/usepaymentconfig.ts","./src/features/payment/hooks/usepaymentquote.ts","./src/features/payment/hooks/usepaymentquotebyrub.ts","./src/features/payment/model/usecurrencyconversion.ts","./src/features/wallet/index.ts","./src/features/wallet/api/walletapi.ts","./src/features/wallet/model/usewalletdata.ts","./src/pages/admin/index.ts","./src/pages/admin/ui/adminpage.tsx","./src/pages/admin-organization/index.ts","./src/pages/admin-organization/model/useorganizationform.ts","./src/pages/admin-organization/ui/adminorganizationpage.tsx","./src/pages/bridge/index.ts","./src/pages/bridge/ui/bridgepage.tsx","./src/pages/converter/index.ts","./src/pages/converter/ui/converterpage.tsx","./src/pages/converter-test/index.ts","./src/pages/converter-test/ui/convertertestpage.tsx","./src/pages/home/index.ts","./src/pages/home/ui/homepage.tsx","./src/pages/kyc/index.ts","./src/pages/kyc/ui/kycpage.tsx","./src/pages/login/index.ts","./src/pages/login/ui/loginpage.tsx","./src/pages/politika-cookie/index.ts","./src/pages/politika-cookie/ui/politikacookiepage.tsx","./src/pages/politika-personalnyh-dannyh/index.ts","./src/pages/politika-personalnyh-dannyh/ui/politikapage.tsx","./src/pages/profile/index.ts","./src/pages/profile/ui/profilepage.tsx","./src/pages/publichnaya-oferta/index.ts","./src/pages/publichnaya-oferta/ui/publichnayaofertapage.tsx","./src/pages/reestr-pd-rkn/index.ts","./src/pages/reestr-pd-rkn/ui/reestrypage.tsx","./src/pages/register/index.ts","./src/pages/register/ui/registerpage.tsx","./src/pages/register-test/index.ts","./src/pages/register-test/ui/registertestpage.tsx","./src/pages/restore-password/index.ts","./src/pages/restore-password/ui/restorepasswordpage.tsx","./src/pages/seed-phrase/index.ts","./src/pages/seed-phrase/ui/seedphrasepage.tsx","./src/pages/soglasie-personalnyh-dannyh/index.ts","./src/pages/soglasie-personalnyh-dannyh/ui/soglasiepage.tsx","./src/pages/swap/index.ts","./src/pages/swap/ui/swappage.tsx","./src/pages/transactions/index.ts","./src/pages/transactions/ui/transactionspage.tsx","./src/pages/wallet/index.ts","./src/pages/wallet/ui/walletpage.tsx","./src/shared/api/base.ts","./src/shared/api/csrf.ts","./src/shared/api/tokenstore.ts","./src/shared/api/types.ts","./src/shared/assets/coins/index.ts","./src/shared/config/constants.ts","./src/shared/config/env.ts","./src/shared/config/routes.ts","./src/shared/lib/hooks/usedebounce.ts","./src/shared/lib/hooks/uselocalstorage.ts","./src/shared/lib/utils/baseunits.ts","./src/shared/lib/utils/cn.ts","./src/shared/lib/utils/truncatedecimals.ts","./src/shared/types/index.ts","./src/shared/ui/index.ts","./src/shared/ui/button/button.tsx","./src/shared/ui/button/index.ts","./src/shared/ui/convertfield/convertfield.tsx","./src/shared/ui/convertfield/index.ts","./src/shared/ui/directionswapbutton/directionswapbutton.tsx","./src/shared/ui/directionswapbutton/index.ts","./src/shared/ui/formfield/formfield.tsx","./src/shared/ui/formfield/index.ts","./src/shared/ui/notification/notification.tsx","./src/shared/ui/notification/index.ts","./src/shared/ui/pill/pill.tsx","./src/shared/ui/pill/index.ts","./src/shared/ui/primarybutton/primarybutton.tsx","./src/shared/ui/primarybutton/index.ts","./src/shared/ui/title/title.tsx","./src/shared/ui/tokenicon/tokenicon.tsx","./src/shared/ui/tokenicon/index.ts","./src/widgets/about/index.ts","./src/widgets/about/ui/about.tsx","./src/widgets/add-legal-entity-modal/index.ts","./src/widgets/add-legal-entity-modal/model/useaddlegalentityform.ts","./src/widgets/add-legal-entity-modal/ui/addlegalentitymodal.tsx","./src/widgets/admin-login-form/index.ts","./src/widgets/admin-login-form/model/useadminloginform.ts","./src/widgets/admin-login-form/ui/adminloginform.tsx","./src/widgets/balance-card/index.ts","./src/widgets/balance-card/ui/balancecard.tsx","./src/widgets/bridge-form/index.ts","./src/widgets/bridge-form/ui/bridgeconfirmmodal.tsx","./src/widgets/bridge-form/ui/bridgeform.tsx","./src/widgets/bridge-form/ui/networkselect.tsx","./src/widgets/converter-page/index.ts","./src/widgets/converter-page/model/useconvertersection.ts","./src/widgets/converter-page/ui/agreementcheck.tsx","./src/widgets/converter-page/ui/convertersection.tsx","./src/widgets/currency-converter/index.ts","./src/widgets/currency-converter/ui/agreementcheckbox.tsx","./src/widgets/currency-converter/ui/converter.tsx","./src/widgets/footer/index.ts","./src/widgets/footer/ui/footer.tsx","./src/widgets/header/index.ts","./src/widgets/header/ui/header.tsx","./src/widgets/hero/index.ts","./src/widgets/hero/lib/usecountdown.ts","./src/widgets/hero/ui/conversionflow.tsx","./src/widgets/hero/ui/countdown.tsx","./src/widgets/hero/ui/exchangecard.tsx","./src/widgets/hero/ui/hero.tsx","./src/widgets/kyc-verification/index.ts","./src/widgets/kyc-verification/model/usekyc.ts","./src/widgets/kyc-verification/ui/kycmodal.tsx","./src/widgets/kyc-verification/ui/kycwidget.tsx","./src/widgets/legal-entities-table/index.ts","./src/widgets/legal-entities-table/ui/legalentitiestable.tsx","./src/widgets/login-form/index.ts","./src/widgets/login-form/model/useloginform.ts","./src/widgets/login-form/ui/loginform.tsx","./src/widgets/networks-table/index.ts","./src/widgets/networks-table/model/networks.ts","./src/widgets/networks-table/ui/networkstable.tsx","./src/widgets/organization-documents/index.ts","./src/widgets/organization-documents/ui/organizationdocuments.tsx","./src/widgets/profile/index.ts","./src/widgets/profile/ui/avatarcropmodal.tsx","./src/widgets/profile/ui/profileavatar.tsx","./src/widgets/profile/ui/profilesection.tsx","./src/widgets/profile/ui/getcroppedimg.ts","./src/widgets/receive-modal/index.ts","./src/widgets/receive-modal/ui/receivemodal.tsx","./src/widgets/register-form/index.ts","./src/widgets/register-form/model/useregisterform.ts","./src/widgets/register-form/ui/individualform.tsx","./src/widgets/register-form/ui/legalregisterinfo.tsx","./src/widgets/register-form/ui/registerform.tsx","./src/widgets/restore-password-form/index.ts","./src/widgets/restore-password-form/ui/restorepasswordform.tsx","./src/widgets/seed-phrase/index.ts","./src/widgets/seed-phrase/model/useseedphrase.ts","./src/widgets/seed-phrase/ui/seedphrasewidget.tsx","./src/widgets/send-modal/index.ts","./src/widgets/send-modal/model/sendtypes.ts","./src/widgets/send-modal/ui/sendmodal.tsx","./src/widgets/swap-bridge-tabs/index.ts","./src/widgets/swap-bridge-tabs/ui/swapbridgetabs.tsx","./src/widgets/swap-form/index.ts","./src/widgets/swap-form/model/useswapform.ts","./src/widgets/swap-form/ui/raterow.tsx","./src/widgets/swap-form/ui/swapcard.tsx","./src/widgets/swap-form/ui/swapconfirmmodal.tsx","./src/widgets/swap-form/ui/swapdirectionbutton.tsx","./src/widgets/swap-form/ui/swapform.tsx","./src/widgets/swap-form/ui/swapinfopanel.tsx","./src/widgets/swap-form/ui/tokenselect.tsx","./src/widgets/swap-form/ui/trxconfirmmodal.tsx","./src/widgets/token-table/index.ts","./src/widgets/token-table/model/tokens.ts","./src/widgets/token-table/model/usechaintokenrows.ts","./src/widgets/token-table/ui/tokentable.tsx","./src/widgets/transactions-list/index.ts","./src/widgets/transactions-list/model/format.ts","./src/widgets/transactions-list/model/paymentstatuslabels.ts","./src/widgets/transactions-list/ui/copybutton.tsx","./src/widgets/transactions-list/ui/orderaccordion.tsx","./src/widgets/transactions-list/ui/statusbadge.tsx","./src/widgets/transactions-list/ui/transactionslist.tsx","./src/widgets/wallet-chain-tabs/index.ts","./src/widgets/wallet-chain-tabs/ui/walletchaintabs.tsx","./src/widgets/wallet-header/index.ts","./src/widgets/wallet-header/ui/walletheader.tsx","./src/widgets/wallet-layout/index.ts","./src/widgets/wallet-layout/ui/walletlayout.tsx"],"version":"5.6.3"} \ No newline at end of file +{"root":["./src/main.tsx","./src/vite-env.d.ts","./src/app/app.tsx","./src/app/providers/guestroute.tsx","./src/app/providers/protectedroute.tsx","./src/app/providers/queryprovider.tsx","./src/app/providers/routerprovider.tsx","./src/app/providers/scrolltotop.tsx","./src/app/providers/index.ts","./src/entities/commission/index.ts","./src/entities/commission/model/tiers.ts","./src/entities/commission/ui/commissiontable.tsx","./src/features/admin/index.ts","./src/features/admin/api/adminapi.ts","./src/features/admin/hooks/useadminauth.ts","./src/features/admin/hooks/useadminlogin.ts","./src/features/admin/hooks/useadminlogout.ts","./src/features/admin/hooks/usecreateorganization.ts","./src/features/admin/hooks/usecreateorganizationwallets.ts","./src/features/admin/hooks/usedocuments.ts","./src/features/admin/hooks/useorganization.ts","./src/features/admin/hooks/useorganizations.ts","./src/features/admin/hooks/usepurchaserequests.ts","./src/features/admin/hooks/useupdateorganization.ts","./src/features/admin/hooks/useuploaddocument.ts","./src/features/admin/model/types.ts","./src/features/auth/index.ts","./src/features/auth/api/profileapi.ts","./src/features/auth/api/registrationapi.ts","./src/features/auth/hooks/useauth.ts","./src/features/auth/hooks/useisauthenticated.ts","./src/features/auth/hooks/useme.ts","./src/features/auth/hooks/useupdatephone.ts","./src/features/auth/hooks/useuploadavatar.ts","./src/features/kyc/api/kycapi.ts","./src/features/payment/index.ts","./src/features/payment/api/paymentapi.ts","./src/features/payment/hooks/usecreateorder.ts","./src/features/payment/hooks/useorders.ts","./src/features/payment/hooks/usepaymentconfig.ts","./src/features/payment/hooks/usepaymentquote.ts","./src/features/payment/hooks/usepaymentquotebyrub.ts","./src/features/payment/model/usecurrencyconversion.ts","./src/features/wallet/index.ts","./src/features/wallet/api/walletapi.ts","./src/features/wallet/model/usewalletdata.ts","./src/pages/admin/index.ts","./src/pages/admin/ui/adminpage.tsx","./src/pages/admin-organization/index.ts","./src/pages/admin-organization/model/useorganizationform.ts","./src/pages/admin-organization/ui/adminorganizationpage.tsx","./src/pages/bridge/index.ts","./src/pages/bridge/ui/bridgepage.tsx","./src/pages/converter/index.ts","./src/pages/converter/ui/converterpage.tsx","./src/pages/converter-test/index.ts","./src/pages/converter-test/ui/convertertestpage.tsx","./src/pages/home/index.ts","./src/pages/home/ui/homepage.tsx","./src/pages/kyc/index.ts","./src/pages/kyc/ui/kycpage.tsx","./src/pages/login/index.ts","./src/pages/login/ui/loginpage.tsx","./src/pages/politika-cookie/index.ts","./src/pages/politika-cookie/ui/politikacookiepage.tsx","./src/pages/politika-personalnyh-dannyh/index.ts","./src/pages/politika-personalnyh-dannyh/ui/politikapage.tsx","./src/pages/profile/index.ts","./src/pages/profile/ui/profilepage.tsx","./src/pages/publichnaya-oferta/index.ts","./src/pages/publichnaya-oferta/ui/publichnayaofertapage.tsx","./src/pages/reestr-pd-rkn/index.ts","./src/pages/reestr-pd-rkn/ui/reestrypage.tsx","./src/pages/register/index.ts","./src/pages/register/ui/registerpage.tsx","./src/pages/register-test/index.ts","./src/pages/register-test/ui/registertestpage.tsx","./src/pages/restore-password/index.ts","./src/pages/restore-password/ui/restorepasswordpage.tsx","./src/pages/seed-phrase/index.ts","./src/pages/seed-phrase/ui/seedphrasepage.tsx","./src/pages/soglasie-personalnyh-dannyh/index.ts","./src/pages/soglasie-personalnyh-dannyh/ui/soglasiepage.tsx","./src/pages/swap/index.ts","./src/pages/swap/ui/swappage.tsx","./src/pages/transactions/index.ts","./src/pages/transactions/ui/transactionspage.tsx","./src/pages/wallet/index.ts","./src/pages/wallet/ui/walletpage.tsx","./src/shared/api/base.ts","./src/shared/api/csrf.ts","./src/shared/api/tokenstore.ts","./src/shared/api/types.ts","./src/shared/assets/coins/index.ts","./src/shared/config/constants.ts","./src/shared/config/env.ts","./src/shared/config/routes.ts","./src/shared/lib/hooks/usedebounce.ts","./src/shared/lib/hooks/uselocalstorage.ts","./src/shared/lib/utils/baseunits.ts","./src/shared/lib/utils/cn.ts","./src/shared/lib/utils/truncatedecimals.ts","./src/shared/types/index.ts","./src/shared/ui/index.ts","./src/shared/ui/button/button.tsx","./src/shared/ui/button/index.ts","./src/shared/ui/convertfield/convertfield.tsx","./src/shared/ui/convertfield/index.ts","./src/shared/ui/directionswapbutton/directionswapbutton.tsx","./src/shared/ui/directionswapbutton/index.ts","./src/shared/ui/formfield/formfield.tsx","./src/shared/ui/formfield/index.ts","./src/shared/ui/notification/notification.tsx","./src/shared/ui/notification/index.ts","./src/shared/ui/pill/pill.tsx","./src/shared/ui/pill/index.ts","./src/shared/ui/primarybutton/primarybutton.tsx","./src/shared/ui/primarybutton/index.ts","./src/shared/ui/title/title.tsx","./src/shared/ui/tokenicon/tokenicon.tsx","./src/shared/ui/tokenicon/index.ts","./src/widgets/about/index.ts","./src/widgets/about/ui/about.tsx","./src/widgets/add-legal-entity-modal/index.ts","./src/widgets/add-legal-entity-modal/model/useaddlegalentityform.ts","./src/widgets/add-legal-entity-modal/ui/addlegalentitymodal.tsx","./src/widgets/admin-login-form/index.ts","./src/widgets/admin-login-form/model/useadminloginform.ts","./src/widgets/admin-login-form/ui/adminloginform.tsx","./src/widgets/balance-card/index.ts","./src/widgets/balance-card/ui/balancecard.tsx","./src/widgets/bridge-form/index.ts","./src/widgets/bridge-form/ui/bridgeconfirmmodal.tsx","./src/widgets/bridge-form/ui/bridgeform.tsx","./src/widgets/bridge-form/ui/networkselect.tsx","./src/widgets/converter-page/index.ts","./src/widgets/converter-page/model/useconvertersection.ts","./src/widgets/converter-page/ui/agreementcheck.tsx","./src/widgets/converter-page/ui/convertersection.tsx","./src/widgets/currency-converter/index.ts","./src/widgets/currency-converter/ui/agreementcheckbox.tsx","./src/widgets/currency-converter/ui/converter.tsx","./src/widgets/footer/index.ts","./src/widgets/footer/ui/footer.tsx","./src/widgets/header/index.ts","./src/widgets/header/ui/header.tsx","./src/widgets/hero/index.ts","./src/widgets/hero/lib/usecountdown.ts","./src/widgets/hero/ui/conversionflow.tsx","./src/widgets/hero/ui/countdown.tsx","./src/widgets/hero/ui/exchangecard.tsx","./src/widgets/hero/ui/hero.tsx","./src/widgets/kyc-verification/index.ts","./src/widgets/kyc-verification/model/usekyc.ts","./src/widgets/kyc-verification/ui/kycmodal.tsx","./src/widgets/kyc-verification/ui/kycwidget.tsx","./src/widgets/legal-entities-table/index.ts","./src/widgets/legal-entities-table/ui/legalentitiestable.tsx","./src/widgets/login-form/index.ts","./src/widgets/login-form/model/useloginform.ts","./src/widgets/login-form/ui/loginform.tsx","./src/widgets/networks-table/index.ts","./src/widgets/networks-table/model/networks.ts","./src/widgets/networks-table/ui/networkstable.tsx","./src/widgets/organization-documents/index.ts","./src/widgets/organization-documents/ui/organizationdocuments.tsx","./src/widgets/organization-purchase-requests/index.ts","./src/widgets/organization-purchase-requests/ui/organizationpurchaserequests.tsx","./src/widgets/profile/index.ts","./src/widgets/profile/ui/avatarcropmodal.tsx","./src/widgets/profile/ui/profileavatar.tsx","./src/widgets/profile/ui/profilesection.tsx","./src/widgets/profile/ui/getcroppedimg.ts","./src/widgets/receive-modal/index.ts","./src/widgets/receive-modal/ui/receivemodal.tsx","./src/widgets/register-form/index.ts","./src/widgets/register-form/model/useregisterform.ts","./src/widgets/register-form/ui/individualform.tsx","./src/widgets/register-form/ui/legalregisterinfo.tsx","./src/widgets/register-form/ui/registerform.tsx","./src/widgets/restore-password-form/index.ts","./src/widgets/restore-password-form/ui/restorepasswordform.tsx","./src/widgets/seed-phrase/index.ts","./src/widgets/seed-phrase/model/useseedphrase.ts","./src/widgets/seed-phrase/ui/seedphrasewidget.tsx","./src/widgets/send-modal/index.ts","./src/widgets/send-modal/model/sendtypes.ts","./src/widgets/send-modal/ui/sendmodal.tsx","./src/widgets/swap-bridge-tabs/index.ts","./src/widgets/swap-bridge-tabs/ui/swapbridgetabs.tsx","./src/widgets/swap-form/index.ts","./src/widgets/swap-form/model/useswapform.ts","./src/widgets/swap-form/ui/raterow.tsx","./src/widgets/swap-form/ui/swapcard.tsx","./src/widgets/swap-form/ui/swapconfirmmodal.tsx","./src/widgets/swap-form/ui/swapdirectionbutton.tsx","./src/widgets/swap-form/ui/swapform.tsx","./src/widgets/swap-form/ui/swapinfopanel.tsx","./src/widgets/swap-form/ui/tokenselect.tsx","./src/widgets/swap-form/ui/trxconfirmmodal.tsx","./src/widgets/token-table/index.ts","./src/widgets/token-table/model/tokens.ts","./src/widgets/token-table/model/usechaintokenrows.ts","./src/widgets/token-table/ui/tokentable.tsx","./src/widgets/transactions-list/index.ts","./src/widgets/transactions-list/model/format.ts","./src/widgets/transactions-list/model/paymentstatuslabels.ts","./src/widgets/transactions-list/ui/copybutton.tsx","./src/widgets/transactions-list/ui/orderaccordion.tsx","./src/widgets/transactions-list/ui/statusbadge.tsx","./src/widgets/transactions-list/ui/transactionslist.tsx","./src/widgets/wallet-chain-tabs/index.ts","./src/widgets/wallet-chain-tabs/ui/walletchaintabs.tsx","./src/widgets/wallet-header/index.ts","./src/widgets/wallet-header/ui/walletheader.tsx","./src/widgets/wallet-layout/index.ts","./src/widgets/wallet-layout/ui/walletlayout.tsx"],"version":"5.6.3"} \ No newline at end of file