Browse Source

Show information message when no group is selected

Arnaud Vergnet 4 years ago
parent
commit
ac59121609
4 changed files with 86 additions and 53 deletions
  1. 61
    41
      src/components/Custom/ErrorView.js
  2. 21
    10
      src/screens/Websites/PlanexScreen.js
  3. 2
    1
      translations/en.json
  4. 2
    1
      translations/fr.json

+ 61
- 41
src/components/Custom/ErrorView.js View File

@@ -12,6 +12,9 @@ type Props = {
12 12
     route: Object,
13 13
     errorCode: number,
14 14
     onRefresh: Function,
15
+    icon: string,
16
+    message: string,
17
+    showRetryButton: boolean,
15 18
 }
16 19
 
17 20
 type State = {
@@ -27,6 +30,13 @@ class ErrorView extends React.PureComponent<Props, State> {
27 30
 
28 31
     showLoginButton: boolean;
29 32
 
33
+    static defaultProps = {
34
+        errorCode: 0,
35
+        icon: '',
36
+        message: '',
37
+        showRetryButton: true,
38
+    }
39
+
30 40
     state = {
31 41
         refreshing: false,
32 42
     };
@@ -38,41 +48,47 @@ class ErrorView extends React.PureComponent<Props, State> {
38 48
 
39 49
     generateMessage() {
40 50
         this.showLoginButton = false;
41
-        switch (this.props.errorCode) {
42
-            case ERROR_TYPE.BAD_CREDENTIALS:
43
-                this.message = i18n.t("errors.badCredentials");
44
-                this.icon = "account-alert-outline";
45
-                break;
46
-            case ERROR_TYPE.BAD_TOKEN:
47
-                this.message = i18n.t("errors.badToken");
48
-                this.icon = "account-alert-outline";
49
-                this.showLoginButton = true;
50
-                break;
51
-            case ERROR_TYPE.NO_CONSENT:
52
-                this.message = i18n.t("errors.noConsent");
53
-                this.icon = "account-remove-outline";
54
-                break;
55
-            case ERROR_TYPE.BAD_INPUT:
56
-                this.message = i18n.t("errors.badInput");
57
-                this.icon = "alert-circle-outline";
58
-                break;
59
-            case ERROR_TYPE.FORBIDDEN:
60
-                this.message = i18n.t("errors.forbidden");
61
-                this.icon = "lock";
62
-                break;
63
-            case ERROR_TYPE.CONNECTION_ERROR:
64
-                this.message = i18n.t("errors.connectionError");
65
-                this.icon = "access-point-network-off";
66
-                break;
67
-            case ERROR_TYPE.SERVER_ERROR:
68
-                this.message = i18n.t("errors.serverError");
69
-                this.icon = "server-network-off";
70
-                break;
71
-            default:
72
-                this.message = i18n.t("errors.unknown");
73
-                this.icon = "alert-circle-outline";
74
-                break;
51
+        if (this.props.errorCode !== 0) {
52
+            switch (this.props.errorCode) {
53
+                case ERROR_TYPE.BAD_CREDENTIALS:
54
+                    this.message = i18n.t("errors.badCredentials");
55
+                    this.icon = "account-alert-outline";
56
+                    break;
57
+                case ERROR_TYPE.BAD_TOKEN:
58
+                    this.message = i18n.t("errors.badToken");
59
+                    this.icon = "account-alert-outline";
60
+                    this.showLoginButton = true;
61
+                    break;
62
+                case ERROR_TYPE.NO_CONSENT:
63
+                    this.message = i18n.t("errors.noConsent");
64
+                    this.icon = "account-remove-outline";
65
+                    break;
66
+                case ERROR_TYPE.BAD_INPUT:
67
+                    this.message = i18n.t("errors.badInput");
68
+                    this.icon = "alert-circle-outline";
69
+                    break;
70
+                case ERROR_TYPE.FORBIDDEN:
71
+                    this.message = i18n.t("errors.forbidden");
72
+                    this.icon = "lock";
73
+                    break;
74
+                case ERROR_TYPE.CONNECTION_ERROR:
75
+                    this.message = i18n.t("errors.connectionError");
76
+                    this.icon = "access-point-network-off";
77
+                    break;
78
+                case ERROR_TYPE.SERVER_ERROR:
79
+                    this.message = i18n.t("errors.serverError");
80
+                    this.icon = "server-network-off";
81
+                    break;
82
+                default:
83
+                    this.message = i18n.t("errors.unknown");
84
+                    this.icon = "alert-circle-outline";
85
+                    break;
86
+            }
87
+        } else {
88
+            this.message = this.props.message;
89
+            this.icon = this.props.icon;
75 90
         }
91
+
76 92
     }
77 93
 
78 94
     getRetryButton() {
@@ -88,10 +104,11 @@ class ErrorView extends React.PureComponent<Props, State> {
88 104
 
89 105
     goToLogin = () => {
90 106
         this.props.navigation.navigate("login",
91
-        {
92
-           screen: 'login',
93
-           params: {nextScreen: this.props.route.name}
94
-        })};
107
+            {
108
+                screen: 'login',
109
+                params: {nextScreen: this.props.route.name}
110
+            })
111
+    };
95 112
 
96 113
     getLoginButton() {
97 114
         return <Button
@@ -124,9 +141,11 @@ class ErrorView extends React.PureComponent<Props, State> {
124 141
                     }}>
125 142
                         {this.message}
126 143
                     </Subheading>
127
-                    {this.showLoginButton
128
-                        ? this.getLoginButton()
129
-                        : this.getRetryButton()}
144
+                    {this.props.showRetryButton
145
+                        ? (this.showLoginButton
146
+                            ? this.getLoginButton()
147
+                            : this.getRetryButton())
148
+                        : null}
130 149
                 </View>
131 150
             </View>
132 151
         );
@@ -148,6 +167,7 @@ const styles = StyleSheet.create({
148 167
     },
149 168
     subheading: {
150 169
         textAlign: 'center',
170
+        paddingHorizontal: 20
151 171
     },
152 172
     button: {
153 173
         marginTop: 10,

+ 21
- 10
src/screens/Websites/PlanexScreen.js View File

@@ -13,6 +13,7 @@ import {dateToString, getTimeOnlyString} from "../../utils/Planning";
13 13
 import DateManager from "../../managers/DateManager";
14 14
 import AnimatedBottomBar from "../../components/Custom/AnimatedBottomBar";
15 15
 import {CommonActions} from "@react-navigation/native";
16
+import ErrorView from "../../components/Custom/ErrorView";
16 17
 
17 18
 type Props = {
18 19
     navigation: Object,
@@ -143,7 +144,7 @@ class PlanexScreen extends React.Component<Props, State> {
143 144
 
144 145
         let currentGroup = AsyncStorageManager.getInstance().preferences.planexCurrentGroup.current;
145 146
         if (currentGroup === '')
146
-            currentGroup = {name: "SELECT GROUP", id: 0};
147
+            currentGroup = {name: "SELECT GROUP", id: -1};
147 148
         else
148 149
             currentGroup = JSON.parse(currentGroup);
149 150
         this.state = {
@@ -260,16 +261,26 @@ class PlanexScreen extends React.Component<Props, State> {
260 261
     };
261 262
 
262 263
     getWebView() {
263
-        return (
264
-            <WebViewScreen
265
-                ref={this.webScreenRef}
266
-                navigation={this.props.navigation}
267
-                url={PLANEX_URL}
268
-                customJS={this.customInjectedJS}
269
-                onMessage={this.onMessage}
270
-                onScroll={this.onScroll}
264
+        if (this.state.currentGroup.id !== -1) {
265
+            return (
266
+                <WebViewScreen
267
+                    ref={this.webScreenRef}
268
+                    navigation={this.props.navigation}
269
+                    url={PLANEX_URL}
270
+                    customJS={this.customInjectedJS}
271
+                    onMessage={this.onMessage}
272
+                    onScroll={this.onScroll}
273
+                />
274
+            );
275
+        } else {
276
+            return <ErrorView
277
+                {...this.props}
278
+                icon={'account-clock'}
279
+                message={i18n.t("planexScreen.noGroupSelected")}
280
+                showRetryButton={false}
271 281
             />
272
-        );
282
+        }
283
+
273 284
     }
274 285
 
275 286
     render() {

+ 2
- 1
translations/en.json View File

@@ -212,7 +212,8 @@
212 212
   "planexScreen": {
213 213
     "enableStartScreen": "Come here often? Set it as default screen!",
214 214
     "enableStartOK": "Yes please!",
215
-    "enableStartCancel": "Later"
215
+    "enableStartCancel": "Later",
216
+    "noGroupSelected": "No group selected. Please select your group using the big beautiful red button bellow."
216 217
   },
217 218
   "availableRoomScreen": {
218 219
     "normalRoom": "Work",

+ 2
- 1
translations/fr.json View File

@@ -212,7 +212,8 @@
212 212
   "planexScreen": {
213 213
     "enableStartScreen": "Vous venez souvent ici ? Démarrez l'appli sur cette page!",
214 214
     "enableStartOK": "Oui svp!",
215
-    "enableStartCancel": "Plus tard"
215
+    "enableStartCancel": "Plus tard",
216
+    "noGroupSelected": "Pas de group sélectionné. Merci de choisir un groupe avec le beau bouton rouge ci-dessous."
216 217
   },
217 218
   "availableRoomScreen": {
218 219
     "normalRoom": "Travail",

Loading…
Cancel
Save