56 lines
1.3 KiB
Ruby
56 lines
1.3 KiB
Ruby
module DayTimelinesScoped
|
|
extend ActiveSupport::Concern
|
|
|
|
included do
|
|
include FilterScoped
|
|
|
|
before_action :normalize_collection_params
|
|
before_action :restore_collections_filter_from_cookie
|
|
before_action :set_day_timeline
|
|
after_action :save_collections_filter_to_cookie
|
|
end
|
|
|
|
private
|
|
def normalize_collection_params
|
|
if params[:collection_ids].blank? && !params[:clear_filter]
|
|
params[:clear_filter] = true
|
|
end
|
|
end
|
|
|
|
def restore_collections_filter_from_cookie
|
|
if params[:clear_filter]
|
|
delete_collections_filter_cookie
|
|
else
|
|
set_collections_filter_from_cookie
|
|
end
|
|
end
|
|
|
|
def delete_collections_filter_cookie
|
|
cookies.delete(:collection_filter)
|
|
end
|
|
|
|
def set_collections_filter_from_cookie
|
|
if cookies[:collection_filter].present? && @filter.collections.blank?
|
|
@filter.collection_ids = cookies[:collection_filter].split(",")
|
|
end
|
|
end
|
|
|
|
def set_day_timeline
|
|
@day_timeline = Current.user.timeline_for(day, filter: @filter)
|
|
end
|
|
|
|
def save_collections_filter_to_cookie
|
|
cookies[:collection_filter] = @filter.collection_ids.join(",")
|
|
end
|
|
|
|
def day
|
|
if params[:day].present?
|
|
Time.zone.parse(params[:day])
|
|
else
|
|
Time.current
|
|
end
|
|
rescue ArgumentError
|
|
head :not_found
|
|
end
|
|
end
|