DEV: Convert `download-calendar` modal to component-based API (#22837)
This commit is contained in:
parent
6c8af90f5d
commit
6b9e208612
|
@ -1,14 +1,18 @@
|
||||||
<div>
|
<DModal
|
||||||
<DModalBody @title="download_calendar.title">
|
@title={{i18n "download_calendar.title"}}
|
||||||
|
class="download-calendar-modal"
|
||||||
|
@closeModal={{@closeModal}}
|
||||||
|
>
|
||||||
|
<:body>
|
||||||
<div class="control-group">
|
<div class="control-group">
|
||||||
<div class="ics">
|
<div class="ics">
|
||||||
<label class="radio" for="ics">
|
<label class="radio" for="ics">
|
||||||
<RadioButton
|
<RadioButton
|
||||||
|
id="ics"
|
||||||
@name="select-calendar"
|
@name="select-calendar"
|
||||||
@id="ics"
|
|
||||||
@value="ics"
|
@value="ics"
|
||||||
@selection={{this.selectedCalendar}}
|
@selection={{this.selectedCalendar}}
|
||||||
@onChange={{action (mut this.selectedCalendar)}}
|
@onChange={{fn this.selectCalendar "ics"}}
|
||||||
/>
|
/>
|
||||||
{{i18n "download_calendar.save_ics"}}
|
{{i18n "download_calendar.save_ics"}}
|
||||||
</label>
|
</label>
|
||||||
|
@ -16,11 +20,11 @@
|
||||||
<div class="google">
|
<div class="google">
|
||||||
<label class="radio" for="google">
|
<label class="radio" for="google">
|
||||||
<RadioButton
|
<RadioButton
|
||||||
|
id="google"
|
||||||
@name="select-calendar"
|
@name="select-calendar"
|
||||||
@id="google"
|
|
||||||
@value="google"
|
@value="google"
|
||||||
@selection={{this.selectedCalendar}}
|
@selection={{this.selectedCalendar}}
|
||||||
@onChange={{action (mut this.selectedCalendar)}}
|
@onChange={{fn this.selectCalendar "google"}}
|
||||||
/>
|
/>
|
||||||
{{i18n "download_calendar.save_google"}}
|
{{i18n "download_calendar.save_google"}}
|
||||||
</label>
|
</label>
|
||||||
|
@ -34,13 +38,17 @@
|
||||||
</label>
|
</label>
|
||||||
<span>{{i18n "download_calendar.remember_explanation"}}</span>
|
<span>{{i18n "download_calendar.remember_explanation"}}</span>
|
||||||
</div>
|
</div>
|
||||||
</DModalBody>
|
</:body>
|
||||||
<div class="modal-footer">
|
<:footer>
|
||||||
<DButton
|
<DButton
|
||||||
@class="btn-primary"
|
class="btn-primary"
|
||||||
@action={{action "downloadCalendar"}}
|
@action={{this.downloadCalendar}}
|
||||||
@label="download_calendar.download"
|
@label="download_calendar.download"
|
||||||
/>
|
/>
|
||||||
<DModalCancel @close={{route-action "closeModal"}} />
|
<DButton
|
||||||
</div>
|
class="btn-flat d-modal-cancel"
|
||||||
</div>
|
@action={{@closeModal}}
|
||||||
|
@label="cancel"
|
||||||
|
/>
|
||||||
|
</:footer>
|
||||||
|
</DModal>
|
|
@ -0,0 +1,40 @@
|
||||||
|
import Component from "@glimmer/component";
|
||||||
|
import { action } from "@ember/object";
|
||||||
|
import { downloadGoogle, downloadIcs } from "discourse/lib/download-calendar";
|
||||||
|
import { tracked } from "@glimmer/tracking";
|
||||||
|
import { inject as service } from "@ember/service";
|
||||||
|
|
||||||
|
export default class downloadCalendar extends Component {
|
||||||
|
@service currentUser;
|
||||||
|
|
||||||
|
@tracked selectedCalendar = "ics";
|
||||||
|
@tracked remember = false;
|
||||||
|
|
||||||
|
@action
|
||||||
|
downloadCalendar() {
|
||||||
|
if (this.remember) {
|
||||||
|
this.currentUser.set(
|
||||||
|
"user_option.default_calendar",
|
||||||
|
this.selectedCalendar
|
||||||
|
);
|
||||||
|
this.currentUser.save(["default_calendar"]);
|
||||||
|
}
|
||||||
|
if (this.selectedCalendar === "ics") {
|
||||||
|
downloadIcs(
|
||||||
|
this.args.model.calendar.title,
|
||||||
|
this.args.model.calendar.dates
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
downloadGoogle(
|
||||||
|
this.args.model.calendar.title,
|
||||||
|
this.args.model.calendar.dates
|
||||||
|
);
|
||||||
|
}
|
||||||
|
this.args.closeModal();
|
||||||
|
}
|
||||||
|
|
||||||
|
@action
|
||||||
|
selectCalendar(calendar) {
|
||||||
|
this.selectedCalendar = calendar;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,26 +0,0 @@
|
||||||
import { action } from "@ember/object";
|
|
||||||
import Controller from "@ember/controller";
|
|
||||||
import ModalFunctionality from "discourse/mixins/modal-functionality";
|
|
||||||
import { downloadGoogle, downloadIcs } from "discourse/lib/download-calendar";
|
|
||||||
|
|
||||||
export default Controller.extend(ModalFunctionality, {
|
|
||||||
selectedCalendar: "ics",
|
|
||||||
remember: false,
|
|
||||||
|
|
||||||
@action
|
|
||||||
downloadCalendar() {
|
|
||||||
if (this.remember) {
|
|
||||||
this.currentUser.user_option.set(
|
|
||||||
"default_calendar",
|
|
||||||
this.selectedCalendar
|
|
||||||
);
|
|
||||||
this.currentUser.save(["default_calendar"]);
|
|
||||||
}
|
|
||||||
if (this.selectedCalendar === "ics") {
|
|
||||||
downloadIcs(this.model.title, this.model.dates);
|
|
||||||
} else {
|
|
||||||
downloadGoogle(this.model.title, this.model.dates);
|
|
||||||
}
|
|
||||||
this.send("closeModal");
|
|
||||||
},
|
|
||||||
});
|
|
|
@ -1,6 +1,7 @@
|
||||||
import User from "discourse/models/user";
|
import User from "discourse/models/user";
|
||||||
import showModal from "discourse/lib/show-modal";
|
|
||||||
import getURL from "discourse-common/lib/get-url";
|
import getURL from "discourse-common/lib/get-url";
|
||||||
|
import { getOwner } from "discourse-common/lib/get-owner";
|
||||||
|
import downloadCalendarModal from "discourse/components/modal/download-calendar";
|
||||||
|
|
||||||
export function downloadCalendar(title, dates) {
|
export function downloadCalendar(title, dates) {
|
||||||
const currentUser = User.current();
|
const currentUser = User.current();
|
||||||
|
@ -80,7 +81,8 @@ export function generateIcsData(title, dates) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function _displayModal(title, dates) {
|
function _displayModal(title, dates) {
|
||||||
showModal("download-calendar", { model: { title, dates } });
|
const modal = getOwner(this).lookup("service:modal");
|
||||||
|
modal.show(downloadCalendarModal, { model: { calendar: { title, dates } } });
|
||||||
}
|
}
|
||||||
|
|
||||||
function _formatDateForGoogleApi(date) {
|
function _formatDateForGoogleApi(date) {
|
||||||
|
|
|
@ -23,7 +23,6 @@ const KNOWN_LEGACY_MODALS = [
|
||||||
"create-account",
|
"create-account",
|
||||||
"create-invite-bulk",
|
"create-invite-bulk",
|
||||||
"create-invite",
|
"create-invite",
|
||||||
"download-calendar",
|
|
||||||
"edit-topic-timer",
|
"edit-topic-timer",
|
||||||
"edit-user-directory-columns",
|
"edit-user-directory-columns",
|
||||||
"explain-reviewable",
|
"explain-reviewable",
|
||||||
|
|
Loading…
Reference in New Issue