2020-04-15 14:58:06 -07:00
|
|
|
import React from 'react';
|
|
|
|
import { connect } from 'react-redux';
|
|
|
|
import { defineMessages, injectIntl } from 'react-intl';
|
|
|
|
import ImmutablePureComponent from 'react-immutable-pure-component';
|
|
|
|
import PropTypes from 'prop-types';
|
2020-04-16 14:13:22 -07:00
|
|
|
import ImmutablePropTypes from 'react-immutable-proptypes';
|
2020-04-17 17:22:40 -07:00
|
|
|
import { changePreference } from 'gabsocial/actions/preferences';
|
2020-04-15 14:58:06 -07:00
|
|
|
import Column from '../ui/components/column';
|
|
|
|
|
|
|
|
const messages = defineMessages({
|
|
|
|
heading: { id: 'column.preferences', defaultMessage: 'Preferences' },
|
|
|
|
});
|
|
|
|
|
2020-04-16 14:13:22 -07:00
|
|
|
// TODO: Pull dynamically
|
|
|
|
const themes = {
|
|
|
|
cobalt: 'cobalt',
|
|
|
|
'gabsocial-light': 'Light',
|
|
|
|
default: 'Dark',
|
|
|
|
contrast: 'High contrast',
|
|
|
|
halloween: 'Halloween',
|
|
|
|
neenster: 'neenster',
|
|
|
|
glinner: 'glinner',
|
|
|
|
lime: 'lime',
|
|
|
|
};
|
|
|
|
|
|
|
|
const mapStateToProps = state => ({
|
|
|
|
settings: state.get('settings'),
|
|
|
|
});
|
2020-04-15 14:58:06 -07:00
|
|
|
|
|
|
|
export default @connect(mapStateToProps)
|
|
|
|
@injectIntl
|
|
|
|
class Preferences extends ImmutablePureComponent {
|
|
|
|
|
|
|
|
static propTypes = {
|
|
|
|
dispatch: PropTypes.func.isRequired,
|
|
|
|
intl: PropTypes.object.isRequired,
|
2020-04-16 14:13:22 -07:00
|
|
|
settings: ImmutablePropTypes.map,
|
2020-04-15 14:58:06 -07:00
|
|
|
};
|
|
|
|
|
2020-04-16 14:13:22 -07:00
|
|
|
constructor(props) {
|
|
|
|
super(props);
|
|
|
|
this.state = { isLoading: false };
|
|
|
|
}
|
|
|
|
|
|
|
|
getFormData = (form) => {
|
|
|
|
return Object.fromEntries(
|
|
|
|
Array.from(form).map(i => [i.name, i.value])
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
onThemeChange = e => {
|
|
|
|
const { dispatch } = this.props;
|
2020-04-17 17:22:40 -07:00
|
|
|
dispatch(changePreference(['theme'], e.target.value));
|
2020-04-16 14:13:22 -07:00
|
|
|
}
|
|
|
|
|
2020-04-15 14:58:06 -07:00
|
|
|
render() {
|
2020-04-16 14:13:22 -07:00
|
|
|
const { settings, intl } = this.props;
|
2020-04-15 14:58:06 -07:00
|
|
|
|
|
|
|
return (
|
2020-04-16 14:13:22 -07:00
|
|
|
<Column icon='users' heading={intl.formatMessage(messages.heading)} backBtnSlim>
|
|
|
|
<form className='simple_form' onSubmit={this.handleSubmit}>
|
|
|
|
<fieldset disabled={this.state.isLoading}>
|
|
|
|
<div className='fields-group'>
|
|
|
|
<div className='input with_label select optional user_setting_theme'>
|
|
|
|
<div className='label_input'>
|
|
|
|
<label className='select optional' htmlFor='user_setting_theme'>Site theme</label>
|
|
|
|
<div className='label_input__wrapper'>
|
|
|
|
<select
|
|
|
|
className='select optional'
|
|
|
|
name='user[setting_theme]'
|
|
|
|
id='user_setting_theme'
|
|
|
|
onChange={this.onThemeChange}
|
2020-04-17 17:22:40 -07:00
|
|
|
defaultValue={settings.get('theme')}
|
2020-04-16 14:13:22 -07:00
|
|
|
>
|
|
|
|
{Object.keys(themes).map(theme => (
|
|
|
|
<option key={theme} value={theme}>
|
|
|
|
{themes[theme]}
|
|
|
|
</option>
|
|
|
|
))}
|
|
|
|
</select>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</fieldset>
|
|
|
|
</form>
|
|
|
|
</Column>
|
2020-04-15 14:58:06 -07:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|