Browse Source

Removed drawer and put all links in home screen

Arnaud Vergnet 3 years ago
parent
commit
c37e052aa2

+ 29
- 49
src/components/Home/ActionsDashboardItem.js View File

@@ -1,12 +1,13 @@
1 1
 // @flow
2 2
 
3 3
 import * as React from 'react';
4
-import {Button, Card, withTheme} from 'react-native-paper';
5
-import {Platform, StyleSheet} from "react-native";
6
-import i18n from 'i18n-js';
4
+import {Avatar, Card, List, withTheme} from 'react-native-paper';
5
+import {StyleSheet} from "react-native";
7 6
 import {DrawerNavigationProp} from "@react-navigation/drawer";
8 7
 import type {CustomTheme} from "../../managers/ThemeManager";
9 8
 
9
+const ICON_AMICALE = require("../../../assets/amicale.png");
10
+
10 11
 type Props = {
11 12
     navigation: DrawerNavigationProp,
12 13
     theme: CustomTheme,
@@ -18,45 +19,37 @@ class ActionsDashBoardItem extends React.Component<Props> {
18 19
         return (nextProps.theme.dark !== this.props.theme.dark)
19 20
     }
20 21
 
21
-    openDrawer = () => this.props.navigation.openDrawer();
22
-
23
-    gotToSettings = () => this.props.navigation.navigate("settings");
24
-
25 22
     render() {
26 23
         return (
27 24
             <Card style={{
28 25
                 ...styles.card,
29 26
                 borderColor: this.props.theme.colors.primary,
30 27
             }}>
31
-                <Card.Content style={styles.content}>
32
-                    <Button
33
-                        icon="information"
34
-                        mode="contained"
35
-                        onPress={this.openDrawer}
36
-                        style={styles.servicesButton}
37
-                    >
38
-                        {i18n.t("homeScreen.servicesButton")}
39
-                    </Button>
40
-                    {
41
-                        // Leave space to fix ios icon position
42
-                        Platform.OS === 'ios'
43
-                            ? <Button
44
-                                icon="settings"
45
-                                mode="contained"
46
-                                onPress={this.gotToSettings}
47
-                                style={styles.settingsButton}
48
-                                compact
49
-                            > </Button>
50
-                            : <Button
51
-                                icon="settings"
52
-                                mode="contained"
53
-                                onPress={this.gotToSettings}
54
-                                style={styles.settingsButton}
55
-                                compact
56
-                            />
57
-                    }
58
-
59
-                </Card.Content>
28
+                <List.Item
29
+                    title={"AMICALE"}
30
+                    description={"VOTRE COMPTE"}
31
+                    left={props => <Avatar.Image
32
+                        {...props}
33
+                        size={54}
34
+                        source={ICON_AMICALE}
35
+                        style={styles.avatar}/>}
36
+                    right={props => <List.Icon {...props} icon="chevron-right"/>}
37
+                    onPress={() => this.props.navigation.navigate("amicale-home")}
38
+                />
39
+                <List.Item
40
+                    title={"STUDENT WEBSITES"}
41
+                    description={"TROP COOL"}
42
+                    left={props => <List.Icon {...props} icon="web"/>}
43
+                    right={props => <List.Icon {...props} icon="chevron-right"/>}
44
+                    onPress={() => this.props.navigation.navigate("websites-home")}
45
+                />
46
+                <List.Item
47
+                    title={"SERVICES INSA"}
48
+                    description={"TROP BIEN"}
49
+                    left={props => <List.Icon {...props} icon="star"/>}
50
+                    right={props => <List.Icon {...props} icon="chevron-right"/>}
51
+                    onPress={() => this.props.navigation.navigate("insa-home")}
52
+                />
60 53
             </Card>
61 54
         );
62 55
     }
@@ -68,25 +61,12 @@ const styles = StyleSheet.create({
68 61
         marginLeft: 10,
69 62
         marginRight: 10,
70 63
         marginTop: 10,
71
-        overflow: 'hidden',
72 64
         elevation: 4,
73 65
         borderWidth: 1,
74 66
     },
75 67
     avatar: {
76 68
         backgroundColor: 'transparent'
77 69
     },
78
-    content: {
79
-        flex: 1,
80
-        flexDirection: 'row',
81
-    },
82
-    servicesButton: {
83
-        marginLeft: 'auto',
84
-        marginRight: 5,
85
-    },
86
-    settingsButton: {
87
-        marginLeft: 5,
88
-        marginRight: 'auto',
89
-    }
90 70
 });
91 71
 
92 72
 export default withTheme(ActionsDashBoardItem);

+ 48
- 170
src/navigation/DrawerNavigator.js View File

@@ -1,31 +1,12 @@
1 1
 // @flow
2 2
 
3 3
 import * as React from 'react';
4
-import {createDrawerNavigator, DrawerNavigationProp} from '@react-navigation/drawer';
5 4
 import SettingsScreen from '../screens/Other/SettingsScreen';
6 5
 import AboutScreen from '../screens/About/AboutScreen';
7 6
 import AboutDependenciesScreen from '../screens/About/AboutDependenciesScreen';
8
-import SelfMenuScreen from '../screens/Other/SelfMenuScreen';
9
-import AvailableRoomScreen from "../screens/Websites/AvailableRoomScreen";
10
-import BibScreen from "../screens/Websites/BibScreen";
11
-import TetrisScreen from "../screens/Tetris/TetrisScreen";
12 7
 import DebugScreen from '../screens/About/DebugScreen';
