Files
fizzy/app/helpers/events_helper.rb
T
2025-02-19 18:05:12 -06:00

95 lines
3.6 KiB
Ruby

module EventsHelper
def event_day_title(day)
case
when day.today?
"Today"
when day.yesterday?
"Yesterday"
else
day.strftime("%A, %B %e")
end
end
def event_column(event)
case event.action
when "popped"
4
when "published"
3
when "commented"
2
else
1
end
end
def event_cluster_tag(hour, col, &)
row = 25 - hour
tag.div class: "event__wrapper", style: "grid-area: #{row}/#{col}", &
end
def event_next_page_link(next_day)
if next_day
tag.div id: "next_page",
data: { controller: "fetch-on-visible", fetch_on_visible_url_value: events_path(day: next_day.strftime("%Y-%m-%d")) }
end
end
def render_event_grid_cells(day, columns: 4, rows: 24)
safe_join((2..rows + 1).map do |row|
(1..columns).map do |col|
tag.div class: class_names("event__grid-item"), style: "grid-area: #{row}/#{col};"
end
end.flatten)
end
def render_column_headers(day = Date.current)
start_time = day.beginning_of_day
end_time = day.end_of_day
accessible_events = Event.joins(bubble: :bucket)
.merge(Current.user.buckets)
.where(created_at: start_time..end_time)
.where(bubbles: { bucket_id: params[:bucket_ids].presence || Current.user.bucket_ids })
headers = {
"Touched" => nil,
"Discussed" => nil,
"Added" => accessible_events.where(action: "published").count,
"Popped" => accessible_events.where(action: "popped").joins(:creator).merge(User.without_system).count
}
headers.map do |header, count|
title = count&.positive? ? "#{header} (#{count})" : header
content_tag(:h3, title, class: "event__grid-column-title margin-block-end-half position-sticky")
end.join.html_safe
end
def event_action_sentence(event)
case event.action
when "assigned"
"#{ event.creator.name } assigned #{ event.assignees.pluck(:name).to_sentence } to <span class='txt-link'>#{ event.bubble.title }</span>".html_safe
when "unassigned"
"#{ event.creator.name } unassigned #{ event.assignees.pluck(:name).to_sentence } from <span class='txt-link'>#{ event.bubble.title }</span>".html_safe
when "boosted"
"#{ event.creator.name } boosted <span class='txt-link'>#{ event.bubble.title }</span>".html_safe
when "commented"
"#{ event.creator.name } commented on <span class='txt-link'>#{ event.bubble.title }</span>".html_safe
when "published"
"#{ event.creator.name } added <span class='txt-link'>#{ event.bubble.title }</span>".html_safe
when "popped"
"#{ event.creator.name } popped <span class='txt-link'>#{ event.bubble.title }</span>".html_safe
when "staged"
"#{event.creator.name} changed the stage to #{event.stage_name} on <span class='txt-link'>#{ event.bubble.title }</span>".html_safe
when "due_date_added"
"#{event.creator.name} set the date to #{event.particulars.dig('particulars', 'due_date').to_date.strftime('%B %-d')} on <span class='txt-link'>#{ event.bubble.title }</span>".html_safe
when "due_date_changed"
"#{event.creator.name} changed the date to #{event.particulars.dig('particulars', 'due_date').to_date.strftime('%B %-d')} on <span class='txt-link'>#{ event.bubble.title }</span>".html_safe
when "due_date_removed"
"#{event.creator.name} removed the date on <span class='txt-link'>#{ event.bubble.title }</span>"
when "title_changed"
"#{event.creator.name} renamed on <span class='txt-link'>#{ event.bubble.title }</span> (was: '#{event.particulars.dig('particulars', 'old_title')})'".html_safe
end
end
end