quran/quran.com-frontend

View on GitHub
src/redux/modules/options.js

Summary

Maintainability
B
4 hrs
Test Coverage
import {
  SET_OPTION,
  LOAD_RECITERS,
  LOAD_RECITERS_SUCCESS,
  SET_USER_AGENT,
  LOAD_TRANSLATIONS,
  LOAD_TRANSLATIONS_SUCCESS
} from 'redux/constants/options.js';

const initialState = {
  isReadingMode: false,
  isNightMode: false,
  isShowingSurahInfo: false,
  loadingRecitations: false,
  loadingTranslations: false,
  audio: 7, // Mishari Rashid al-`Afasy
  translations: [20], // Sahih International
  tooltip: 'translation',
  userAgent: null,
  footNote: null,
  loadingFootNote: false,
  options: {
    recitations: [],
    translations: []
  },
  fontSize: {
    arabic: 3.5,
    translation: 2
  }
};

export default function reducer(state = initialState, action = {}) {
  switch (action.type) {
    case SET_OPTION: {
      const payload = action.payload;
      return {
        ...state,
        ...payload
      };
    }
    case LOAD_RECITERS: {
      return {
        ...state,
        loadingRecitations: true
      };
    }
    case LOAD_RECITERS_SUCCESS: {
      return {
        ...state,
        loadingRecitations: false,
        options: {
          ...state.options,
          recitations: action.result.recitations
        }
      };
    }
    case SET_USER_AGENT: {
      const { userAgent } = action;
      return {
        ...state,
        userAgent
      };
    }
    case LOAD_TRANSLATIONS: {
      return {
        ...state,
        loadingTranslations: true
      };
    }
    case LOAD_TRANSLATIONS_SUCCESS: {
      return {
        ...state,
        loadingTranslations: false,
        options: {
          ...state.options,
          translations: action.result.translations
        }
      };
    }
    default:
      return state;
  }
}