68 lines
1.8 KiB
JavaScript
68 lines
1.8 KiB
JavaScript
import {
|
|
GIFS_CLEAR_RESULTS,
|
|
GIF_SET_SELECTED,
|
|
GIF_CLEAR_SELECTED,
|
|
GIF_CHANGE_SEARCH_TEXT,
|
|
GIF_RESULTS_FETCH_REQUEST,
|
|
GIF_RESULTS_FETCH_SUCCESS,
|
|
GIF_RESULTS_FETCH_FAIL,
|
|
GIF_CATEGORIES_FETCH_REQUEST,
|
|
GIF_CATEGORIES_FETCH_SUCCESS,
|
|
GIF_CATEGORIES_FETCH_FAIL,
|
|
} from '../actions/tenor'
|
|
import { Map as ImmutableMap } from 'immutable'
|
|
|
|
const initialState = ImmutableMap({
|
|
categories: [],
|
|
results: [],
|
|
searchText: '',
|
|
next: 0,
|
|
loading: false,
|
|
error: false,
|
|
selectedGif: ImmutableMap({
|
|
id: '',
|
|
title: '',
|
|
src: '',
|
|
})
|
|
})
|
|
|
|
export default function (state = initialState, action) {
|
|
switch (action.type) {
|
|
case GIF_RESULTS_FETCH_REQUEST:
|
|
case GIF_CATEGORIES_FETCH_REQUEST:
|
|
return state.set('loading', true)
|
|
case GIF_RESULTS_FETCH_SUCCESS:
|
|
return state.withMutations(map => {
|
|
map.set('results', action.data.results);
|
|
map.set('next', action.data.next);
|
|
map.set('error', false);
|
|
map.set('loading', false);
|
|
});
|
|
case GIF_CATEGORIES_FETCH_SUCCESS:
|
|
return state.withMutations(map => {
|
|
map.set('categories', action.categories);
|
|
map.set('error', false);
|
|
map.set('loading', false);
|
|
});
|
|
case GIF_RESULTS_FETCH_FAIL:
|
|
case GIF_CATEGORIES_FETCH_FAIL:
|
|
return state.withMutations(map => {
|
|
map.set('error', !!action.error);
|
|
map.set('loading', false);
|
|
});
|
|
case GIFS_CLEAR_RESULTS:
|
|
return state.set('results', [])
|
|
case GIF_SET_SELECTED:
|
|
return state.set('selectedGif', ImmutableMap({
|
|
id: action.result.id,
|
|
title: action.result.title,
|
|
src: action.result.media[0].gif.url,
|
|
}))
|
|
case GIF_CLEAR_SELECTED:
|
|
return state.set('selectedGif', ImmutableMap())
|
|
case GIF_CHANGE_SEARCH_TEXT:
|
|
return state.set('searchText', action.text.trim());
|
|
default:
|
|
return state
|
|
}
|
|
} |