mirror of
https://github.com/discourse/discourse.git
synced 2025-06-18 13:12:29 +08:00
[WIP] select-box-kit refactoring
This commit is contained in:
@ -0,0 +1,118 @@
|
||||
import { default as computed, observes } from "ember-addons/ember-computed-decorators";
|
||||
import ComboBoxComponent from "select-box-kit/components/combo-box";
|
||||
import { CLOSE_STATUS_TYPE } from "discourse/controllers/edit-topic-timer";
|
||||
import DatetimeMixin from "select-box-kit/components/future-date-input-selector/mixin";
|
||||
|
||||
export const LATER_TODAY = "later_today";
|
||||
export const TOMORROW = "tomorrow";
|
||||
export const LATER_THIS_WEEK = "later_this_week";
|
||||
export const THIS_WEEKEND = "this_weekend";
|
||||
export const NEXT_WEEK = "next_week";
|
||||
export const TWO_WEEKS = "two_weeks";
|
||||
export const NEXT_MONTH = "next_month";
|
||||
export const FOREVER = "forever";
|
||||
|
||||
export const PICK_DATE_AND_TIME = "pick_date_and_time";
|
||||
export const SET_BASED_ON_LAST_POST = "set_based_on_last_post";
|
||||
|
||||
export const FORMAT = "YYYY-MM-DD HH:mm";
|
||||
|
||||
export default ComboBoxComponent.extend(DatetimeMixin, {
|
||||
classNames: ["future-date-input-selector"],
|
||||
isCustom: Ember.computed.equal("value", PICK_DATE_AND_TIME),
|
||||
clearable: true,
|
||||
rowComponent: "future-date-input-selector/future-date-input-selector-row",
|
||||
headerComponent: "future-date-input-selector/future-date-input-selector-header",
|
||||
|
||||
@computed
|
||||
content() {
|
||||
const selections = [];
|
||||
const now = moment();
|
||||
const canScheduleToday = (24 - now.hour()) > 6;
|
||||
const day = now.day();
|
||||
|
||||
if (canScheduleToday) {
|
||||
selections.push({
|
||||
id: LATER_TODAY,
|
||||
name: I18n.t("topic.auto_update_input.later_today")
|
||||
});
|
||||
}
|
||||
|
||||
selections.push({
|
||||
id: TOMORROW,
|
||||
name: I18n.t("topic.auto_update_input.tomorrow")
|
||||
});
|
||||
|
||||
if (!canScheduleToday && day < 4) {
|
||||
selections.push({
|
||||
id: LATER_THIS_WEEK,
|
||||
name: I18n.t("topic.auto_update_input.later_this_week")
|
||||
});
|
||||
}
|
||||
|
||||
if (day < 5 && this.get("includeWeekend")) {
|
||||
selections.push({
|
||||
id: THIS_WEEKEND,
|
||||
name: I18n.t("topic.auto_update_input.this_weekend")
|
||||
});
|
||||
}
|
||||
|
||||
if (day !== 7) {
|
||||
selections.push({
|
||||
id: NEXT_WEEK,
|
||||
name: I18n.t("topic.auto_update_input.next_week")
|
||||
});
|
||||
}
|
||||
|
||||
selections.push({
|
||||
id: TWO_WEEKS,
|
||||
name: I18n.t("topic.auto_update_input.two_weeks")
|
||||
});
|
||||
|
||||
if (moment().endOf("month").date() !== now.date()) {
|
||||
selections.push({
|
||||
id: NEXT_MONTH,
|
||||
name: I18n.t("topic.auto_update_input.next_month")
|
||||
});
|
||||
}
|
||||
|
||||
if (this.get("includeForever")) {
|
||||
selections.push({
|
||||
id: FOREVER,
|
||||
name: I18n.t("topic.auto_update_input.forever")
|
||||
});
|
||||
}
|
||||
|
||||
selections.push({
|
||||
id: PICK_DATE_AND_TIME,
|
||||
name: I18n.t("topic.auto_update_input.pick_date_and_time")
|
||||
});
|
||||
|
||||
if (this.get("statusType") === CLOSE_STATUS_TYPE) {
|
||||
selections.push({
|
||||
id: SET_BASED_ON_LAST_POST,
|
||||
name: I18n.t("topic.auto_update_input.set_based_on_last_post")
|
||||
});
|
||||
}
|
||||
|
||||
return selections;
|
||||
},
|
||||
|
||||
@observes("value")
|
||||
_updateInput() {
|
||||
if (this.get("isCustom")) return;
|
||||
let input = null;
|
||||
const { time } = this.get("updateAt");
|
||||
|
||||
if (time && !Ember.isEmpty(this.get("value"))) {
|
||||
input = time.format(FORMAT);
|
||||
}
|
||||
|
||||
this.set("input", input);
|
||||
},
|
||||
|
||||
@computed("value")
|
||||
updateAt(value) {
|
||||
return this._updateAt(value);
|
||||
}
|
||||
});
|
Reference in New Issue
Block a user