Menu.js 13.9 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 Setting from '../../assets/setting.svg'
import Bin from '../../assets/bin.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'
export default class AddTab extends Component {
    static navigationOptions = {
        
        headerShown: false
        
    }
    state = {
        isModalVisible:false,
        current:1,
        select:'',
        dropdownVisible:false,
        store:[],
        selectId:0,
        menu:[],
        user:{}
    }
    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}/menu/${res.data.data[0].id}`).then(res => {
                            if(res.data.success) {
                            this.setState({
                                menu:res.data.data,
                            })
                            console.log(res.data.data)
                            }
                        })
                    }
                })
            }
        })

    }
    
    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}/menu/${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}/menu/${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>
                <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_Menu',{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={{flexDirection:"row"}}>
                            <View style={{justifyContent:"center",width:"28%",borderRightColor:"#BDBCBC",borderRightWidth:1,borderBottomColor:"#BDBCBC",borderBottomWidth:1,height:45.6}}>
                                <Text style={{textAlign:"center",alignSelf:"center",textAlignVertical:"center",color:"#615F5F",fontSize:14,fontWeight:"bold"}}>
                                    사진
                                </Text>
                            </View>
                            <View style={{justifyContent:"center",width:"28%",borderRightColor:"#BDBCBC",borderRightWidth:1,borderBottomColor:"#BDBCBC",borderBottomWidth:1,height:45.6}}>
                                <Text style={{textAlign:"center",alignSelf:"center",textAlignVertical:"center",color:"#615F5F",fontSize:14,fontWeight:"bold"}}>
                                    메뉴명
                                </Text>
                            </View>
                            <View style={{justifyContent:"center",width:"28%",borderRightColor:"#BDBCBC",borderRightWidth:1,borderBottomColor:"#BDBCBC",borderBottomWidth:1,height:45.6}}>
                                <Text style={{textAlign:"center",alignSelf:"center",textAlignVertical:"center",color:"#615F5F",fontSize:14,fontWeight:"bold"}}>
                                    금액
                                </Text>
                            </View>
                            <View style={{justifyContent:"center",width:"16%",borderBottomColor:"#BDBCBC",borderBottomWidth:1,height:45.6}}>
                                <Text style={{textAlign:"center",alignSelf:"center",textAlignVertical:"center",color:"#615F5F",fontSize:14,fontWeight:"bold"}}>
                                    수정
                                </Text>
                            </View>
                        </View>
                        <View style={{minHeight:Dimensions.get('screen').height}}>
                        {this.state.menu.map((e,i) => {
                            return (
                                <View style={{flexDirection:"row"}}>
                                    <View style={{justifyContent:"center",width:"28%",borderRightColor:"#BDBCBC",borderRightWidth:1,borderBottomColor:"#BDBCBC",borderBottomWidth:1}}>
                                        <Image style={{width:90,height:90,marginTop:4}} resizeMode="stretch" source={{uri:e.image}}/>
                                        <Text style={{marginTop:8.4,textAlign:"center",alignSelf:"center",textAlignVertical:"center",
                                        color:"#615F5F",fontSize:10,lineHeight:14}}>
                                            등록 {moment(e.createdAt).format("YYYY. M. D")}
                                        </Text>
                                        <Text style={{textAlign:"center",alignSelf:"center",textAlignVertical:"center",
                                        color:"#615F5F",fontSize:10,lineHeight:14,marginBottom:7.4}}>
                                            수정 {moment(e.updatedAt).format("YYYY. M. D")}
                                        </Text>
                                    </View>
                                    <View style={{justifyContent:"center",width:"28%",borderRightColor:"#BDBCBC",borderRightWidth:1,borderBottomColor:"#BDBCBC",borderBottomWidth:1}}>
                                        <Text style={{textAlign:"center",alignSelf:"center",textAlignVertical:"center",color:"#615F5F",fontSize:12}}>
                                            {e.menuName}
                                        </Text>
                                        
                                    </View>
                                    <View style={{justifyContent:"center",width:"28%",borderRightColor:"#BDBCBC",borderRightWidth:1,borderBottomColor:"#BDBCBC",borderBottomWidth:1}}>
                                        <Text style={{textAlign:"center",alignSelf:"center",textAlignVertical:"center",color:"#615F5F",fontSize:12}}>
                                            {e.menuPrice + "원"}
                                        </Text>
                                    </View>
                                    <View style={{justifyContent:"space-around",paddingTop:20,paddingBottom:20,width:"16%",borderBottomColor:"#BDBCBC",borderBottomWidth:1}}>
                                        <TouchableOpacity onPress={() => this.props.navigation.navigate("Edit_Menu",{item:e,id:this.state.selectId,name:this.state.select})} style={{alignSelf:"center"}}>
                                            <Setting />
                                        </TouchableOpacity>
                                        <TouchableOpacity onPress={() => {
                                            remove(`http://${SERVER}/menu/${e.id}`).then(res => {
                                                if(res.data.success) {
                                                    this.onRefresh()
                                                    alert("메뉴가 삭제되었습니다.")
                                                }
                                            })
                                        }} style={{alignSelf:"center"}}>
                                            <Bin />
                                        </TouchableOpacity>
                                    </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',
    }
});