✨ admin: subscription controls + show original price
This commit is contained in:
parent
0ec4f84fa9
commit
7223eb41c6
@ -77,6 +77,7 @@ const defaultValues = {
|
|||||||
purchase_with_discount: false,
|
purchase_with_discount: false,
|
||||||
reset_cycle: 0,
|
reset_cycle: 0,
|
||||||
renewal_reset: false,
|
renewal_reset: false,
|
||||||
|
show_original_price: false,
|
||||||
deduction_mode: "auto",
|
deduction_mode: "auto",
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -120,6 +121,7 @@ export default function SubscribeForm<T extends Record<string, any>>({
|
|||||||
allow_deduction: z.boolean().optional(),
|
allow_deduction: z.boolean().optional(),
|
||||||
reset_cycle: z.number().optional(),
|
reset_cycle: z.number().optional(),
|
||||||
renewal_reset: z.boolean().optional(),
|
renewal_reset: z.boolean().optional(),
|
||||||
|
show_original_price: z.boolean().optional(),
|
||||||
});
|
});
|
||||||
|
|
||||||
const form = useForm<z.infer<typeof formSchema>>({
|
const form = useForm<z.infer<typeof formSchema>>({
|
||||||
@ -837,6 +839,41 @@ export default function SubscribeForm<T extends Record<string, any>>({
|
|||||||
</FormItem>
|
</FormItem>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<FormField
|
||||||
|
control={form.control}
|
||||||
|
name="show_original_price"
|
||||||
|
render={({ field }) => (
|
||||||
|
<FormItem>
|
||||||
|
<div className="flex items-center justify-between">
|
||||||
|
<div className="space-y-0.5">
|
||||||
|
<FormLabel>
|
||||||
|
{t(
|
||||||
|
"form.showOriginalPrice",
|
||||||
|
"Show Original Price"
|
||||||
|
)}
|
||||||
|
</FormLabel>
|
||||||
|
<FormDescription>
|
||||||
|
{t(
|
||||||
|
"form.showOriginalPriceDescription",
|
||||||
|
"Display original price in the storefront"
|
||||||
|
)}
|
||||||
|
</FormDescription>
|
||||||
|
</div>
|
||||||
|
<FormControl>
|
||||||
|
<Switch
|
||||||
|
checked={!!field.value}
|
||||||
|
onCheckedChange={(value) =>
|
||||||
|
form.setValue(field.name, value)
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</FormControl>
|
||||||
|
</div>
|
||||||
|
<FormMessage />
|
||||||
|
</FormItem>
|
||||||
|
)}
|
||||||
|
/>
|
||||||
|
|
||||||
<FormField
|
<FormField
|
||||||
control={form.control}
|
control={form.control}
|
||||||
name="allow_deduction"
|
name="allow_deduction"
|
||||||
|
|||||||
@ -15,6 +15,9 @@ import {
|
|||||||
createUserSubscribe,
|
createUserSubscribe,
|
||||||
deleteUserSubscribe,
|
deleteUserSubscribe,
|
||||||
getUserSubscribe,
|
getUserSubscribe,
|
||||||
|
resetUserSubscribeToken,
|
||||||
|
resetUserSubscribeTraffic,
|
||||||
|
toggleUserSubscribeStatus,
|
||||||
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,69 @@ 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(
|
||||||
|
"resetSubscriptionTokenDescription",
|
||||||
|
"This will reset the subscription token. Old links will become invalid."
|
||||||
|
)}
|
||||||
|
key="reset-token"
|
||||||
|
onConfirm={async () => {
|
||||||
|
await resetUserSubscribeToken({ user_subscribe_id: row.id });
|
||||||
|
toast.success(t("resetSuccess", "Reset successfully"));
|
||||||
|
ref.current?.refresh();
|
||||||
|
}}
|
||||||
|
title={t("resetSubscriptionToken", "Reset Token")}
|
||||||
|
trigger={
|
||||||
|
<Button variant="outline">
|
||||||
|
{t("resetToken", "Reset Token")}
|
||||||
|
</Button>
|
||||||
|
}
|
||||||
|
/>,
|
||||||
|
|
||||||
|
<ConfirmButton
|
||||||
|
cancelText={t("cancel", "Cancel")}
|
||||||
|
confirmText={t("confirm", "Confirm")}
|
||||||
|
description={t(
|
||||||
|
"resetSubscriptionTrafficDescription",
|
||||||
|
"This will reset the subscription traffic counters."
|
||||||
|
)}
|
||||||
|
key="reset-traffic"
|
||||||
|
onConfirm={async () => {
|
||||||
|
await resetUserSubscribeTraffic({ user_subscribe_id: row.id });
|
||||||
|
toast.success(t("resetSuccess", "Reset successfully"));
|
||||||
|
ref.current?.refresh();
|
||||||
|
}}
|
||||||
|
title={t("resetSubscriptionTraffic", "Reset Traffic")}
|
||||||
|
trigger={
|
||||||
|
<Button variant="outline">
|
||||||
|
{t("resetTraffic", "Reset Traffic")}
|
||||||
|
</Button>
|
||||||
|
}
|
||||||
|
/>,
|
||||||
|
|
||||||
|
<ConfirmButton
|
||||||
|
cancelText={t("cancel", "Cancel")}
|
||||||
|
confirmText={t("confirm", "Confirm")}
|
||||||
|
description={t(
|
||||||
|
"toggleSubscriptionStatusDescription",
|
||||||
|
"This will toggle the subscription status."
|
||||||
|
)}
|
||||||
|
key="toggle-status"
|
||||||
|
onConfirm={async () => {
|
||||||
|
await toggleUserSubscribeStatus({ user_subscribe_id: row.id });
|
||||||
|
toast.success(t("updateSuccess", "Updated successfully"));
|
||||||
|
ref.current?.refresh();
|
||||||
|
}}
|
||||||
|
title={t("toggleSubscriptionStatus", "Toggle Status")}
|
||||||
|
trigger={
|
||||||
|
<Button variant="outline">
|
||||||
|
{t("toggleStatus", "Toggle Status")}
|
||||||
|
</Button>
|
||||||
|
}
|
||||||
|
/>,
|
||||||
<ConfirmButton
|
<ConfirmButton
|
||||||
cancelText={t("cancel", "Cancel")}
|
cancelText={t("cancel", "Cancel")}
|
||||||
confirmText={t("confirm", "Confirm")}
|
confirmText={t("confirm", "Confirm")}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user