| 
					
				 | 
			
			
				@@ -0,0 +1,191 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	<div id="my-playlists"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		<aside v-if="playlists.length > 0" class="menu"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			<ul class="menu-list"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				<li v-for="(playlist, index) in playlists" :key="index"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					<playlist-item :playlist="playlist"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						<div class="icons-group" slot="actions"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							<button 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								v-if=" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+									station.type === 'community' && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+										isNotSelected(playlist._id) && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+										!station.partyMode 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								class="button is-primary" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								@click="selectPlaylist(playlist._id)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								<i class="material-icons">play_arrow</i> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							</button> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							<button 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								class="button is-primary" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								@click="edit(playlist._id)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								<i class="material-icons">edit</i> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							</button> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					</playlist-item> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				</li> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			</ul> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		</aside> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		<div v-else class="has-text-centered">No Playlists found</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		<a 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			class="button create-playlist" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			href="#" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			@click="openModal({ sector: 'station', modal: 'createPlaylist' })" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			>Create Playlist</a 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+</template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<script> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { mapState, mapActions } from "vuex"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import Toast from "toasters"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import PlaylistItem from "../../../../components/ui/PlaylistItem.vue"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import io from "../../../../io"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	components: { PlaylistItem }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	data() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			playlists: [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	computed: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		...mapState("modals", { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			modals: state => state.modals.station 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		...mapState({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			station: state => state.station.station 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	mounted() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		io.getSocket(socket => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			this.socket = socket; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			/** Get playlists for user */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			this.socket.emit("playlists.indexForUser", res => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (res.status === "success") this.playlists = res.data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			this.socket.on("event:playlist.create", playlist => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				this.playlists.push(playlist); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			this.socket.on("event:playlist.delete", playlistId => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				this.playlists.forEach((playlist, index) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if (playlist._id === playlistId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						this.playlists.splice(index, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			this.socket.on("event:playlist.addSong", data => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				this.playlists.forEach((playlist, index) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if (playlist._id === data.playlistId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						this.playlists[index].songs.push(data.song); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			this.socket.on("event:playlist.removeSong", data => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				this.playlists.forEach((playlist, index) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if (playlist._id === data.playlistId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						this.playlists[index].songs.forEach((song, index2) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							if (song._id === data.songId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								this.playlists[index].songs.splice(index2, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			this.socket.on("event:playlist.updateDisplayName", data => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				this.playlists.forEach((playlist, index) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if (playlist._id === data.playlistId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						this.playlists[index].displayName = data.displayName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	methods: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		edit(id) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			this.editPlaylist(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			this.openModal({ sector: "station", modal: "editPlaylist" }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		selectPlaylist(id) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			this.socket.emit( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				"stations.selectPrivatePlaylist", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				this.station._id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				res => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if (res.status === "failure") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						return new Toast({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							content: res.message, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							timeout: 8000 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					return new Toast({ content: res.message, timeout: 4000 }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		isNotSelected(id) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			// TODO Also change this once it changes for a station 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (this.station && this.station.privatePlaylist === id) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		...mapActions("modals", ["openModal"]), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		...mapActions("user/playlists", ["editPlaylist"]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+</script> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<style lang="scss" scoped> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@import "../../../../styles/global.scss"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#my-playlists { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	background-color: #fff; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	border: 1px solid $light-grey-2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	margin-bottom: 20px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	padding: 10px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.icons-group { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		display: flex; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		align-items: center; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		button:not(:first-of-type) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			margin-left: 5px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+.night-mode { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	#my-playlists { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		background-color: #222 !important; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		border: 0 !important; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+.menu-list li { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	align-items: center; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+.create-playlist { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	width: 100%; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	height: 40px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	border-radius: 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	background-color: rgba(3, 169, 244, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	color: $white !important; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	border: 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	&:active, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	&:focus { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		border: 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	&:focus { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		background-color: $primary-color; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+</style> 
			 |