| 
					
				 | 
			
			
				@@ -1,3 +1,52 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<script setup lang="ts"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { useStore } from "vuex"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { useRoute } from "vue-router"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { computed, watch, onMounted } from "vue"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import useTabQueryHandler from "@/composables/useTabQueryHandler"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import Queue from "@/components/Queue.vue"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import Users from "@/pages/Station/Sidebar/Users.vue"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import Request from "@/components/Request.vue"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const store = useStore(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const route = useRoute(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const { tab, showTab } = useTabQueryHandler("queue"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const station = computed(() => store.state.station.station); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const userId = computed(() => store.state.user.auth.userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const loggedIn = computed(() => store.state.user.auth.loggedIn); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const role = computed(() => store.state.user.auth.rol); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const isOwner = () => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	loggedIn.value && station.value && userId.value === station.value.owner; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const isAdmin = () => loggedIn.value && role.value === "admin"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const isOwnerOrAdmin = () => isOwner() || isAdmin(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const canRequest = (requireLogin = true) => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	station.value && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	(!requireLogin || loggedIn.value) && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	station.value.requests && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	station.value.requests.enabled && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	(station.value.requests.access === "user" || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		(station.value.requests.access === "owner" && isOwnerOrAdmin())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// TODO fix 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+watch(station.value.requests, () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (tab.value === "request" && !canRequest()) showTab("queue"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+onMounted(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		route.query.tab === "queue" || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		route.query.tab === "users" || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		route.query.tab === "request" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		tab.value = route.query.tab; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+</script> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 <template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	<div id="tabs-container"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		<div id="tab-selection"> 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -32,9 +81,9 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				Request 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			</button> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		<queue class="tab" v-show="tab === 'queue'" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		<users class="tab" v-show="tab === 'users'" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		<request 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		<Queue class="tab" v-show="tab === 'queue'" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		<Users class="tab" v-show="tab === 'users'" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		<Request 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			v-if="canRequest()" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			v-show="tab === 'request'" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			class="tab requests-tab" 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -43,75 +92,6 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 </template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-<script> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import { mapActions, mapState } from "vuex"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import Queue from "@/components/Queue.vue"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import TabQueryHandler from "@/mixins/TabQueryHandler.vue"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import Users from "./Users.vue"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import Request from "@/components/Request.vue"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	components: { Queue, Users, Request }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	mixins: [TabQueryHandler], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	data() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			tab: "queue" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	computed: mapState({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		station: state => state.station.station, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		users: state => state.station.users, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		userCount: state => state.station.userCount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		userId: state => state.user.auth.userId, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		loggedIn: state => state.user.auth.loggedIn, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		role: state => state.user.auth.role 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	}), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	watch: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		// eslint-disable-next-line 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		"station.requests": function (requests) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (this.tab === "request" && !this.canRequest()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				this.showTab("queue"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	mounted() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			this.$route.query.tab === "queue" || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			this.$route.query.tab === "users" || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			this.$route.query.tab === "request" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			this.tab = this.$route.query.tab; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	methods: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		isOwner() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			return ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				this.loggedIn && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				this.station && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				this.userId === this.station.owner 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		isAdmin() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			return this.loggedIn && this.role === "admin"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		isOwnerOrAdmin() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			return this.isOwner() || this.isAdmin(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		canRequest(requireLogin = true) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			return ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				this.station && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				(!requireLogin || this.loggedIn) && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				this.station.requests && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				this.station.requests.enabled && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				(this.station.requests.access === "user" || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					(this.station.requests.access === "owner" && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						this.isOwnerOrAdmin())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		...mapActions("modalVisibility", ["openModal"]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-</script> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 <style lang="less" scoped> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 .night-mode { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	#tab-selection .button { 
			 |