Stamp.js 11.8 KB
import React, { Component } from 'react';
import {Image, View, Text, StyleSheet,ScrollView,TouchableOpacity, Dimensions } from 'react-native';
import CouponeItem from '../CouponItem'
import StampItem from '../StampItem'
import Modal from 'react-native-modal'
import DropDownPicker from 'react-native-dropdown-picker';
import Bin from '../../assets/bin.svg'
import Search from '../../assets/search_yellow.svg'
import AsyncStorage from '@react-native-community/async-storage';
import {get, delete as remove} from 'axios'
import { SERVER } from '../../common/servername';
import moment from 'moment'
import Setting from '../../assets/setting.svg'
import Loading from '../Pages/Loading'
export default class AddTab extends Component {
    static navigationOptions = {
        
        headerShown: false
        
    }
    state = {
        isModalVisible:false,
        current:1,
        select:'',
        dropdownVisible:false,
        store:[],
        selectId:0,
        menu:[],
        user:{},
        loading:true
    }
    constructor(props) {
        super(props)
    }
    componentDidMount() {
        this.onLoad()
        
        AsyncStorage.getItem("user",(err,res) => {
            if(res) {
                this.setState({
                    user:JSON.parse(res)
                })
                get(`http://${SERVER}/stores/managerRead/${JSON.parse(res).id}`).then(res => {
                    if(res.data.success) {
                        
                        this.setState({
                            store:res.data.data,
                            select:res.data.data[0].name,
                            selectId:res.data.data[0].id
                        })
                        
                        get(`http://${SERVER}/stamps/${res.data.data[0].id}`).then(res => {

                        if(res.data.success) {
                            this.setState({
                                menu:res.data.data,
                                loading:false,
                            })
                            }
                        })
                    }
                })
            }
        })

    }
    
