2022-11-24 22:51:58 +01:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
class ListsController < ApplicationController
|
|
|
|
before_action :authenticate_user!
|
|
|
|
before_action :set_user, only: %i[index]
|
|
|
|
|
|
|
|
def index
|
|
|
|
@lists = List.where(user: current_user)
|
|
|
|
end
|
|
|
|
|
2022-12-05 23:10:11 +01:00
|
|
|
def create
|
|
|
|
target_user = User.find_by!(screen_name: params[:user])
|
|
|
|
list = List.create! user: current_user, display_name: params[:name]
|
|
|
|
|
|
|
|
respond_to do |format|
|
|
|
|
format.turbo_stream do
|
|
|
|
render turbo_stream: [
|
|
|
|
turbo_stream.replace("create-form", partial: "lists/form", locals: { user: target_user }),
|
|
|
|
turbo_stream.prepend("lists", partial: "lists/item", locals: { list:, user: target_user })
|
|
|
|
]
|
|
|
|
end
|
|
|
|
|
|
|
|
format.html { redirect_to user_path(target_user) }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def update
|
|
|
|
@add = params[:add] == "true"
|
|
|
|
|
|
|
|
@target_user = User.find_by!(screen_name: params[:user])
|
|
|
|
@list = current_user.lists.find(params[:list])
|
|
|
|
|
|
|
|
raise Errors::ListingSelfBlockedOther if current_user.blocking?(@target_user)
|
|
|
|
raise Errors::ListingOtherBlockedSelf if @target_user.blocking?(@current_user)
|
|
|
|
|
|
|
|
if @add
|
|
|
|
@list.add_member @target_user if @list.members.find_by(user_id: @target_user.id).nil?
|
|
|
|
else
|
|
|
|
@list.remove_member @target_user unless @list.members.find_by(user_id: @target_user.id).nil?
|
|
|
|
end
|
|
|
|
|
|
|
|
respond_to do |format|
|
|
|
|
format.turbo_stream do
|
|
|
|
render "update", layout: false, status: :see_other
|
|
|
|
end
|
|
|
|
|
|
|
|
format.html { redirect_to user_path(@target_user) }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2022-11-24 22:51:58 +01:00
|
|
|
def destroy
|
2022-12-05 23:10:11 +01:00
|
|
|
@list = List.find(params[:list])
|
2022-11-24 22:51:58 +01:00
|
|
|
|
|
|
|
@list.destroy
|
|
|
|
|
|
|
|
respond_to do |format|
|
|
|
|
format.turbo_stream do
|
2022-12-05 23:10:11 +01:00
|
|
|
render turbo_stream: turbo_stream.remove("list_#{params[:list]}")
|
2022-11-24 22:51:58 +01:00
|
|
|
end
|
2022-12-05 23:10:11 +01:00
|
|
|
|
|
|
|
format.html { redirect_to root_path }
|
2022-11-24 22:51:58 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def set_user
|
2022-12-05 23:10:11 +01:00
|
|
|
@user = User.where("LOWER(screen_name) = ?", params[:user].downcase).includes(:profile).first!
|
2022-11-24 22:51:58 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
def list_params
|
|
|
|
params.require(:list).permit(:name)
|
|
|
|
end
|
|
|
|
end
|