mirror of
https://github.com/discourse/discourse-ai.git
synced 2025-03-03 15:59:59 +00:00
* 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>
56 lines
1.4 KiB
JavaScript
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);
|
|
}
|