Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Is it possible to update the items after fetch? #2

Closed
upanshed opened this issue Feb 14, 2018 · 6 comments
Closed

Is it possible to update the items after fetch? #2

upanshed opened this issue Feb 14, 2018 · 6 comments
Labels
enhancement New feature or request

Comments

@upanshed
Copy link

Just wondering if this is possible, I have tried several things with no luck?
Sorry if this is the wrong place to ask this.

@lfkwtz
Copy link
Collaborator

lfkwtz commented Feb 14, 2018

Not currently but I could add that, or feel free to submit a PR

@lfkwtz lfkwtz added the enhancement New feature or request label Feb 15, 2018
@lfkwtz
Copy link
Collaborator

lfkwtz commented Feb 22, 2018

Handled in #5

@lfkwtz lfkwtz closed this as completed Feb 22, 2018
@maroparo
Copy link

maroparo commented Jul 30, 2018

Hi everyone.
This is not working for me and I do have the latest version.
I assigned to the items props of the picker, a value stored in the state object.
I update the state value after an axios GET request and the items don't update.
I can see through console log that the state value is update though but items don't update.
I'm I missing something here ?

@lfkwtz
Copy link
Collaborator

lfkwtz commented Jul 30, 2018

@maroparo you'll have to provide a repo example or reproduce it on snack.expo.io -- the example in the readme handles updating the items properly

@maroparo
Copy link

maroparo commented Jul 30, 2018

Hi @lfkwtz
I can't provide a repo as it is private.
Here is the full component though.

import React from 'react';
import {StyleSheet, View, TouchableOpacity, Text, ImageBackground, Dimensions} from 'react-native';
import RNPickerSelect from 'react-native-picker-select';
import Image from 'react-native-scalable-image';
import axios from 'axios';

import backgroundImage from '../../assets/filterScreenBackground.jpg';
import logo from '../../assets/filterScreenLogo.png';

class FilterScreen extends React.Component {

    state = {
        selectedCity: null,
        cities: [],
        selectedSpecialty: null,
        specialties: [],
    };


    componentDidMount() {

        this.fetchCities();

        setTimeout(() => {
            this.setState({
                selectedCity: '1',
            });
        }, 1000);

        setTimeout(() => {
            this.setState({
                selectedSpecialty: '1',
            });
        }, 2000);
    }


    fetchCities() {

        let baseURL = 'http://127.0.0.1:8000/app/cities';
        return axios.get(baseURL).then(response => {
                if (response.data.error === false) {

                    let cities = response.data.data.map(item => ({
                        label: item.name,
                        value: item.id
                    }));

                    this.setState({
                        cities:cities
                    });
                }
            }
        ).catch(
            () => alert('Something went wrong! :(')
        );
    };

    render() {
        return (
            <ImageBackground style={styles.backgroundImage} source={backgroundImage}>
                <View style={[styles.container, styles.logoContainer]}>
                    <Image
                        width={Dimensions.get('window').width * 0.8}
                        source={logo}
                        style={styles.logo}
                    />
                </View>
                <View style={[styles.container, styles.formContainer]}>
                    <RNPickerSelect
                        placeholder={{
                            label: 'Zgjidhni qytetin...',
                            value: null,
                        }}

                        items={this.state.cities}

                        onValueChange={(value) => {
                            this.setState({
                                selectedCity: value,
                            });
                        }}

                        style={{...pickerSelectStyles}}

                        value={this.state.selectedCity}
                    />
                    <View style={{paddingVertical: 5}}/>
                    <RNPickerSelect
                        placeholder={{
                            label: 'Zgjidhni specialitetin...',
                            value: null,
                        }}

                        items={this.state.specialties}

                        style={{...pickerSelectStyles}}

                        onValueChange={(value) => {
                            this.setState({
                                selectedSpecialty: value,
                            });
                        }}

                        value={this.state.submitButtonContainer}
                    />
                    <View style={[styles.submitButtonContainer]}>
                        <TouchableOpacity style={styles.submitButton} onPress={() => {
                            console.log(this.state.cities);
                        }}>
                            <Text style={styles.submitButtonText}> GJEJ DOKTORIN </Text>
                        </TouchableOpacity>
                    </View>
                </View>
            </ImageBackground>
        );
    }
}

const styles = StyleSheet.create({
    container: {
        justifyContent: 'center',
        alignItems: 'center',
        padding: 30,
        backgroundColor: "rgba(8, 35, 79, 0.75)"
    },
    logoContainer: {
        width: "100%",
        height: "40%",
    },
    logo: {
        width: '100%'
    },
    formContainer: {
        height: "60%",
        justifyContent: 'flex-start'
    },
    backgroundImage: {
        flex: 1
    },
    submitButtonContainer: {
        flex: 1,
        width: '100%',
        justifyContent: 'flex-end',
        alignItems: 'center'
    },
    submitButton: {
        width: "100%",
        height: 50,
        marginTop: 20,
        alignItems: 'center',
        backgroundColor: '#1aa2b3',
        padding: 10,
        justifyContent: 'center'
    },
    submitButtonText: {
        color: "white",
        fontSize: 15,
        fontWeight: 'bold'
    }
});

const pickerSelectStyles = {
    inputIOS: {
        fontSize: 16,
        paddingTop: 13,
        paddingHorizontal: 10,
        paddingBottom: 12,
        borderColor: 'gray',
        borderRadius: 4,
        backgroundColor: 'transparent',
        color: 'white',
    },
    inputAndroid: {
        color: 'white'
    },
    placeholderColor: 'white',
    underline: {
        borderTopWidth: 0
    },
    icon: {
        position: 'absolute',
        backgroundColor: 'transparent',
        borderTopWidth: 5,
        borderTopColor: 'white',
        borderRightWidth: 5,
        borderRightColor: 'transparent',
        borderLeftWidth: 5,
        borderLeftColor: 'transparent',
        width: 0,
        height: 0,
        top: 20,
        right: 15,
    },
};

export default FilterScreen;

jpandl19 referenced this issue in jpandl19/react-native-picker-select Oct 15, 2019
@sunilnamdev
Copy link

@maroparo please let me know how below issue is fixed, I am also facing same problem where on click it is fetching the list from http GET.

"This is not working for me and I do have the latest version.
I assigned to the items props of the picker, a value stored in the state object.
I update the state value after an axios GET request and the items don't update.
I can see through console log that the state value is update though but items don't update.
I'm I missing something here ?"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

4 participants