/* * Copyright (c) 2019 - 2020 Arnaud Vergnet. * * This file is part of Campus INSAT. * * Campus INSAT is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Campus INSAT is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Campus INSAT. If not, see . */ // @flow import * as React from 'react'; import {Image, View} from 'react-native'; import { Avatar, Card, Divider, List, TouchableRipple, withTheme, } from 'react-native-paper'; import i18n from 'i18n-js'; import {StackNavigationProp} from '@react-navigation/stack'; import CardList from '../../components/Lists/CardList/CardList'; import type {CustomThemeType} from '../../managers/ThemeManager'; import MaterialHeaderButtons, { Item, } from '../../components/Overrides/CustomHeaderButton'; import {MASCOT_STYLE} from '../../components/Mascot/Mascot'; import MascotPopup from '../../components/Mascot/MascotPopup'; import AsyncStorageManager from '../../managers/AsyncStorageManager'; import ServicesManager, { SERVICES_CATEGORIES_KEY, } from '../../managers/ServicesManager'; import CollapsibleFlatList from '../../components/Collapsible/CollapsibleFlatList'; import type {ServiceCategoryType} from '../../managers/ServicesManager'; type PropsType = { navigation: StackNavigationProp, theme: CustomThemeType, }; class ServicesScreen extends React.Component { finalDataset: Array; constructor(props: PropsType) { super(props); const services = new ServicesManager(props.navigation); this.finalDataset = services.getCategories([ SERVICES_CATEGORIES_KEY.SPECIAL, ]); } componentDidMount() { const {props} = this; props.navigation.setOptions({ headerRight: this.getAboutButton, }); } getAboutButton = (): React.Node => ( ); onAboutPress = () => { const {props} = this; props.navigation.navigate('amicale-contact'); }; /** * Gets the list title image for the list. * * If the source is a string, we are using an icon. * If the source is a number, we are using an internal image. * * @param source The source image to display. Can be a string for icons or a number for local images * @returns {*} */ getListTitleImage(source: string | number): React.Node { const {props} = this; if (typeof source === 'number') return ( ); return ( ); } /** * A list item showing a list of available services for the current category * * @param item * @returns {*} */ getRenderItem = ({item}: {item: ServiceCategoryType}): React.Node => { const {props} = this; return ( { props.navigation.navigate('services-section', {data: item}); }}> this.getListTitleImage(item.image)} right={(): React.Node => } /> ); }; keyExtractor = (item: ServiceCategoryType): string => item.title; render(): React.Node { return ( } hasTab /> ); } } export default withTheme(ServicesScreen);