13
-import Sidebar from "../components/Sidebar/Sidebar";
14 8
 import {createStackNavigator, TransitionPresets} from "@react-navigation/stack";
15 9
 import i18n from "i18n-js";
16
-import LoginScreen from "../screens/Amicale/LoginScreen";
17
-import ProfileScreen from "../screens/Amicale/ProfileScreen";
18
-import ClubListScreen from "../screens/Amicale/Clubs/ClubListScreen";
19
-import ClubDisplayScreen from "../screens/Amicale/Clubs/ClubDisplayScreen";
20
-import ClubAboutScreen from "../screens/Amicale/Clubs/ClubAboutScreen";
21
-import VoteScreen from "../screens/Amicale/VoteScreen";
22
-import AmicaleContactScreen from "../screens/Amicale/AmicaleContactScreen";
23
-import {AmicaleWebsiteScreen} from "../screens/Websites/AmicaleWebsiteScreen";
24
-import {TutorInsaWebsiteScreen} from "../screens/Websites/TutorInsaWebsiteScreen";
25
-import {WiketudWebsiteScreen} from "../screens/Websites/WiketudWebsiteScreen";
26
-import {ElusEtudiantsWebsiteScreen} from "../screens/Websites/ElusEtudiantsWebsiteScreen";
27
-import {createCollapsibleStack} from "react-navigation-collapsible";
28
-import {useTheme} from "react-native-paper";
29 10
 import TabNavigator from "./MainTabNavigator";
30 11
 
