Add events for moving between columns

This commit is contained in:
Jorge Manrubia
2025-10-29 14:46:23 +01:00
parent d195debb6c
commit 85bee1af9b
4 changed files with 108 additions and 93 deletions
+97 -91
View File
@@ -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} <span class='font-weight-normal'>(#{h count})</span>".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 <span style='color: var(--card-color)'>\"#{h event.eventable.card.title }\"</span>".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 <span style='color: var(--card-color)'>\"#{h title }\"</span>".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} <span class='font-weight-normal'>(#{h count})</span>".html_safe
else
"#{h event_creator_name(event) } assigned #{h event.assignees.pluck(:name).to_sentence } to <span style='color: var(--card-color)'>\"#{h title }\"</span>".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 <span style='color: var(--card-color)'>\"#{h title }\"</span>".html_safe
when "card_published"
"#{h event_creator_name(event) } added <span style='color: var(--card-color)'>\"#{h title }\"</span>".html_safe
when "card_closed"
"#{h event_creator_name(event) } moved <span style='color: var(--card-color)'>\"#{h title }\"</span> to done".html_safe
when "card_reopened"
"#{h event_creator_name(event) } reopened <span style='color: var(--card-color)'>\"#{h title }\"</span>".html_safe
when "card_postponed"
"#{h event_creator_name(event) } moved <span style='color: var(--card-color)'>\"#{h title }\"</span> to “Not Now”".html_safe
when "card_auto_postponed"
"<span style='color: var(--card-color)'>\"#{h title }\"</span> was closed as “Not Now” due to inactivity".html_safe
when "card_resumed"
"#{h event_creator_name(event) } resumed <span style='color: var(--card-color)'>\"#{h title }\"</span>".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 <span style='color: var(--card-color)'>\"#{h title }\"</span>".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 <span style='color: var(--card-color)'>\"#{h title }\"</span>".html_safe
when "card_due_date_removed"
"#{h event_creator_name(event)} removed the date on <span style='color: var(--card-color)'>\"#{h title }\"</span>".html_safe
when "card_title_changed"
"#{h event_creator_name(event)} renamed <span style='color: var(--card-color)'>\"#{h title }\"</span> (was: '#{h event.particulars.dig('particulars', 'old_title')})'".html_safe
when "card_collection_changed"
"#{h event_creator_name(event)} moved <span style='color: var(--card-color)'>\"#{h title }\"</span> 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
+2
View File
@@ -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
+3
View File
@@ -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
]
+6 -2
View File
@@ -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