forked from vergnet/application-amicale
Added proxiwash info screen + fixed crash when machine running
This commit is contained in:
parent
c6e27c5d47
commit
1aa4a59fa0
5 changed files with 164 additions and 14 deletions
|
@ -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)}
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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",
|
||||||
|
|
132
screens/ProxiwashAboutScreen.js
Normal file
132
screens/ProxiwashAboutScreen.js
Normal 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>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -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,
|
||||||
|
|
Loading…
Reference in a new issue