Skip to content

Commit

Permalink
Merge pull request #286 from paviliondev/remove_bootbox
Browse files Browse the repository at this point in the history
Remove bootbox
  • Loading branch information
jumagura authored Feb 23, 2024
2 parents d42bddf + 996f953 commit 895ee9d
Show file tree
Hide file tree
Showing 8 changed files with 70 additions and 42 deletions.
25 changes: 2 additions & 23 deletions assets/javascripts/discourse/components/custom-wizard-step.js.es6
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import discourseComputed, { observes } from "discourse-common/utils/decorators";
import Component from "@ember/component";
import I18n from "I18n";
import getUrl from "discourse-common/lib/get-url";
import { htmlSafe } from "@ember/template";
import { schedule } from "@ember/runloop";
Expand All @@ -11,8 +10,6 @@ import CustomWizard, {
import { alias, not } from "@ember/object/computed";
import discourseLater from "discourse-common/lib/later";

const alreadyWarned = {};

export default Component.extend({
classNameBindings: [":wizard-step", "step.id"],
saving: null,
Expand Down Expand Up @@ -197,27 +194,9 @@ export default Component.extend({
return;
}

const step = this.step;
const result = step.validate();

if (result.warnings.length) {
const unwarned = result.warnings.filter((w) => !alreadyWarned[w]);
if (unwarned.length) {
unwarned.forEach((w) => (alreadyWarned[w] = true));
return window.bootbox.confirm(
unwarned.map((w) => I18n.t(`wizard.${w}`)).join("\n"),
I18n.t("no_value"),
I18n.t("yes_value"),
(confirmed) => {
if (confirmed) {
this.advance();
}
}
);
}
}
this.step.validate();

if (step.get("valid")) {
if (this.step.get("valid")) {
this.advance();
} else {
this.autoFocus();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ export default EmberObject.extend(ValidState, {
type: null,
value: null,
required: null,
warning: null,

@discourseComputed("wizardId", "stepId", "id")
i18nKey(wizardId, stepId, id) {
Expand Down
7 changes: 0 additions & 7 deletions assets/javascripts/discourse/models/custom-wizard-step.js.es6
Original file line number Diff line number Diff line change
Expand Up @@ -35,19 +35,12 @@ export default EmberObject.extend(ValidState, {

validate() {
let allValid = true;
const result = { warnings: [] };

this.fields.forEach((field) => {
allValid = allValid && field.check();
const warning = field.get("warning");
if (warning) {
result.warnings.push(warning);
}
});

this.setValid(allValid);

return result;
},

fieldError(id, description) {
Expand Down
5 changes: 3 additions & 2 deletions assets/javascripts/discourse/models/custom-wizard.js.es6
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import discourseComputed from "discourse-common/utils/decorators";
import getUrl from "discourse-common/lib/get-url";
import CustomWizardField from "./custom-wizard-field";
import CustomWizardStep from "./custom-wizard-step";
import DiscourseURL from "discourse/lib/url";

const CustomWizard = EmberObject.extend({
@discourseComputed("steps.length")
Expand Down Expand Up @@ -34,7 +35,7 @@ CustomWizard.reopenClass({
restart(wizardId) {
ajax({ url: `/w/${wizardId}/skip`, type: "PUT" })
.then(() => {
window.location.href = `/w/${wizardId}`;
DiscourseURL.redirectTo(getUrl(`/w/${wizardId}`));
})
.catch(popupAjaxError);
},
Expand All @@ -44,7 +45,7 @@ CustomWizard.reopenClass({
if (result.redirect_on_complete) {
url = result.redirect_on_complete;
}
window.location.href = getUrl(url);
DiscourseURL.redirectTo(getUrl(url));
},

build(wizardJson) {
Expand Down
12 changes: 5 additions & 7 deletions assets/javascripts/discourse/routes/custom-wizard.js.es6
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import { findCustomWizard, updateCachedWizard } from "../models/custom-wizard";
import I18n from "I18n";
import DiscourseRoute from "discourse/routes/discourse";
import bootbox from "bootbox";
import { inject as service } from "@ember/service";

export default DiscourseRoute.extend({
dialog: service(),

titleToken() {
const wizard = this.modelFor("custom-wizard");
return wizard ? wizard.name || wizard.id : I18n.t("wizard.custom_title");
Expand All @@ -30,7 +32,7 @@ export default DiscourseRoute.extend({
{
label: I18n.t("wizard.incomplete_submission.restart"),
class: "btn btn-default",
callback: () => {
action: () => {
wizardModel.restart();
},
},
Expand All @@ -40,11 +42,7 @@ export default DiscourseRoute.extend({
},
];

const options = {
onEscape: false,
};

bootbox.dialog(title, buttons, options);
this.dialog.dialog({ title, buttons, type: "confirm" });
},

afterModel(model) {
Expand Down
2 changes: 1 addition & 1 deletion plugin.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# frozen_string_literal: true
# name: discourse-custom-wizard
# about: Forms for Discourse. Better onboarding, structured posting, data enrichment, automated actions and much more.
# version: 2.6.2
# version: 2.6.3
# authors: Angus McLeod, Faizaan Gagan, Robert Barrow, Keegan George, Kaitlin Maddever, Juan Marcos Gutierrez Ramos
# url: https://github.com/paviliondev/discourse-custom-wizard
# contact_emails: [email protected]
Expand Down
55 changes: 54 additions & 1 deletion test/javascripts/acceptance/wizard-test.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { visit } from "@ember/test-helpers";
import { click, visit } from "@ember/test-helpers";
import { test } from "qunit";
import {
acceptance,
Expand All @@ -12,9 +12,12 @@ import {
wizardGuest,
wizardNoUser,
wizardNotPermitted,
wizardResumeOnRevisit,
} from "../helpers/wizard";
import DiscourseURL from "discourse/lib/url";
import sinon from "sinon";
import pretender, { response } from "discourse/tests/helpers/create-pretender";
import I18n from "I18n";

acceptance("Wizard | Not logged in", function (needs) {
needs.pretender((server, helper) => {
Expand Down Expand Up @@ -194,3 +197,53 @@ acceptance("Wizard | Guest access", function (needs) {
assert.strictEqual($("body.custom-wizard").length, 0);
});
});

acceptance("Wizard | Resume on revisit", function (needs) {
needs.user();

test("Shows dialog", async function (assert) {
pretender.get("/w/wizard.json", () => {
return response(wizardResumeOnRevisit);
});

await visit("/w/wizard");

assert.strictEqual(count(".dialog-content:visible"), 1);
assert.strictEqual(
query(".dialog-header h3").textContent.trim(),
I18n.t("wizard.incomplete_submission.title", {
date: moment(wizardResumeOnRevisit.submission_last_updated_at).format(
"MMMM Do YYYY"
),
})
);
});

test("Resumes when resumed", async function (assert) {
pretender.get("/w/wizard.json", () => {
return response(wizardResumeOnRevisit);
});
await visit("/w/wizard");
await click(".dialog-footer .btn-primary");
assert.strictEqual(count(".dialog-content:visible"), 0);
});

test("Restarts when restarted", async function (assert) {
sinon.stub(DiscourseURL, "redirectTo");
let skips = 0;
pretender.get("/w/wizard.json", () => {
return response(wizardResumeOnRevisit);
});
pretender.put("/w/wizard/skip", () => {
skips++;
return response({});
});
await visit("/w/wizard");
await click(".dialog-footer .btn-default");
assert.strictEqual(skips, 1);
assert.ok(
DiscourseURL.redirectTo.calledWith("/w/wizard"),
"resuming wizard works"
);
});
});
5 changes: 5 additions & 0 deletions test/javascripts/helpers/wizard.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@ wizard.resume_on_revisit = false;
wizard.submission_last_updated_at = "2022-03-11T20:00:18+01:00";
wizard.subscribed = false;

const wizardResumeOnRevisit = cloneJSON(wizard);
wizardResumeOnRevisit.start = "step_2";
wizardResumeOnRevisit.resume_on_revisit = true;

const stepNotPermitted = cloneJSON(wizard);
stepNotPermitted.steps[0].permitted = false;

Expand All @@ -44,6 +48,7 @@ export {
wizardNotPermitted,
wizardCompleted,
wizardGuest,
wizardResumeOnRevisit,
stepNotPermitted,
allFieldsWizard,
wizard,
Expand Down

0 comments on commit 895ee9d

Please sign in to comment.