import React, { PureComponent } from 'react'; import { View, Text, Animated, Easing, Image, TouchableWithoutFeedback } from 'react-native'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import Touch from '../../utils/touch'; import styles from './styles'; import RocketChat from '../../lib/rocketchat'; import { setPreference } from '../../actions/sortPreferences'; import log from '../../utils/log'; import I18n from '../../i18n'; import { CustomIcon } from '../../lib/Icons'; import Check from '../../containers/Check'; const ANIMATION_DURATION = 200; class Sort extends PureComponent { static propTypes = { closeSortDropdown: PropTypes.bool, close: PropTypes.func, sortBy: PropTypes.string, groupByType: PropTypes.bool, showFavorites: PropTypes.bool, showUnread: PropTypes.bool, setSortPreference: PropTypes.func } constructor(props) { super(props); this.animatedValue = new Animated.Value(0); } componentDidMount() { Animated.timing( this.animatedValue, { toValue: 1, duration: ANIMATION_DURATION, easing: Easing.inOut(Easing.quad), useNativeDriver: true } ).start(); } componentDidUpdate(prevProps) { const { closeSortDropdown } = this.props; if (prevProps.closeSortDropdown !== closeSortDropdown) { this.close(); } } setSortPreference = (param) => { const { setSortPreference } = this.props; try { setSortPreference(param); RocketChat.saveSortPreference(param); } catch (e) { log(e); } } sortByName = () => { this.setSortPreference({ sortBy: 'alphabetical' }); this.close(); } sortByActivity = () => { this.setSortPreference({ sortBy: 'activity' }); this.close(); } toggleGroupByType = () => { const { groupByType } = this.props; this.setSortPreference({ groupByType: !groupByType }); } toggleGroupByFavorites = () => { const { showFavorites } = this.props; this.setSortPreference({ showFavorites: !showFavorites }); } toggleUnread = () => { const { showUnread } = this.props; this.setSortPreference({ showUnread: !showUnread }); } close = () => { const { close } = this.props; Animated.timing( this.animatedValue, { toValue: 0, duration: ANIMATION_DURATION, easing: Easing.inOut(Easing.quad), useNativeDriver: true } ).start(() => close()); } render() { const translateY = this.animatedValue.interpolate({ inputRange: [0, 1], outputRange: [-326, 0] }); const backdropOpacity = this.animatedValue.interpolate({ inputRange: [0, 1], outputRange: [0, 0.3] }); const { sortBy, groupByType, showFavorites, showUnread } = this.props; return ( <> {I18n.t('Sorting_by', { key: I18n.t(sortBy === 'alphabetical' ? 'name' : 'activity') })} {I18n.t('Alphabetical')} {sortBy === 'alphabetical' ? : null} {I18n.t('Activity')} {sortBy === 'activity' ? : null} {I18n.t('Group_by_type')} {groupByType ? : null} {I18n.t('Group_by_favorites')} {showFavorites ? : null} {I18n.t('Unread_on_top')} {showUnread ? : null} ); } } const mapStateToProps = state => ({ closeSortDropdown: state.rooms.closeSortDropdown }); const mapDispatchToProps = dispatch => ({ setSortPreference: preference => dispatch(setPreference(preference)) }); export default connect(mapStateToProps, mapDispatchToProps)(Sort);