/* * Copyright (c) 2019 - 2020 Arnaud Vergnet. * * This file is part of Campus INSAT. * * Campus INSAT is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Campus INSAT is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Campus INSAT. If not, see . */ import React, { useState } from 'react'; import { Avatar, Button, Card, RadioButton } from 'react-native-paper'; import { FlatList, StyleSheet, View } from 'react-native'; import i18n from 'i18n-js'; import LoadingConfirmDialog from '../../Dialogs/LoadingConfirmDialog'; import ErrorDialog from '../../Dialogs/ErrorDialog'; import type { VoteTeamType } from '../../../screens/Amicale/VoteScreen'; import { ApiRejectType } from '../../../utils/WebData'; import { REQUEST_STATUS } from '../../../utils/Requests'; import { useAuthenticatedRequest } from '../../../context/loginContext'; type Props = { teams: Array; onVoteSuccess: () => void; onVoteError: () => void; }; const styles = StyleSheet.create({ card: { margin: 10, }, button: { marginLeft: 'auto', }, }); function VoteSelect(props: Props) { const [selectedTeam, setSelectedTeam] = useState('none'); const [voteDialogVisible, setVoteDialogVisible] = useState(false); const [currentError, setCurrentError] = useState({ status: REQUEST_STATUS.SUCCESS, }); const request = useAuthenticatedRequest('elections/vote', { team: parseInt(selectedTeam, 10), }); const voteKeyExtractor = (item: VoteTeamType) => item.id.toString(); const voteRenderItem = ({ item }: { item: VoteTeamType }) => ( ); const showVoteDialog = () => setVoteDialogVisible(true); const onVoteDialogDismiss = () => setVoteDialogVisible(false); const onVoteDialogAccept = async (): Promise => { return new Promise((resolve: () => void) => { request() .then(() => { onVoteDialogDismiss(); props.onVoteSuccess(); resolve(); }) .catch((error: ApiRejectType) => { onVoteDialogDismiss(); setCurrentError(error); resolve(); }); }); }; const onErrorDialogDismiss = () => { setCurrentError({ status: REQUEST_STATUS.SUCCESS }); props.onVoteError(); }; return ( ( )} /> ); } export default VoteSelect;