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