feat: update cancelTopup API call to use PATCH method and enhance success message with topup details

This commit is contained in:
2025-07-06 19:59:27 +05:00
parent d4993530f7
commit b9d8e56c3c
3 changed files with 20 additions and 24 deletions

View File

@ -164,24 +164,16 @@ export async function getTopup({ id }: { id: string }) {
export async function cancelTopup({ id }: { id: string }) { export async function cancelTopup({ id }: { id: string }) {
const session = await getServerSession(authOptions); const session = await getServerSession(authOptions);
const response = await fetch( const response = await fetch(
`${process.env.SARLINK_API_BASE_URL}/api/billing/topup/${id}/delete/`, `${process.env.SARLINK_API_BASE_URL}/api/billing/topup/${id}/cancel/`,
{ {
method: "DELETE", method: "PATCH",
headers: { headers: {
"Content-Type": "application/json", "Content-Type": "application/json",
Authorization: `Token ${session?.apiToken}`, Authorization: `Token ${session?.apiToken}`,
}, },
}, },
); );
if (!response.ok) { return handleApiResponse<Topup>(response, "cancelTopup");
const errorData = (await response.json()) as ApiError;
const errorMessage =
errorData.message || errorData.detail || "An error occurred.";
const error = new Error(errorMessage);
(error as ApiError & { details?: ApiError }).details = errorData; // Attach the errorData to the error object
throw error;
}
return { message: "Topup successfully canceled." };
} }
export async function cancelPayment({ id }: { id: string }) { export async function cancelPayment({ id }: { id: string }) {

View File

@ -17,13 +17,15 @@ export default function CancelTopupButton({
<Button <Button
onClick={async () => { onClick={async () => {
setLoading(true); setLoading(true);
const [error, x] = await tryCatch(cancelTopup({ id: topupId })); const [error, topup] = await tryCatch(cancelTopup({ id: topupId }));
console.log(x);
if (error) { if (error) {
toast.error(error.message); toast.error(error.message);
setLoading(false); setLoading(false);
} else { } else {
toast.success("Topup cancelled successfully!") toast.success("Topup cancelled successfully!", {
description: `Your topup of ${topup?.amount} MVR has been cancelled.`,
closeButton: true,
})
router.replace("/top-ups"); router.replace("/top-ups");
} }
}} }}

View File

@ -203,16 +203,18 @@ function MobileTopupDetails({ topup }: { topup: Topup }) {
View Details View Details
</Button> </Button>
</Link> </Link>
<Badge {topup.status !== "CANCELLED" && (
className={cn( <Badge
topup?.paid className={cn(
? "text-green-500 bg-green-500/20" topup?.paid
: "text-yellow-500 bg-yellow-500/20", ? "text-green-500 bg-green-500/20"
)} : "text-yellow-500 bg-yellow-500/20",
variant={topup.paid ? "outline" : "secondary"} )}
> variant={topup.paid ? "outline" : "secondary"}
{topup.paid ? "Paid" : "Unpaid"} >
</Badge> {topup.paid ? "Paid" : "Unpaid"}
</Badge>
)}
</div> </div>
<div className="bg-white dark:bg-black p-2 rounded mt-2 w-full border"> <div className="bg-white dark:bg-black p-2 rounded mt-2 w-full border">
<div className="block sm:hidden"> <div className="block sm:hidden">