From 9cf3484dbf1610251228d53e3400a13679cf93b6 Mon Sep 17 00:00:00 2001 From: Arnaud Vergnet Date: Sun, 31 May 2020 16:00:42 +0200 Subject: [PATCH] Display a message when no menu is available --- src/screens/Services/SelfMenuScreen.js | 64 +++++++++++--------------- translations/en.json | 3 +- translations/fr.json | 3 +- 3 files changed, 31 insertions(+), 39 deletions(-) diff --git a/src/screens/Services/SelfMenuScreen.js b/src/screens/Services/SelfMenuScreen.js index 2c958c2..cb6cbc1 100644 --- a/src/screens/Services/SelfMenuScreen.js +++ b/src/screens/Services/SelfMenuScreen.js @@ -6,11 +6,15 @@ 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: Object, + navigation: StackNavigationProp, + theme: CustomTheme, } /** @@ -18,20 +22,6 @@ type Props = { */ class SelfMenuScreen extends React.Component { - getRenderItem: Function; - getRenderSectionHeader: Function; - createDataset: Function; - colors: Object; - - constructor(props) { - super(props); - - this.getRenderItem = this.getRenderItem.bind(this); - this.getRenderSectionHeader = this.getRenderSectionHeader.bind(this); - this.createDataset = this.createDataset.bind(this); - this.colors = props.theme.colors; - } - /** * Extract a key for the given item * @@ -48,32 +38,32 @@ class SelfMenuScreen extends React.Component { * @param fetchedData * @return {[]} */ - createDataset(fetchedData: Object) { + createDataset = (fetchedData: Object) => { let result = []; - // Prevent crash by giving a default value when fetchedData is empty (not yet available) - if (Object.keys(fetchedData).length === 0) { + if (fetchedData == null || Object.keys(fetchedData).length === 0) { result = [ { - title: '', + title: i18n.t("general.notAvailable"), data: [], keyExtractor: this.getKeyExtractor } ]; - } - 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, - } - ); + } 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 @@ -81,7 +71,7 @@ class SelfMenuScreen extends React.Component { * @param section The section to render the header from * @return {*} */ - getRenderSectionHeader({section}: Object) { + getRenderSectionHeader = ({section}: Object) => { return ( { /> ); - } + }; /** * Gets a FlatList render item @@ -113,7 +103,7 @@ class SelfMenuScreen extends React.Component { * @param item The item to render * @return {*} */ - getRenderItem({item}: Object) { + getRenderItem = ({item}: Object) => { return ( { marginLeft: 'auto', marginRight: 'auto', borderBottomWidth: 1, - borderBottomColor: this.colors.primary, + borderBottomColor: this.theme.colors.primary, marginTop: 5, marginBottom: 5, }}/> @@ -147,7 +137,7 @@ class SelfMenuScreen extends React.Component { ); - } + }; /** * Formats the given string to make sure it starts with a capital letter diff --git a/translations/en.json b/translations/en.json index 27ac26a..27fa648 100644 --- a/translations/en.json +++ b/translations/en.json @@ -343,7 +343,8 @@ "networkError": "Unable to contact servers. Make sure you are connected to Internet.", "goBack": "Go Back", "goForward": "Go Forward", - "openInBrowser": "Open in Browser" + "openInBrowser": "Open in Browser", + "notAvailable": "Not available" }, "date": { "daysOfWeek": { diff --git a/translations/fr.json b/translations/fr.json index 3c098d0..02c2c13 100644 --- a/translations/fr.json +++ b/translations/fr.json @@ -343,7 +343,8 @@ "networkError": "Impossible de contacter les serveurs. Assurez-vous d'être connecté à internet.", "goBack": "Suivant", "goForward": "Précédent", - "openInBrowser": "Ouvrir dans le navigateur" + "openInBrowser": "Ouvrir dans le navigateur", + "notAvailable": "Non disponible" }, "date": { "daysOfWeek": {