Class: Www::LeadFormModalComponent

Inherits:
ApplicationComponent show all
Includes:
ActionView::Helpers::TagHelper, ActionView::Helpers::UrlHelper, IconHelper, Turbo::FramesHelper
Defined in:
app/components/www/lead_form_modal_component.rb

Overview

Lazy-loading contact form modal component

Displays a compact CTA card/button/link that opens a modal with the contact form.
The form content (including turnstile and uppy) is loaded via Turbo Frame only
when the modal opens, reducing initial page load.

Examples:

Basic usage

<%= render Www::LeadFormModalComponent.new %>

With custom title and button

<%= render Www::LeadFormModalComponent.new(
  header_title: 'Get a Free Quote',
  header_intro: 'Our experts will respond within 24 hours',
  button_text: 'Request Quote',
  button_icon: 'calculator'
) %>

Compact button variant (no card wrapper)

<%= render Www::LeadFormModalComponent.new(variant: :button) %>

Inline link variant (for use in paragraphs)

Please <%= render Www::LeadFormModalComponent.new(variant: :link, button_text: 'contact us') %> for help.

Constant Summary collapse

VARIANTS =
%w[card button link modal_only].freeze

Constants included from IconHelper

IconHelper::CUSTOM_ICON_MAP, IconHelper::CUSTOM_SVG_DIR, IconHelper::DEFAULT_FAMILY

Instance Method Summary collapse

Methods included from IconHelper

#account_nav_icon, #fa_icon, #star_rating_html

Methods inherited from ApplicationComponent

#cms_link, #fetch_or_fallback, #image_asset_tag, #image_tag, #number_to_currency, #number_with_delimiter, #post_path, #post_url, #strip_tags

Constructor Details

#initialize(modal_id: nil, header_title: "Hi, I'm Rae!", header_intro: "Tell me about your project and I'll connect you with the right expert.", button_text: 'Send Message', button_icon: 'envelope', button_class: 'btn btn-primary btn-lg', link_class: nil, show_upload: true, business_focused: false, submit_label: 'Send Message', application_type: nil, about_project: nil, variant: :card) ⇒ LeadFormModalComponent

Returns a new instance of LeadFormModalComponent.



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'app/components/www/lead_form_modal_component.rb', line 35

def initialize(
  modal_id: nil,
  header_title: "Hi, I'm Rae!",
  header_intro: "Tell me about your project and I'll connect you with the right expert.",
  button_text: 'Send Message',
  button_icon: 'envelope',
  button_class: 'btn btn-primary btn-lg',
  link_class: nil,
  show_upload: true,
  business_focused: false,
  submit_label: 'Send Message',
  application_type: nil,
  about_project: nil,
  variant: :card
)
  super()
  @modal_id = modal_id || "lead-form-modal-#{SecureRandom.hex(4)}"
  @header_title = header_title
  @header_intro = header_intro
  @button_text = button_text
  @button_icon = button_icon
  @button_class = button_class
  @link_class = link_class
  @show_upload = show_upload
  @business_focused = business_focused
  @submit_label = submit_label
  @application_type = application_type
  @about_project = about_project
  @variant = fetch_or_fallback(variant.to_s, VARIANTS, 'card')
end

Instance Method Details

#button_variant?Boolean

Returns:

  • (Boolean)


89
90
91
# File 'app/components/www/lead_form_modal_component.rb', line 89

def button_variant?
  @variant == 'button'
end

#card_variant?Boolean

Returns:

  • (Boolean)


85
86
87
# File 'app/components/www/lead_form_modal_component.rb', line 85

def card_variant?
  @variant == 'card'
end

#form_content_urlObject



66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'app/components/www/lead_form_modal_component.rb', line 66

def form_content_url
  url_params = {
    show_upload: @show_upload,
    business_focused: @business_focused,
    submit_label: @submit_label,
    frame_id: frame_id
  }
  url_params[:application_type] = @application_type if @application_type.present?
  url_params[:header_title] = @header_title if @header_title.present?
  url_params[:header_intro] = @header_intro if @header_intro.present?
  url_params[:about_project] = @about_project if @about_project.present?

  helpers.contact_form_content_path(url_params)
end

#frame_idObject



81
82
83
# File 'app/components/www/lead_form_modal_component.rb', line 81

def frame_id
  "#{@modal_id}-frame"
end

Returns:

  • (Boolean)


93
94
95
# File 'app/components/www/lead_form_modal_component.rb', line 93

def link_variant?
  @variant == 'link'
end

Returns:

  • (Boolean)


97
98
99
# File 'app/components/www/lead_form_modal_component.rb', line 97

def modal_only_variant?
  @variant == 'modal_only'
end