mirror of
https://github.com/discourse/discourse.git
synced 2025-05-22 07:53:49 +08:00
FEATURE: Allow showing hashtag autocomplete results without term (#19219)
This commit allows us to type # in the UI and present autocomplete results immediately with the following logic for the topic composer, and reversed for the chat composer: * Categories the user can access and has not muted sorted by `topic_count` * Tags the user can access and has not muted sorted by `topic_count` * Chat channels the user is a member of sorted by `messages_count` So in effect, we allow searching for hashtags without a search term. To do this we add a new `search_without_term` to each data source so each one can define how it wants to handle this logic.
This commit is contained in:
@ -44,4 +44,27 @@ class Chat::ChatChannelHashtagDataSource
|
||||
def self.search_sort(search_results, _)
|
||||
search_results.sort_by { |result| result.text.downcase }
|
||||
end
|
||||
|
||||
def self.search_without_term(guardian, limit)
|
||||
if SiteSetting.enable_experimental_hashtag_autocomplete
|
||||
allowed_channel_ids_sql =
|
||||
Chat::ChatChannelFetcher.generate_allowed_channel_ids_sql(
|
||||
guardian,
|
||||
exclude_dm_channels: true,
|
||||
)
|
||||
ChatChannel
|
||||
.joins(
|
||||
"INNER JOIN user_chat_channel_memberships
|
||||
ON user_chat_channel_memberships.chat_channel_id = chat_channels.id
|
||||
AND user_chat_channel_memberships.user_id = #{guardian.user.id}
|
||||
AND user_chat_channel_memberships.following = true",
|
||||
)
|
||||
.where("chat_channels.id IN (#{allowed_channel_ids_sql})")
|
||||
.order(messages_count: :desc)
|
||||
.limit(limit)
|
||||
.map { |channel| channel_to_hashtag_item(guardian, channel) }
|
||||
else
|
||||
[]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
Reference in New Issue
Block a user