roomReducers.js 3.34 KB
import {
  ROOM_CHECK_AVAILABILITY_REQUEST,
  ROOM_CHECK_AVAILABILITY_SUCCESS,
  ROOM_CHECK_AVAILABILITY_RESET,
  ROOM_CHECK_AVAILABILITY_FAIL,
  ROOM_MAKE_REVIEW_REQUEST,
  ROOM_MAKE_REVIEW_SUCCESS,
  ROOM_MAKE_REVIEW_RESET,
  ROOM_MAKE_REVIEW_FAIL,
  ROOM_FETCH_BOOKED_DATES_SUCCESS,
  ROOM_FETCH_BOOKED_DATES_FAIL,
  ALL_ROOMS_FAIL,
  ALL_ROOMS_SUCCESS,
  ROOM_DETAILS_SUCCESS,
  ROOM_DETAILS_FAIL,
  CLEAR_ERRORS
} from "../constants/roomConstants";

// All rooms reducer.
export const allRoomsReducer = (state = { rooms: [] }, action) => {
  switch (action.type) {
    case ALL_ROOMS_SUCCESS:
      return {
        roomsCount: action.payload.meta.pagination.total,
        resultsPerPage: action.payload.meta.pagination.pageSize,
        filteredRoomsCount: 0,
        rooms: action.payload.data
      };

    case ALL_ROOMS_FAIL:
      return {
        error: action.payload.error.message
      };

    case CLEAR_ERRORS:
      return {
        ...state,
        error: null
      };

    default:
      return state;
  }
};

// Room details reducer.
export const roomDetailsReducer = (state = { room: {} }, action) => {
  switch (action.type) {
    case ROOM_DETAILS_SUCCESS:
      return {
        room: action.payload.data
      };

    case ROOM_DETAILS_FAIL:
      return {
        error: action.payload.error.message
      };

    case CLEAR_ERRORS:
      return {
        ...state,
        error: null
      };

    default:
      return state;
  }
};

// room availability
export const checkRoomAvailabilityReducer = (state = { available: true }, action) => {
  switch (action.type) {
    case ROOM_CHECK_AVAILABILITY_REQUEST:
      return {
        loading: true
      };

    case ROOM_CHECK_AVAILABILITY_SUCCESS:
      return {
        loading: false,
        available: action.payload.isAvailable
      };

    case ROOM_CHECK_AVAILABILITY_RESET:
      return {
        loading: false,
        available: null
      };

    case ROOM_CHECK_AVAILABILITY_FAIL:
      return {
        loading: false,
        error: action.payload.error.message
      };

    case CLEAR_ERRORS:
      return {
        ...state,
        error: null
      };

    default:
      return state;
  }
};

// room availability
export const makeReviewReducer = (state = { review: null }, action) => {
  switch (action.type) {
    case ROOM_MAKE_REVIEW_REQUEST:
      return {
        loading: true
      };

    case ROOM_MAKE_REVIEW_SUCCESS:
      return {
        loading: false,
        review: action.payload.review
      };

    case ROOM_MAKE_REVIEW_RESET:
      return {
        review: null
      };

    case ROOM_MAKE_REVIEW_FAIL:
      return {
        loading: false,
        error: action.payload.error.message
      };

    case CLEAR_ERRORS:
      return {
        ...state,
        error: null
      };

    default:
      return state;
  }
};

// Get all booked dates.
export const fetchRoomBookedDatesReducer = (state = { bookedDates: [] }, action) => {
  switch (action.type) {
    case ROOM_FETCH_BOOKED_DATES_SUCCESS:
      return {
        loading: false,
        bookedDates: action.payload.bookedDates.map(bookedDate => new Date(bookedDate))
      };

    case ROOM_FETCH_BOOKED_DATES_FAIL:
      return {
        loading: false,
        error: action.payload.error.message
      };

    case CLEAR_ERRORS:
      return {
        ...state,
        error: null
      };

    default:
      return state;
  }
};