From 3763c83471da5b16bd432ec3cf34d59556f32f10 Mon Sep 17 00:00:00 2001 From: hamed <15238-genius.ha@users.noreply.drupalcode.org> Date: Mon, 15 Jun 2026 12:56:43 +0330 Subject: [PATCH] feat(payment): refactor payment configuration retrieval into a custom hook --- assets/admin/hooks/usePaymentConfig.ts | 12 ++++++++++++ assets/admin/pages/SmsWalletPage.tsx | 8 ++------ assets/admin/pages/SubscriptionPage.tsx | 8 ++------ 3 files changed, 16 insertions(+), 12 deletions(-) create mode 100644 assets/admin/hooks/usePaymentConfig.ts diff --git a/assets/admin/hooks/usePaymentConfig.ts b/assets/admin/hooks/usePaymentConfig.ts new file mode 100644 index 00000000..86fb8ad1 --- /dev/null +++ b/assets/admin/hooks/usePaymentConfig.ts @@ -0,0 +1,12 @@ +import { useQuery } from '@tanstack/react-query'; +import { api } from '../lib/api'; +import type { ApiResponse } from '../lib/api'; + +export function usePaymentConfig() { + const { data } = useQuery>({ + queryKey: ['payment-config'], + queryFn: () => api.get('/api/v1/payment/config'), + staleTime: 5 * 60 * 1000, + }); + return { isTestMode: data?.data?.test_mode ?? false }; +} diff --git a/assets/admin/pages/SmsWalletPage.tsx b/assets/admin/pages/SmsWalletPage.tsx index c6ef071f..0996f6dd 100644 --- a/assets/admin/pages/SmsWalletPage.tsx +++ b/assets/admin/pages/SmsWalletPage.tsx @@ -10,6 +10,7 @@ import { import { api } from '../lib/api'; import type { ApiResponse, PaginatedResponse } from '../lib/api'; import type { SmsWalletBalance, SmsWalletLog, SmsSettings } from '../types'; +import { usePaymentConfig } from '../hooks/usePaymentConfig'; import { formatRial, formatNumber, formatDateTime } from '../lib/utils'; import Modal from '../components/ui/Modal'; import Pagination from '../components/ui/Pagination'; @@ -44,17 +45,12 @@ function SmsWalletPageInner() { queryFn: () => api.get('/api/v1/sms/settings'), }); - const { data: paymentConfigData } = useQuery>({ - queryKey: ['payment-config'], - queryFn: () => api.get('/api/v1/payment/config'), - staleTime: 5 * 60 * 1000, - }); + const { isTestMode } = usePaymentConfig(); const balance = balanceData?.data; const logs = logsData?.data ?? EMPTY_LOGS; const total = logsData?.meta?.totalRecords ?? 0; const settings = settingsData?.data; - const isTestMode = paymentConfigData?.data?.test_mode ?? false; const chargeForm = useForm({ resolver: zodResolver(chargeSchema) }); const watchAmount = chargeForm.watch('amount_rials'); diff --git a/assets/admin/pages/SubscriptionPage.tsx b/assets/admin/pages/SubscriptionPage.tsx index 608c5166..bc24007b 100644 --- a/assets/admin/pages/SubscriptionPage.tsx +++ b/assets/admin/pages/SubscriptionPage.tsx @@ -8,6 +8,7 @@ import { toast } from 'sonner'; import { api } from '../lib/api'; import type { ApiResponse } from '../lib/api'; import type { SubscriptionPlan, MySubscriptionData, SubscriptionPeriod } from '../types'; +import { usePaymentConfig } from '../hooks/usePaymentConfig'; import { formatDate, formatRial, formatNumber } from '../lib/utils'; import Modal from '../components/ui/Modal'; @@ -60,17 +61,12 @@ export default function SubscriptionPage() { queryFn: () => api.get('/api/v1/subscription/my'), }); - const { data: paymentConfigData } = useQuery>({ - queryKey: ['payment-config'], - queryFn: () => api.get('/api/v1/payment/config'), - staleTime: 5 * 60 * 1000, - }); + const { isTestMode } = usePaymentConfig(); const plans = plansData?.data ?? []; const myRaw = myData?.data; const my = myRaw?.subscription ?? null; const usedTrial = myRaw?.used_trial ?? false; - const isTestMode = paymentConfigData?.data?.test_mode ?? false; const trialMutation = useMutation({ mutationFn: () => api.post('/api/v1/subscription/trial', {}),