DEV: Remove the legacy widget post menu code

This commit is contained in:
Sérgio Saquetim 2025-03-26 21:48:26 -03:00
parent 9e9ac2862c
commit 41dfa00d3a
No known key found for this signature in database
GPG Key ID: B4E3D7F11E793062
5 changed files with 21 additions and 128 deletions

View File

@ -19,7 +19,16 @@ export default class SolvedAcceptAnswerButton extends Component {
@action @action
acceptAnswer() { acceptAnswer() {
acceptAnswer(this.args.post, this.appEvents, this.currentUser); const post = this.args.post;
acceptPost(post, this.currentUser);
this.appEvents.trigger("discourse-solved:solution-toggled", post);
post.get("topic.postStream.posts").forEach((p) => {
p.set("topic_accepted_answer", true);
this.appEvents.trigger("post-stream:refresh", { id: p.id });
});
} }
<template> <template>
@ -34,17 +43,6 @@ export default class SolvedAcceptAnswerButton extends Component {
</template> </template>
} }
export function acceptAnswer(post, appEvents, acceptingUser) {
// TODO (glimmer-post-menu): Remove this exported function and move the code into the button action after the widget code is removed
acceptPost(post, acceptingUser);
appEvents.trigger("discourse-solved:solution-toggled", post);
post.get("topic.postStream.posts").forEach((p) => {
p.set("topic_accepted_answer", true);
appEvents.trigger("post-stream:refresh", { id: p.id });
});
}
function acceptPost(post, acceptingUser) { function acceptPost(post, acceptingUser) {
const topic = post.topic; const topic = post.topic;

View File

@ -10,18 +10,6 @@ import { formatUsername } from "discourse/lib/utilities";
import { i18n } from "discourse-i18n"; import { i18n } from "discourse-i18n";
import DTooltip from "float-kit/components/d-tooltip"; import DTooltip from "float-kit/components/d-tooltip";
export function unacceptAnswer(post, appEvents) {
// TODO (glimmer-post-menu): Remove this exported function and move the code into the button action after the widget code is removed
unacceptPost(post);
appEvents.trigger("discourse-solved:solution-toggled", post);
post.get("topic.postStream.posts").forEach((p) => {
p.set("topic_accepted_answer", false);
appEvents.trigger("post-stream:refresh", { id: p.id });
});
}
function unacceptPost(post) { function unacceptPost(post) {
if (!post.can_unaccept_answer) { if (!post.can_unaccept_answer) {
return; return;
@ -48,7 +36,16 @@ export default class SolvedUnacceptAnswerButton extends Component {
@action @action
unacceptAnswer() { unacceptAnswer() {
unacceptAnswer(this.args.post, this.appEvents); const post = this.args.post;
unacceptPost(post);
this.appEvents.trigger("discourse-solved:solution-toggled", post);
post.get("topic.postStream.posts").forEach((p) => {
p.set("topic_accepted_answer", false);
this.appEvents.trigger("post-stream:refresh", { id: p.id });
});
} }
get solvedBy() { get solvedBy() {

View File

@ -72,7 +72,7 @@ function initializeWithApi(api) {
} }
function customizePostMenu(api) { function customizePostMenu(api) {
const transformerRegistered = api.registerValueTransformer( api.registerValueTransformer(
"post-menu-buttons", "post-menu-buttons",
({ ({
value: dag, value: dag,
@ -109,59 +109,6 @@ function customizePostMenu(api) {
); );
} }
); );
const silencedKey =
transformerRegistered && "discourse.post-menu-widget-overrides";
withSilencedDeprecations(silencedKey, () => customizeWidgetPostMenu(api));
}
function customizeWidgetPostMenu(api) {
const currentUser = api.getCurrentUser();
api.addPostMenuButton("solved", (attrs) => {
if (attrs.can_accept_answer) {
const isOp = currentUser?.id === attrs.topicCreatedById;
return {
action: "acceptAnswer",
icon: "far-square-check",
className: "unaccepted",
title: "solved.accept_answer",
label: isOp ? "solved.solution" : null,
position: attrs.topic_accepted_answer ? "second-last-hidden" : "first",
};
} else if (attrs.accepted_answer) {
if (attrs.can_unaccept_answer) {
return {
action: "unacceptAnswer",
icon: "square-check",
title: "solved.unaccept_answer",
className: "accepted fade-out",
position: "first",
label: "solved.solution",
};
} else {
return {
className: "hidden",
disabled: "true",
position: "first",
beforeButton(h) {
return h(
"span.accepted-text",
{
title: i18n("solved.accepted_description"),
},
[
h("span", iconNode("check")),
h("span.accepted-label", i18n("solved.solution")),
]
);
},
};
}
}
});
} }
export default { export default {

View File

@ -10,7 +10,6 @@ acceptance(
needs.user({ admin: true }); needs.user({ admin: true });
needs.settings({ needs.settings({
glimmer_post_menu_mode: "enabled",
solved_enabled: true, solved_enabled: true,
allow_solved_on_all_topics: true, allow_solved_on_all_topics: true,
}); });

View File

@ -1,48 +0,0 @@
import { click, visit } from "@ember/test-helpers";
import { test } from "qunit";
import { acceptance } from "discourse/tests/helpers/qunit-helpers";
import { i18n } from "discourse-i18n";
import { postStreamWithAcceptedAnswerExcerpt } from "../helpers/discourse-solved-helpers";
acceptance(
"Discourse Solved | Widget Post Menu |Accept and Unaccept",
function (needs) {
needs.user({ admin: true });
needs.settings({
glimmer_post_menu_mode: "disabled",
solved_enabled: true,
allow_solved_on_all_topics: true,
});
needs.pretender((server, helper) => {
server.post("/solution/accept", () => helper.response({ success: "OK" }));
server.post("/solution/unaccept", () =>
helper.response({ success: "OK" })
);
server.get("/t/12.json", () =>
helper.response(postStreamWithAcceptedAnswerExcerpt(null))
);
});
test("accepting and unaccepting a post works", async function (assert) {
await visit("/t/without-excerpt/12");
assert
.dom("#post_2 .accepted")
.exists("Unaccept button is visible")
.hasText(i18n("solved.solution"), "Unaccept button has correct text");
await click("#post_2 .accepted");
assert.dom("#post_2 .unaccepted").exists("Accept button is visible");
await click("#post_2 .unaccepted");
assert
.dom("#post_2 .accepted")
.exists("Unaccept button is visible again");
});
}
);