{"size": 2166, "ext": "js", "max_stars_repo_path": "client/src/reducers/post.js", "max_stars_repo_name": "MertbabaOkulmus/mern-stack-blog-app", "max_stars_repo_stars_event_min_datetime": "2021-05-08T21:32:51.000Z", "max_stars_repo_stars_event_max_datetime": "2021-05-08T21:32:51.000Z", "max_issues_repo_path": "client/src/reducers/post.js", "max_issues_repo_name": "MertbabaOkulmus/mern-stack-blog-app", "max_issues_repo_issues_event_min_datetime": null, "max_issues_repo_issues_event_max_datetime": null, "max_forks_repo_path": "client/src/reducers/post.js", "max_forks_repo_name": "MertbabaOkulmus/mern-stack-blog-app", "max_forks_repo_forks_event_min_datetime": null, "max_forks_repo_forks_event_max_datetime": null}
{"max_stars_count": 1, "max_issues_count": null, "max_forks_count": null, "avg_line_length": 42.4705882353, "max_line_length": 207, "alphanum_fraction": 0.5586334257}
import * as types from "../acitons/types";

const initialState = {
    posts: [],
    currentPost: null,
};

const postReducer = (state = initialState, action) => {
    switch (action.type) {
        case types.FETCH_POSTS:
            return { // bu alan pure function olması gerekiyor yani state i doğrudan değiştiremeyiz , önce bir kopyasını döndürür sonra sadece değiştirmek istediğimiz alanı döndür
                ...state,//önce bir kopyasını döndürür
                posts: action.payload,//sonra sadece değiştirmek istediğimiz alanı döndür
            };

        case types.FETCH_SINGLE_POST:
            return {
                ...state,
                currentPost: action.payload,
            };
        case types.CREATE_POST:
            return {
                ...state,//state i değiştirmeden bir kopyasını döndür
                posts: [...state.posts, action.payload],//post kısmında ...state.posts u değiştirmeden kopyala ve action.payload da ki yeni postu da üzerine ekle
            };
        case types.DELETE_POST:
            return {
                ...state,
                posts: state.posts.filter(post => post._id !== action._id), // action dan gelen id ile (silinen post un id'si) state deki post un id si eşit olan postu filitrele çıkar onu posts ların içinden
                currentPost: null,
            };
        case types.UPDATE_POST:
            return {
                ...state,
                posts: state.posts.map((post) => {
                    if (post._id === action.payload._id) {//güncellenmiş postu bulmak için id leri eşitliyoruz
                        return action.payload;//veritabanında ki güncellenmiş postun son halini döndür  
                    }
                    else {
                        return post;//güncellenmemiş postlara müdahale etmeden aynen döndür
                    }
                }),
                currentPost: action.payload,
            };
        default:// hiçbir action type ı ile uyumlu değilse default a girer 
            return {
                ...state, //hiçir değişiklik yapmadan state i aynı şekilde gönder
            };
    }
};
export default postReducer;