Website lesson 8: imitating js communication
Tags: javascript, html, css, programming
Published: 2021-06-18 05:09:29

Welcome back! 
If you are new to js, I really advise you to check all my article about js, starting from ["communication base"](https://dev.to/filatovv/website-lesson-5-communication-base-42om)

##Summing up
### Get post function
Every user should have a function called _output all data_ or if it is an online shop, you already start from showing everything you have with no filters.


```
 getPost(id) {
        for (var i = 0; i < posts.length; i++) {
            if (posts[i].id === id) {
                return posts[i];
            }
        }
        throw "No object with " + id + " id";
    }
```
####What do we send?
As always we send some information from outside. If we want to show a specific object we need some kind of filter - id.
Then our algorithm says that we have to find this object by checking id equal and we return this object as the result, if true, or we throw a message, if false.


###Get post by filter
Firstly, we show everything we have. Imagine, we have an online shop for clothes: you don't need every type of clothes, but you are looking for a dress, for example. Then we need a filter to show specific objects.

```
 getPosts(filterConfig = "Date", skip = 0, top = posts.length) {
            if (filterConfig == "Date") {
                posts.sort(function (a, b) {
                    return new Date(b.createdAt) - new Date(a.createdAt);
                });
                return this.posts.slice(skip, top + skip);
            }
            else if (filterConfig == "summer") {
                var temp = []
                posts.forEach((product, ind) => {
                    if (product.tag == "summer"){
                        temp.push(product)
                    }
                });
                return temp
            }
            else if (filterConfig == "spring") {
                var temp = []
                posts.forEach((product, ind) => {
                    if (product.tag == "spring"){
                        temp.push(product)
                    }
                });
                return temp
            }
            else {
                throw "Error. there is no such filter";
            }
        }
```
We assign _skip_ as the start position. If the user doesn't change it, we show everything that suits our filter.
Top - the amount of posts to show, that default is the length of our database (everything).


####Algorithm
- We check, which filter was enterd by user. 
- We find objects that are equal to a filter.
- We return a mass of suitable objects.

###Adding all
In the [previous lesson](link to lesson 7) we talked about adding a post (one), but we can make a function for adding many objects (a mass of objects).

```
addPost(Object){
       if(this.validatePost(Object)){
           posts.splice(posts.length,0,Object);
           return true;
       }
       else {
           return false;
       }
    }
```
Again we send some info from the user - a mass.

###Edit post
If we realize not only the user, but also the admin, we should have this opportunity for admin.

```
editPost(id,post){
        if(this.validatePost(post)){
            this.getPost(id).destination=post.destination;
            this.getPost(id).author=post.author;
            return true;
        }else {
            return false;
        }
    }
```
####What do we send?
We send a filter - id, then to find the right object to edit and we send an object to replace the old one.

###Algorithm
- We find the right object, by checking id equal.
- We check the information of object we want to replace for correction.
- We change our information using our object we sent to.
- As always the result is true or false.

###Imitating communication
Let's check, if our functions work correctly by outputting some messages:
```
console.log("testing getPost: ")
console.log(a.getPost(3))

console.log("test removePost: ")
console.log(a.removePost("2"))

console.log("output all posts: ")
console.log(a.getPosts("Date"))

console.log(a.getPosts('spring'))
console.log(a.getPosts('summer'))
```
I guess, here is everything understandable as we already talked about it.

By the way, I'd like to share my [js code](https://codeshare.io/RbmAKo) with you. You have to understand that it is not full, cause we have just imitated communication. The next lesson will be dedicated to real communication with the user: connecting html and js.

More info you can find on my website.
Good luck with your job!