From dd142eec035c8ff95d6cb3d26f5d0a4a35b52d99 Mon Sep 17 00:00:00 2001 From: Guo Xiang Tan Date: Tue, 19 Mar 2019 16:07:50 +0800 Subject: [PATCH] UX: Don't reload page after saving settings when editing category. --- .../controllers/edit-category.js.es6 | 30 +++++++++++-------- .../acceptance/category-edit-test.js.es6 | 28 ++++++++++++----- 2 files changed, 38 insertions(+), 20 deletions(-) diff --git a/app/assets/javascripts/discourse/controllers/edit-category.js.es6 b/app/assets/javascripts/discourse/controllers/edit-category.js.es6 index d474c9b6e51..d2fa1aeac12 100644 --- a/app/assets/javascripts/discourse/controllers/edit-category.js.es6 +++ b/app/assets/javascripts/discourse/controllers/edit-category.js.es6 @@ -64,29 +64,33 @@ export default Ember.Controller.extend(ModalFunctionality, { actions: { saveCategory() { - const self = this, - model = this.get("model"), - parentCategory = this.site - .get("categories") - .findBy("id", parseInt(model.get("parent_category_id"), 10)); + const model = this.get("model"); + + const parentCategory = this.site + .get("categories") + .findBy("id", parseInt(model.get("parent_category_id"), 10)); this.set("saving", true); model.set("parentCategory", parentCategory); - this.get("model") + model .save() - .then(function(result) { - self.set("saving", false); - self.send("closeModal"); + .then(result => { + this.set("saving", false); + model.setProperties({ slug: result.category.slug, id: result.category.id }); - DiscourseURL.redirectTo("/c/" + Discourse.Category.slugFor(model)); + + if (this.get("selectedTab") !== "settings") { + this.send("closeModal"); + DiscourseURL.redirectTo("/c/" + Discourse.Category.slugFor(model)); + } }) - .catch(function(error) { - self.flash(extractError(error), "error"); - self.set("saving", false); + .catch(error => { + this.flash(extractError(error), "error"); + this.set("saving", false); }); }, diff --git a/test/javascripts/acceptance/category-edit-test.js.es6 b/test/javascripts/acceptance/category-edit-test.js.es6 index 968fb58f572..18a7410c18d 100644 --- a/test/javascripts/acceptance/category-edit-test.js.es6 +++ b/test/javascripts/acceptance/category-edit-test.js.es6 @@ -3,7 +3,17 @@ import { acceptance } from "helpers/qunit-helpers"; acceptance("Category Edit", { loggedIn: true, - settings: { email_in: true } + settings: { email_in: true }, + pretend(server, helper) { + server.post("/categories", () => { + return helper.response({ + category: { + slug: "bug", + id: 999 + } + }); + }); + } }); QUnit.test("Can open the category modal", async assert => { @@ -18,21 +28,25 @@ QUnit.test("Can open the category modal", async assert => { QUnit.test("Editing the category", async assert => { await visit("/c/bug"); - await click(".edit-category"); - await fillIn("#edit-text-color", "#ff0000"); - await click(".edit-category-topic-template"); - await fillIn(".d-editor-input", "this is the new topic template"); - - await click(".edit-category-settings"); + await click(".edit-category-settings a"); const searchPriorityChooser = selectKit("#category-search-priority"); await searchPriorityChooser.expand(); await searchPriorityChooser.selectRowByValue(1); + await click("#save-category"); + assert.ok(visible(".d-modal"), "it does not close the modal"); + + await click(".edit-category-general a"); + await fillIn("#edit-text-color", "#ff0000"); + + await click(".edit-category-topic-template a"); + await fillIn(".d-editor-input", "this is the new topic template"); await click("#save-category"); assert.ok(!visible(".d-modal"), "it closes the modal"); + assert.equal( DiscourseURL.redirectedTo, "/c/bug",