From 9b70f7e285b8cc71b24bc2890d1259da775798cd Mon Sep 17 00:00:00 2001
From: Christoph Stahl <christoph.stahl@tu-dortmund.de>
Date: Fri, 23 May 2025 15:47:06 +0200
Subject: [PATCH] Add button to send a song to the waiting room

---
 src/App.vue                      | 7 +++++++
 src/components/DesktopLayout.vue | 3 ++-
 src/components/Entry.vue         | 8 +++++++-
 src/components/MobileLayout.vue  | 3 ++-
 src/components/QueueDesktop.vue  | 3 ++-
 src/components/QueueInner.vue    | 3 ++-
 src/components/QueueTab.vue      | 3 ++-
 src/main.js                      | 3 ++-
 8 files changed, 26 insertions(+), 7 deletions(-)

diff --git a/src/App.vue b/src/App.vue
index 995146a..ba4f34f 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -94,6 +94,11 @@ function waitingRoomToQueue(uuid) {
     state.socket.emit("waiting-room-to-queue", {"uuid": uuid})
 }
 
+function queueToWaitingRoom(uuid) {
+    console.log(uuid)
+    state.socket.emit("queue-to-waiting-room", {"uuid": uuid})
+}
+
 function append(entry) {
     checked_append_with_name(entry, state.value.name) 
 }
