Advertisement
Guest User

EventPage

a guest
Feb 23rd, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import React, { Component } from "react";
  2. import { View, Text, SwipeableFlatlist, ActivityIndicator, TouchableHighligt, Alert } from "react-native";
  3. import { Header, Left, Button, Body, Icon, Title, Right } from 'native-base';
  4. import { List, ListItem } from 'react-native-elements';
  5.  
  6. class EventPage extends Component  {
  7.   constructor(props) {
  8.     super(props);
  9.  
  10.     this.state = {
  11.       loading: false,
  12.       data: [],
  13.       page: 1,
  14.       seed: 1,
  15.       error: null,
  16.       refreshing: false,
  17.     };
  18.   }
  19.  
  20.   componentDidMount() {
  21.     this.makeRemoteRequest();
  22.   }
  23.  
  24.   makeRemoteRequest = () => {
  25.     const { page, seed } = this.state;
  26.     const url = 'http://192.168.1.11/db/api/index.php/getEvent?seed=${seed}&page=${page}&results=5';
  27.     this.setState({ loading: true });
  28.     fetch(url)
  29.       .then(res => res.json())
  30.       .then(res => {
  31.         this.setState({
  32.           data: page === 1 ? res.results : [...this.state.data, ...res.results],
  33.           error: res.error || null,
  34.           loading: false,
  35.           refreshing: false
  36.         });
  37.       })
  38.       .catch(error => {
  39.         this.setState({ error, loading: false });
  40.       });
  41.   };
  42.  
  43.     handleRefresh = () => {
  44.     this.setState(
  45.       {
  46.         page: 1,
  47.         seed: this.state.seed + 1,
  48.         refreshing: true
  49.       },
  50.       () => {
  51.         this.makeRemoteRequest();
  52.       }
  53.     );
  54.   };
  55.  
  56.     handleLoadMore = () => {
  57.     this.setState(
  58.       {
  59.         page: this.state.page + 1
  60.       },
  61.       () => {
  62.         this.makeRemoteRequest();
  63.       }
  64.     );
  65.   };
  66.  
  67.  
  68.  
  69.     renderSeparator = () => {
  70.     return (
  71.       <View
  72.         style={{
  73.           height: 1,
  74.           width: "86%",
  75.           backgroundColor: "#CED0CE",
  76.           marginLeft: "14%"
  77.         }}
  78.       />
  79.     );
  80.   };
  81.  
  82.   renderHeader = () => {
  83.     return (
  84.       <Header >
  85.         <Left>
  86.           <Button transparent onPress={() => this.props.navigation.goBack()}>
  87.             <Icon name="arrow-back" />
  88.             </Button>
  89.           </Left>
  90.           <Body>
  91.             <Title>Event</Title>
  92.           </Body>
  93.           <Right />
  94.             <Button transparent onPress={() => this.props.navigation.navigate("EventAdd")}>
  95.               <Icon name="ios-add-circle" />
  96.             </Button>
  97.         </Header>
  98.       );
  99.     };
  100.  
  101.   renderFooter = () => {
  102.     if (!this.state.loading) return null;
  103.  
  104.     return (
  105.       <View
  106.         style={{
  107.           paddingVertical: 20,
  108.           borderTopWidth: 1,
  109.           borderColor: "#CED0CE"
  110.         }}
  111.       >
  112.         <ActivityIndicator animating size="large" />
  113.       </View>
  114.     );
  115.   };
  116.  
  117.  
  118.   render() {
  119.     const { navigate } = this.props.navigation;
  120.     return (
  121.       <View
  122.       containerStyle={{ borderTopWidth: 0, borderBottomWidth: 0, backgroundColor: '#fff' }} >
  123.       <SwipeableFlatlist
  124.       bounceFirstRowOnMount
  125.       MaxSwipeDistance={160}
  126.       renderQuickActions={this._renderQuickActions.bind(this)}
  127.         data={this.state.data}
  128.         renderItem={({ item }) => (
  129.           <ListItems
  130.             onPress={() => navigate('EventDetail', '${item.event_id}')}
  131.             roundAvatar
  132.             title={item.event_name}
  133.             subtitle={item.event_desc}
  134.             avatar={{ uri: 'data:image/png;base64,'+item.imageB64 }}
  135.             containerStyle={{ borderTopWidth: 0, borderBottomWidth: 0 }}
  136.           />
  137.         )}
  138.         keyExtractor={item => item.event_id}
  139.         ItemSeparatorComponent={this.renderSeparator}
  140.         ListHeaderComponent={this.renderHeader}
  141.         ListFooterComponent={this.renderFooter}
  142.         refreshing={this.state.refreshing}
  143.         onRefresh={this.handleRefresh}
  144.       />
  145.       </View>
  146.     );
  147.   }
  148. }
  149.  
  150. export default EventPage;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement