DEV: Convert `download-calendar` modal to component-based API (#22837)

This commit is contained in:
Isaac Janzen 2023-08-01 08:50:52 -05:00 committed by GitHub
parent 6c8af90f5d
commit 6b9e208612
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 65 additions and 42 deletions

View File

@ -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>

View File

@ -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;
}
}

View File

@ -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");
},
});

View File

@ -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) {

View File

@ -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",