import Component from "@glimmer/component"; import { tracked } from "@glimmer/tracking"; import { action } from "@ember/object"; import { service } from "@ember/service"; import { htmlSafe } from "@ember/template"; import { and } from "truth-helpers"; import DButton from "discourse/components/d-button"; import icon from "discourse/helpers/d-icon"; import { ajax } from "discourse/lib/ajax"; import { popupAjaxError } from "discourse/lib/ajax-error"; import { formatUsername } from "discourse/lib/utilities"; import { i18n } from "discourse-i18n"; import DTooltip from "float-kit/components/d-tooltip"; export default class SolvedUnacceptAnswerButton extends Component { @service appEvents; @service siteSettings; @tracked saving = false; get solvedBy() { if (!this.siteSettings.show_who_marked_solved) { return; } const username = this.args.post.topic.accepted_answer.accepter_username; const name = this.args.post.topic.accepted_answer.accepter_name; const displayedName = this.siteSettings.display_name_on_posts && name ? name : formatUsername(username); if (this.args.post.topic.accepted_answer.accepter_username) { return i18n("solved.marked_solved_by", { username: displayedName, username_lower: username, }); } } @action async unacceptAnswer() { const post = this.args.post; this.saving = true; try { await unacceptPost(post); } finally { this.saving = false; } this.appEvents.trigger("discourse-solved:solution-toggled", post); // TODO (glimmer-post-stream) the Glimmer Post Stream does not listen to this event post.get("topic.postStream.posts").forEach((p) => { this.appEvents.trigger("post-stream:refresh", { id: p.id }); }); } } async function unacceptPost(post) { if (!post.can_accept_answer || !post.accepted_answer) { return; } const topic = post.topic; try { await ajax("/solution/unaccept", { type: "POST", data: { id: post.id }, }); topic.setAcceptedSolution(undefined); } catch (e) { popupAjaxError(e); } }