diff --git a/app/assets/javascripts/discourse/app/components/activation-email-form.hbs b/app/assets/javascripts/discourse/app/components/activation-email-form.hbs index c1301d19d6d..14bc86e2b01 100644 --- a/app/assets/javascripts/discourse/app/components/activation-email-form.hbs +++ b/app/assets/javascripts/discourse/app/components/activation-email-form.hbs @@ -1,2 +1,6 @@

{{i18n "login.provide_new_email"}}

- \ No newline at end of file + \ No newline at end of file diff --git a/app/assets/javascripts/discourse/app/components/activation-email-form.js b/app/assets/javascripts/discourse/app/components/activation-email-form.js index 87d5ddb040f..f4f958c898a 100644 --- a/app/assets/javascripts/discourse/app/components/activation-email-form.js +++ b/app/assets/javascripts/discourse/app/components/activation-email-form.js @@ -1,3 +1,9 @@ -import Component from "@ember/component"; +import Component from "@glimmer/component"; +import { action } from "@ember/object"; -export default Component.extend({}); +export default class ActivationEmailForm extends Component { + @action + newEmailChanged(value) { + this.args.updateNewEmail?.(value); + } +} diff --git a/app/assets/javascripts/discourse/app/components/modal/activation-edit.hbs b/app/assets/javascripts/discourse/app/components/modal/activation-edit.hbs new file mode 100644 index 00000000000..db187ad8a4a --- /dev/null +++ b/app/assets/javascripts/discourse/app/components/modal/activation-edit.hbs @@ -0,0 +1,21 @@ + + <:body> + + + <:footer> + + + + \ No newline at end of file diff --git a/app/assets/javascripts/discourse/app/components/modal/activation-edit.js b/app/assets/javascripts/discourse/app/components/modal/activation-edit.js new file mode 100644 index 00000000000..7716f0c843d --- /dev/null +++ b/app/assets/javascripts/discourse/app/components/modal/activation-edit.js @@ -0,0 +1,38 @@ +import Component from "@glimmer/component"; +import { action } from "@ember/object"; +import { inject as service } from "@ember/service"; +import { tracked } from "@glimmer/tracking"; +import { changeEmail } from "discourse/lib/user-activation"; +import ActivationResent from "./activation-resent"; + +export default class ActivationEdit extends Component { + @service login; + @service modal; + + @tracked newEmail = this.args.model.newEmail; + @tracked flash; + + get submitDisabled() { + return this.newEmail === this.args.model.currentEmail; + } + + @action + changeEmail() { + changeEmail({ + username: this.login?.loginName, + password: this.login?.loginPassword, + email: this.args.model.newEmail, + }) + .then(() => { + this.modal.show(ActivationResent, { + model: { currentEmail: this.args.model.newEmail }, + }); + }) + .catch((e) => (this.flash = e)); + } + + @action + updateNewEmail(e) { + this.newEmail = e.target.value; + } +} diff --git a/app/assets/javascripts/discourse/app/components/modal/activation-resent.hbs b/app/assets/javascripts/discourse/app/components/modal/activation-resent.hbs new file mode 100644 index 00000000000..af6d6c09261 --- /dev/null +++ b/app/assets/javascripts/discourse/app/components/modal/activation-resent.hbs @@ -0,0 +1,9 @@ + + <:body> + {{html-safe + (i18n + "login.sent_activation_email_again" currentEmail=@model.currentEmail + ) + }} + + \ No newline at end of file diff --git a/app/assets/javascripts/discourse/app/components/modal/not-activated.hbs b/app/assets/javascripts/discourse/app/components/modal/not-activated.hbs new file mode 100644 index 00000000000..3b46045804d --- /dev/null +++ b/app/assets/javascripts/discourse/app/components/modal/not-activated.hbs @@ -0,0 +1,11 @@ + + <:body> + {{html-safe (i18n "login.not_activated" sentTo=@model.sentTo)}} + + <:footer> + + + \ No newline at end of file diff --git a/app/assets/javascripts/discourse/app/components/modal/not-activated.js b/app/assets/javascripts/discourse/app/components/modal/not-activated.js new file mode 100644 index 00000000000..feec2984e7e --- /dev/null +++ b/app/assets/javascripts/discourse/app/components/modal/not-activated.js @@ -0,0 +1,29 @@ +import Component from "@glimmer/component"; +import { action } from "@ember/object"; +import { inject as service } from "@ember/service"; +import { resendActivationEmail } from "discourse/lib/user-activation"; +import ActivationResent from "./activation-resent"; +import ActivationEdit from "./activation-edit"; + +export default class NotActivated extends Component { + @service modal; + + @action + sendActivationEmail() { + resendActivationEmail(this.username).then(() => { + this.modal.show(ActivationResent, { + model: { currentEmail: this.args.model.currentEmail }, + }); + }); + } + + @action + editActivationEmail() { + this.modal.show(ActivationEdit, { + model: { + currentEmail: this.args.model.currentEmail, + newEmail: this.args.model.currentEmail, + }, + }); + } +} diff --git a/app/assets/javascripts/discourse/app/controllers/activation-edit.js b/app/assets/javascripts/discourse/app/controllers/activation-edit.js deleted file mode 100644 index a5e5e4562e1..00000000000 --- a/app/assets/javascripts/discourse/app/controllers/activation-edit.js +++ /dev/null @@ -1,37 +0,0 @@ -import Controller, { inject as controller } from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; -import { changeEmail } from "discourse/lib/user-activation"; -import discourseComputed from "discourse-common/utils/decorators"; -import { flashAjaxError } from "discourse/lib/ajax-error"; - -export default Controller.extend(ModalFunctionality, { - login: controller(), - - currentEmail: null, - newEmail: null, - password: null, - - @discourseComputed("newEmail", "currentEmail") - submitDisabled(newEmail, currentEmail) { - return newEmail === currentEmail; - }, - - actions: { - changeEmail() { - const login = this.login; - - changeEmail({ - username: login.get("loginName"), - password: login.get("loginPassword"), - email: this.newEmail, - }) - .then(() => { - const modal = this.showModal("activation-resent", { - title: "log_in", - }); - modal.set("currentEmail", this.newEmail); - }) - .catch(flashAjaxError(this)); - }, - }, -}); diff --git a/app/assets/javascripts/discourse/app/controllers/not-activated.js b/app/assets/javascripts/discourse/app/controllers/not-activated.js deleted file mode 100644 index bb9bfc67284..00000000000 --- a/app/assets/javascripts/discourse/app/controllers/not-activated.js +++ /dev/null @@ -1,24 +0,0 @@ -import Controller from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; -import { resendActivationEmail } from "discourse/lib/user-activation"; - -export default Controller.extend(ModalFunctionality, { - actions: { - sendActivationEmail() { - resendActivationEmail(this.username).then(() => { - const modal = this.showModal("activation-resent", { title: "log_in" }); - modal.set("currentEmail", this.currentEmail); - }); - }, - - editActivationEmail() { - const modal = this.showModal("activation-edit", { - title: "login.change_email", - }); - - const currentEmail = this.currentEmail; - modal.set("currentEmail", currentEmail); - modal.set("newEmail", currentEmail); - }, - }, -}); diff --git a/app/assets/javascripts/discourse/app/routes/application.js b/app/assets/javascripts/discourse/app/routes/application.js index 33c165e3583..a2fe0b99f50 100644 --- a/app/assets/javascripts/discourse/app/routes/application.js +++ b/app/assets/javascripts/discourse/app/routes/application.js @@ -13,8 +13,9 @@ import mobile from "discourse/lib/mobile"; import { inject as service } from "@ember/service"; import { setting } from "discourse/lib/computed"; import showModal from "discourse/lib/show-modal"; -import KeyboardShortcutsHelp from "discourse/components/modal/keyboard-shortcuts-help"; import { action } from "@ember/object"; +import KeyboardShortcutsHelp from "discourse/components/modal/keyboard-shortcuts-help"; +import NotActivatedModal from "../components/modal/not-activated"; function unlessReadOnly(method, message) { return function () { @@ -154,7 +155,7 @@ const ApplicationRoute = DiscourseRoute.extend(OpenComposer, { }, showNotActivated(props) { - showModal("not-activated", { title: "log_in" }).setProperties(props); + this.modal.show(NotActivatedModal, { model: props }); }, showUploadSelector() { diff --git a/app/assets/javascripts/discourse/app/templates/modal/activation-edit.hbs b/app/assets/javascripts/discourse/app/templates/modal/activation-edit.hbs deleted file mode 100644 index 2f3f0d0c78e..00000000000 --- a/app/assets/javascripts/discourse/app/templates/modal/activation-edit.hbs +++ /dev/null @@ -1,13 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/assets/javascripts/discourse/app/templates/modal/activation-resent.hbs b/app/assets/javascripts/discourse/app/templates/modal/activation-resent.hbs deleted file mode 100644 index 7400663115d..00000000000 --- a/app/assets/javascripts/discourse/app/templates/modal/activation-resent.hbs +++ /dev/null @@ -1,7 +0,0 @@ - - {{html-safe - (i18n "login.sent_activation_email_again" currentEmail=this.currentEmail) - }} - - - \ No newline at end of file diff --git a/app/assets/javascripts/discourse/app/templates/modal/not-activated.hbs b/app/assets/javascripts/discourse/app/templates/modal/not-activated.hbs deleted file mode 100644 index c88973280f6..00000000000 --- a/app/assets/javascripts/discourse/app/templates/modal/not-activated.hbs +++ /dev/null @@ -1,10 +0,0 @@ - - {{html-safe (i18n "login.not_activated" sentTo=this.sentTo)}} - - - \ No newline at end of file