Compare commits

..

2 commits

Author SHA1 Message Date
5f9132a670 Improved intro slides 2020-07-14 23:44:03 +02:00
ca03b70603 Fixed invalid icons 2020-07-14 22:43:43 +02:00
6 changed files with 139 additions and 66 deletions

View file

@ -380,7 +380,7 @@
"text": "Regarde ton emploi du temps et celui de tes amis avec un Planex adapté mobile !"
},
"slideEvents": {
"title": "Plein d'infos",
"title": "Les Events",
"text": "Sois au courant de tout ce qui se passe sur le campus, de la vente de crêpes jusqu'aux concerts Enfoiros !"
},
"slideServices": {
@ -388,7 +388,7 @@
"text": "Tu peux faire bien plus avec CAMPUS, mais je n'ai pas le temps de tout dire ici. Balade toi sur l'appli pour tout découvrir !"
},
"slideDone": {
"title": "Réalisé par un étudiant",
"title": "Ton avis compte !",
"text": "Cette appli à été réalisée par un seul étudiant (avec un peu d'aide par-ci par-là), donc tes retours sont les bienvenus !"
},
"updateSlide0": {

View file

@ -64,7 +64,7 @@ class MascotPopup extends React.Component<Props, State> {
shouldComponentUpdate(nextProps: Props): boolean {
if (nextProps.visible) {
this.state.shouldShowDialog = true;
}else if (nextProps.visible !== this.props.visible) {
} else if (nextProps.visible !== this.props.visible) {
setTimeout(this.onAnimationEnd, 300);
}
return true;
@ -144,7 +144,7 @@ class MascotPopup extends React.Component<Props, State> {
</ScrollView>
</Card.Content>
<Card.Actions>
<Card.Actions style={{marginTop: 10, marginBottom: 10}}>
{this.getButtons()}
</Card.Actions>
</Card>
@ -239,11 +239,17 @@ class MascotPopup extends React.Component<Props, State> {
marginTop: "auto",
marginBottom: "auto",
}}>
{this.getMascot()}
{this.getSpeechBubble()}
<View style={{
marginTop: -80,
}}>
{this.getMascot()}
{this.getSpeechBubble()}
</View>
</Portal>
);
</View>
</Portal>
)
;
} else
return null;

View file