31 12
 const defaultScreenOptions = {
@@ -34,139 +15,54 @@ const defaultScreenOptions = {
34 15
     ...TransitionPresets.SlideFromRightIOS,
35 16
 };
36 17
 
37
-function createScreenCollapsibleStack (name: string, component: any, title: string, useNativeDriver?: boolean) {
38
-    const {colors} = useTheme();
39
-    return createCollapsibleStack(
40
-        <DrawerStack.Screen
41
-            name={name}
42
-            component={component}
43
-            options={{
44
-                title: title,
45
-                headerStyle: {
46
-                    backgroundColor: colors.surface,
47
-                },
48
-            }}
49
-        />,
50
-        {
51
-            collapsedColor: 'transparent',
52
-            useNativeDriver: useNativeDriver != null ? useNativeDriver : true, // native driver does not work with webview
53
-        }
54
-    )
55
-}
56
-
57
-function getWebsiteStack(name: string, component: any, title: string) {
58
-    return createScreenCollapsibleStack(name, component, title, false);
59
-}
60
-
61
-const DrawerStack = createStackNavigator();
18
+const MainStack = createStackNavigator();
62 19
 
63
-function DrawerStackComponent(props) {
64
-        return (
65
-            <DrawerStack.Navigator
66
-                initialRouteName={'main'}
67
-                headerMode={'screen'}
68
-                screenOptions={defaultScreenOptions}
69
-            >
70
-                <DrawerStack.Screen
71
-                    name="main"
72
-                    component={props.createTabNavigator}
73
-                    options={{
74
-                        headerShown: false,
75
-                    }}
76
-                />
77
-                <DrawerStack.Screen
78
-                    name="settings"
79
-                    component={SettingsScreen}
80
-                    options={{
81
-                        title: i18n.t('screens.settings'),
82
-                    }}
83
-                />
84
-                <DrawerStack.Screen
85
-                    name="about"
86
-                    component={AboutScreen}
87
-                    options={{
88
-                        title: i18n.t('screens.about'),
89
-                    }}
90
-                />
91
-                <DrawerStack.Screen
92
-                    name="dependencies"
93
-                    component={AboutDependenciesScreen}
94
-                    options={{
95
-                        title: i18n.t('aboutScreen.libs')
96
-                    }}
97
-                />
98
-                <DrawerStack.Screen
99
-                    name="debug"
100
-                    component={DebugScreen}
101
-                    options={{
102
-                        title: i18n.t('aboutScreen.debug')
103
-                    }}
104
-                />
105
-                {createScreenCollapsibleStack("self-menu", SelfMenuScreen, i18n.t('screens.menuSelf'))}
106
-                {getWebsiteStack("available-rooms", AvailableRoomScreen, i18n.t('screens.availableRooms'))}
107
-                {getWebsiteStack("bib", BibScreen, i18n.t('screens.bib'))}
108
-                {getWebsiteStack("amicale-website", AmicaleWebsiteScreen, "Amicale")}
109
-                {getWebsiteStack("elus-etudiants", ElusEtudiantsWebsiteScreen, "Élus Étudiants")}
110
-                {getWebsiteStack("wiketud", WiketudWebsiteScreen, "Wiketud")}
111
-                {getWebsiteStack("tutorinsa", TutorInsaWebsiteScreen, "Tutor'INSA")}
112
-                <DrawerStack.Screen
113
-                    name="tetris"
114
-                    component={TetrisScreen}
115
-                    options={{
116
-                        title: i18n.t("game.title"),
117
-                    }}
118
-                />
119
-                <DrawerStack.Screen
120
-                    name="login"
121
-                    component={LoginScreen}
122
-                    options={{
123
-                        title: i18n.t('screens.login'),
124
-                    }}
125
-                />
126
-                <DrawerStack.Screen
127
-                    name="profile"
128
-                    component={ProfileScreen}
129
-                    options={{
130
-                            title: i18n.t('screens.profile'),
131
-                        }}
132
-                />
133
-                {createScreenCollapsibleStack("club-list", ClubListScreen, i18n.t('clubs.clubList'))}
134
-                <DrawerStack.Screen
135
-                    name="club-information"
136
-                    component={ClubDisplayScreen}
137
-                    options={{
138
-                        title: i18n.t('screens.clubDisplayScreen'),
139
-                        ...TransitionPresets.ModalSlideFromBottomIOS,
140
-                    }}
141
-                />
142
-                <DrawerStack.Screen
143
-                    name="club-about"
144
-                    component={ClubAboutScreen}
145
-                    options={{
146
-                        title: i18n.t('screens.clubsAbout'),
147
-                        ...TransitionPresets.ModalSlideFromBottomIOS,
148
-                    }}
149
-                />
150
-                <DrawerStack.Screen
151
-                    name="vote"
152
-                    component={VoteScreen}
153
-                    options={{
154
-                        title: i18n.t('screens.vote'),
155
-                    }}
156
-                />
157
-                <DrawerStack.Screen
158
-                    name="amicale-contact"
159
-                    component={AmicaleContactScreen}
160
-                    options={{
161
-                        title: i18n.t('screens.amicaleAbout'),
162
-                    }}
163
-                />
164
-            </DrawerStack.Navigator>
165
-        );
20
+function MainStackComponent(props: { createTabNavigator: () => React.Node }) {
21
+    return (
22
+        <MainStack.Navigator
23
+            initialRouteName={'main'}
24
+            headerMode={'screen'}
25
+            screenOptions={defaultScreenOptions}
26
+        >
27
+            <MainStack.Screen
28
+                name="main"
29
+                component={props.createTabNavigator}
30
+                options={{
31
+                    headerShown: false,
32
+                }}
33
+            />
34
+            <MainStack.Screen
35
+                name="settings"
36
+                component={SettingsScreen}
37
+                options={{
38
+                    title: i18n.t('screens.settings'),
39
+                }}
40
+            />
41
+            <MainStack.Screen
42
+                name="about"
43
+                component={AboutScreen}
44
+                options={{
45
+                    title: i18n.t('screens.about'),
46
+                }}
47
+            />
48
+            <MainStack.Screen
49
+                name="dependencies"
50
+                component={AboutDependenciesScreen}
51
+                options={{
52
+                    title: i18n.t('aboutScreen.libs')
53
+                }}
54
+            />
55
+            <MainStack.Screen
56
+                name="debug"
57
+                component={DebugScreen}
58
+                options={{
59
+                    title: i18n.t('aboutScreen.debug')
60
+                }}
61
+            />
62
+        </MainStack.Navigator>
63
+    );
166 64
 }
167 65
 
168
-const Drawer = createDrawerNavigator();
169
-
170 66
 type Props = {
171 67
     defaultHomeRoute: string | null,
172 68
     defaultHomeData: { [key: string]: any }
@@ -174,34 +70,16 @@ type Props = {
174 70
 
175 71
 export default class DrawerNavigator extends React.Component<Props> {
176 72
 
177
-    createDrawerStackComponent: () => React.Node;
73
+    createTabNavigator: () => React.Node;
178 74
 
179 75
     constructor(props: Props) {
180 76
         super(props);
181
-        const createTabNavigator = () => <TabNavigator {...props}/>
182
-        this.createDrawerStackComponent = () => <DrawerStackComponent createTabNavigator={createTabNavigator}/>;
77
+        this.createTabNavigator = () => <TabNavigator {...props}/>
183 78
     }
184 79
 
185
-    getDrawerContent = (props: {
186
-        navigation: DrawerNavigationProp,
187
-        state: { [key: string]: any }
188
-    }) => <Sidebar {...props}/>
189
-
190 80
     render() {
191 81
         return (
192
-            <Drawer.Navigator
193
-                initialRouteName={'stack'}
194
-                headerMode={'none'}
195
-                backBehavior={'initialRoute'}
196
-                drawerType={'front'}
197
-                drawerContent={this.getDrawerContent}
198
-                screenOptions={defaultScreenOptions}
199
-            >
200
-                <Drawer.Screen
201
-                    name="stack"
202
-                    component={this.createDrawerStackComponent}
203
-                />
204
-            </Drawer.Navigator>
82
+            <MainStackComponent createTabNavigator={this.createTabNavigator}/>
205 83
         );
206 84
     }
207 85
 }

+ 168
- 138
src/navigation/MainTabNavigator.js View File

@@ -13,82 +13,97 @@ import ProximoAboutScreen from "../screens/Proximo/ProximoAboutScreen";
13 13
 import PlanexScreen from '../screens/Planex/PlanexScreen';
14 14
 import AsyncStorageManager from "../managers/AsyncStorageManager";
15 15
 import {useTheme} from 'react-native-paper';
16
+import {Platform} from 'react-native';
16 17
 import i18n from "i18n-js";
17 18
 import ClubDisplayScreen from "../screens/Amicale/Clubs/ClubDisplayScreen";
18 19
 import ScannerScreen from "../screens/Home/ScannerScreen";
19
-import MaterialHeaderButtons, {Item} from "../components/Overrides/CustomHeaderButton";
20 20
 import FeedItemScreen from "../screens/Home/FeedItemScreen";
21 21
 import {createCollapsibleStack} from "react-navigation-collapsible";
22 22
 import GroupSelectionScreen from "../screens/Planex/GroupSelectionScreen";
23 23
 import CustomTabBar from "../components/Tabbar/CustomTabBar";
24
-import {DrawerNavigationProp} from "@react-navigation/drawer";
24
+import SelfMenuScreen from "../screens/Other/SelfMenuScreen";
25
+import AvailableRoomScreen from "../screens/Websites/AvailableRoomScreen";
26
+import BibScreen from "../screens/Websites/BibScreen";
27
+import {AmicaleWebsiteScreen} from "../screens/Websites/AmicaleWebsiteScreen";
28
+import {ElusEtudiantsWebsiteScreen} from "../screens/Websites/ElusEtudiantsWebsiteScreen";
29
+import {WiketudWebsiteScreen} from "../screens/Websites/WiketudWebsiteScreen";
30
+import {TutorInsaWebsiteScreen} from "../screens/Websites/TutorInsaWebsiteScreen";
31
+import TetrisScreen from "../screens/Tetris/TetrisScreen";
32
+import LoginScreen from "../screens/Amicale/LoginScreen";
33
+import ProfileScreen from "../screens/Amicale/ProfileScreen";
34
+import ClubListScreen from "../screens/Amicale/Clubs/ClubListScreen";
35
+import ClubAboutScreen from "../screens/Amicale/Clubs/ClubAboutScreen";
36
+import VoteScreen from "../screens/Amicale/VoteScreen";
37
+import AmicaleContactScreen from "../screens/Amicale/AmicaleContactScreen";
38
+import AmicaleHomeScreen from "../screens/Amicale/AmicaleHomeScreen";
39
+import WebsitesHomeScreen from "../screens/Websites/WebsitesHomeScreen";
40
+import InsaHomeScreen from "../screens/Insa/InsaHomeScreen";
25 41
 
26 42
 const defaultScreenOptions = {
27 43
     gestureEnabled: true,
28 44
     cardOverlayEnabled: true,
29
-    ...TransitionPresets.SlideFromRightIOS,
45
+    ...TransitionPresets.ScaleFromCenterAndroid,
30 46
 };
31 47
 
32
-function getDrawerButton(navigation: DrawerNavigationProp) {
33
-    return (
34
-        <MaterialHeaderButtons left={true}>
35
-            <Item title="menu" iconName="menu" onPress={navigation.openDrawer}/>
36
-        </MaterialHeaderButtons>
37
-    );
48
+const modalTransition = Platform.OS === 'ios' ? TransitionPresets.ModalPresentationIOS : TransitionPresets.ModalSlideFromBottomIOS;
49
+
50
+const screenTransition = Platform.OS === 'ios' ? TransitionPresets.SlideFromRightIOS : TransitionPresets.ScaleFromCenterAndroid;
51
+
52
+function createScreenCollapsibleStack(
53
+    name: string,
54
+    component: any,
55
+    title: string,
56
+    useNativeDriver?: boolean,
57
+    options?: { [key: string]: any }) {
58
+    const {colors} = useTheme();
59
+    const screenOptions = options != null ? options : {};
60
+    return createCollapsibleStack(
61
+        <HomeStack.Screen
62
+            name={name}
63
+            component={component}
64
+            options={{
65
+                title: title,
66
+                headerStyle: {
67
+                    backgroundColor: colors.surface,
68
+                },
69
+                ...screenOptions,
70
+            }}
71
+        />,
72
+        {
73
+            collapsedColor: 'transparent',
74
+            useNativeDriver: useNativeDriver != null ? useNativeDriver : true, // native driver does not work with webview
75
+        }
76
+    )
77
+}
78
+
79
+function getWebsiteStack(name: string, component: any, title: string) {
80
+    return createScreenCollapsibleStack(name, component, title, false);
38 81
 }
39 82
 
83
+
40 84
 const ProximoStack = createStackNavigator();
41 85
 
42 86
 function ProximoStackComponent() {
43
-    const {colors} = useTheme();
44 87
     return (
45 88
         <ProximoStack.Navigator
46 89
             initialRouteName="index"
47
-            headerMode="float"
90
+            headerMode={"screen"}
48 91
             screenOptions={defaultScreenOptions}
49 92
         >
50
-            {createCollapsibleStack(
51
-                <ProximoStack.Screen
52
-                    name="index"
53
-                    options={({navigation}) => {
54
-                        const openDrawer = getDrawerButton.bind(this, navigation);
55
-                        return {
56
-                            title: 'Proximo',
57
-                            headerLeft: openDrawer,
58
-                            headerStyle: {
59
-                                backgroundColor: colors.surface,
60
-                            },
61
-                        };
62
-                    }}
63
-                    component={ProximoMainScreen}
64
-                />,
65
-                {
66
-                    collapsedColor: 'transparent',
67
-                    useNativeDriver: true,
68
-                }
69
-            )}
70
-            {createCollapsibleStack(
71
-                <ProximoStack.Screen
72
-                    name="proximo-list"
73
-                    options={{
74
-                        title: i18n.t('screens.proximoArticles'),
75
-                        headerStyle: {
76
-                            backgroundColor: colors.surface,
77
-                        }
78
-                    }}
79
-                    component={ProximoListScreen}
80
-                />,
81
-                {
82
-                    collapsedColor: 'transparent',
83
-                    useNativeDriver: true,
84
-                }
93
+            {createScreenCollapsibleStack("index", ProximoMainScreen, "Proximo")}
94
+            {createScreenCollapsibleStack(
95
+                "proximo-list",
96
+                ProximoListScreen,
97
+                i18n.t('screens.proximoArticles'),
98
+                true,
99
+                {...screenTransition},
85 100
             )}
86 101
             <ProximoStack.Screen
87 102
                 name="proximo-about"
88 103
                 component={ProximoAboutScreen}
89 104
                 options={{
90 105
                     title: i18n.t('screens.proximo'),
91
-                    ...TransitionPresets.ModalSlideFromBottomIOS,
106
+                    ...modalTransition,
92 107
                 }}
93 108
             />
94 109
         </ProximoStack.Navigator>
@@ -98,39 +113,19 @@ function ProximoStackComponent() {
98 113
 const ProxiwashStack = createStackNavigator();
99 114
 
100 115
 function ProxiwashStackComponent() {
101
-    const {colors} = useTheme();
102 116
     return (
103 117
         <ProxiwashStack.Navigator
104 118
             initialRouteName="index"
105
-            headerMode='float'
119
+            headerMode={"screen"}
106 120
             screenOptions={defaultScreenOptions}
107 121
         >
108
-            {createCollapsibleStack(
109
-                <ProxiwashStack.Screen
110
-                    name="index"
111
-                    component={ProxiwashScreen}
112
-                    options={({navigation}) => {
113
-                        const openDrawer = getDrawerButton.bind(this, navigation);
114
-                        return {
115
-                            title: i18n.t('screens.proxiwash'),
116
-                            headerLeft: openDrawer,
117
-                            headerStyle: {
118
-                                backgroundColor: colors.surface,
119
-                            },
120
-                        };
121
-                    }}
122
-                />,
123
-                {
124
-                    collapsedColor: 'transparent',
125
-                    useNativeDriver: true,
126
-                }
127
-            )}
122
+            {createScreenCollapsibleStack("index", ProxiwashScreen, i18n.t('screens.proxiwash'))}
128 123
             <ProxiwashStack.Screen
129 124
                 name="proxiwash-about"
130 125
                 component={ProxiwashAboutScreen}
131 126
                 options={{
132 127
                     title: i18n.t('screens.proxiwash'),
133
-                    ...TransitionPresets.ModalSlideFromBottomIOS,
128
+                    ...modalTransition,
134 129
                 }}
135 130
             />
136 131
         </ProxiwashStack.Navigator>
@@ -143,18 +138,14 @@ function PlanningStackComponent() {
143 138
     return (
144 139
         <PlanningStack.Navigator
145 140
             initialRouteName="index"
146
-            headerMode='float'
141
+            headerMode={"screen"}
147 142
             screenOptions={defaultScreenOptions}
148 143
         >
149 144
             <PlanningStack.Screen
150 145
                 name="index"
151 146
                 component={PlanningScreen}
152
-                options={({navigation}) => {
153
-                    const openDrawer = getDrawerButton.bind(this, navigation);
154
-                    return {
155
-                        title: i18n.t('screens.planning'),
156
-                        headerLeft: openDrawer
157
-                    };
147
+                options={{
148
+                    title: i18n.t('screens.planning'),
158 149
                 }}
159 150
             />
160 151
             <PlanningStack.Screen
@@ -162,7 +153,7 @@ function PlanningStackComponent() {
162 153
                 component={PlanningDisplayScreen}
163 154
                 options={{
164 155
                     title: i18n.t('screens.planningDisplayScreen'),
165
-                    ...TransitionPresets.ModalSlideFromBottomIOS,
156
+                    ...modalTransition,
166 157
                 }}
167 158
             />
168 159
         </PlanningStack.Navigator>
@@ -179,22 +170,18 @@ function HomeStackComponent(initialRoute: string | null, defaultData: { [key: st
179 170
     return (
180 171
         <HomeStack.Navigator
181 172
             initialRouteName={"index"}
182
-            headerMode="float"
173
+            headerMode={"screen"}
183 174
             screenOptions={defaultScreenOptions}
184 175
         >
185 176
             {createCollapsibleStack(
186 177
                 <HomeStack.Screen
187 178
                     name="index"
188 179
                     component={HomeScreen}
189
-                    options={({navigation}) => {
190
-                        const openDrawer = getDrawerButton.bind(this, navigation);
191
-                        return {
192
-                            title: i18n.t('screens.home'),
193
-                            headerLeft: openDrawer,
194
-                            headerStyle: {
195
-                                backgroundColor: colors.surface,
196
-                            },
197
-                        };
180
+                    options={{
181
+                        title: i18n.t('screens.home'),
182
+                        headerStyle: {
183
+                            backgroundColor: colors.surface,
184
+                        },
198 185
                     }}
199 186
                     initialParams={params}
200 187
                 />,
@@ -208,15 +195,7 @@ function HomeStackComponent(initialRoute: string | null, defaultData: { [key: st
208 195
                 component={PlanningDisplayScreen}
209 196
                 options={{
210 197
                     title: i18n.t('screens.planningDisplayScreen'),
211
-                    ...TransitionPresets.ModalSlideFromBottomIOS,
212
-                }}
213
-            />
214
-            <HomeStack.Screen
215
-                name="home-club-information"
216
-                component={ClubDisplayScreen}
217
-                options={{
218
-                    title: i18n.t('screens.clubDisplayScreen'),
219
-                    ...TransitionPresets.ModalSlideFromBottomIOS,
198
+                    ...modalTransition,
220 199
                 }}
221 200
             />
222 201
             <HomeStack.Screen
@@ -224,7 +203,7 @@ function HomeStackComponent(initialRoute: string | null, defaultData: { [key: st
224 203
                 component={FeedItemScreen}
225 204
                 options={{
226 205
                     title: i18n.t('screens.feedDisplayScreen'),
227
-                    ...TransitionPresets.ModalSlideFromBottomIOS,
206
+                    ...modalTransition,
228 207
                 }}
229 208
             />
230 209
             <HomeStack.Screen
@@ -232,7 +211,89 @@ function HomeStackComponent(initialRoute: string | null, defaultData: { [key: st
232 211
                 component={ScannerScreen}
233 212
                 options={{
234 213
                     title: i18n.t('screens.scanner'),
235
-                    ...TransitionPresets.ModalSlideFromBottomIOS,
214
+                    ...modalTransition,
215
+                }}
216
+            />
217
+
218
+
219
+            {createScreenCollapsibleStack("self-menu", SelfMenuScreen, i18n.t('screens.menuSelf'))}
220
+            {getWebsiteStack("available-rooms", AvailableRoomScreen, i18n.t('screens.availableRooms'))}
221
+            {getWebsiteStack("bib", BibScreen, i18n.t('screens.bib'))}
222
+            {getWebsiteStack("amicale-website", AmicaleWebsiteScreen, "Amicale")}
223
+            {getWebsiteStack("elus-etudiants", ElusEtudiantsWebsiteScreen, "Élus Étudiants")}
224
+            {getWebsiteStack("wiketud", WiketudWebsiteScreen, "Wiketud")}
225
+            {getWebsiteStack("tutorinsa", TutorInsaWebsiteScreen, "Tutor'INSA")}
226
+            <HomeStack.Screen
227
+                name="tetris"
228
+                component={TetrisScreen}
229
+                options={{
230
+                    title: i18n.t("game.title"),
231
+                }}
232
+            />
233
+            <HomeStack.Screen
234
+                name="login"
235
+                component={LoginScreen}
236
+                options={{
237
+                    title: i18n.t('screens.login'),
238
+                }}
239
+            />
240
+            <HomeStack.Screen
241
+                name="profile"
242
+                component={ProfileScreen}
243
+                options={{
244
+                    title: i18n.t('screens.profile'),
245
+                }}
246
+            />
247
+            {createScreenCollapsibleStack("club-list", ClubListScreen, i18n.t('clubs.clubList'))}
248
+            <HomeStack.Screen
249
+                name="club-information"
250
+                component={ClubDisplayScreen}
251
+                options={{
252
+                    title: i18n.t('screens.clubDisplayScreen'),
253
+                    ...modalTransition,
254
+                }}
255
+            />
256
+            <HomeStack.Screen
257
+                name="club-about"
258
+                component={ClubAboutScreen}
259
+                options={{
260
+                    title: i18n.t('screens.clubsAbout'),
261
+                    ...modalTransition,
262
+                }}
263
+            />
264
+            <HomeStack.Screen
265
+                name="vote"
266
+                component={VoteScreen}
267
+                options={{
268
+                    title: i18n.t('screens.vote'),
269
+                }}
270
+            />
271
+            <HomeStack.Screen
272
+                name="amicale-contact"
273
+                component={AmicaleContactScreen}
274
+                options={{
275
+                    title: i18n.t('screens.amicaleAbout'),
276
+                }}
277
+            />
278
+            <HomeStack.Screen
279
+                name="amicale-home"
280
+                component={AmicaleHomeScreen}
281
+                options={{
282
+                    title: "AMICALE HOME",
283
+                }}
284
+            />
285
+            <HomeStack.Screen
286
+                name="websites-home"
287
+                component={WebsitesHomeScreen}
288
+                options={{
289
+                    title: "WEBSITES HOME",
290
+                }}
291
+            />
292
+            <HomeStack.Screen
293
+                name="insa-home"
294
+                component={InsaHomeScreen}
295
+                options={{
296
+                    title: "INSA HOME",
236 297
                 }}
237 298
             />
238 299
         </HomeStack.Navigator>
@@ -242,50 +303,19 @@ function HomeStackComponent(initialRoute: string | null, defaultData: { [key: st
242 303
 const PlanexStack = createStackNavigator();
243 304
 
244 305
 function PlanexStackComponent() {
245
-    const {colors} = useTheme();
246 306
     return (
247 307
         <PlanexStack.Navigator
248 308
             initialRouteName="index"
249
-            headerMode="float"
309
+            headerMode={"screen"}
250 310
             screenOptions={defaultScreenOptions}
251 311
         >
252
-            {createCollapsibleStack(
253
-                <PlanexStack.Screen
254
-                    name="index"
255
-                    component={PlanexScreen}
256
-                    options={({navigation}) => {
257
-                        const openDrawer = getDrawerButton.bind(this, navigation);
258
-                        return {
259
-                            title: 'Planex',
260
-                            headerLeft: openDrawer,
261
-                            headerStyle: {
262
-                                backgroundColor: colors.surface,
263
-                            },
264
-                        };
265
-                    }}
266
-                />,
267
-                {
268
-                    collapsedColor: 'transparent',
269
-                    useNativeDriver: false, // native driver does not work with webview
270
-                }
271
-            )}
272
-            {createCollapsibleStack(
273
-                <PlanexStack.Screen
274
-                    name="group-select"
275
-                    component={GroupSelectionScreen}
276
-                    options={{
277
-                        title: 'GroupSelectionScreen',
278
-                        headerStyle: {
279
-                            backgroundColor: colors.surface,
280
-                        },
281
-                        ...TransitionPresets.ModalSlideFromBottomIOS,
282
-                    }}
283
-                />,
284
-                {
285
-                    collapsedColor: 'transparent',
286
-                    useNativeDriver: true,
287
-                }
288
-            )}
312
+            {getWebsiteStack("index", PlanexScreen, "Planex")}
313
+            {createScreenCollapsibleStack(
314
+                "group-select",
315
+                GroupSelectionScreen,
316
+                "GROUP SELECT",
317
+                true,
318
+                {...modalTransition})}
289 319
         </PlanexStack.Navigator>
290 320
     );
291 321
 }

+ 85
- 0
src/screens/Amicale/AmicaleHomeScreen.js View File

@@ -0,0 +1,85 @@
1
+// @flow
2
+
3
+import * as React from 'react';
4
+import {ScrollView, StyleSheet} from "react-native";
5
+import {Button, withTheme} from 'react-native-paper';
6
+
7
+type Props = {
8
+    navigation: Object,
9
+    route: Object,
10
+}
11
+
12
+type State = {}
13
+
14
+class AmicaleHomeScreen extends React.Component<Props, State> {
15
+
16
+    state = {};
17
+
18
+    colors: Object;
19
+
20
+    constructor(props) {
21
+        super(props);
22
+
23
+        this.colors = props.theme.colors;
24
+    }
25
+
26
+    render() {
27
+        const nav = this.props.navigation;
28
+        return (
29
+            <ScrollView>
30
+                <Button
31
+                    icon={"login"}
32
+                    onPress={() => nav.navigate("login")}
33
+                >
34
+                    LOGIN
35
+                </Button>
36
+                <Button
37
+                    icon={"information"}
38
+                    onPress={() => nav.navigate("amicale-contact")}
39
+                >
40
+                    INFO
41
+                </Button>
42
+                <Button
43
+                    icon={"information"}
44
+                    onPress={() => nav.navigate("club-list")}
45
+                >
46
+                    CLUBS
47
+                </Button>
48
+                <Button
49
+                    icon={"information"}
50
+                    onPress={() => nav.navigate("profile")}
51
+                >
52
+                    PROFILE
53
+                </Button>
54
+                <Button
55
+                    icon={"information"}
56
+                    onPress={() => nav.navigate("vote")}
57
+                >
58
+                    VOTE
59
+                </Button>
60
+            </ScrollView>
61
+        );
62
+    }
63
+}
64
+
65
+const styles = StyleSheet.create({
66
+    container: {
67
+        flex: 1,
68
+        flexDirection: 'column',
69
+        justifyContent: 'center',
70
+    },
71
+    card: {
72
+        margin: 10,
73
+    },
74
+    header: {
75
+        fontSize: 36,
76
+        marginBottom: 48
77
+    },
78
+    textInput: {},
79
+    btnContainer: {
80
+        marginTop: 5,
81
+        marginBottom: 10,
82
+    }
83
+});
84
+
85
+export default withTheme(AmicaleHomeScreen);

+ 7
- 18
src/screens/Home/HomeScreen.js View File

@@ -11,7 +11,6 @@ import SquareDashboardItem from "../../components/Home/SmallDashboardItem";
11 11
 import PreviewEventDashboardItem from "../../components/Home/PreviewEventDashboardItem";
12 12
 import {stringToDate} from "../../utils/Planning";
13 13
 import ActionsDashBoardItem from "../../components/Home/ActionsDashboardItem";
14
-import ConnectionManager from "../../managers/ConnectionManager";
15 14
 import {CommonActions} from '@react-navigation/native';
16 15
 import MaterialHeaderButtons, {Item} from "../../components/Overrides/CustomHeaderButton";
17 16
 import AnimatedFAB from "../../components/Animations/AnimatedFAB";
@@ -103,14 +102,11 @@ class HomeScreen extends React.Component<Props> {
103 102
 
104 103
     colors: Object;
105 104
 
106
-    isLoggedIn: boolean | null;
107
-
108 105
     fabRef: { current: null | AnimatedFAB };
109 106
 
110 107
     constructor(props) {
111 108
         super(props);
112 109
         this.colors = props.theme.colors;
113
-        this.isLoggedIn = null;
114 110
         this.fabRef = React.createRef();
115 111
     }
116 112
 
@@ -132,12 +128,9 @@ class HomeScreen extends React.Component<Props> {
132 128
     }
133 129
 
134 130
     onScreenFocus = () => {
135
-        if (this.isLoggedIn !== ConnectionManager.getInstance().isLoggedIn()) {
136
-            this.isLoggedIn = ConnectionManager.getInstance().isLoggedIn();
137
-            this.props.navigation.setOptions({
138
-                headerRight: this.getHeaderButton,
139
-            });
140
-        }
131
+        this.props.navigation.setOptions({
132
+            headerRight: this.getHeaderButton,
133
+        });
141 134
         // handle link open when home is not focused or created
142 135
         this.handleNavigationParams();
143 136
     };
@@ -153,15 +146,11 @@ class HomeScreen extends React.Component<Props> {
153 146
     };
154 147
 
155 148
     getHeaderButton = () => {
156
-        const screen = this.isLoggedIn
157
-            ? "profile"
158
-            : "login";
159
-        const icon = this.isLoggedIn
160
-            ? "account"
161
-            : "login";
162
-        const onPress = () => this.props.navigation.navigate(screen);
149
+        const onPressSettings = () => this.props.navigation.navigate("settings");
150
+        const onPressAbout = () => this.props.navigation.navigate("about");
163 151
         return <MaterialHeaderButtons>
164
-            <Item title="main" iconName={icon} onPress={onPress}/>
152
+            <Item title="settings" iconName={"settings"} onPress={onPressSettings}/>
153
+            <Item title="information" iconName={"information"} onPress={onPressAbout}/>
165 154
         </MaterialHeaderButtons>;
166 155
     };
167 156
 

+ 85
- 0
src/screens/Insa/InsaHomeScreen.js View File

@@ -0,0 +1,85 @@
1
+// @flow
2
+
3
+import * as React from 'react';
4
+import {ScrollView, StyleSheet} from "react-native";
5
+import {Button, withTheme} from 'react-native-paper';
6
+
7
+type Props = {
8
+    navigation: Object,
9
+    route: Object,
10
+}
11
+
12
+type State = {}
13
+
14
+class InsaHomeScreen extends React.Component<Props, State> {
15
+
16
+    state = {};
17
+
18
+    colors: Object;
19
+
20
+    constructor(props) {
21
+        super(props);
22
+
23
+        this.colors = props.theme.colors;
24
+    }
25
+
26
+    render() {
27
+        const nav = this.props.navigation;
28
+        return (
29
+            <ScrollView>
30
+                <Button
31
+                    icon={"information"}
32
+                    onPress={() => nav.navigate("self-menu")}
33
+                >
34
+                    RU
35
+                </Button>
36
+                <Button
37
+                    icon={"information"}
38
+                    onPress={() => nav.navigate("available-rooms")}
39
+                >
40
+                    AVAILABLE ROOMS
41
+                </Button>
42
+                <Button
43
+                    icon={"information"}
44
+                    onPress={() => nav.navigate("bib")}
45
+                >
46
+                    BIB
47
+                </Button>
48
+                <Button// TODO create webview
49
+                    icon={"information"}
50
+                    onPress={() => nav.navigate("self-menu")}
51
+                >
52
+                    EMAIL
53
+                </Button>
54
+                <Button// TODO create webview
55
+                    icon={"information"}
56
+                    onPress={() => nav.navigate("self-menu")}
57
+                >
58
+                    ENT
59
+                </Button>
60
+            </ScrollView>
61
+        );
62
+    }
63
+}
64
+
65
+const styles = StyleSheet.create({
66
+    container: {
67
+        flex: 1,
68
+        flexDirection: 'column',
69
+        justifyContent: 'center',
70
+    },
71
+    card: {
72
+        margin: 10,
73
+    },
74
+    header: {
75
+        fontSize: 36,
76
+        marginBottom: 48
77
+    },
78
+    textInput: {},
79
+    btnContainer: {
80
+        marginTop: 5,
81
+        marginBottom: 10,
82
+    }
83
+});
84
+
85
+export default withTheme(InsaHomeScreen);

+ 79
- 0
src/screens/Websites/WebsitesHomeScreen.js View File

@@ -0,0 +1,79 @@
1
+// @flow
2
+
3
+import * as React from 'react';
4
+import {ScrollView, StyleSheet} from "react-native";
5
+import {Button, withTheme} from 'react-native-paper';
6
+
7
+type Props = {
8
+    navigation: Object,
9
+    route: Object,
10
+}
11
+
12
+type State = {}
13
+
14
+class WebsitesHomeScreen extends React.Component<Props, State> {
15
+
16
+    state = {};
17
+
18
+    colors: Object;
19
+
20
+    constructor(props) {
21
+        super(props);
22
+
23
+        this.colors = props.theme.colors;
24
+    }
25
+
26
+    render() {
27
+        const nav = this.props.navigation;
28
+        return (
29
+            <ScrollView>
30
+                <Button
31
+                    icon={"information"}
32
+                    onPress={() => nav.navigate("amicale-website")}
33
+                >
34
+                    AMICALE
35
+                </Button>
36
+                <Button
37
+                    icon={"information"}
38
+                    onPress={() => nav.navigate("elus-etudiants")}
39
+                >
40
+                    ELUS ETUDIANTS
41
+                </Button>
42
+                <Button
43
+                    icon={"information"}
44
+                    onPress={() => nav.navigate("tutorinsa")}
45
+                >
46
+                    TUTOR INSA
47
+                </Button>
48
+                <Button
49
+                    icon={"information"}
50
+                    onPress={() => nav.navigate("wiketud")}
51
+                >
52
+                    WIKETUD
53
+                </Button>
54
+            </ScrollView>
55
+        );
56
+    }
57
+}
58
+
59
+const styles = StyleSheet.create({
60
+    container: {
61
+        flex: 1,
62
+        flexDirection: 'column',
63
+        justifyContent: 'center',
64
+    },
65
+    card: {
66
+        margin: 10,
67
+    },
68
+    header: {
69
+        fontSize: 36,
70
+        marginBottom: 48
71
+    },
72
+    textInput: {},
73
+    btnContainer: {
74
+        marginTop: 5,
75
+        marginBottom: 10,
76
+    }
77
+});
78
+
79
+export default withTheme(WebsitesHomeScreen);

+ 1
- 1
src/utils/URLHandler.js View File

@@ -7,7 +7,7 @@ export default class URLHandler {
7 7
     static CLUB_INFO_URL_PATH = "club";
8 8
     static EVENT_INFO_URL_PATH = "event";
9 9
 
10
-    static CLUB_INFO_ROUTE = "home-club-information";
10
+    static CLUB_INFO_ROUTE = "club-information";
11 11
     static EVENT_INFO_ROUTE = "home-planning-information";
12 12
 
13 13
     onInitialURLParsed: Function;

Loading…
Cancel
Save