Commit 32adb93c by Bianca Camargo Machado

Merge branch 'visualizar' into 'dev-sprint4'

[Votar] Ajustes / [Visualiza]

See merge request !48
2 parents 3e8054fe 3d283c2c
{ {
"expoServerPort": null, "devToolsPort": 19002,
"expoServerNgrokUrl": null, "expoServerPort": 19000,
"packagerNgrokUrl": null, "packagerPort": 19001,
"ngrokPid": null, "packagerPid": 9125,
"packagerPort": null, "expoServerNgrokUrl": "https://cb-8vg.evote.rn-evote.exp.direct",
"packagerPid": null, "packagerNgrokUrl": "https://packager.cb-8vg.evote.rn-evote.exp.direct",
"devToolsPort": 19002 "ngrokPid": 9179
} }
\ No newline at end of file
...@@ -3,5 +3,5 @@ ...@@ -3,5 +3,5 @@
"lanType": "ip", "lanType": "ip",
"dev": true, "dev": true,
"minify": false, "minify": false,
"urlRandomness": "xz-g8k" "urlRandomness": "cb-8vg"
} }
\ No newline at end of file
...@@ -8,11 +8,12 @@ class BotaoGrande extends Component { ...@@ -8,11 +8,12 @@ class BotaoGrande extends Component {
} }
render() { render() {
const { backgroundColor, texto, onPress} = this.props; const { backgroundColor, texto, onPress, disabled } = this.props;
return ( return (
<TouchableOpacity <TouchableOpacity
style={[styles.buttonStyle, {backgroundColor: backgroundColor}]} style={[styles.buttonStyle, {backgroundColor: backgroundColor}]}
onPress={onPress} onPress={onPress}
disabled={disabled}
> >
<Text style={styles.textStyle}> <Text style={styles.textStyle}>
{texto} {texto}
...@@ -25,11 +26,13 @@ class BotaoGrande extends Component { ...@@ -25,11 +26,13 @@ class BotaoGrande extends Component {
BotaoGrande.propTypes = { BotaoGrande.propTypes = {
backgroundColor: PropTypes.oneOf(['#7500CF', '#00E576']), backgroundColor: PropTypes.oneOf(['#7500CF', '#00E576']),
texto: PropTypes.string.isRequired, texto: PropTypes.string.isRequired,
onPress: PropTypes.func.isRequired onPress: PropTypes.func.isRequired,
disabled: PropTypes.bool
}; };
BotaoGrande.defaultProps = { BotaoGrande.defaultProps = {
backgroundColor: '#7500CF', backgroundColor: '#7500CF',
disabled: false
}; };
const styles = StyleSheet.create({ const styles = StyleSheet.create({
......
...@@ -4,7 +4,6 @@ import BotaoGrande from '../components/BotaoGrande'; ...@@ -4,7 +4,6 @@ import BotaoGrande from '../components/BotaoGrande';
import styles from '../styles/estilos'; import styles from '../styles/estilos';
import andamento from '../styles/andamento'; import andamento from '../styles/andamento';
import StatusVotacao from '../components/StatusVotacao'; import StatusVotacao from '../components/StatusVotacao';
import moment from 'moment';
import getStatus from '../utils/getStatus'; import getStatus from '../utils/getStatus';
export default class Andamento extends Component { export default class Andamento extends Component {
...@@ -38,6 +37,23 @@ export default class Andamento extends Component { ...@@ -38,6 +37,23 @@ export default class Andamento extends Component {
}) })
} }
getVotosRealizados = () => {
const { votantes, questoes } = this.state.sala;
if(votantes && questoes) {
const qtdVotantes = votantes.length;
let count = 0;
let { alternativas } = questoes[0];
alternativas.forEach(element => {
if(element && element[1]) {
//contabiliza a qtd de votos nas alternativas da questão[0], já que é obrigatório votar em somente uma.
count = count + element[1];
}
});
const porcentagem = 100*count/qtdVotantes;
return Number(porcentagem).toFixed(2);
}
}
render() { render() {
const { sala, encerrou } = this.state; const { sala, encerrou } = this.state;
return ( return (
...@@ -46,7 +62,7 @@ export default class Andamento extends Component { ...@@ -46,7 +62,7 @@ export default class Andamento extends Component {
{sala.descricao} {sala.descricao}
</Text> </Text>
<View> <View>
<StatusVotacao tipo = 'usuario' texto = "100% dos usuários já votaram"/> <StatusVotacao tipo = 'usuario' texto={`${this.getVotosRealizados() || 0}% dos usuários já votaram`} />
<StatusVotacao tipo = 'hora' texto = { <StatusVotacao tipo = 'hora' texto = {
encerrou ? 'Votação encerrou em: ' + encerrou ? 'Votação encerrou em: ' +
getStatus( getStatus(
...@@ -55,7 +71,7 @@ export default class Andamento extends Component { ...@@ -55,7 +71,7 @@ export default class Andamento extends Component {
sala.horaFinal, sala.horaFinal,
sala.horaInicial, sala.horaInicial,
true true
): null ): "Votação ainda não encerrou."
}/> }/>
</View> </View>
<BotaoGrande texto="Andamento" onPress={() => this.andamentoVotos()}/> <BotaoGrande texto="Andamento" onPress={() => this.andamentoVotos()}/>
......
import React, { Component } from 'react'; import React, { Component } from 'react';
import { Text, View, FlatList, ScrollView } from 'react-native'; import { Text, View, FlatList, ScrollView, AsyncStorage } from 'react-native';
import QuestaoCard from '../components/QuestaoCard'; import QuestaoCard from '../components/QuestaoCard';
import styles from '../styles/estilos'; import styles from '../styles/estilos';
import andamento from '../styles/andamento'; import andamento from '../styles/andamento';
...@@ -10,50 +10,13 @@ export default class Andamento extends Component { ...@@ -10,50 +10,13 @@ export default class Andamento extends Component {
constructor(props) { constructor(props) {
super(props); super(props);
this.state = { this.state = {
qtdVotantes: 5, qtdVotantes: 0,
questoes: [ questoes: []
{id: 1, titulo:'minha pergunta?',
alternativas: [
{id: 1, titulo: 'alternativa a', votos: 3},
{id: 2, titulo: 'alternativa b', votos: 2},
]},
{id: 2, titulo:'minha pergunta a?',
alternativas: [
{id: 1, titulo: 'alternativa a', votos: 1},
{id: 2, titulo: 'alternativa b', votos: 4},
]},
{id: 3, titulo:'minha pergunta b?',
alternativas: [
{id: 1, titulo: 'alternativa a', votos: 1},
{id: 2, titulo: 'alternativa b', votos: 2},
{id: 3, titulo: 'alternativa c', votos: 2},
]},
{id: 4, titulo:'minha pergunta c?',
alternativas: [
{id: 1, titulo: 'alternativa a', votos: 0},
{id: 2, titulo: 'alternativa b', votos: 0},
{id: 3, titulo: 'alternativa c', votos: 5},
]},
{id: 5, titulo:'minha pergunta d?',
alternativas: [
{id: 1, titulo: 'alternativa a', votos: 0},
{id: 2, titulo: 'alternativa b', votos: 1},
{id: 3, titulo: 'alternativa c', votos: 4},
]},
{id: 6, titulo:'minha pergunta d?',
alternativas: [
{id: 1, titulo: 'alternativa a', votos: 0},
{id: 2, titulo: 'alternativa b', votos: 1},
{id: 3, titulo: 'alternativa c', votos: 4},
]},
]
} }
} }
static navigationOptions = ({ navigation }) => ({ static navigationOptions = ({ navigation }) => ({
title: `Sala: ${navigation.state.params.titulo || 'Não localizado'}` title: `Sala: ${navigation.state.params.titulo || 'Não localizado'}`
}); });
handleSubmit=()=>{}
componentWillMount() { componentWillMount() {
const questoes = this.props.navigation.getParam('questoes', null); const questoes = this.props.navigation.getParam('questoes', null);
...@@ -65,20 +28,58 @@ export default class Andamento extends Component { ...@@ -65,20 +28,58 @@ export default class Andamento extends Component {
this.setState({votantes, qtdVotantes: votantes.length}); this.setState({votantes, qtdVotantes: votantes.length});
} }
componentDidMount(){
const uid = this.getUID();
this.setState({uid});
}
getUID = async () => {
return await AsyncStorage.getItem('@UID');
}
getQtdVotos = (index) => {
const { questoes } = this.state;
let cont = 0;
questoes[index].alternativas.map(alternativa => {
cont = cont + alternativa[1];
});
return cont;
}
confereVoto = (alternativa) => {
const { uid } = this.state;
let result = 0;
if(alternativa[2]) {
const votantes = alternativa[2];
if(votantes.length > 1)
result = votantes.filter(id => id === uid).length;
else if(votantes.length == 1){
if(votantes == uid) {
result = 1;
}
}
}
if(result > 0)
return true;
else
return false;
}
renderItem = ({ item, index }) => { renderItem = ({ item, index }) => {
const { qtdVotantes } = this.state; const { qtdVotantes } = this.state;
const alfabeto = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n']; const alfabeto = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n'];
const totalDeVotos = this.getQtdVotos(index);
return ( return (
<View> <View>
<QuestaoCard key={item.pergunta} text={`Q${index+1}. ${item.pergunta}`}/> <QuestaoCard key={item.pergunta} text={`Q${index+1}. ${item.pergunta}`}/>
{ {
item.alternativas.map((alternativa, index) => { item.alternativas.map((alternativa, index) => {
let voto = this.confereVoto(alternativa);
return ( return (
<View key={index + 1 } style={andamento.alternativas}> <View key={index + 1 } style={andamento.alternativas}>
<IndiceAlternativa indice={`${alfabeto[index]})`} /> <IndiceAlternativa destaque={voto} indice={`${alfabeto[index]})`} />
<BarraProgresso progresso={(alternativa.votos/qtdVotantes)*100} /> <BarraProgresso progresso={Number(((alternativa[1]/totalDeVotos)*100).toFixed(1)) || 0} />
<Text>{(alternativa.votos/qtdVotantes)*100}%</Text> <Text>{Number(((alternativa[1]/totalDeVotos)*100).toFixed(5)) || 0}%</Text>
{/*<Text>{alternativa}</Text>*/}
</View> </View>
); );
}) })
......
import React, { Component } from 'react'; import React, { Component } from 'react';
import { View, ScrollView, Dimensions } from 'react-native'; import { View, ScrollView, Dimensions } from 'react-native';
import { db } from '../config';
let salasRef = db.ref('salas/');
import styles from '../styles/estilos'; import styles from '../styles/estilos';
import SemSalas from '../containers/SemSalas'; import SemSalas from '../containers/SemSalas';
import CardSalaVotacao from '../components/CardSalaVotacao'; import CardSalaVotacao from '../components/CardSalaVotacao';
import Barra from '../components/Barra'; import Barra from '../components/Barra';
import moment from 'moment'; import getStatus from '../utils/getStatus';
class Historico extends Component { class Historico extends Component {
constructor(props) { constructor(props) {
super(props) super(props)
this.state = {
salas: []
}
} }
static navigationOptions = { static navigationOptions = {
title: 'Histórico de Votações', title: 'Histórico de Votações',
}; };
componentWillMount(){
const salas = this.props.navigation.getParam('salas', []);
this.setState({salas});
}
handleVisualizar = (item) => { handleVisualizar = (item) => {
if (item) if (item)
this.props.navigation.navigate('Andamento', { 'sala': item, 'encerrou': true }); this.props.navigation.navigate('Andamento', { 'sala': item, 'encerrou': true });
...@@ -23,18 +29,8 @@ class Historico extends Component { ...@@ -23,18 +29,8 @@ class Historico extends Component {
this.props.navigation.navigate('Andamento', { 'sala': 'Não disponível' }); this.props.navigation.navigate('Andamento', { 'sala': 'Não disponível' });
} }
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) && !(finalMoment.diff(nowMoment)>=0)) {
return informacaoExtra? finalMoment.format('DD/MM/YYYY HH:mm') : 'encerrada';
}
}
render() { render() {
const salas = this.props.navigation.getParam('salas', []); const { salas } = this.state;
const { height } = Dimensions.get('screen'); const { height } = Dimensions.get('screen');
return ( return (
<View style={[styles.container, { height: height }]}> <View style={[styles.container, { height: height }]}>
...@@ -43,16 +39,16 @@ class Historico extends Component { ...@@ -43,16 +39,16 @@ class Historico extends Component {
{ {
salas.length > 0 ? salas.length > 0 ?
salas.map((item, index) => salas.map((item, index) =>
(this.getStatus(item.dataFinal, (getStatus(item.dataFinal,
item.dataInicial, item.horaFinal, item.dataInicial, item.horaFinal,
item.horaInicial, false)) == 'encerrada'? item.horaInicial, false)) == 'encerrada'?
<CardSalaVotacao <CardSalaVotacao
key={index} key={index}
onPress={() => this.handleVisualizar(item)} onPress={() => this.handleVisualizar(item)}
status={this.getStatus(item.dataFinal, status={getStatus(item.dataFinal,
item.dataInicial, item.horaFinal, item.dataInicial, item.horaFinal,
item.horaInicial)} item.horaInicial)}
mensagem={this.getStatus(item.dataFinal, mensagem={getStatus(item.dataFinal,
item.dataInicial, item.horaFinal, item.dataInicial, item.horaFinal,
item.horaInicial, true)} item.horaInicial, true)}
titulo={item.titulo} titulo={item.titulo}
......
import React, { Component } from 'react'; import React, { Component } from 'react';
import { View, ScrollView, Dimensions, Text, FlatList, AsyncStorage } from 'react-native'; import { View, ScrollView, Dimensions, AsyncStorage, Alert } from 'react-native';
import { db } from '../config'; import { db } from '../config';
let salasRef = db.ref('salas/'); let salasRef = db.ref('salas/');
import BotaoNovaSala from '../components/BotaoNovaSala'; import BotaoNovaSala from '../components/BotaoNovaSala';
...@@ -8,57 +8,6 @@ import SemSalas from '../containers/SemSalas'; ...@@ -8,57 +8,6 @@ import SemSalas from '../containers/SemSalas';
import CardSalaVotacao from '../components/CardSalaVotacao'; import CardSalaVotacao from '../components/CardSalaVotacao';
import Barra from '../components/Barra'; import Barra from '../components/Barra';
import getStatus from '../utils/getStatus'; import getStatus from '../utils/getStatus';
import BotaoAlternativa from '../components/BotaoAlternativa';
import moment from 'moment';
import AuthService from '../shared/AuthService';
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º'
});
export default class Inicio extends Component { export default class Inicio extends Component {
constructor(props) { constructor(props) {
...@@ -92,39 +41,48 @@ export default class Inicio extends Component { ...@@ -92,39 +41,48 @@ export default class Inicio extends Component {
})) }))
} }
}, },
error => console.log('EEERROOOOU', error)); error => console.log('Erro ao carregar as salas.', error));
}); });
} }
getStatus = (dataFinal, dataInicial, horaFinal, horaInicial, informacaoExtra) => { podeVotar = (item, indice) => {
// fazer cálculo para retornar se está em andamento, encerrada ou se vai iniciar; const { uid } = this.state;
const { questoes } = item;
let firstMoment = moment(`${dataInicial} ${horaInicial}`, 'DD/MM/YYYY HH:mm'); let result = true;
let finalMoment = moment(`${dataFinal} ${horaFinal}`, 'DD/MM/YYYY HH:mm'); //se já votou retorna false
let nowMoment = moment(); questoes.map((questao, index) => {
let { alternativas } = questao;
if (firstMoment.diff(nowMoment) > 0) { alternativas.forEach(element => {
if(element && element[2]) {
return informacaoExtra ? `Disponível ${firstMoment.fromNow()}` : 'agendada'; result = !(element[2].filter(id => id === uid).length);
} return result;
}
if (finalMoment.diff(nowMoment) >= 0) { });
return informacaoExtra ? `Encerra ${finalMoment.fromNow()}` : 'andamento'; });
} if(result)
//console.log('enc'); return true;
return informacaoExtra ? finalMoment.format('DD/MM/YYYY HH:mm') : 'encerrada'; else
return false;
} }
handleVisualizar = (item, index) => {
handleVisualizar = (item) => { const { uid, salas } = this.state
const { uid } = this.state
if (item){ if (item){
if(uid && item.adm_uid === uid){ if(uid && item.adm_uid === uid){
return this.props.navigation.navigate('Andamento', { 'sala': item }); return this.props.navigation.navigate('Andamento', { 'sala': item });
} }
this.props.navigation.navigate('Votacao', { 'sala': item }); if(this.podeVotar(item, index))
this.props.navigation.navigate('Votacao', { 'sala': item, 'salas': salas, 'indiceSala': index });
else
return Alert.alert(
'⚠️ Aviso:',
'Você já votou nesta sala!',
[
{text: 'OK'},
]
);
} else { } else {
this.props.navigation.navigate('Votacao', { 'sala': 'Não disponível' }); this.props.navigation.navigate('Votacao', { 'sala': item, 'salas': salas, 'indiceSala': index });
} }
} }
...@@ -132,30 +90,14 @@ export default class Inicio extends Component { ...@@ -132,30 +90,14 @@ export default class Inicio extends Component {
this.setState({ selected }); this.setState({ selected });
} }
getSalas = async () => {
}
getMinhasSalas = async salas => {
const uid = await AsyncStorage.get('@UID');
consol.log(uid)
return salas;
}
getHistorico = salas => salas.filter(item => { getHistorico = salas => salas.filter(item => {
const {dataFinal, dataInicial, horaFinal, horaInicial } = item; const {dataFinal, dataInicial, horaFinal, horaInicial } = item;
return this.getStatus(dataFinal, dataInicial, horaFinal, horaInicial, false) == 'encerrada'; return getStatus(dataFinal, dataInicial, horaFinal, horaInicial, false) == 'encerrada';
}) })
render() { render() {
const { salas } = this.state; const { salas } = this.state;
const { height } = Dimensions.get('screen'); const { height } = Dimensions.get('screen');
// let x = await this.getMinhasSalas(salas);
const salasmock = [{
dataFinal: '28/06/2019', dataInicial:'28/06/2019', horaFinal:'28/06/2019', horaInicial:'28/06/2019', descricao:'a',titulo:'a'
}]
return ( return (
<View style={[styles.container, { height: height }]}> <View style={[styles.container, { height: height }]}>
<ScrollView style={{ maxHeight: height - 240, marginBottom: 5 }}> <ScrollView style={{ maxHeight: height - 240, marginBottom: 5 }}>
...@@ -168,7 +110,7 @@ export default class Inicio extends Component { ...@@ -168,7 +110,7 @@ export default class Inicio extends Component {
item.horaInicial)) != 'encerrada'? item.horaInicial)) != 'encerrada'?
<CardSalaVotacao <CardSalaVotacao
key={index} key={index}
onPress={() => this.handleVisualizar(item)} onPress={() => this.handleVisualizar(item, index)}
status={getStatus(item.dataFinal, status={getStatus(item.dataFinal,
item.dataInicial, item.horaFinal, item.dataInicial, item.horaFinal,
item.horaInicial)} item.horaInicial)}
......
...@@ -4,14 +4,13 @@ import { auth } from '../config'; ...@@ -4,14 +4,13 @@ import { auth } from '../config';
import InputEmail from '../components/InputEmail'; import InputEmail from '../components/InputEmail';
import InputSenha from '../components/InputSenha'; import InputSenha from '../components/InputSenha';
import styles from '../styles/estilos'; import styles from '../styles/estilos';
import AuthService from '../shared/AuthService';
export default class Login extends Component { export default class Login extends Component {
constructor(props) { constructor(props) {
super(props) super(props)
this.state = { this.state = {
salas: {}, salas: {},
email: 'dev@evote.com', email: 'email@id.com',
senha: '123456', senha: '123456',
errorMessage:'' errorMessage:''
} }
...@@ -22,12 +21,9 @@ export default class Login extends Component { ...@@ -22,12 +21,9 @@ export default class Login extends Component {
auth auth
.signInWithEmailAndPassword(email, senha) .signInWithEmailAndPassword(email, senha)
.then((data) => { .then((data) => {
console.log(JSON.stringify(data));
// AuthService.setUID(data.user.uid).then(
AsyncStorage.setItem('@UID', data.user.uid).then( AsyncStorage.setItem('@UID', data.user.uid).then(
() => this.props.navigation.navigate('Inicio') () => this.props.navigation.navigate('Inicio')
) )
//)
}) })
.catch(error => { .catch(error => {
console.log(error); console.log(error);
...@@ -88,7 +84,6 @@ export default class Login extends Component { ...@@ -88,7 +84,6 @@ export default class Login extends Component {
</KeyboardAvoidingView> </KeyboardAvoidingView>
); );
} }
} }
const custom = StyleSheet.create({ const custom = StyleSheet.create({
......
...@@ -157,7 +157,8 @@ export default class Questao extends Component { ...@@ -157,7 +157,8 @@ export default class Questao extends Component {
this.setState({erroAlternativa: ""}); this.setState({erroAlternativa: ""});
let { questao } = this.state; let { questao } = this.state;
this.setState({erroPergunta: ""}); this.setState({erroPergunta: ""});
questao[questao.length-1].alternativas[index] = text; // [ text, 0, []] = texto da alternativa : contador de votos : array de votantes dessa alternativa
questao[questao.length-1].alternativas[index] = [text, 0, votantes = []];
this.setState({questao: questao}); this.setState({questao: questao});
} }
......
...@@ -42,7 +42,7 @@ export default class Sala extends Component { ...@@ -42,7 +42,7 @@ export default class Sala extends Component {
AsyncStorage.getItem('@UID').then(uid => { AsyncStorage.getItem('@UID').then(uid => {
this.setState({sala: {...this.state.sala, adm_uid: uid}}); this.setState({sala: {...this.state.sala, adm_uid: uid}});
}, },
error => console.log('EEERROOOOU', error)); error => console.log('Verifique as credencias.', error));
} }
horaInvalida = (hF,hI) => { horaInvalida = (hF,hI) => {
......
...@@ -20,11 +20,11 @@ export default class VisualizarQuestao extends Component { ...@@ -20,11 +20,11 @@ export default class VisualizarQuestao extends Component {
componentWillMount() { componentWillMount() {
if(this.props.navigation) { if(this.props.navigation) {
const { questoes , index } = this.props.navigation.state.params; const { questoes , index, sala, salas, indiceSala } = this.props.navigation.state.params;
if(index) { if(index) {
this.setState({ index }); this.setState({ index });
} }
this.setState({ questoes }); this.setState({ questoes, sala, salas, indiceSala });
} }
} }
...@@ -41,9 +41,9 @@ export default class VisualizarQuestao extends Component { ...@@ -41,9 +41,9 @@ export default class VisualizarQuestao extends Component {
this.setState({ votacaoIniciada: true }); this.setState({ votacaoIniciada: true });
} }
onChange = (nextIndex, selected) => { onChange = (nextIndex, selected, alternativasVotadas) => {
// não está registrando voto no firebase ainda // não está registrando voto no firebase ainda
this.setState({ votacaoIniciada: false, index: nextIndex }); this.setState({ votacaoIniciada: false, index: nextIndex, alternativasVotadas });
} }
informacoesDaQuestao = () => { informacoesDaQuestao = () => {
...@@ -75,8 +75,22 @@ export default class VisualizarQuestao extends Component { ...@@ -75,8 +75,22 @@ export default class VisualizarQuestao extends Component {
); );
} }
getAlternativasVotadas = () => {
const { alternativasVotadas, index } = this.state;
if(alternativasVotadas && alternativasVotadas[index] && alternativasVotadas[index]["alternativaSelecionada"])
return alternativasVotadas[index]["alternativaSelecionada"];
return -1;
}
render() { render() {
const { questoes, index, votacaoIniciada } = this.state; const {
questoes,
index,
votacaoIniciada,
alternativasVotadas,
salas,
indiceSala
} = this.state;
return ( return (
!votacaoIniciada ? !votacaoIniciada ?
<View style={styles.container}> <View style={styles.container}>
...@@ -91,14 +105,18 @@ export default class VisualizarQuestao extends Component { ...@@ -91,14 +105,18 @@ export default class VisualizarQuestao extends Component {
</View> </View>
</View> </View>
: :
//mostra alternativas a partir daqui //mostra alternativas a partir daqui
<Votar <Votar
navigation = {this.props.navigation} navigation = {this.props.navigation}
selected={0} selected={this.getAlternativasVotadas()}
index={index} index={index}
size={questoes.length} size={questoes.length}
questao={questoes[index]} questao={questoes[index]}
onChange={(index, selected) => this.onChange(index, selected)} questoes={questoes}
salas={salas}
indiceSala={indiceSala}
onChange={(index, selected, alternativasVotadas) => this.onChange(index, selected, alternativasVotadas)}
alternativasVotadas={alternativasVotadas}
/> />
); );
} }
......
...@@ -19,8 +19,8 @@ export default class Votacao extends Component { ...@@ -19,8 +19,8 @@ export default class Votacao extends Component {
componentWillMount() { componentWillMount() {
if(this.props.navigation) { if(this.props.navigation) {
const { sala } = this.props.navigation.state.params; const { sala, salas, indiceSala } = this.props.navigation.state.params;
this.setState({ sala }); this.setState({ sala, salas, indiceSala });
} }
} }
...@@ -28,19 +28,15 @@ export default class Votacao extends Component { ...@@ -28,19 +28,15 @@ export default class Votacao extends Component {
title: `Sala: ${navigation.state.params.sala.titulo}`, title: `Sala: ${navigation.state.params.sala.titulo}`,
}); });
handleDownload = async () => { //não funciona ainda handleDownload = async () => {
const url = await storageRef.child('ambiente-de-desenvolvimento-rn.pdf').getDownloadURL(); // não implementado
const filePath = await `${FileSystem.documentDirectory}eVote/ambiente-de-desenvolvimento-rn.pdf`;
const res = await FileSystem.downloadAsync(url, filePath);
const i = await FileSystem.getInfoAsync(res.uri);
console.log(i); //{"isDirectory":0,"exists":0}
} }
visualizarQuestao = () => { visualizarQuestao = () => {
const { sala } = this.state; const { sala, indiceSala, salas } = this.state;
const { questoes } = this.state.sala; const { questoes } = this.state.sala;
if (sala && questoes) if (sala && questoes)
this.props.navigation.navigate('VisualizarQuestao', { 'questoes': questoes, 'titulo': sala.titulo }); this.props.navigation.navigate('VisualizarQuestao', { 'questoes': questoes, 'titulo': sala.titulo, 'sala': sala, 'indiceSala': indiceSala, 'salas': salas });
else else
this.props.navigation.navigate('VisualizarQuestao', { 'questoes': 'Não disponível' }); this.props.navigation.navigate('VisualizarQuestao', { 'questoes': 'Não disponível' });
} }
......
import React, { Component } from 'react'; import React, { Component } from 'react';
import { View, Text, FlatList, ActivityIndicator } from 'react-native'; import { View, Text, FlatList, ActivityIndicator, ScrollView, AsyncStorage } from 'react-native';
import BotaoProximo from '../components/BotaoProximo'; import BotaoProximo from '../components/BotaoProximo';
import NotificacaoHeader from '../components/NotificacaoHeader'; import NotificacaoHeader from '../components/NotificacaoHeader';
import BotaoAlternativa from '../components/BotaoAlternativa'; import BotaoAlternativa from '../components/BotaoAlternativa';
import { db } from '../config'; import Aviso from '../components/Aviso';
import styles from '../styles/estilos'; import styles from '../styles/estilos';
import votarStyles from '../styles/votarStyles'; import votarStyles from '../styles/votarStyles';
import BotaoMedio from '../components/BotaoMedio'; import BotaoMedio from '../components/BotaoMedio';
import BotaoAnterior from '../components/BotaoAnterior'; import BotaoAnterior from '../components/BotaoAnterior';
let alternativasRef = db.ref('alternativas/'); import { db } from '../config';
let salasRef = db.ref('salas/');
export default class Votar extends Component { export default class Votar extends Component {
constructor(props) { constructor(props) {
super(props); super(props);
this.state = { this.state = {
index: 0, index: 0,
selected: 0, selected: -1,
alternativas: [], alternativas: [],
sending: false, sending: false,
sent: false sent: false,
alternativasVotadas: [],
erro: ''
} }
} }
componentWillMount() { componentDidMount() {
alternativasRef.orderByChild("uid").on('value', snapshot => { const { salas, indiceSala } = this.props;
let alternativas = snapshot.val(); const { alternativas } = this.props.questao;
this.setState({ alternativas, indiceSala, salas });
if (alternativas != null) {
alternativas = Object.values(alternativas);
this.setState(() => ({
alternativas
}))
}
});