lundi 29 juillet 2019

How I can handle multiple checkbox and basis of that show and hide input fields and update to server in react native

Please I need some help .I have 4 checkbox and I have to make that value tur or false on response basis . If its coming Y then true else false . And on click I have to change the value . If its Y and I clicked then It should be unchecked and value should be false and N is its Y then below input field will show else hide and same value I have to send in OnClick function and update to server . Please open below link and then click on updatebillprefrence edit icon the whatsaap checkbox similar thing . Below code is full page code the below of that only checkbox code .

https://xd.adobe.com/view/2b0336f6-6ff6-40ae-6653-f71e080dd0da-5d32/screen/9cb6eb49-6090-44f2-907f-c662365570f5/Android-Mobile-143?fullscreen

import React, { Component } from 'react';
    import { ImageBackground, ScrollView, TouchableOpacity, View, Platform, Image } from 'react-native';
    import { Button, Text, Item, Input, Icon, Form, ListItem, CheckBox, Body, List } from 'native-base';
    import Header from '../../ui/header';
    import TextFieldTypeClear from '../../ui/textFieldTypeClear';
    import SelectField from '../../ui/selectField';
    import { PrimaryBtn } from '../../ui/buttons';
    import BG from '../../../images/bg.jpg';
    import styles from '../../simSwap/SimSwap.style';
    import { RegularText, SmallText } from '../../ui/text';
    import { ACCOUNT_OWNER,ADDRESS,CYCLE,EMAIL,PHONE,PERIODICITY,CURRENCY,LANGUAGE,EDIT,MAIL,FAX,POST,SMS,WHATSAPP } from '../../../images';
    import _ from 'lodash';

    const styless = {
      icon:{
        marginRight:5, marginTop:3
      },
      label:{
        fontSize:14, color:'grey'
      }
    }

    const Label = ({img, textLabel}) =>{
      return (
        <View style=>
          <Image style={styless.icon} source={img}/>
          <Text style={styless.label}>{textLabel}</Text>
        </View>
      );
    }

    class UpdateBillPreferences extends Component {
      constructor(props) {
        super(props);
        const {navigation,clmmasterData} =this.props;
        this.state = {
          title: 'Update Bill Preferences',
          mobile: navigation.state.params.customer.service.serviceNumber,
          icon: 'sim',
          email: '',
          smsNum: '',
          faxNum: '',
          isBillByEmail : navigation.state.params.customerInfo[0].billingPreferenceDetails.isBillByEmail,
          isBillBySms : navigation.state.params.customerInfo[0].billingPreferenceDetails.isBillByFax,
          isBillByFax : navigation.state.params.customerInfo[0].billingPreferenceDetails.isBillBySms,
          languageAndCurrecny:{
            prefferedLanguage: navigation.state.params.customerInfo[0].billingPreferenceDetails.presentationLanguageCode,
          },
          currencyChangedValue:{
            prefferedCurrency: navigation.state.params.customerInfo[0].billingPreferenceDetails.preferedCurrencyCode,

          }

        };
      }

      componentDidMount() {

      }

      OnButtonClick = async (prefferedLanguage, preferredCurrency,email,smsNum,faxNum) => {
        const { OnButtonClick } = this.props;
        await OnButtonClick(prefferedLanguage, preferredCurrency,email,smsNum,faxNum);
        this.setState({
          preferredCurrency:'',
          prefferedLanguage:'',
          email :'',
          smsNum :'',
          faxNum :''

        })
      }
      languageChanged = (key, val) => {
        this.handleChange({ field: "prefferedLanguage" }, val);
      };

      handleChange = (props, e) => {
        let tempObj = this.state.languageAndCurrecny;
        tempObj[props.field] = e;
        this.setState({ prefferedLanguage: tempObj });
      };

      currencyChanged = (key, val) => {
        this.handleChange2({ field: "prefferedCurrency" }, val);
      };

      handleChange2 = (props, e) => {
        let tempObj = this.state.currencyChangedValue;
        tempObj[props.field] = e;
        this.setState({ prefferedCurrency: tempObj });
      };

      handleChange1 = () => {
        let isBillByEmail=this.state.isBillByEmail;
        console.log("-----------------------clicked-------");
        this.setState(previousState => {
          return { isBillByEmail: !previousState.checked };
        })
        console.log("----------isBillByEmail--------------------",isBillByEmail);

      }

      render() {
        let { title, mobile, icon,languageAndCurrecny,currencyChangedValue,isBillByEmail } = this.state;
        const { navigation,clmmasterData} = this.props;
        const {billingAddressDetails,billingPreferenceDetails} = navigation.state.params.customerInfo[0];
       const {masterData , language} = clmmasterData;
        let submitBtn = { label: 'Submit', OnSubmit: this.onSubmit };

        let currencyData=[];
        masterData.preferredCurrency.map(({ code: value, name: label }) => {
          currencyData.push({ value, label });
        });

        let languageData=[];
        masterData.language.map(({ code: value, name: label }) => {
          languageData.push({ value, label });
        });

        return (
          <ImageBackground source={BG} style={styles.imgBG}>
          <ScrollView>
            <View style={styles.container}>
              <View>
                <Header title={title} subtitle={mobile} icon={icon} navigation={navigation}/>
              </View>

                <View style={styles.contentContainer}>
                  <View style=>
                    <Form style=>
                      <SelectField
                        label="Presentation Language"
                        node="presentationLanguage"
                        options={languageData}
                        value={languageAndCurrecny.prefferedLanguage}
                        onChange={this.languageChanged}
                        that={this}
                        setIcon={true}
                        img="LANGUAGE"
                      />

                      <SelectField
                        label="Preffered Currency"
                        options={currencyData}
                        value={currencyChangedValue.prefferedCurrency}
                        node="prefferedCurrency"
                        onChange={this.currencyChanged}
                        that={this}
                        setIcon={true}
                        img="CURRENCY"
                      />
                      <View style=>
                        <View>
                          <Text style=>Preference</Text>
                        </View>
                        <View style=>
                          <View style=>
                          <CheckBox color="#00678f" checked={billingPreferenceDetails.isBillByPost === "Y" ? true : false}/>
                          </View>
                          <View style=>
                            <Text style=>Post</Text>
                          </View>
                          <View style=>
                            <CheckBox color="#00678f" checked={isBillByEmail==='Y'?true : false} onPress={() =>this.handleChange1()}/>
                          </View>
                          <View style=>
                            <Text style=>Email</Text>
                          </View>
                          <View style=>
                            <CheckBox color="#00678f" checked={true} onPress={() =>this.handleChange()}/>
                          </View>
                          <View style=>
                            <Text style=>SMS</Text>
                          </View>
                          <View style=>
                            <CheckBox color="#00678f" checked={true} onPress={() =>this.handleChange()}/>
                          </View>
                          <View style=>
                            <Text style=>FAX</Text>
                          </View>

                        </View>
                      </View>

                      <View style=>
                        <View style=>
                          <Label img={ADDRESS} textLabel="Address"/>
                        </View>
                        <View>
                        <RegularText style= text={`${billingAddressDetails.address1}, ${billingAddressDetails.address2}, ${billingAddressDetails.cityName}, ${billingAddressDetails.state}, ${billingAddressDetails.country}`} textColor="black" />

                        </View>
                      </View>

                      <View style=>
                      {billingPreferenceDetails.isBillByEmail === 'Y' &&
                        <View>
                          <Label img={EMAIL} textLabel="Email"/>
                          <Item style=>
                            <Input
                              value={this.state.email}
                              onChangeText={(text) => this.setState({email:text})}
                            />
                          </Item>
                        </View>}
                        {billingPreferenceDetails.isBillBySms === 'Y' &&
                        <View>
                          <Label img={EMAIL} textLabel="SMS"/>
                          <Item style=>
                            <Input
                              value={this.state.smsNum}
                              onChangeText={(text) => this.setState({smsNum:text})}
                            />
                          </Item>
                        </View>}
                        {billingPreferenceDetails.isBillByFax === 'Y' &&
                        <View>
                          <Label img={EMAIL} textLabel="FAX"/>
                          <Item style=>
                            <Input
                              value={this.state.faxNum}
                              onChangeText={(text) => this.setState({faxNum:text})}
                            />
                          </Item>
                        </View>}
                      </View>

                      <View style=>
                        <PrimaryBtn label={'submit'} disabled={false} onPress={()=> this.OnButtonClick(this.state.prefferedLanguage,this.state.prefferedCurrency,
                          this.state.email,this.state.smsNum,this.state.faxNum)}/>
                      </View>
                    </Form>
                  </View>
                </View>

            </View>
            </ScrollView>
          </ImageBackground>
        );
      }
    }

    export default UpdateBillPreferences;

