fix: show error message for update reward program

This commit is contained in:
John Yeo
2025-09-22 13:12:39 +01:00
parent 1f609eb592
commit 7b1b2cd278
5 changed files with 26 additions and 33 deletions

View File

@@ -136,7 +136,7 @@ rewardProgramRouter.put("/:id", (req, res) =>
env,
});
console.log("Existing program:", existingProgram);
// console.log("Existing program:", existingProgram);
if (!existingProgram) {
throw new RecaseError({
@@ -155,7 +155,7 @@ rewardProgramRouter.put("/:id", (req, res) =>
env,
});
console.log("Updating program to:", rewardProgram);
// console.log("Updating program to:", rewardProgram);
if (
rewardProgram.when == RewardTriggerEvent.Checkout &&
@@ -163,7 +163,8 @@ rewardProgramRouter.put("/:id", (req, res) =>
rewardProgram.product_ids!.length == 0)
) {
throw new RecaseError({
message: "If redeem on checkout, must specify at least one product",
message:
"When `Redeem On` is set to `Checkout`, must specify at least one product",
code: ErrCode.InvalidRequest,
statusCode: 400,
});

View File

@@ -32,17 +32,6 @@ export class RewardProgramService {
internalId: string;
data: RewardProgram;
}) {
try {
const res = await axiosInstance.put(
`/v1/reward_programs/${internalId}`,
data
);
return res.data;
} catch (err: any) {
// maybe rethrow as your RecaseError or wrap
throw new Error(
err.response?.data?.message || "Failed to update reward program"
);
}
await axiosInstance.put(`/v1/reward_programs/${internalId}`, data);
}
}

View File

@@ -38,9 +38,11 @@ import { useProductsQuery } from "@/hooks/queries/useProductsQuery";
export const RewardProgramConfig = ({
rewardProgram,
setRewardProgram,
isUpdate,
}: {
rewardProgram: RewardProgram;
setRewardProgram: (rewardProgram: RewardProgram) => void;
isUpdate?: boolean;
}) => {
const { rewards } = useRewardsQuery();
@@ -63,6 +65,7 @@ export const RewardProgramConfig = ({
onValueChange={(value) =>
setRewardProgram({ ...rewardProgram, internal_reward_id: value })
}
// disabled={isUpdate}
>
<SelectTrigger>
<SelectValue placeholder="Select a reward" />

View File

@@ -21,8 +21,8 @@ export const RewardProgramsTable = () => {
<UpdateRewardProgram
open={open}
setOpen={setOpen}
selectedReward={selectedRewardProgram}
setSelectedReward={setSelectedRewardProgram}
selectedRewardProgram={selectedRewardProgram}
setSelectedRewardProgram={setSelectedRewardProgram}
/>
{/* <UpdateRewardProgram component here /> */}

View File

@@ -8,9 +8,8 @@ import {
import { Button } from "@/components/ui/button";
import { useAxiosInstance } from "@/services/useAxiosInstance";
import { toast } from "sonner";
import { Reward } from "@autumn/shared";
import { RewardProgram } from "@autumn/shared";
import { useEnv } from "@/utils/envUtils";
import { RewardService } from "@/services/products/RewardService";
import { getBackendErr } from "@/utils/genUtils";
import { WarningBox } from "@/components/general/modal-components/WarningBox";
import { useRewardsQuery } from "@/hooks/queries/useRewardsQuery";
@@ -20,13 +19,13 @@ import { RewardProgramService } from "@/services/products/RewardProgramService";
function UpdateRewardProgram({
open,
setOpen,
selectedReward,
setSelectedReward,
selectedRewardProgram,
setSelectedRewardProgram,
}: {
open: boolean;
setOpen: (open: boolean) => void;
selectedReward: Reward | null;
setSelectedReward: (reward: Reward) => void;
selectedRewardProgram: RewardProgram | null;
setSelectedRewardProgram: (reward: RewardProgram) => void;
}) {
const [updateLoading, setUpdateLoading] = useState(false);
const { refetch } = useRewardsQuery();
@@ -39,14 +38,14 @@ function UpdateRewardProgram({
try {
await RewardProgramService.updateReward({
axiosInstance,
internalId: selectedReward!.internal_id,
data: selectedReward!,
internalId: selectedRewardProgram!.internal_id,
data: selectedRewardProgram!,
});
toast.success("Reward updated successfully");
await refetch();
setOpen(false);
} catch (error) {
toast.error(getBackendErr(error, "Failed to update coupon"));
toast.error(getBackendErr(error, "Failed to update reward program"));
}
setUpdateLoading(false);
};
@@ -54,15 +53,16 @@ function UpdateRewardProgram({
return (
<Dialog open={open} onOpenChange={setOpen}>
<DialogContent className="w-[500px]">
<DialogTitle>Update Reward Programs</DialogTitle>
<WarningBox>
Existing customers with this coupon will not be affected
</WarningBox>
<DialogTitle>Update Reward Program</DialogTitle>
{/* <WarningBox>
Existing customers with this reward program will not be affected
</WarningBox> */}
{selectedReward && (
{selectedRewardProgram && (
<RewardProgramConfig
rewardProgram={selectedReward}
setRewardProgram={setSelectedReward}
rewardProgram={selectedRewardProgram}
setRewardProgram={setSelectedRewardProgram}
isUpdate={true}
/>
)}