From 85406b0bb2208fd0f4e10f8a4daa88edca608d61 Mon Sep 17 00:00:00 2001 From: Wira Irawan Date: Fri, 8 May 2026 10:26:43 +0700 Subject: [PATCH] Adjust product state transitions --- .../products/[productId]/edit/page.tsx | 16 +++------------- src/app/(dashboard)/products/new/review/page.tsx | 2 +- src/app/api/admin/review/[productId]/route.ts | 3 ++- src/lib/use-product-submit.ts | 4 ++-- 4 files changed, 8 insertions(+), 17 deletions(-) diff --git a/src/app/(dashboard)/products/[productId]/edit/page.tsx b/src/app/(dashboard)/products/[productId]/edit/page.tsx index 4d030e6..4d0dbf6 100644 --- a/src/app/(dashboard)/products/[productId]/edit/page.tsx +++ b/src/app/(dashboard)/products/[productId]/edit/page.tsx @@ -1197,7 +1197,7 @@ function EditProductPageInner() { } } - function buildPayload(state?: "DRAFT" | "PUBLISHED") { + function buildPayload(state?: "DRAFT" | "REVIEW") { if (!form) return null; const resolvedState = state ?? "DRAFT"; const base = { @@ -1312,7 +1312,7 @@ function EditProductPageInner() { setErrorLogCopied(false); try { - const payload = buildPayload("PUBLISHED"); + const payload = buildPayload("REVIEW"); const res = await fetch("/api/products/create", { method: "POST", @@ -1343,7 +1343,7 @@ function EditProductPageInner() { setErrorLogCopied(false); try { - const payload = buildPayload(); + const payload = buildPayload("REVIEW"); const res = await fetch(`/api/products/${params.productId}`, { method: "PUT", @@ -1356,16 +1356,6 @@ function EditProductPageInner() { throw new Error(result?.responseDesc || "Gagal menyimpan produk"); } - const reviewRes = await fetch(`/api/products/submit-review/${params.productId}`, { - method: "POST", - headers: { "x-auth-token": getToken() }, - }); - const reviewResult = await reviewRes.json(); - if (!reviewRes.ok) { - setErrorLog({ request: { submitReview: params.productId }, response: reviewResult }); - throw new Error(reviewResult?.responseDesc || "Gagal mengirim produk ke review"); - } - setSaveSuccess(true); setTimeout(() => router.back(), 1500); } catch (err) { diff --git a/src/app/(dashboard)/products/new/review/page.tsx b/src/app/(dashboard)/products/new/review/page.tsx index 1ef1c9d..32137b2 100644 --- a/src/app/(dashboard)/products/new/review/page.tsx +++ b/src/app/(dashboard)/products/new/review/page.tsx @@ -97,7 +97,7 @@ export default function ProductReviewPage() { async function handleSubmitForReview() { setErrorLogCopied(false); try { - await submit("PUBLISHED"); + await submit("REVIEW"); router.push("/products/new/submitted"); } catch { // error is set by the hook diff --git a/src/app/api/admin/review/[productId]/route.ts b/src/app/api/admin/review/[productId]/route.ts index 3e1f6da..1bd0306 100644 --- a/src/app/api/admin/review/[productId]/route.ts +++ b/src/app/api/admin/review/[productId]/route.ts @@ -36,12 +36,13 @@ export async function POST( // isNew=false: PUT /product/accept/{id} url = `${API_URL}/api/v1.0/product/accept/${productId}`; method = isNew ? "POST" : "PUT"; + body = { state: "PUBLISHED" }; } else { // isNew=true: POST /product/reject/{id} // isNew=false: PUT /product/reject/{id} url = `${API_URL}/api/v1.0/product/reject/${productId}`; method = isNew ? "POST" : "PUT"; - if (reason) body = { reason }; + body = reason ? { reason, state: "REJECTED" } : { state: "REJECTED" }; } const res = await fetch(url, { diff --git a/src/lib/use-product-submit.ts b/src/lib/use-product-submit.ts index c210542..50fd27b 100644 --- a/src/lib/use-product-submit.ts +++ b/src/lib/use-product-submit.ts @@ -14,7 +14,7 @@ function toNumber(value: string) { return Number.isFinite(parsed) ? parsed : 0; } -export function buildProductPayload(draft: ProductDraftState, state: "DRAFT" | "PUBLISHED") { +export function buildProductPayload(draft: ProductDraftState, state: "DRAFT" | "REVIEW") { return { subCategory: draft.subCategoryId ? { id: draft.subCategoryId } : undefined, name: draft.name, @@ -105,7 +105,7 @@ export function useProductSubmit() { const [error, setError] = useState(""); const [errorLog, setErrorLog] = useState<{ request: unknown; response: unknown } | null>(null); - async function submit(state: "DRAFT" | "PUBLISHED"): Promise { + async function submit(state: "DRAFT" | "REVIEW"): Promise { setSubmitting(true); setError(""); setErrorLog(null);