// Checkbox part where I am facing problem .

Props Value 

isBillByEmail: "N"
isBillByFax: "Y"
isBillByPost: "Y"
isBillBySms: "N"

     <View style=>
                        <View>
                          <Text style=>Preference</Text>
                        </View>
                        <View style=>
                          <View style=>
                          <CheckBox color="#00678f" checked={billingPreferenceDetails.isBillByPost === "Y" ? true : false}/>
                          </View>
                          <View style=>
                            <Text style=>Post</Text>
                          </View>
                          <View style=>
                            <CheckBox color="#00678f" checked={isBillByEmail==='Y'?true : false} onPress={() =>this.handleChange1()}/>
                          </View>
                          <View style=>
                            <Text style=>Email</Text>
                          </View>
                          <View style=>
                            <CheckBox color="#00678f" checked={true} onPress={() =>this.handleChange()}/>
                          </View>
                          <View style=>
                            <Text style=>SMS</Text>
                          </View>
                          <View style=>
                            <CheckBox color="#00678f" checked={true} onPress={() =>this.handleChange()}/>
                          </View>
                          <View style=>
                            <Text style=>FAX</Text>
                          </View>

                        </View>
                      </View>

                      <View style=>
                        <View style=>
                          <Label img={ADDRESS} textLabel="Address"/>
                        </View>
                        <View>
                        <RegularText style= text={`${billingAddressDetails.address1}, ${billingAddressDetails.address2}, ${billingAddressDetails.cityName}, ${billingAddressDetails.state}, ${billingAddressDetails.country}`} textColor="black" />

                        </View>
                      </View>

                      <View style=>
                      {billingPreferenceDetails.isBillByEmail === 'Y' &&
                        <View>
                          <Label img={EMAIL} textLabel="Email"/>
                          <Item style=>
                            <Input
                              value={this.state.email}
                              onChangeText={(text) => this.setState({email:text})}
                            />
                          </Item>
                        </View>}
                        {billingPreferenceDetails.isBillBySms === 'Y' &&
                        <View>
                          <Label img={EMAIL} textLabel="SMS"/>
                          <Item style=>
                            <Input
                              value={this.state.smsNum}
                              onChangeText={(text) => this.setState({smsNum:text})}
                            />
                          </Item>
                        </View>}
                        {billingPreferenceDetails.isBillByFax === 'Y' &&
                        <View>
                          <Label img={EMAIL} textLabel="FAX"/>
                          <Item style=>
                            <Input
                              value={this.state.faxNum}
                              onChangeText={(text) => this.setState({faxNum:text})}
                            />
                          </Item>
                        </View>}
                      </View>

                      <View style=>
                        <PrimaryBtn label={'submit'} disabled={false} onPress={()=> this.OnButtonClick(this.state.prefferedLanguage,this.state.prefferedCurrency,
                          this.state.email,this.state.smsNum,this.state.faxNum)}/>
                      </View>
                    </Form>
                  </View>
                </View>

Please help..Thanks




Aucun commentaire:

Enregistrer un commentaire