Update ui proxiwash settings go to general Settings

Remove proxiwash settings screen
move setings in setings screen
This commit is contained in:
docjyJ 2020-09-10 18:05:06 +02:00
parent 02e30f87cf
commit 5b6176a361
5 changed files with 127 additions and 159 deletions

View file

@ -29,7 +29,6 @@ import {
getWebsiteStack, getWebsiteStack,
} from '../utils/CollapsibleUtils'; } from '../utils/CollapsibleUtils';
import Mascot, {MASCOT_STYLE} from '../components/Mascot/Mascot'; import Mascot, {MASCOT_STYLE} from '../components/Mascot/Mascot';
import ProxiwashSettingsScreen from '../screens/Proxiwash/ProxiwashSettingsScreen';
const modalTransition = const modalTransition =
Platform.OS === 'ios' Platform.OS === 'ios'
@ -92,12 +91,6 @@ function ProxiwashStackComponent(): React.Node {
ProxiwashAboutScreen, ProxiwashAboutScreen,
i18n.t('screens.proxiwash.title'), i18n.t('screens.proxiwash.title'),
)} )}
{createScreenCollapsibleStack(
'proxiwash-settings',
ProxiwashStack,
ProxiwashSettingsScreen,
i18n.t('screens.proxiwash.title'),
)}
</ProxiwashStack.Navigator> </ProxiwashStack.Navigator>
); );
} }

View file

