diff --git a/app/javascript/controllers/filteredlist_controller.js b/app/javascript/controllers/filteredlist_controller.js index c65811729b2ff2c576d046e095f87f16a57f89af..2cabbaf07fc48f369a1b836d557036e574a718a8 100644 --- a/app/javascript/controllers/filteredlist_controller.js +++ b/app/javascript/controllers/filteredlist_controller.js @@ -16,6 +16,21 @@ export default class extends Controller { } expand() { + if(this.listTarget.children.length == 0) { + const conference = this.element.dataset.conference; + const session = this.element.dataset.session; + const url = `/conferences/${conference}/sessions/${session}/assignments`; + + const template = document.getElementById("template_filteredlist_options").content; + const clone = document.importNode(template, true); + clone.querySelectorAll("a.add_button").forEach(el => { + el.setAttribute("href", `${url}?user_id=${el.dataset.user}`); + el.setAttribute("data-turbo-frame", + this.element.closest('turbo-frame[data-controller="session"]').id); + }); + this.listTarget.appendChild(clone); + } + this.listTarget.classList.remove("hidden"); this.inputTarget.classList.remove("rounded-b-md"); this.filter_nodebounce(); diff --git a/app/views/assignments/_filteredlist.html.erb b/app/views/assignments/_filteredlist.html.erb index e4e5f2f16afd939429c90535f0ca44bf42b37f3a..be2746c7e8f9505ae2da327b4ac30545997fc02f 100644 --- a/app/views/assignments/_filteredlist.html.erb +++ b/app/views/assignments/_filteredlist.html.erb @@ -1,4 +1,4 @@ -<div data-controller="filteredlist"> +<div data-controller="filteredlist" data-conference="<%= session.conference.slug %>" data-session="<%= session.ref_id %>"> <div class="relative"> <input type="text" @@ -16,7 +16,7 @@ </div> <ul data-filteredlist-target="list" class="hidden max-h-32 overflow-scroll flex flex-row flex-wrap gap-1 my-1 mt-0 flex-shrink-0 bg-black/10 rounded-b-md p-2"> <% users.each do |user| %> - <%= render partial: 'assignments/filteredlist_option', locals: { session: session, user: user } %> + <%= render partial: 'assignments/filteredlist_option', locals: { user: } %> <% end %> </ul> </div> diff --git a/app/views/assignments/_filteredlist_option.html.erb b/app/views/assignments/_filteredlist_option.html.erb index 6579860aa51f988258ba990b2164be8cc7c2d7f6..a6f49e90e7243c91f5993c679784b7d7798d2c81 100644 --- a/app/views/assignments/_filteredlist_option.html.erb +++ b/app/views/assignments/_filteredlist_option.html.erb @@ -2,5 +2,5 @@ data-filteredlist-match="<%= user.name.downcase %>" data-turbo-track="dynamic" > - <%= render partial: 'assignments/user_add', locals: { user: user, session: session } %> + <%= render partial: 'assignments/user_add', locals: { user: } %> </li> diff --git a/app/views/assignments/_user_add.html.erb b/app/views/assignments/_user_add.html.erb index 191b07fbe5c7ec5f757efbc1ee2690b76dbf4f2d..3a5516bcd0b9a8fb0b2808c9c7254b89d40163fd 100644 --- a/app/views/assignments/_user_add.html.erb +++ b/app/views/assignments/_user_add.html.erb @@ -4,7 +4,7 @@ <span class="inline-flex items-center gap-x-0.5 rounded-md bg-gray-50 px-2 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10" style="background-color: <%= user.avatar_color %>" title="<%= user.name %>"> <span style="color: <%= user.text_color %>"><%= user.name %></span> <button type="button" class="group relative -mr-1 size-3.5 rounded-sm hover:bg-gray-500/20"> - <%= link_to conference_session_assignments_path(session.conference, session, user_id: user.id), data: { turbo_method: :post, turbo_frame: dom_id(session), action: "filteredlist#contract" } do %> + <%= link_to "", class: "add_button", data: { turbo_method: :post, user: user.id } do %> <span class="sr-only">Add</span> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 16 16" stroke-width="1" class="size-3.5 stroke-gray-600/50 group-hover:stroke-gray-600/75 fill-gray-600/50" style="stroke: <%= user.text_color %>; fill: <%= user.text_color %>"> <path d="M8.75 3.75a.75.75 0 0 0-1.5 0v3.5h-3.5a.75.75 0 0 0 0 1.5h3.5v3.5a.75.75 0 0 0 1.5 0v-3.5h3.5a.75.75 0 0 0 0-1.5h-3.5v-3.5Z" /> diff --git a/app/views/conferences/show.html.erb b/app/views/conferences/show.html.erb index c72964cb858dd8153b77148dc756b2275ce9236d..e5d5434fb4d9e60a624e7a2dca8d3e07acba92e8 100644 --- a/app/views/conferences/show.html.erb +++ b/app/views/conferences/show.html.erb @@ -8,6 +8,11 @@ current_time = Time.zone.now.in_time_zone(@conference.time_zone) #current_time = @sessions_by_date[@conference.days.first].first.starts_at.advance(minutes: 5) %> <%= turbo_stream_from @conference %> +<template class="hidden" id="template_filteredlist_options"> + <% @users.each do |user| %> + <%= render partial: 'assignments/filteredlist_option', locals: { user: } %> + <% end %> +</template> <div> <div> <a href="#now" onclick="document.querySelector('#now')?.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'nearest' }); return false" class="underline text-blue-500">Jump to current time</a> diff --git a/app/views/sessions/_session.html.erb b/app/views/sessions/_session.html.erb index b2ab250d8eeadb2896b00c0c922120a9418bc787..c220a4435a8a5a20b2e2be268067283a02dbc905 100644 --- a/app/views/sessions/_session.html.erb +++ b/app/views/sessions/_session.html.erb @@ -85,6 +85,7 @@ </div> <hr> <small>unassigned (<%= unassigned_users.length %>)</small> - <%= render partial: 'assignments/filteredlist', locals: { session: session, users: unassigned_users } %> + <%= render partial: 'assignments/filteredlist', locals: { session: session, users: [] } %> + </div> </div> <% end %>