forked from vergnet/application-amicale
		
	Display message when no internet or no data yet in lists
This commit is contained in:
		
							parent
							
								
									c480f79769
								
							
						
					
					
						commit
						0201b9a389
					
				
					 8 changed files with 74 additions and 8 deletions
				
			
		|  | @ -9,7 +9,7 @@ type Props = { | |||
|     icon: string, | ||||
|     color: ?string, | ||||
|     fontSize: number, | ||||
|     width: number, | ||||
|     width: number|string, | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  |  | |||
|  | @ -2,10 +2,12 @@ | |||
| 
 | ||||
| import * as React from 'react'; | ||||
| import WebDataManager from "../utils/WebDataManager"; | ||||
| import {Container, Tab, TabHeading, Tabs, Text} from "native-base"; | ||||
| import {Container, H3, Tab, TabHeading, Tabs, Text} from "native-base"; | ||||
| import CustomHeader from "./CustomHeader"; | ||||
| import {RefreshControl, SectionList, View} from "react-native"; | ||||
| import CustomMaterialIcon from "./CustomMaterialIcon"; | ||||
| import i18n from 'i18n-js'; | ||||
| import ThemeManager from "../utils/ThemeManager"; | ||||
| 
 | ||||
| type Props = { | ||||
|     navigation: Object, | ||||
|  | @ -69,6 +71,34 @@ export default class FetchedDataSectionList extends React.Component<Props, State | |||
|         return <View/>; | ||||
|     } | ||||
| 
 | ||||
|     getEmptyRenderItem(text: string, icon: string) { | ||||
|         return ( | ||||
|             <View> | ||||
|                 <View style={{ | ||||
|                     justifyContent: 'center', | ||||
|                     alignItems: 'center', | ||||
|                     width: '100%', | ||||
|                     height: 100, | ||||
|                     marginBottom: 20 | ||||
|                 }}> | ||||
|                     <CustomMaterialIcon | ||||
|                         icon={icon} | ||||
|                         fontSize={100} | ||||
|                         width={100} | ||||
|                         color={ThemeManager.getCurrentThemeVariables().fetchedDataSectionListErrorText}/> | ||||
|                 </View> | ||||
| 
 | ||||
|                 <H3 style={{ | ||||
|                     textAlign: 'center', | ||||
|                     marginRight: 20, | ||||
|                     marginLeft: 20, | ||||
|                     color: ThemeManager.getCurrentThemeVariables().fetchedDataSectionListErrorText | ||||
|                 }}> | ||||
|                     {text} | ||||
|                 </H3> | ||||
|             </View>); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Create the dataset to be used in the list from the data fetched | ||||
|      * @param fetchedData {Object} | ||||
|  | @ -78,11 +108,33 @@ export default class FetchedDataSectionList extends React.Component<Props, State | |||
|         return []; | ||||
|     } | ||||
| 
 | ||||
|     createEmptyDataset() { | ||||
|         return [ | ||||
|             { | ||||
|                 title: '', | ||||
|                 data: [ | ||||
|                     { | ||||
|                         text: this.state.refreshing ? | ||||
|                             i18n.t('general.loading') : | ||||
|                             i18n.t('general.networkError'), | ||||
|                         icon: this.state.refreshing ? | ||||
|                             'refresh' : | ||||
|                             'access-point-network-off' | ||||
|                     } | ||||
|                 ], | ||||
|                 keyExtractor: (item: Object) => item.text, | ||||
|             } | ||||
|         ]; | ||||
|     } | ||||
| 
 | ||||
|     hasTabs() { | ||||
|         return false; | ||||
|     } | ||||
| 
 | ||||
|     getSectionList(dataset: Array<Object>) { | ||||
|         let isEmpty = dataset[0].data.length === 0; | ||||
|         if (isEmpty) | ||||
|             dataset = this.createEmptyDataset(); | ||||
|         return ( | ||||
|             <SectionList | ||||
|                 sections={dataset} | ||||
|  | @ -93,12 +145,20 @@ export default class FetchedDataSectionList extends React.Component<Props, State | |||
|                     /> | ||||
|                 } | ||||
|                 renderSectionHeader={({section: {title}}) => | ||||
|                     this.getRenderSectionHeader(title) | ||||
|                     isEmpty ? | ||||
|                         <View/> : | ||||
|                         this.getRenderSectionHeader(title) | ||||
|                 } | ||||
|                 renderItem={({item, section}) => | ||||
|                     this.getRenderItem(item, section, dataset) | ||||
|                     isEmpty ? | ||||
|                         this.getEmptyRenderItem(item.text, item.icon) : | ||||
|                         this.getRenderItem(item, section, dataset) | ||||
|                 } | ||||
|                 style={{minHeight: 300, width: '100%'}} | ||||
|                 contentContainerStyle={ | ||||
|                     isEmpty ? | ||||
|                         {flexGrow: 1, justifyContent: 'center', alignItems: 'center'} : {} | ||||
|                 } | ||||
|             /> | ||||
|         ); | ||||
|     } | ||||
|  |  | |||
|  | @ -258,6 +258,7 @@ export default { | |||
| 
 | ||||
|   // CUSTOM
 | ||||
|   customMaterialIconColor: "#5d5d5d", | ||||
|   fetchedDataSectionListErrorText : "#898989", | ||||
| 
 | ||||
|   // PROXIWASH
 | ||||
|   proxiwashFinishedColor: "rgba(54,165,22,0.31)", | ||||
|  |  | |||
|  | @ -258,6 +258,7 @@ export default { | |||
| 
 | ||||
|     // CUSTOM
 | ||||
|     customMaterialIconColor: "#b3b3b3", | ||||
|     fetchedDataSectionListErrorText : "#acacac", | ||||
| 
 | ||||
|     // PROXIWASH
 | ||||
|     proxiwashFinishedColor: "rgba(12,157,13,0.72)", | ||||
|  |  | |||
|  | @ -87,12 +87,10 @@ export default class ProxiwashScreen extends FetchedDataSectionList { | |||
|     } | ||||
| 
 | ||||
|     getDryersKeyExtractor(item: Object) { | ||||
|         console.log(item !== undefined ? "dryer" + item.number : undefined); | ||||
|         return item !== undefined ? "dryer" + item.number : undefined; | ||||
|     } | ||||
| 
 | ||||
|     getWashersKeyExtractor(item: Object) { | ||||
|         console.log(item !== undefined ? "washer" + item.number : undefined); | ||||
|         return item !== undefined ? "washer" + item.number : undefined; | ||||
|     } | ||||
| 
 | ||||
|  | @ -155,7 +153,6 @@ export default class ProxiwashScreen extends FetchedDataSectionList { | |||
|             reminderNotifTime = parseInt(val); | ||||
|         else | ||||
|             reminderNotifTime = -1; | ||||
|         console.log(reminderNotifTime); | ||||
|         return reminderNotifTime; | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
|  | @ -85,5 +85,9 @@ | |||
|       "machineRunningTitle": "Laundry running: {{time}} minutes left", | ||||
|       "machineRunningBody": "The machine n°{{number}} is still running" | ||||
|     } | ||||
|   }, | ||||
|   "general": { | ||||
|     "loading": "Loading...", | ||||
|     "networkError": "Unable to contact servers. Make sure you are connected to Internet." | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -85,5 +85,9 @@ | |||
|       "machineRunningTitle": "Machine en cours: {{time}} minutes restantes", | ||||
|       "machineRunningBody": "La machine n°{{number}} n'est pas encore terminée" | ||||
|     } | ||||
|   }, | ||||
|   "general": { | ||||
|     "loading": "Chargement...", | ||||
|     "networkError": "Impossible de contacter les serveurs. Assurez vous d'être connecté à internet." | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -55,7 +55,6 @@ export default class AsyncStorageManager { | |||
|                 val = this.preferences[key].default; | ||||
|             this.preferences[key].current = val; | ||||
|         } | ||||
|         console.log(this.preferences); | ||||
|     } | ||||
| 
 | ||||
|     savePref(key : string, val : string) { | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue