Fixes in reports (generating a CSV).
Added caching of generated images in mosaico handler. Various other fixes.
This commit is contained in:
parent
055c4c6b51
commit
66702b5edc
39 changed files with 545 additions and 278 deletions
6
client/package-lock.json
generated
6
client/package-lock.json
generated
|
@ -7018,9 +7018,9 @@
|
|||
"integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg=="
|
||||
},
|
||||
"moment-timezone": {
|
||||
"version": "0.5.23",
|
||||
"resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.23.tgz",
|
||||
"integrity": "sha512-WHFH85DkCfiNMDX5D3X7hpNH3/PUhjTGcD0U1SgfBGZxJ3qUmJh5FdvaFjcClxOvB3rzdfj4oRffbI38jEnC1w==",
|
||||
"version": "0.5.25",
|
||||
"resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.25.tgz",
|
||||
"integrity": "sha512-DgEaTyN/z0HFaVcVbSyVCUU6HeFdnNC3vE4c9cgu2dgMTvjBUBdBzWfasTBmAW45u5OIMeCJtU8yNjM22DHucw==",
|
||||
"requires": {
|
||||
"moment": ">= 2.9.0"
|
||||
}
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
"lodash": "^4.17.11",
|
||||
"mjml4-in-browser": "^1.1.1",
|
||||
"moment": "^2.23.0",
|
||||
"moment-timezone": "^0.5.23",
|
||||
"moment-timezone": "^0.5.25",
|
||||
"popper.js": "^1.14.6",
|
||||
"prop-types": "^15.6.2",
|
||||
"querystringify": "^2.1.0",
|
||||
|
@ -56,9 +56,9 @@
|
|||
"react-i18next": "^9.0.1",
|
||||
"react-router-dom": "^4.3.1",
|
||||
"react-sortable-tree": "^2.6.0",
|
||||
"slugify": "^1.3.4",
|
||||
"shallowequal": "^1.1.0",
|
||||
"shortid": "^2.2.14",
|
||||
"slugify": "^1.3.4",
|
||||
"url-parse": "^1.4.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
|
|
@ -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>;
|
||||
|
|
|
@ -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' +
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue