feat: style resource printable columns

This commit is contained in:
Ahmed Bouhuolia
2024-05-31 18:12:09 +02:00
parent 08ad117331
commit 79be4266bb
13 changed files with 157 additions and 16 deletions

View File

@@ -40,20 +40,22 @@ export class ExportResourceService {
const data = await this.getExportableData(tenantId, resource);
const transformed = this.transformExportedData(tenantId, resource, data);
const exportableColumns = this.getExportableColumns(resourceMeta);
// Returns the csv, xlsx format.
if (format === ExportFormat.Csv || format === ExportFormat.Xlsx) {
const exportableColumns = this.getExportableColumns(resourceMeta);
const workbook = this.createWorkbook(transformed, exportableColumns);
return this.exportWorkbook(workbook, format);
// Returns the pdf format.
} else if (format === ExportFormat.Pdf) {
const printableColumns = this.getPrintableColumns(resourceMeta);
return this.exportPdf.pdf(
tenantId,
exportableColumns,
printableColumns,
transformed,
'Accounts'
resourceMeta?.print?.pageTitle
);
}
}
@@ -146,6 +148,32 @@ export class ExportResourceService {
return processColumns(resourceMeta.columns);
}
private getPrintableColumns(resourceMeta: IModelMeta) {
const processColumns = (
columns: { [key: string]: IModelMetaColumn },
parent = ''
) => {
return Object.entries(columns)
.filter(([_, value]) => value.printable !== false)
.flatMap(([key, value]) => {
if (value.type === 'collection' && value.collectionOf === 'object') {
return processColumns(value.columns, key);
} else {
const group = parent;
return [
{
name: value.name,
type: value.type || 'text',
accessor: value.accessor || key,
group,
},
];
}
});
};
return processColumns(resourceMeta.columns);
}
/**
* Creates a workbook from the provided data and columns.
* @param {any[]} data - The data to be included in the workbook.
@@ -157,7 +185,6 @@ export class ExportResourceService {
const worksheetData = data.map((item) =>
exportableColumns.map((col) => get(item, getDataAccessor(col)))
);
worksheetData.unshift(exportableColumns.map((col) => col.name));
const worksheet = xlsx.utils.aoa_to_sheet(worksheetData);

View File

@@ -35,7 +35,10 @@ export const getDataAccessor = (col: any) => {
export const mapPdfRows = (columns: any, data: Record<string, any>) => {
return data.map((item) => {
const cells = columns.map((column) => {
return { key: column.accessor, value: get(item, column.accessor) };
return {
key: column.accessor,
value: get(item, getDataAccessor(column)),
};
});
return { cells, classNames: '' };
});