diff --git a/app/javascript/controllers/filteredlist_controller.js b/app/javascript/controllers/filteredlist_controller.js index 2cabbaf07fc48f369a1b836d557036e574a718a8..72026abde72d106531460d0a4407eff0212c5733 100644 --- a/app/javascript/controllers/filteredlist_controller.js +++ b/app/javascript/controllers/filteredlist_controller.js @@ -51,9 +51,13 @@ export default class extends Controller { this.clearTarget.classList.add("hidden"); } + const filter = document.querySelector(this.element.dataset.filterSelector); + // Filter options by the `data-filteredlist-match` attribute for (const option of this.listTarget.children) { - if (option.dataset.filteredlistMatch.includes(query)) { + const uid = option.querySelector("a.add_button").dataset.user; + const unavailable = filter && filter.querySelector(`a[data-uid="${uid}"]`); + if (!unavailable && option.dataset.filteredlistMatch.includes(query)) { option.classList.remove("hidden"); } else { option.classList.add("hidden"); diff --git a/app/javascript/controllers/session_controller.js b/app/javascript/controllers/session_controller.js index 2be5137db714dc5217115a249e62611f43081111..6f16c2f375b92dd297263442230cb8ddb99db2b3 100644 --- a/app/javascript/controllers/session_controller.js +++ b/app/javascript/controllers/session_controller.js @@ -13,7 +13,7 @@ export default class extends Controller { connect() { const uid = document.body.dataset.loggedinUid; - const isCandidate = this.candidatesTarget.querySelector(`a.candidate[data-candidate-uid="${uid}"]`); + const isCandidate = this.candidatesTarget.querySelector(`a.candidate[data-uid="${uid}"]`); const isShiftcoordinator = document.body.dataset.isShiftcoordinator; this.element.querySelectorAll('.only-loggedin').forEach(el => { diff --git a/app/views/assignments/_filteredlist.html.erb b/app/views/assignments/_filteredlist.html.erb index be2746c7e8f9505ae2da327b4ac30545997fc02f..f6c3d2ebc7b3897cf434c63f799790371734aab0 100644 --- a/app/views/assignments/_filteredlist.html.erb +++ b/app/views/assignments/_filteredlist.html.erb @@ -1,4 +1,4 @@ -<div data-controller="filteredlist" data-conference="<%= session.conference.slug %>" data-session="<%= session.ref_id %>"> +<div data-controller="filteredlist" data-conference="<%= session.conference.slug %>" data-session="<%= session.ref_id %>" data-filter-selector="#<%= dom_id(session) %> .assigned"> <div class="relative"> <input type="text" diff --git a/app/views/assignments/_user_avatar.html.erb b/app/views/assignments/_user_avatar.html.erb index bfc7e8dd3fc64639b69020af3672260b57608d62..02537db42b8f8fe0ef2cbf5fbde19701adf3cf99 100644 --- a/app/views/assignments/_user_avatar.html.erb +++ b/app/views/assignments/_user_avatar.html.erb @@ -2,7 +2,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="only-shiftcoordinator hidden group relative -mr-1 size-3.5 rounded-sm hover:bg-gray-500/20"> - <%= link_to conference_session_assignment_path(assignment.session.conference, assignment.session, assignment), data: { turbo_method: :delete, confirm: 'Are you sure?' }, method: :delete do %> + <%= link_to conference_session_assignment_path(assignment.session.conference, assignment.session, assignment), data: { turbo_method: :delete, confirm: 'Are you sure?', uid: user.id }, method: :delete do %> <span class="sr-only">Remove</span> <svg viewBox="0 0 14 14" class="size-3.5 stroke-gray-600/50 group-hover:stroke-gray-600/75" style="stroke: <%= user.text_color %>"> <path d="M4 4l6 6m0-6l-6 6" /> diff --git a/app/views/candidates/_user_avatar.html.erb b/app/views/candidates/_user_avatar.html.erb index 12e8acb5c6e37360d63ed392c09ae89deee5f6e9..a40fc17d097ec5259663c04a759408ff8363c396 100644 --- a/app/views/candidates/_user_avatar.html.erb +++ b/app/views/candidates/_user_avatar.html.erb @@ -3,7 +3,7 @@ <span class="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="only-shiftcoordinator hidden 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), class: "candidate", data: { turbo_method: :post, turbo_frame: dom_id(session), candidate_uid: user.id } do %> + <%= link_to conference_session_assignments_path(session.conference, session, user_id: user.id), class: "candidate", data: { turbo_method: :post, turbo_frame: dom_id(session), uid: 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/sessions/_session.html.erb b/app/views/sessions/_session.html.erb index b0584be9fa1e13b670837562f9931db3db6a9464..f145ef13b54c2f6676a69bd82c267f51c9043dad 100644 --- a/app/views/sessions/_session.html.erb +++ b/app/views/sessions/_session.html.erb @@ -73,7 +73,7 @@ <% end %> <small>assigned (<%= session.assignments.length %>)</small> - <ul class="inline-flex flex-wrap gap-1 my-1"> + <ul class="assigned inline-flex flex-wrap gap-1 my-1"> <% session.assignments.each do |assignment| %> <li> <span class="assigned-user"><%= render partial: 'assignments/user_avatar', locals: { assignment: assignment } %></span>