diff --git a/app/assets/javascripts/wizard/addon/components/discourse-logo.gjs b/app/assets/javascripts/wizard/addon/components/discourse-logo.gjs
new file mode 100644
index 00000000000..1e61913b70d
--- /dev/null
+++ b/app/assets/javascripts/wizard/addon/components/discourse-logo.gjs
@@ -0,0 +1,27 @@
+
+ {{! prettier-ignore }}
+
+
+
+
diff --git a/app/assets/javascripts/wizard/addon/components/discourse-logo.hbs b/app/assets/javascripts/wizard/addon/components/discourse-logo.hbs
deleted file mode 100644
index e1218bbdee3..00000000000
--- a/app/assets/javascripts/wizard/addon/components/discourse-logo.hbs
+++ /dev/null
@@ -1,23 +0,0 @@
-{{! prettier-ignore }}
-
\ No newline at end of file
diff --git a/app/assets/javascripts/wizard/addon/controllers/wizard-step.js b/app/assets/javascripts/wizard/addon/controllers/wizard-step.js
deleted file mode 100644
index 6ccd04fed59..00000000000
--- a/app/assets/javascripts/wizard/addon/controllers/wizard-step.js
+++ /dev/null
@@ -1,29 +0,0 @@
-import Controller from "@ember/controller";
-import { action } from "@ember/object";
-import { inject as service } from "@ember/service";
-import getUrl from "discourse-common/lib/get-url";
-
-export default Controller.extend({
- router: service(),
-
- wizard: null,
- step: null,
-
- @action
- goNext(response) {
- const next = this.step.next;
-
- if (response?.refresh_required) {
- document.location = getUrl(`/wizard/steps/${next}`);
- } else if (response?.success && next) {
- this.router.transitionTo("wizard.step", next);
- } else if (response?.success) {
- this.router.transitionTo("discovery.latest");
- }
- },
-
- @action
- goBack() {
- this.router.transitionTo("wizard.step", this.step.previous);
- },
-});
diff --git a/app/assets/javascripts/wizard/addon/controllers/wizard.js b/app/assets/javascripts/wizard/addon/controllers/wizard.js
deleted file mode 100644
index e7ec5bf4789..00000000000
--- a/app/assets/javascripts/wizard/addon/controllers/wizard.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import Controller, { inject as controller } from "@ember/controller";
-
-export default class extends Controller {
- @controller wizardStep;
- get showCanvas() {
- return this.wizardStep.get("step.id") === "ready";
- }
-}
diff --git a/app/assets/javascripts/wizard/addon/routes/wizard-index.js b/app/assets/javascripts/wizard/addon/routes/wizard-index.js
index dfb521b7551..13263b139b9 100644
--- a/app/assets/javascripts/wizard/addon/routes/wizard-index.js
+++ b/app/assets/javascripts/wizard/addon/routes/wizard-index.js
@@ -1,10 +1,11 @@
import { inject as service } from "@ember/service";
import DiscourseRoute from "discourse/routes/discourse";
-export default DiscourseRoute.extend({
- router: service(),
+export default class WizardIndexRoute extends DiscourseRoute {
+ @service router;
+
beforeModel() {
- const appModel = this.modelFor("wizard");
- this.router.replaceWith("wizard.step", appModel.start);
- },
-});
+ const wizard = this.modelFor("wizard");
+ this.router.replaceWith("wizard.step", wizard.start);
+ }
+}
diff --git a/app/assets/javascripts/wizard/addon/routes/wizard-step.js b/app/assets/javascripts/wizard/addon/routes/wizard-step.js
index 76d78bc44d9..ae0a67e051d 100644
--- a/app/assets/javascripts/wizard/addon/routes/wizard-step.js
+++ b/app/assets/javascripts/wizard/addon/routes/wizard-step.js
@@ -1,17 +1,17 @@
+import { inject as service } from "@ember/service";
import DiscourseRoute from "discourse/routes/discourse";
-export default DiscourseRoute.extend({
+export default class WizardStepRoute extends DiscourseRoute {
+ @service router;
+
model(params) {
- const allSteps = this.modelFor("wizard").steps;
- const step = allSteps.findBy("id", params.step_id);
-
- return step || allSteps[0];
- },
-
- setupController(controller, step) {
const wizard = this.modelFor("wizard");
- this.controllerFor("wizard").set("currentStepId", step.id);
+ const step = wizard.findStep(params.step_id);
- controller.setProperties({ step, wizard });
- },
-});
+ if (!step) {
+ this.router.transitionTo("wizard.step", wizard.start);
+ }
+
+ return { wizard, step };
+ }
+}
diff --git a/app/assets/javascripts/wizard/addon/routes/wizard.js b/app/assets/javascripts/wizard/addon/routes/wizard.js
index 49c92605d20..c78c766adb5 100644
--- a/app/assets/javascripts/wizard/addon/routes/wizard.js
+++ b/app/assets/javascripts/wizard/addon/routes/wizard.js
@@ -2,13 +2,13 @@ import Route from "@ember/routing/route";
import DisableSidebar from "discourse/mixins/disable-sidebar";
import Wizard from "wizard/models/wizard";
-export default Route.extend(DisableSidebar, {
+export default class WizardRoute extends Route.extend(DisableSidebar) {
model() {
return Wizard.load();
- },
+ }
activate() {
- this._super(...arguments);
+ super.activate(...arguments);
document.body.classList.add("wizard");
@@ -16,10 +16,10 @@ export default Route.extend(DisableSidebar, {
showTop: false,
showSiteHeader: false,
});
- },
+ }
deactivate() {
- this._super(...arguments);
+ super.deactivate(...arguments);
document.body.classList.remove("wizard");
@@ -27,5 +27,5 @@ export default Route.extend(DisableSidebar, {
showTop: true,
showSiteHeader: true,
});
- },
-});
+ }
+}
diff --git a/app/assets/javascripts/wizard/addon/templates/step.gjs b/app/assets/javascripts/wizard/addon/templates/step.gjs
new file mode 100644
index 00000000000..2b9d28b5137
--- /dev/null
+++ b/app/assets/javascripts/wizard/addon/templates/step.gjs
@@ -0,0 +1,52 @@
+import Component from "@glimmer/component";
+import { action } from "@ember/object";
+import { inject as service } from "@ember/service";
+import RouteTemplate from "ember-route-template";
+import getUrl from "discourse-common/lib/get-url";
+import WizardCanvas from "../components/wizard-canvas";
+import WizardStep from "../components/wizard-step";
+
+export default RouteTemplate(
+ class extends Component {
+ @service router;
+
+
+ {{#if this.showCanvas}}
+
+ {{/if}}
+
+
+
+
+ get step() {
+ return this.args.model.step;
+ }
+
+ get showCanvas() {
+ return this.step.id === "ready";
+ }
+
+ @action
+ goNext(response) {
+ const next = this.step.next;
+
+ if (response?.refresh_required) {
+ document.location = getUrl(`/wizard/steps/${next}`);
+ } else if (response?.success && next) {
+ this.router.transitionTo("wizard.step", next);
+ } else if (response?.success) {
+ this.router.transitionTo("discovery.latest");
+ }
+ }
+
+ @action
+ goBack() {
+ this.router.transitionTo("wizard.step", this.step.previous);
+ }
+ }
+);
diff --git a/app/assets/javascripts/wizard/addon/templates/step.hbs b/app/assets/javascripts/wizard/addon/templates/step.hbs
deleted file mode 100644
index 4fad85a8287..00000000000
--- a/app/assets/javascripts/wizard/addon/templates/step.hbs
+++ /dev/null
@@ -1,6 +0,0 @@
-
\ No newline at end of file
diff --git a/app/assets/javascripts/wizard/addon/templates/wizard.gjs b/app/assets/javascripts/wizard/addon/templates/wizard.gjs
new file mode 100644
index 00000000000..1b35aa10bc2
--- /dev/null
+++ b/app/assets/javascripts/wizard/addon/templates/wizard.gjs
@@ -0,0 +1,12 @@
+import RouteTemplate from "ember-route-template";
+import hideApplicationFooter from "discourse/helpers/hide-application-footer";
+import DiscourseLogo from "../components/discourse-logo";
+
+export default RouteTemplate(
+ {{hideApplicationFooter}}
+
+
+
+ {{outlet}}
+
+);
diff --git a/app/assets/javascripts/wizard/addon/templates/wizard.hbs b/app/assets/javascripts/wizard/addon/templates/wizard.hbs
deleted file mode 100644
index 2374d33e10d..00000000000
--- a/app/assets/javascripts/wizard/addon/templates/wizard.hbs
+++ /dev/null
@@ -1,12 +0,0 @@
-{{hide-application-footer}}
-
- {{#if this.showCanvas}}
-
- {{/if}}
-
-
-
-
-
- {{outlet}}
-
\ No newline at end of file
diff --git a/app/assets/javascripts/wizard/package.json b/app/assets/javascripts/wizard/package.json
index 252feb74ce3..200ba7f774e 100644
--- a/app/assets/javascripts/wizard/package.json
+++ b/app/assets/javascripts/wizard/package.json
@@ -15,7 +15,8 @@
},
"dependencies": {
"ember-cli-babel": "^8.2.0",
- "ember-cli-htmlbars": "^6.3.0"
+ "ember-cli-htmlbars": "^6.3.0",
+ "ember-template-imports": "^4.0.0"
},
"devDependencies": {
"@babel/core": "^7.23.5",