✨ feat: Added reset and pause subscription functionality, and updated the status display.
This commit is contained in:
parent
b27b9287be
commit
bc451eea16
@ -71,6 +71,21 @@
|
|||||||
"remove": "Remove",
|
"remove": "Remove",
|
||||||
"resetLogs": "Reset Logs",
|
"resetLogs": "Reset Logs",
|
||||||
"resetTime": "Reset Time",
|
"resetTime": "Reset Time",
|
||||||
|
"resetToken": "Reset Subscription Address",
|
||||||
|
"resetTokenDescription": "This will reset the subscription address and regenerate a new token.",
|
||||||
|
"resetTokenSuccess": "Subscription address reset successfully",
|
||||||
|
"confirmResetToken": "Confirm Reset Subscription Address",
|
||||||
|
"stopSubscribe": "Stop Subscription",
|
||||||
|
"stopSubscribeDescription": "This will stop the subscription temporarily. User will not be able to use it.",
|
||||||
|
"stopSubscribeSuccess": "Subscription stopped successfully",
|
||||||
|
"confirmStopSubscribe": "Confirm Stop Subscription",
|
||||||
|
"status": "Status",
|
||||||
|
"statusPending": "Pending",
|
||||||
|
"statusActive": "Active",
|
||||||
|
"statusFinished": "Finished",
|
||||||
|
"statusExpired": "Expired",
|
||||||
|
"statusDeducted": "Deducted",
|
||||||
|
"statusStopped": "Stopped",
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"speedLimit": "Speed Limit",
|
"speedLimit": "Speed Limit",
|
||||||
"startTime": "startTime",
|
"startTime": "startTime",
|
||||||
|
|||||||
@ -71,6 +71,21 @@
|
|||||||
"remove": "移除",
|
"remove": "移除",
|
||||||
"resetLogs": "重置日志",
|
"resetLogs": "重置日志",
|
||||||
"resetTime": "重置时间",
|
"resetTime": "重置时间",
|
||||||
|
"resetToken": "重置订阅地址",
|
||||||
|
"resetTokenDescription": "这将重置订阅地址并重新生成新的令牌。",
|
||||||
|
"resetTokenSuccess": "订阅地址重置成功",
|
||||||
|
"confirmResetToken": "确认重置订阅地址",
|
||||||
|
"stopSubscribe": "暂停订阅",
|
||||||
|
"stopSubscribeDescription": "这将暂时停止订阅。用户将无法使用。",
|
||||||
|
"stopSubscribeSuccess": "订阅已暂停",
|
||||||
|
"confirmStopSubscribe": "确认暂停订阅",
|
||||||
|
"status": "状态",
|
||||||
|
"statusPending": "待处理",
|
||||||
|
"statusActive": "活跃",
|
||||||
|
"statusFinished": "已完成",
|
||||||
|
"statusExpired": "已过期",
|
||||||
|
"statusDeducted": "已扣除",
|
||||||
|
"statusStopped": "已停止",
|
||||||
"save": "保存",
|
"save": "保存",
|
||||||
"speedLimit": "速度限制",
|
"speedLimit": "速度限制",
|
||||||
"startTime": "开始时间",
|
"startTime": "开始时间",
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
import { Link } from "@tanstack/react-router";
|
import { Link } from "@tanstack/react-router";
|
||||||
|
import { Badge } from "@workspace/ui/components/badge";
|
||||||
import { Button } from "@workspace/ui/components/button";
|
import { Button } from "@workspace/ui/components/button";
|
||||||
import {
|
import {
|
||||||
DropdownMenu,
|
DropdownMenu,
|
||||||
@ -15,6 +16,8 @@ import {
|
|||||||
createUserSubscribe,
|
createUserSubscribe,
|
||||||
deleteUserSubscribe,
|
deleteUserSubscribe,
|
||||||
getUserSubscribe,
|
getUserSubscribe,
|
||||||
|
resetUserSubscribeToken,
|
||||||
|
stopUserSubscribe,
|
||||||
updateUserSubscribe,
|
updateUserSubscribe,
|
||||||
} from "@workspace/ui/services/admin/user";
|
} from "@workspace/ui/services/admin/user";
|
||||||
import { useRef, useState } from "react";
|
import { useRef, useState } from "react";
|
||||||
@ -68,6 +71,53 @@ export default function UserSubscription({ userId }: { userId: number }) {
|
|||||||
>
|
>
|
||||||
{t("copySubscription", "Copy Subscription")}
|
{t("copySubscription", "Copy Subscription")}
|
||||||
</Button>,
|
</Button>,
|
||||||
|
<ConfirmButton
|
||||||
|
cancelText={t("cancel", "Cancel")}
|
||||||
|
confirmText={t("confirm", "Confirm")}
|
||||||
|
description={t(
|
||||||
|
"resetTokenDescription",
|
||||||
|
"This will reset the subscription address and regenerate a new token."
|
||||||
|
)}
|
||||||
|
key="resetToken"
|
||||||
|
onConfirm={async () => {
|
||||||
|
await resetUserSubscribeToken({ user_subscribe_id: row.id });
|
||||||
|
toast.success(
|
||||||
|
t(
|
||||||
|
"resetTokenSuccess",
|
||||||
|
"Subscription address reset successfully"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
ref.current?.refresh();
|
||||||
|
}}
|
||||||
|
title={t("confirmResetToken", "Confirm Reset Subscription Address")}
|
||||||
|
trigger={
|
||||||
|
<Button variant="outline">
|
||||||
|
{t("resetToken", "Reset Subscription Address")}
|
||||||
|
</Button>
|
||||||
|
}
|
||||||
|
/>,
|
||||||
|
<ConfirmButton
|
||||||
|
cancelText={t("cancel", "Cancel")}
|
||||||
|
confirmText={t("confirm", "Confirm")}
|
||||||
|
description={t(
|
||||||
|
"stopSubscribeDescription",
|
||||||
|
"This will stop the subscription temporarily. User will not be able to use it."
|
||||||
|
)}
|
||||||
|
key="stop"
|
||||||
|
onConfirm={async () => {
|
||||||
|
await stopUserSubscribe({ user_subscribe_id: row.id });
|
||||||
|
toast.success(
|
||||||
|
t("stopSubscribeSuccess", "Subscription stopped successfully")
|
||||||
|
);
|
||||||
|
ref.current?.refresh();
|
||||||
|
}}
|
||||||
|
title={t("confirmStopSubscribe", "Confirm Stop Subscription")}
|
||||||
|
trigger={
|
||||||
|
<Button variant="secondary">
|
||||||
|
{t("stopSubscribe", "Stop Subscription")}
|
||||||
|
</Button>
|
||||||
|
}
|
||||||
|
/>,
|
||||||
<ConfirmButton
|
<ConfirmButton
|
||||||
cancelText={t("cancel", "Cancel")}
|
cancelText={t("cancel", "Cancel")}
|
||||||
confirmText={t("confirm", "Confirm")}
|
confirmText={t("confirm", "Confirm")}
|
||||||
@ -99,6 +149,46 @@ export default function UserSubscription({ userId }: { userId: number }) {
|
|||||||
header: t("subscriptionName", "Subscription Name"),
|
header: t("subscriptionName", "Subscription Name"),
|
||||||
cell: ({ row }) => row.original.subscribe.name,
|
cell: ({ row }) => row.original.subscribe.name,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
accessorKey: "status",
|
||||||
|
header: t("status", "Status"),
|
||||||
|
cell: ({ row }) => {
|
||||||
|
const status = row.getValue("status") as number;
|
||||||
|
const statusMap: Record<
|
||||||
|
number,
|
||||||
|
{
|
||||||
|
label: string;
|
||||||
|
variant: "default" | "secondary" | "destructive" | "outline";
|
||||||
|
}
|
||||||
|
> = {
|
||||||
|
0: { label: t("statusPending", "Pending"), variant: "outline" },
|
||||||
|
1: { label: t("statusActive", "Active"), variant: "default" },
|
||||||
|
2: {
|
||||||
|
label: t("statusFinished", "Finished"),
|
||||||
|
variant: "secondary",
|
||||||
|
},
|
||||||
|
3: {
|
||||||
|
label: t("statusExpired", "Expired"),
|
||||||
|
variant: "destructive",
|
||||||
|
},
|
||||||
|
4: {
|
||||||
|
label: t("statusDeducted", "Deducted"),
|
||||||
|
variant: "secondary",
|
||||||
|
},
|
||||||
|
5: {
|
||||||
|
label: t("statusStopped", "Stopped"),
|
||||||
|
variant: "destructive",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const statusInfo = statusMap[status] || {
|
||||||
|
label: "Unknown",
|
||||||
|
variant: "outline",
|
||||||
|
};
|
||||||
|
return (
|
||||||
|
<Badge variant={statusInfo.variant}>{statusInfo.label}</Badge>
|
||||||
|
);
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
accessorKey: "upload",
|
accessorKey: "upload",
|
||||||
header: t("upload", "Upload"),
|
header: t("upload", "Upload"),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user