Display message when no internet or no data yet in lists

This commit is contained in:
keplyx 2019-07-31 17:41:07 +02:00
parent c480f79769
commit 0201b9a389
8 changed files with 74 additions and 8 deletions

View file

@ -9,7 +9,7 @@ type Props = {
icon: string, icon: string,
color: ?string, color: ?string,
fontSize: number, fontSize: number,
width: number, width: number|string,
} }
/** /**

View file

@ -2,10 +2,12 @@
import * as React from 'react'; import * as React from 'react';
import WebDataManager from "../utils/WebDataManager"; 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 CustomHeader from "./CustomHeader";
import {RefreshControl, SectionList, View} from "react-native"; import {RefreshControl, SectionList, View} from "react-native";
import CustomMaterialIcon from "./CustomMaterialIcon"; import CustomMaterialIcon from "./CustomMaterialIcon";
import i18n from 'i18n-js';
import ThemeManager from "../utils/ThemeManager";
type Props = { type Props = {
navigation: Object, navigation: Object,
@ -69,6 +71,34 @@ export default class FetchedDataSectionList extends React.Component<Props, State
return <View/>; 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 * Create the dataset to be used in the list from the data fetched
* @param fetchedData {Object} * @param fetchedData {Object}
@ -78,11 +108,33 @@ export default class FetchedDataSectionList extends React.Component<Props, State
return []; 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() { hasTabs() {
return false; return false;
} }
getSectionList(dataset: Array<Object>) { getSectionList(dataset: Array<Object>) {
let isEmpty = dataset[0].data.length === 0;
if (isEmpty)
dataset = this.createEmptyDataset();
return ( return (
<SectionList <SectionList
sections={dataset} sections={dataset}
@ -93,12 +145,20 @@ export default class FetchedDataSectionList extends React.Component<Props, State
/> />
} }
renderSectionHeader={({section: {title}}) => renderSectionHeader={({section: {title}}) =>
this.getRenderSectionHeader(title) isEmpty ?
<View/> :
this.getRenderSectionHeader(title)
} }
renderItem={({item, section}) => 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%'}} style={{minHeight: 300, width: '100%'}}
contentContainerStyle={
isEmpty ?
{flexGrow: 1, justifyContent: 'center', alignItems: 'center'} : {}
}
/> />
); );
} }

View file

@ -258,6 +258,7 @@ export default {
// CUSTOM // CUSTOM
customMaterialIconColor: "#5d5d5d", customMaterialIconColor: "#5d5d5d",
fetchedDataSectionListErrorText : "#898989",
// PROXIWASH // PROXIWASH
proxiwashFinishedColor: "rgba(54,165,22,0.31)", proxiwashFinishedColor: "rgba(54,165,22,0.31)",

View file

@ -258,6 +258,7 @@ export default {
// CUSTOM // CUSTOM
customMaterialIconColor: "#b3b3b3", customMaterialIconColor: "#b3b3b3",
fetchedDataSectionListErrorText : "#acacac",
// PROXIWASH // PROXIWASH
proxiwashFinishedColor: "rgba(12,157,13,0.72)", proxiwashFinishedColor: "rgba(12,157,13,0.72)",

View file

@ -87,12 +87,10 @@ export default class ProxiwashScreen extends FetchedDataSectionList {
} }
getDryersKeyExtractor(item: Object) { getDryersKeyExtractor(item: Object) {
console.log(item !== undefined ? "dryer" + item.number : undefined);
return item !== undefined ? "dryer" + item.number : undefined; return item !== undefined ? "dryer" + item.number : undefined;
} }
getWashersKeyExtractor(item: Object) { getWashersKeyExtractor(item: Object) {
console.log(item !== undefined ? "washer" + item.number : undefined);
return 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); reminderNotifTime = parseInt(val);
else else
reminderNotifTime = -1; reminderNotifTime = -1;
console.log(reminderNotifTime);
return reminderNotifTime; return reminderNotifTime;
} }

View file

@ -85,5 +85,9 @@
"machineRunningTitle": "Laundry running: {{time}} minutes left", "machineRunningTitle": "Laundry running: {{time}} minutes left",
"machineRunningBody": "The machine n°{{number}} is still running" "machineRunningBody": "The machine n°{{number}} is still running"
} }
},
"general": {
"loading": "Loading...",
"networkError": "Unable to contact servers. Make sure you are connected to Internet."
} }
} }

View file

@ -85,5 +85,9 @@
"machineRunningTitle": "Machine en cours: {{time}} minutes restantes", "machineRunningTitle": "Machine en cours: {{time}} minutes restantes",
"machineRunningBody": "La machine n°{{number}} n'est pas encore terminée" "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."
} }
} }

View file

@ -55,7 +55,6 @@ export default class AsyncStorageManager {
val = this.preferences[key].default; val = this.preferences[key].default;
this.preferences[key].current = val; this.preferences[key].current = val;
} }
console.log(this.preferences);
} }
savePref(key : string, val : string) { savePref(key : string, val : string) {