// @flow import * as React from 'react'; import {View} from 'react-native'; import DateManager from "../../managers/DateManager"; import WebSectionList from "../../components/Screens/WebSectionList"; import {Card, Text, withTheme} from 'react-native-paper'; import AprilFoolsManager from "../../managers/AprilFoolsManager"; import {StackNavigationProp} from "@react-navigation/stack"; import type {CustomTheme} from "../../managers/ThemeManager"; import i18n from 'i18n-js'; const DATA_URL = "https://etud.insa-toulouse.fr/~amicale_app/menu/menu_data.json"; type Props = { navigation: StackNavigationProp, theme: CustomTheme, } /** * Class defining the app's menu screen. */ class SelfMenuScreen extends React.Component { /** * Extract a key for the given item * * @param item The item to extract the key from * @return {*} The extracted key */ getKeyExtractor(item: Object) { return item !== undefined ? item['name'] : undefined; } /** * Creates the dataset to be used in the FlatList * * @param fetchedData * @return {[]} */ createDataset = (fetchedData: Object) => { let result = []; if (fetchedData == null || Object.keys(fetchedData).length === 0) { result = [ { title: i18n.t("general.notAvailable"), data: [], keyExtractor: this.getKeyExtractor } ]; } else { if (AprilFoolsManager.getInstance().isAprilFoolsEnabled() && fetchedData.length > 0) fetchedData[0].meal[0].foodcategory = AprilFoolsManager.getFakeMenuItem(fetchedData[0].meal[0].foodcategory); // fetched data is an array here for (let i = 0; i < fetchedData.length; i++) { result.push( { title: DateManager.getInstance().getTranslatedDate(fetchedData[i].date), data: fetchedData[i].meal[0].foodcategory, keyExtractor: this.getKeyExtractor, } ); } } return result }; /** * Gets the render section header * * @param section The section to render the header from * @return {*} */ getRenderSectionHeader = ({section}: Object) => { return ( ); }; /** * Gets a FlatList render item * * @param item The item to render * @return {*} */ getRenderItem = ({item}: Object) => { return ( {item.dishes.map((object) => {object.name !== "" ? {this.formatName(object.name)} : } )} ); }; /** * Formats the given string to make sure it starts with a capital letter * * @param name The string to format * @return {string} The formatted string */ formatName(name: String) { return name.charAt(0) + name.substr(1).toLowerCase(); } render() { const nav = this.props.navigation; return ( ); } } export default withTheme(SelfMenuScreen);