mattermost-mobile/app/screens/clock_display/clock_display.android.js
Chris Duarte 8b62ec7133 Clock Display Settings (#1334)
* Clock Display Settings

Add api call for saving militaryTime

WIP Android Clock Display Modal

Clean up styles for iOS and Android

header info no longer required in Sectin component

Add Display Settings option

Clean up Advance Settings

* Add requested changes

* Move Display options below Notifications option
2018-01-19 19:37:03 -03:00

211 lines
6.9 KiB
JavaScript

import React from 'react';
import PropTypes from 'prop-types';
import {
TouchableOpacity,
Modal,
View
} from 'react-native';
import StatusBar from 'app/components/status_bar';
import FormattedText from 'app/components/formatted_text';
import RadioButtonGroup from 'app/components/radio_button';
import {changeOpacity, makeStyleSheetFromTheme} from 'app/utils/theme';
import ClockDisplayBase from './clock_display_base';
export default class ClockDisplay extends ClockDisplayBase {
static propTypes = {
showModal: PropTypes.bool.isRequired,
militaryTime: PropTypes.bool.isRequired,
onClose: PropTypes.func.isRequired
};
setMilitaryTime = (value) => {
this.setState({
newMilitaryTime: value
});
};
closeModal = () => {
const {militaryTime, onClose} = this.props;
this.setState({
newMilitaryTime: militaryTime
});
onClose();
};
saveSelection = () => {
const {newMilitaryTime} = this.state;
const {onClose} = this.props;
this.saveClockDisplayPreference(newMilitaryTime);
onClose();
};
renderClockDisplayModal = (style) => {
const {showModal} = this.props;
const {intl} = this.context;
const {newMilitaryTime} = this.state;
const options = [{
label: intl.formatMessage({
id: 'user.settings.display.normalClock',
defaultMessage: '12-hour clock (example: 4:00 PM)'
}),
value: 'false',
checked: newMilitaryTime === 'false'
}, {
label: intl.formatMessage({
id: 'user.settings.display.militaryClock',
defaultMessage: '24-hour clock (example: 16:00)'
}),
value: 'true',
checked: newMilitaryTime === 'true'
}];
return (
<Modal
animationType='slide'
transparent={true}
visible={showModal}
onRequestClose={this.closeModal}
>
<View style={style.modalOverlay}>
<View style={style.modal}>
<View style={style.modalBody}>
<View style={style.modalTitleContainer}>
<FormattedText
id='mobile.advanced_settings.clockDisplay'
defaultMessage='Clock display'
style={style.modalTitle}
/>
</View>
<RadioButtonGroup
name='replySettings'
onSelect={this.setMilitaryTime}
options={options}
/>
<FormattedText
id='user.settings.display.preferTime'
defaultMessage='Select how you prefer time displayed.'
style={style.modalHelpText}
/>
</View>
<View style={style.modalFooter}>
<View style={style.separator}/>
<View style={style.modalFooterContainer}>
<TouchableOpacity
style={style.modalFooterOptionContainer}
onPress={this.closeModal}
>
<FormattedText
id='mobile.notification_settings.modal_cancel'
defaultMessage='CANCEL'
style={style.modalFooterOption}
/>
</TouchableOpacity>
<View style={style.modalFooterButtonSpacer}/>
<TouchableOpacity
style={style.modalFooterOptionContainer}
onPress={this.saveSelection}
>
<FormattedText
id='mobile.notification_settings.modal_save'
defaultMessage='SAVE'
style={style.modalFooterOption}
/>
</TouchableOpacity>
</View>
</View>
</View>
</View>
</Modal>
);
};
render() {
const {theme} = this.props;
const style = getStyleSheet(theme);
return (
<View style={style.container}>
<StatusBar/>
<View style={style.wrapper}>
{this.renderClockDisplayModal(style)}
</View>
</View>
);
}
}
const getStyleSheet = makeStyleSheetFromTheme((theme) => {
return {
container: {
flex: 1,
backgroundColor: theme.centerChannelBg
},
wrapper: {
backgroundColor: changeOpacity(theme.centerChannelColor, 0.06),
flex: 1
},
separator: {
backgroundColor: changeOpacity(theme.centerChannelColor, 0.1),
height: 1,
width: '100%'
},
modalOverlay: {
backgroundColor: changeOpacity('#000000', 0.6),
alignItems: 'center',
flex: 1
},
modal: {
backgroundColor: theme.centerChannelBg,
borderRadius: 4,
marginTop: 20,
width: '95%'
},
modalBody: {
paddingHorizontal: 24
},
modalTitleContainer: {
marginBottom: 30,
marginTop: 20
},
modalTitle: {
color: theme.centerChannelColor,
fontSize: 19
},
modalHelpText: {
color: changeOpacity(theme.centerChannelColor, 0.5),
fontSize: 13,
marginTop: 20
},
modalFooter: {
alignItems: 'flex-end',
height: 58,
marginTop: 40,
width: '100%'
},
modalFooterContainer: {
alignItems: 'center',
flex: 1,
flexDirection: 'row',
paddingRight: 24
},
modalFooterOptionContainer: {
alignItems: 'center',
height: 40,
justifyContent: 'center',
paddingHorizontal: 10,
paddingVertical: 5
},
modalFooterOption: {
color: theme.linkColor,
fontSize: 14
},
modalFooterButtonSpacer: {
marginRight: 10
}
};
});