// @flow import * as React from 'react'; import {ScrollView, View} from 'react-native'; import {Avatar, Card, Chip, Paragraph, withTheme} from 'react-native-paper'; import ImageModal from 'react-native-image-modal'; import i18n from "i18n-js"; import AuthenticatedScreen from "../../../components/Amicale/AuthenticatedScreen"; import CustomHTML from "../../../components/Custom/CustomHTML"; import CustomTabBar from "../../../components/Tabbar/CustomTabBar"; type Props = { navigation: Object, route: Object }; type State = { imageModalVisible: boolean, }; /** * Class defining a club event information page. * If called with data and categories navigation parameters, will use those to display the data. * If called with clubId parameter, will fetch the information on the server */ class ClubDisplayScreen extends React.Component { displayData: Object; categories: Object | null; clubId: number; shouldFetchData: boolean; colors: Object; state = { imageModalVisible: false, }; constructor(props) { super(props); this.colors = props.theme.colors; if (this.props.route.params.data !== undefined && this.props.route.params.categories !== undefined) { this.displayData = this.props.route.params.data; this.categories = this.props.route.params.categories; this.clubId = this.props.route.params.data.id; this.shouldFetchData = false; } else { this.displayData = null; this.categories = null; this.clubId = this.props.route.params.clubId; this.shouldFetchData = true; } } getCategoryName(id: number) { if (this.categories !== null) { for (let i = 0; i < this.categories.length; i++) { if (id === this.categories[i].id) return this.categories[i].name; } } return ""; } getCategoriesRender(categories: Array) { if (this.categories === null) return null; let final = []; for (let i = 0; i < categories.length; i++) { let cat = categories[i]; if (cat !== null) { final.push( {this.getCategoryName(cat)} ); } } return {final}; } getManagersRender(resp: Array) { let final = []; for (let i = 0; i < resp.length; i++) { final.push({resp[i]}) } const hasManagers = resp.length > 0; return ( } /> {final} ); } updateHeaderTitle(data: Object) { this.props.navigation.setOptions({title: data.name}) } getScreen = (response: Array) => { let data = response[0]; this.updateHeaderTitle(data); return ( {this.getCategoriesRender(data.category)} {data.logo !== null ? : } {data.description !== null ? // Surround description with div to allow text styling if the description is not html : } {this.getManagersRender(data.responsibles)} ); }; render() { if (this.shouldFetchData) return ; else return this.getScreen([this.displayData]); } } export default withTheme(ClubDisplayScreen);