export csv included all columns
This commit is contained in:
parent
83361a76e0
commit
2ddb4619ad
@ -53,18 +53,29 @@ const getStatusBadge = (status) => {
|
|||||||
|
|
||||||
const downloadCsv = (data) => {
|
const downloadCsv = (data) => {
|
||||||
if (!data.length) return;
|
if (!data.length) return;
|
||||||
|
|
||||||
const headers = ['Survey Name', 'Year', 'Quarter', 'Status', 'Submission On', 'Products'];
|
const headers = ['Survey Name', 'Year', 'Quarter', 'Status', 'Submission On', 'Products'];
|
||||||
|
|
||||||
const csvRows = [headers.join(',')];
|
const csvRows = [headers.join(',')];
|
||||||
|
|
||||||
data.forEach((item) => {
|
data.forEach((item) => {
|
||||||
|
const statusText = (() => {
|
||||||
|
const normalized = String(item.status || '').toLowerCase();
|
||||||
|
if (normalized === 'approved') return 'Approved';
|
||||||
|
if (['pending', 'under review', 'in-progress'].includes(normalized)) return 'Under Review';
|
||||||
|
if (['rejected', 'returned'].includes(normalized)) return 'Returned';
|
||||||
|
return item.status || '—';
|
||||||
|
})();
|
||||||
|
|
||||||
const row = [
|
const row = [
|
||||||
item.survey_name || '—',
|
item.survey_name || '—',
|
||||||
item.year || '—',
|
item.year || '—',
|
||||||
item.quarter || '—',
|
item.quarter || '—',
|
||||||
item.status || '—',
|
statusText,
|
||||||
item.submission_on || '—',
|
item.submission_on || '—',
|
||||||
item.products || '—',
|
`${item.products || 0} ${item.products === 1 ? 'product' : 'products'}`,
|
||||||
];
|
];
|
||||||
|
|
||||||
csvRows.push(row.map((cell) => `"${String(cell).replace(/"/g, '""')}"`).join(','));
|
csvRows.push(row.map((cell) => `"${String(cell).replace(/"/g, '""')}"`).join(','));
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -79,6 +90,7 @@ const downloadCsv = (data) => {
|
|||||||
URL.revokeObjectURL(url);
|
URL.revokeObjectURL(url);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
export const SubmissionHistory = ({ history = [], loading = false, error = '' }) => {
|
export const SubmissionHistory = ({ history = [], loading = false, error = '' }) => {
|
||||||
const [searchTerm, setSearchTerm] = React.useState('');
|
const [searchTerm, setSearchTerm] = React.useState('');
|
||||||
const [selectedSubmission, setSelectedSubmission] = React.useState(null);
|
const [selectedSubmission, setSelectedSubmission] = React.useState(null);
|
||||||
|
|||||||
@ -239,38 +239,59 @@ const ManageSubmissions = () => {
|
|||||||
const downloadCsv = (data) => {
|
const downloadCsv = (data) => {
|
||||||
if (!data.length) return;
|
if (!data.length) return;
|
||||||
|
|
||||||
const headers = ['Establishment', 'Year', 'Quarter', 'Status', 'Submission On', 'Products'];
|
const headers = [
|
||||||
|
'Establishment',
|
||||||
|
'Emirates',
|
||||||
|
'Year',
|
||||||
|
'Quarter',
|
||||||
|
'Products',
|
||||||
|
'Submitted By',
|
||||||
|
'Submission Date & Time',
|
||||||
|
'Status',
|
||||||
|
'Reviewer',
|
||||||
|
'Reviewed On',
|
||||||
|
];
|
||||||
|
|
||||||
const csvRows = [headers.join(',')];
|
const csvRows = [headers.join(',')];
|
||||||
|
|
||||||
data.forEach((item) => {
|
data.forEach((item) => {
|
||||||
const establishment = item.establishment || '—';
|
|
||||||
const year = item.year || '—';
|
|
||||||
const quarter = item.quarter || '—';
|
|
||||||
|
|
||||||
const normalized = String(item.status || '').toLowerCase();
|
const normalized = String(item.status || '').toLowerCase();
|
||||||
let status = '—';
|
let status = '—';
|
||||||
if (normalized === 'pending') status = 'Under Review';
|
if (normalized === 'pending') status = 'Under Review';
|
||||||
else if (normalized === 'rejected') status = 'Returned';
|
else if (normalized === 'rejected') status = 'Returned';
|
||||||
else if (['submitted', 'approved'].includes(normalized)) status = 'Approved';
|
else if (['submitted', 'approved'].includes(normalized)) status = 'Approved';
|
||||||
|
else status = item.status || '—';
|
||||||
|
|
||||||
const submissionOn = item.submittedAt || '—';
|
|
||||||
const productCount = Number(item.products) || 0;
|
const productCount = Number(item.products) || 0;
|
||||||
const products = `${productCount} ${productCount === 1 ? 'product' : 'products'}`;
|
const products = `${productCount} ${productCount === 1 ? 'product' : 'products'}`;
|
||||||
|
|
||||||
const row = [establishment, year, quarter, status, submissionOn, products];
|
const row = [
|
||||||
|
item.establishment || '—',
|
||||||
|
item.emirate || '—',
|
||||||
|
item.year || '—',
|
||||||
|
item.quarter || '—',
|
||||||
|
products,
|
||||||
|
item.submittedBy || '—',
|
||||||
|
item.submittedAt || '—',
|
||||||
|
status,
|
||||||
|
item.reviewer || '—',
|
||||||
|
item.reviewerOn || '—',
|
||||||
|
];
|
||||||
|
|
||||||
csvRows.push(row.map((cell) => `"${String(cell).replace(/"/g, '""')}"`).join(','));
|
csvRows.push(row.map((cell) => `"${String(cell).replace(/"/g, '""')}"`).join(','));
|
||||||
});
|
});
|
||||||
|
|
||||||
const blob = new Blob([csvRows.join('\n')], { type: 'text/csv;charset=utf-8;' });
|
const blob = new Blob([csvRows.join('\n')], { type: 'text/csv;charset=utf-8;' });
|
||||||
const url = URL.createObjectURL(blob);
|
const url = URL.createObjectURL(blob);
|
||||||
const link = document.createElement('a');
|
const link = document.createElement('a');
|
||||||
|
const timestamp = new Date().toISOString().split('T')[0];
|
||||||
link.href = url;
|
link.href = url;
|
||||||
link.setAttribute('download', 'submissions.csv');
|
link.setAttribute('download', `manage-submissions-${timestamp}.csv`);
|
||||||
document.body.appendChild(link);
|
document.body.appendChild(link);
|
||||||
link.click();
|
link.click();
|
||||||
document.body.removeChild(link);
|
document.body.removeChild(link);
|
||||||
URL.revokeObjectURL(url);
|
URL.revokeObjectURL(url);
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user