@ -91,7 +91,7 @@ export default class CustomIntroSlider extends React.Component<Props, State> {
key: '4',
title: i18n.t('intro.slideDone.title'),
text: i18n.t('intro.slideDone.text'),
view: () => this.getIconView("account-heart",),
view: () => this.getEndView(),
mascotStyle: MASCOT_STYLE.COOL,
colors: ['#9c165b', '#3e042b'],
},
@ -146,7 +146,7 @@ export default class CustomIntroSlider extends React.Component<Props, State> {
</View>
<Animatable.View
animation={"fadeIn"}>
{index !== 0
{index !== 0 && index !== this.introSlides.length -1
? <Animatable.View
animation={"pulse"}
iterationCount={"infinite"}
@ -154,9 +154,10 @@ export default class CustomIntroSlider extends React.Component<Props, State> {
style={{
marginLeft: 30,
marginBottom: 0,
width: 80
width: 100,
marginTop: -30,
}}>
<Mascot emotion={item.mascotStyle} size={80}/>
<Mascot emotion={item.mascotStyle} size={100}/>
</Animatable.View> : null}
<View style={{
@ -200,6 +201,30 @@ export default class CustomIntroSlider extends React.Component<Props, State> {
);
}
getEndView = () => {
return (
<View style={{flex: 1}}>
<View
style={styles.center}>
<Mascot
size={250}
emotion={MASCOT_STYLE.COOL}
animated={true}
entryAnimation={{
animation: "slideInDown",
duration: 2000,
}}
loopAnimation={{
animation: "pulse",
duration: 2000,
iterationCount: "infinite"
}}
/>
</View>
</View>
);
}
getWelcomeView = () => {
return (
<View style={{flex: 1}}>
@ -214,6 +239,43 @@ export default class CustomIntroSlider extends React.Component<Props, State> {
duration: 2000,
}}
/>
<Animatable.Text
useNativeDriver={true}
animation={"fadeInUp"}
duration={500}
style={{
color: "#fff",
textAlign: "center",
fontSize: 25,
}}>
PABLO
</Animatable.Text>
<Animatable.View
useNativeDriver={true}
animation={"fadeInUp"}
duration={500}
delay={200}
style={{
position: "absolute",
top: 210,
left: 160,
width: 50,
height: 50,
}}>
<MaterialCommunityIcons
style={{
marginLeft: "auto",
marginRight: "auto",
marginTop: "auto",
marginBottom: "auto",
transform: [{rotateZ: "70deg"}],
}}
name={"undo"}
color={'#fff'}
size={40}/>
</Animatable.View>
</View>
</View>
)

View file

@ -3,6 +3,7 @@
import * as React from 'react';
import {View} from "react-native";
import {TouchableRipple, withTheme} from 'react-native-paper';
import type {MaterialCommunityIconsGlyphs} from "react-native-vector-icons/MaterialCommunityIcons";
import MaterialCommunityIcons from "react-native-vector-icons/MaterialCommunityIcons";
import * as Animatable from "react-native-animatable";
@ -10,15 +11,13 @@ type Props = {
focused: boolean,
color: string,
label: string,
icon: string,
icon: MaterialCommunityIconsGlyphs,
onPress: Function,
onLongPress: Function,
theme: Object,
extraData: any,
}
const AnimatedIcon = Animatable.createAnimatableComponent(MaterialCommunityIcons);
/**
* Abstraction layer for Agenda component, using custom configuration
@ -83,7 +82,7 @@ class TabIcon extends React.Component<Props> {
animation={props.focused ? "focusIn" : "focusOut"}
useNativeDriver
>
<AnimatedIcon
<MaterialCommunityIcons
name={props.icon}
color={props.color}
size={26}
@ -112,4 +111,4 @@ class TabIcon extends React.Component<Props> {
}
}
export default withTheme(TabIcon);
export default withTheme(TabIcon);

View file

@ -7,6 +7,7 @@ import i18n from 'i18n-js';
import {Collapsible} from "react-navigation-collapsible";
import CustomTabBar from "../../components/Tabbar/CustomTabBar";
import {withCollapsible} from "../../utils/withCollapsible";
import type {MaterialCommunityIconsGlyphs} from "react-native-vector-icons/MaterialCommunityIcons";
type Props = {
collapsibleStack: Collapsible
@ -15,7 +16,7 @@ type Props = {
type DatasetItem = {
name: string,
email: string,
icon: string,
icon: MaterialCommunityIconsGlyphs,
}
/**
@ -24,53 +25,58 @@ type DatasetItem = {
class AmicaleContactScreen extends React.Component<Props> {
// Dataset containing information about contacts
CONTACT_DATASET = [
{
name: i18n.t("screens.amicaleAbout.roles.interSchools"),
email: "inter.ecoles@amicale-insat.fr",
icon: "share-variant"
},
{
name: i18n.t("screens.amicaleAbout.roles.culture"),
email: "culture@amicale-insat.fr",
icon: "book"
},
{
name: i18n.t("screens.amicaleAbout.roles.animation"),
email: "animation@amicale-insat.fr",
icon: "emoticon"
},
{
name: i18n.t("screens.amicaleAbout.roles.clubs"),
email: "clubs@amicale-insat.fr",
icon: "account-group"
},
{
name: i18n.t("screens.amicaleAbout.roles.event"),
email: "evenements@amicale-insat.fr",
icon: "calendar-range"
},
{
name: i18n.t("screens.amicaleAbout.roles.tech"),
email: "technique@amicale-insat.fr",
icon: "settings"
},
{
name: i18n.t("screens.amicaleAbout.roles.communication"),
email: "amicale@amicale-insat.fr",
icon: "comment-account"
},
{
name: i18n.t("screens.amicaleAbout.roles.intraSchools"),
email: "intra.ecoles@amicale-insat.fr",
icon: "school"
},
{
name: i18n.t("screens.amicaleAbout.roles.publicRelations"),
email: "rp@amicale-insat.fr",
icon: "account-tie"
},
];
CONTACT_DATASET: Array<DatasetItem>;
constructor(props: Props) {
super(props);
this.CONTACT_DATASET = [
{
name: i18n.t("screens.amicaleAbout.roles.interSchools"),
email: "inter.ecoles@amicale-insat.fr",
icon: "share-variant"
},
{
name: i18n.t("screens.amicaleAbout.roles.culture"),
email: "culture@amicale-insat.fr",
icon: "book"
},
{
name: i18n.t("screens.amicaleAbout.roles.animation"),
email: "animation@amicale-insat.fr",
icon: "emoticon"
},
{
name: i18n.t("screens.amicaleAbout.roles.clubs"),
email: "clubs@amicale-insat.fr",
icon: "account-group"
},
{
name: i18n.t("screens.amicaleAbout.roles.event"),
email: "evenements@amicale-insat.fr",
icon: "calendar-range"
},
{
name: i18n.t("screens.amicaleAbout.roles.tech"),
email: "technique@amicale-insat.fr",
icon: "cog"
},
{
name: i18n.t("screens.amicaleAbout.roles.communication"),
email: "amicale@amicale-insat.fr",
icon: "comment-account"
},
{
name: i18n.t("screens.amicaleAbout.roles.intraSchools"),
email: "intra.ecoles@amicale-insat.fr",
icon: "school"
},
{
name: i18n.t("screens.amicaleAbout.roles.publicRelations"),
email: "rp@amicale-insat.fr",
icon: "account-tie"
},
];
}
keyExtractor = (item: DatasetItem) => item.email;

View file

@ -60,7 +60,7 @@ export default class ProxiwashAboutScreen extends React.Component<Props> {
<Card style={{margin: 5}}>
<Card.Title
title={i18n.t('screens.proxiwash.tariffs')}
left={props => <List.Icon {...props} icon={'coins'}/>}
left={props => <List.Icon {...props} icon={'circle-multiple'}/>}
/>
<Card.Content>
<Paragraph>{i18n.t('screens.proxiwash.washersTariff')}</Paragraph>