diff --git a/src/app/(admin)/(others-pages)/(forms)/role-upgrade/page.tsx b/src/app/(admin)/(others-pages)/(forms)/role-upgrade/page.tsx index 2191b31..10f8b74 100644 --- a/src/app/(admin)/(others-pages)/(forms)/role-upgrade/page.tsx +++ b/src/app/(admin)/(others-pages)/(forms)/role-upgrade/page.tsx @@ -32,14 +32,23 @@ type PendingFile = { export default function RoleUpgrade() { const [content, setContent] = useState(""); const [isSubmitting, setIsSubmitting] = useState(false); - const [verifyType, setVerifyType] = useState("OTHER"); - const [pendingFiles, setPendingFiles] = useState([]); const [lightboxIndex, setLightboxIndex] = useState(-1); - const [isPreparingFiles, setIsPreparingFiles] = useState(false); - + const [showPreview, setShowPreview] = useState(false); + + const cleanHTMLContent = (rawHtml: string) => { + if (!rawHtml) return ""; + + const doc = new DOMParser().parseFromString(rawHtml, "text/html"); + let decoded = doc.documentElement.textContent || rawHtml; + + decoded = decoded.replace(/]*>/g, "").replace(/<\/pre>/g, ""); + + return decoded; + }; + const handleContentChange = (value: string) => { setContent(value); }; @@ -51,12 +60,10 @@ export default function RoleUpgrade() { if (!files || files.length === 0) return; setIsPreparingFiles(true); - try { const newFilesPromises = Array.from(files).map(async (file) => { const isImage = file.type.startsWith("image/"); const extension = file.name.split(".").pop()?.toLowerCase() || ""; - const presigned = await getPresignedUrl(file); return { @@ -74,8 +81,8 @@ export default function RoleUpgrade() { const newPendingFiles = await Promise.all(newFilesPromises); setPendingFiles((prev) => [...prev, ...newPendingFiles]); } catch (error) { - console.error("Lỗi khi chuẩn bị file đính kèm:", error); - alert("Lỗi khi chuẩn bị kết nối upload. Vui lòng thử lại!"); + console.error("Lỗi khi chuẩn bị file:", error); + toast.error("Lỗi khi chuẩn bị kết nối upload."); } finally { setIsPreparingFiles(false); if (event.target) event.target.value = ""; @@ -89,6 +96,11 @@ export default function RoleUpgrade() { const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); + if (!content.trim()) { + toast.warning("Vui lòng nhập nội dung hồ sơ!"); + return; + } + try { setIsSubmitting(true); @@ -99,29 +111,28 @@ export default function RoleUpgrade() { }); const uploadedMediaIds = await Promise.all(uploadPromises); + const cleanPayloadContent = cleanHTMLContent(content); + const payload = { - content: content, + content: cleanPayloadContent, media_ids: uploadedMediaIds, - verify_type: verifyType, + verify_type: verifyType, }; - console.log("Payload chuẩn bị gửi (JSON):", payload); - - const cvResponse = await createHistorianCV(payload); - console.log("Response từ API:", cvResponse); + await createHistorianCV(payload); Swal.fire({ title: "Gửi yêu cầu thành công!", - text: "Yêu cầu nâng cấp đã được gửi đi. Chúng tôi sẽ xem xét và phản hồi sớm nhất có thể. Vui lòng kiểm tra Email khi có thông báo mới.", + text: "Hồ sơ của bạn đã được ghi nhận và đang chờ duyệt.", icon: "success", - confirmButtonText: "OK", }); + setContent(""); setPendingFiles([]); - setVerifyType("ID_CARD"); + setVerifyType("OTHER"); } catch (error) { - console.error("Lỗi:", error); - toast.error("Có lỗi xảy ra khi gửi yêu cầu. Vui lòng kiểm tra lại!"); + console.error("Lỗi submit:", error); + toast.error("Có lỗi xảy ra khi gửi yêu cầu."); } finally { setIsSubmitting(false); } @@ -155,10 +166,53 @@ export default function RoleUpgrade() { }; return ( -
- +
+ + +
+
+ + +
+ + {showPreview ? "Preview Mode" : "Edit Mode"} + +
+
- +
+ {!showPreview ? ( + + ) : ( +
+ {content ? ( +
+
+
+ ) : ( +
+

Chưa có nội dung để xem trước

+
+ )} +
+ )} +
+ {/* Upload Files */}
-
-

- Tài liệu đính kèm -

-