diff --git a/app/javascript/gabsocial/reducers/search.js b/app/javascript/gabsocial/reducers/search.js index ec3191de..163b47a8 100644 --- a/app/javascript/gabsocial/reducers/search.js +++ b/app/javascript/gabsocial/reducers/search.js @@ -43,6 +43,7 @@ export default function search(state = initialState, action) { accounts: ImmutableList(action.results.accounts.map(item => item.id)), statuses: ImmutableList(action.results.statuses.map(item => item.id)), hashtags: fromJS(action.results.hashtags), + groups: fromJS(action.results.groups), })).set('submitted', true); default: return state; diff --git a/app/models/search.rb b/app/models/search.rb index 676c2a7f..fe5e1eb1 100644 --- a/app/models/search.rb +++ b/app/models/search.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true class Search < ActiveModelSerializers::Model - attributes :accounts, :statuses, :hashtags + attributes :accounts, :statuses, :hashtags, :groups end diff --git a/app/serializers/rest/search_serializer.rb b/app/serializers/rest/search_serializer.rb index 157f543a..769b0700 100644 --- a/app/serializers/rest/search_serializer.rb +++ b/app/serializers/rest/search_serializer.rb @@ -5,6 +5,7 @@ class REST::SearchSerializer < ActiveModel::Serializer has_many :accounts, serializer: REST::AccountSerializer has_many :statuses, serializer: REST::StatusSerializer + has_many :groups, serializer: REST::GroupSerializer def hashtags object.hashtags.map(&:name) diff --git a/app/serializers/rest/v2/search_serializer.rb b/app/serializers/rest/v2/search_serializer.rb index cdb6b3a5..61c531ea 100644 --- a/app/serializers/rest/v2/search_serializer.rb +++ b/app/serializers/rest/v2/search_serializer.rb @@ -4,4 +4,5 @@ class REST::V2::SearchSerializer < ActiveModel::Serializer has_many :accounts, serializer: REST::AccountSerializer has_many :statuses, serializer: REST::StatusSerializer has_many :hashtags, serializer: REST::TagSerializer + has_many :groups, serializer: REST::GroupSerializer end diff --git a/app/services/search_service.rb b/app/services/search_service.rb index e0da61da..50bd0543 100644 --- a/app/services/search_service.rb +++ b/app/services/search_service.rb @@ -16,6 +16,7 @@ class SearchService < BaseService results[:accounts] = perform_accounts_search! if account_searchable? results[:statuses] = perform_statuses_search! if full_text_searchable? results[:hashtags] = perform_hashtags_search! if hashtag_searchable? + results[:groups] = perform_groups_search! end end end @@ -32,6 +33,14 @@ class SearchService < BaseService ) end + def perform_groups_search! + Group.search_for( + @query.gsub(/\A#/, ''), + @limit, + @offset + ) + end + def perform_statuses_search! definition = StatusesIndex.filter(term: { searchable_by: @account.id }) .query(multi_match: { type: 'most_fields', query: @query, operator: 'and', fields: %w(text text.stemmed) })