UX: simplify setting reminders

This commit is contained in:
jjaffeux 2020-08-12 13:16:54 +02:00
parent 165bf22988
commit ab9e2bbd7f
6 changed files with 39 additions and 6 deletions

View File

@ -31,7 +31,8 @@ module DiscoursePostEvent
def reminders
(object.reminders || '').split(',').map do |reminder|
value, unit = reminder.split('.')
{ value: value.to_i, unit: unit }
value = value.to_i
{ value: value.to_i.abs, unit: unit, period: value > 0 ? 'before' : 'after' }
end
end

View File

@ -9,7 +9,7 @@ import { Promise } from "rsvp";
import { buildParams, replaceRaw } from "../../lib/raw-event-helper";
const DEFAULT_REMINDER = { value: 15, unit: "minutes" };
const DEFAULT_REMINDER = { value: 15, unit: "minutes", period: "before" };
export default Controller.extend(ModalFunctionality, {
reminders: null,
@ -19,6 +19,7 @@ export default Controller.extend(ModalFunctionality, {
this._super(...arguments);
this.set("reminderUnits", ["minutes", "hours", "days", "weeks"]);
this.set("reminderPeriods", ["before", "after"]);
},
modalTitle: computed("model.eventModel.isNew", {

View File

@ -66,12 +66,12 @@
{{/event-field}}
{{#event-field class="reminders" label="discourse_post_event.builder_modal.reminders.label"}}
<p class="event-field-description">{{i18n "discourse_post_event.builder_modal.reminders.description"}}</p>
<div class="reminders-list">
{{#each model.eventModel.reminders as |reminder|}}
<div class="reminder-item">
{{input
class="reminder-value"
min=0
value=(readonly reminder.value)
placeholderKey="discourse_post_event.builder_modal.name.placeholder"
input=(action (mut reminder.value) value="target.value")
@ -86,6 +86,15 @@
onChange=(action (mut reminder.unit))
}}
{{combo-box
class="reminder-period"
value=reminder.period
nameProperty=null
valueProperty=null
content=reminderPeriods
onChange=(action (mut reminder.period))
}}
{{d-button
class="remove-reminder"
icon="times"

View File

@ -39,7 +39,20 @@ export function buildParams(startsAt, endsAt, eventModel) {
if (eventModel.reminders && eventModel.reminders.length) {
params.reminders = eventModel.reminders
.map(r => `${r.value}.${r.unit}`)
.map(r => {
// we create a new intermediate object to avoid changes in the UI while
// we prepare the values for request
const reminder = Object.assign({}, r);
if (reminder.period === "after") {
reminder.value = `-${Math.abs(parseInt(reminder.value, 10))}`;
}
if (reminder.period === "before") {
reminder.value = Math.abs(parseInt(`${reminder.value}`, 10));
}
return `${reminder.value}.${reminder.unit}`;
})
.join(",");
}

View File

@ -165,7 +165,17 @@
padding: 0.25em 0;
.reminder-value {
width: 80px;
width: 60px;
margin-right: 0.5em;
}
.reminder-unit {
width: 140;
margin-right: 0.5em;
}
.reminder-period {
width: 100%;
margin-right: 0.5em;
}

View File

@ -343,7 +343,6 @@ en:
add_reminder: Add reminder
reminders:
label: Reminders
description: A negative value will be sent after event started to `going` users who didn't visit the event since it started.
url:
label: URL
placeholder: Optional