@@ -295,6 +300,7 @@ function joinRoom() {
         @moveUp="moveUp"
         @moveTo="moveTo"
         @waitingRoomToQueue="waitingRoomToQueue"
+        @queueToWaitingRoom="queueToWaitingRoom"
         />
     <DesktopLayout 
         v-show="!state.is_small" 
@@ -307,6 +313,7 @@ function joinRoom() {
         @moveUp="moveUp"
         @moveTo="moveTo"
         @waitingRoomToQueue="waitingRoomToQueue"
+        @queueToWaitingRoom="queueToWaitingRoom"
         />
     <WelcomeReveal
       v-if="!state.joined"
diff --git a/src/components/DesktopLayout.vue b/src/components/DesktopLayout.vue
index cd53998..5e14372 100644
--- a/src/components/DesktopLayout.vue
+++ b/src/components/DesktopLayout.vue
@@ -4,7 +4,7 @@ import QueueDesktop from './QueueDesktop.vue'
 import RecentDesktop from './RecentDesktop.vue'
 
 const props = defineProps(['state']);
-const emit = defineEmits(['update:searchTerm', 'search', 'append', 'skip', 'skipCurrent', 'moveUp', 'waitingRoomToQueue', 'moveTo'])
+const emit = defineEmits(['update:searchTerm', 'search', 'append', 'skip', 'skipCurrent', 'moveUp', 'waitingRoomToQueue', 'queueToWaitingRoom', 'moveTo'])
 </script>
 
 
@@ -21,6 +21,7 @@ const emit = defineEmits(['update:searchTerm', 'search', 'append', 'skip', 'skip
       @moveTo="(data) => $emit('moveTo', data)"
       @skipCurrent="$emit('skipCurrent')"
       @waitingRoomToQueue="(uuid) => $emit('waitingRoomToQueue', uuid)"
+      @queueToWaitingRoom="(uuid) => $emit('queueToWaitingRoom', uuid)"
     /> 
     <RecentDesktop :recent="state.recent" :admin="state.admin" />
   </div>
diff --git a/src/components/Entry.vue b/src/components/Entry.vue
index c3ee5bf..368397b 100644
--- a/src/components/Entry.vue
+++ b/src/components/Entry.vue
@@ -1,7 +1,7 @@
 <script setup>
 import { computed } from 'vue'
 const props = defineProps(['admin', 'entry', 'current', 'firstStartedAt', 'offset', 'currentTime', 'waitingRoom'])
-const emits = defineEmits(['skip', 'skipCurrent', 'moveUp', 'waitingRoomToQueue', 'moveTo'])
+const emits = defineEmits(['skip', 'skipCurrent', 'moveUp', 'waitingRoomToQueue', 'queueToWaitingRoom', 'moveTo'])
 
 function skip() {
   if(props.current) {
@@ -88,6 +88,12 @@ const dragleave = (e) => {
                   <button v-if="!waitingRoom" class="button alert fright" @click="skip">
                   <font-awesome-icon icon="fa-solid fa-times" />
                   </button>
+                  <button 
+                    class="button success fright" 
+                    v-if="!waitingRoom && !current" 
+                    @click="$emit('queueToWaitingRoom', entry.uuid)" >
+                  <font-awesome-icon icon="fa-solid fa-arrows-down-to-line" />
+                  </button>
                   <button 
                     class="button success fright" 
                     v-if="waitingRoom" 
diff --git a/src/components/MobileLayout.vue b/src/components/MobileLayout.vue
index 4a9d1bb..1ccedfe 100644
--- a/src/components/MobileLayout.vue
+++ b/src/components/MobileLayout.vue
@@ -5,7 +5,7 @@ import RecentTab from './RecentTab.vue'
 import TabHeader from './TabHeader.vue'
 
 const props = defineProps(['state']);
-const emit = defineEmits(['update:searchTerm', 'search', 'append', 'skip', 'skipCurrent', 'moveUp', 'waitingRoomToQueue', 'moveTo'])
+const emit = defineEmits(['update:searchTerm', 'search', 'append', 'skip', 'skipCurrent', 'moveUp', 'waitingRoomToQueue', 'queueToWaitingRoom', 'moveTo'])
 
 </script>
 
@@ -29,6 +29,7 @@ const emit = defineEmits(['update:searchTerm', 'search', 'append', 'skip', 'skip
             @moveTo="(data) => $emit('moveTo', data)"
             @skipCurrent="$emit('skipCurrent')"
             @waitingRoomToQueue="(uuid) => $emit('waitingRoomToQueue', uuid)"
+            @queueToWaitingRoom="(uuid) => $emit('queueToWaitingRoom', uuid)"
             /> 
           <RecentTab :recent="state.recent" :admin="state.admin" />
         </div>
diff --git a/src/components/QueueDesktop.vue b/src/components/QueueDesktop.vue
index 61f8d1f..9759f0b 100644
--- a/src/components/QueueDesktop.vue
+++ b/src/components/QueueDesktop.vue
@@ -2,7 +2,7 @@
 import QueueInner from './QueueInner.vue'
 
 const props = defineProps(['queue', 'waiting_room', 'admin', 'waiting_room_policy']);
-const emits = defineEmits(['skip', 'skipCurrent', 'moveUp', 'waitingRoomToQueue', 'moveTo'])
+const emits = defineEmits(['skip', 'skipCurrent', 'moveUp', 'waitingRoomToQueue', 'queueToWaitingRoom', 'moveTo'])
 </script>
 
 <template>
@@ -18,6 +18,7 @@ const emits = defineEmits(['skip', 'skipCurrent', 'moveUp', 'waitingRoomToQueue'
       @moveTo="(data) => $emit('moveTo', data)"
       @skipCurrent="$emit('skipCurrent')"
       @waitingRoomToQueue="(uuid) => $emit('waitingRoomToQueue', uuid)"
+      @queueToWaitingRoom="(uuid) => $emit('queueToWaitingRoom', uuid)"
     />
   </div>
 </template>
diff --git a/src/components/QueueInner.vue b/src/components/QueueInner.vue
index 88142ca..45ac754 100644
--- a/src/components/QueueInner.vue
+++ b/src/components/QueueInner.vue
@@ -3,7 +3,7 @@ import { onMounted, reactive } from 'vue'
 import Entry from './Entry.vue'
 
 const props = defineProps(['queue', 'waiting_room', 'admin', 'waiting_room_policy']);
-const emits = defineEmits(['skip', 'skipCurrent', 'moveUp', 'waitingRoomToQueue', 'moveTo'])
+const emits = defineEmits(['skip', 'skipCurrent', 'moveUp', 'waitingRoomToQueue', 'queueToWaitingRoom', 'moveTo'])
 
 let currentTime = reactive({time: Date.now()})
 
@@ -44,6 +44,7 @@ function offset(index) {
             @skipCurrent="$emit('skipCurrent')"
             @moveUp="(uuid) => $emit('moveUp', uuid)" 
             @moveTo="(data) => $emit('moveTo', data)"
+            @queueToWaitingRoom="(uuid) => $emit('queueToWaitingRoom', uuid)"
           />
           </ul>
           <div v-show="waiting_room_policy" class="header">Waiting room</div>
diff --git a/src/components/QueueTab.vue b/src/components/QueueTab.vue
index 5a782f7..46b2f52 100644
--- a/src/components/QueueTab.vue
+++ b/src/components/QueueTab.vue
@@ -2,7 +2,7 @@
 import QueueInner from './QueueInner.vue'
 
 const props = defineProps(['queue', 'waiting_room', 'admin', 'waiting_room_policy']);
-const emits = defineEmits(['skip', 'skipCurrent', 'moveUp', 'waitingRoomToQueue', 'moveTo'])
+const emits = defineEmits(['skip', 'skipCurrent', 'moveUp', 'waitingRoomToQueue', 'queueToWaitingRoom', 'moveTo'])
 </script>
 
 <template>
@@ -16,6 +16,7 @@ const emits = defineEmits(['skip', 'skipCurrent', 'moveUp', 'waitingRoomToQueue'
       @moveUp="(uuid) => $emit('moveUp', uuid)" 
       @skipCurrent="$emit('skipCurrent')"
       @waitingRoomToQueue="(uuid) => $emit('waitingRoomToQueue', uuid)"
+      @queueToWaitingRoom="(uuid) => $emit('queueToWaitingRoom', uuid)"
       @moveTo="(data) => $emit('moveTo', data)"
     />
 </div>
diff --git a/src/main.js b/src/main.js
index 44df7bf..caf3004 100644
--- a/src/main.js
+++ b/src/main.js
@@ -6,7 +6,7 @@ import App from './App.vue'
 import Main from './Main.vue'
 import { library } from '@fortawesome/fontawesome-svg-core'
 import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'
-import { faMagnifyingGlass, faList, faChair, faArrowUp, faHistory, faPlus, faStepForward, faTimes, faArrowsUpToLine } from '@fortawesome/free-solid-svg-icons'
+import { faMagnifyingGlass, faList, faChair, faArrowUp, faHistory, faPlus, faStepForward, faTimes, faArrowsUpToLine, faArrowsDownToLine } from '@fortawesome/free-solid-svg-icons'
 import { faYoutube } from '@fortawesome/free-brands-svg-icons'
 
 import 'foundation-sites/dist/css/foundation.min.css'
@@ -21,6 +21,7 @@ library.add(faTimes)
 library.add(faArrowUp)
 library.add(faChair)
 library.add(faArrowsUpToLine)
+library.add(faArrowsDownToLine)
 
 window.jQuery = jquery;
 window.$ = jquery;
-- 
GitLab