This repository has been archived on 2023-03-18. You can view files and clone it, but cannot push or open issues or pull requests.
osr-discourse-src/app/assets/javascripts/discourse/components/auto-update-input.js.es6

93 lines
2.6 KiB
JavaScript

import { default as computed, observes } from "ember-addons/ember-computed-decorators";
import {
FORMAT,
PICK_DATE_AND_TIME,
SET_BASED_ON_LAST_POST
} from "discourse/components/auto-update-input-selector";
export default Ember.Component.extend({
selection: null,
date: null,
time: null,
isCustom: Ember.computed.equal('selection', PICK_DATE_AND_TIME),
isBasedOnLastPost: Ember.computed.equal('selection', SET_BASED_ON_LAST_POST),
init() {
this._super();
const input = this.get('input');
if (input) {
if (this.get('basedOnLastPost')) {
this.set('selection', SET_BASED_ON_LAST_POST);
} else {
this.set('selection', PICK_DATE_AND_TIME);
const datetime = moment(input);
this.set('date', datetime.toDate());
this.set('time', datetime.format("HH:mm"));
this._updateInput();
}
}
},
@observes("date", "time")
_updateInput() {
const date = moment(this.get('date')).format("YYYY-MM-DD");
const time = (this.get('time') && ` ${this.get('time')}`) || '';
this.set('input', moment(`${date}${time}`).format(FORMAT));
},
@observes("isBasedOnLastPost")
_updateBasedOnLastPost() {
this.set('basedOnLastPost', this.get('isBasedOnLastPost'));
},
@computed("input", "isBasedOnLastPost")
duration(input, isBasedOnLastPost) {
const now = moment();
if (isBasedOnLastPost) {
return parseFloat(input);
} else {
return moment(input) - now;
}
},
@computed("input", "isBasedOnLastPost")
executeAt(input, isBasedOnLastPost) {
if (isBasedOnLastPost) {
return moment().add(input, 'hours').format(FORMAT);
} else {
return input;
}
},
@computed("statusType", "input", "isCustom", "date", "time", "willCloseImmediately")
showTopicStatusInfo(statusType, input, isCustom, date, time, willCloseImmediately) {
if (!statusType || willCloseImmediately) return false;
if (isCustom) {
return date || time;
} else {
return input;
}
},
@computed('isBasedOnLastPost', 'input', 'lastPostedAt')
willCloseImmediately(isBasedOnLastPost, input, lastPostedAt) {
if (isBasedOnLastPost && input) {
let closeDate = moment(lastPostedAt);
closeDate = closeDate.add(input, 'hours');
return closeDate < moment();
}
},
@computed('isBasedOnLastPost', 'lastPostedAt')
willCloseI18n(isBasedOnLastPost, lastPostedAt) {
if (isBasedOnLastPost) {
const diff = Math.round((new Date() - new Date(lastPostedAt)) / (1000*60*60));
return I18n.t('topic.auto_close_immediate', { count: diff });
}
},
});