import React, { useEffect } from 'react'; import PropTypes from 'prop-types'; import { Switch } from 'react-native'; import { RadioButton } from 'react-native-ui-lib'; import { useDispatch, useSelector } from 'react-redux'; import { setPreference } from '../actions/sortPreferences'; import RocketChat from '../lib/rocketchat'; import StatusBar from '../containers/StatusBar'; import I18n from '../i18n'; import * as List from '../containers/List'; import { useTheme } from '../theme'; import { themes } from '../constants/colors'; import * as HeaderButton from '../containers/HeaderButton'; import SafeAreaView from '../containers/SafeAreaView'; import { ICON_SIZE } from '../containers/List/constants'; import log, { events, logEvent } from '../utils/log'; import { DISPLAY_MODE_CONDENSED, DISPLAY_MODE_EXPANDED } from '../constants/constantDisplayMode'; const DisplayPrefsView = props => { const { theme } = useTheme(); const { sortBy, groupByType, showFavorites, showUnread, showAvatar, displayMode } = useSelector(state => state.sortPreferences); const { isMasterDetail } = useSelector(state => state.app); const dispatch = useDispatch(); useEffect(() => { const { navigation } = props; navigation.setOptions({ title: I18n.t('Display') }); if (!isMasterDetail) { navigation.setOptions({ headerLeft: () => }); } }, []); const setSortPreference = async param => { try { dispatch(setPreference(param)); await RocketChat.saveSortPreference(param); } catch (e) { log(e); } }; const sortByName = async () => { logEvent(events.DP_SORT_CHANNELS_BY_NAME); await setSortPreference({ sortBy: 'alphabetical' }); }; const sortByActivity = async () => { logEvent(events.DP_SORT_CHANNELS_BY_ACTIVITY); await setSortPreference({ sortBy: 'activity' }); }; const toggleGroupByType = async () => { logEvent(events.DP_GROUP_CHANNELS_BY_TYPE); await setSortPreference({ groupByType: !groupByType }); }; const toggleGroupByFavorites = async () => { logEvent(events.DP_GROUP_CHANNELS_BY_FAVORITE); await setSortPreference({ showFavorites: !showFavorites }); }; const toggleUnread = async () => { logEvent(events.DP_GROUP_CHANNELS_BY_UNREAD); await setSortPreference({ showUnread: !showUnread }); }; const toggleAvatar = async () => { logEvent(events.DP_TOGGLE_AVATAR); await setSortPreference({ showAvatar: !showAvatar }); }; const displayExpanded = async () => { logEvent(events.DP_DISPLAY_EXPANDED); await setSortPreference({ displayMode: DISPLAY_MODE_EXPANDED }); }; const displayCondensed = async () => { logEvent(events.DP_DISPLAY_CONDENSED); await setSortPreference({ displayMode: DISPLAY_MODE_CONDENSED }); }; const renderCheckBox = value => ( ); const renderAvatarSwitch = value => ( toggleAvatar()} testID='display-pref-view-avatar-switch' /> ); const renderRadio = value => ( ); return ( } title='Expanded' testID='display-pref-view-expanded' right={() => renderRadio(displayMode === DISPLAY_MODE_EXPANDED)} onPress={displayExpanded} /> } title='Condensed' testID='display-pref-view-condensed' right={() => renderRadio(displayMode === DISPLAY_MODE_CONDENSED)} onPress={displayCondensed} /> } title='Avatars' testID='display-pref-view-avatars' right={() => renderAvatarSwitch(showAvatar)} /> } onPress={sortByActivity} right={() => renderRadio(sortBy === 'activity')} /> } onPress={sortByName} right={() => renderRadio(sortBy === 'alphabetical')} /> } onPress={toggleUnread} right={() => renderCheckBox(showUnread)} /> } onPress={toggleGroupByFavorites} right={() => renderCheckBox(showFavorites)} /> } onPress={toggleGroupByType} right={() => renderCheckBox(groupByType)} /> ); }; DisplayPrefsView.propTypes = { navigation: PropTypes.object, isMasterDetail: PropTypes.bool }; export default DisplayPrefsView;