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, env,
}); });
console.log("Existing program:", existingProgram); // console.log("Existing program:", existingProgram);
if (!existingProgram) { if (!existingProgram) {
throw new RecaseError({ throw new RecaseError({
@@ -155,7 +155,7 @@ rewardProgramRouter.put("/:id", (req, res) =>
env, env,
}); });
console.log("Updating program to:", rewardProgram); // console.log("Updating program to:", rewardProgram);
if ( if (
rewardProgram.when == RewardTriggerEvent.Checkout && rewardProgram.when == RewardTriggerEvent.Checkout &&
@@ -163,7 +163,8 @@ rewardProgramRouter.put("/:id", (req, res) =>
rewardProgram.product_ids!.length == 0) rewardProgram.product_ids!.length == 0)
) { ) {
throw new RecaseError({ 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, code: ErrCode.InvalidRequest,
statusCode: 400, statusCode: 400,
}); });

View File

@@ -32,17 +32,6 @@ export class RewardProgramService {
internalId: string; internalId: string;
data: RewardProgram; data: RewardProgram;
}) { }) {
try { await axiosInstance.put(`/v1/reward_programs/${internalId}`, data);
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"
);
}
} }
} }

View File

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

View File

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

View File

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