import * as React from 'react';
import { useEffect, useState } from 'react';
import { SafeAreaView, ScrollView, TouchableOpacity, Button, View, Text, Image, Alert, Linking, Platform } from 'react-native';
import { connect } from "react-redux";
import CustomHeader from '../../../components/header.js';
import Assets from '../../../components/assets.manager.js';
import Elements from '../../../components/elements.js';
import Theme from '../../../components/theme.style.js';
import Icon from '../../../components/icons.js';
import REQUEST from '../../../components/api';
import DB from '../../../components/storage';
import { openComposer } from 'react-native-email-link';
import { dateFormater } from '../../../utils/date.js';
import CustomSafeArea from '../../../components/safeArea.component.js';
import AdjustableText from '../../../components/text/AdjustableText.js';
class TransactionDetails extends React.Component {
constructor(props) {
super(props)
}
state = {
loading: true,
ratesubmitted: false,
rating: 0,
session: '',
transaction: {},
umail: "",
cn: ""
}
componentDidMount() {
this.init()
}
init = async () => {
let SESSION = await DB.session();
let user_profile = await DB.profile()
this.setState({ cn: user_profile.data.card_number, session: SESSION })
if(this.props.route.params.data.entry_type_desc === "MOBILE APP SIGN UP BONUS") {
return this.setState({ transaction: this.props.route.params.data, loading: false })
}
REQUEST("transaction_single", "post", {
Authorization: SESSION.token,
}, {}, {
trans_num: this.props.route.params.data.trans_num,
ref_num: this.props.route.params.data.ref_num,
source: this.props.route.params.data.source,
entry_type_code: this.props.route.params.data.entry_type_code
}, (data) => {
if(data.status === 0) {
this.setState({ transaction: this.props.route.params.data, loading: false })
} else {
this.setState({ transaction: data.data, loading: false })
}
}, (err) => {
Alert.alert("Information", `\n${err.message}`);
this.setState({ loading: false })
}, "Transaction", "Fetch");
}
renderRatings = (rating, disabled) => {
return [1, 2, 3, 4, 5].map((rate, i) => {
return (
this.setState({ rating: rate })}>
= rate ? "star" : "staro"} color={rating > 0 || !this.state.ratesubmitted ? Theme.colors.yellow : Theme.colors.darkerGray} size={40} />
)
})
}
onSubmit = async () => {
this.setState({ loading: true })
REQUEST('transaction_rate', 'post', {
Authorization: this.state.session.token,
Accept: 'application/json',
card_number: this.state.session.user.card_number
}, {}, {
trans_num: this.props.route.params.data.trans_num,
ref_num: this.props.route.params.data.ref_num,
entry_type_code: this.props.route.params.data.entry_type_code,
source: this.props.route.params.data.source,
rate: this.state.rating
}, (result) => {
this.setState({ loading: false, ratesubmitted: true })
Alert.alert("Information", '\n' + 'Rating has been submitted', [{text: "Ok", onPress: () => {
this.props.route.params?.onBackPress()
}}])
}, (err) => {
Alert.alert("Information", `\n${err.message}`);
this.setState({ loading: false })
}, "Transaction", "Rate")
}
checkPendingTransaction = () => {
if(this.state.rating > 0 && !this.state.ratesubmitted) {
Alert.alert(
'',
'You have an unsaved rating, are you sure you want to navigate back?',
[
{
text: 'No',
style: 'cancel',
},
{
text: 'Yes',
onPress: async () => {
this.props.route.params?.onBackPress()
this.props.navigation.goBack()
},
},
],
{cancelable: true},
);
} else {
this.props.route.params?.onBackPress()
this.props.navigation.goBack()
}
}
returnDate = () => {
return dateFormater(this.state.transaction?.date);
}
render() {
return (
this.checkPendingTransaction()}
menu={false}
backscreen="MyProfile"
navigation={this.props.navigation}
/>
{this.state.transaction?.entry_type_code === "TOPUP" || this.state.transaction?.entry_type_code === "1" || this.state.transaction?.entry_type_desc === "MOBILE APP SIGN UP BONUS" ? "Sales Invoice" : "Transaction ID"}
{this.state.transaction?.trans_num}
{this.state.transaction?.station || 'APP'}
{
this.state.transaction?.station !== "APP" && <>
Rate Your Experience
{this.renderRatings(this.state.rating ? this.state.rating : this.state.transaction?.rating, this.state.transaction?.is_feedback_disabled || this.state.transaction?.is_disabled || this.state.ratesubmitted)}
Submit Rating
>
}
{
await REQUEST("contact_us", "get", {}, {}, {}, async (res) => {
if(res.status == 1 && res.data){
openComposer({
to: res.data.contact_email_address_mobile,
subject: `Mobile App Feedback:\nCN${this.state.cn}`,
body: ''
})
}
}, (err) => {
Alert.alert("Information", `\n${err.message}`);
}, "ContactOptions", "Fetch"
)
}} style={{width: '90%', padding: 12, alignItems: 'center', marginTop: 15}}>
Send Feedback
);
}
}
const mapStateToProps = (state) => {
return {
app_theme: state.appThemeReducer.theme
}
}
export default connect(mapStateToProps, null)(TransactionDetails)