-1

table in react, I am populating it fine, but I wanted to add dropdown on edit, and I wanted dropdown to be populated from API call. I am getting results just fine, but my dropdown is just empty...

Here is my call to API's

useEffect(() => {
        const getPosts = () => {
            const myToken = Cookies.get('access_token');
            if (myToken === undefined) {
                history.push('/auth/login-page');
            } else {
                try {
                    var sortBy = require('array-sort-by');
                    var myPostsUnsorted = [];
                    const months = [
                        'JAN',
                        'FEB',
                        'MAR',
                        'APR',
                        'MAY',
                        'JUN',
                        'JUL',
                        'AUG',
                        'SEP',
                        'OCT',
                        'NOV',
                        'DEC',
                    ];
                    // set the url
                    const myUrl = `${APIurl}products.json?orderBy="approved"&equalTo=0`;
                    //alert(myUrl);
                    axios.get(myUrl).then((res) => {
                        console.log(res.data);
                        const myData = res.data;

                        for (var key1 in myData) {
                            var current_datetime = new Date(myData[key1].modifyDate);
                            var formatted_date =
                                current_datetime.getDate() +
                                '-' +
                                months[current_datetime.getMonth()] +
                                '-' +
                                current_datetime.getFullYear();
                            var filteredPosts = new Object();
                            filteredPosts.category = myData[key1].category;
                            filteredPosts.businessName = myData[key1].businessName;
                            filteredPosts.title = myData[key1].title;
                            filteredPosts.listingPersonId = myData[key1].listingPersonId;
                            filteredPosts.listingPerson = myData[key1].listingPerson;
                            filteredPosts.createDate = formatted_date;
                            filteredPosts.listingPersonTitle =
                                myData[key1].listingPersonTitle;
                            filteredPosts.approved = myData[key1].approved;
                            filteredPosts.att = myData[key1].att;
                            filteredPosts.postId = key1;
                            filteredPosts.att = myData[key1].att;
                            filteredPosts.city = myData[key1].city;
                            filteredPosts.address = myData[key1].address;
                            filteredPosts.email = myData[key1].email;
                            filteredPosts.phone = myData[key1].phone;
                            filteredPosts.webSite = myData[key1].webSite;
                            filteredPosts.region = myData[key1].region;
                            filteredPosts.price = myData[key1].price;
                            filteredPosts.body = myData[key1].body;
                            filteredPosts.stars = myData[key1].stars;
                            function createMarkup() {
                                return {
                                    __html: myData[key1].body,
                                };
                            }
                            filteredPosts.bodyFormatted = (
                                <div dangerouslySetInnerHTML={createMarkup()} />
                            );
                            filteredPosts.image = myData[key1].image;
                            filteredPosts.image2 = myData[key1].image2;
                            filteredPosts.image3 = myData[key1].image3;
                            filteredPosts.image4 = myData[key1].image4;

                            myPostsUnsorted.push(filteredPosts);
                        }
                        const myPostsSorted = sortBy(
                            myPostsUnsorted,
                            (s) => -new Date(s.createDate)
                        );
                        setmyPostData(myPostsSorted);
                        //console.log('Tracing....POSTS:' + JSON.stringify(myPostsSorted));
                        getUsers();
                    });
                } catch (err) {
                    console.log(err);
                }
            }
        };
        const getUsers = () => {
            const myToken = Cookies.get('access_token');
            if (myToken === undefined) {
                history.push('/auth/login-page');
            } else {
                try {
                    var sortBy = require('array-sort-by');
                    var myPostsUnsorted = [];

                    // set the url
                    const myUrl = `${APIurl}users.json?orderBy="active"&equalTo=1`;
                    //alert(myUrl);
                    axios.get(myUrl).then((res) => {
                        console.log(res.data);
                        const myData = res.data;

                        for (var key1 in myData) {
                            var filteredPosts = new Object();
                            filteredPosts[myData[key1].userUid] =
                                myData[key1].firstName + ' ' + myData[key1].lastName;

                            myPostsUnsorted.push(filteredPosts);
                        }
                        const myPostsSorted = sortBy(myPostsUnsorted);
                        setmyUserData(myPostsSorted);
                        //console.log('Tracing....USERS:' + JSON.stringify(myPostsSorted));
                    });
                } catch (err) {
                    console.log(err);
                }
            }
        };

        getPosts();
    }, []);

First function is to get post's, this is working just fine, this is how I populate my material-table. Second function is also returning results, this is where I am getting users. Posts belong to user, so I wanted to create drop down of users if I want to change ownership on edit...

Here is how I am creating columns:

const [columns, setColums] = useState([
        { title: 'Category', field: 'category', editable: 'never' },
        { title: 'Business', field: 'businessName', editable: 'never' },
        { title: 'Title', field: 'title', editable: 'never' },
        //{ title: 'Posted by', field: 'listingPersonId', editable: 'never' },
        {
            title: 'Posted by',
            field: 'listingPersonId',
            /*
            lookup: {
                DaChZYtatmVUXskSSzg9GTMsh4J3: 'Peter Andri',
                A1AtLoKhnwctu7Wwxtv85sLwDGj2: 'Christine Wood',
                E1NE6Ed8xIVxGMiYFXmaS9XtSvX2: 'Will Smith',
            },
            */
            lookup: { myUserData },
        },

        { title: 'Created', field: 'createDate', editable: 'never' },
        {
            title: 'Size',
            field: 'att',
            lookup: { '': 'Regular', horizontal: 'Horizontal', full: 'Large' },
        },
        {
            title: 'Stars',
            field: 'stars',
            lookup: { '': '0', 5: '5', 4: '4', 3: '3', 2: '2', 1: '1' },
        },
        { title: 'Approved', field: 'approved', type: 'boolean' },
    ]);

So in short: when I hardcode values I get in console log:

{
                title: 'Posted by',
                field: 'listingPersonId',
                lookup: {
                    DaChZYtatmVUXskSSzg9GTMsh4J3: 'Peter Andri',
                    A1AtLoKhnwctu7Wwxtv85sLwDGj2: 'Christine Wood',
                    E1NE6Ed8xIVxGMiYFXmaS9XtSvX2: 'Will Smith',
                },

it is obviously fine, but when I pass my array of objects inside lookup... nothing happens:

{
            title: 'Posted by',
            field: 'listingPersonId',
            lookup: { myUserData },
        },

Also if this can help... here is my trace of data...:

[{"DaChZYtatmVUXskSSzg9GTMsh4J3":"Peter Andri"},{"A1AtLoKhnwctu7Wwxtv85sLwDGj2":"Christine Wood"},{"E1NE6Ed8xIVxGMiYFXmaS9XtSvX2":"Will Smith"}]

Did anybody tried to do this maybe... Thanks!!

user13401262
  • 121
  • 10

1 Answers1

0

Actually I found the problem... I was sending array of objects to Lookup... When I just pass object, it started working... Sorry for false alarm.

user13401262
  • 121
  • 10