Files
Eventment/app/actions/items.js

35 lines
1.2 KiB
JavaScript

import { List } from 'immutable';
import { fetchItems as fetchItemsApi } from '../api/items.js';
import { GET_ITEMS, ITEMS_LOAD_FAILED, ITEMS_LOADED } from '../constants/actionTypes.js';
import { getActiveEventId } from '../selectors/activeEvent.js';
import { getAuthToken } from '../selectors/auth.js';
import Item from '../domain/Item.js';
const beginItemLoad = () => ({ type: GET_ITEMS });
const itemsLoaded = (payload) => ({ type: ITEMS_LOADED, payload });
const itemsLoadFailure = (payload) => ({ type: ITEMS_LOAD_FAILED, payload });
const itemsFetchSuccess = (items) => (dispatch) => {
const payload = List(items).map((i) => Item.fromJS(i));
dispatch(itemsLoaded(payload));
};
const itemsFetchFailure = (error) => (dispatch) => {
console.error('[actions::items::itemsFetchFailure]', error);
dispatch(itemsLoadFailure(error));
};
export const fetchItems = () => (dispatch, getState) => {
const authToken = getAuthToken(getState());
const eventId = getActiveEventId(getState());
dispatch(beginItemLoad());
fetchItemsApi(eventId, authToken)
.then((payload) => dispatch(itemsFetchSuccess(payload)))
.catch((err) => dispatch(itemsFetchFailure(err)));
};