Fixes in reports (generating a CSV).

Added caching of generated images in mosaico handler.
Various other fixes.
This commit is contained in:
Tomas Bures 2019-04-22 02:41:40 +02:00
parent 055c4c6b51
commit 66702b5edc
39 changed files with 545 additions and 278 deletions

View file

@ -45,12 +45,14 @@ export default class ViewAndOutput extends Component {
url: 'rest/report-content',
getTitle: name => t('reportName', { name }),
loading: t('loadingReport'),
finishedStates: new Set([ReportState.FINISHED]),
getContent: content => <div dangerouslySetInnerHTML={{ __html: content }}/>
},
output: {
url: 'rest/report-output',
getTitle: name => t('outputForReportName', { name }),
loading: t('loadingReportOutput'),
finishedStates: new Set([ReportState.FINISHED, ReportState.FAILED]),
getContent: content => <pre>{content}</pre>
}
}
@ -108,7 +110,7 @@ export default class ViewAndOutput extends Component {
if (this.state.report) {
let reportContent = null;
if (this.state.report.state === ReportState.FINISHED) {
if (viewType.finishedStates.has(this.state.report.state)) {
reportContent = viewType.getContent(this.state.content);
} else if (this.state.report.state === ReportState.SCHEDULED || this.state.report.state === ReportState.PROCESSING) {
reportContent = <div className="alert alert-info" role="alert">{t('reportIsBeingGenerated')}</div>;

View file

@ -130,23 +130,17 @@ export default class CUD extends Component {
' "maxOccurences": 1\n' +
' }\n' +
']',
js:
'const sampleRowTransform = new stream.Transform({\n' +
' objectMode: true,\n' +
' transform(row, encoding, callback) {\n' +
' callback(null, row)\n' +
' }\n' +
'})\n' +
js: 'const results = await campaigns.getCampaignOpenStatisticsStream(inputs.campaign, [\'subscription:email\', \'tracker:count\'], null, (query, col) => query.where(col(\'subscription:status\'), SubscriptionStatus.SUBSCRIBED));\n' +
'\n' +
'const results = await campaigns.getCampaignOpenStatisticsStream(inputs.campaign, [\'subscription:email\', \'tracker:count\'])\n' +
'\n' +
'results.pipe(sampleRowTransform)\n' +
'\n' +
'await renderCsvFromStream(sampleRowTransform, {\n' +
' header: true,\n' +
' columns: [ { key: \'subscription:email\', header: \'Email\' }, { key: \'tracker:count\', header: \'Open count\' } ],\n' +
' delimiter: \',\'\n' +
'})',
'await renderCsvFromStream(\n' +
' results, \n' +
' {\n' +
' header: true,\n' +
' columns: [ { key: \'subscription:email\', header: \'Email\' }, { key: \'tracker:count\', header: \'Open count\' } ],\n' +
' delimiter: \',\'\n' +
' },\n' +
' async (row, encoding) => row\n' +
');',
hbs: ''
});
@ -167,9 +161,9 @@ export default class CUD extends Component {
' }\n' +
']',
js:
'const results = await campaigns.getCampaignOpenStatistics(inputs.campaign, ["field:country", "count_opened", "count_all"], query =>\n' +
'const results = await campaigns.getCampaignOpenStatistics(inputs.campaign, ["field:country", "count_opened", "count_all"], (query, col) =>\n' +
' query.count("* AS count_all")\n' +
' .select(knex.raw("SUM(IF(`tracker:count` IS NULL, 0, 1)) AS count_opened"))\n' +
' .select(knex.raw("SUM(IF(`" + col(tracker:count) +"` IS NULL, 0, 1)) AS count_opened"))\n' +
' .groupBy("field:country")\n' +
')\n' +
'\n' +