diff --git a/assets/javascripts/discourse/controllers/docs-index.js b/assets/javascripts/discourse/controllers/docs-index.js index 877abd8..8a8b65e 100644 --- a/assets/javascripts/discourse/controllers/docs-index.js +++ b/assets/javascripts/discourse/controllers/docs-index.js @@ -273,7 +273,10 @@ export default Controller.extend({ updateSelectedTags(tag) { let filter = this.filterTags; if (filter && filter.includes(tag.id)) { - filter = filter.replace(tag.id, "").replace(/^\|+|\|+$/g, ""); + filter = filter + .split("|") + .filter((f) => f !== tag.id) + .join("|"); } else if (filter) { filter = `${filter}|${tag.id}`; } else { diff --git a/test/javascripts/unit/controllers/docs-index-test.js b/test/javascripts/unit/controllers/docs-index-test.js index fc36b39..9f3471a 100644 --- a/test/javascripts/unit/controllers/docs-index-test.js +++ b/test/javascripts/unit/controllers/docs-index-test.js @@ -12,4 +12,31 @@ module("Unit | Controller | docs-index", function (hooks) { const controller = getOwner(this).lookup("controller:docs-index"); assert.deepEqual(controller.docsCategories, ["bug", "feature", "meta"]); }); + + test("updateSelectedTags correctly removes tags", function (assert) { + const controller = getOwner(this).lookup("controller:docs-index"); + controller.filterTags = "foo|bar|baz"; + + controller.updateSelectedTags({ id: "bar" }); + + assert.deepEqual(controller.filterTags, "foo|baz"); + }); + + test("updateSelectedTags correctly appends tags to list", function (assert) { + const controller = getOwner(this).lookup("controller:docs-index"); + controller.filterTags = "foo|bar"; + + controller.updateSelectedTags({ id: "baz" }); + + assert.deepEqual(controller.filterTags, "foo|bar|baz"); + }); + + test("updateSelectedTags correctly appends tags to empty list", function (assert) { + const controller = getOwner(this).lookup("controller:docs-index"); + controller.filterTags = null; + + controller.updateSelectedTags({ id: "foo" }); + + assert.deepEqual(controller.filterTags, "foo"); + }); });