Skip to content

Commit

Permalink
dx: information on global search (#3123)
Browse files Browse the repository at this point in the history
* dx: information on global search

* render_error?
  • Loading branch information
Paul-Bob authored Aug 13, 2024
1 parent 71d6f61 commit 67ad979
Showing 1 changed file with 36 additions and 19 deletions.
55 changes: 36 additions & 19 deletions app/controllers/avo/search_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,7 @@ class SearchController < ApplicationController
before_action :set_resource, only: :show

def show
if resource.search_query.blank?
render_error _label: "Please configure the search for #{resource}",
_url: "https://docs.avohq.io/3.0/search.html#enable-search-for-a-resource"
else
render json: search_resources([resource])
end
render json: search_resources([resource])
rescue => error
render_error _label: error.message
end
Expand Down Expand Up @@ -44,6 +39,20 @@ def search_resources(resources)
end

def search_resource(resource)
key = resource.name.pluralize.downcase

# If search query is not defined return error in dev and nil otwherwise.
if resource.search_query.blank?
return nil unless render_error?

search_query_undefined = error_payload(
_label: "Please configure the search for #{resource}",
_url: "https://docs.avohq.io/3.0/search.html#enable-search-for-a-resource"
)

return [key, search_query_undefined]
end

query = Avo::ExecutionContext.new(
target: resource.search_query,
params: params,
Expand All @@ -65,7 +74,7 @@ def search_resource(resource)
count: results.count
}

[resource.name.pluralize.downcase, result_object]
[key, result_object]
end

# When searching in a `has_many` association and will scope out the records against the parent record.
Expand Down Expand Up @@ -182,23 +191,27 @@ def fetch_parent
parent_resource.find_record params[:via_reflection_id], params: params
end

def render_error(_label:, _url: "")
raise error unless Rails.env.development?
def render_error(...)
raise error unless render_error?

render json: {
error: {
header: "🚨 An error occurred during search 🚨",
help: "Please review and resolve the issue before deployment 🚨",
results: {
_label:,
_url:,
_error: true
},
count: 1
}
error: error_payload(...)
}, status: 500
end

def error_payload(_label:, _url: "")
{
header: "🚨 An error occurred during search 🚨",
help: "Please review and resolve the issue before deployment 🚨",
results: {
_label:,
_url:,
_error: true
},
count: 1
}
end

def search_results_count(resource)
if resource.search_results_count
Avo::ExecutionContext.new(
Expand Down Expand Up @@ -237,5 +250,9 @@ def parse_results(query, resource)

[results_count, results]
end

def render_error?
Rails.env.development?
end
end
end

0 comments on commit 67ad979

Please sign in to comment.