import React from 'react'; import { connect } from 'react-redux'; import { bindActionCreators } from 'redux'; import { Route, Link } from 'react-router-dom'; import ConfirmationButton from '../components/Fields/ConfirmationButton'; import PusherConnectionList from '../components/PusherConnectionList'; import SourcesPriority from '../components/Fields/SourcesPriority'; import Commands from '../components/Fields/Commands'; import TextField from '../components/Fields/TextField'; import Header from '../components/Header'; import Icon from '../components/Icon'; import Services from '../components/Services'; import * as helpers from '../helpers'; import * as coreActions from '../services/core/actions'; import * as uiActions from '../services/ui/actions'; import * as pusherActions from '../services/pusher/actions'; import * as mopidyActions from '../services/mopidy/actions'; import * as lastfmActions from '../services/lastfm/actions'; import * as spotifyActions from '../services/spotify/actions'; class Settings extends React.Component { constructor(props){ super(props); this.state = { mopidy_host: this.props.mopidy.host, mopidy_port: this.props.mopidy.port, mopidy_library_artists_uri: this.props.mopidy.library_artists_uri, mopidy_library_albums_uri: this.props.mopidy.library_albums_uri, pusher_username: this.props.pusher.username, input_in_focus: null } } componentDidMount(){ this.props.uiActions.setWindowTitle("Settings"); } componentWillReceiveProps(nextProps){ var changed = false var state = this.state if (nextProps.pusher.username && nextProps.pusher.username != this.state.pusher_username && this.state.input_in_focus != 'pusher_username'){ state.pusher_username = nextProps.pusher.username changed = true } if (changed){ this.setState(state) } } resetAllSettings(){ localStorage.clear(); window.location = '#' window.location.reload(true) return false; } setConfig(e){ this.setState({input_in_focus: null}); e.preventDefault(); this.props.mopidyActions.set({ host: this.state.mopidy_host, port: this.state.mopidy_port }); window.location.reload(true); return false; } handleBlur(service, name, value){ this.setState({input_in_focus: null}); var data = {}; data[name] = value; this.props[service+'Actions'].set(data); // Any per-field actions switch (name){ case 'library_albums_uri': this.props.mopidyActions.clearLibraryAlbums(); break; case 'library_artists_uri': this.props.mopidyActions.clearLibraryArtists(); break; } } renderApplyButton(){ if (this.props.mopidy.host == this.state.mopidy_host && this.props.mopidy.port == this.state.mopidy_port){ return null; } return (