From 4827cb3a30fa921fbe58c0deed0115eec62e97e2 Mon Sep 17 00:00:00 2001 From: Jason Zimdars Date: Tue, 28 Jan 2025 20:07:45 -0600 Subject: [PATCH] Refactor using more Stimulus-y conventions --- .../controllers/related_element_controller.js | 26 +++++++------------ app/views/events/_day.html.erb | 3 +-- app/views/events/_event.html.erb | 7 ++++- 3 files changed, 17 insertions(+), 19 deletions(-) diff --git a/app/javascript/controllers/related_element_controller.js b/app/javascript/controllers/related_element_controller.js index 662ad258f..1beb9cb9e 100644 --- a/app/javascript/controllers/related_element_controller.js +++ b/app/javascript/controllers/related_element_controller.js @@ -1,29 +1,23 @@ import { Controller } from "@hotwired/stimulus" export default class extends Controller { + static targets = ["related"] static classes = ["highlight"] + static values = { group: String } highlight(event) { - const targetElement = event.target.closest('[data-related-element-target]') - if (!targetElement) return + const groupValue = event.currentTarget.dataset.relatedElementGroupValue - const targetValue = targetElement.dataset.relatedElementTarget - const relatedElements = this.element.querySelectorAll(`[data-related-element-target="${targetValue}"]`) - - relatedElements.forEach(element => { - element.classList.add(this.highlightClass) - }) + this.relatedTargets + .filter(element => element.dataset.relatedElementGroupValue === groupValue) + .forEach(element => element.classList.add(this.highlightClass)) } unhighlight(event) { - const targetElement = event.target.closest('[data-related-element-target]') - if (!targetElement) return + const groupValue = event.currentTarget.dataset.relatedElementGroupValue - const targetValue = targetElement.dataset.relatedElementTarget - const relatedElements = this.element.querySelectorAll(`[data-related-element-target="${targetValue}"]`) - - relatedElements.forEach(element => { - element.classList.remove(this.highlightClass) - }) + this.relatedTargets + .filter(element => element.dataset.relatedElementGroupValue === groupValue) + .forEach(element => element.classList.remove(this.highlightClass)) } } diff --git a/app/views/events/_day.html.erb b/app/views/events/_day.html.erb index 40fabdf0a..62c5706f4 100644 --- a/app/views/events/_day.html.erb +++ b/app/views/events/_day.html.erb @@ -1,6 +1,5 @@
+ data-related-element-highlight-class="event--related"> <% if events.any? %>

<%= event_day_title(activity_day) %>

diff --git a/app/views/events/_event.html.erb b/app/views/events/_event.html.erb index 83dd7874c..07ef7597e 100644 --- a/app/views/events/_event.html.erb +++ b/app/views/events/_event.html.erb @@ -3,7 +3,12 @@ <%= link_to bucket_bubble_path(bubble.bucket, bubble), class: "event panel shadow center center-block flex-inline align-center justify-start gap position-relative", style: "--bubble-color: #{ bubble.color }; #{ bubble_rotation(bubble) }", - data: { controller: "animation", related_element_target: "bubble_id_#{bubble.id}", animation_play_class: "bubble--wobble", animation_play_on_load_value: "true", action: "mouseover->animation#play" } do %> + data: { controller: "animation", + related_element_target: "related", + related_element_group_value: bubble.id, + animation_play_class: "bubble--wobble", + animation_play_on_load_value: "true", + action: "mouseover->animation#play mouseover->related-element#highlight mouseout->related-element#unhighlight" } do %>
<%= bubble.title %>