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';
import Button from '../../components/Button';
const UriListItem = ({
uri,
tracks,
random_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;
}
if (!item) {
item = random_tracks.find((track) => track.uri === uri);
}
return (
{item ? item.name : {uri}}
{item && item.artists && (
)}
{` (${type})`}
);
};
class AddToQueue extends React.Component {
constructor(props) {
super(props);
this.state = {
text: '',
error: '',
next: false,
};
}
componentDidMount() {
const {
uiActions: {
setWindowTitle,
},
} = this.props;
setWindowTitle(i18n('modal.add_to_queue.title'));
}
onSubmit = (e) => {
const {
next,
} = this.state;
const {
mopidyActions: {
enqueueURIs,
},
view: {
uris = [],
},
} = this.props;
e.preventDefault();
enqueueURIs(uris, null, next);
this.reset();
window.history.back();
}
onChange = (text) => {
this.setState({ text });
}
reset = () => {
const {
coreActions: {
viewDataLoaded,
},
} = this.props;
viewDataLoaded({ uris: [], random_tracks: [] });
}
addRandom = () => {
const {
mopidyActions: {
view_getRandomTracks,
},
} = this.props;
view_getRandomTracks(20);
}
addUris = () => {
const {
text,
} = this.state;
const {
view: {
uris: prevUris = [],
},
coreActions: {
loadItem,
viewDataLoaded,
},
} = this.props;
const uris = text.split(',');
const validatedUris = uris.filter((uri) => uriType(uri));
validatedUris.forEach((uri) => {
loadItem(uri);
});
this.setState({ text: '' });
viewDataLoaded({ uris: [...prevUris, ...validatedUris] });
}
removeUri = (uri) => {
const {
view: {
uris = [],
},
coreActions: {
viewDataLoaded,
},
} = this.props;
viewDataLoaded({ uris: uris.filter((item) => item !== uri) });
}
render = () => {
const {
tracks,
albums,
view: {
uris = [],
random_tracks = [],
},
} = this.props;
const {
text,
error,
next,
} = this.state;
return (
);
}
}
const mapStateToProps = (state) => ({
albums: state.core.albums,
tracks: state.core.tracks,
view: state.core.view ? state.core.view : {},
});
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);