refactor: remove approval logic and update URL resolution to support preview endpoints
This commit is contained in:
parent
880ed06fd5
commit
75244527ae
1 changed files with 8 additions and 31 deletions
|
|
@ -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' }}
|
||||
/>
|
||||
|
|
|
|||
Loading…
Reference in a new issue