Compare commits
3 commits
21a447ca60
...
1c2d2ab1ca
| Author | SHA1 | Date | |
|---|---|---|---|
| 1c2d2ab1ca | |||
| e2cdc26442 | |||
| 9cf3484dbf |
5 changed files with 55 additions and 74 deletions
16
App.js
16
App.js
|
|
@ -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}}>
|
||||||
<NavigationContainer theme={this.state.currentTheme} ref={this.navigatorRef}>
|
<SafeAreaView style={{flex: 1}}>
|
||||||
<MainNavigator
|
<NavigationContainer theme={this.state.currentTheme} ref={this.navigatorRef}>
|
||||||
defaultHomeRoute={this.defaultHomeRoute}
|
<MainNavigator
|
||||||
defaultHomeData={this.defaultHomeData}
|
defaultHomeRoute={this.defaultHomeRoute}
|
||||||
/>
|
defaultHomeData={this.defaultHomeData}
|
||||||
</NavigationContainer>
|
/>
|
||||||
|
</NavigationContainer>
|
||||||
|
</SafeAreaView>
|
||||||
</View>
|
</View>
|
||||||
</OverflowMenuProvider>
|
</OverflowMenuProvider>
|
||||||
</PaperProvider>
|
</PaperProvider>
|
||||||
|
|
|
||||||
|
|
@ -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,26 +127,21 @@ 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
|
useNativeDriver
|
||||||
ref={this.tabRef}
|
style={{
|
||||||
// animation={"fadeInUp"}
|
flexDirection: 'row',
|
||||||
// duration={500}
|
height: CustomTabBar.TAB_BAR_HEIGHT,
|
||||||
// useNativeDriver
|
width: '100%',
|
||||||
style={{
|
position: 'absolute',
|
||||||
flexDirection: 'row',
|
bottom: 0,
|
||||||
height: CustomTabBar.TAB_BAR_HEIGHT,
|
left: 0,
|
||||||
width: '100%',
|
backgroundColor: this.props.theme.colors.surface,
|
||||||
position: 'absolute',
|
transform: [{translateY: this.state.translateY}],
|
||||||
bottom: 0,
|
}}
|
||||||
left: 0,
|
>
|
||||||
backgroundColor: this.props.theme.colors.surface,
|
{this.props.state.routes.map(this.renderIcon)}
|
||||||
transform: [{translateY: this.state.translateY}]
|
</Animated.View>
|
||||||
}}
|
|
||||||
>
|
|
||||||
{this.props.state.routes.map(this.renderIcon)}
|
|
||||||
</Animated.View>
|
|
||||||
</SafeAreaView>
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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": {
|
||||||
|
|
|
||||||
|
|
@ -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": {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue