CCCPaste

06. Blog

function attachEvents() {
    let btnLoadPosts = document.getElementById("btnLoadPosts");
    let btnViewPost = document.getElementById("btnViewPost");
    let sel = document.getElementById("posts");
    let postTitleh = document.getElementById("post-title");
    let postBody = document.getElementById("post-body");
    let commentsUl = document.getElementById("post-comments");
 
    btnLoadPosts.addEventListener("click", loadPosts);
    btnViewPost.addEventListener("click", viewPost); 

    let postsObj={}
 
    var requestOptions = {
        method: 'GET',
        redirect: 'follow'
    };
 
    function loadPosts() {
        sel.innerHTML = "";
 
        fetch("http://localhost:3030/jsonstore/blog/posts", requestOptions)
            .then(response => response.json())
            .then(result => {populateSelect(result);
            postsObj=Object.assign({},result)})         
            .catch(error => console.log('error', error)); 
    }
 
    function populateSelect(o) {
        let arrOfPosts = Object.entries(o);
        arrOfPosts.forEach(p => {
            let post = p[1];
            let title = post.title;
            let opt = document.createElement("option");
            opt.value = post.id;
            opt.textContent = title;
            sel.appendChild(opt)
        });
    }
 
    function viewPost() {
        let neededId = sel.options[sel.selectedIndex].value;
        getPostDetails(postsObj,neededId);

         //get all coments 
        fetch("http://localhost:3030/jsonstore/blog/comments", requestOptions)
            .then(response => response.json())
            .then(result => renderComments(result, neededId))
            .catch(error => console.log('error', error)); 
    }
 
    function getPostDetails(data, neededId) {
        //get needed post
        let arr = Object.entries(data);
        let post = arr.find(a => a[0] == neededId); 
        postTitleh.textContent = "";
        postTitleh.textContent = post[1].title;
        postBody.textContent = post[1].body;
    }
  
    function renderComments(data, neededId) { 
        commentsUl.innerHTML = "";
        let arrData = Object.entries(data);    
        //filter comments
        let relevantComments = arrData.filter(a => a[1].postId == neededId);
        relevantComments.forEach(c => {
            let comLi = document.createElement("li");
            comLi.id = c.id;
            comLi.textContent = c[1].text;
            commentsUl.appendChild(comLi)
        }) 
    }
}
 
 
attachEvents();