/* eslint-disable prettier/prettier */ /** * Sample React Native App * https://github.com/facebook/react-native * * @format * @flow */ import React, { Component } from 'react'; import { Platform, StyleSheet, AppState, FlatList, ProgressBarAndroid, TouchableOpacity, Text, View } from 'react-native'; import ActionButton from 'react-native-action-button'; import Icon from 'react-native-vector-icons/FontAwesome5'; import { responsiveFontSize, responsiveHeight, responsiveWidth } from 'react-native-responsive-dimensions'; import { HistoryListItem, HistoryItemSectionned } from './HistoryItem'; import { credrequester } from './../../route.json'; import { loadDemandeCredit, loadMyDemandeCredit } from './../../webservice/HistoryRequestApi'; import FontAwesome5 from 'react-native-vector-icons/FontAwesome5'; import BaseScreen from './../../screens/BaseScreen' import Button from 'apsl-react-native-button' import { readUser } from "../../webservice/AuthApi"; let route = require('./../../route.json') let moment = require('moment-timezone') let theme = require('./../../utils/theme.json') import { primary, primaryDark, accent, purpleLight, primaryLight } from './../../utils/theme.json'; import { IndicatorViewPager, PagerTabIndicator } from 'react-native-best-viewpager'; type Props = {}; var sortIcons; var sectionIcons; import I18n from 'react-native-i18n' import { IlinkEmitter } from "../../utils/events"; require('./../../utils/Translations') import { SinglePickerMaterialDialog } from 'react-native-material-dialog'; import { Header } from "react-native-elements"; import { withNavigationFocus } from "react-navigation"; class History extends BaseScreen { static navigatorStyle = { navBarBackgroundColor: primary, statusBarColor: primaryDark, navBarTextColor: '#FFFFFF', navBarButtonColor: '#FFFFFF', contextualMenuStatusBarColor: theme.accent, contextualMenuBackgroundColor: theme.accentLight, contextualMenuButtonsColor: '#ffffff', }; static navigationOptions = ({ navigation }) => { return { title: I18n.t('CREDIT_MANAGE'), drawerLabel: navigation.getParam('name', I18n.t('CREDIT_MANAGE')), drawerIcon: ({ tintColor }) => ( ), } }; static options(passProps) { return { topBar: { visible: true, drawBehind: false, background: { color: theme.primaryDark, }, }, } } constructor(props) { super(props, true); this.state = this.initState(); readUser().then((user) => { this.setState({ user: user }) }) this._populateIcons().then(() => { }); IlinkEmitter.on("langueChange", this.updateLangue.bind(this)) this.refreshData(); }; navigationButtonPressed({ buttonId }) { if (buttonId === 'id') { this.showFilter(); } else if (buttonId === 'sectionned') { this.setState({ isSectionned: !this.state.isSectionned }) } } updateLangue() { this.props.navigation.setParams({ name: I18n.t('CREDIT_MANAGE') }) this.forceUpdate() } onNavigatorEvent(event) { if (event.type === 'NavBarButtonPress') { if (event.id === 'id') { this.showFilter(); } else if (event.id === 'sectionned') { this.setState({ isSectionned: !this.state.isSectionned }) } } else { switch (event.id) { case 'willAppear': this.refreshData() break; case 'didAppear': break; case 'willDisappear': break; case 'didDisappear': break; case 'willCommitPreview': break; } } } showFilter() { /*if (this.state.filter) { Navigation.mergeOptions(route.stackRoot, { topBar: { rightButtons: [ { title: 'Non Traité', }, { title: 'Traité', }, { title: 'Période', }, { title: 'Tout', }, { title: 'Trier par', }, { title: '', }, ], onButtonPressed: (index) => { let data = this.state.conserve console.log(index) console.log(data); if (data !== null) { let filtre = ""; if (index < 2) { switch (index) { case 0: filtre = I18n.t('NO_TREAT') break; case 1: filtre = I18n.t('TREAT'); break; } let fi = data.filter(item => item.statut === filtre) this.setState({listdata: fi, filter: true}) } else if (index === 2) { this.setState({panelVisible: true}) } else { this.setState({listdata: data, filter: false}) } } } }} ); } else { Navigation.mergeOptions(route.stackRoot, { topBar: { rightButtons: [ { title: I18n.t('NO_TREAT'), }, { title: I18n.t('TREAT'), } , { title: I18n.t('PERIOD'), }, { title: '', }, { title: 'Trier par', }, { title: '', }, ], onButtonPressed: (index) => { let data = this.state.conserve if (data != null && data.length > 0) { var filtre = ""; if (index < 2) { switch (index) { case 0: filtre = I18n.t('NO_TREATED'); break; case 1: filtre = I18n.t('TREATED'); break; } let fi = data.filter(item => item.statut === filtre) this.setState({listdata: fi, filter: true}) } else if (index === 2) { this.setState({panelVisible: true}) this.props.navigator.showContextualMenu( { rightButtons: [ { title: I18n.t('CANCEL'), }, { title: I18n.t('FILTER'), }, ], onButtonPressed: (index) => { console.log(index) switch (index) { case 1: let {dateend, datestart} = this.state; this.onfilterPress(); } this.setState({panelVisible: false}); } } ); } else { this.setState({listdata: data, filter: false}) } } } } } ); }*/ } _populateIcons = function () { return new Promise(function (resolve, reject) { Promise.all( [ Icon.getImageSource('sort', 30), Icon.getImageSource('layer-group', 30), ] ).then((values) => { sortIcons = values[0]; sectionIcons = values[1]; resolve(true); }).catch((error) => { console.log(error); reject(error); }).done(); }); }; initState() { return { user: {}, listdata: [], listdataSend: [], conserve: [], appState: AppState.currentState, filter: false, sortIcons: null, panelVisible: false, filder_disable: true, datestartformated: 'La date de debut', dateendformated: 'La date de fin', datestart: null, dateend: null, isLoaded: false, isSectionned: false, isDateTimePickerVisible: false, isDateEndTimePickerVisible: false, } } updateList(data: Array) { if (!this.state.filter) { let rev = data.reverse() this.setState({ listdata: rev, conserve: rev, isLoaded: true }); } } updateMyList(data) { if (!this.state.filter) { let rev = data.reverse() this.setState({ listdataSend: rev, conserve: rev, isLoaded: true }); } } componentDidMount() { AppState.addEventListener('change', this._handleAppStateChange); } componentWillUnmount() { AppState.removeEventListener('change', this._handleAppStateChange); } _handleAppStateChange = (nextAppState) => { if (this.state.appState.match(/inactive|background/) && nextAppState === 'active') { } this.setState({ appState: nextAppState }); } renderList(list: Array) { if (this.state.isLoaded) { let data = list; if (data !== null) { if (data.length > 0) { return ( { this.refreshData() }} isRefreshing={this.state.isRefreshing} navigator={this.props.navigation} style={styles.listbackground} />) } else if (this.state.filter) { return ( {I18n.t('NO_ITEM_REQUEST')} ) } else if (data.length === 0) { return ( {I18n.t('NO_ITEM_REQUEST')} ) } else { return ( {I18n.t('LOADING_DOTS')} ) } } else { return ( {I18n.t('EMPTY_LIST_REQUEST')} ) } } else if (list.length === 0) { return ( Aucuns éléments ne corresponds ) } } componentDidUpdate(prevProps) { if (prevProps.isFocused !== this.props.isFocused && this.props.isFocused) { this.refreshData() } } render() { return ( {this.state.user.category !== "hyper" ? this._renderListDemandsSend() : null} {this.state.user.category !== "geolocated" ? this._renderListDemandReceive() : null} ); } renderSectionnedList(list) { if (this.state.isLoaded) { let data = list; if (data !== null) { if (data.length > 0) { return () } else if (this.state.filter) { return ( {I18n.t('NO_ITEMS_REQUEST')} ) } else { return ( {I18n.t('LOADING_DOTS')} ) } } else { return ( {I18n.t('EMPTY_LIST_REQUEST')} ) } } } renderLoading() { return ({I18n.t('LOADING_DOTS')}) } showSlidingUpPanel() { /* return ( this.panel = c} draggableRange={{top: responsiveHeight(100), bottom: 0}} onRequestClose={() => this.setState({panelVisible: false})}> {this.showSlidingUpView()} ) } showSlidingUpView() { /* return ( this._handleDatePicked(fromdate,untildate)} dayHeadings={['D', 'L', 'M', 'M', 'J', 'V', 'S']} maxMonth={12} startdate={moment('20180101').format('YYYYMMDD')} untilDate='20181231' minDate='20180101' maxDate='20181231' buttonColor='green' showReset={false} showClose={false} placeHolderStart= 'Date de debut' placeHolderUntil= 'Date fin' selectedBackgroundColor= 'green' selectedTextColor='white' /> )*/ } onfilterPress() { let { datestart, dateend } = this.state; let data = this.state.conserve; if (data !== null) { data = data.filter(item => { let mda = moment(item.dateAjout) return moment(item.dateAjout).isAfter(moment(datestart).toDate()) && (mda.isBefore(moment(dateend).toDate())) }) this.setState({ listdata: data, panelVisible: false, filter: true }) } } _showDateTimePicker = (type) => { if (type === 1) this.setState({ isDateTimePickerVisible: true, }); else this.setState({ isDateEndTimePickerVisible: true, }); } _showDateEndPicker = () => this.setState({ isDateEndTimePickerVisible: true }); _hideDateTimePicker = () => this.setState({ isDateTimePickerVisible: false, isDateEndTimePickerVisible: false }); _handleDatePicked = (fromdate, enddate) => { console.log([fromdate, enddate]); this.setState({ datestart: fromdate, datestartformated: moment(fromdate).format('dddd Do ,MMMM YYYY'), dateend: enddate, dateendformated: moment(enddate).format('dddd Do ,MMMM YYYY'), }); let startdate = this.state.datestart; let enddatemo = moment(enddate); let dif = moment(enddatemo).diff(startdate); if (dif < 0) { this.setState({ filder_disable: true }); this.props.navigator.showSnackbar({ text: I18n.t('DATE_WRONG'), duration: 'long', backgroundColor: 'red', textColor: 'white', }) } else { this.setState({ filder_disable: false }); } this._hideDateTimePicker(); }; printOptions() { if (this.state.user.category === "hyper") { return ( { }}> ); } else { return ( { this.props.navigation.push(route.credrequester, { onGoBack: () => this.refreshData(), }) }} > { }}> ) } } _renderListDemandsSend() { return ( { this.state.isLoaded ? this.state.isSectionned ? this.renderSectionnedList(this.state.listdataSend) : this.renderList(this.state.listdataSend) : this.renderLoading() } {this.printOptions()} {this.showSlidingUpPanel()} ) } _renderListDemandReceive() { return ( { this.state.isLoaded ? this.state.isSectionned ? this.renderSectionnedList(this.state.listdata) : this.renderList(this.state.listdata) : this.renderLoading() } {this.printOptions()} {this.showSlidingUpPanel()} ) } _renderTabGeolocated() { let tabs = [{ text: I18n.t('DEMANDE_SEND'), }] return ; } _renderTabHyper() { let tabs = [{ text: I18n.t('DEMANDE_RECEIVE'), }] return ; } _renderTabs() { let tabs = [{ text: I18n.t('MY_DEMANDE'), iconSource: this.state.usersicon, }, { text: I18n.t('DEMANDE_RECEIVE'), iconSource: this.state.charticon, }] return ; } refreshData() { this.setState({ isRefreshing: true }) loadDemandeCredit().then((data) => { if (data.success !== undefined) { this.updateList(data.demands); this.setState({ isRefreshing: false }) } }); loadMyDemandeCredit().then((data) => { if (data.success !== undefined) { this.setState({ isRefreshing: false }) this.updateMyList(data.demands) } }) } } export default withNavigationFocus(History); const datefilter = StyleSheet.create({ titleHeader: { fontSize: 20, fontWeight: 'bold', color: 'black', flex: 1, }, datetitle: { fontSize: 17, color: 'black', marginLeft: responsiveWidth(2), }, datetext: { fontSize: 16, marginLeft: responsiveWidth(5), }, content: { flex: 2, }, btnContainer: { flexDirection: 'row', width: responsiveWidth(100), alignSelf: 'flex-end', flex: 2, }, btn: { flex: 1, borderColor: 'transparent', borderRadius: 0, }, btntext: { fontWeight: 'bold', color: accent, }, container: { flex: 1, justifyContent: 'space-evenly', }, }) const styles = StyleSheet.create({ slidingup: { width: responsiveHeight(100), }, root: { flex: 1, }, container: { flex: 1, backgroundColor: 'white', justifyContent: 'center', alignItems: 'center', }, emptylist: { flex: 1, justifyContent: 'center', alignItems: 'center', }, backgroundd_drawer: { backgroundColor: '#000', }, listbackground: { }, actionButtonIcon: { fontSize: 20, height: 22, color: 'white', }, welcome: { fontSize: 20, textAlign: 'center', margin: 10, }, instructions: { textAlign: 'center', color: '#333333', marginBottom: 5, }, dateText: { marginTop: 20, marginLeft: responsiveWidth(13), marginBottom: 20, fontSize: 17, }, titlecontent: { fontSize: 17, marginLeft: responsiveWidth(10), color: 'black', }, content: { flex: 8, }, title: { fontSize: 20, marginLeft: 20, marginTop: 20, color: 'black', fontWeight: 'bold', }, });