Added proxiwash info screen + fixed crash when machine running

This commit is contained in:
keplyx 2019-08-08 18:05:18 +02:00
parent c6e27c5d47
commit 1aa4a59fa0
5 changed files with 164 additions and 14 deletions

View file

@ -235,6 +235,10 @@ export default class FetchedDataSectionList extends React.Component<Props, State
return false; return false;
} }
getRightButton() {
return <View/>
}
/** /**
* Get the section list render using the generated dataset * Get the section list render using the generated dataset
* *
@ -312,7 +316,7 @@ export default class FetchedDataSectionList extends React.Component<Props, State
const nav = this.props.navigation; const nav = this.props.navigation;
const dataset = this.createDataset(this.state.fetchedData); const dataset = this.createDataset(this.state.fetchedData);
return ( return (
<BaseContainer navigation={nav} headerTitle={this.getHeaderTranslation()}> <BaseContainer navigation={nav} headerTitle={this.getHeaderTranslation()} headerRightButton={this.getRightButton()}>
{this.hasTabs() ? {this.hasTabs() ?
<Tabs> <Tabs>
{this.getTabbedView(dataset)} {this.getTabbedView(dataset)}

View file

@ -88,7 +88,7 @@ export default {
}, },
// Card // Card
cardDefaultBg: "#363636", cardDefaultBg: "#2A2A2A",
cardBorderColor: "#1a1a1a", cardBorderColor: "#1a1a1a",
cardBorderRadius: 2, cardBorderRadius: 2,
cardItemPadding: platform === "ios" ? 10 : 12, cardItemPadding: platform === "ios" ? 10 : 12,

View file

@ -6,6 +6,7 @@ import SettingsScreen from '../screens/SettingsScreen';
import AboutScreen from '../screens/About/AboutScreen'; import AboutScreen from '../screens/About/AboutScreen';
import ProximoListScreen from '../screens/Proximo/ProximoListScreen'; import ProximoListScreen from '../screens/Proximo/ProximoListScreen';
import AboutDependenciesScreen from '../screens/About/AboutDependenciesScreen'; import AboutDependenciesScreen from '../screens/About/AboutDependenciesScreen';
import ProxiwashAboutScreen from '../screens/ProxiwashAboutScreen';
import SelfMenuScreen from '../screens/SelfMenuScreen'; import SelfMenuScreen from '../screens/SelfMenuScreen';
import {fromRight} from "react-navigation-transitions"; import {fromRight} from "react-navigation-transitions";
@ -21,6 +22,7 @@ export default createAppContainer(
AboutScreen: {screen: AboutScreen}, AboutScreen: {screen: AboutScreen},
AboutDependenciesScreen: {screen: AboutDependenciesScreen}, AboutDependenciesScreen: {screen: AboutDependenciesScreen},
SelfMenuScreen: {screen: SelfMenuScreen}, SelfMenuScreen: {screen: SelfMenuScreen},
ProxiwashAboutScreen: {screen: ProxiwashAboutScreen},
}, },
{ {
initialRouteName: "Main", initialRouteName: "Main",

View file

@ -0,0 +1,132 @@
// @flow
import * as React from 'react';
import {Image, Linking, View} from 'react-native';
import {Body, Card, CardItem, Container, Content, H1, Left, Tab, TabHeading, Tabs, Text} from 'native-base';
import CustomHeader from "../components/CustomHeader";
import i18n from "i18n-js";
import CustomMaterialIcon from "../components/CustomMaterialIcon";
import ThemeManager from "../utils/ThemeManager";
type Props = {
navigation: Object,
};
/**
* Opens a link in the device's browser
* @param link The link to open
*/
function openWebLink(link) {
Linking.openURL(link).catch((err) => console.error('Error opening link', err));
}
/**
* Class defining an about screen. This screen shows the user information about the app and it's author.
*/
export default class ProxiwashAboutScreen extends React.Component<Props> {
render() {
const nav = this.props.navigation;
return (
<Container>
<CustomHeader navigation={nav} title={i18n.t('screens.proxiwash')} hasBackButton={true}/>
<Tabs>
<Tab
heading={
<TabHeading>
<CustomMaterialIcon
icon={'information'}
color={'#fff'}
fontSize={20}
/>
<Text>Information</Text>
</TabHeading>
}
key={1}
style={{backgroundColor: ThemeManager.getCurrentThemeVariables().containerBgColor}}>
<View style={{
width: '100%',
height: 100,
marginTop: 20,
marginBottom: 20,
justifyContent: 'center',
alignItems: 'center'
}}>
<Image
source={require('../assets/proxiwash-logo.png')}
style={{flex: 1, resizeMode: "contain"}}
resizeMode="contain"/>
</View>
<Content padder>
<Text>Ta laverie directement sur le campus, au pied du R3.</Text>
<Card>
<CardItem>
<Left>
<Body>
<H1>Seche linge</H1>
</Body>
</Left>
</CardItem>
<CardItem>
<Text>Coucou</Text>
</CardItem>
</Card>
<Card>
<CardItem>
<Left>
<Body>
<H1>Machine a laver</H1>
</Body>
</Left>
</CardItem>
<CardItem>
<Text>Coucou</Text>
</CardItem>
</Card>
</Content>
</Tab>
<Tab
heading={
<TabHeading>
<CustomMaterialIcon
icon={'cash'}
color={'#fff'}
fontSize={20}
/>
<Text>Payment</Text>
</TabHeading>
}
key={2}
style={{backgroundColor: ThemeManager.getCurrentThemeVariables().containerBgColor}}>
<Content padder>
<Card>
<CardItem>
<Left>
<Body>
<H1>Tarifs</H1>
</Body>
</Left>
</CardItem>
<CardItem>
<Text>Coucou</Text>
</CardItem>
</Card>
<Card>
<CardItem>
<Left>
<Body>
<H1>Moyens de Paiement</H1>
</Body>
</Left>
</CardItem>
<CardItem>
<Text>Coucou</Text>
</CardItem>
</Card>
</Content>
</Tab>
</Tabs>
</Container>
);
}
}