@ -3,7 +3,14 @@
import * as React from 'react'; import * as React from 'react';
import {View} from 'react-native'; import {View} from 'react-native';
import i18n from 'i18n-js'; import i18n from 'i18n-js';
import {Card, List, Switch, ToggleButton, withTheme} from 'react-native-paper'; import {
RadioButton,
Card,
List,
Switch,
ToggleButton,
withTheme,
} from 'react-native-paper';
import {Appearance} from 'react-native-appearance'; import {Appearance} from 'react-native-appearance';
import {StackNavigationProp} from '@react-navigation/stack'; import {StackNavigationProp} from '@react-navigation/stack';
import type {CustomThemeType} from '../../../managers/ThemeManager'; import type {CustomThemeType} from '../../../managers/ThemeManager';
@ -12,6 +19,7 @@ import AsyncStorageManager from '../../../managers/AsyncStorageManager';
import CustomSlider from '../../../components/Overrides/CustomSlider'; import CustomSlider from '../../../components/Overrides/CustomSlider';
import CollapsibleScrollView from '../../../components/Collapsible/CollapsibleScrollView'; import CollapsibleScrollView from '../../../components/Collapsible/CollapsibleScrollView';
import type {ListIconPropsType} from '../../../constants/PaperStyles'; import type {ListIconPropsType} from '../../../constants/PaperStyles';
import {PROXIWASH_DATA} from '../../Proxiwash/ProxiwashAboutScreen';
type PropsType = { type PropsType = {
navigation: StackNavigationProp, navigation: StackNavigationProp,
@ -22,6 +30,7 @@ type StateType = {
nightMode: boolean, nightMode: boolean,
nightModeFollowSystem: boolean, nightModeFollowSystem: boolean,
startScreenPickerSelected: string, startScreenPickerSelected: string,
selectedWash: string,
isDebugUnlocked: boolean, isDebugUnlocked: boolean,
}; };
@ -52,6 +61,9 @@ class SettingsScreen extends React.Component<PropsType, StateType> {
startScreenPickerSelected: AsyncStorageManager.getString( startScreenPickerSelected: AsyncStorageManager.getString(
AsyncStorageManager.PREFERENCES.defaultStartScreen.key, AsyncStorageManager.PREFERENCES.defaultStartScreen.key,
), ),
selectedWash: AsyncStorageManager.getString(
AsyncStorageManager.PREFERENCES.selectedWash.key,
),
isDebugUnlocked: AsyncStorageManager.getBool( isDebugUnlocked: AsyncStorageManager.getBool(
AsyncStorageManager.PREFERENCES.debugUnlocked.key, AsyncStorageManager.PREFERENCES.debugUnlocked.key,
), ),
@ -106,6 +118,29 @@ class SettingsScreen extends React.Component<PropsType, StateType> {
); );
} }
/**
* Returns a radio picker allowing the user to select the proxiwash
*
* @returns {React.Node}
*/
getProxiwashChangePicker(): React.Node {
const {selectedWash} = this.state;
return (
<RadioButton.Group
onValueChange={this.onSelectWashValueChange}
value={selectedWash}>
<RadioButton.Item
label={PROXIWASH_DATA.washinsa.title}
value={PROXIWASH_DATA.washinsa.id}
/>
<RadioButton.Item
label={PROXIWASH_DATA.tripodeB.title}
value={PROXIWASH_DATA.tripodeB.id}
/>
</RadioButton.Group>
);
}
/** /**
* Returns a picker allowing the user to select the start screen * Returns a picker allowing the user to select the start screen
* *
@ -212,6 +247,21 @@ class SettingsScreen extends React.Component<PropsType, StateType> {
); );
} }
/**
* Saves the value for the proxiwash selected wash
*
* @param value The value to store
*/
onSelectWashValueChange = (value: string) => {
if (value != null) {
this.setState({selectedWash: value});
AsyncStorageManager.set(
AsyncStorageManager.PREFERENCES.selectedWash.key,
value,
);
}
};
/** /**
* Unlocks debug mode and saves its state to user preferences * Unlocks debug mode and saves its state to user preferences
*/ */
@ -288,6 +338,20 @@ class SettingsScreen extends React.Component<PropsType, StateType> {
<View style={{marginLeft: 30}}> <View style={{marginLeft: 30}}>
{this.getProxiwashNotifPicker()} {this.getProxiwashNotifPicker()}
</View> </View>
<List.Item
title="Test"
description="Test"
left={(props: ListIconPropsType): React.Node => (
<List.Icon
color={props.color}
style={props.style}
icon="washing-machine"
/>
)}
/>
<View style={{marginLeft: 30}}>
{this.getProxiwashChangePicker()}
</View>
</List.Section> </List.Section>
</Card> </Card>
<Card style={{margin: 5}}> <Card style={{margin: 5}}>

View file

@ -9,11 +9,67 @@ import type {CardTitleIconPropsType} from '../../constants/PaperStyles';
const LOGO = 'https://etud.insa-toulouse.fr/~amicale_app/images/Proxiwash.png'; const LOGO = 'https://etud.insa-toulouse.fr/~amicale_app/images/Proxiwash.png';
export type LaverieType = {
id: string,
title: string,
subtitle: string,
description: string,
tarif: string,
paymentMethods: string,
icon: string,
url: string,
};
export const PROXIWASH_DATA = {
washinsa: {
id: 'washinsa',
title: i18n.t('screens.proxiwash.washinsa.title'),
subtitle: i18n.t('screens.proxiwash.washinsa.subtitle'),
description: i18n.t('screens.proxiwash.washinsa.description'),
tarif: i18n.t('screens.proxiwash.washinsa.tariff'),
paymentMethods: i18n.t('screens.proxiwash.washinsa.paymentMethods'),
icon: 'school-outline',
url:
'https://etud.insa-toulouse.fr/~amicale_app/v2/washinsa/washinsa_data.json',
},
tripodeB: {
id: 'tripodeB',
title: i18n.t('screens.proxiwash.tripodeB.title'),
subtitle: i18n.t('screens.proxiwash.tripodeB.subtitle'),
description: i18n.t('screens.proxiwash.tripodeB.description'),
tarif: i18n.t('screens.proxiwash.tripodeB.tariff'),
paymentMethods: i18n.t('screens.proxiwash.tripodeB.paymentMethods'),
icon: 'domain',
url:
'https://etud.insa-toulouse.fr/~amicale_app/v2/washinsa/tripode_b_data.json',
},
};
/** /**
* Class defining the proxiwash about screen. * Class defining the proxiwash about screen.
*/ */
// eslint-disable-next-line react/prefer-stateless-function
export default class ProxiwashAboutScreen extends React.Component<null> { export default class ProxiwashAboutScreen extends React.Component<null> {
static getCardItem(item: LaverieType): React.Node {
return (
<Card style={{margin: 5}}>
<Card.Title
title={item.title}
subtitle={item.subtitle}
left={(iconProps: CardTitleIconPropsType): React.Node => (
<Avatar.Icon size={iconProps.size} icon={item.icon} />
)}
/>
<Card.Content>
<Paragraph>{item.description}</Paragraph>
<Title>{i18n.t('screens.proxiwash.tariffs')}</Title>
<Paragraph>{item.tarif}</Paragraph>
<Title>{i18n.t('screens.proxiwash.paymentMethods')}</Title>
<Paragraph>{item.paymentMethods}</Paragraph>
</Card.Content>
</Card>
);
}
render(): React.Node { render(): React.Node {
return ( return (
<CollapsibleScrollView style={{padding: 5}} hasTab> <CollapsibleScrollView style={{padding: 5}} hasTab>
@ -32,6 +88,10 @@ export default class ProxiwashAboutScreen extends React.Component<null> {
/> />
</View> </View>
{ProxiwashAboutScreen.getCardItem(PROXIWASH_DATA.washinsa)}
{ProxiwashAboutScreen.getCardItem(PROXIWASH_DATA.tripodeB)}
<Card style={{margin: 5}}> <Card style={{margin: 5}}>
<Card.Title <Card.Title
title={i18n.t('screens.proxiwash.dryer')} title={i18n.t('screens.proxiwash.dryer')}

View file

@ -27,7 +27,7 @@ import {MASCOT_STYLE} from '../../components/Mascot/Mascot';
import MascotPopup from '../../components/Mascot/MascotPopup'; import MascotPopup from '../../components/Mascot/MascotPopup';
import type {SectionListDataType} from '../../components/Screens/WebSectionList'; import type {SectionListDataType} from '../../components/Screens/WebSectionList';
import type {ListIconPropsType} from '../../constants/PaperStyles'; import type {ListIconPropsType} from '../../constants/PaperStyles';
import {PROXIWASH_DATA} from './ProxiwashSettingsScreen'; import {PROXIWASH_DATA} from './ProxiwashAboutScreen';
const modalStateStrings = {}; const modalStateStrings = {};
@ -128,11 +128,6 @@ class ProxiwashScreen extends React.Component<PropsType, StateType> {
iconName="information" iconName="information"
onPress={this.onAboutPress} onPress={this.onAboutPress}
/> />
<Item
title="settings"
iconName="settings"
onPress={this.onSettingsPress}
/>
</MaterialHeaderButtons> </MaterialHeaderButtons>
), ),
}); });
@ -147,15 +142,6 @@ class ProxiwashScreen extends React.Component<PropsType, StateType> {
navigation.navigate('proxiwash-about'); navigation.navigate('proxiwash-about');
}; };
/**
* Callback used when pressing the settings button.
* This will open the ProxiwashSettingsScreen.
*/
onSettingsPress = () => {
const {navigation} = this.props;
navigation.navigate('proxiwash-settings');
};
/** /**
* Callback used when the user clicks on enable notifications for a machine * Callback used when the user clicks on enable notifications for a machine
* *

View file

@ -1,135 +0,0 @@
// @flow
import * as React from 'react';
import {
Title,
Button,
Card,
Avatar,
withTheme,
Paragraph,
} from 'react-native-paper';
import i18n from 'i18n-js';
import CollapsibleScrollView from '../../components/Collapsible/CollapsibleScrollView';
import type {CardTitleIconPropsType} from '../../constants/PaperStyles';
import AsyncStorageManager from '../../managers/AsyncStorageManager';
import ThemeManager from '../../managers/ThemeManager';
import type {CustomThemeType} from '../../managers/ThemeManager';
export type LaverieType = {
id: string,
title: string,
subtitle: string,
description: string,
tarif: string,
paymentMethods: string,
icon: string,
url: string,
};
export const PROXIWASH_DATA = {
washinsa: {
id: 'washinsa',
title: i18n.t('screens.proxiwash.washinsa.title'),
subtitle: i18n.t('screens.proxiwash.washinsa.subtitle'),
description: i18n.t('screens.proxiwash.washinsa.description'),
tarif: i18n.t('screens.proxiwash.washinsa.tariff'),
paymentMethods: i18n.t('screens.proxiwash.washinsa.paymentMethods'),
icon: 'school-outline',
url:
'https://etud.insa-toulouse.fr/~amicale_app/v2/washinsa/washinsa_data.json',
},
tripodeB: {
id: 'tripodeB',
title: i18n.t('screens.proxiwash.tripodeB.title'),
subtitle: i18n.t('screens.proxiwash.tripodeB.subtitle'),
description: i18n.t('screens.proxiwash.tripodeB.description'),
tarif: i18n.t('screens.proxiwash.tripodeB.tariff'),
paymentMethods: i18n.t('screens.proxiwash.tripodeB.paymentMethods'),
icon: 'domain',
url:
'https://etud.insa-toulouse.fr/~amicale_app/v2/washinsa/tripode_b_data.json',
},
};
type StateType = {
selectedWash: string,
currentTheme: CustomThemeType,
};
/**
* Class defining the proxiwash settings screen.
*/
class ProxiwashSettingsScreen extends React.Component<null, StateType> {
constructor() {
super();
this.state = {
selectedWash: AsyncStorageManager.getString(
AsyncStorageManager.PREFERENCES.selectedWash.key,
),
};
}
/**
* Saves the value for the proxiwash selected wash
*
* @param value The value to store
*/
onSelectWashValueChange = (value: string) => {
if (value != null) {
this.setState({selectedWash: value});
AsyncStorageManager.set(
AsyncStorageManager.PREFERENCES.selectedWash.key,
value,
);
}
};
getCardItem(item: LaverieType): React.Node {
const {selectedWash} = this.state;
const onSelectWashValueChange = (): void =>
this.onSelectWashValueChange(item.id);
let cardStyle = {
margin: 5,
};
if (selectedWash === item.id) {
cardStyle = {
margin: 5,
backgroundColor: ThemeManager.getCurrentTheme().colors
.proxiwashUnknownColor,
};
}
return (
<Card style={cardStyle}>
<Card.Title
title={item.title}
subtitle={item.subtitle}
left={(iconProps: CardTitleIconPropsType): React.Node => (
<Avatar.Icon size={iconProps.size} icon={item.icon} />
)}
/>
<Card.Content>
<Paragraph>{item.description}</Paragraph>
<Title>{i18n.t('screens.proxiwash.tariffs')}</Title>
<Paragraph>{item.tarif}</Paragraph>
<Title>{i18n.t('screens.proxiwash.paymentMethods')}</Title>
<Paragraph>{item.paymentMethods}</Paragraph>
</Card.Content>
<Card.Actions>
<Button onPress={onSelectWashValueChange}>Select</Button>
</Card.Actions>
</Card>
);
}
render(): React.Node {
return (
<CollapsibleScrollView style={{padding: 5}} hasTab>
{this.getCardItem(PROXIWASH_DATA.washinsa)}
{this.getCardItem(PROXIWASH_DATA.tripodeB)}
</CollapsibleScrollView>
);
}
}
export default withTheme(ProxiwashSettingsScreen);