mutations.js 2.6 KB
import * as Types from './types';
import {getArticleImageSize} from 'utils/image-handler';
import { get, first } from 'lodash';

export default {
  [Types.FETCH_ARTICLE_LIST_REQUEST](state, {refresh}) {
    state.fetchArticleList = true;
    if (refresh) {
      state.articleList = [];
    }
  },
  [Types.FETCH_ARTICLE_LIST_SUCCESS](state, {data}) {
    state.fetchArticleList = false;
    state.articleList = state.articleList.concat(data);

    state.articleList.forEach((item, index) => {
      const imageBlocks = get(item, 'blockList', []).filter(block => block.templateKey === 'image');
      const firstImage = first(imageBlocks);

      if (firstImage) {
        let {width, height} = getArticleImageSize(firstImage);

        firstImage.width = width;
        firstImage.height = height;
      }
      item.index = index;
    });
    data.forEach(item => {
      get(item, 'productList', []).forEach(product => {
        product.favorite = false;
      });
    });
  },
  [Types.FETCH_ARTICLE_LIST_FAILD](state) {
    state.fetchArticleList = false;
  },
  [Types.FETCH_ARTICLE_PRODUCT_SUCCESS](state, {articles, favs, articleProductType}) {
    articles.forEach(article => {
      if (article.articleProductType === articleProductType) {
        get(article, 'productList', []).forEach(product => {
          const find = favs.find(f => f.id === product.productId);

          if (find) {
            product.favorite = find.favorite;
          }
        });
      }
    });
  },
  [Types.FETCH_GUANG_SUCCESS](state, data) {
    state.articleDetail = data;
  },
  [Types.CHANGE_AUTHOR_FOLLOW](state, {authorUid, follow}) {
    state.articleList.forEach(article => {
      if (article.authorUid === authorUid) {
        article.hasAttention = follow ? 'Y' : 'N';
      }
    });
  },
  [Types.CHANGE_AUTHOR_TOPIC_FOLLOW](state, {authorUid, follow}) {
    state.articleListByTopic.forEach(article => {
      if (article.authorUid === authorUid) {
        article.hasAttention = follow ? 'Y' : 'N';
      }
    });
  },
  [Types.FETCH_ARTICLE_TOPIC_REQUEST](state, {page}) {
    state.fetchArticleListByTopic = true;
    if (page === 1) {
      state.articleLastedTimeByTopic = 0;
      state.articleListByTopic = [];
    }
  },
  [Types.FETCH_ARTICLE_TOPIC_SUCCESS](state, {data}) {
    state.fetchArticleListByTopic = false;
    state.articleListByTopic = state.articleListByTopic.concat(data.detailList);
    state.articleLastedTimeByTopic = data.lastedTime;

    state.articleListByTopic.forEach((item, index) => {
      item.index = index;
    });
  },
  [Types.FETCH_ARTICLE_TOPIC_FAILD](state) {
    state.fetchArticleListByTopic = false;
  }
};