refactor: remove approval logic and update URL resolution to support preview endpoints
All checks were successful
Beta CI/CD Pipeline / build-and-test (push) Successful in 15s
Beta CI/CD Pipeline / deploy-beta (push) Successful in 6s

This commit is contained in:
vickytechkey 2026-08-16 16:12:47 +05:30
parent 880ed06fd5
commit 75244527ae

View file

@ -3,38 +3,23 @@ import StatusBadge from './StatusBadge';
import { API_BASE_URL } from '../config';
import { useAuth } from '../context/AuthContext';
const DocumentViewer = ({ documents, sellerId, refreshDocs }) => {
const DocumentViewer = ({ documents, sellerId }) => {
const { token } = useAuth();
const [previewDoc, setPreviewDoc] = useState(null);
const resolveUrl = (url) => {
if (!url) return '';
if (url.startsWith('/') || url.startsWith('//')) {
return `${API_BASE_URL}${url}`;
// Use window.location.origin to match the secure public domain (e.g. crm.tipro.in)
return `${window.location.origin}/crm/api/crm${url}`;
}
return url;
};
const handleApprove = async (docId) => {
try {
const res = await fetch(`${API_BASE_URL}/sellers/${sellerId}/documents/${docId}/approve/`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
}
});
if (!res.ok) throw new Error('Failed to approve document');
alert('Document approved successfully');
if (refreshDocs) refreshDocs();
} catch (err) {
alert(err.message);
}
};
const handleDownload = (doc) => {
// Downloads directly from S3 URL returned by backend in doc.url
const link = document.createElement('a');
link.href = resolveUrl(doc.url);
link.href = doc.url;
link.download = doc.filename;
document.body.appendChild(link);
link.click();
@ -76,7 +61,7 @@ const DocumentViewer = ({ documents, sellerId, refreshDocs }) => {
textAlign: 'center'
}}>
{doc.filename.match(/\.(jpg|jpeg|png)$/i) ? (
<img src={resolveUrl(doc.url)} alt={doc.type} style={{ maxWidth: '100%', maxHeight: '100%', borderRadius: '4px', objectFit: 'contain' }} />
<img src={resolveUrl(doc.preview_url || doc.url)} alt={doc.type} style={{ maxWidth: '100%', maxHeight: '100%', borderRadius: '4px', objectFit: 'contain' }} />
) : (
<span>[Document Preview: {doc.filename}]</span>
)}
@ -86,14 +71,6 @@ const DocumentViewer = ({ documents, sellerId, refreshDocs }) => {
<button
className="btn btn-primary"
style={{ flex: 1, fontSize: '11px', padding: '6px 10px' }}
onClick={() => handleApprove(doc.id)}
disabled={doc.status?.toLowerCase() === 'verified' || doc.status?.toLowerCase() === 'approved'}
>
{doc.status?.toLowerCase() === 'verified' || doc.status?.toLowerCase() === 'approved' ? 'Approved' : 'Approve'}
</button>
<button
className="btn btn-secondary"
style={{ flex: 1, fontSize: '11px', padding: '6px 10px', background: 'rgba(255,255,255,0.05)', color: '#fff', border: '1px solid var(--glass-border)' }}
onClick={() => setPreviewDoc(doc)}
>
Preview
@ -124,13 +101,13 @@ const DocumentViewer = ({ documents, sellerId, refreshDocs }) => {
<div className="modal-body" style={{ display: 'flex', justifyContent: 'center', background: '#000', borderRadius: '8px', padding: '16px', overflow: 'hidden' }}>
{previewDoc.filename.match(/\.(jpg|jpeg|png)$/i) ? (
<img
src={resolveUrl(previewDoc.url)}
src={resolveUrl(previewDoc.preview_url || previewDoc.url)}
alt={previewDoc.type}
style={{ maxWidth: '100%', maxHeight: '60vh', objectFit: 'contain' }}
/>
) : previewDoc.filename.match(/\.pdf$/i) ? (
<iframe
src={`https://docs.google.com/gview?url=${encodeURIComponent(resolveUrl(previewDoc.url))}&embedded=true`}
src={`https://docs.google.com/gview?url=${encodeURIComponent(resolveUrl(previewDoc.preview_url || previewDoc.url))}&embedded=true`}
title={previewDoc.type}
style={{ width: '100%', height: '60vh', border: 'none', background: '#fff' }}
/>