Sam 933784a873
FEATURE: allow easy sharing of bot conversations (#385)
* FEATURE: allow easy sharing of bot conversations

* Lean on new core API i

* Added system spec for copy functionality


* Update assets/javascripts/initializers/ai-bot-replies.js

Co-authored-by: Alan Guo Xiang Tan <gxtan1990@gmail.com>

* discourse later insted of setTimeout

* Update spec/system/ai_bot/share_spec.rb

Co-authored-by: Alan Guo Xiang Tan <gxtan1990@gmail.com>

* feedback from review

just check the whole payload

* remove uneeded code

* fix spec

---------

Co-authored-by: Alan Guo Xiang Tan <gxtan1990@gmail.com>
2023-12-29 19:47:47 +11:00

56 lines
1.4 KiB
JavaScript

import { ajax } from "discourse/lib/ajax";
import { clipboardCopy } from "discourse/lib/utilities";
import I18n from "discourse-i18n";
export default async function (topic, fromPostNumber, toPostNumber) {
const stream = topic.get("postStream");
let postNumbers = [];
// simpler to understand than Array.from
for (let i = fromPostNumber; i <= toPostNumber; i++) {
postNumbers.push(i);
}
const postIds = postNumbers.map((postNumber) => {
return stream.findPostIdForPostNumber(postNumber);
});
// we need raw to construct so post stream will not help
const url = `/t/${topic.id}/posts.json`;
const data = {
post_ids: postIds,
include_raw: true,
};
const response = await ajax(url, { data });
let buffer = [];
buffer.push("<details class='ai-quote'>");
buffer.push("<summary>");
buffer.push(`<span>${topic.title}</span>`);
buffer.push(
`<span title='${I18n.t("discourse_ai.ai_bot.ai_title")}'>${I18n.t(
"discourse_ai.ai_bot.ai_label"
)}</span>`
);
buffer.push("</summary>");
response.post_stream.posts.forEach((post) => {
buffer.push("");
buffer.push(`**${post.username}:**`);
buffer.push("");
buffer.push(post.raw);
});
buffer.push("</details>");
const text = buffer.join("\n");
if (window.discourseAiTestClipboard) {
window.discourseAiClipboard = text;
}
await clipboardCopy(text);
}