discourse/app/assets/javascripts/select-box-kit/components/future-date-input-selector/mixin.js.es6

102 lines
2.4 KiB
Plaintext
Raw Normal View History

2017-10-19 15:51:08 -04:00
import { iconHTML } from 'discourse-common/lib/icon-library';
import { CLOSE_STATUS_TYPE } from 'discourse/controllers/edit-topic-timer';
import {
LATER_TODAY,
TOMORROW,
LATER_THIS_WEEK,
THIS_WEEKEND,
NEXT_WEEK,
TWO_WEEKS,
NEXT_MONTH,
FOREVER,
PICK_DATE_AND_TIME,
SET_BASED_ON_LAST_POST,
} from "select-box-kit/components/future-date-input-selector";
export default Ember.Mixin.create({
_computeIconForValue(value) {
let {icon} = this._updateAt(value);
if (icon) {
return icon.split(",").map(i => iconHTML(i)).join(" ");
}
return null;
},
_computeDatetimeForValue(value) {
if (Ember.isNone(value)) {
return null;
}
let {time} = this._updateAt(value);
if (time) {
if (value === LATER_TODAY) {
time = time.format("h a");
} else if (value === NEXT_MONTH || value === TWO_WEEKS) {
time = time.format("MMM D");
} else {
time = time.format("ddd, h a");
}
}
if (time && value !== FOREVER) {
return time;
}
return null;
},
_updateAt(selection) {
let time = moment();
let icon;
const timeOfDay = this.get('statusType') !== CLOSE_STATUS_TYPE ? 8 : 18;
switch(selection) {
case LATER_TODAY:
time = time.hour(18).minute(0);
icon = 'moon-o';
break;
case TOMORROW:
time = time.add(1, 'day').hour(timeOfDay).minute(0);
icon = 'sun-o';
break;
case LATER_THIS_WEEK:
time = time.add(2, 'day').hour(timeOfDay).minute(0);
icon = 'briefcase';
break;
case THIS_WEEKEND:
time = time.day(6).hour(timeOfDay).minute(0);
icon = 'bed';
break;
case NEXT_WEEK:
time = time.add(1, 'week').day(1).hour(timeOfDay).minute(0);
icon = 'briefcase';
break;
case TWO_WEEKS:
time = time.add(2, 'week').hour(timeOfDay).minute(0);
icon = 'briefcase';
break;
case NEXT_MONTH:
time = time.add(1, 'month').startOf('month').hour(timeOfDay).minute(0);
icon = 'briefcase';
break;
case FOREVER:
time = time.add(1000, 'year').hour(timeOfDay).minute(0);
icon = 'gavel';
break;
case PICK_DATE_AND_TIME:
time = null;
icon = 'calendar-plus-o';
break;
case SET_BASED_ON_LAST_POST:
time = null;
icon = 'clock-o';
break;
}
return { time, icon };
},
});