Browse Source

Always show home content even if an error occurred

Arnaud Vergnet 4 years ago
parent
commit
dca27e091c
2 changed files with 25 additions and 14 deletions
  1. 8
    2
      src/components/Screens/WebSectionList.js
  2. 17
    12
      src/screens/Home/HomeScreen.js

+ 8
- 2
src/components/Screens/WebSectionList.js View File

@@ -22,6 +22,7 @@ type Props = {
22 22
     onScroll: (event: SyntheticEvent<EventTarget>) => void,
23 23
     collapsibleStack: Collapsible,
24 24
 
25
+    showError: boolean,
25 26
     itemHeight?: number,
26 27
     updateData?: number,
27 28
     renderSectionHeader?: (data: { [key: string]: any }) => React.Node,
@@ -49,6 +50,7 @@ class WebSectionList extends React.PureComponent<Props, State> {
49 50
     static defaultProps = {
50 51
         stickyHeader: false,
51 52
         updateData: 0,
53
+        showError: true,
52 54
     };
53 55
 
54 56
     scrollRef: { current: null | Animated.SectionList };
@@ -202,8 +204,12 @@ class WebSectionList extends React.PureComponent<Props, State> {
202 204
 
203 205
     render() {
204 206
         let dataset = [];
205
-        if (this.state.fetchedData != null)
206
-            dataset = this.props.createDataset(this.state.fetchedData);
207
+        if (this.state.fetchedData != null || (this.state.fetchedData == null && !this.props.showError)) {
208
+            if (this.state.fetchedData == null)
209
+                dataset = this.props.createDataset({});
210
+            else
211
+                dataset = this.props.createDataset(this.state.fetchedData);
212
+        }
207 213
         const {containerPaddingTop, scrollIndicatorInsetTop, onScrollWithListener} = this.props.collapsibleStack;
208 214
         return (
209 215
             <View>

+ 17
- 12
src/screens/Home/HomeScreen.js View File

@@ -178,8 +178,12 @@ class HomeScreen extends React.Component<Props> {
178 178
         let dashboardData = [];
179 179
         if (fetchedData.news_feed != null)
180 180
             newsData = fetchedData.news_feed.data;
181
+        else
182
+            newsData = [];
181 183
         if (fetchedData.dashboard != null)
182 184
             dashboardData = this.generateDashboardDataset(fetchedData.dashboard);
185
+        else
186
+            dashboardData = this.generateDashboardDataset(null);
183 187
         return [
184 188
             {
185 189
                 title: '',
@@ -200,7 +204,7 @@ class HomeScreen extends React.Component<Props> {
200 204
      * @param dashboardData
201 205
      * @return {Array<dashboardItem>}
202 206
      */
203
-    generateDashboardDataset(dashboardData: fullDashboard): Array<dashboardItem> {
207
+    generateDashboardDataset(dashboardData: fullDashboard | null): Array<dashboardItem> {
204 208
         return [
205 209
             {id: 'actions', content: []},
206 210
             {
@@ -208,49 +212,49 @@ class HomeScreen extends React.Component<Props> {
208 212
                 content: [
209 213
                     {
210 214
                         id: 'washers',
211
-                        data: dashboardData.available_machines.washers,
215
+                        data: dashboardData == null ? 0 : dashboardData.available_machines.washers,
212 216
                         icon: 'washing-machine',
213 217
                         color: this.colors.proxiwashColor,
214 218
                         onPress: this.onProxiwashClick,
215
-                        isAvailable: dashboardData.available_machines.washers > 0
219
+                        isAvailable: dashboardData == null ? false : dashboardData.available_machines.washers > 0
216 220
                     },
217 221
                     {
218 222
                         id: 'dryers',
219
-                        data: dashboardData.available_machines.dryers,
223
+                        data: dashboardData == null ? 0 : dashboardData.available_machines.dryers,
220 224
                         icon: 'tumble-dryer',
221 225
                         color: this.colors.proxiwashColor,
222 226
                         onPress: this.onProxiwashClick,
223
-                        isAvailable: dashboardData.available_machines.dryers > 0
227
+                        isAvailable: dashboardData == null ? false : dashboardData.available_machines.dryers > 0
224 228
                     },
225 229
                     {
226 230
                         id: 'available_tutorials',
227
-                        data: dashboardData.available_tutorials,
231
+                        data: dashboardData == null ? 0 : dashboardData.available_tutorials,
228 232
                         icon: 'school',
229 233
                         color: this.colors.tutorinsaColor,
230 234
                         onPress: this.onTutorInsaClick,
231
-                        isAvailable: dashboardData.available_tutorials > 0
235
+                        isAvailable: dashboardData == null ? false : dashboardData.available_tutorials > 0
232 236
                     },
233 237
                     {
234 238
                         id: 'proximo_articles',
235
-                        data: dashboardData.proximo_articles,
239
+                        data: dashboardData == null ? 0 : dashboardData.proximo_articles,
236 240
                         icon: 'shopping',
237 241
                         color: this.colors.proximoColor,
238 242
                         onPress: this.onProximoClick,
239
-                        isAvailable: dashboardData.proximo_articles > 0
243
+                        isAvailable: dashboardData == null ? false : dashboardData.proximo_articles > 0
240 244
                     },
241 245
                     {
242 246
                         id: 'today_menu',
243
-                        data: dashboardData.today_menu,
247
+                        data: dashboardData == null ? 0 : dashboardData.today_menu,
244 248
                         icon: 'silverware-fork-knife',
245 249
                         color: this.colors.menuColor,
246 250
                         onPress: this.onMenuClick,
247
-                        isAvailable: dashboardData.today_menu.length > 0
251
+                        isAvailable: dashboardData == null ? false : dashboardData.today_menu.length > 0
248 252
                     },
249 253
                 ]
250 254
             },
251 255
             {
252 256
                 id: 'event',
253
-                content: dashboardData.today_events
257
+                content: dashboardData == null ? [] : dashboardData.today_events
254 258
             },
255 259
         ];
256 260
     }
@@ -509,6 +513,7 @@ class HomeScreen extends React.Component<Props> {
509 513
                     renderItem={this.getRenderItem}
510 514
                     itemHeight={FEED_ITEM_HEIGHT}
511 515
                     onScroll={this.onScroll}
516
+                    showError={false}
512 517
                 />
513 518
                 <AnimatedFAB
514 519
                     {...this.props}

Loading…
Cancel
Save