import React from 'react'; import PropTypes from 'prop-types'; import { View, SectionList, Text, StyleSheet } from 'react-native'; import Icon from 'react-native-vector-icons/Ionicons'; import MaterialIcon from 'react-native-vector-icons/MaterialIcons'; import { connect } from 'react-redux'; import styles from './styles'; import Avatar from '../../containers/Avatar'; import Touch from '../../utils/touch'; import database from '../../lib/realm'; @connect(state => ({ baseUrl: state.settings.Site_Url || state.server ? state.server.server : '' })) export default class RoomActionsView extends React.PureComponent { static propTypes = { baseUrl: PropTypes.string, navigation: PropTypes.object } constructor(props) { super(props); const { rid } = props.navigation.state.params; this.rooms = database.objects('subscriptions').filtered('rid = $0', rid); this.state = { sections: [], room: {} }; } componentWillMount() { this.updateRoom(); this.updateSections(); } componentDidMount() { this.rooms.addListener(this.updateRoom); } updateRoom = () => { const [room] = this.rooms; this.setState({ room }); this.props.navigation.setParams({ f: room.f }); this.updateSections(); } updateSections = () => { const { rid, t } = this.state.room; const sections = [{ data: [{ icon: 'ios-star', name: 'USER' }], renderItem: this.renderRoomInfo }, { data: [ { icon: 'ios-call-outline', name: 'Voice call' }, { icon: 'ios-videocam-outline', name: 'Video call' } ], renderItem: this.renderItem }, { data: [ { icon: 'ios-attach', name: 'Files' }, { icon: 'ios-at-outline', name: 'Mentions' }, { icon: 'ios-star-outline', name: 'Starred', route: 'StarredMessages', params: { rid } }, { icon: 'ios-search', name: 'Search' }, { icon: 'ios-share-outline', name: 'Share' }, { icon: 'ios-pin', name: 'Pinned', route: 'PinnedMessages', params: { rid } }, { icon: 'ios-code', name: 'Snippets' }, { icon: 'ios-notifications-outline', name: 'Notifications preferences' } ], renderItem: this.renderItem }]; if (t === 'd') { sections.push({ data: [ { icon: 'ios-volume-off', name: 'Mute user' }, { icon: 'block', name: 'Block user', type: 'danger' } ], renderItem: this.renderItem }); } else if (t === 'c' || t === 'p') { sections[2].data.unshift({ icon: 'ios-people', name: 'Members', description: '42 members' }); sections.push({ data: [ { icon: 'ios-volume-off', name: 'Mute channel' }, { icon: 'block', name: 'Leave channel', type: 'danger' } ], renderItem: this.renderItem }); } this.setState({ sections }); } renderRoomInfo = ({ item }) => this.renderTouchableItem([ , {this.state.room.fname} @{this.state.room.name} , ], item) renderTouchableItem = (subview, item) => ( item.route && this.props.navigation.navigate(item.route, item.params)} underlayColor='#FFFFFF' activeOpacity={0.5} accessibilityLabel={item.name} accessibilityTraits='button' > {subview} ) renderItem = ({ item }) => { if (item.type === 'danger') { const subview = [ , { item.name } ]; return this.renderTouchableItem(subview, item); } const subview = [ , { item.name }, item.description && { item.description }, ]; return this.renderTouchableItem(subview, item); } renderSectionSeparator = (data) => { if (!data.trailingItem) { if (!data.trailingSection) { return ; } return null; } return ( ); } render() { return ( index} /> ); } }