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}
/>
);
}
}