Files
Iris/src/js/components/Snapcast.js

148 lines
4.2 KiB
JavaScript
Raw Normal View History

import React from 'react';
2018-09-24 21:37:59 +12:00
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import TextField from './Fields/TextField';
2019-11-05 16:05:49 +13:00
import SnapcastGroups from './SnapcastGroups';
2018-09-24 21:37:59 +12:00
import * as uiActions from '../services/ui/actions';
2019-11-05 16:05:49 +13:00
import * as actions from '../services/snapcast/actions';
import { I18n } from '../locale';
import Button from './Button';
2019-11-05 16:05:49 +13:00
const Snapcast = (props) => {
const {
actions,
show_disconnected_clients,
uiActions,
match,
history,
snapcast: {
host,
port,
ssl,
2019-11-05 16:05:49 +13:00
enabled,
2020-10-02 07:11:08 +13:00
streaming_enabled,
2019-11-05 16:05:49 +13:00
connected,
},
} = props;
return (
<div className="snapcast">
<div className="field checkbox">
<div className="name">
<I18n path="snapcast.enabled" />
</div>
2019-11-05 16:05:49 +13:00
<div className="input">
<label>
<input
type="checkbox"
name="enabled"
checked={enabled}
onChange={() => actions.setEnabled(!enabled)}
/>
<span className="label">
<I18n path="snapcast.enabled" />
2019-11-05 16:05:49 +13:00
</span>
</label>
2020-10-02 07:11:08 +13:00
<label>
<input
type="checkbox"
name="streaming_enabled"
checked={streaming_enabled}
disabled={!enabled}
onChange={() => actions.setStreamingEnabled(!streaming_enabled)}
/>
<span className="label">
<I18n path="snapcast.streaming_enabled" />
</span>
</label>
2019-11-05 16:05:49 +13:00
<label>
<input
type="checkbox"
name="show_disconnected_clients"
checked={show_disconnected_clients}
onChange={() => uiActions.set({ snapcast_show_disconnected_clients: !show_disconnected_clients })}
/>
<span className="label">
<I18n path="snapcast.show_disconnected_clients" />
2019-11-05 16:05:49 +13:00
</span>
</label>
2019-09-05 15:36:11 +12:00
</div>
</div>
2019-11-05 16:05:49 +13:00
<div className="field">
<div className="name">
<I18n path="snapcast.host" />
</div>
2019-11-05 16:05:49 +13:00
<div className="input">
<TextField
value={host}
onChange={(value) => actions.setConnection({ host: value })}
autosave
2019-11-05 16:05:49 +13:00
/>
2019-10-30 06:42:11 +13:00
</div>
2019-11-05 16:05:49 +13:00
</div>
2019-10-30 06:42:11 +13:00
2019-11-05 16:05:49 +13:00
<div className="field">
<div className="name">
<I18n path="snapcast.port" />
</div>
2019-11-05 16:05:49 +13:00
<div className="input">
<TextField
value={port}
name="port"
onChange={(value) => actions.setConnection({ port: value })}
autosave
2019-11-05 16:05:49 +13:00
/>
2019-10-30 06:42:11 +13:00
</div>
2019-09-05 15:36:11 +12:00
</div>
2019-11-05 16:05:49 +13:00
<div className="field checkbox">
<div className="name">
<I18n path="snapcast.encryption.label" />
</div>
<div className="input">
<label>
<input
type="checkbox"
name="ssl"
value={ssl}
checked={ssl}
onChange={() => actions.setConnection({ ssl: !ssl })}
/>
<span className="label tooltip">
<I18n path="snapcast.encryption.sublabel" />
<span className="tooltip__content">
<I18n path="snapcast.encryption.description" />
</span>
</span>
{!ssl && window.location.protocol === 'https:' && (
<span className="red-text">
<I18n path="snapcast.encryption.incompatible" />
</span>
)}
</label>
</div>
</div>
2019-11-05 16:05:49 +13:00
{connected && enabled && <SnapcastGroups match={match} history={history} />}
</div>
);
2021-03-23 21:21:00 +13:00
};
2020-10-02 07:11:08 +13:00
const mapStateToProps = (state) => ({
2019-10-30 06:42:11 +13:00
snapcast: state.snapcast,
2019-10-25 15:47:25 +13:00
show_disconnected_clients: (
state.ui.snapcast_show_disconnected_clients !== undefined
? state.ui.snapcast_show_disconnected_clients
: false
),
2019-09-05 15:36:11 +12:00
});
2019-09-05 15:36:11 +12:00
const mapDispatchToProps = (dispatch) => ({
2019-11-05 16:05:49 +13:00
actions: bindActionCreators(actions, dispatch),
2019-09-05 15:36:11 +12:00
uiActions: bindActionCreators(uiActions, dispatch),
});
2019-10-25 15:47:25 +13:00
export default connect(mapStateToProps, mapDispatchToProps)(Snapcast);