feat: add storage status checks and verification conditions in UserDetailModal
This commit is contained in:
parent
352aba4c88
commit
11d0b546be
@ -53,6 +53,21 @@ export default function UserDetailModal({ isOpen, onClose, userId, onUserUpdated
|
||||
gdpr: { loading: false, html: null as string | null, error: null as string | null, warning: null as string | null },
|
||||
})
|
||||
|
||||
const missingIdOrContract = !!userDetails?.userStatus && (
|
||||
userDetails.userStatus.documents_uploaded !== 1 ||
|
||||
userDetails.userStatus.contract_signed !== 1
|
||||
)
|
||||
const storageMissing = !!userDetails?.storageStatus && (
|
||||
userDetails.storageStatus.idDocumentsPresent === false ||
|
||||
userDetails.storageStatus.contractPresent === false
|
||||
)
|
||||
const canVerifyByStatus = !!(userDetails?.userStatus
|
||||
&& userDetails.userStatus.email_verified === 1
|
||||
&& userDetails.userStatus.profile_completed === 1
|
||||
&& userDetails.userStatus.documents_uploaded === 1
|
||||
&& userDetails.userStatus.contract_signed === 1)
|
||||
const canVerify = storageMissing ? (canVerifyByStatus && !storageMissing) : canVerifyByStatus
|
||||
|
||||
useEffect(() => {
|
||||
if (isOpen && userId && token) {
|
||||
fetchUserDetails()
|
||||
@ -319,6 +334,24 @@ export default function UserDetailModal({ isOpen, onClose, userId, onUserUpdated
|
||||
<ShieldCheckIcon className="h-5 w-5 text-indigo-600" />
|
||||
Admin Controls
|
||||
</h3>
|
||||
|
||||
{missingIdOrContract && (
|
||||
<div className="rounded-md border border-amber-200 bg-amber-50 px-4 py-3 text-sm text-amber-800 mb-4">
|
||||
ID documents or a signed contract are missing for this user. The user’s verification status should be checked.
|
||||
</div>
|
||||
)}
|
||||
|
||||
{storageMissing && (
|
||||
<div className="rounded-md border border-amber-200 bg-amber-50 px-4 py-3 text-sm text-amber-800 mb-4">
|
||||
ID documents or a signed contract are missing from object storage. The user’s verification status should be checked.
|
||||
</div>
|
||||
)}
|
||||
|
||||
{missingIdOrContract && (
|
||||
<div className="rounded-md border border-amber-200 bg-amber-50 px-4 py-3 text-sm text-amber-800 mb-4">
|
||||
ID documents or a signed contract are missing for this user. The user’s verification status should be checked.
|
||||
</div>
|
||||
)}
|
||||
|
||||
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
|
||||
{/* Status Dropdown */}
|
||||
@ -380,7 +413,7 @@ export default function UserDetailModal({ isOpen, onClose, userId, onUserUpdated
|
||||
</label>
|
||||
{userDetails?.userStatus && (
|
||||
<p className="text-xs text-gray-500 mb-2">
|
||||
{userDetails.userStatus.email_verified === 1 && userDetails.userStatus.profile_completed === 1 && userDetails.userStatus.documents_uploaded === 1 && userDetails.userStatus.contract_signed === 1
|
||||
{canVerify
|
||||
? 'All steps completed. You can verify this user.'
|
||||
: 'User has not yet completed all required steps.'}
|
||||
</p>
|
||||
@ -388,8 +421,8 @@ export default function UserDetailModal({ isOpen, onClose, userId, onUserUpdated
|
||||
<button
|
||||
type="button"
|
||||
onClick={handleToggleAdminVerification}
|
||||
disabled={saving || !(userDetails?.userStatus && userDetails.userStatus.email_verified === 1 && userDetails.userStatus.profile_completed === 1 && userDetails.userStatus.documents_uploaded === 1 && userDetails.userStatus.contract_signed === 1)}
|
||||
title={!(userDetails?.userStatus && userDetails.userStatus.email_verified === 1 && userDetails.userStatus.profile_completed === 1 && userDetails.userStatus.documents_uploaded === 1 && userDetails.userStatus.contract_signed === 1) ? 'Complete all steps before admin verification' : undefined}
|
||||
disabled={saving || !canVerify}
|
||||
title={!canVerify ? 'Complete all steps and ensure files are present in object storage before admin verification' : undefined}
|
||||
className={`w-full inline-flex items-center justify-center gap-2 rounded-lg px-4 py-2.5 text-sm font-semibold shadow-sm focus-visible:outline focus-visible:outline-offset-2 disabled:opacity-50 disabled:cursor-not-allowed ${
|
||||
userDetails.userStatus?.is_admin_verified === 1
|
||||
? 'bg-amber-600 hover:bg-amber-500 text-white focus-visible:outline-amber-600'
|
||||
|
||||
@ -571,6 +571,10 @@ export interface DetailedUserInfo {
|
||||
backUrl?: string
|
||||
uploaded_at: string
|
||||
}>
|
||||
storageStatus?: {
|
||||
idDocumentsPresent?: boolean
|
||||
contractPresent?: boolean
|
||||
}
|
||||
}
|
||||
|
||||
export interface ApiResponse<T = any> {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user