Class: Www::AddToCartButtonComponent
- Inherits:
-
ApplicationComponent
- Object
- ViewComponent::Base
- ApplicationComponent
- Www::AddToCartButtonComponent
- Includes:
- ApplicationHelper
- Defined in:
- app/components/www/add_to_cart_button_component.rb
Overview
Reusable Add to Cart button component with optional quantity selector
Constant Summary
Constants included from ApplicationHelper
ApplicationHelper::CF_WEB_ANALYTICS_SKIP_PATHS, ApplicationHelper::MARKDOWN_ALLOWED_ATTRIBUTES, ApplicationHelper::MARKDOWN_ALLOWED_TAGS
Constants included from SeoHelper
SeoHelper::AWARDS, SeoHelper::CA_ADDRESS, SeoHelper::CA_BUSINESS_HOURS, SeoHelper::CA_CONTACT_POINT, SeoHelper::CA_CURRENCIES, SeoHelper::CA_DESCRIPTION, SeoHelper::CA_FOUNDING_DATE, SeoHelper::CA_GLOBAL_LOCATION_NUMBER, SeoHelper::CA_LEGAL_NAME, SeoHelper::CA_LOCAL_BUSINESS, SeoHelper::CA_ONLINE_STORE, SeoHelper::CA_RETURN_POLICY, SeoHelper::CA_SALES_DEPARTMENT, SeoHelper::CA_SERVICE_AREA, SeoHelper::CA_URL, SeoHelper::CA_VAT_ID, SeoHelper::CA_WAREHOUSE_DEPARTMENT, SeoHelper::CA_WAREHOUSE_HOURS, SeoHelper::COMPANY_EMAIL, SeoHelper::COMPANY_LOGO, SeoHelper::COMPANY_NAME, SeoHelper::COMPANY_SLOGAN, SeoHelper::EXPERTISE, SeoHelper::FAX_NUMBER, SeoHelper::GS1_COMPANY_PREFIX, SeoHelper::ISO6523_CODE, SeoHelper::PAYMENT_METHODS, SeoHelper::PHONE_NUMBER, SeoHelper::PRIMARY_NAICS, SeoHelper::REFUND_TYPE, SeoHelper::RETURN_FEES, SeoHelper::RETURN_METHOD, SeoHelper::RETURN_POLICY_CATEGORY, SeoHelper::SECONDARY_NAICS, SeoHelper::SOCIAL_PROFILES, SeoHelper::US_ADDRESS, SeoHelper::US_BUSINESS_HOURS, SeoHelper::US_CONTACT_POINT, SeoHelper::US_CURRENCIES, SeoHelper::US_DESCRIPTION, SeoHelper::US_FOUNDING_DATE, SeoHelper::US_GLOBAL_LOCATION_NUMBER, SeoHelper::US_IMAGE, SeoHelper::US_LEGAL_NAME, SeoHelper::US_LOCAL_BUSINESS, SeoHelper::US_ONLINE_STORE, SeoHelper::US_RETURN_POLICY, SeoHelper::US_SALES_DEPARTMENT, SeoHelper::US_SERVICE_AREA, SeoHelper::US_TAX_ID, SeoHelper::US_URL, SeoHelper::US_WAREHOUSE_DEPARTMENT, SeoHelper::US_WAREHOUSE_HOURS
Constants included from IconHelper
IconHelper::CUSTOM_ICON_MAP, IconHelper::CUSTOM_SVG_DIR, IconHelper::DEFAULT_FAMILY
Instance Method Summary collapse
- #button_classes ⇒ Object
- #button_html_id ⇒ Object
- #button_label ⇒ Object
- #expected_soon? ⇒ Boolean
-
#initialize(product: nil, sku: nil, show_quantity: false, out_of_stock: nil, expected_soon: nil, max_quantity: nil, style: :primary, size: :normal, label: "Add to Cart", advance_order_label: "Advance Order", button_id: nil, wrapper_class: nil) ⇒ AddToCartButtonComponent
constructor
A new instance of AddToCartButtonComponent.
- #max_stock ⇒ Object
- #out_of_stock? ⇒ Boolean
- #render? ⇒ Boolean
- #show_quantity? ⇒ Boolean
-
#sku ⇒ Object
Extracted product data accessors.
- #wrapper_classes ⇒ Object
Methods included from ApplicationHelper
#better_number_to_currency, #cf_web_analytics?, #check_or_cross, #check_or_times, #embedded_tab_frame_id, #error_messages, #general_disclaimer_on_product_installation_and_local_codes, #markdown_to_html, #parent_layout, #pass_or_fail, #render_error_messages_list, #render_video_card, #resolved_auth_form_turbo_frame, #return_path_or, #safe_css_color, #set_return_path_if_present, #set_section_if_present, #tab_frame_id, #to_underscore, #turbo_section_wrapper, #turbo_tabs_request?, #url_on_same_domain_as_request, #working_hours?, #yes_or_no, #yes_or_no_highlighted, #yes_or_no_with_check_or_cross
Methods included from UppyUploaderHelper
#file_uploader, #image_uploader, #large_file_uploader_s3, #lead_sketch_uploader, #public_warranty_card_uploader, #rma_image_uploader, #rma_image_uploader_s3, #uppy_uploader, #video_uploader, #warranty_card_uploader
Methods included from ImagesHelper
#image_asset_tag, #image_asset_url, #picture_asset_tag
Methods included from SeoHelper
#add_page_schema, #add_webpage_schema, #canada?, #collect_schema, #company_social_links, #ensure_context_json, #json_ld_script_tag, #local_business_schema, #online_store_id, #online_store_schema, #page_main_entity, #page_main_entity_json, #render_auto_collection_page_schema, #render_collection_page_schema, #render_local_business_schema, #render_online_store_schema, #render_page_schemas, #render_page_video_schemas, #render_webpage_schema, #render_webpage_schema_with_collections, #usa?
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?
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(product: nil, sku: nil, show_quantity: false, out_of_stock: nil, expected_soon: nil, max_quantity: nil, style: :primary, size: :normal, label: "Add to Cart", advance_order_label: "Advance Order", button_id: nil, wrapper_class: nil) ⇒ AddToCartButtonComponent
Returns a new instance of AddToCartButtonComponent.
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 65 |
# File 'app/components/www/add_to_cart_button_component.rb', line 39 def initialize( product: nil, sku: nil, show_quantity: false, out_of_stock: nil, expected_soon: nil, max_quantity: nil, style: :primary, size: :normal, label: "Add to Cart", advance_order_label: "Advance Order", button_id: nil, wrapper_class: nil ) @product = product @manual_sku = sku @show_quantity = show_quantity @force_out_of_stock = out_of_stock @force_expected_soon = expected_soon @max_quantity = max_quantity @style = style @size = size @label = label @advance_order_label = advance_order_label @button_id = @wrapper_class = wrapper_class end |
Instance Method Details
#button_classes ⇒ Object
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
# File 'app/components/www/add_to_cart_button_component.rb', line 96 def classes = %w[btn d-inline-flex align-items-center justify-content-center] # Style classes << case @style when :outline (out_of_stock? ? "btn-outline-primary" : "btn-outline-primary") when :success "btn-success" else # :primary (out_of_stock? ? "btn-outline-primary" : "btn-primary") end # Size case @size when :small classes << "btn-sm" when :block classes << "btn-block w-100" end classes.join(" ") end |
#button_html_id ⇒ Object
126 127 128 |
# File 'app/components/www/add_to_cart_button_component.rb', line 126 def @button_id || "add-to-cart-#{sku&.parameterize}" end |
#button_label ⇒ Object
92 93 94 |
# File 'app/components/www/add_to_cart_button_component.rb', line 92 def out_of_stock? ? @advance_order_label : @label end |
#expected_soon? ⇒ Boolean
78 79 80 81 82 |
# File 'app/components/www/add_to_cart_button_component.rb', line 78 def expected_soon? return @force_expected_soon unless @force_expected_soon.nil? extract_expected_soon end |
#max_stock ⇒ Object
84 85 86 |
# File 'app/components/www/add_to_cart_button_component.rb', line 84 def max_stock @max_quantity || extract_max_stock end |
#out_of_stock? ⇒ Boolean
72 73 74 75 76 |
# File 'app/components/www/add_to_cart_button_component.rb', line 72 def out_of_stock? return @force_out_of_stock unless @force_out_of_stock.nil? extract_out_of_stock end |
#render? ⇒ Boolean
130 131 132 |
# File 'app/components/www/add_to_cart_button_component.rb', line 130 def render? sku.present? end |
#show_quantity? ⇒ Boolean
88 89 90 |
# File 'app/components/www/add_to_cart_button_component.rb', line 88 def show_quantity? @show_quantity end |
#sku ⇒ Object
Extracted product data accessors
68 69 70 |
# File 'app/components/www/add_to_cart_button_component.rb', line 68 def sku @manual_sku || product_sku end |
#wrapper_classes ⇒ Object
120 121 122 123 124 |
# File 'app/components/www/add_to_cart_button_component.rb', line 120 def wrapper_classes classes = ["add-to-cart-component"] classes << @wrapper_class if @wrapper_class.present? classes.join(" ") end |