Finished support for triggered campaigns. So far only smoke-tested for subscription trigger.
This commit is contained in:
parent
4f5b2d10e4
commit
b37ad9863c
56 changed files with 416 additions and 213 deletions
|
@ -190,6 +190,8 @@ class SendControls extends Component {
|
|||
date.minute(time.minute());
|
||||
date.second(0);
|
||||
date.millisecond(0);
|
||||
date.utcOffset(0, true); // TODO, process offset from user settings
|
||||
|
||||
|
||||
await this.postAndMaskStateError(`rest/campaign-start-at/${this.props.entity.id}/${date.valueOf()}`);
|
||||
|
||||
|
@ -245,6 +247,7 @@ class SendControls extends Component {
|
|||
<div>
|
||||
<DatePicker id="date" label={t('date')} />
|
||||
<InputField id="time" label={t('time')} help={t('enter24hourTimeInFormatHhmmEg1348')}/>
|
||||
{/* TODO: Timezone selector */}
|
||||
</div>
|
||||
}
|
||||
</Form>
|
||||
|
|
|
@ -65,7 +65,7 @@ export default class List extends Component {
|
|||
});
|
||||
}
|
||||
|
||||
if (perms.includes('manageTriggers')) {
|
||||
if (this.props.campaign.permissions.includes('manageTriggers')) {
|
||||
tableDeleteDialogAddDeleteButton(actions, this, null, data[0], data[1]);
|
||||
}
|
||||
|
||||
|
|
|
@ -95,14 +95,13 @@ export function getRuleHelpers(t, fields) {
|
|||
}
|
||||
};
|
||||
|
||||
// TODO: This generates strings that cannot be statically detected. It will require dynamic discovery of translatable strings.
|
||||
function getRelativeDateTreeLabel(rule, textFragment) {
|
||||
if (rule.value === 0) {
|
||||
return t('dateInColumnColName' + textFragment + ' the current date', {colName: ruleHelpers.getColumnName(rule.column)})
|
||||
return t(/*ignore*/'Date in column ' + textFragment + ' the current date', {colName: ruleHelpers.getColumnName(rule.column)})
|
||||
} else if (rule.value > 0) {
|
||||
return t('dateInColumnColName' + textFragment + ' {{value}}-th day after the current date', {colName: ruleHelpers.getColumnName(rule.column), value: rule.value});
|
||||
return t(/*ignore*/'Date in column ' + textFragment + ' {{value}}-th day after the current date', {colName: ruleHelpers.getColumnName(rule.column), value: rule.value});
|
||||
} else {
|
||||
return t('dateInColumnColName' + textFragment + ' {{value}}-th day before the current date', {colName: ruleHelpers.getColumnName(rule.column), value: rule.value});
|
||||
return t(/*ignore*/'Date in column ' + textFragment + ' {{value}}-th day before the current date', {colName: ruleHelpers.getColumnName(rule.column), value: rule.value});
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -129,22 +128,47 @@ export function getRuleHelpers(t, fields) {
|
|||
},
|
||||
eqTodayPlusDays: {
|
||||
dropdownLabel: t('onXthDayBeforeafterCurrentDate'),
|
||||
/*
|
||||
tMark('Date in column is the current date')
|
||||
tMark('Date in column is {{value}}-th day after the current date')
|
||||
tMark('Date in column is {{value}}-th day before the current date')
|
||||
*/
|
||||
treeLabel: rule => getRelativeDateTreeLabel(rule, 'is'),
|
||||
},
|
||||
ltTodayPlusDays: {
|
||||
dropdownLabel: t('beforeXthDayBeforeafterCurrentDate'),
|
||||
/*
|
||||
tMark('Date in column is before the current date')
|
||||
tMark('Date in column is before {{value}}-th day after the current date')
|
||||
tMark('Date in column is before {{value}}-th day before the current date')
|
||||
*/
|
||||
treeLabel: rule => getRelativeDateTreeLabel(rule, 'is before'),
|
||||
},
|
||||
leTodayPlusDays: {
|
||||
dropdownLabel: t('beforeOrOnXthDayBeforeafterCurrentDate'),
|
||||
/*
|
||||
tMark('Date in column is before or on the current date')
|
||||
tMark('Date in column is before or on {{value}}-th day after the current date')
|
||||
tMark('Date in column is before or on {{value}}-th day before the current date')
|
||||
*/
|
||||
treeLabel: rule => getRelativeDateTreeLabel(rule, 'is before or on'),
|
||||
},
|
||||
gtTodayPlusDays: {
|
||||
dropdownLabel: t('afterXthDayBeforeafterCurrentDate'),
|
||||
/*
|
||||
tMark('Date in column is after the current date')
|
||||
tMark('Date in column is after {{value}}-th day after the current date')
|
||||
tMark('Date in column is after {{value}}-th day after the current date')
|
||||
*/
|
||||
treeLabel: rule => getRelativeDateTreeLabel(rule, 'is after'),
|
||||
},
|
||||
geTodayPlusDays: {
|
||||
dropdownLabel: t('afterOrOnXthDayBeforeafterCurrentDate'),
|
||||
/*
|
||||
tMark('Date in column is after or on the current date')
|
||||
tMark('Date in column is after or on {{value}}-th day after the current date')
|
||||
tMark('Date in column is after or on {{value}}-th day after the current date')
|
||||
*/
|
||||
treeLabel: rule => getRelativeDateTreeLabel(rule, 'is after or on'),
|
||||
}
|
||||
};
|
||||
|
|
|
@ -87,10 +87,10 @@ export default class CUD extends Component {
|
|||
' <table class="table table-bordered table-hover data-table display nowrap" width="100%" data-row-sort="1,1" data-paging="false">\n' +
|
||||
' <thead>\n' +
|
||||
' <th>\n' +
|
||||
' {{#translate}}Email{{/translate}}\n' +
|
||||
' Email\n' +
|
||||
' </th>\n' +
|
||||
' <th>\n' +
|
||||
' {{#translate}}Tracker Count{{/translate}}\n' +
|
||||
' Tracker Count\n' +
|
||||
' </th>\n' +
|
||||
' </thead>\n' +
|
||||
' {{#if results}}\n' +
|
||||
|
@ -146,16 +146,16 @@ export default class CUD extends Component {
|
|||
' <table class="table table-bordered table-hover data-table display nowrap" width="100%" data-row-sort="1,1,1,1" data-paging="false">\n' +
|
||||
' <thead>\n' +
|
||||
' <th>\n' +
|
||||
' {{#translate}}Country{{/translate}}\n' +
|
||||
' Country\n' +
|
||||
' </th>\n' +
|
||||
' <th>\n' +
|
||||
' {{#translate}}Opened{{/translate}}\n' +
|
||||
' Opened\n' +
|
||||
' </th>\n' +
|
||||
' <th>\n' +
|
||||
' {{#translate}}All{{/translate}}\n' +
|
||||
' All\n' +
|
||||
' </th>\n' +
|
||||
' <th>\n' +
|
||||
' {{#translate}}Percentage{{/translate}}\n' +
|
||||
' Percentage\n' +
|
||||
' </th>\n' +
|
||||
' </thead>\n' +
|
||||
' {{#if results}}\n' +
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue