jfilter/frag-den-staat-app

View on GitHub
src/reducers/foiRequests.js

Summary

Maintainability
A
2 hrs
Test Coverage
const initialState = {
  isPending: false,
  requests: [],
  error: '',
  nPage: 0,
  nResults: -1,
  isRefreshing: false,
  firstPageFetchedAt: null,
  filter: {
    status: null,
    jurisdiction: null,
    category: null,
    publicBody: null,
    user: null,
    follower: null,
    has_fee: null,
  },
  followerCounts: {},
  campaign: '-',
};

// hide campaign requests as default

function foiRequests(state = initialState, action) {
  switch (action.type) {
    case 'FOI_REQUESTS_ERROR':
      return {
        ...state,
        isPending: false,
        isRefreshing: false,
        error: action.error,
      };
    case 'FOI_REQUESTS_INVALIDATE_DATA':
      return {
        ...state,
        requests: [],
        nResults: -1,
        nPage: 0,
      };
    case 'FOI_REQUESTS_PENDING':
      return { ...state, isPending: true };
    case 'FOI_REQUESTS_SUCCESS': {
      return {
        ...state,
        isPending: false,
        requests: [...state.requests, ...action.requests.objects],
        nPage: state.nPage + 1,
        nResults: action.requests.meta.total_count,
        firstPageFetchedAt: Date.now(),
      };
    }
    case 'FOI_REQUESTS_REFRESHING':
      return {
        ...state,
        isRefreshing: true,
      };
    case 'FOI_REQUESTS_REFRESHING_SUCCESS': {
      return {
        ...state,
        isRefreshing: false,
        requests: action.requests.objects,
        nPage: 1, // because we already got 1
        nResults: action.requests.meta.total_count,
      };
    }
    case 'FOI_REQUESTS_FILTER_CHANGE': {
      return {
        ...state,
        filter: {
          ...state.filter,
          ...action.filter,
        },
      };
    }
    case 'FOI_REQUESTS_ERROR_CLEAR':
      return {
        ...state,
        error: '',
      };
    case 'FOI_REQUESTS_UPDATE_FOLLOWER_COUNTS':
      return {
        ...state,
        followerCounts: { ...state.followerCounts, ...action.followerCounts },
      };
    case 'FOI_REQUESTS_UPDATE_CAMPAIGN':
      return {
        ...state,
        campaign: action.campaign,
      };
    case 'OAUTH_LOGOUT':
      return initialState;
    default:
      return state;
  }
}

export default foiRequests;