FIX: ensures composer is not pre-filled with none/all tags (#16998)

This commit is contained in:
Joffrey JAFFEUX 2022-06-05 16:58:38 +02:00 committed by GitHub
parent 8a58ce6578
commit 42683d4874
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 74 additions and 11 deletions

View File

@ -18,6 +18,9 @@ import { setTopicList } from "discourse/lib/topic-list-tracker";
import showModal from "discourse/lib/show-modal";
import { action } from "@ember/object";
const NONE = "none";
const ALL = "all";
export default DiscourseRoute.extend(FilterModeMixin, {
navMode: "latest",
@ -52,7 +55,7 @@ export default DiscourseRoute.extend(FilterModeMixin, {
const filterType = this.navMode.split("/")[0];
let tagNotification;
if (tag && tag.id !== "none" && this.currentUser) {
if (tag && tag.id !== NONE && this.currentUser) {
// If logged in, we should get the tag's user settings
tagNotification = await this.store.find(
"tagNotification",
@ -68,7 +71,7 @@ export default DiscourseRoute.extend(FilterModeMixin, {
{}
);
const topicFilter = this.navMode;
const tagId = tag ? tag.id.toLowerCase() : "none";
const tagId = tag ? tag.id.toLowerCase() : NONE;
let filter;
if (category) {
@ -76,7 +79,7 @@ export default DiscourseRoute.extend(FilterModeMixin, {
filter = `tags/c/${Category.slugFor(category)}/${category.id}`;
if (this.noSubcategories !== undefined) {
filter += this.noSubcategories ? "/none" : "/all";
filter += this.noSubcategories ? `/${NONE}` : `/${ALL}`;
}
filter += `/${tagId}/l/${topicFilter}`;
@ -122,7 +125,7 @@ export default DiscourseRoute.extend(FilterModeMixin, {
setupController(controller, model) {
const noSubcategories =
this.noSubcategories === undefined
? model.category?.default_list_filter === "none"
? model.category?.default_list_filter === NONE
: this.noSubcategories;
this.controllerFor("tag.show").setProperties({
@ -196,13 +199,7 @@ export default DiscourseRoute.extend(FilterModeMixin, {
// Pre-fill the tags input field
if (composerController.canEditTags && controller.tag?.id) {
const composerModel = this.controllerFor("composer").model;
composerModel.set(
"tags",
[
controller.get("model.id"),
...makeArray(controller.additionalTags),
].filter(Boolean)
);
composerModel.set("tags", this._controllerTags(controller));
}
});
}
@ -242,4 +239,10 @@ export default DiscourseRoute.extend(FilterModeMixin, {
this.controllerFor("tag.show")._showFooter();
return true;
},
_controllerTags(controller) {
return [controller.get("model.id"), ...makeArray(controller.additionalTags)]
.filter(Boolean)
.filter((tag) => ![NONE, ALL].includes(tag));
},
});

View File

@ -567,6 +567,66 @@ acceptance(
}
);
acceptance("Tag show - create topic", function (needs) {
needs.user();
needs.site({ can_tag_topics: true });
needs.settings({
tagging_enabled: true,
tags_listed_by_group: true,
});
needs.pretender((server, helper) => {
server.get("/tag/:tag_name/notifications", (request) => {
return helper.response({
tag_notification: {
id: request.params.tag_name,
notification_level: 1,
},
});
});
server.get("/tag/:tag_name/l/latest.json", (request) => {
return helper.response({
users: [],
primary_groups: [],
topic_list: {
can_create_topic: true,
draft: null,
draft_key: "new_topic",
draft_sequence: 1,
per_page: 30,
tags: [
{
id: 1,
name: request.params.tag_name,
topic_count: 1,
},
],
topics: [],
},
});
});
});
test("composer will not set tags with all/none tags when creating topic", async function (assert) {
const composer = this.owner.lookup("controller:composer");
await visit("/tag/none");
await click("#create-topic");
assert.deepEqual(composer.model.tags, []);
await visit("/tag/all");
await click("#create-topic");
assert.deepEqual(composer.model.tags, []);
});
test("composer will set tags from selected tag", async function (assert) {
const composer = this.owner.lookup("controller:composer");
await visit("/tag/planters");
await click("#create-topic");
assert.deepEqual(composer.model.tags, ["planters"]);
});
});
acceptance("Tag show - topic list without `more_topics_url`", function (needs) {
needs.pretender((server, helper) => {
server.get("/tag/:tagName/l/latest.json", () =>