Skip to content
This repository was archived by the owner on Jul 22, 2025. It is now read-only.

Commit 5a581e2

Browse files
markvanlanjanzenisaac
authored andcommitted
FEATURE: Infinite scroll in sidebar (#1270)
1 parent 7ec1453 commit 5a581e2

File tree

5 files changed

+196
-123
lines changed

5 files changed

+196
-123
lines changed

app/controllers/discourse_ai/ai_bot/conversations_controller.rb

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,38 @@ class ConversationsController < ::ApplicationController
77
requires_login
88

99
def index
10-
# Step 1: Retrieve all AI bot user IDs
10+
page = params[:page]&.to_i || 0
11+
per_page = params[:per_page]&.to_i || 40
12+
1113
bot_user_ids = EntryPoint.all_bot_ids
1214

13-
# Step 2: Query for PM topics including current_user and any bot ID
1415
pms =
1516
Topic
1617
.private_messages_for_user(current_user)
1718
.joins(:topic_users)
1819
.where(topic_users: { user_id: bot_user_ids })
1920
.distinct
21+
.order(last_posted_at: :desc)
22+
.offset(page * per_page)
23+
.limit(per_page)
2024

21-
# Step 3: Serialize (empty array if no results)
22-
serialized_pms = serialize_data(pms, BasicTopicSerializer)
25+
total =
26+
Topic
27+
.private_messages_for_user(current_user)
28+
.joins(:topic_users)
29+
.where(topic_users: { user_id: bot_user_ids })
30+
.distinct
31+
.count
2332

24-
render json: serialized_pms, status: 200
33+
render json: {
34+
conversations: serialize_data(pms, BasicTopicSerializer),
35+
meta: {
36+
total: total,
37+
page: page,
38+
per_page: per_page,
39+
more: total > (page + 1) * per_page,
40+
},
41+
}
2542
end
2643
end
2744
end
Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,3 @@
1-
import { service } from "@ember/service";
21
import DiscourseRoute from "discourse/routes/discourse";
32

4-
export default class DiscourseAiBotConversationsRoute extends DiscourseRoute {
5-
@service aiConversationsSidebarManager;
6-
7-
activate() {
8-
super.activate(...arguments);
9-
this.aiConversationsSidebarManager.forceCustomSidebar();
10-
}
11-
12-
deactivate() {
13-
super.deactivate(...arguments);
14-
this.aiConversationsSidebarManager.stopForcingCustomSidebar();
15-
}
16-
}
3+
export default class DiscourseAiBotConversationsRoute extends DiscourseRoute {}

assets/javascripts/discourse/services/ai-bot-conversations-hidden-submit.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,21 +37,24 @@ export default class AiBotConversationsHiddenSubmit extends Service {
3737
// borrowed from ai-bot-helper.js
3838
const draftKey = "new_private_message_ai_" + new Date().getTime();
3939

40-
const personaWithUsername = this.currentUser.ai_enabled_personas.find(
40+
// For now.. find a persona with a username..
41+
const selectedPersona = this.currentUser.ai_enabled_personas.find(
4142
(persona) => persona.username
4243
);
4344

4445
// this is a total hack, the composer is hidden on the homepage with CSS
4546
await this.composer.open({
4647
action: Composer.PRIVATE_MESSAGE,
4748
draftKey,
48-
recipients: personaWithUsername.username,
49+
recipients: selectedPersona.username,
4950
topicTitle: i18n("discourse_ai.ai_bot.default_pm_prefix"),
5051
topicBody: this.inputValue,
5152
archetypeId: "private_message",
5253
disableDrafts: true,
5354
});
5455

56+
this.composer.model.metaData = { ai_persona_id: selectedPersona.id };
57+
5558
try {
5659
await this.composer.save();
5760
if (this.inputValue.length > 10) {

0 commit comments

Comments
 (0)