mirror of
https://github.com/discourse/discourse.git
synced 2025-05-04 06:24:36 +08:00
DEV: Refactor Wizard routes, controllers and templates (#24725)
Extracted from https://github.com/discourse/discourse/pull/23678 Co-authored-by: Godfrey Chan <godfreykfc@gmail.com>
This commit is contained in:
parent
78c2f116e0
commit
b3d1707b65
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -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);
|
|
||||||
},
|
|
||||||
});
|
|
@ -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";
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,10 +1,11 @@
|
|||||||
import { inject as service } from "@ember/service";
|
import { inject as service } from "@ember/service";
|
||||||
import DiscourseRoute from "discourse/routes/discourse";
|
import DiscourseRoute from "discourse/routes/discourse";
|
||||||
|
|
||||||
export default DiscourseRoute.extend({
|
export default class WizardIndexRoute extends DiscourseRoute {
|
||||||
router: service(),
|
@service router;
|
||||||
|
|
||||||
beforeModel() {
|
beforeModel() {
|
||||||
const appModel = this.modelFor("wizard");
|
const wizard = this.modelFor("wizard");
|
||||||
this.router.replaceWith("wizard.step", appModel.start);
|
this.router.replaceWith("wizard.step", wizard.start);
|
||||||
},
|
}
|
||||||
});
|
}
|
||||||
|
@ -1,17 +1,17 @@
|
|||||||
|
import { inject as service } from "@ember/service";
|
||||||
import DiscourseRoute from "discourse/routes/discourse";
|
import DiscourseRoute from "discourse/routes/discourse";
|
||||||
|
|
||||||
export default DiscourseRoute.extend({
|
export default class WizardStepRoute extends DiscourseRoute {
|
||||||
|
@service router;
|
||||||
|
|
||||||
model(params) {
|
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");
|
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 };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -2,13 +2,13 @@ import Route from "@ember/routing/route";
|
|||||||
import DisableSidebar from "discourse/mixins/disable-sidebar";
|
import DisableSidebar from "discourse/mixins/disable-sidebar";
|
||||||
import Wizard from "wizard/models/wizard";
|
import Wizard from "wizard/models/wizard";
|
||||||
|
|
||||||
export default Route.extend(DisableSidebar, {
|
export default class WizardRoute extends Route.extend(DisableSidebar) {
|
||||||
model() {
|
model() {
|
||||||
return Wizard.load();
|
return Wizard.load();
|
||||||
},
|
}
|
||||||
|
|
||||||
activate() {
|
activate() {
|
||||||
this._super(...arguments);
|
super.activate(...arguments);
|
||||||
|
|
||||||
document.body.classList.add("wizard");
|
document.body.classList.add("wizard");
|
||||||
|
|
||||||
@ -16,10 +16,10 @@ export default Route.extend(DisableSidebar, {
|
|||||||
showTop: false,
|
showTop: false,
|
||||||
showSiteHeader: false,
|
showSiteHeader: false,
|
||||||
});
|
});
|
||||||
},
|
}
|
||||||
|
|
||||||
deactivate() {
|
deactivate() {
|
||||||
this._super(...arguments);
|
super.deactivate(...arguments);
|
||||||
|
|
||||||
document.body.classList.remove("wizard");
|
document.body.classList.remove("wizard");
|
||||||
|
|
||||||
@ -27,5 +27,5 @@ export default Route.extend(DisableSidebar, {
|
|||||||
showTop: true,
|
showTop: true,
|
||||||
showSiteHeader: true,
|
showSiteHeader: true,
|
||||||
});
|
});
|
||||||
},
|
}
|
||||||
});
|
}
|
||||||
|
52
app/assets/javascripts/wizard/addon/templates/step.gjs
Normal file
52
app/assets/javascripts/wizard/addon/templates/step.gjs
Normal file
@ -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;
|
||||||
|
|
||||||
|
<template>
|
||||||
|
{{#if this.showCanvas}}
|
||||||
|
<WizardCanvas />
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
<WizardStep
|
||||||
|
@step={{@model.step}}
|
||||||
|
@wizard={{@model.wizard}}
|
||||||
|
@goNext={{this.goNext}}
|
||||||
|
@goBack={{this.goBack}}
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
@ -1,6 +0,0 @@
|
|||||||
<WizardStep
|
|
||||||
@step={{this.step}}
|
|
||||||
@wizard={{this.wizard}}
|
|
||||||
@goNext={{action "goNext"}}
|
|
||||||
@goBack={{action "goBack"}}
|
|
||||||
/>
|
|
12
app/assets/javascripts/wizard/addon/templates/wizard.gjs
Normal file
12
app/assets/javascripts/wizard/addon/templates/wizard.gjs
Normal file
@ -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(<template>
|
||||||
|
{{hideApplicationFooter}}
|
||||||
|
<div id="wizard-main">
|
||||||
|
<DiscourseLogo />
|
||||||
|
|
||||||
|
{{outlet}}
|
||||||
|
</div>
|
||||||
|
</template>);
|
@ -1,12 +0,0 @@
|
|||||||
{{hide-application-footer}}
|
|
||||||
<div id="wizard-main">
|
|
||||||
{{#if this.showCanvas}}
|
|
||||||
<WizardCanvas />
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
<div class="discourse-logo">
|
|
||||||
<DiscourseLogo />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{outlet}}
|
|
||||||
</div>
|
|
@ -15,7 +15,8 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"ember-cli-babel": "^8.2.0",
|
"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": {
|
"devDependencies": {
|
||||||
"@babel/core": "^7.23.5",
|
"@babel/core": "^7.23.5",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user