diff --git a/app/assets/stylesheets/application.tailwind.css b/app/assets/stylesheets/application.tailwind.css index 79c3fa7d84ec9a1505f526278322b087c5ee025a..6f2068570f6bc5e69f5d47e317a7f98d8f035355 100644 --- a/app/assets/stylesheets/application.tailwind.css +++ b/app/assets/stylesheets/application.tailwind.css @@ -15,3 +15,9 @@ h1, h2, h3, h4, h5, h6 { @apply font-bold; } +input[type=submit], button { + @apply border rounded-md px-2 py-1; + &.primary { + @apply bg-teal-800 text-teal-50; + } +} diff --git a/app/controllers/assignments_controller.rb b/app/controllers/assignments_controller.rb index 820907634111ecd4ae7098e5dbd307f5bc43384a..aa3062582ee70fb775fa688e24632c315b4ec478 100644 --- a/app/controllers/assignments_controller.rb +++ b/app/controllers/assignments_controller.rb @@ -1,8 +1,40 @@ class AssignmentsController < ApplicationController + before_action :set_session, :set_users + def index @assignments = Assignment.all if params[:user_id] @assignments = @assignments.where(user_id: params[:user_id]) end end + + def create + @user = User.find(params[:user_id]) + @assignment = @session.assignments.new(user: @user) + + if @assignment.save + redirect_to @session, notice: "User was successfully assigned to session." + else + flash[:alert] = @assignment.errors.full_messages.join(", ") + render 'sessions/show' + end + end + + def destroy + @assignment = @session.assignments.find_by(user_id: params[:user_id]) + @assignment.destroy + respond_to do |format| + format.html { redirect_to @session, notice: "User assignment removed successfully." } + end + end + + private + + def set_session + @session = Session.find_by(ref_id: params[:session_ref_id]) + end + + def set_users + @users = User.all + end end diff --git a/app/views/conferences/show.html.erb b/app/views/conferences/show.html.erb index 911fe41065d47a9e9ff231e29a362086281b2b3f..767c8a166152ee3dbc1b6bca0e7251a6f08e655d 100644 --- a/app/views/conferences/show.html.erb +++ b/app/views/conferences/show.html.erb @@ -56,11 +56,15 @@ current_time = @sessions_by_date[@conference.days.first].first.starts_at.advance <h4><%= link_to session.title, [@conference, session] %></h4> <p class="session-time"><%= session.starts_at.strftime('%H:%M') %> - <%= session.ends_at.strftime('%H:%M') %></p> <%#<div class="session-desc"><%= session.description.html_safe %><%#/div>%> - <%= form_with url: assign_user_session_path(@conference, session), method: :post, local: true do |f| %> - <%= f.label :user_id, "Assign User" %> - <%= f.select :user_id, options_from_collection_for_select(@users, :id, :name) %> - <%= f.submit "Assign" %> - <% end %> + <ul class="list-disc"> + <% session.assignments.each do |assignment| %> + <li> + <span class="assigned-user"><%= assignment.user.name %></span> + <%= link_to '[Remove]', conference_session_assignments_path(session.conference, session, user_id: assignment.user_id), data: { turbo_method: :delete, confirm: 'Are you sure?' } %> + </li> + <% end %> + </ul> + <%= render partial: "sessions/assignment_form", locals: { session: session } %> </div> <% end %> </div> diff --git a/app/views/sessions/_assignment_form.html.erb b/app/views/sessions/_assignment_form.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..3092c101e39fa87e4e32f8c28cf99cc1fb962aef --- /dev/null +++ b/app/views/sessions/_assignment_form.html.erb @@ -0,0 +1,9 @@ +<%= form_with url: conference_session_assignments_path(session.conference, session), method: :post, local: true do |f| %> + <%= f.select :user_id, options_from_collection_for_select(@users, :id, :name) %> + <%= f.submit "Assign", class: 'primary' %> + <% if @assignment&.errors&.any? %> + <div class="alert alert-danger"> + <%= @assignment.errors.full_messages.join(", ") %> + </div> + <% end %> +<% end %> diff --git a/app/views/sessions/show.html.erb b/app/views/sessions/show.html.erb index 32b19c4c919f50510558cad797b20244f437c1d4..c77f77974be51b14cb7994defdcb54116d8a8740 100644 --- a/app/views/sessions/show.html.erb +++ b/app/views/sessions/show.html.erb @@ -8,27 +8,18 @@ <h3>Assigned Users</h3> <ul> - <% @session.users.each do |user| %> + <% @session.assignments.each do |assignment| %> <li> - <%= user.name %> - <%= link_to '[Remove]', unassign_user_session_path([@session.conference, @session], user_id: user.id), data: { turbo_method: :delete, confirm: 'Are you sure?' } %> + <%= assignment.user.name %> + <%= link_to '[Remove]', conference_session_assignments_path(@session.conference, @session, user_id: assignment.user_id), data: { turbo_method: :delete, confirm: 'Are you sure?' } %> </li> <% end %> </ul> - <%= form_with url: assign_user_session_path([@session.conference, @session]), method: :post, local: true do |f| %> - <%= f.label :user_id, "Assign User" %> - <%= f.select :user_id, options_from_collection_for_select(@users, :id, :name) %> - <%= f.submit "Assign" %> - <div id="flash"> - <% flash.each do |key, value| %> - <div class="alert alert-<%= key %>"><%= value %></div> - <% end %> - </div> - <% if @assignment&.errors&.any? %> - <div class="alert alert-danger"> - <%= @assignment.errors.full_messages.join(", ") %> - </div> + <div id="flash"> + <% flash.each do |key, value| %> + <div class="alert alert-<%= key %>"><%= value %></div> <% end %> - <% end %> + </div> + <%= render partial: "sessions/assignment_form", locals: { session: @session } %> </div> \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 2521790b545f03b3183b840e6a27e9cc9d694cb3..ffe5506ce24f282aacc18c3491d37d141443e497 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -10,12 +10,12 @@ Rails.application.routes.draw do root "conferences#index" resources :conferences, param: :slug do - resources :sessions do - resource :assigments + resources :sessions, param: :ref_id do + resource :assignments, only: [:create, :destroy] end end - resources :assignments + resources :assignments, only: [:index] resources :sessions, param: :ref_id # get 'conferences/:slug', to: 'conferences#show', as: :conference