Commit 2023496b by JM Fantin

merge

2 parents c908b201 e04415e2
{
"devToolsPort": 19002,
"expoServerPort": 19000,
"packagerPort": 19001,
"packagerPid": 16236,
"expoServerNgrokUrl": null,
"packagerNgrokUrl": null,
"ngrokPid": null,
"webpackServerPort": null
}
\ No newline at end of file
{
"hostType": "lan",
"lanType": "ip",
"dev": true,
"minify": false,
"urlRandomness": "xz-g8k"
}
\ No newline at end of file
......@@ -14,7 +14,7 @@ import AndamentoVotos from './src/screens/AndamentoVotos';
import Votacao from './src/screens/Votacao';
import Votar from './src/screens/Votar';
import Login from './src/screens/Login';
import { app } from 'firebase';
import moment from 'moment';
const AppNavigator = createStackNavigator(
{
......@@ -60,4 +60,51 @@ export default class App extends Component {
<AppContainer />
)
}
}
\ No newline at end of file
}
moment.defineLocale('pt-br', {
months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),
monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),
weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),
weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),
weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),
weekdaysParseExact : true,
longDateFormat : {
LT : 'HH:mm',
LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D [de] MMMM [de] YYYY',
LLL : 'D [de] MMMM [de] YYYY [às] HH:mm',
LLLL : 'dddd, D [de] MMMM [de] YYYY [às] HH:mm'
},
calendar : {
sameDay: '[Hoje às] LT',
nextDay: '[Amanhã às] LT',
nextWeek: 'dddd [às] LT',
lastDay: '[Ontem às] LT',
lastWeek: function () {
return (this.day() === 0 || this.day() === 6) ?
'[Último] dddd [às] LT' : // Saturday + Sunday
'[Última] dddd [às] LT'; // Monday - Friday
},
sameElse: 'L'
},
relativeTime : {
future : 'em %s',
past : 'há %s',
s : 'poucos segundos',
ss : '%d segundos',
m : 'um minuto',
mm : '%d minutos',
h : 'uma hora',
hh : '%d horas',
d : 'um dia',
dd : '%d dias',
M : 'um mês',
MM : '%d meses',
y : 'um ano',
yy : '%d anos'
},
dayOfMonthOrdinalParse: /\d{1,2}º/,
ordinal : '%dº'
});
\ No newline at end of file
import React, { Component } from 'react';
import { View, Text, StyleSheet, TouchableOpacity,Image } from 'react-native';
import { View, Text, StyleSheet, TouchableOpacity } from 'react-native';
import { LinearGradient } from 'expo';
import PropTypes from 'prop-types';
import Icon from 'react-native-vector-icons/Ionicons';
import moment from 'moment';
import 'moment/src/locale/pt-br';
// import 'node_modules/moment/locale/pt-br';
......
......@@ -38,7 +38,7 @@ export default InputEmail;
InputEmail.propTypes = {
disabled: PropTypes.bool,
isRequired: PropTypes.bool,
label: PropTypes.string.isRequired,
label: PropTypes.string,
max: PropTypes.number,
multiline: PropTypes.bool,
onChangeText: PropTypes.func.isRequired,
......@@ -49,6 +49,7 @@ InputEmail.propTypes = {
InputEmail.defaultProps = {
disabled: false,
label: '',
isRequired: false,
max: undefined,
multiline: false,
......
......@@ -12,8 +12,7 @@ const InputSenha = ({
style,
value,
placeholder
}) => {
return(
}) =>
<View style={style}>
<TextField
baseColor={"#8400C5"}
......@@ -31,9 +30,6 @@ const InputSenha = ({
/>
</View>
);
};
export default InputSenha;
InputSenha.propTypes = {
......
import React from 'react';
import PropTypes from 'prop-types';
import { StyleSheet, Text, View, TouchableOpacity, Alert, Button, StyleSheet, StatusBar } from 'react-native';
import { Text, View, TouchableOpacity } from 'react-native';
export class LoginForm extends Component {
render(){
......
......@@ -4,44 +4,59 @@ import BotaoGrande from '../components/BotaoGrande';
import styles from '../styles/estilos';
import andamento from '../styles/andamento';
import StatusVotacao from '../components/StatusVotacao';
import moment from 'moment';
import getStatus from '../utils/getStatus';
export default class Andamento extends Component {
constructor(props) {
super(props);
this.state = {
titulo: ''
titulo: '',
sala: [],
encerrou: false
}
}
static navigationOptions = ({ navigation }) => ({
title: `Sala: ${navigation.state.params.titulo}`,
title: `Sala: ${navigation.state.params.sala.titulo}`,
});
componentWillMount() {
const titulo = this.props.navigation.getParam('titulo', null);
if(titulo)
this.setState({titulo});
}
handleSubmit = () => {
const sala = this.props.navigation.getParam('sala', null);
const encerrou = this.props.navigation.getParam('encerrou', null);
if(sala)
this.setState({sala});
if(encerrou)
this.setState({encerrou});
}
andamentoVotos = () => {
this.props.navigation.navigate('AndamentoVotos', {
'titulo': this.state.titulo
'titulo': this.state.sala.titulo,
'questoes': this.state.sala.questoes,
'votantes': this.state.sala.votantes
})
}
render() {
const { sala, encerrou } = this.state;
return (
<View style={styles.container}>
<Text style={andamento.descricao}>
Essa sala foi criada para decidirmos o layout do aplicativo pooler da Ages 2019/1, o E-Vote.
{sala.descricao}
</Text>
<View>
<StatusVotacao tipo = 'usuario' texto = "100% dos usuários já votaram"/>
<StatusVotacao tipo = 'hora' texto = "A votação encerra as 06h do dia 13/05"/>
<StatusVotacao tipo = 'hora' texto = {
encerrou ? 'Votação encerrou em: ' +
getStatus(
sala.dataFinal,
sala.dataInicial,
sala.horaFinal,
sala.horaInicial,
true
): null
}/>
</View>
<BotaoGrande texto="Andamento" onPress={() => this.andamentoVotos()}/>
</View>
......
import React, { Component } from 'react';
import { Text, View, FlatList, ScrollView } from 'react-native';
import BotaoAnterior from '../components/BotaoAnterior';
import BotaoProximo from '../components/BotaoProximo';
import QuestaoCard from '../components/QuestaoCard';
import styles from '../styles/estilos';
import andamento from '../styles/andamento';
......@@ -57,19 +55,30 @@ export default class Andamento extends Component {
handleSubmit=()=>{}
componentWillMount() {
const questoes = this.props.navigation.getParam('questoes', null);
const votantes = this.props.navigation.getParam('votantes', null);
if(questoes)
this.setState({questoes});
if(votantes)
this.setState({votantes, qtdVotantes: votantes.length});
}
renderItem = ({ item, index }) => {
const { qtdVotantes } = this.state;
const alfabeto = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'];
const alfabeto = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n'];
return (
<View>
<QuestaoCard key={item.id} text={`Q${index+1}. ${item.titulo}`}/>
<QuestaoCard key={item.pergunta} text={`Q${index+1}. ${item.pergunta}`}/>
{
item.alternativas.map((alternativa, index) => {
return (
<View key={index + 1} style={andamento.alternativas}>
<View key={index + 1 } style={andamento.alternativas}>
<IndiceAlternativa indice={`${alfabeto[index]})`} />
<BarraProgresso progresso={(alternativa.votos/qtdVotantes)*100} />
<Text>{(alternativa.votos/qtdVotantes)*100}%</Text>
{/*<Text>{alternativa}</Text>*/}
</View>
);
})
......
import React, { Component } from 'react';
import { View, ScrollView, Dimensions, Text, FlatList } from 'react-native';
import { View, ScrollView, Dimensions } from 'react-native';
import { db } from '../config';
let salasRef = db.ref('salas/');
import BotaoNovaSala from '../components/BotaoNovaSala';
import styles from '../styles/estilos';
import SemSalas from '../containers/SemSalas';
import CardSalaVotacao from '../components/CardSalaVotacao';
import Barra from '../components/Barra';
import BotaoAlternativa from '../components/BotaoAlternativa';
import moment from 'moment';
moment.defineLocale('pt-br', {
months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),
monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),
weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),
weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),
weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),
weekdaysParseExact : true,
longDateFormat : {
LT : 'HH:mm',
LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D [de] MMMM [de] YYYY',
LLL : 'D [de] MMMM [de] YYYY [às] HH:mm',
LLLL : 'dddd, D [de] MMMM [de] YYYY [às] HH:mm'
},
calendar : {
sameDay: '[Hoje às] LT',
nextDay: '[Amanhã às] LT',
nextWeek: 'dddd [às] LT',
lastDay: '[Ontem às] LT',
lastWeek: function () {
return (this.day() === 0 || this.day() === 6) ?
'[Último] dddd [às] LT' : // Saturday + Sunday
'[Última] dddd [às] LT'; // Monday - Friday
},
sameElse: 'L'
},
relativeTime : {
future : 'em %s',
past : 'há %s',
s : 'poucos segundos',
ss : '%d segundos',
m : 'um minuto',
mm : '%d minutos',
h : 'uma hora',
hh : '%d horas',
d : 'um dia',
dd : '%d dias',
M : 'um mês',
MM : '%d meses',
y : 'um ano',
yy : '%d anos'
},
dayOfMonthOrdinalParse: /\d{1,2}º/,
ordinal : '%dº'
});
class Historico extends Component {
constructor(props) {
super(props)
......@@ -70,9 +21,9 @@ class Historico extends Component {
handleVisualizar = (item) => {
if (item)
this.props.navigation.navigate('Votacao', { 'sala': item });
this.props.navigation.navigate('Andamento', { 'sala': item, 'encerrou': true });
else
this.props.navigation.navigate('Votacao', { 'sala': 'Não disponível' });
this.props.navigation.navigate('Andamento', { 'sala': 'Não disponível' });
}
componentWillMount() {
......@@ -89,26 +40,17 @@ class Historico extends Component {
}
getStatus = (dataFinal, dataInicial, horaFinal, horaInicial, informacaoExtra) => {
// fazer cálculo para retornar se está em andamento, encerrada ou se vai iniciar;
let firstMoment = moment(`${dataInicial} ${horaInicial}`, 'DD/MM/YYYY HH:mm');
let finalMoment = moment(`${dataFinal} ${horaFinal}`, 'DD/MM/YYYY HH:mm');
let finalMoment = moment(`${dataFinal} ${horaFinal}`, 'DD/MM/YYYY HH:mm');
let nowMoment = moment();
if(firstMoment.diff(nowMoment)>0){
return informacaoExtra? `Disponível ${firstMoment.fromNow()}` : 'agendada';
if(!(firstMoment.diff(nowMoment)>0) && !(finalMoment.diff(nowMoment)>=0)) {
return informacaoExtra? finalMoment.format('DD/MM/YYYY HH:mm') : 'encerrada';
}
if(finalMoment.diff(nowMoment)>=0){
return informacaoExtra? `Encerra ${finalMoment.fromNow()}` : 'andamento';
}
//console.log('enc');
return informacaoExtra? finalMoment.format('DD/MM/YYYY HH:mm') : 'encerrada';
}
render() {
const { salas, alternativas, selected } = this.state;
const { salas } = this.state;
const { height } = Dimensions.get('screen');
return (
<View style={[styles.container, { height: height }]}>
......@@ -119,7 +61,7 @@ class Historico extends Component {
salas.map((item, index) =>
(this.getStatus(item.dataFinal,
item.dataInicial, item.horaFinal,
item.horaInicial, false))=='encerrada'?
item.horaInicial, false)) == 'encerrada'?
<CardSalaVotacao
key={index}
onPress={() => this.handleVisualizar(item)}
......@@ -133,7 +75,6 @@ class Historico extends Component {
/>:
null
)
:
<SemSalas
texto="Você não participou de votações prévias."
......
......@@ -7,6 +7,7 @@ import styles from '../styles/estilos';
import SemSalas from '../containers/SemSalas';
import CardSalaVotacao from '../components/CardSalaVotacao';
import Barra from '../components/Barra';
import getStatus from '../utils/getStatus';
import BotaoAlternativa from '../components/BotaoAlternativa';
import moment from 'moment';
import AuthService from '../shared/AuthService';
......@@ -170,7 +171,7 @@ export default class Inicio extends Component {
}
render() {
const { salas, alternativas, selected } = this.state;
const { salas } = this.state;
const { height } = Dimensions.get('screen');
// let x = await this.getMinhasSalas(salas);
return (
......@@ -178,9 +179,29 @@ export default class Inicio extends Component {
<ScrollView style={{ maxHeight: height - 240, marginBottom: 5 }}>
<View>
{
salas.length > 0
? this.getDisponiveis(salas)
: <SemSalas texto={"No momento você não possui salas de votação disponíveis!"} />
salas.length > 0 ?
salas.map((item, index) =>
(getStatus(item.dataFinal,
item.dataInicial, item.horaFinal,
item.horaInicial)) != 'encerrada'?
<CardSalaVotacao
key={index}
onPress={() => this.handleVisualizar(item)}
status={getStatus(item.dataFinal,
item.dataInicial, item.horaFinal,
item.horaInicial)}
mensagem={getStatus(item.dataFinal,
item.dataInicial, item.horaFinal,
item.horaInicial, true)}
titulo={item.titulo}
/>:
null
)
:
<SemSalas
texto="No momento você não possui salas de votação disponíveis!"
/>
}
</View>
......
import React, { Component } from 'react';
import { View, Image, TextInput, TouchableOpacity,Text, StyleSheet, AsyncStorage } from 'react-native';
import { View, Image, TouchableOpacity,Text, StyleSheet, KeyboardAvoidingView, AsyncStorage } from 'react-native';
import { auth } from '../config';
import InputEmail from '../components/InputEmail';
import InputSenha from '../components/InputSenha';
......@@ -18,7 +18,7 @@ export default class Login extends Component {
}
handleLogin = () => {
const { email, senha } = this.state
const { email, senha } = this.state;
auth
.signInWithEmailAndPassword(email, senha)
.then((data) => {
......@@ -36,7 +36,7 @@ export default class Login extends Component {
}
static navigationOptions = {
title: 'Bem-vind@ ao eVote!',
title: 'Bem-vind@ ao eVote!'
};
static getUID = () => {
......@@ -45,11 +45,11 @@ export default class Login extends Component {
render(){
return(
<View style={styles.container}>
<KeyboardAvoidingView style={styles.container} behavior="padding" enabled number="2">
<View style={styles.loginContainer}>
<Image resizeMode="contain" style={styles.logo} source={require("../../assets/icon.png")} />
</View>
<View style={{flex: 1}}>
<View style={{flex: 3}}>
<InputEmail
autoCorrect={false}
keyboardType='email-address'
......@@ -67,19 +67,19 @@ export default class Login extends Component {
onChangeText={senha => this.setState({ senha })}
value={this.state.senha}/>
<Text style={custom.notice}>
{this.state.errorMessage}
</Text>
<Text style={custom.notice}>
{this.state.errorMessage}
</Text>
</View>
<View style={{flex: 2, backgroundColor: 'white'}}>
<View style={{flex: 3, backgroundColor: 'white'}}>
<TouchableOpacity style={styles.loginButtonContainer}
onPress={() => {this.setState({ errorMessage: 'Por favor, aguarde.' }), this.handleLogin()}}>
<Text style={styles.loginButtonText}>Entrar</Text>
</TouchableOpacity>
</View>
</View>
</KeyboardAvoidingView>
);
}
......
import React, { Component } from 'react';
import { View, Text, StyleSheet, ScrollView } from 'react-native';
import { View, Text, StyleSheet, ScrollView, KeyboardAvoidingView } from 'react-native';
import { DocumentPicker } from 'expo';
import { app } from '../config';
import BotaoAnterior from '../components/BotaoAnterior';
......@@ -9,29 +9,28 @@ import Progresso from '../components/Progresso';
import InputTexto from '../components/InputTexto';
import BotaoEnvioArquivo from '../components/BotaoEnvioArquivo';
import styles from '../styles/estilos';
import {KeyboardAvoidingView} from 'react-native';
export default class QuestaoContexto extends Component {
constructor(props) {
super(props);
this.state = {
sala: {},
questoes: [],
loading: false,
loaded: false,
url_pdf: null,
url: ''
export default class QuestaoContexto extends Component {
constructor(props) {
super(props);
this.state = {
sala: {},
questoes: [],
loading: false,
loaded: false,
url_pdf: null,
url: ''
}
}
}
componentWillMount() {
const sala = this.props.navigation.getParam('sala', null);
const questoes = this.props.navigation.getParam('questao', null);
const sala = this.props.navigation.getParam('sala', null);
const questoes = this.props.navigation.getParam('questao', null);
if(sala)
this.setState({sala});
if(questoes)
this.setState({questoes});
if (sala)
this.setState({ sala });
if (questoes)
this.setState({ questoes });
}
static navigationOptions = {
title: '',
......@@ -40,27 +39,26 @@ constructor(props) {
handleFile = async () => {
let result = await DocumentPicker.getDocumentAsync({});
if (!result.cancelled) {
this.upload(result.uri, result.name)
.then(() =>
{
if (result.uri)
this.setState({ url_pdf: result.uri, loading: false, loaded: true });
})
.catch((error) => {
alert('Falha no upload, verifique a conexão.\n erro:', error);
});
}
if (!result.cancelled) {
this.upload(result.uri, result.name)
.then(() => {
if (result.uri)
this.setState({ url_pdf: result.uri, loading: false, loaded: true });
})
.catch((error) => {
alert('Falha no upload, verifique a conexão.\n erro:', error);
});
}
}
urlToBlob = (uri) => {
//reference: https://github.com/expo/expo/issues/2402
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.onload = function() {
xhr.onload = function () {
resolve(xhr.response); // when BlobModule finishes reading, resolve with the blob
};
xhr.onerror = function() {
xhr.onerror = function () {
reject(new TypeError('Network request failed')); // error occurred, rejecting
};
xhr.responseType = 'blob'; // use BlobModule's UriHandler
......@@ -70,10 +68,10 @@ constructor(props) {
}
upload = async (uri, name) => {
if(uri) {
this.setState({loading: true, loaded: false});
if (uri) {
this.setState({ loading: true, loaded: false });
const blob = await this.urlToBlob(uri);
const ref = app.storage().ref().child('questao/pdfs/'+name);
const ref = app.storage().ref().child('questao/pdfs/' + name);
const snap = await ref.put(blob);
const remoteUri = await snap.ref.getDownloadURL();
......@@ -84,23 +82,23 @@ constructor(props) {
}
handleURL = (value) => {
this.setState({url: value});
this.setState({ url: value });
}
handleSubmit = () => {
const { url_pdf, url, sala } = this.state;
let { questoes } = this.state;
let questaoAtualizada;
if(url_pdf)
questaoAtualizada = Object.assign(questoes[questoes.length-2], {'url_pdf': url_pdf});
if(url)
questaoAtualizada = Object.assign(questoes[questoes.length-2], {'url': url});
if(questaoAtualizada) {
questoes[questoes.length-2] = questaoAtualizada;
let questaoAtualizada;
if (url_pdf)
questaoAtualizada = Object.assign(questoes[questoes.length - 2], { 'url_pdf': url_pdf });
if (url)
questaoAtualizada = Object.assign(questoes[questoes.length - 2], { 'url': url });
if (questaoAtualizada) {
questoes[questoes.length - 2] = questaoAtualizada;
}
this.setState({questoes: questoes});
this.setState({ questoes: questoes });
this.props.navigation.navigate('QuestaoSalva', {
sala: sala,
questoes: questoes
......@@ -110,68 +108,69 @@ constructor(props) {
render() {
const { loading, loaded, url, questoes } = this.state;
return (
<KeyboardAvoidingView style={styles.container} behavior="padding" enabled>
<KeyboardAvoidingView style={styles.containerKeyboard}
behavior="padding" enabled keyboardVerticalOffset={120}>
<ScrollView>
<View style={styles.container}>
<View styles={styles.innerContainer}>
<Text style={[contextStyles.titulo, contextStyles.titulo1]}>Dica:</Text>
<Text style={[contextStyles.titulo, contextStyles.titulo2]}>É importante contextualizar a sua pergunta para que os votantes entendam:</Text>
<View style={contextStyles.container}>
<View>
<Text style={[contextStyles.titulo3, {marginBottom: 15}]}>
Vamos adicionar um arquivo (Exemplo: PDF ou imagem) contextualizando a
<Text style={{color: '#8400C5'}}> questão {questoes.length-1}</Text>?
<View style={styles.container}>
<View styles={styles.innerContainer}>
<Text style={[contextStyles.titulo, contextStyles.titulo1]}>Dica:</Text>
<Text style={[contextStyles.titulo, contextStyles.titulo2]}>É importante contextualizar a sua pergunta para que os votantes entendam:</Text>
<View style={contextStyles.container}>
<View>
<Text style={[contextStyles.titulo3, { marginBottom: 15 }]}>
Vamos adicionar um arquivo (Exemplo: PDF ou imagem) contextualizando a
<Text style={{ color: '#8400C5' }}> questão {questoes.length - 1}</Text>?
</Text>
</View>
</View>
<View>
<BotaoEnvioArquivo
loaded={!!loaded}
loading={!!loading}
onPress={() => this.handleFile()}
texto="Anexar Arquivo"
/>
</View>
<View>
<Text style={[contextStyles.titulo3, contextStyles.titulo4]}>
Vamos adicionar um URL externo contextualizando a
<Text style={{ color: '#8400C5' }}> questão {questoes.length - 1}</Text>?
</Text>
</View>
<View>
<BotaoEnvioArquivo
loaded={!!loaded}
loading={!!loading}
onPress={() => this.handleFile()}
texto="Anexar Arquivo"
<InputTexto
label="URL:"
onChangeText={value => this.handleURL(value)}
placeholder='https://woopsicredi.com/'
value={url}
/>
</View>
</View>
<View>
<Text style={[contextStyles.titulo3, contextStyles.titulo4]}>
Vamos adicionar um URL externo contextualizando a
<Text style={{color: '#8400C5'}}> questão {questoes.length-1}</Text>?
</Text>
</View>
<View style={styles.flowButtonsContainer}>
<InputTexto
label="URL:"
onChangeText={value => this.handleURL(value)}
placeholder='https://woopsicredi.com/'
value={url}
<BotaoAnterior
endereco='Questao'
disabled={loading}
navigation={this.props.navigation}
style={styles.icon}
/>
<Progresso quantidade={4} total={5} />
<BotaoProximo
endereco='QuestaoSalva'
disabled={loading}
navigation={this.props.navigation}
style={styles.icon}
onPress={() => this.handleSubmit()}
/>
</View>
</View>
<View style={styles.flowButtonsContainer}>
<BotaoAnterior
endereco='Questao'
disabled={loading}
navigation={this.props.navigation}
style={styles.icon}
/>
<Progresso quantidade={4} total={5}/>
<BotaoProximo
endereco='QuestaoSalva'
disabled={loading}
navigation={this.props.navigation}
style={styles.icon}
onPress={() => this.handleSubmit()}
/>
</View>
</View>
</View>
</ScrollView>
</ScrollView>
</KeyboardAvoidingView>
);
}
}
......
......@@ -8,6 +8,11 @@ export default StyleSheet.create({
paddingLeft: 15,
paddingRight: 15
},
containerKeyboard: {
flex: 1,
flexDirection: 'column',
justifyContent: 'center',
},
flowButtonsContainer: {
alignItems: 'center',
flexDirection: 'row',
......@@ -38,7 +43,7 @@ export default StyleSheet.create({
},
loginContainer:{
alignItems: 'center',
flexGrow: 1,
flex: 2,
justifyContent: 'center'
},
logo: {
......
import moment from 'moment';
export default function getStatus (dataFinal, dataInicial, horaFinal, horaInicial, informacaoExtra) {
let firstMoment = moment(`${dataInicial} ${horaInicial}`, 'DD/MM/YYYY HH:mm');
let finalMoment = moment(`${dataFinal} ${horaFinal}`, 'DD/MM/YYYY HH:mm');
let nowMoment = moment();
if(firstMoment.diff(nowMoment)>0)
return informacaoExtra? `Disponível ${firstMoment.fromNow()}` : 'agendada';
else if(finalMoment.diff(nowMoment)>=0)
return informacaoExtra? `Encerra ${finalMoment.fromNow()}` : 'andamento';
else
return informacaoExtra? finalMoment.format('DD/MM/YYYY HH:mm') : 'encerrada';
}
\ No newline at end of file
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!