From a1762bb21343881c1819deef3997f970408b7688 Mon Sep 17 00:00:00 2001 From: Camille Villa Date: Fri, 25 Oct 2024 12:29:24 -0700 Subject: [PATCH] Feature: IPM Launch homepage updates (#1065) * Add IPM static section to homepage * Add Products to navbar * Update spec expectations for static content * DM-5254: Add Products to homepage search dropdown (#1066) * Add Products to homepage dropdown init state * Dynamically filter products * Truncate results to 2 per type and update spec expectations * Move Product above Tags * Update type assignment for ahoy events * Update more test expectations * Fix up spec expectations * Update data properties for product --------- Co-authored-by: Camille Villa <5402927+camillevilla@users.noreply.github.com> * Fix code scanning alert no. 344: DOM text reinterpreted as HTML Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> * Conditionally render Intrapreneur section --------- Co-authored-by: Camille Villa <5402927+camillevilla@users.noreply.github.com> Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> --- app/assets/images/homepage/section-ipm.png | Bin 0 -> 32390 bytes .../javascripts/homepage_search_dropdown.es6 | 47 ++++++++++--- app/assets/stylesheets/dm/pages/_home.scss | 8 ++- app/controllers/home_controller.rb | 12 ++++ app/views/home/index.html.erb | 34 +++++++-- app/views/products/show.html.erb | 27 +++++--- app/views/shared/_header.html.erb | 5 ++ spec/features/homepage_spec.rb | 65 ++++++++++++++---- spec/features/product_viewer_spec.rb | 18 +++++ spec/features/shared/header_spec.rb | 2 + 10 files changed, 175 insertions(+), 43 deletions(-) create mode 100644 app/assets/images/homepage/section-ipm.png diff --git a/app/assets/images/homepage/section-ipm.png b/app/assets/images/homepage/section-ipm.png new file mode 100644 index 0000000000000000000000000000000000000000..ca485cb7debc8dc84e8e244df0de89262500412b GIT binary patch literal 32390 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 n(+VILK~;%phT8$D2 category.name.toLowerCase().includes(searchTerm)).slice(0,3) : mostPopularCategories; - let filteredInnovations = searchTerm ? allInnovations.filter(innovation => innovation.name.toLowerCase().includes(searchTerm)).slice(0,3) : mostRecentInnovations; - let filteredCommunities = searchTerm ? allCommunities.filter(community => community.name.toLowerCase().includes(searchTerm)).slice(0,3) : mostPopularCommunities; - updateDropdown(filteredCategories, filteredInnovations, filteredCommunities); + let filteredCategories = searchTerm ? allCategories.filter(category => category.name.toLowerCase().includes(searchTerm)).slice(0,2) : mostPopularCategories; + let filteredInnovations = searchTerm ? allInnovations.filter(innovation => innovation.name.toLowerCase().includes(searchTerm)).slice(0,2) : mostRecentInnovations; + let filteredCommunities = searchTerm ? allCommunities.filter(community => community.name.toLowerCase().includes(searchTerm)).slice(0,2) : mostPopularCommunities; + let filteredProducts = searchTerm ? allProducts.filter(product => product.name.toLowerCase().includes(searchTerm)).slice(0,2) : mostRecentProducts; + updateDropdown(filteredCategories, filteredInnovations, filteredCommunities, filteredProducts); }); $(document).keydown(function(e) { @@ -56,8 +60,8 @@ function setupSearchDropdown() { }); } -function updateDropdown(categories, innovations, communities) { - $('#category-list, #practice-list, #community-list').empty(); +function updateDropdown(categories, innovations, communities, products) { + $('#category-list, #practice-list, #community-list, #product-list').empty(); categories.forEach(function(category) { let link = $('') @@ -94,6 +98,18 @@ function updateDropdown(categories, innovations, communities) { $('#community-list').append(listItem); }); + + products.forEach(function(product) { + let link = $('') + .attr('href', `/products/${encodeURIComponent(product.slug)}`) + .text(product.name); + let listItem = $('
  • ') + .addClass('search-result') + .attr('data-product-id', product.id) + .append(link); + + $('#product-list').append(listItem); + }); } function setupClickTracking(listSelector, eventName, dataAttribute) { @@ -110,7 +126,17 @@ function setupClickTracking(listSelector, eventName, dataAttribute) { const id = e.target.closest('.search-result').getAttribute(dataAttribute); let properties = { from_homepage: true}; - properties[dataAttribute === 'data-practice-id' ? 'practice_name' : 'category_name'] = name; + switch(dataAttribute) { + case 'data-practice-id': + properties['practice_name'] = name; + break; + case 'data-product-id': + properties['product_name'] = name; + break; + default: // tags and communities-as-tags + properties['category_name'] = name; + } + properties[dataAttribute.slice(5)] = parseInt(id); // Removes 'data-' and uses the rest as the key ahoy.track(eventName, properties); @@ -149,5 +175,6 @@ addEventListener('turbolinks:load', function () { setupClickTracking('#practice-list', "Dropdown Practice Link Clicked", 'data-practice-id'); setupClickTracking('#category-list', "Category selected", 'data-category_id'); setupClickTracking('#community-list', "Category selected", 'data-category_id'); + setupClickTracking('#product-list', "Dropdown Product Link Clicked", 'data-product-id'); } }); diff --git a/app/assets/stylesheets/dm/pages/_home.scss b/app/assets/stylesheets/dm/pages/_home.scss index b51938d0b..b870d6655 100644 --- a/app/assets/stylesheets/dm/pages/_home.scss +++ b/app/assets/stylesheets/dm/pages/_home.scss @@ -46,7 +46,9 @@ #category-list, #practice-list, - #community-list { + #community-list, + #product-list + { a { text-decoration: none; color: color($theme-color-base-ink); @@ -106,8 +108,8 @@ } } - .homepage-section, #feature-nominate-innovation { - #submit-innovation-title { + .homepage-section, #feature-nominate-innovation, #ipm-section { + #submit-innovation-title, #ipm-section-title { @include at-media(tablet) { @include u-margin-top(0); } diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb index 0234d099d..51bef21ed 100644 --- a/app/controllers/home_controller.rb +++ b/app/controllers/home_controller.rb @@ -7,6 +7,7 @@ def index @dropdown_categories = get_categories_by_popularity @dropdown_communities = get_categories_by_popularity(true) @dropdown_practices, @practice_names = get_dropdown_practices + @dropdown_products, @product_names = get_dropdown_products @homepage = Homepage.where(published: true)&.first if @homepage current_features = @homepage&.homepage_features @@ -143,6 +144,17 @@ def dropdown_practices scope end + def get_dropdown_products + product_names = [] + dropdown_products = Product.where(published: true, retired: false).order("created_at DESC") + products_hash = dropdown_products.pluck(:id, :name, :slug).map do |id, name, slug| + product_names << name + {name: name, id: id, slug: slug } + end + + return products_hash, product_names + end + def get_diffusion_histories(is_public_practice) DiffusionHistory.get_with_practices(is_public_practice).order(Arel.sql("lower(practices.name)")) end diff --git a/app/views/home/index.html.erb b/app/views/home/index.html.erb index ac285900c..4420bfdf2 100644 --- a/app/views/home/index.html.erb +++ b/app/views/home/index.html.erb @@ -26,6 +26,7 @@ data-categories="<%= @dropdown_categories.to_json %>" data-innovations="<%= @dropdown_practices.to_json %>" data-communities="<%= @dropdown_communities.to_json %>" + data-products="<%= @dropdown_products.to_json %>" >