@hv-kit/hexpress
Version:
facilitates typescript backend development with express
236 lines • 9.9 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ExportToJSON = exports.ExportToExcel_1 = exports.ExportToPDF_1 = exports.ExportToCSV = void 0;
const json2csv_1 = require("json2csv");
const exceljs_1 = __importDefault(require("exceljs"));
const hexpress_config_json_1 = __importDefault(require("../../../../hexpress.config.json"));
const hexpress_translations_json_1 = __importDefault(require("../../../../hexpress.translations.json"));
const config_1 = require("./config");
const date_1 = require("./date");
const string_1 = require("./string");
const PDFDocument = require('pdfkit-table');
function createFilenameExport(filename, typeType) {
let typeTypeFinal = 'csv';
if (typeType === 'csv') {
typeTypeFinal = 'csv';
}
else if (typeType === 'excel') {
typeTypeFinal = 'xlsx';
}
else if (typeType === 'pdf') {
typeTypeFinal = 'pdf';
}
else if (typeType === 'json') {
typeTypeFinal = 'json';
}
const filename_final = (0, string_1.getAlphanumString)(filename, '_');
if (hexpress_config_json_1.default.debug) {
console.log('----> export_functs - createFilenameExport > filename_final:: ', filename_final);
}
return (0, string_1.RandomF)(10, 'alphanumeric_s', true, (data) => `${(0, string_1.getAlphanumString)(filename_final, '')}-${(0, string_1.getAlphanumString)(String((0, date_1.GetCurrentDate)(true, config_1.dateFormat1)), '')}-${data}.${typeTypeFinal}`);
}
function ExportToCSV(res, datas, lang) {
return __awaiter(this, void 0, void 0, function* () {
const finalColumns = datas.columns.map((column) => ({
label: column.label,
value: column.target
}));
const json2csv = new json2csv_1.Parser({
fields: finalColumns
});
const csv = json2csv.parse(datas.rows);
const finalFilename = createFilenameExport(datas.filename, 'csv');
res.header('Content-type', 'text/csv');
res.attachment(finalFilename);
res.send(csv);
});
}
exports.ExportToCSV = ExportToCSV;
function ExportToPDF_1(res, datas, lang) {
return __awaiter(this, void 0, void 0, function* () {
const finalFilename = createFilenameExport(datas.filename, 'pdf');
const ese = datas.ese;
datas.rows = datas.rows.map((value, index) => {
value.index = index + 1;
return value;
});
const finalColumns = datas.columns.map((column) => ({
label: column.label,
property: column.target,
width: 450 / datas.columns.length,
valign: 'center',
headerColor: '#222222',
headerOpacity: 1
// , renderer: (value: any, indexColumn: any, indexRow: any, row: any) => value
}));
const doc = new PDFDocument({ bufferPages: true, size: 'A4', layout: 'portrait' });
const table = {
// title: UcFirst(datas.titlename),
// subtitle: "Subtitle",
headers: finalColumns,
datas: datas.rows,
rows: datas.rows.map((row) => Object.values(row)),
};
if (hexpress_config_json_1.default.debug) {
console.log('----> ExportToPDF_1 > table:: ', table);
}
doc.pipe(res);
doc.fillColor('#222222');
doc.font('Times-Roman');
doc.fontSize(18);
doc.text((0, string_1.UcFirst)(`${hexpress_translations_json_1.default.the[lang]} ${(0, date_1.GetCustomTime2)(String((0, date_1.GetCurrentDate)(true)), lang)}`), {
// width: 700,
align: 'right'
});
doc.moveDown();
// const contents = FileToBase64('images/logo.main.png');
// doc.image(await FetchImage(contents), 320, 280, {
// scale: 0.25,
// align: 'right',
// });
doc.font('Times-Bold');
doc.fontSize(18);
doc.text((0, string_1.Upper)(ese.name), {
// width: 700,
align: 'left'
});
doc.fontSize(13);
doc.text((0, string_1.Lower)(ese.email), {
// width: 700,
align: 'left'
});
doc.text((0, string_1.Lower)(ese.tels.join(' / ')), {
// width: 700,
align: 'left'
});
doc.text((0, string_1.Capitalize)(ese.address[lang]), {
// width: 700,
align: 'left'
});
doc.moveDown();
doc.font('Times-Bold');
doc.fontSize(15);
doc.text((0, string_1.Upper)(datas.titlename), {
// width: 410,
align: 'center'
});
doc.moveDown();
doc.font('Times-Roman');
doc.fontSize(13);
doc.moveDown();
doc.table(table, {
// A4 595.28 x 841.89 (portrait) (about width sizes)
width: 300,
//columnsSize: [ 200, 100, 100 ],
prepareHeader: () => doc.font('Times-Bold').fontSize(14).fillColor('white'),
prepareRow: (row, indexColumn, indexRow, rectRow) => {
doc.font('Times-Bold').fontSize(13);
doc.fillColor('#222222');
if (indexRow % 2 === 0) {
doc.addBackground(rectRow, 'white', 0.001);
}
else {
doc.addBackground(rectRow, '#BEBEBE', 0.001);
}
},
});
// doc.text(contents);
// pagination
let pageNumber = 1;
doc.page.margins.bottom = 0;
doc.text(`${(0, string_1.UcFirst)('page ')} ${pageNumber}`, 0.5 * (doc.page.width - 100), doc.page.height - 50, {
align: 'center',
lineBreak: false,
});
doc.on('pageAdded', () => {
pageNumber++;
let bottom = doc.page.margins.bottom;
doc.page.margins.bottom = 0;
doc.text(`${(0, string_1.UcFirst)('page ')} ${pageNumber}`, 0.5 * (doc.page.width - 100), doc.page.height - 50, {
align: 'center',
lineBreak: false,
});
doc.page.margins.bottom = bottom;
});
doc.end();
res.header('Content-type', 'application/pdf');
res.attachment(finalFilename);
res.send(doc);
});
}
exports.ExportToPDF_1 = ExportToPDF_1;
function ExportToExcel_1(res, datas, lang) {
return __awaiter(this, void 0, void 0, function* () {
const finalFilename = createFilenameExport(datas.filename, 'excel');
const ese = datas.ese;
datas.rows = datas.rows.map((value, index) => {
value.index = index + 1;
return value;
});
const finalColumns = datas.columns.map((column) => ({
header: (0, string_1.Upper)(column.label),
key: column.target,
width: column.label.length * 2
}));
const workbook = new exceljs_1.default.Workbook();
const worksheet = workbook.addWorksheet((0, string_1.Upper)(datas.titlename));
workbook.creator = ese.author.name;
workbook.lastModifiedBy = ese.author.name;
workbook.created = (0, date_1.GetCurrentDate)(false);
workbook.modified = (0, date_1.GetCurrentDate)(false);
// worksheet.getCell('A1').value=Upper(datas.titlename);
// worksheet.mergeCells(`A1:A${datas.rows.length}`);
// worksheet.getCell(`A1:A${datas.rows.length}`).value = Upper(datas.titlename);
// worksheet.getCell(`A1:A${datas.rows.length}`).alignment = { horizontal:'center'} ;
worksheet.columns = finalColumns;
let counter = 1;
datas.rows.forEach((row, index) => {
worksheet.addRow(row);
worksheet.getRow(counter).eachCell((cell) => {
cell.alignment = {
wrapText: true,
vertical: 'middle',
};
});
counter++;
});
worksheet.getRow(1).eachCell((cell) => {
cell.font = { bold: true };
});
res.header('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
res.attachment(finalFilename);
yield workbook.xlsx.write(res);
res.end();
});
}
exports.ExportToExcel_1 = ExportToExcel_1;
function ExportToJSON(res, datas, lang) {
return __awaiter(this, void 0, void 0, function* () {
const rows = datas.rows;
const finalFilename = createFilenameExport(datas.filename, 'json');
res.header('Content-type', 'application/json');
res.attachment(finalFilename);
res.send(rows);
});
}
exports.ExportToJSON = ExportToJSON;
exports.default = {
createFilenameExport,
ExportToCSV,
ExportToPDF_1,
ExportToExcel_1,
ExportToJSON,
};
//# sourceMappingURL=export_functs.js.map