import React from 'react'; import { connect } from 'react-redux'; import { bindActionCreators } from 'redux'; import Modal from './Modal'; import * as coreActions from '../../services/core/actions'; import * as uiActions from '../../services/ui/actions'; import * as mopidyActions from '../../services/mopidy/actions'; import * as spotifyActions from '../../services/spotify/actions'; import { I18n, i18n } from '../../locale'; import { uriType } from '../../util/helpers'; import Icon from '../../components/Icon'; import TextField from '../../components/Fields/TextField'; import LinksSentence from '../../components/LinksSentence'; const UriListItem = ({ uri, tracks, albums, remove, }) => { const type = uriType(uri); let item = null; switch (type) { case 'track': item = tracks[uri]; break; case 'album': item = albums[uri]; break; default: break; } return (
{item ? item.name : {uri}} {item && item.artists && ( )} {` (${type})`}
); }; class AddToQueue extends React.Component { constructor(props) { super(props); this.state = { text: '', error: '', uris: [], next: false, }; } componentDidMount() { const { uiActions: { setWindowTitle, }, } = this.props; setWindowTitle(i18n('modal.add_to_queue.title')); } onSubmit = (e) => { const { uris, next, } = this.state; const { mopidyActions: { enqueueURIs, }, } = this.props; e.preventDefault(); enqueueURIs(uris, null, next); window.history.back(); } onChange = (text) => { this.setState({ text }); } addRandom = () => { const { mopidyActions: { addToQueue_getRandomTracks, }, } = this.props; addToQueue_getRandomTracks(20); } addUris = () => { const { text, } = this.state; const { coreActions: { loadItem, }, } = this.props; const uris = text.split(','); const validatedUris = uris.filter((uri) => uriType(uri)); validatedUris.forEach((uri) => { loadItem(uri); }); this.setState({ uris: validatedUris, text: '' }); } removeUri = (uri) => { const { uris, } = this.state; this.setState({ uris: uris.filter((item) => item !== uri) }); } render = () => { const { tracks, albums, } = this.props; const { uris, text, error, next, } = this.state; return (

{error && {error}}
{uris.length ? (
{uris.map((uri, index) => ( ))}
) : ( )}
); } } const mapStateToProps = (state) => ({ mopidy_connected: state.mopidy.connected, albums: state.core.albums, tracks: state.core.tracks, }); const mapDispatchToProps = (dispatch) => ({ coreActions: bindActionCreators(coreActions, dispatch), uiActions: bindActionCreators(uiActions, dispatch), mopidyActions: bindActionCreators(mopidyActions, dispatch), spotifyActions: bindActionCreators(spotifyActions, dispatch), }); export default connect(mapStateToProps, mapDispatchToProps)(AddToQueue);