| 
					
				 | 
			
			
				@@ -20,18 +20,114 @@ export default class EditPlaylist extends Component { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		CustomInput.initialize(this); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		this.state = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			gotPlaylist: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			playlist: {}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		io.getSocket((socket) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			socket.emit('playlists.getPlaylist', this.props.playlistId, res => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (res.status === 'success') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.input.displayName.setValue(res.data.displayName, true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.setState({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						gotPlaylist: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						playlist: res.data, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			socket.on('event:playlist.addSong', data => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (this.props.playlistId === data.playlistId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					let songs = this.state.playlist.songs; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					songs.push(data.song); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.setState({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						playlist: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							...this.state.playlist, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							songs, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			socket.on('event:playlist.updateDisplayName', data => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (this.props.playlistId === data.playlistId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.setState({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						playlist: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							...this.state.playlist, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							displayName: data.displayName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			socket.on('event:playlist.moveSongToBottom', data => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (this.props.playlistId === data.playlistId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					let songs = this.state.playlist.songs; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					let songIndex; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					songs.forEach((song, index) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						if (song.songId === data.songId) songIndex = index; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					let song = songs.splice(songIndex, 1)[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					songs.push(song); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.setState({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						playlist: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							...this.state.playlist, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							songs, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			socket.on('event:playlist.moveSongToTop', (data) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (this.props.playlistId === data.playlistId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					let songs = this.state.playlist.songs; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					let songIndex; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					songs.forEach((song, index) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						if (song.songId === data.songId) songIndex = index; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					let song = songs.splice(songIndex, 1)[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					songs.unshift(song); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.setState({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						playlist: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							...this.state.playlist, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							songs, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			socket.on('event:playlist.removeSong', data => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (this.props.playlistId === data.playlistId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					//TODO Somehow make this sync, so when 2 songs get removed at the same ms it removes both not just one 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					let songs = this.state.playlist.songs; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					songs.forEach((song, index) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						if (song.songId === data.songId) songs.splice(index, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.setState({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						playlist: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							...this.state.playlist, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							songs, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		console.log("edit Playlist", props); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	addSongToQueueCallback = (songId) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		io.getSocket((socket) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			// Add song to queue 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			console.log("Add song to queue", songId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			socket.emit("playlists.addSongToPlaylist", songId, this.props.playlistId, res => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (res.status === "success") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.messages.clearAddSuccess("Successfully added song."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.messages.addError(res.message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -39,6 +135,76 @@ export default class EditPlaylist extends Component { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		this.props.dispatch(openOverlay3("searchYouTube", this.addSongToQueueCallback)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	changeDisplayName = () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.messages.clearErrorSuccess(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (CustomInput.hasInvalidInput(this.input, ["displayName"])) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			this.messages.clearAddError(this.props.t("general:someFieldsAreIncorrectError")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			io.getSocket(socket => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				socket.emit("playlists.updateDisplayName", this.props.playlistId, this.input.displayName.getValue(), res => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if (res.status === "success") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						this.messages.clearAddSuccess("Successfully changed name."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						this.messages.addError(res.message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	deletePlaylist = () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.messages.clearErrorSuccess(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		io.getSocket(socket => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			socket.emit("playlists.remove", this.props.playlistId, res => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (res.status === "success") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.messages.clearAddSuccess("Successfully deleted playlist."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.props.dispatch(closeOverlay2()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.messages.addError(res.message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	deleteSong = (songId) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.messages.clearErrorSuccess(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		io.getSocket(socket => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			socket.emit('playlists.removeSongFromPlaylist', songId, this.props.playlistId, res => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (res.status === "success") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.messages.clearAddSuccess("Successfully removed song."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.messages.addError(res.message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	promoteSong = (songId) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.messages.clearErrorSuccess(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		io.getSocket(socket => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			socket.emit('playlists.moveSongToTop', this.props.playlistId, songId, res => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (res.status === "success") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.messages.clearAddSuccess("Successfully moved song up."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.messages.addError(res.message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	demoteSong = (songId) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.messages.clearErrorSuccess(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		io.getSocket(socket => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			socket.emit('playlists.moveSongToBottom', this.props.playlistId, songId, res => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (res.status === "success") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.messages.clearAddSuccess("Successfully moved song up."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.messages.addError(res.message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	close = () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		this.props.dispatch(closeOverlay2()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	}; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -48,11 +214,35 @@ export default class EditPlaylist extends Component { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			<div className="overlay"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				<button onClick={ this.close }>Back</button> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				<h1>Edit Playlist</h1> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				Song list 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				<CustomInput type="playlistDescription" name="displayName" label="Display name" placeholder="Display name" onRef={ ref => (this.input.displayName = ref) } /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				<button onClick={ this.changeDisplayName }>Change displayname</button> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					(this.state.gotPlaylist) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					? ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						<ul> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								this.state.playlist.songs.map((song) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+									return ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+										<li key={ song.songId }> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+											<p>{ song.title }</p> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+											<span onClick={ () => { this.deleteSong(song.songId) }}>DELETE</span><br/> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+											<span onClick={ () => { this.promoteSong(song.songId) }}>UP</span><br/> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+											<span onClick={ () => { this.demoteSong(song.songId) }}>DOWN</span> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+										</li> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+									); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						</ul> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					: null 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				<button onClick={ this.addSongToQueue }>Add song to queue</button> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				<CustomErrors onRef={ ref => (this.messages = ref) } /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				<button onClick={ this.deletePlaylist }>Delete this playlist</button> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 |