    onLoad = () => {
        this.props.navigation.addListener('willFocus', () => {
            this.onRefresh();
        });
    };
    onRefresh = () => {
        get(`http://${SERVER}/stores/managerRead/${this.state.user.id}`).then(res => {
            if(res.data.success) {
                this.setState({
                    store:res.data.data,
                    select:res.data.data[0].name,
                    selectId:res.data.data[0].id
                })
                
                get(`http://${SERVER}/stamps/${res.data.data[0].id}`).then(res => {
                    if(res.data.success) {
                    this.setState({
                        menu:res.data.data,
                    })
                    console.log(res.data.data)
                    }
                })
            }
        })

    }
    handleDropdown = (e) => {
        this.setState({dropdownVisible:false,select:e.name,selectId:e.id})
        get(`http://${SERVER}/stamps/${e.id}`).then(res => {
            if(res.data.success) {
                this.setState({
                    menu:res.data.data,
                })
            }
        })
    }
    render() {
        return (
            <View>
                <View style={{width:"100%",flexDirection:"row",paddingTop:16,paddingBottom:16,paddingLeft:16,backgroundColor:"#615F5F"}}>
                    <TouchableOpacity onPress={() => this.props.navigation.goBack(null)}>
                        <Image source={require('../../assets/back.png')}/>
                    </TouchableOpacity>
                    <Text style={{color:"white",fontSize:16,marginLeft:16}}>
                        스탬프
                    </Text>
                </View>
                {this.state.loading?<View style={{height:"90%"}}><Loading/></View>:
                <ScrollView style={{backgroundColor:"white",paddingLeft:16,paddingRight:16,paddingTop:16,height:"100%"}}>
                    <View style={{flexDirection:"row"}}>
                        <View style={{width:"75%",}}>
                            <TouchableOpacity onPress={() => this.setState({dropdownVisible:true})} style={{paddingLeft:16,paddingTop:11,paddingBottom:9,backgroundColor:"white",borderColor:"#FFD63A",borderWidth:1}}>
                                <Text style={{fontSize:14,fontWeight:"bold",color:"#615F5F"}}>
                                    {this.state.select}
                                </Text>
                            </TouchableOpacity>
                        
                        </View>
                        <TouchableOpacity onPress={() => {
                            if(this.state.selectId>0) {
                                this.props.navigation.navigate('Add_Stamp',{id:this.state.selectId,name:this.state.select})
                            }
                            else {
                                alert("매장이 선택되지 않았습니다.")
                            }
                    }} style={{width:"25%",justifyContent:"center"}}>
                            <Text style={{textAlign:"center"}}>
                                추가 +
                            </Text>
                        </TouchableOpacity>
                    </View>
                    {this.state.dropdownVisible? 
                        
                        <View style={{width:"75%",height:"100%",position:"absolute",backgroundColor:"transparent",zIndex:10}}>
                            <View>
                                {this.state.store.map((e,i,arr) => {
                                    return (
                                        
                                        <TouchableOpacity onPress={() => this.handleDropdown(e)
                                        } 
                                        style={[{position:"relative",width:"100%",backgroundColor:"white",paddingLeft:16,paddingTop:11,paddingBottom:9,backgroundColor:"white",borderColor:"#FFD63A",borderWidth:1,borderBottomWidth:0,borderTopWidth:0},i==0?{borderTopWidth:1}:i==arr.length-1?{borderBottomWidth:1}:{}]}>
                                            <Text style={{fontSize:14,fontWeight:"bold",color:"#615F5F"}}>
                                                {e.name}
                                            </Text>
                                        </TouchableOpacity>
                                    )
                                })}
                            </View>
                        </View>:undefined}
                        
                    <View style={{height:"100%",paddingLeft:16,paddingRight:16,paddingTop:16,paddingBottom:16}}>
                        
                        <View style={{minHeight:Dimensions.get('screen').height}}>
                                {this.state.menu.map((e,i) => {
                                    return (
                                    e.StampConditions.map((el,i) => {
                                        console.log("El",e)
                                        return (
                                            <View style={{paddingBottom:17,borderBottomColor:'#BDBCBC',borderBottomWidth:1,marginTop:17,flexDirection:"row"}}>
                                                <View style={{width:"75%"}}>
                                                    <View style={{flexDirection:"row",justifyContent:"space-between"}}>
                                                    <Text style={{color:"#615F5F",fontSize:14}}>
                                                        {moment( e.createdAt).format("YY.M.D")}
                                                    </Text>
                                                    <Text style={{color:"#615F5F",fontSize:14}}>
                                                        {el.conditionCount+"개당 "+el.reward}
                                                    </Text>
                                                    </View>
                                                    <View style={{flexDirection:"row",justifyContent:"space-between",marginTop:14}}>
                                                    <Text style={{width:"33%",fontSize:15,fontWeight:"bold",color:"#615F5F"}}>
                                                        발행 
                                                    </Text>
                                                    <Text style={{width:"33%",fontSize:15,fontWeight:"bold",color:"#615F5F"}}>
                                                        등록 
                                                    </Text>
                                                    <Text style={{width:"33%",fontSize:15,fontWeight:"bold",color:"#615F5F"}}>
                                                        사용 
                                                    </Text>
                                                    </View>
                                                </View>
                                                <View style={{width:"25%",justifyContent:"space-around"}}>
                                                    <TouchableOpacity onPress={() => this.props.navigation.navigate("Edit_Stamp",{item:el,id:this.state.selectId,name:this.state.select,useCondition:e.useCondition,parent:e})}>
                                                    <Setting style={{alignSelf:"center",marginLeft:"auto",marginRight:"auto"}}/>
                                                    </TouchableOpacity>
                                                    <Search style={{alignSelf:"center",marginLeft:"auto",marginRight:"auto"}}/>
                                                </View>
                                        </View>
                                        )
                                    }))
                                })}
                        </View>
                    </View>
                </ScrollView>}

                 
      <Modal onBackButtonPress={() => this.setState({isModalVisible:false})} onBackdropPress={() => this.setState({isModalVisible:false})} isVisible={this.state.isModalVisible}>
        <View style={{ width:"80%",backgroundColor:"white",alignSelf:"center"}}>
          <TouchableOpacity onPress={() => { 
              this.setState({isModalVisible:false})
              this.props.navigation.navigate("Store")}}>
          <Text style={{color:"#979292",fontSize:16,lineHeight:50,textAlign:"center",marginTop:10}}>스토어</Text>
          </TouchableOpacity>
          <TouchableOpacity onPress={() => { this.setState({isModalVisible:false}) 
          this.props.navigation.navigate("Coupon")}}>
          <Text style={{color:"#979292",fontSize:16,lineHeight:50,textAlign:"center"}}>쿠폰</Text>
          </TouchableOpacity>
          <TouchableOpacity onPress={() => { this.setState({isModalVisible:false})
          this.props.navigation.navigate("Stamp")}}>
          <Text style={{color:"#979292",fontSize:16,lineHeight:50,textAlign:"center"}}>스탬프</Text>
          </TouchableOpacity>
          <TouchableOpacity onPress={() => { this.setState({isModalVisible:false})
          this.props.navigation.navigate("Menu")}}>
          <Text style={{color:"#979292",fontSize:16,lineHeight:50,textAlign:"center"}}>메뉴</Text>
          </TouchableOpacity>
          <TouchableOpacity>
          <Text style={{color:"#979292",fontSize:16,lineHeight:50,textAlign:"center"}}>리뷰게시판</Text>
          </TouchableOpacity>
          <TouchableOpacity>
          <Text style={{color:"#979292",fontSize:16,lineHeight:50,textAlign:"center",marginBottom:10}}>알림발송</Text>
          </TouchableOpacity>
        </View>
      </Modal>
            </View>
        );
    }
}
 
const style = StyleSheet.create({
    container: {
        flex: 1,
        alignItems: 'center',
        justifyContent: 'center',
    }
});