Compare commits

...

3 commits

5 changed files with 55 additions and 74 deletions

4
App.js
View file

@ -1,7 +1,7 @@
// @flow // @flow
import * as React from 'react'; import * as React from 'react';
import {Platform, StatusBar, View, YellowBox} from 'react-native'; import {Platform, SafeAreaView, StatusBar, View, YellowBox} from 'react-native';
import LocaleManager from './src/managers/LocaleManager'; import LocaleManager from './src/managers/LocaleManager';
import AsyncStorageManager from "./src/managers/AsyncStorageManager"; import AsyncStorageManager from "./src/managers/AsyncStorageManager";
import CustomIntroSlider from "./src/components/Overrides/CustomIntroSlider"; import CustomIntroSlider from "./src/components/Overrides/CustomIntroSlider";
@ -192,12 +192,14 @@ export default class App extends React.Component<Props, State> {
<PaperProvider theme={this.state.currentTheme}> <PaperProvider theme={this.state.currentTheme}>
<OverflowMenuProvider> <OverflowMenuProvider>
<View style={{backgroundColor: ThemeManager.getCurrentTheme().colors.background, flex: 1}}> <View style={{backgroundColor: ThemeManager.getCurrentTheme().colors.background, flex: 1}}>
<SafeAreaView style={{flex: 1}}>
<NavigationContainer theme={this.state.currentTheme} ref={this.navigatorRef}> <NavigationContainer theme={this.state.currentTheme} ref={this.navigatorRef}>
<MainNavigator <MainNavigator
defaultHomeRoute={this.defaultHomeRoute} defaultHomeRoute={this.defaultHomeRoute}
defaultHomeData={this.defaultHomeData} defaultHomeData={this.defaultHomeData}
/> />
</NavigationContainer> </NavigationContainer>
</SafeAreaView>
</View> </View>
</OverflowMenuProvider> </OverflowMenuProvider>
</PaperProvider> </PaperProvider>

View file

@ -3,7 +3,6 @@ import {withTheme} from 'react-native-paper';
import TabIcon from "./TabIcon"; import TabIcon from "./TabIcon";
import TabHomeIcon from "./TabHomeIcon"; import TabHomeIcon from "./TabHomeIcon";
import {Animated} from 'react-native'; import {Animated} from 'react-native';
import {SafeAreaView} from 'react-native-safe-area-context';
type Props = { type Props = {
state: Object, state: Object,
@ -37,13 +36,6 @@ class CustomTabBar extends React.Component<Props, State> {
barSynced: false,// Is the bar synced with the header for animations? barSynced: false,// Is the bar synced with the header for animations?
} }
tabRef: Object;
constructor(props) {
super(props);
this.tabRef = React.createRef();
}
onItemPress(route: Object, currentIndex: number, destIndex: number) { onItemPress(route: Object, currentIndex: number, destIndex: number) {
const event = this.props.navigation.emit({ const event = this.props.navigation.emit({
type: 'tabPress', type: 'tabPress',
@ -135,12 +127,8 @@ class CustomTabBar extends React.Component<Props, State> {
render() { render() {
this.props.navigation.addListener('state', this.onRouteChange); this.props.navigation.addListener('state', this.onRouteChange);
return ( return (
<SafeAreaView>
<Animated.View <Animated.View
ref={this.tabRef} useNativeDriver
// animation={"fadeInUp"}
// duration={500}
// useNativeDriver
style={{ style={{
flexDirection: 'row', flexDirection: 'row',
height: CustomTabBar.TAB_BAR_HEIGHT, height: CustomTabBar.TAB_BAR_HEIGHT,
@ -149,12 +137,11 @@ class CustomTabBar extends React.Component<Props, State> {
bottom: 0, bottom: 0,
left: 0, left: 0,
backgroundColor: this.props.theme.colors.surface, backgroundColor: this.props.theme.colors.surface,
transform: [{translateY: this.state.translateY}] transform: [{translateY: this.state.translateY}],
}} }}
> >
{this.props.state.routes.map(this.renderIcon)} {this.props.state.routes.map(this.renderIcon)}
</Animated.View> </Animated.View>
</SafeAreaView>
); );
} }
} }

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,18 +38,17 @@ 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
@ -72,8 +61,9 @@ class SelfMenuScreen extends React.Component<Props> {
} }
); );
} }
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": {