diff --git a/app/helpers/events_helper.rb b/app/helpers/events_helper.rb index 13dba2478..d91effe87 100644 --- a/app/helpers/events_helper.rb +++ b/app/helpers/events_helper.rb @@ -26,100 +26,106 @@ module EventsHelper end private - - def event_column_title(base_title, count, day) - date_tag = local_datetime_tag day, style: :agoorweekday - if count > 0 - "#{h base_title} #{date_tag} (#{h count})".html_safe - else - "#{h base_title} #{date_tag}".html_safe - end - end - - def event_column(event) - case event.action - when "card_closed" - 3 - when "card_published", "card_reopened" - 1 - else - 2 - end - end - - def event_cluster_tag(hour, col, &) - row = 25 - hour - tag.div class: "events__time-block", style: "grid-area: #{row}/#{col}", & - end - - def event_action_sentence(event) - if event.action.comment_created? - comment_event_action_sentence(event) - else - card_event_action_sentence(event) - end - end - - def comment_event_action_sentence(event) - "#{h event_creator_name(event) } commented on \"#{h event.eventable.card.title }\"".html_safe - end - - def event_creator_name(event) - event.creator == Current.user ? "You" : event.creator.name - end - - def card_event_action_sentence(event) - card = event.eventable - title = card.title - - case event.action - when "card_assigned" - if event.assignees.include?(Current.user) - "#{h event_creator_name(event) } will handle \"#{h title }\"".html_safe + def event_column_title(base_title, count, day) + date_tag = local_datetime_tag day, style: :agoorweekday + if count > 0 + "#{h base_title} #{date_tag} (#{h count})".html_safe else - "#{h event_creator_name(event) } assigned #{h event.assignees.pluck(:name).to_sentence } to \"#{h title }\"".html_safe + "#{h base_title} #{date_tag}".html_safe end - when "card_unassigned" - "#{h event_creator_name(event) } unassigned #{ h(event.assignees.include?(Current.user) ? "yourself" : event.assignees.pluck(:name).to_sentence) } from \"#{h title }\"".html_safe - when "card_published" - "#{h event_creator_name(event) } added \"#{h title }\"".html_safe - when "card_closed" - "#{h event_creator_name(event) } moved \"#{h title }\" to done".html_safe - when "card_reopened" - "#{h event_creator_name(event) } reopened \"#{h title }\"".html_safe - when "card_postponed" - "#{h event_creator_name(event) } moved \"#{h title }\" to “Not Now”".html_safe - when "card_auto_postponed" - "\"#{h title }\" was closed as “Not Now” due to inactivity".html_safe - when "card_resumed" - "#{h event_creator_name(event) } resumed \"#{h title }\"".html_safe - when "card_due_date_added" - "#{h event_creator_name(event)} set the date to #{h event.particulars.dig('particulars', 'due_date').to_date.strftime('%B %-d')} on \"#{h title }\"".html_safe - when "card_due_date_changed" - "#{h event_creator_name(event)} changed the date to #{h event.particulars.dig('particulars', 'due_date').to_date.strftime('%B %-d')} on \"#{h title }\"".html_safe - when "card_due_date_removed" - "#{h event_creator_name(event)} removed the date on \"#{h title }\"".html_safe - when "card_title_changed" - "#{h event_creator_name(event)} renamed \"#{h title }\" (was: '#{h event.particulars.dig('particulars', 'old_title')})'".html_safe - when "card_collection_changed" - "#{h event_creator_name(event)} moved \"#{h title }\" to '#{h event.particulars.dig('particulars', 'new_collection')}'".html_safe end - end - def event_action_icon(event) - case event.action - when "card_assigned" - "assigned" - when "card_unassigned" - "minus" - when "comment_created" - "comment" - when "card_title_changed" - "rename" - when "card_collection_changed" - "move" - else - "person" + def event_column(event) + case event.action + when "card_closed" + 3 + when "card_published", "card_reopened" + 1 + else + 2 + end + end + + def event_cluster_tag(hour, col, &) + row = 25 - hour + tag.div class: "events__time-block", style: "grid-area: #{row}/#{col}", & + end + + def event_action_sentence(event) + if event.action.comment_created? + comment_event_action_sentence(event) + else + card_event_action_sentence(event) + end + end + + def comment_event_action_sentence(event) + "#{event_creator_name(event)} commented on #{event_card_title(event.eventable.card)}".html_safe + end + + def event_creator_name(event) + h(event.creator == Current.user ? "You" : event.creator.name) + end + + def card_event_action_sentence(event) + card = event.eventable + + case event.action + when "card_assigned" + if event.assignees.include?(Current.user) + "#{event_creator_name(event)} will handle #{event_card_title(card)}" + else + "#{event_creator_name(event)} assigned #{h event.assignees.pluck(:name).to_sentence} to #{event_card_title(card)}" + end + when "card_unassigned" + "#{event_creator_name(event)} unassigned #{h(event.assignees.include?(Current.user) ? "yourself" : event.assignees.pluck(:name).to_sentence)} from #{event_card_title(card)}" + when "card_published" + "#{event_creator_name(event)} added #{event_card_title(card)}" + when "card_closed" + "#{event_creator_name(event)} moved #{event_card_title(card)} to done" + when "card_reopened" + "#{event_creator_name(event)} reopened #{event_card_title(card)}" + when "card_postponed" + "#{event_creator_name(event)} moved #{event_card_title(card)} to 'Not Now'" + when "card_auto_postponed" + "#{event_card_title(card)} was closed as 'Not Now' due to inactivity" + when "card_resumed" + "#{event_creator_name(event)} resumed #{event_card_title(card)}" + when "card_due_date_added" + "#{event_creator_name(event)} set the date to #{h event.particulars.dig('particulars', 'due_date').to_date.strftime('%B %-d')} on #{event_card_title(card)}" + when "card_due_date_changed" + "#{event_creator_name(event)} changed the date to #{h event.particulars.dig('particulars', 'due_date').to_date.strftime('%B %-d')} on #{event_card_title(card)}" + when "card_due_date_removed" + "#{event_creator_name(event)} removed the date on #{event_card_title(card)}" + when "card_title_changed" + "#{event_creator_name(event)} renamed #{event_card_title(card)} (was: '#{h event.particulars.dig('particulars', 'old_title')}')" + when "card_collection_changed" + "#{event_creator_name(event)} moved #{event_card_title(card)} to '#{h event.particulars.dig('particulars', 'new_collection')}'" + when "card_triaged" + "#{event_creator_name(event)} moved #{event_card_title(card)} to '#{h event.particulars.dig('particulars', 'column')}'" + when "card_sent_back_to_triage" + "#{event_creator_name(event)} moved #{event_card_title(card)} back to the stream" + end.html_safe + end + + def event_card_title(card) + tag.span card.title, style: "color: var(--card-color)" + end + + def event_action_icon(event) + case event.action + when "card_assigned" + "assigned" + when "card_unassigned" + "minus" + when "comment_created" + "comment" + when "card_title_changed" + "rename" + when "card_collection_changed" + "move" + else + "person" + end end - end end diff --git a/app/models/card/triageable.rb b/app/models/card/triageable.rb index e310e1bce..1e19bed9a 100644 --- a/app/models/card/triageable.rb +++ b/app/models/card/triageable.rb @@ -22,6 +22,7 @@ module Card::Triageable transaction do resume update! column: column + track_event "triaged", particulars: { column: column.name } end end @@ -29,6 +30,7 @@ module Card::Triageable transaction do resume update! column: nil + track_event "sent_back_to_triage" end end end diff --git a/app/models/user/day_timeline.rb b/app/models/user/day_timeline.rb index 1745cb82b..104395edf 100644 --- a/app/models/user/day_timeline.rb +++ b/app/models/user/day_timeline.rb @@ -44,6 +44,9 @@ class User::DayTimeline card_due_date_changed card_due_date_removed card_collection_changed + card_postponed + card_triaged + card_sent_back_to_triage comment_created ] diff --git a/test/models/card/triageable_test.rb b/test/models/card/triageable_test.rb index e096e1d0c..50836e821 100644 --- a/test/models/card/triageable_test.rb +++ b/test/models/card/triageable_test.rb @@ -24,7 +24,9 @@ class Card::TriageableTest < ActiveSupport::TestCase assert_nil card.column assert card.awaiting_triage? - card.triage_into(column) + assert_difference -> { card.reload.events.where(action: "card_triaged").count }, +1 do + card.triage_into(column) + end assert_equal column, card.reload.column assert card.triaged? @@ -47,7 +49,9 @@ class Card::TriageableTest < ActiveSupport::TestCase card = cards(:logo) assert card.triaged? - card.send_back_to_triage + assert_difference -> { card.reload.events.where(action: "card_sent_back_to_triage").count }, +1 do + card.send_back_to_triage + end assert card.reload.awaiting_triage? end