import Component from "@glimmer/component"; import { tracked } from "@glimmer/tracking"; import { on } from "@ember/modifier"; import { action } from "@ember/object"; import { service } from "@ember/service"; import { htmlSafe } from "@ember/template"; import AsyncContent from "discourse/components/async-content"; import InterpolatedTranslation from "discourse/components/interpolated-translation"; import PostCookedHtml from "discourse/components/post/cooked-html"; import UserLink from "discourse/components/user-link"; import concatClass from "discourse/helpers/concat-class"; import icon from "discourse/helpers/d-icon"; import { ajax } from "discourse/lib/ajax"; import escape from "discourse/lib/escape"; import { formatUsername } from "discourse/lib/utilities"; import { i18n } from "discourse-i18n"; export default class SolvedAcceptedAnswer extends Component { @service siteSettings; @service store; @tracked expanded = false; get acceptedAnswer() { return this.topic.accepted_answer; } get quoteId() { return `accepted-answer-${this.topic.id}-${this.acceptedAnswer.post_number}`; } get topic() { return this.args.post.topic; } get hasExcerpt() { return !!this.acceptedAnswer.excerpt; } get htmlAccepter() { const username = this.acceptedAnswer.accepter_username; const name = this.acceptedAnswer.accepter_name; const formattedUsername = this.siteSettings.display_name_on_posts && name ? escape(name) : formatUsername(username); return htmlSafe( i18n("solved.marked_solved_by", { username: formattedUsername, username_lower: username.toLowerCase(), }) ); } get showMarkedBy() { return this.siteSettings.show_who_marked_solved; } get showSolvedBy() { return !(!this.acceptedAnswer.username || !this.acceptedAnswer.post_number); } get postNumber() { return i18n("solved.accepted_answer_post_number", { post_number: this.acceptedAnswer.post_number, }); } get solverUsername() { return this.acceptedAnswer.username; } get accepterUsername() { return this.acceptedAnswer.accepter_username; } get solverDisplayName() { const username = this.acceptedAnswer.username; const name = this.acceptedAnswer.name; return this.siteSettings.display_name_on_posts && name ? name : username; } get accepterDisplayName() { const username = this.acceptedAnswer.accepter_username; const name = this.acceptedAnswer.accepter_name; return this.siteSettings.display_name_on_posts && name ? name : username; } get postPath() { const postNumber = this.acceptedAnswer.post_number; return `${this.topic.url}/${postNumber}`; } @action toggleExpandedPost() { if (!this.hasExcerpt) { return; } this.expanded = !this.expanded; } @action async loadExpandedAcceptedAnswer(postNumber) { const acceptedAnswer = await ajax( `/posts/by_number/${this.topic.id}/${postNumber}` ); return this.store.createRecord("post", acceptedAnswer); } }