Untitled
unknown
plain_text
2 years ago
107 kB
5
Indexable
import React from 'react'; import {useFocusEffect} from '@react-navigation/native'; import { View, ScrollView, Text, TouchableOpacity, SafeAreaView, StatusBar, StyleSheet, //Image, FlatList, Modal, TextInput, Dimensions, Alert, ImageBackground, KeyboardAvoidingView, } from 'react-native'; import Image from '../../components/Image'; import Video, {TextTrackType} from 'react-native-video'; import MediaControls, {PLAYER_STATES} from 'react-native-media-controls'; import { heightPercentageToDP as hp, widthPercentageToDP as wp, } from 'react-native-responsive-screen'; import GColors from '../../common/GColors'; import { activeOpacity, appStoreId, commonBorderRadius, commonMarginHorizontal, FontFamily, Fonts, hitSlop, linkShareDescription, regx, } from '../../common/GConstants'; import {icons, logos} from '../../assets/images'; import {ThemeButton} from '../../components/ThemeButton'; import Colors from '../../common/GColors'; import { BookMe, FearureTalkDetail, LiveDonate, Permission, } from '../../localize/screen-names'; import {getScreenTranslate} from '../../localize/Localize'; import {LineView} from '../../components/LineView'; import {CommonTextInput} from '../../components/TextInput'; import {HeaderLeft} from '../../components/HeaderLeft'; import {showDangerMsg, showSuccessMsg} from '../../common/GUtil'; import DateTimePickerModal from 'react-native-modal-datetime-picker'; import moment from 'moment'; import {Dropdown} from 'react-native-element-dropdown'; import {SwipeListView} from 'react-native-swipe-list-view'; import {callPostApi} from '../../API/ApiManager'; import {ApiEndPoints, dynamicURLS} from '../../API/UrlFactory'; import StatusCode from '../../API/StatusCode'; import {getUser} from '../../common/AsyncstorageFunction'; import Loader from '../../API/Loader'; import {Icons} from '../../common/GStyle'; import dynamicLinks from '@react-native-firebase/dynamic-links'; import {linkShare} from '../../common/GCommonFunction'; import Orientation from 'react-native-orientation-locker'; const PaymentRequest = require('react-native-payments').PaymentRequest; const fearureTalkT = getScreenTranslate(FearureTalkDetail); const PermissionT = getScreenTranslate(Permission); const BookMeT = getScreenTranslate(BookMe); const DropDownMenu = [ { label: 'In person', value: '1', }, { label: 'Online', value: '2', }, { label: 'Both', value: '3', }, ]; const screenWidth = Dimensions.get('window').width; const screenHeight = Dimensions.get('window').height; const LiveDonateT = getScreenTranslate(LiveDonate); export default class FeaturedTalkDetailsHome extends React.Component { constructor(props) { super(props); this.state = { donateViewShow: false, commentModal: false, isLiked: false, addCommentModal: false, arrVideoData: [], arrCommentData: [], showMoreModal: false, showReportVideo: false, arrReportVideo: [ { id: 1, text: fearureTalkT.violentor, isSelected: false, }, { id: 2, text: fearureTalkT.hatefulor, isSelected: false, }, { id: 3, text: fearureTalkT.harassmentor, isSelected: false, }, { id: 4, text: fearureTalkT.harmfulor, isSelected: false, }, { id: 5, text: fearureTalkT.childabuse, isSelected: false, }, { id: 6, text: fearureTalkT.infringesmy, isSelected: false, }, { id: 7, text: fearureTalkT.spamor, isSelected: false, }, ], // isSelectedReportVideo: -1, showExtraModal: false, showBookMeModal: false, name: '', email: '', mobile: '', type: '', organisationName: '', date: '', time: '', audienceno: '', isDatePickerVisible: false, isTimePickerVisible: false, DropDownMenu: DropDownMenu, //isFollow: true, isFollowing: false, Comments: '', rowIndex: null, reportId: '', otherReson: '', currentTime: 0, duration: 0, isLoading: true, paused: false, playerState: PLAYER_STATES.PLAYING, screenType: 'cover', rate: 1, playSpeedModal: false, talk_id: this.props.route.params?.isTalk_id, talk_detail: [], talk_description: '', user: [], readMoreData: false, fullScreenVideo: false, fetchingStatusUp: false, loading: false, fetchingStatusCompleted: false, hasMoreDataCompleted: true, page: 1, reportSelectText: '', isReportSelected: -1, editTalkModal: false, talktitle: '', talkdescription: '', SelectedDonateAmount: 1, // used for fullscreen video UI videoDimensions: {width: undefined, height: undefined}, mediaLayoutHeight: 0, }; this.unsubscribe = this.props.navigation.addListener('focus', () => this.apicallTalkDetails(), ); this.unsubscribeblur = this.props.navigation.addListener('blur', () => this.blurScreenEvent(), ); } componentWillUnmount() { if (this.unsubscribe) { this.unsubscribe?.(); } if (this.unsubscribeblur) { this.unsubscribeblur?.(); } Orientation.lockToPortrait(); } blurScreenEvent = () => { this.setState({paused: true}); }; // Life Cycle Method componentDidMount() { setTimeout( () => getUser().then(user => this.setState({ user, }), ), 1, ); this.apicallTalkDetails(); this.apiAddTalkViewers(); this.apicallCommentList(); this.apicallFeaturedTalks(); // Header navigation setup /* this.props.navigation.setOptions({ // headerLeft: () => ( // <HeaderLeft // onPress={() => // this.state.fullScreenVideo === false // ? this.props.navigation.goBack('') // : this.setState({ fullScreenVideo: false }) // } // image={icons.round_back_icon} // imageStyle={[ // this.state.fullScreenVideo === true && styles.headerBackIconStyle // ]} // /> // ), // headerRight: () => ( // <View // style={{ // flexDirection: "row", // }} // > // <ThemeButton // Text={"Donate"} // TouchableStyle={styles.headerDonateBtnStyle} // onPress={() => [this.props.navigation.navigate("LiveDonateScreen")]} // /> // <ThemeButton // onPress={() => this.setState({ showBookMeModal: true })} // Text={"Book Me"} // TouchableStyle={[ // styles.headerDonateBtnStyle, // { marginStart: wp(3) }, // ]} // /> // </View> // ), title: '', headerShadowVisible: false, // Use to hide shadow under the navigation bar });*/ // ======================================================================== } apicallFollow = () => { let param = { following_id: this.state.talk_detail.user_id, }; callPostApi(ApiEndPoints.follow_unfollow, param, data => { if (data.code === StatusCode.SUCCESS) { this.apicallTalkDetails(); } }); }; apicallFollowers = () => { const postAuthorUserId = this.state.talk_detail.user_id; let param = { tag: 'followers', page: 1, user_id: postAuthorUserId, }; callPostApi(ApiEndPoints.follow_list, param, data => { let isFollowing = false; for (let i = 0; i < data.data?.length ?? 0; i++) { const user = data.data[i]; if (user.user_id === this.state.user.id) { isFollowing = true; break; } } this.setState({ isFollowing, }); }); }; applePay = item => { const paymentRequest = new PaymentRequest( [ { supportedMethods: ['apple-pay'], data: { merchantIdentifier: 'merchant.com.story.boardapp', supportedNetworks: ['visa', 'mastercard', 'amex'], countryCode: 'US', currencyCode: 'GBP', }, }, ], { id: 'basic-example', total: { label: 'Storiboard', amount: {currency: 'GBP', value: item}, }, }, { // requestPayerName: true // requestPayerPhone: true, //requestPayerEmail: true }, ); paymentRequest.canMakePayments().then(canMakePayment => { if (canMakePayment) { console.log('Can Make Payment'); paymentRequest.show().then(paymentResponse => { // Your payment processing code goes here paymentResponse.complete('success'); alert('Successful donate'); }); } else { console.log('Cant Make Payment'); } }); }; donationRenderItem = ({item, index}) => { return ( <TouchableOpacity activeOpacity={activeOpacity} onPress={() => this.applePay(item)} // onPress={() => this.apicallDonation(item)} style={styles.donationRenderTouchableStyle} > <Text style={styles.donationRenderPriceTextStyle}>{'£' + item}</Text> </TouchableOpacity> ); }; getTag = item => { if (this.state.talk_id != item) { this.setState({talk_id: item}, () => this.apicallTalkDetails()); } }; renderViewData = (item, index) => { return ( <TouchableOpacity activeOpacity={activeOpacity} onPress={() => [ this.apicallMoreTalkDetails(item.id), this.apiAddTalkMoreViewers(item.id), ]} style={{flexDirection: 'row', marginBottom: hp(1)}} > <View> <Image source={{uri: item.thumb}} style={{height: hp(10), width: wp(34), borderRadius: 4}} resizeMode="cover" /> </View> <View style={{marginLeft: wp(4), flex: 1}}> <Text numberOfLines={2} style={[styles.disciption, {flex: 1}]}> {item.title} </Text> <View style={{flexDirection: 'row', alignItems: 'center'}}> <Image source={icons.eye_comment} style={{height: hp(1.5), width: wp(3)}} /> <Text style={styles.viewText}>{item.viewer}</Text> <Image source={icons.heartSelected} style={{height: hp(1.5), width: wp(3), marginLeft: wp(2)}} resizeMode="contain" /> <Text style={styles.likeText}>{item.likes}</Text> </View> <Text numberOfLines={1} style={styles.nameText}> {item.first_name + ' ' + item.last_name} </Text> </View> </TouchableOpacity> ); }; renderCommentData = (item, index) => { return ( <View style={{ flexDirection: 'row', alignItems: 'center', marginBottom: hp(1.8), backgroundColor: 'white', }} > <View> <Image source={{uri: item.user_image}} resizeMode="cover" style={{height: wp(12), aspectRatio: 1, borderRadius: 100}} /> </View> <View style={{flex: 1, marginLeft: wp(7)}}> <Text numberOfLines={1} style={styles.commenter}> {item.first_name + ' ' + item.last_name} </Text> <Text style={styles.commentDisc}>{item.comment}</Text> </View> <TouchableOpacity hitSlop={{left: 5, right: 5, top: 5, bottom: 5}} onPress={() => { // this.state.arrCommentData[index].isSelected = // !this.state.arrCommentData[index].isSelected; // this.setState({ arrCommentData: this.state.arrCommentData }); this.apicallLikeUnlikeComment(item.id); // alert(item.id); }} > <Image source={ item.is_like === true ? icons.heartSelected : icons.HeartUnselected } /> </TouchableOpacity> </View> ); }; // book me validation bookmeValidation = () => { var nameRegx = regx.nameRegx; var emailRegx = regx.mailRegx; var phoneRegx = regx.phoneNumberRegx; var numRegx = regx.numRegx; if (this.state.name.trim() == '') { showDangerMsg(PermissionT.plz_enter_name); return false; } else if (!nameRegx.test(this.state.name)) { showDangerMsg(PermissionT.plz_enter_valid_name); return false; } else if (this.state.email.trim() == '') { showDangerMsg(PermissionT.plz_Enter_Email_Text); return false; } else if (!emailRegx.test(this.state.email)) { showDangerMsg(PermissionT.plz_Enter_Valid_Email_Text); return false; } else if (this.state.mobile.trim() == '') { showDangerMsg(PermissionT.plz_Enter_MobileNumber_Text); return false; } else if (!phoneRegx.test(this.state.mobile)) { showDangerMsg(PermissionT.plz_Enter_ValidMobileNumber_Text); return false; } else if (this.state.type.trim() == '') { showDangerMsg(PermissionT.plz_Select_Event_Type_Text); return false; } else if (this.state.organisationName.trim() == '') { showDangerMsg(PermissionT.plz_Enter_Organisation_Text); return false; } else if (this.state.date.trim() == '') { showDangerMsg(PermissionT.plz_Enter_Date_Text); return false; } else if (this.state.time.trim() == '') { showDangerMsg(PermissionT.plz_Enter_Time_Text); return false; } else if (this.state.audienceno.trim() == '') { showDangerMsg(PermissionT.plz_Enter_Audienceno_Text); return false; } else if (!numRegx.test(this.state.audienceno)) { showDangerMsg(PermissionT.plz_Enter_Valid_Audienceno_Text); return false; } else { this.apicallBookMe(); } }; // report video render item reportVideoRenderItem = ({item, index}) => { return ( <TouchableOpacity activeOpacity={activeOpacity} onPress={() => [ this.setState({ isReportSelected: index, reportSelectText: item.text, otherReson: '', }), ]} // onPress={() => [ // (item.isSelected = !item.isSelected), // this.forceUpdate(), // this.setState({ // reportId: item.isSelected, // reportSelectText: item.text, // }), // ]} style={{ flexDirection: 'row', padding: wp(4), }} > <Image style={ { // borderColor: GColors.themecolor, // borderWidth: 1.5, //borderRadius: 100, } } source={ this.state.isReportSelected === index ? icons.double_round_selected_icon : icons.round_unselected_icon } resizeMode="contain" /> <Text style={styles.reportVideoRenderTextTitle}>{item.text}</Text> </TouchableOpacity> ); }; //Delete Function handleDelete = index => { var data = this.state.arrCommentData; data.splice(index, 1); //this.setState({arrCommentData: data}, () => { // //this.apicallCommentList(); //}); //local update after delete comment this.setState(prevState => ({ talk_detail: { ...prevState.talk_detail, coments: data.length, arrCommentData: data, }, })); }; //Report Video handleReportVideoClick = () => { //validations for alphanumeric var alphaNumRex = regx.alphaNumRex; if (this.state.reportSelectText != '') { this.apicallReportTalk(); } else if (this.state.otherReson != '') { if (alphaNumRex.test(this.state.otherReson)) { this.apicallReportTalk(); } else { showDangerMsg(PermissionT.plz_enter_valid_reason); } } }; renderHiddenItem = index => ( <TouchableOpacity //onPress={() => this.handleDelete(index)} onPress={() => Alert.alert( // "StoriBoard", '', 'Do you want to permanently delete this comment?', [ { text: 'Cancel', onPress: () => console.log('Cancel Pressed'), style: 'cancel', }, {text: 'Ok', onPress: () => this.handleDelete(index)}, ], {cancelable: false}, ) } style={styles.rowBack} > <View style={[styles.backRightBtn, styles.backRightBtnRight]}> <Image // style={{ height: wp(3), aspectRatio: 1 }} source={icons.white_trash_icon} resizeMode="contain" /> {/* <Text style={styles.backTextWhite}>Delete</Text> */} </View> </TouchableOpacity> ); // VIDEO PLAYER function onSeek = seek => { this.videoPlayer.seek(seek); }; onPaused = playerState => { this.setState({ paused: !this.state.paused, playerState, }); }; onReplay = () => { this.setState({playerState: PLAYER_STATES.PLAYING}); this.videoPlayer.seek(0); }; onProgress = data => { const {isLoading, playerState} = this.state; // Video Player will continue progress even if the video already ended if (!isLoading && playerState !== PLAYER_STATES.ENDED) { this.setState({currentTime: data.currentTime}); } }; onLoad = data => { const flip = data.naturalSize.orientation === 'portrait'; const videoWidth = flip ? data.naturalSize.height : data.naturalSize.width; const videoHeight = flip ? data.naturalSize.width : data.naturalSize.height; let mediaLayoutHeight = (videoHeight / videoWidth) * wp(100); mediaLayoutHeight = Math.min(mediaLayoutHeight, hp(85)); this.setState({ duration: data.duration, isLoading: false, mediaLayoutHeight, }); //start next video from same time if (!(this.state.duration > 0 && this.state.duration != data.duration)) this.videoPlayer.seek(this.state.currentTime); }; onLoadStart = data => { this.setState({isLoading: true}); }; onEnd = () => this.setState({playerState: PLAYER_STATES.ENDED}); onFullScreen = () => { if (this.state.fullScreenVideo === false) { Orientation.unlockAllOrientations(); this.setState({fullScreenVideo: true}); } else { Orientation.lockToPortrait(); this.setState({fullScreenVideo: false}); } }; onSeeking = currentTime => { this.setState({currentTime: currentTime}); }; // VIDEO PLAYER readMoreLessData = () => { if (this.state.readMoreData == false) { this.setState({readMoreData: true}); } else { this.setState({readMoreData: false}); } }; handleLoadMore = () => { this.setState( { page: this.state.page + 1, fetchingStatusUp: true, }, () => { this.apicallCommentList(); }, ); }; apicallDonation = amount => { console.log('AMOUNT ===<', amount); this.setState({loading: true}); let param = { talk_id: this.state.talk_detail?.id, donation: amount, }; console.log('add donate params ==>', param); callPostApi(ApiEndPoints.add_donation, param, data => { this.setState({loading: false}); if (data.code == StatusCode.SUCCESS) { let apiData = data.data; this.setState({donateViewShow: false}); // showDangerMsg('Successfully donate'); showDangerMsg(LiveDonateT.successMsg); console.log('add donate response data ==>', data); } else { showDangerMsg(data.message); } }); }; viewmoreLess = () => { if (this.state.talk_description.length > 200) { console.log('talk_description ==>', this.state.talk_description.length); return this.state.talk_description.slice(200, Infinity) && this.state.readMoreData == false ? 'Read more' : 'Read less'; } }; createDynamicLink = async () => { const link = await dynamicLinks().buildLink({ link: `${dynamicURLS.talk_share}${this.state.talk_id}`, ios: { bundleId: 'com.story.boardapp', appStoreId: appStoreId, }, android: { packageName: 'com.storiboard', minimumVersion: '17', }, // domainUriPrefix is created in your Firebase console domainUriPrefix: 'https://storiboard.page.link', // optional setup which updates Firebase analytics campaign // "banner". This also needs setting up before hand }); linkShare(linkShareDescription.talk_share, link); }; render() { // console.log('otherReson ===> ,', this.state.otherReson); // console.log('reportSelectText ===> ,', this.state.talk_detail); console.log('currentTime render ==>', this.state.currentTime); return ( <View style={{flex: 1}}> <Loader loading={this.state.loading} /> {this.state.fullScreenVideo === false ? ( <View style={{ flex: 1, backgroundColor: GColors.white, }} > {/* style={{ transform: [{ rotate: "90deg" }], width: screenHeight }} */} <StatusBar barStyle="light-content" backgroundColor={GColors.black} /> {/* Donate Modal Test */} <Modal visible={this.state.donateViewShow} transparent={true}> <View style={{flex: 1}}> <Loader loading={this.state.loading} /> {/* <Video // repeat={true} resizeMode={'cover'} source={{ uri: this.state.talk_detail.talk_video }} style={{ width: wp(100), height: hp(100), position: 'absolute' }} /> */} <View style={{flex: 1}} /> {this.state.donateViewShow === true && ( <View style={[styles.mainWhiteViewStyle]}> <View style={styles.whiteViewTopLineStyle} /> <TouchableOpacity onPress={() => this.setState({donateViewShow: false})} activeOpacity={activeOpacity} style={{ alignSelf: 'flex-end', marginRight: wp(5), marginTop: hp(2), }} > <Image source={icons.round_close_icon} resizeMode="contain" /> </TouchableOpacity> <Image style={styles.profileImageStyle} // source={{ uri: this.props.route.params?.isProfilImage }} source={{uri: this.state.talk_detail?.user_image}} resizeMode="cover" /> {/* isFirstName */} <Text style={styles.donatetoTextStyle}> {LiveDonateT.donateto + this.state.talk_detail?.first_name + ' ' + this.state.talk_detail?.last_name} </Text> <Text style={styles.yourgenerousTextStyle}> {LiveDonateT.yourgenerous} </Text> <Text style={styles.yourgenerousTextStyle}> {LiveDonateT.chooseyourdonation} </Text> <FlatList data={this.state.arrDonation} keyExtractor={data => data.id} renderItem={this.donationRenderItem} style={{marginBottom: hp(15), marginTop: hp(3)}} horizontal showsHorizontalScrollIndicator={false} /> </View> )} </View> </Modal> <Modal visible={this.state.playSpeedModal} animationType="slide" transparent={true} onRequestClose={() => alert('ok')} > <View style={{ backgroundColor: GColors.backGround_color, flex: 1, }} > <View style={{flex: 1}} /> <View style={{ backgroundColor: '#212121', justifyContent: 'flex-end', }} > <Text style={[styles.speedTextStyle, {marginTop: hp(1)}]} onPress={() => this.setState({ rate: 1, playSpeedModal: false, // paused: false }) } > {'1x' + ' '} </Text> <Text style={styles.speedTextStyle} onPress={() => this.setState({ rate: 1.25, playSpeedModal: false, // paused: false }) } > {'1.25x' + ' '} </Text> <Text style={styles.speedTextStyle} onPress={() => this.setState({ rate: 1.5, playSpeedModal: false, // paused: false }) } > {'1.5x' + ' '} </Text> <Text style={styles.speedTextStyle} onPress={() => this.setState({ rate: 1.75, playSpeedModal: false, // paused: false }) } > {'1.75x' + ' '} </Text> <Text style={[styles.speedTextStyle, {marginVertical: 0}]} onPress={() => this.setState({ rate: 2, playSpeedModal: false, //paused: false }) } > {'2x' + ' '} </Text> <LineView style={{marginVertical: hp(1)}} /> <TouchableOpacity activeOpacity={activeOpacity} onPress={() => this.setState({playSpeedModal: false, paused: false}) } style={{ marginStart: wp(5), flexDirection: 'row', alignItems: 'center', marginBottom: hp(2), }} > <Image style={{tintColor: GColors.white}} source={icons.close_icon} resizeMode="contain" /> <Text style={styles.speedModalTextStyle}>Cancel</Text> </TouchableOpacity> </View> </View> </Modal> {/* edit Talk modal */} <Modal visible={this.state.editTalkModal} animationType="none" transparent={true} > <View style={{ backgroundColor: GColors.backGround_color, flex: 1, justifyContent: 'center', alignItems: 'center', }} > <View style={{ backgroundColor: GColors.white, width: wp(90), borderRadius: commonBorderRadius, }} > <View style={{marginHorizontal: commonMarginHorizontal}}> <TouchableOpacity hitSlop={hitSlop} activeOpacity={activeOpacity} onPress={() => this.setState({editTalkModal: false})} style={{ alignSelf: 'flex-end', marginRight: wp(3), marginVertical: hp(1.5), }} > <Image source={icons.close_icon} resizeMode="cover" style={{ height: wp(5), aspectRatio: 1, tintColor: GColors.themecolor, }} /> </TouchableOpacity> <Text style={styles.editTalkTextStyle}>Edit Talk</Text> <Text style={styles.talkTitleDesTextStyle}> Talk Title:{' '} </Text> <CommonTextInput //placeholder={'CreateTalkT.talktitle'} value={this.state.talktitle} textInputStyle={styles.talkTitleDesTextStyle} // value={this.state.talk_detail?.title} onChangeText={text => this.setState({talktitle: text})} mainViewStyle={styles.talkDetailsModalTextInputStyle} /> <Text style={styles.talkTitleDesTextStyle}> Talk Description:{' '} </Text> <CommonTextInput //placeholder={CreateTalkT.talkdescription} value={this.state.talkdescription} textInputStyle={styles.talkTitleDesTextStyle} onChangeText={text => this.setState({talkdescription: text}) } mainViewStyle={{ height: hp(20), marginTop: hp(2), alignItems: 'baseline', marginBottom: hp(2), }} multiline /> <View style={{ flexDirection: 'row', alignSelf: 'flex-end', justifyContent: 'space-between', }} > <ThemeButton onPress={() => this.apicallEditTalk()} TouchableStyle={styles.nextBtnStyle} Text={'Save edit'} /> <ThemeButton onPress={() => Alert.alert( // "StoriBoard", '', 'Do you want to permanently delete this Talk?', [ { text: 'Cancel', onPress: () => console.log('Cancel Pressed'), style: 'cancel', }, { text: 'Yes', onPress: () => this.apicallDelete_talk(), }, ], {cancelable: false}, ) } //onPress={() => this.apicallEditTalk()} TouchableStyle={[ styles.nextBtnStyle, {marginLeft: wp(3)}, ]} Text={'Delete Talk'} textStyle={{ marginHorizontal: wp(2), textAlign: 'center', }} /> </View> </View> </View> </View> </Modal> {/* edit Talk modal */} {/* </View> */} <ScrollView bounces={false} showsVerticalScrollIndicator={false} keyboardShouldPersistTaps="handled" > <View> <View style={{}}> {/*////*/} <Video ignoreSilentSwitch="ignore" onEnd={this.onEnd} onLoad={this.onLoad} onLoadStart={this.onLoadStart} onProgress={this.onProgress} rate={this.state.rate} paused={ // true this.state.paused || this.state.fullScreenVideo === true } ref={videoPlayer => (this.videoPlayer = videoPlayer)} resizeMode={this.state.screenType} source={{uri: this.state.talk_detail.talk_video}} style={[ styles.media, {height: this.state.mediaLayoutHeight || hp(40)}, ]} /> </View> <MediaControls duration={this.state.duration} isLoading={this.state.isLoading} mainColor={GColors.themecolor} onFullScreen={this.onFullScreen} onPaused={this.onPaused} onReplay={this.onReplay} onSeek={this.onSeek} onSeeking={this.onSeeking} playerState={this.state.playerState} progress={this.state.currentTime} // sliderStyle={{containerStyle: {flex: 0, marginBottom: 0}}} toolbarStyle={{flex: 0}} sliderStyle={{ containerStyle: { flex: 0, marginBottom: 0, }, }} > <MediaControls.Toolbar> <View style={{ flexDirection: 'row', //alignItems: 'center', marginTop: hp(6), }} > <View> <TouchableOpacity onPress={() => this.props.navigation.goBack('')} hitSlop={hitSlop} activeOpacity={activeOpacity} > <Image resizeMode="contain" source={icons.round_back_icon} /> </TouchableOpacity> <TouchableOpacity activeOpacity={activeOpacity} onPress={() => this.setState({playSpeedModal: true})} style={{ marginTop: hp(1), }} > <Image style={{height: wp(8), aspectRatio: 1}} source={icons.playack_speed_icon} resizeMode="cover" /> {/* <Text style={[ styles.speedTextStyle { marginStart: wp(0), marginBottom: hp(0) }, ]} > Playback speed </Text> */} </TouchableOpacity> </View> <View style={{flex: 1}} /> {/* {this.state.talk_detail?.viewer_action === 'Donate' ? ( <ThemeButton Text={'Donate'} TouchableStyle={styles.headerDonateBtnStyle} // onPress={() => [ // this.props.navigation.navigate('LiveDonateScreen', { // isDonateAmount: // this.state.talk_detail?.donate_amount, // isProfilImage: this.state.talk_detail?.user_image, // isTalkVideo: this.state.talk_detail?.talk_video, // isFirstName: this.state.talk_detail?.first_name, // isLastName: this.state.talk_detail?.last_name, // isTalkId: this.state.talk_detail?.id // }), // this.setState({ paused: true }) // ]} onPress={() => { const donate = this.state.talk_detail?.donate_amount; const array = donate.split(','); this.setState({arrDonation: array}, () => { console.log( 'arrDonation ==>', this.state.arrDonation, ); this.setState({donateViewShow: true}); }); }} // onPress={() => [ // this.props.navigation.navigate('LiveDonateScreen', { // isDonateAmount: // this.state.talk_detail?.donate_amount, // isProfilImage: this.state.talk_detail?.user_image, // isTalkVideo: this.state.talk_detail?.talk_video, // isFirstName: this.state.talk_detail?.first_name, // isLastName: this.state.talk_detail?.last_name, // isTalkId: this.state.talk_detail?.id // }) // // this.setState({ paused: true }) // ]} /> ) : this.state.talk_detail?.viewer_action === 'Book me' ? ( <ThemeButton onPress={() => this.setState({showBookMeModal: true})} Text={'Book Me'} TouchableStyle={styles.headerDonateBtnStyle} /> ) : null} */} </View> </MediaControls.Toolbar> </MediaControls> </View> <View style={{marginHorizontal: wp(3.5), marginTop: hp(2.5)}}> <View style={{flexDirection: 'row', alignItems: 'center'}}> <Text style={styles.copeLossText} // onPress={() => this.setState({ addCommentModal: true })} > {this.state.talk_detail?.title} </Text> <View style={{flex: 1}} /> {this.state.user.id === this.state.talk_detail.user_id && ( // <Text // style={{ marginTop: hp(5) }} // onPress={() => this.setState({ editTalkModal: true })} // > // EDIT // </Text> <TouchableOpacity //style={{backgroundColor:'red'}} activeOpacity={activeOpacity} hitSlop={hitSlop} onPress={() => this.setState({editTalkModal: true})} > <Image source={Icons.edit_talk_icon} resizeMode="contain" /> </TouchableOpacity> )} </View> <View style={{ flexDirection: 'row', alignItems: 'center', marginVertical: hp(1), }} > <TouchableOpacity onPress={() => { this.setState({commentModal: true}); }} style={styles.commentBtn} hitSlop={{left: 5, right: 5, top: 5, bottom: 5}} activeOpacity={1} > <Text style={[styles.comment, {fontWeight: 'bold'}]}> {this.state.talk_detail.coments} <Text style={styles.commentBookingTextStyle}> {' '} {fearureTalkT.Comments} </Text> </Text> <Image source={icons.CommetDownArrow} style={{marginLeft: wp(1.5)}} /> </TouchableOpacity> <Text style={[ styles.comment, {marginStart: wp(3), fontWeight: 'bold'}, ]} > {this.state.talk_detail.bookings} <Text style={styles.commentBookingTextStyle}> {' '} {fearureTalkT.bookings} </Text> </Text> {this.state.talk_detail.viewer_action === 'Link to group' && ( <View style={{flexDirection: 'row'}}> <Image style={{ marginStart: wp(3), tintColor: GColors.black, }} source={icons.bottom_selected_groups_icon} resizeMode="contain" /> <Text onPress={() => { this.props.navigation.navigate( 'GroupDetailsPastScreen', { isAdmin: true, isUser_Id: this.state.user.id, isGroup_Id: this.state.talk_detail?.group_id, isCategory_Name: this.state.talk_detail?.category_name, }, ); }} style={[ styles.comment, {color: GColors.gray, marginStart: wp(1)}, ]} > Group </Text> </View> )} </View> <Text style={styles.groupAboutTextStyle}> {this.state.readMoreData == false ? this.state.talk_description.slice(0, 200) : this.state.talk_description.slice(0, Infinity)}{' '} <Text // onPress={() => this.setState({ readMoreData: true })} onPress={() => this.readMoreLessData()} style={{ color: GColors.black, fontFamily: FontFamily.bold, }} > {this.viewmoreLess()} </Text> </Text> </View> <View style={styles.lightHorizontalLine} /> <View style={{marginHorizontal: wp(4), flex: 1}}> <View style={{ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', marginTop: hp(1), }} > <TouchableOpacity style={styles.optionFiveBtns} activeOpacity={0.8} > <Image source={icons.eye_comment} style={styles.optionImage} resizeMode="contain" /> <Text style={styles.optionText}> {this.state.talk_detail.viewer} </Text> </TouchableOpacity> <TouchableOpacity style={styles.optionFiveBtns} activeOpacity={0.8} hitSlop={hitSlop} onPress={() => [ // this.setState({ isLiked: !this.state.isLiked }), this.apiAddTalkLikeUnlike(), ]} > <Image source={ this.state.talk_detail.is_like === true ? icons.heartSelected : icons.HeartUnselected } style={[ styles.optionImage, { tintColor: this.state.talk_detail.is_like === true ? null : GColors.gray, }, ]} resizeMode="contain" /> <Text style={styles.optionText}> {this.state.talk_detail.likes} </Text> </TouchableOpacity> <TouchableOpacity style={styles.optionFiveBtns} activeOpacity={0.8} onPress={() => { this.createDynamicLink(); }} > <Image source={icons.Icon_Share} style={styles.optionImage} resizeMode="contain" /> <Text style={styles.optionText}>{fearureTalkT.Share}</Text> </TouchableOpacity> <TouchableOpacity style={styles.optionFiveBtns} activeOpacity={0.8} onPress={() => this.apicallSaveTalk()} > <Image source={icons.save_video} style={[ styles.optionImage, { tintColor: this.state.talk_detail.is_save === true ? GColors.themecolor : null, }, ]} resizeMode="contain" /> <Text style={styles.optionText}>{fearureTalkT.Save}</Text> </TouchableOpacity> <TouchableOpacity onPress={() => this.setState({showMoreModal: true, paused: true}) } style={styles.optionFiveBtns} activeOpacity={0.8} > <Image source={icons.line_three_dot_icon} style={styles.optionImage} resizeMode="contain" /> <Text style={styles.optionText}>{fearureTalkT.More}</Text> </TouchableOpacity> </View> {this.state.user.id != this.state.talk_detail.user_id && ( <View style={{ flexDirection: 'row', alignItems: 'center', marginTop: hp(2), backgroundColor: GColors.light_white, height: hp(10), }} > <TouchableOpacity activeOpacity={activeOpacity} onPress={() => { this.props.navigation.navigate('OtherProfileScreen', { user_id: this.state.talk_detail.user_id, }); }} style={{ marginLeft: wp(3), flex: 1, flexDirection: 'row', }} > <View> <Image source={{uri: this.state.talk_detail.user_image}} resizeMode="cover" style={{ height: wp(12), aspectRatio: 1, borderRadius: 100, }} /> </View> <View style={{marginLeft: wp(3), flex: 1}}> <Text numberOfLines={1} style={styles.userName}> {this.state.talk_detail.first_name + ' ' + this.state.talk_detail.last_name} </Text> <Text style={styles.followCount}> {this.state.talk_detail.followers}{' '} {fearureTalkT.Followers} </Text> </View> </TouchableOpacity> <TouchableOpacity onPress={() => this.apicallFollow()} style={styles.followBtn} activeOpacity={1} > <Text style={styles.followText}> {this.state.isFollowing === false ? fearureTalkT.Follow : 'Unfollow'} </Text> </TouchableOpacity> </View> )} <View style={styles.moreTalkMain}> <Text style={styles.MoreTalkText}> {fearureTalkT.moreTalk} </Text> <Text onPress={() => { this.props.navigation.navigate('ViewAllVideoHomeScreen', { isTalk_id: this.state.talk_id, getTag: this.getTag, // tag: this.props.route.params?.isParam, // category_id: this.props.route.params?.isCatId }); }} style={styles.viewAllText} > {fearureTalkT.viewAll} </Text> </View> {/* <ScrollView contentContainerStyle={{flex:1}} > */} <FlatList style={{marginTop: hp(1), marginBottom: hp(1)}} data={this.state.arrVideoData} renderItem={({item, index}) => this.renderViewData(item, index) } showsVerticalScrollIndicator={false} keyExtractor={(item, index) => index.toString()} /> {/* </ScrollView> */} </View> <Modal style={{zIndex: 0}} animationType="slide" transparent={true} visible={this.state.commentModal} // visible={this.state.isNameModal} animated={true} > <View style={{ flex: 1, zIndex: 0, backgroundColor: 'rgba(35, 45, 62, 0.73)', }} > <View style={{ flex: 1, marginTop: hp(25), borderTopLeftRadius: 25, borderTopRightRadius: 25, backgroundColor: GColors.white, opacity: 1.0, width: '100%', }} > <View style={{ flexDirection: 'row', alignItems: 'center', marginTop: hp(2), }} > <Text style={styles.modalComment}> {this.state.talk_detail.coments}{' '} <Text style={{color: GColors.gray}}>Comments</Text> </Text> <View style={{flex: 1}} /> <TouchableOpacity activeOpacity={1} style={{ alignSelf: 'flex-end', marginRight: wp(6), }} onPress={() => this.setState({commentModal: false})} > <Image source={icons.crossIcon} /> </TouchableOpacity> </View> <View style={[styles.lightHorizontalLine, {marginTop: hp(1)}]} /> <View style={{ marginHorizontal: wp(6.7), marginTop: hp(2), flex: 1, backgroundColor: 'White', width: '100%', }} > {/* <FlatList bounces={false} data={this.state.arrCommentData} renderItem={({ item, index }) => this.renderCommentData(item, index) } showsVerticalScrollIndicator={false} keyExtractor={(item, index) => index.toString()} /> */} <SwipeListView disableRightSwipe disableLeftSwipe data={this.state.arrCommentData} renderItem={({item, index}) => this.renderCommentData(item, index) } //renderHiddenItem={index => this.renderHiddenItem(index)} //rightOpenValue={-80} previewRowKey={'0'} previewOpenValue={10} previewOpenDelay={100} // onSwipeValueChange={this.onSwipeClose} useNativeDriver={false} style={{backgroundColor: 'Black'}} onEndReachedThreshold={0.5} onEndReached={() => { if ( !this.state.fetchingStatusCompleted && this.state.hasMoreDataCompleted && this.state.arrCommentData.length >= 10 ) { this.handleLoadMore(); } }} /> </View> <View style={styles.messageTypeViewStyle}> <TextInput placeholder={'Write a comment...'} placeholderTextColor={GColors.gray} value={this.state.Comments} onChangeText={text => this.setState({Comments: text})} style={{ width: wp(80), paddingHorizontal: wp(4), color: GColors.black, fontSize: Fonts.fs14, fontFamily: FontFamily.regular, }} /> <View style={{flex: 1}} /> <TouchableOpacity onPress={() => { if (this.state.Comments.trim() == '') { showDangerMsg('Please enter comment'); } else { this.apicallAddComment(); } }} activeOpacity={0.9} > <Image source={icons.chat_detail_send_message_icon} resizeMode="contain" style={{marginRight: wp(3)}} /> </TouchableOpacity> </View> {/* <TouchableOpacity activeOpacity={1} style={{ alignItems: "flex-end", marginRight: wp(5) }} onPress={() => this.setState({ addCommentModal: true, commentModal: false, }) } > <Image source={icons.bottom_selected_post_icon} resizeMode="contain" /> </TouchableOpacity> */} </View> </View> </Modal> <Modal style={{zIndex: 0}} animationType="slide" transparent={true} visible={this.state.addCommentModal} // visible={this.state.isNameModal} animated={true} > <View style={{ flex: 1, zIndex: 0, backgroundColor: 'rgba(35, 45, 62, 0.73)', }} > <View style={{ marginTop: hp(37), flex: 1, bottom: 0, borderTopLeftRadius: 25, borderTopRightRadius: 25, backgroundColor: GColors.white, opacity: 1.0, width: '100%', }} > <View style={{ height: hp(0.6), width: wp(9.6), borderRadius: 2, opacity: 0.5, backgroundColor: Colors.gray, alignSelf: 'center', }} /> <View> <Image source={icons.talkProfile} style={styles.modalProfile} /> </View> <View style={styles.TextInputDescriptionView}> <TextInput style={{ flex: 1, marginTop: hp(2), textAlignVertical: 'top', fontSize: Fonts.fs14, color: GColors.black, padding: hp(2), }} placeholder="Write Comment..." value={this.state.comment} onChangeText={text => this.setState({comment: text})} placeholderTextColor={GColors.gray} multiline={true} /> </View> <ThemeButton TouchableStyle={{ marginHorizontal: wp(5), marginBottom: hp(5), }} Text="Add Comment" onPress={() => this.setState({addCommentModal: false})} /> </View> </View> </Modal> {/* more modal */} <Modal animationType="slide" transparent={true} visible={this.state.showMoreModal} animated={true} > <View style={styles.modalMainViewStyle}> <View style={{flex: 1}} /> <View style={{ marginHorizontal: commonMarginHorizontal, marginBottom: hp(3), }} > {this.state.talk_detail.viewer_action === 'Link to group' && ( <TouchableOpacity // onPress={() => [ // // this.props.navigation.navigate("GroupDetailsPastScreen"), // alert('Under Development'), // this.setState({ showMoreModal: false }) // ]} onPress={() => { this.setState({showMoreModal: false}); this.props.navigation.navigate( 'GroupDetailsPastScreen', { isAdmin: true, isUser_Id: this.state.user.id, isGroup_Id: this.state.talk_detail?.group_id, isCategory_Name: this.state.talk_detail?.category_name, }, ); }} activeOpacity={activeOpacity} style={styles.moreModalTouchableStyle} > <Text style={styles.moreModalTextStyle}> {fearureTalkT.visitGroup} </Text> </TouchableOpacity> )} <TouchableOpacity activeOpacity={activeOpacity} onPress={() => this.setState( { showMoreModal: false, showReportVideo: true, isSelectedReportVideo: -1, }, () => { this.setState({otherReson: ''}); }, ) } style={[ styles.moreModalTouchableStyle, { borderBottomLeftRadius: commonBorderRadius, borderBottomRightRadius: commonBorderRadius, borderTopRightRadius: this.state.talk_detail.viewer_action != 'Link to group' ? commonBorderRadius : 0, borderTopLeftRadius: this.state.talk_detail.viewer_action != 'Link to group' ? commonBorderRadius : 0, marginTop: hp(0.5), }, ]} > <Text style={styles.moreModalTextStyle}> {fearureTalkT.reportVideo} </Text> </TouchableOpacity> <TouchableOpacity onPress={() => this.setState({showMoreModal: false, paused: false}) } activeOpacity={activeOpacity} style={[ styles.moreModalTouchableStyle, { borderRadius: commonBorderRadius, marginTop: hp(1.5), }, ]} > <Text style={[styles.moreModalTextStyle, {fontWeight: '400'}]} > {fearureTalkT.cancel} </Text> </TouchableOpacity> </View> </View> </Modal> {/* more modal */} {/* report video modal */} <Modal animationType="slide" transparent={true} visible={this.state.showReportVideo} animated={true} > <KeyboardAvoidingView keyboardShouldPersistTaps="handled" behavior="padding" style={styles.modalContainer} > <View style={[ styles.modalMainViewStyle, {justifyContent: 'center'}, ]} > <View style={[styles.modalWhiteViewStyle, {borderRadius: 15}]} > <Text style={styles.rvModalReportVideoTextStyle}> {fearureTalkT.reportVideo} </Text> <LineView style={styles.rvModalLineViewStyle} /> <FlatList data={this.state.arrReportVideo} keyExtractor={data => data.id} renderItem={this.reportVideoRenderItem} showsVerticalScrollIndicator={false} /> {/*{this.state.isReportSelected === -1 && (*/} <View style={styles.otherViewStyle}> <Text style={styles.otherTextStyle}>Other :</Text> <CommonTextInput onPress={() => this.setState({reportSelectText: ''})} placeholder={'Enter reason'} value={this.state.otherReson} onChangeText={text => this.setState({ isReportSelected: -1, otherReson: text, reportSelectText: '', }) } mainViewStyle={{width: wp(70), marginStart: wp(2)}} /> </View> {/*)}*/} <LineView style={styles.rvModalLineViewStyle} /> <View style={{ flexDirection: 'row', padding: wp(4), alignSelf: 'flex-end', }} > <TouchableOpacity onPress={() => this.setState({showReportVideo: false}) } activeOpacity={activeOpacity} > <Text style={styles.rvModalThemeTextStyle}> {fearureTalkT.cancel} </Text> </TouchableOpacity> <TouchableOpacity onPress={this.handleReportVideoClick} activeOpacity={activeOpacity} > <Text style={styles.rvModalThemeTextStyle}> {fearureTalkT.report} </Text> </TouchableOpacity> </View> </View> </View> </KeyboardAvoidingView> </Modal> {/* report video modal */} {/* book me, donate extra modal */} <Modal animationType="slide" transparent={true} visible={this.state.showExtraModal} animated={true} > <View style={styles.modalMainViewStyle}> <View style={{flex: 1}} /> <View style={{ marginHorizontal: commonMarginHorizontal, marginBottom: hp(3), }} > <TouchableOpacity onPress={() => this.setState({ showBookMeModal: true, showExtraModal: false, }) } activeOpacity={activeOpacity} style={styles.moreModalTouchableStyle} > <Text style={styles.moreModalTextStyle}> {fearureTalkT.bookme} </Text> </TouchableOpacity> <TouchableOpacity onPress={() => [ this.props.navigation.navigate('LiveDonateScreen'), this.setState({showExtraModal: false}), ]} activeOpacity={activeOpacity} style={[ styles.moreModalTouchableStyle, { marginTop: hp(0.3), borderTopLeftRadius: 0, borderTopRightRadius: 0, }, ]} > <Text style={styles.moreModalTextStyle}> {fearureTalkT.donate} </Text> </TouchableOpacity> <TouchableOpacity activeOpacity={activeOpacity} onPress={() => [ this.setState({ showMoreModal: false, showReportVideo: true, isSelectedReportVideo: -1, }), this.props.navigation.navigate('groups'), ]} style={[ styles.moreModalTouchableStyle, { borderBottomLeftRadius: commonBorderRadius, borderBottomRightRadius: commonBorderRadius, borderTopRightRadius: 0, borderTopLeftRadius: 0, marginTop: hp(0.3), }, ]} > <Text style={styles.moreModalTextStyle}> {fearureTalkT.findMore} </Text> </TouchableOpacity> <TouchableOpacity onPress={() => this.setState({showExtraModal: false})} activeOpacity={activeOpacity} style={[ styles.moreModalTouchableStyle, { borderRadius: commonBorderRadius, marginTop: hp(1.5), }, ]} > <Text style={[styles.moreModalTextStyle, {fontWeight: '400'}]} > {fearureTalkT.cancel} </Text> </TouchableOpacity> </View> </View> </Modal> {/* book me, donate extra modal */} {/* book me modal */} <Modal animationType="slide" transparent={true} visible={this.state.showBookMeModal} animated={true} > {/* <TouchableOpacity activeOpacity={1} style={{ backgroundColor: GColors.backGround_color, flex: 1 }} > */} <TouchableOpacity activeOpacity={1} onPress={() => this.setState({showBookMeModal: false})} style={{flex: 1}} /> <View style={[styles.modalWhiteViewStyle, {height: hp(75)}]}> {/* <View style={styles.whiteViewTopLineStyle} /> */} <ScrollView bounces={false} showsVerticalScrollIndicator={false} keyboardShouldPersistTaps="handled" > <TouchableOpacity activeOpacity={1} onPress={() => this.setState({showBookMeModal: false})} style={{ marginTop: hp(2), alignSelf: 'flex-end', marginEnd: wp(6), }} > <Image source={icons.round_close_icon} resizeMode="contain" /> </TouchableOpacity> <View style={{marginHorizontal: commonMarginHorizontal}}> <Text style={styles.bookmeModalBookTextStyle}> {BookMeT.bookme} </Text> <Text style={styles.bookmeModalImaybeTextStyle}> {BookMeT.imaybe}{' '} <Text style={{color: GColors.black}}> {BookMeT.speakerfee + this.state.talk_detail?.speaker_fee} {/* speaker_fee */} </Text> </Text> <View style={styles.bookmeModalCenterViewStyle}> <Text style={styles.bookmeModalCenterTitleTextStyle}> {BookMeT.yourdetails} </Text> <CommonTextInput mainViewStyle={styles.bookmeModalTextInputStyle} placeholder={BookMeT.name} value={this.state.name} onChangeText={text => this.setState({name: text})} /> <CommonTextInput mainViewStyle={styles.bookmeModalTextInputStyle} placeholder={BookMeT.email} value={this.state.email} onChangeText={text => this.setState({email: text})} keyboardType="email-address" autoCapitalize="none" /> <View style={{flexDirection: 'row'}}> <CommonTextInput mainViewStyle={styles.bookmeModalTextInputStyle} placeholder={BookMeT.mobile} value={this.state.mobile} onChangeText={text => this.setState({mobile: text})} keyboardType="number-pad" // Image={icons.round_mobile_icon} maxLength={15} /> </View> </View> <View style={styles.bookmeModalCenterViewStyle}> <Text style={styles.bookmeModalCenterTitleTextStyle}> {BookMeT.eventdetails} </Text> {/* <CommonTextInput mainViewStyle={styles.bookmeModalTextInputStyle} placeholder={BookMeT.type} value={this.state.type} onChangeText={(text) => this.setState({ type: text })} /> */} <View style={styles.typeViewStyle}> <Dropdown style={{width: wp(73)}} placeholderStyle={[ styles.typeTextInputStyle, {color: GColors.gray}, ]} selectedTextStyle={[ styles.typeTextInputStyle, {color: GColors.black}, ]} // inputSearchStyle={styles.inputSearchStyle} placeholder={BookMeT.type} data={this.state.DropDownMenu} maxHeight={hp(20)} labelField="label" valueField="value" onChange={item => { this.setState({type: item.value}); }} /> </View> <CommonTextInput mainViewStyle={styles.bookmeModalTextInputStyle} placeholder={BookMeT.organisationname} value={this.state.organisationName} onChangeText={text => this.setState({organisationName: text}) } /> <View style={{ flexDirection: 'row', justifyContent: 'space-between', marginTop: hp(2), }} > <CommonTextInput mainViewStyle={ styles.bookmeModalDateTimeTextInputStyle } placeholder={BookMeT.date} value={this.state.date} onChangeText={text => this.setState({date: text})} Image={icons.calendar} editable={false} onPress={() => this.setState({isDatePickerVisible: true}) } /> <CommonTextInput mainViewStyle={ styles.bookmeModalDateTimeTextInputStyle } placeholder={BookMeT.time} value={this.state.time} onChangeText={text => this.setState({time: text})} editable={false} Image={icons.clock_icon} onPress={() => this.setState({isTimePickerVisible: true}) } /> <DateTimePickerModal // maximumDate={new Date()} minimumDate={new Date()} isVisible={this.state.isDatePickerVisible} onConfirm={date => { this.setState( { isDatePickerVisible: false, // selectedDate : date date: moment(date).format('DD/MM/YYYY'), }, () => console.log('date ==> ', date), ); }} onCancel={() => { this.setState({isDatePickerVisible: false}); }} /> <DateTimePickerModal isVisible={this.state.isTimePickerVisible} mode="time" locale="en_GB" onConfirm={time => { this.setState({ isTimePickerVisible: false, // selectedDate : date time: moment(time).format('HH:mm'), }); }} onCancel={() => { this.setState({isTimePickerVisible: false}); }} /> </View> <CommonTextInput mainViewStyle={styles.bookmeModalTextInputStyle} placeholder={BookMeT.audienceno} value={this.state.audienceno} onChangeText={text => this.setState({audienceno: text}) } keyboardType="number-pad" maxLength={5} /> </View> <ThemeButton TouchableStyle={{ marginTop: hp(3), marginBottom: hp(3), }} Text={BookMeT.sendrequest} onPress={() => this.bookmeValidation()} //onPress={() => this.setState({ showBookMeModal: false })} /> </View> </ScrollView> </View> {/* </TouchableOpacity> */} </Modal> {/* book me modal */} </ScrollView> </View> ) : ( // Fullscreen Video <> <StatusBar hidden translucent={true} /> <Modal animationType={'fade'} supportedOrientations={['portrait', 'landscape']} transparent={true} statusBarTranslucent={true} > <View style={styles.fullscreenVideoModal} onLayout={event => { const {layout} = event.nativeEvent; this.setState({ videoDimensions: layout, }); }} > <View style={styles.fullscreenVideoContainer}> <Video ignoreSilentSwitch="ignore" source={{uri: this.state.talk_detail.talk_video}} onEnd={this.onEnd} onLoad={this.onLoad} onLoadStart={this.onLoadStart} onProgress={this.onProgress} rate={this.state.rate} paused={ this.state.paused || this.state.fullScreenVideo === false } style={styles.fullscreenVideo} resizeMode="contain" ref={videoPlayer => (this.videoPlayer = videoPlayer)} /> <MediaControls duration={this.state.duration} isLoading={this.state.isLoading} mainColor={GColors.themecolor} onFullScreen={this.onFullScreen} onPaused={this.onPaused} onReplay={this.onReplay} onSeek={this.onSeek} onSeeking={this.onSeeking} playerState={this.state.playerState} progress={this.state.currentTime} > <MediaControls.Toolbar> <View style={{ flexDirection: 'row', marginTop: hp(5), }} > <View> <TouchableOpacity onPress={this.onFullScreen} hitSlop={hitSlop} activeOpacity={activeOpacity} > <Image resizeMode="contain" source={icons.round_back_icon} style={{ tintColor: GColors.white, }} /> </TouchableOpacity> <TouchableOpacity activeOpacity={activeOpacity} onPress={() => this.setState({ playSpeedModal: true, paused: true, }) } style={{ marginTop: hp(2), }} > <Image style={{ height: wp(8), aspectRatio: 1, tintColor: GColors.white, }} source={icons.playack_speed_icon} resizeMode="cover" /> </TouchableOpacity> </View> <View style={{flex: 1}} /> {/* {this.state.talk_detail?.viewer_action === 'Donate' ? ( <ThemeButton Text={'Donate'} TouchableStyle={styles.headerDonateBtnStyle} onPress={() => [ this.props.navigation.navigate( 'LiveDonateScreen', { isDonateAmount: this.state.talk_detail?.donate_amount, isProfilImage: this.state.talk_detail?.user_image, isTalkVideo: this.state.talk_detail?.talk_video, isFirstName: this.state.talk_detail?.first_name, isLastName: this.state.talk_detail?.last_name, isTalkId: this.state.talk_detail?.id, }, ), this.setState({paused: true}), ]} /> ) : this.state.talk_detail?.viewer_action === 'Book me' ? ( <ThemeButton onPress={() => this.setState({showBookMeModal: true}) } Text={'Book Me'} TouchableStyle={styles.headerDonateBtnStyle} /> ) : null} */} </View> </MediaControls.Toolbar> </MediaControls> </View> </View> </Modal> </> )} </View> ); } apiAddTalkLikeUnlike = () => { this.setState({loading: true}); let param = {talk_id: this.state.talk_id}; callPostApi(ApiEndPoints.talk_like_unlike, param, data => { console.log('PORPSSS like', param); this.setState({loading: false}); if (data.code == StatusCode.SUCCESS) { let apiData = data.data; console.log('response ===> ', data); this.apicallTalkDetails(); } else { showDangerMsg(data.message); } }); }; apiAddTalkViewers = () => { this.setState({loading: true}); let param = {talk_id: this.state.talk_id}; callPostApi(ApiEndPoints.add_talk_viewer, param, data => { this.setState({loading: false}); if (data.code == StatusCode.SUCCESS) { let apiData = data.data; } else { showDangerMsg(data.message); } }); }; apiAddTalkMoreViewers = item => { this.setState({loading: true}); let param = {talk_id: item}; callPostApi(ApiEndPoints.add_talk_viewer, param, data => { this.setState({loading: false}); if (data.code == StatusCode.SUCCESS) { let apiData = data.data; } else { showDangerMsg(data.message); } }); }; apicallTalkDetails = () => { this.setState({loading: true}); let param = {id: this.state.talk_id}; callPostApi(ApiEndPoints.talk_detail, param, data => { console.log('PORPSSS TALK detail', param); this.setState({loading: false}); if (data.code == StatusCode.SUCCESS) { let apiData = data.data; this.setState( { talk_detail: apiData, talk_description: apiData.description, //isFollow: apiData.is_follow, talktitle: apiData.title, talkdescription: apiData.description, }, () => { this.apicallFollowers(); }, ); console.log( '==================================== TALK DETAILS RESPONSE', ); console.log(apiData); console.log('===================================='); } else { showDangerMsg(data.message); } }); }; apicallMoreTalkDetails = item => { // console.log("ID ===> ", id); this.setState({loading: true}); let param = {id: item}; callPostApi(ApiEndPoints.talk_detail, param, data => { this.setState({loading: false}); if (data.code == StatusCode.SUCCESS) { let apiData = data.data; this.setState( { talk_detail: apiData, talk_description: apiData.description, //isFollow: apiData.is_follow, talktitle: apiData.title, talkdescription: apiData.description, }, () => { this.apicallFollowers(); }, ); } else { showDangerMsg(data.message); } }); }; apicallFeaturedTalks = () => { this.setState({loading: true}); let param = { page: 1, tag: this.props.route.params?.isParam === 'featured_talk' ? 'featured_talk' : '', category_id: this.props.route.params?.isCatId != '' ? this.props.route.params?.isCatId : '', }; callPostApi(ApiEndPoints.talk_list, param, data => { console.log('MORE TALK LIST PARAM', param); this.setState({loading: false}); if (data.code == StatusCode.SUCCESS) { let apiData = data.data; this.setState({arrVideoData: apiData}); // this.apicallMyTalkList(); console.log('MORE TALK LIST response list ===>', apiData); } }); }; apicallCommentList = () => { this.setState({loading: true}); let param = {talk_id: this.state.talk_id, page: this.state.page}; callPostApi(ApiEndPoints.talk_comment_list, param, data => { console.log('response list Comment PARAMS===>', param); this.setState({loading: false}); if (data.code == StatusCode.SUCCESS) { let apiData = data.data; this.setState({ arrCommentData: this.state.page == 1 ? apiData : [...this.state.arrCommentData, ...apiData], }); console.log('response list Comment list ===>', apiData); } else { this.setState({ arrCommentData: this.state.page == 1 ? [] : [...this.state.arrCommentData], }); } }); }; apicallAddComment = () => { this.setState({loading: true}); let param = {talk_id: this.state.talk_id, comment: this.state.Comments}; callPostApi(ApiEndPoints.add_talk_comment, param, data => { console.log('response list add Comment PARAMS===>', param); console.log('response list add Comment Data===>', data); this.setState({loading: false}); if (data.code == StatusCode.SUCCESS) { let apiData = data.data; this.setState( prevState => ({ talk_detail: { ...prevState.talk_detail, coments: this.state.talk_detail.coments + 1, }, Comments: '', page: 1, }), () => { this.apicallCommentList(); }, ); } }); }; apicallSaveTalk = () => { this.setState({loading: true}); let param = {talk_id: this.state.talk_id}; callPostApi(ApiEndPoints.talk_save_unsave, param, data => { console.log('SAVE TALK PARAMS===>', param); this.setState({loading: false}); if (data.code == StatusCode.SUCCESS) { let apiData = data.data; // this.apicallMyTalkList(); console.log('response SAVE ===>', data); this.apicallTalkDetails(); } else { showDangerMsg(data.message); } }); }; apicallLikeUnlikeComment = item => { console.log('item ==> ', item); this.setState({loading: true}); let param = {comment_id: item}; callPostApi(ApiEndPoints.talk_comment_like_unlike, param, data => { console.log('LIKE UNLIKE TALK PARAMS===>', param); this.setState({loading: false}); if (data.code == StatusCode.SUCCESS) { let apiData = data.data; // this.apicallMyTalkList(); console.log('LIKE UNLIKE response SAVE ===>', data); this.apicallCommentList(); } else { showDangerMsg(data.message); } }); }; apicallReportTalk = () => { this.setState({loading: true}); let param = { talk_id: this.state.talk_id, report: this.state.reportSelectText != '' ? this.state.reportSelectText : this.state.otherReson, }; console.log('PARAMS report ==> ', param); callPostApi(ApiEndPoints.add_talk_report, param, data => { console.log('report PARAMS===>', param); this.setState({loading: false}); if (data.code == StatusCode.SUCCESS) { let apiData = data.data; // this.apicallMyTalkList(); showDangerMsg('This video has been reported'), this.setState({ showReportVideo: false, otherReson: '', isReportSelected: -1, }); console.log('response report ===>', data); } else { showDangerMsg(data.message); } }); }; apicallEditTalk = () => { this.setState({loading: true}); let param = { id: this.state.talk_id, title: this.state.talktitle, description: this.state.talkdescription, }; callPostApi(ApiEndPoints.edit_talk, param, data => { this.setState({loading: false}); if (data.code == StatusCode.SUCCESS) { let apiData = data.data; this.setState({editTalkModal: false}); } else { showDangerMsg(data.message); } }); }; goBack() { const {navigation, route} = this.props; navigation.goBack(); route.params.onSelect({selected: true}); } apicallDelete_talk = () => { this.setState({loading: true}); let param = { id: this.state.talk_id, }; callPostApi(ApiEndPoints.delete_talk, param, data => { console.log('delete_talk PARAMS===>', param); this.setState({loading: false}); if (data.code == StatusCode.SUCCESS) { // this.apicallMyTalkList(); console.log('response delete_talk ===>', data); this.setState({editTalkModal: false}); //this.apicallTalkDetails(); this.goBack(); //this.props.navigation.goBack(); } else { showDangerMsg(data.message); } }); }; apicallBookMe = () => { this.setState({loading: true}); let param = { talk_id: this.state.talk_id, talk_user_id: this.state.user?.id, name: this.state.name, email: this.state.email, mobile_number: this.state.mobile, type: this.state.type, organisation_name: this.state.organisationName, date: this.state.date, time: this.state.time, audience_no: this.state.audienceno, }; console.log('BOOK ME params ==>', param); callPostApi(ApiEndPoints.book_me, param, data => { this.setState({loading: false}); if (data.code == StatusCode.SUCCESS) { let apiData = data.data; showSuccessMsg(PermissionT.send_request); this.setState({showBookMeModal: false}); console.log('book me response data ==>', data); } else { showDangerMsg(data.message); } }); }; } const styles = StyleSheet.create({ media: { width: '100%', alignItems: 'center', justifyContent: 'center', }, fullscreenVideoModal: { flex: 1, backgroundColor: 'transparent', }, fullscreenVideoContainer: { overflow: 'hidden', backgroundColor: '#000', flex: 1, alignSelf: 'stretch', justifyContent: 'space-between', }, fullscreenVideo: { overflow: 'hidden', position: 'absolute', top: 0, right: 0, bottom: 0, left: 0, }, copeLossText: { color: GColors.black, fontFamily: FontFamily.bold, fontSize: Fonts.fs16, }, commentBtn: { alignItems: 'center', flexDirection: 'row', }, comment: { color: GColors.black, fontFamily: FontFamily.bold, fontSize: Fonts.fs12, }, lightHorizontalLine: { marginTop: hp(1), height: 0.5, backgroundColor: '#838589', opacity: 0.5, }, optionFiveBtns: { marginTop: hp(1), alignItems: 'center', }, optionImage: { height: hp(2.5), width: wp(5), }, optionText: { color: GColors.black, marginTop: hp(0.5), fontSize: Fonts.fs12, }, userName: { fontSize: Fonts.fs16, color: GColors.black, fontFamily: FontFamily.bold, }, followCount: { fontSize: Fonts.fs12, color: GColors.black, fontFamily: FontFamily.bold, }, followBtn: { borderRadius: 8, backgroundColor: GColors.themecolor, }, followText: { fontSize: Fonts.fs12, color: GColors.white, marginVertical: hp(1), marginHorizontal: wp(5), }, moreTalkMain: { flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', marginTop: hp(1.5), }, MoreTalkText: { fontSize: Fonts.fs15, fontFamily: FontFamily.bold, color: GColors.black, }, viewAllText: { fontSize: Fonts.fs13, color: GColors.black, }, disciption: { fontSize: Fonts.fs15, color: GColors.black, fontWeight: '700', }, likeText: { marginLeft: wp(1), color: GColors.black, fontSize: Fonts.fs12, }, viewText: { marginLeft: wp(1), color: GColors.black, fontSize: Fonts.fs12, }, nameText: { color: GColors.gray, fontSize: Fonts.fs12, }, modalComment: { marginLeft: wp(5), color: GColors.black, fontSize: Fonts.fs18, fontWeight: 'bold', }, commentDisc: { marginTop: hp(0.5), color: GColors.gray, fontSize: Fonts.fs14, }, commenter: { color: GColors.black, fontSize: Fonts.fs16, fontFamily: FontFamily.bold, }, modalProfile: { height: hp(16), aspectRatio: 1, marginTop: hp(3), alignSelf: 'center', }, TextInputDescriptionView: { flexDirection: 'row', backgroundColor: '#FAFAFA', marginHorizontal: wp(5), marginTop: hp(1.5), height: hp(23), borderRadius: hp(1), marginBottom: hp(5), }, modalMainViewStyle: { backgroundColor: GColors.backGround_color, width: wp(100), height: hp(100), }, modalWhiteViewStyle: { backgroundColor: GColors.white, borderRadius: 40, }, moreModalTouchableStyle: { backgroundColor: GColors.white, padding: wp(5), borderTopLeftRadius: commonBorderRadius, borderTopRightRadius: commonBorderRadius, alignItems: 'center', }, moreModalTextStyle: { fontSize: Fonts.fs18, fontFamily: FontFamily.regular, fontWeight: '500', color: GColors.dark_black, }, rvModalReportVideoTextStyle: { fontSize: Fonts.fs18, fontFamily: FontFamily.regular, fontWeight: '700', color: GColors.black, marginHorizontal: wp(5), marginTop: hp(3), }, rvModalLineViewStyle: { marginTop: hp(1.5), }, reportVideoRenderTextTitle: { fontSize: Fonts.fs14, fontFamily: FontFamily.regular, fontWeight: '500', color: GColors.black, marginStart: wp(3), }, rvModalThemeTextStyle: { fontSize: Fonts.fs16, fontFamily: FontFamily.regular, fontWeight: '500', color: GColors.themecolor, marginStart: wp(5), }, whiteViewTopLineStyle: { marginTop: hp(2), height: hp(0.6), width: wp(9.6), borderRadius: 2, opacity: 0.5, backgroundColor: GColors.gray, alignSelf: 'center', }, bookmeModalBookTextStyle: { fontSize: Fonts.fs25, fontFamily: FontFamily.regular, fontWeight: '700', color: GColors.black, //marginTop: hp(2), }, bookmeModalImaybeTextStyle: { fontSize: Fonts.fs14, fontFamily: FontFamily.regular, fontWeight: '400', color: GColors.gray, marginTop: hp(1), }, bookmeModalCenterViewStyle: { width: wp(90), //alignItems: 'center', padding: wp(5), marginEnd: wp(3), backgroundColor: GColors.white, shadowColor: GColors.gray, shadowOffset: {width: wp(1), height: hp(0.6)}, shadowOpacity: 0.3, shadowRadius: 8, elevation: 5, borderRadius: commonBorderRadius, marginTop: hp(3), }, bookmeModalCenterTitleTextStyle: { fontSize: Fonts.fs18, fontFamily: FontFamily.regular, fontWeight: '700', color: GColors.navy_black, }, bookmeModalTextInputStyle: { marginTop: hp(2), }, bookmeModalDateTimeTextInputStyle: { width: wp(38), }, groupAboutTextStyle: { fontSize: Fonts.fs14, fontFamily: FontFamily.regular, fontWeight: '400', color: GColors.gray, }, typeViewStyle: { backgroundColor: GColors.light_white, marginTop: hp(3), padding: 15, borderRadius: commonBorderRadius, flexDirection: 'row', alignItems: 'center', }, typeTextInputStyle: { fontSize: Fonts.fs16, fontFamily: FontFamily.regular, fontWeight: '500', color: GColors.black, }, messageTypeViewStyle: { flexDirection: 'row', marginBottom: hp(3), height: hp(7.4), alignItems: 'center', borderRadius: commonBorderRadius, backgroundColor: GColors.light_white, width: wp(90), alignSelf: 'center', }, headerDonateBtnStyle: { width: wp(22), height: hp(4), }, rowBack: { alignItems: 'center', backgroundColor: GColors.red, flexDirection: 'row', // justifyContent: "space-between", height: hp(5.5), // paddingLeft: 15, }, backRightBtn: { alignItems: 'center', bottom: 0, justifyContent: 'center', position: 'absolute', top: 0, width: 75, }, backRightBtnRight: { backgroundColor: 'red', right: 0, }, otherViewStyle: { marginHorizontal: commonMarginHorizontal, flexDirection: 'row', alignItems: 'center', }, otherTextStyle: { fontSize: Fonts.fs16, fontFamily: FontFamily.regular, fontWeight: '900', color: GColors.black, }, speedTextStyle: { fontSize: Fonts.fs15, fontFamily: FontFamily.regular, fontWeight: '500', color: GColors.white, marginStart: wp(5), marginBottom: hp(1), }, commentBookingTextStyle: { color: GColors.gray, fontFamily: FontFamily.regular, }, speedModalTextStyle: { color: GColors.white, marginStart: wp(2), fontSize: Fonts.fs14, }, video: { top: 0, left: 0, bottom: 0, right: 0, }, headerBackIconStyle: { transform: [{rotate: '90deg'}], width: screenHeight, }, editTalkTextStyle: { fontSize: Fonts.fs19, fontFamily: FontFamily.bold, color: GColors.black, marginVertical: hp(1), }, talkTitleDesTextStyle: { fontSize: Fonts.fs15, fontFamily: FontFamily.regular, fontWeight: '600', color: GColors.black, }, talkDetailsModalTextInputStyle: { marginVertical: hp(1.5), }, nextBtnStyle: { flex: 1, //width: wp(25), //marginHorizontal: commonMarginHorizontal marginBottom: hp(2), }, mainViewStyle: { flex: 1, }, mainWhiteViewStyle: { backgroundColor: Colors.white, borderTopLeftRadius: wp(6), alignItems: 'center', borderTopRightRadius: wp(6), }, whiteViewTopLineStyle: { marginTop: hp(1.4), height: hp(0.6), width: wp(9.6), borderRadius: 2, opacity: 0.5, backgroundColor: Colors.gray, }, profileImageStyle: { height: wp(30), aspectRatio: 1, borderRadius: 100, }, donatetoTextStyle: { fontSize: Fonts.fs24, fontFamily: FontFamily.regular, fontWeight: '700', color: Colors.black, marginTop: hp(2.5), }, yourgenerousTextStyle: { fontSize: Fonts.fs16, fontFamily: FontFamily.regular, fontWeight: '500', color: Colors.gray, textAlign: 'center', marginTop: hp(1), }, donationRenderTouchableStyle: { backgroundColor: Colors.themecolor, padding: wp(3), paddingHorizontal: wp(7), borderRadius: commonBorderRadius, marginEnd: wp(2), }, donationRenderPriceTextStyle: { fontSize: Fonts.fs16, fontFamily: FontFamily.regular, fontWeight: '700', color: Colors.white, }, headerRightTouchableStyle: { backgroundColor: Colors.themecolor, padding: 10, borderRadius: commonBorderRadius, }, modalContainer: { flex: 1, alignItems: 'center', justifyContent: 'center', }, });
Editor is loading...