Class: MenusController
- Inherits:
-
CrmController
- Object
- ActionController::Base
- ApplicationController
- CrmController
- MenusController
- Defined in:
- app/controllers/menus_controller.rb
Overview
CRM sidebar menu fragments: lazy-loaded sections, the "load more" Turbo
Frame swap, and the command-palette search-data JSON.
Constant Summary
Constants included from Controllers::ReferenceFindable
Controllers::ReferenceFindable::ID_EMBEDDED_PATTERNS
Constants included from Controllers::AnalyticsEvents
Controllers::AnalyticsEvents::MAX_QUEUED_EVENTS, Controllers::AnalyticsEvents::SESSION_KEY
Constants included from Controllers::ErrorRendering
Controllers::ErrorRendering::NON_CONTENT_PATH_PREFIXES
Instance Method Summary collapse
-
#advanced_search ⇒ void
Renders the "advanced search" menu section, grouped by search type.
-
#blank ⇒ void
Renders nothing — a placeholder target for sidebar sections with no content yet.
-
#load_section ⇒ void
Renders a sidebar menu section partial as a Turbo Frame swap, gating
section/targetagainst strict character allowlists since they're used to build a partial path. -
#search_data ⇒ void
Serves the flattened, searchable menu-item index (for the CRM command palette) as JSON.
-
#show ⇒ void
Renders the default menu view.
Methods inherited from CrmController
#access_denied, #context_id, #context_object, #crm_home_path, #current_ability, #default_url_options, #download_temp, #get_tempfile_path_for_download, #init_status_job_collector, #initialize_crm_lazy_chunks, #persist_enqueued_status_jobs, #record_not_found, #redirect_to_job_or_fallback, #render_edit_action, #set_context, #set_download_path, #stash_file_for_temp_download, #sync_admin_presence_cookie, #touch_employee_last_seen
Methods inherited from ApplicationController
#account_impersonated?, #add_to_flash, #after_sign_in_path_for, #bypass_forgery_protection?, #chat_enabled?, #cloudflare_cleared?, #default_catalog, #default_url_options, #enable_turbo_frames, #find_publication, #fix_invalid_accept_header, #init_js_utils, #is_globals_call?, #layout_by_resource, #locale_store, #redirect_to, #require_employee_for_crm, #set_base_host, #set_real_ip, #set_report_errors_for, #should_render_layout?, #skip_layout_for_turbo_frame?, #stamp_impersonation_context, #tab_frame_breakout_request?, #warmlyyours_canada_ip?, #warmlyyours_ip?, #y
Methods included from Controllers::ReturnPathHandling
#check_for_return_path, #redirect_to_return_path_or_default
Methods included from Controllers::AnalyticsEvents
#consume_queued_analytics_events, #registration_lead_type, #track_event
Methods included from Controllers::DeviceDetection
Methods included from Controllers::SubdomainDetection
#is_crm_request?, #is_www_request?, #json_request?
Methods included from Controllers::TurboSafeRedirect
Methods included from Controllers::TrackingDetection
#bot_request?, #gdpr_country?, #gdpr_country_data, #prevent_bots, #set_tracking_cookie, #track_visitor?
Methods included from Controllers::AcceleratedFileSending
#send_file_accelerated, #send_upload_accelerated
Methods included from Controllers::ErrorRendering
#excp_string, #mail_to_for_error_reporting, #render_400, #render_404, #render_406, #render_410, #render_500, #render_invalid_authenticity_token, #render_ip_spoof_error, #render_unpermitted_parameters, #safe_referer_or_fallback
Methods included from Controllers::TurnstileVerification
#load_turnstile_script_tag, #turnstile_lazy_widget, #turnstile_script_tag, #turnstile_widget, #validate_turnstile!
Methods included from Controllers::CloudflareCaching
edge_cached, #edge_cached_action?, #reset_cloudflare_cache, #set_cloudflare_cache, #skip_edge_cache!, #skip_session
Methods included from Controllers::Webpackable
#preload_webpack_fonts, #webpack_css_include, #webpack_css_url, #webpack_js_include, #wpd_is_running?
Methods included from Controllers::Localizable
#cloudflare_country_locale, #determine_request_locale, #geocoder_locale, #guest_user_locale_check, #locale_optional_www_auth_path?, #param_locale, #set_locale, #set_request_locale, #skip_localization?, #warmlyyours_ip_locale
Methods included from Controllers::Authenticable
#access_denied, #authenticate_account, #authenticate_account!, #authenticate_account_from_login_token!, #check_is_a_manager, #check_is_a_sales_manager, #check_is_an_admin, #check_is_an_employee, #check_party, #clear_mismatched_guest_user, #create_guest_user, #credentials?, #current_or_guest_user, #current_or_guest_user_id_read_only, #current_user, #devise_mapping, #fully_logged_in?, #generate_bot_id, #guest_user, #identifiable?, #init_current_user, #initialize_guest, #load_context_user, #logging_in, #resource, #resource_name, #restrict_access_for_non_employees, #scrubbed_request_path, #user_object, #warn_on_session_guest_id_leak
Methods included from UrlsHelper
#catalog_breadcrumb_links, #catalog_link, #catalog_link_for_product_line, #catalog_link_for_sku, #cms_link, #delocalized_path, #path_to_sales_product_sku, #path_to_sales_product_sku_for_product_line, #path_to_sales_product_sku_for_product_line_slug, #product_line_from_catalog_link, #protocol_neutral_url, #sanitize_external_url, #valid_external_url?
Instance Method Details
#advanced_search ⇒ void
This method returns an undefined value.
Renders the "advanced search" menu section, grouped by search type.
9 10 11 12 |
# File 'app/controllers/menus_controller.rb', line 9 def advanced_search @searches = current_user.searches.order(created_at: :desc).group(:type) render layout: false end |
#blank ⇒ void
This method returns an undefined value.
Renders nothing — a placeholder target for sidebar sections with no
content yet.
82 |
# File 'app/controllers/menus_controller.rb', line 82 def blank; end |
#load_section ⇒ void
This method returns an undefined value.
Renders a sidebar menu section partial as a Turbo Frame swap, gating
section/target against strict character allowlists since they're
used to build a partial path.
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'app/controllers/menus_controller.rb', line 19 def load_section section = params[:section].to_s target = params[:target].to_s allowed_sections = current_user..keys.map(&:to_s) unless section.match?(/\A[a-z0-9_]+\z/) && allowed_sections.include?(section) head :not_found return end unless target.match?(/\A[a-zA-Z][\w:-]*\z/) head :unprocessable_content return end @partial = "/menus/#{section}" @target = target saved_formats = lookup_context.formats begin lookup_context.formats = [:html] partial_found = lookup_context.exists?(@partial, [], true) ensure lookup_context.formats = saved_formats end unless partial_found Rails.logger.warn "MenusController#load_section: Missing partial #{@partial}" head :not_found return end # The sidebar's <turbo-frame> requests this action and swaps in the # matching frame from the response. No turbo_stream variant is needed # — the frame's own `src` lifecycle handles the swap, and the # response is the same plain HTML a non-Turbo client would receive. render :load_section, formats: [:html], layout: false end |
#search_data ⇒ void
This method returns an undefined value.
Serves the flattened, searchable menu-item index (for the CRM command
palette) as JSON.
62 63 64 65 66 67 |
# File 'app/controllers/menus_controller.rb', line 62 def search_data @menu_items = respond_to do |format| format.json { render json: @menu_items } end end |
#show ⇒ void
This method returns an undefined value.
Renders the default menu view.
72 73 74 75 76 |
# File 'app/controllers/menus_controller.rb', line 72 def show respond_to do |format| format.html { render layout: should_render_layout? } end end |