From 0d225cb0ac86ed685d5fa21d7e2977205df40120 Mon Sep 17 00:00:00 2001 From: seaznCode Date: Tue, 4 Nov 2025 20:54:02 +0100 Subject: [PATCH 1/3] feat: Add contract preview functionality in UserDetailModal and PersonalSignContractPage --- src/app/components/UserDetailModal.tsx | 78 +++++++++++++++++++ .../register-sign-contract/personal/page.tsx | 66 ++++++++++++++-- src/app/utils/api.ts | 16 ++++ 3 files changed, 153 insertions(+), 7 deletions(-) diff --git a/src/app/components/UserDetailModal.tsx b/src/app/components/UserDetailModal.tsx index 246cf15..ddee6dd 100644 --- a/src/app/components/UserDetailModal.tsx +++ b/src/app/components/UserDetailModal.tsx @@ -46,6 +46,11 @@ export default function UserDetailModal({ isOpen, onClose, userId, onUserUpdated const [selectedStatus, setSelectedStatus] = useState('pending') const token = useAuthStore(state => state.accessToken) + // Contract preview state (lazy-loaded) + const [previewLoading, setPreviewLoading] = useState(false) + const [previewHtml, setPreviewHtml] = useState(null) + const [previewError, setPreviewError] = useState(null) + useEffect(() => { if (isOpen && userId && token) { fetchUserDetails() @@ -133,6 +138,22 @@ export default function UserDetailModal({ isOpen, onClose, userId, onUserUpdated } } + const loadContractPreview = async () => { + if (!userId || !token || !userDetails) return + setPreviewLoading(true) + setPreviewError(null) + try { + const html = await AdminAPI.getContractPreviewHtml(token, String(userId), userDetails.user.user_type) + setPreviewHtml(html) + } catch (e: any) { + console.error('UserDetailModal.loadContractPreview error:', e) + setPreviewError(e?.message || 'Failed to load contract preview') + setPreviewHtml(null) + } finally { + setPreviewLoading(false) + } + } + const formatDate = (dateString: string | undefined | null) => { if (!dateString) return 'N/A' return new Date(dateString).toLocaleDateString('en-US', { @@ -367,6 +388,63 @@ export default function UserDetailModal({ isOpen, onClose, userId, onUserUpdated + {/* Contract Preview (admin verify flow) */} +
+
+

+ + Contract Preview +

+
+ + +
+
+
+ {previewError && ( +
+ {previewError} +
+ )} + {previewLoading && ( +
+ Loading preview… +
+ )} + {!previewLoading && previewHtml && ( +
+