mirror of
https://github.com/chillpadclub/bedolaga-cabinet.git
synced 2026-07-30 02:23:47 +00:00
FIX PR Problems
This commit is contained in:
@@ -33,18 +33,6 @@ export const BackIcon = ({ className }: IconProps) => (
|
|||||||
</svg>
|
</svg>
|
||||||
);
|
);
|
||||||
|
|
||||||
export const ArrowLeftIcon = ({ className }: IconProps) => (
|
|
||||||
<svg
|
|
||||||
className={cn('h-5 w-5', className)}
|
|
||||||
fill="none"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
stroke="currentColor"
|
|
||||||
strokeWidth={2}
|
|
||||||
>
|
|
||||||
<path strokeLinecap="round" strokeLinejoin="round" d="M10.5 19.5L3 12m0 0l7.5-7.5M3 12h18" />
|
|
||||||
</svg>
|
|
||||||
);
|
|
||||||
|
|
||||||
export const ChevronRightIcon = ({ className }: IconProps) => (
|
export const ChevronRightIcon = ({ className }: IconProps) => (
|
||||||
<svg
|
<svg
|
||||||
className={cn('h-5 w-5', className)}
|
className={cn('h-5 w-5', className)}
|
||||||
|
|||||||
@@ -686,7 +686,8 @@
|
|||||||
"noCards": "Card will be saved automatically on next top-up",
|
"noCards": "Card will be saved automatically on next top-up",
|
||||||
"pageTitle": "Saved Cards",
|
"pageTitle": "Saved Cards",
|
||||||
"backToBalance": "Back",
|
"backToBalance": "Back",
|
||||||
"empty": "No saved cards. A card will be saved automatically on your next top-up."
|
"empty": "No saved cards. A card will be saved automatically on your next top-up.",
|
||||||
|
"loadError": "Failed to load saved cards. Please try again later."
|
||||||
},
|
},
|
||||||
"paymentReady": "Payment link is ready",
|
"paymentReady": "Payment link is ready",
|
||||||
"clickToOpenPayment": "Click the button below to open the payment page in a new tab",
|
"clickToOpenPayment": "Click the button below to open the payment page in a new tab",
|
||||||
@@ -2759,7 +2760,8 @@
|
|||||||
"trafficAdded": "Traffic package added",
|
"trafficAdded": "Traffic package added",
|
||||||
"expired": "expired",
|
"expired": "expired",
|
||||||
"daysLeft": "d left",
|
"daysLeft": "d left",
|
||||||
"deviceLimitUpdated": "Device limit updated"
|
"deviceLimitUpdated": "Device limit updated",
|
||||||
|
"invalidDays": "Please enter a valid number of days (greater than 0)"
|
||||||
},
|
},
|
||||||
"balance": {
|
"balance": {
|
||||||
"current": "Current balance",
|
"current": "Current balance",
|
||||||
|
|||||||
@@ -550,7 +550,8 @@
|
|||||||
"noCards": "کارت به طور خودکار در شارژ بعدی ذخیره میشود",
|
"noCards": "کارت به طور خودکار در شارژ بعدی ذخیره میشود",
|
||||||
"pageTitle": "کارتهای ذخیره شده",
|
"pageTitle": "کارتهای ذخیره شده",
|
||||||
"backToBalance": "بازگشت",
|
"backToBalance": "بازگشت",
|
||||||
"empty": "کارتی ذخیره نشده است. کارت به طور خودکار در شارژ بعدی ذخیره میشود."
|
"empty": "کارتی ذخیره نشده است. کارت به طور خودکار در شارژ بعدی ذخیره میشود.",
|
||||||
|
"loadError": "خطا در بارگذاری کارتها. لطفاً بعداً دوباره امتحان کنید."
|
||||||
},
|
},
|
||||||
"paymentSuccess": {
|
"paymentSuccess": {
|
||||||
"title": "پرداخت موفق",
|
"title": "پرداخت موفق",
|
||||||
@@ -2393,7 +2394,8 @@
|
|||||||
"trafficAdded": "بسته ترافیک اضافه شد",
|
"trafficAdded": "بسته ترافیک اضافه شد",
|
||||||
"expired": "منقضی شده",
|
"expired": "منقضی شده",
|
||||||
"daysLeft": "روز باقیمانده",
|
"daysLeft": "روز باقیمانده",
|
||||||
"deviceLimitUpdated": "محدودیت دستگاه بهروز شد"
|
"deviceLimitUpdated": "محدودیت دستگاه بهروز شد",
|
||||||
|
"invalidDays": "لطفاً تعداد روز معتبر وارد کنید (بیشتر از ۰)"
|
||||||
},
|
},
|
||||||
"balance": {
|
"balance": {
|
||||||
"current": "موجودی فعلی",
|
"current": "موجودی فعلی",
|
||||||
|
|||||||
@@ -714,7 +714,8 @@
|
|||||||
"noCards": "Карта будет сохранена автоматически при следующем пополнении",
|
"noCards": "Карта будет сохранена автоматически при следующем пополнении",
|
||||||
"pageTitle": "Сохранённые карты",
|
"pageTitle": "Сохранённые карты",
|
||||||
"backToBalance": "Назад",
|
"backToBalance": "Назад",
|
||||||
"empty": "Нет привязанных карт. Карта будет сохранена автоматически при следующем пополнении."
|
"empty": "Нет привязанных карт. Карта будет сохранена автоматически при следующем пополнении.",
|
||||||
|
"loadError": "Не удалось загрузить сохранённые карты. Попробуйте позже."
|
||||||
},
|
},
|
||||||
"paymentReady": "Ссылка на оплату готова",
|
"paymentReady": "Ссылка на оплату готова",
|
||||||
"clickToOpenPayment": "Нажмите кнопку ниже, чтобы открыть страницу оплаты в новой вкладке",
|
"clickToOpenPayment": "Нажмите кнопку ниже, чтобы открыть страницу оплаты в новой вкладке",
|
||||||
@@ -3280,7 +3281,8 @@
|
|||||||
"trafficAdded": "Пакет трафика добавлен",
|
"trafficAdded": "Пакет трафика добавлен",
|
||||||
"expired": "истёк",
|
"expired": "истёк",
|
||||||
"daysLeft": "дн. осталось",
|
"daysLeft": "дн. осталось",
|
||||||
"deviceLimitUpdated": "Лимит устройств обновлён"
|
"deviceLimitUpdated": "Лимит устройств обновлён",
|
||||||
|
"invalidDays": "Введите корректное количество дней (больше 0)"
|
||||||
},
|
},
|
||||||
"balance": {
|
"balance": {
|
||||||
"current": "Текущий баланс",
|
"current": "Текущий баланс",
|
||||||
|
|||||||
@@ -550,7 +550,8 @@
|
|||||||
"noCards": "银行卡将在下次充值时自动保存",
|
"noCards": "银行卡将在下次充值时自动保存",
|
||||||
"pageTitle": "已保存的银行卡",
|
"pageTitle": "已保存的银行卡",
|
||||||
"backToBalance": "返回",
|
"backToBalance": "返回",
|
||||||
"empty": "暂无已保存的银行卡。银行卡将在下次充值时自动保存。"
|
"empty": "暂无已保存的银行卡。银行卡将在下次充值时自动保存。",
|
||||||
|
"loadError": "加载银行卡失败,请稍后重试。"
|
||||||
},
|
},
|
||||||
"paymentSuccess": {
|
"paymentSuccess": {
|
||||||
"title": "支付成功",
|
"title": "支付成功",
|
||||||
@@ -2392,7 +2393,8 @@
|
|||||||
"trafficAdded": "流量包已添加",
|
"trafficAdded": "流量包已添加",
|
||||||
"expired": "已过期",
|
"expired": "已过期",
|
||||||
"daysLeft": "天剩余",
|
"daysLeft": "天剩余",
|
||||||
"deviceLimitUpdated": "设备限制已更新"
|
"deviceLimitUpdated": "设备限制已更新",
|
||||||
|
"invalidDays": "请输入有效天数(大于0)"
|
||||||
},
|
},
|
||||||
"balance": {
|
"balance": {
|
||||||
"current": "当前余额",
|
"current": "当前余额",
|
||||||
|
|||||||
@@ -431,7 +431,10 @@ export default function AdminUserDetail() {
|
|||||||
const handleUpdateSubscription = async (overrideAction?: string) => {
|
const handleUpdateSubscription = async (overrideAction?: string) => {
|
||||||
if (!userId) return;
|
if (!userId) return;
|
||||||
const action = overrideAction || subAction;
|
const action = overrideAction || subAction;
|
||||||
if ((action === 'extend' || action === 'shorten') && toNumber(subDays, 0) <= 0) return;
|
if ((action === 'extend' || action === 'shorten') && toNumber(subDays, 0) <= 0) {
|
||||||
|
notify.error(t('admin.users.detail.subscription.invalidDays'));
|
||||||
|
return;
|
||||||
|
}
|
||||||
setActionLoading(true);
|
setActionLoading(true);
|
||||||
try {
|
try {
|
||||||
const data: UpdateSubscriptionRequest = {
|
const data: UpdateSubscriptionRequest = {
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import { useDestructiveConfirm } from '../platform/hooks/useNativeDialog';
|
|||||||
|
|
||||||
import { Card } from '@/components/data-display/Card';
|
import { Card } from '@/components/data-display/Card';
|
||||||
import { Button } from '@/components/primitives/Button';
|
import { Button } from '@/components/primitives/Button';
|
||||||
import { ArrowLeftIcon } from '@/components/icons';
|
import { BackIcon } from '@/components/icons';
|
||||||
import { staggerContainer, staggerItem } from '@/components/motion/transitions';
|
import { staggerContainer, staggerItem } from '@/components/motion/transitions';
|
||||||
|
|
||||||
function formatCardDate(dateStr: string): string {
|
function formatCardDate(dateStr: string): string {
|
||||||
@@ -30,7 +30,11 @@ export default function SavedCards() {
|
|||||||
const { showToast } = useToast();
|
const { showToast } = useToast();
|
||||||
const confirmDelete = useDestructiveConfirm();
|
const confirmDelete = useDestructiveConfirm();
|
||||||
|
|
||||||
const { data: savedCardsData, isLoading } = useQuery({
|
const {
|
||||||
|
data: savedCardsData,
|
||||||
|
isLoading,
|
||||||
|
isError,
|
||||||
|
} = useQuery({
|
||||||
queryKey: ['saved-cards'],
|
queryKey: ['saved-cards'],
|
||||||
queryFn: balanceApi.getSavedCards,
|
queryFn: balanceApi.getSavedCards,
|
||||||
});
|
});
|
||||||
@@ -55,7 +59,8 @@ export default function SavedCards() {
|
|||||||
message: '',
|
message: '',
|
||||||
duration: 3000,
|
duration: 3000,
|
||||||
});
|
});
|
||||||
} catch {
|
} catch (error) {
|
||||||
|
console.error('Failed to unlink card:', error);
|
||||||
showToast({
|
showToast({
|
||||||
type: 'error',
|
type: 'error',
|
||||||
title: t('balance.savedCards.unlinkError'),
|
title: t('balance.savedCards.unlinkError'),
|
||||||
@@ -80,7 +85,7 @@ export default function SavedCards() {
|
|||||||
onClick={() => navigate('/balance')}
|
onClick={() => navigate('/balance')}
|
||||||
className="flex h-10 w-10 items-center justify-center rounded-linear border border-dark-700/30 bg-dark-800/50 text-dark-300 transition-colors hover:bg-dark-700/50 hover:text-dark-100"
|
className="flex h-10 w-10 items-center justify-center rounded-linear border border-dark-700/30 bg-dark-800/50 text-dark-300 transition-colors hover:bg-dark-700/50 hover:text-dark-100"
|
||||||
>
|
>
|
||||||
<ArrowLeftIcon className="h-5 w-5" />
|
<BackIcon className="h-5 w-5" />
|
||||||
</button>
|
</button>
|
||||||
<h1 className="text-2xl font-bold text-dark-50 sm:text-3xl">
|
<h1 className="text-2xl font-bold text-dark-50 sm:text-3xl">
|
||||||
{t('balance.savedCards.pageTitle')}
|
{t('balance.savedCards.pageTitle')}
|
||||||
@@ -112,8 +117,19 @@ export default function SavedCards() {
|
|||||||
</motion.div>
|
</motion.div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
{/* Error state */}
|
||||||
|
{isError && (
|
||||||
|
<motion.div variants={staggerItem}>
|
||||||
|
<Card>
|
||||||
|
<div className="py-12 text-center">
|
||||||
|
<div className="text-error-400">{t('balance.savedCards.loadError')}</div>
|
||||||
|
</div>
|
||||||
|
</Card>
|
||||||
|
</motion.div>
|
||||||
|
)}
|
||||||
|
|
||||||
{/* Cards List */}
|
{/* Cards List */}
|
||||||
{!isLoading && savedCards && savedCards.length > 0 ? (
|
{!isLoading && !isError && savedCards && savedCards.length > 0 ? (
|
||||||
<motion.div variants={staggerItem}>
|
<motion.div variants={staggerItem}>
|
||||||
<Card>
|
<Card>
|
||||||
<div className="space-y-3">
|
<div className="space-y-3">
|
||||||
@@ -150,7 +166,7 @@ export default function SavedCards() {
|
|||||||
</div>
|
</div>
|
||||||
</Card>
|
</Card>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
) : !isLoading && savedCards ? (
|
) : !isLoading && !isError && savedCards ? (
|
||||||
/* Empty state - only show when data loaded and empty */
|
/* Empty state - only show when data loaded and empty */
|
||||||
<motion.div variants={staggerItem}>
|
<motion.div variants={staggerItem}>
|
||||||
<Card>
|
<Card>
|
||||||
|
|||||||
Reference in New Issue
Block a user