Display a message when no menu is available

This commit is contained in:
Arnaud Vergnet 2020-05-31 16:00:42 +02:00
parent 21a447ca60
commit 9cf3484dbf
3 changed files with 31 additions and 39 deletions

View file

@ -6,11 +6,15 @@ import DateManager from "../../managers/DateManager";
import WebSectionList from "../../components/Screens/WebSectionList"; import WebSectionList from "../../components/Screens/WebSectionList";
import {Card, Text, withTheme} from 'react-native-paper'; import {Card, Text, withTheme} from 'react-native-paper';
import AprilFoolsManager from "../../managers/AprilFoolsManager"; 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"; const DATA_URL = "https://etud.insa-toulouse.fr/~amicale_app/menu/menu_data.json";
type Props = { type Props = {
navigation: Object, navigation: StackNavigationProp,
theme: CustomTheme,
} }
/** /**
@ -18,20 +22,6 @@ type Props = {
*/ */
class SelfMenuScreen extends React.Component<Props> { class SelfMenuScreen extends React.Component<Props> {
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 * Extract a key for the given item
* *
@ -48,32 +38,32 @@ class SelfMenuScreen extends React.Component<Props> {
* @param fetchedData * @param fetchedData
* @return {[]} * @return {[]}
*/ */
createDataset(fetchedData: Object) { createDataset = (fetchedData: Object) => {
let result = []; let result = [];
// Prevent crash by giving a default value when fetchedData is empty (not yet available) if (fetchedData == null || Object.keys(fetchedData).length === 0) {
if (Object.keys(fetchedData).length === 0) {
result = [ result = [
{ {
title: '', title: i18n.t("general.notAvailable"),
data: [], data: [],
keyExtractor: this.getKeyExtractor keyExtractor: this.getKeyExtractor
} }
]; ];
} } else {
if (AprilFoolsManager.getInstance().isAprilFoolsEnabled() && fetchedData.length > 0) if (AprilFoolsManager.getInstance().isAprilFoolsEnabled() && fetchedData.length > 0)
fetchedData[0].meal[0].foodcategory = AprilFoolsManager.getFakeMenuItem(fetchedData[0].meal[0].foodcategory); fetchedData[0].meal[0].foodcategory = AprilFoolsManager.getFakeMenuItem(fetchedData[0].meal[0].foodcategory);
// fetched data is an array here // fetched data is an array here
for (let i = 0; i < fetchedData.length; i++) { for (let i = 0; i < fetchedData.length; i++) {
result.push( result.push(
{ {
title: DateManager.getInstance().getTranslatedDate(fetchedData[i].date), title: DateManager.getInstance().getTranslatedDate(fetchedData[i].date),
data: fetchedData[i].meal[0].foodcategory, data: fetchedData[i].meal[0].foodcategory,
keyExtractor: this.getKeyExtractor, keyExtractor: this.getKeyExtractor,
} }
); );
}
} }
return result return result
} };
/** /**
* Gets the render section header * Gets the render section header
@ -81,7 +71,7 @@ class SelfMenuScreen extends React.Component<Props> {
* @param section The section to render the header from * @param section The section to render the header from
* @return {*} * @return {*}
*/ */
getRenderSectionHeader({section}: Object) { getRenderSectionHeader = ({section}: Object) => {
return ( return (
<Card style={{ <Card style={{
width: '95%', width: '95%',
@ -105,7 +95,7 @@ class SelfMenuScreen extends React.Component<Props> {
/> />
</Card> </Card>
); );
} };
/** /**
* Gets a FlatList render item * Gets a FlatList render item
@ -113,7 +103,7 @@ class SelfMenuScreen extends React.Component<Props> {
* @param item The item to render * @param item The item to render
* @return {*} * @return {*}
*/ */
getRenderItem({item}: Object) { getRenderItem = ({item}: Object) => {
return ( return (
<Card style={{ <Card style={{
flex: 0, flex: 0,
@ -129,7 +119,7 @@ class SelfMenuScreen extends React.Component<Props> {
marginLeft: 'auto', marginLeft: 'auto',
marginRight: 'auto', marginRight: 'auto',
borderBottomWidth: 1, borderBottomWidth: 1,
borderBottomColor: this.colors.primary, borderBottomColor: this.theme.colors.primary,
marginTop: 5, marginTop: 5,
marginBottom: 5, marginBottom: 5,
}}/> }}/>
@ -147,7 +137,7 @@ class SelfMenuScreen extends React.Component<Props> {
</Card.Content> </Card.Content>
</Card> </Card>
); );
} };
/** /**
* Formats the given string to make sure it starts with a capital letter * Formats the given string to make sure it starts with a capital letter

View file

@ -343,7 +343,8 @@
"networkError": "Unable to contact servers. Make sure you are connected to Internet.", "networkError": "Unable to contact servers. Make sure you are connected to Internet.",
"goBack": "Go Back", "goBack": "Go Back",
"goForward": "Go Forward", "goForward": "Go Forward",
"openInBrowser": "Open in Browser" "openInBrowser": "Open in Browser",
"notAvailable": "Not available"
}, },
"date": { "date": {
"daysOfWeek": { "daysOfWeek": {

View file

@ -343,7 +343,8 @@
"networkError": "Impossible de contacter les serveurs. Assurez-vous d'être connecté à internet.", "networkError": "Impossible de contacter les serveurs. Assurez-vous d'être connecté à internet.",
"goBack": "Suivant", "goBack": "Suivant",
"goForward": "Précédent", "goForward": "Précédent",
"openInBrowser": "Ouvrir dans le navigateur" "openInBrowser": "Ouvrir dans le navigateur",
"notAvailable": "Non disponible"
}, },
"date": { "date": {
"daysOfWeek": { "daysOfWeek": {