View file

@ -11,17 +11,18 @@ import NotificationsManager from "../utils/NotificationsManager";
import PlatformTouchable from "react-native-platform-touchable"; import PlatformTouchable from "react-native-platform-touchable";
import AsyncStorageManager from "../utils/AsyncStorageManager"; import AsyncStorageManager from "../utils/AsyncStorageManager";
import * as Expo from "expo"; import * as Expo from "expo";
import Touchable from "react-native-platform-touchable";
const DATA_URL = "https://srv-falcon.etud.insa-toulouse.fr/~vergnet/appli-amicale/washinsa/washinsa.json"; const DATA_URL = "https://srv-falcon.etud.insa-toulouse.fr/~vergnet/appli-amicale/washinsa/washinsa.json";
let reminderNotifTime = 5; let reminderNotifTime = 5;
const MACHINE_STATES = { const MACHINE_STATES = {
TERMINE: "0", "TERMINE": "0",
DISPONIBLE: "1", "DISPONIBLE": "1",
FONCTIONNE: "2", "EN COURS": "2",
HS: "3", "HS": "3",
ERREUR: "4" "ERREUR": "4"
}; };
let stateStrings = {}; let stateStrings = {};
@ -46,25 +47,25 @@ export default class ProxiwashScreen extends FetchedDataSectionList {
let colors = ThemeManager.getCurrentThemeVariables(); let colors = ThemeManager.getCurrentThemeVariables();
stateColors[MACHINE_STATES.TERMINE] = colors.proxiwashFinishedColor; stateColors[MACHINE_STATES.TERMINE] = colors.proxiwashFinishedColor;
stateColors[MACHINE_STATES.DISPONIBLE] = colors.proxiwashReadyColor; stateColors[MACHINE_STATES.DISPONIBLE] = colors.proxiwashReadyColor;
stateColors[MACHINE_STATES.FONCTIONNE] = colors.proxiwashRunningColor; stateColors[MACHINE_STATES["EN COURS"]] = colors.proxiwashRunningColor;
stateColors[MACHINE_STATES.HS] = colors.proxiwashBrokenColor; stateColors[MACHINE_STATES.HS] = colors.proxiwashBrokenColor;
stateColors[MACHINE_STATES.ERREUR] = colors.proxiwashErrorColor; stateColors[MACHINE_STATES.ERREUR] = colors.proxiwashErrorColor;
stateStrings[MACHINE_STATES.TERMINE] = i18n.t('proxiwashScreen.states.finished'); stateStrings[MACHINE_STATES.TERMINE] = i18n.t('proxiwashScreen.states.finished');
stateStrings[MACHINE_STATES.DISPONIBLE] = i18n.t('proxiwashScreen.states.ready'); stateStrings[MACHINE_STATES.DISPONIBLE] = i18n.t('proxiwashScreen.states.ready');
stateStrings[MACHINE_STATES.FONCTIONNE] = i18n.t('proxiwashScreen.states.running'); stateStrings[MACHINE_STATES["EN COURS"]] = i18n.t('proxiwashScreen.states.running');
stateStrings[MACHINE_STATES.HS] = i18n.t('proxiwashScreen.states.broken'); stateStrings[MACHINE_STATES.HS] = i18n.t('proxiwashScreen.states.broken');
stateStrings[MACHINE_STATES.ERREUR] = i18n.t('proxiwashScreen.states.error'); stateStrings[MACHINE_STATES.ERREUR] = i18n.t('proxiwashScreen.states.error');
modalStateStrings[MACHINE_STATES.TERMINE] = i18n.t('proxiwashScreen.modal.finished'); modalStateStrings[MACHINE_STATES.TERMINE] = i18n.t('proxiwashScreen.modal.finished');
modalStateStrings[MACHINE_STATES.DISPONIBLE] = i18n.t('proxiwashScreen.modal.ready'); modalStateStrings[MACHINE_STATES.DISPONIBLE] = i18n.t('proxiwashScreen.modal.ready');
modalStateStrings[MACHINE_STATES.FONCTIONNE] = i18n.t('proxiwashScreen.modal.running'); modalStateStrings[MACHINE_STATES["EN COURS"]] = i18n.t('proxiwashScreen.modal.running');
modalStateStrings[MACHINE_STATES.HS] = i18n.t('proxiwashScreen.modal.broken'); modalStateStrings[MACHINE_STATES.HS] = i18n.t('proxiwashScreen.modal.broken');
modalStateStrings[MACHINE_STATES.ERREUR] = i18n.t('proxiwashScreen.modal.error'); modalStateStrings[MACHINE_STATES.ERREUR] = i18n.t('proxiwashScreen.modal.error');
stateIcons[MACHINE_STATES.TERMINE] = 'check-circle'; stateIcons[MACHINE_STATES.TERMINE] = 'check-circle';
stateIcons[MACHINE_STATES.DISPONIBLE] = 'radiobox-blank'; stateIcons[MACHINE_STATES.DISPONIBLE] = 'radiobox-blank';
stateIcons[MACHINE_STATES.FONCTIONNE] = 'progress-check'; stateIcons[MACHINE_STATES["EN COURS"]] = 'progress-check';
stateIcons[MACHINE_STATES.HS] = 'alert-octagram-outline'; stateIcons[MACHINE_STATES.HS] = 'alert-octagram-outline';
stateIcons[MACHINE_STATES.ERREUR] = 'alert'; stateIcons[MACHINE_STATES.ERREUR] = 'alert';
@ -299,7 +300,7 @@ export default class ProxiwashScreen extends FetchedDataSectionList {
showAlert(title: string, item: Object, remainingTime: number) { showAlert(title: string, item: Object, remainingTime: number) {
let buttons = [{text: i18n.t("proxiwashScreen.modal.ok")}]; let buttons = [{text: i18n.t("proxiwashScreen.modal.ok")}];
let message = modalStateStrings[MACHINE_STATES[item.state]]; let message = modalStateStrings[MACHINE_STATES[item.state]];
if (MACHINE_STATES[item.state] === MACHINE_STATES.FONCTIONNE) { if (MACHINE_STATES[item.state] === MACHINE_STATES["EN COURS"]) {
buttons = [ buttons = [
{ {
text: this.isMachineWatched(item.number) ? text: this.isMachineWatched(item.number) ?
@ -325,6 +326,18 @@ export default class ProxiwashScreen extends FetchedDataSectionList {
); );
} }
getRightButton(): * {
return (
<Touchable
style={{padding: 6}}
onPress={() => this.props.navigation.navigate('ProxiwashAboutScreen')}>
<CustomMaterialIcon
color={Platform.OS === 'ios' ? ThemeManager.getCurrentThemeVariables().brandPrimary : "#fff"}
icon="information"/>
</Touchable>
);
}
/** /**
* Get list item to be rendered * Get list item to be rendered
* *
@ -334,12 +347,11 @@ export default class ProxiwashScreen extends FetchedDataSectionList {
* @returns {React.Node} * @returns {React.Node}
*/ */
getRenderItem(item: Object, section: Object, data: Object) { getRenderItem(item: Object, section: Object, data: Object) {
let isMachineRunning = MACHINE_STATES[item.state] === MACHINE_STATES.FONCTIONNE; let isMachineRunning = MACHINE_STATES[item.state] === MACHINE_STATES["EN COURS"];
let machineName = (section.title === i18n.t('proxiwashScreen.dryers') ? i18n.t('proxiwashScreen.dryer') : i18n.t('proxiwashScreen.washer')) + ' n°' + item.number; let machineName = (section.title === i18n.t('proxiwashScreen.dryers') ? i18n.t('proxiwashScreen.dryer') : i18n.t('proxiwashScreen.washer')) + ' n°' + item.number;
let remainingTime = 0; let remainingTime = 0;
if (isMachineRunning) if (isMachineRunning)
remainingTime = ProxiwashScreen.getRemainingTime(item.startTime, item.endTime, item.donePercent); remainingTime = ProxiwashScreen.getRemainingTime(item.startTime, item.endTime, item.donePercent);
return ( return (
<Card style={{ <Card style={{
flex: 0, flex: 0,