Skip to content

Instantly share code, notes, and snippets.

@marcusradell
Created May 19, 2017 19:44
Show Gist options
  • Save marcusradell/bf9baa05a66b5932b42ce7bb8c85ab24 to your computer and use it in GitHub Desktop.
Save marcusradell/bf9baa05a66b5932b42ce7bb8c85ab24 to your computer and use it in GitHub Desktop.
const initialState = {
isInitialState: true,
errors: [],
showUserLog: true,
showSystemLog: false,
startDate: null,
endDate: null,
// @TODO: Remove mock data
categories: ["category 1", "category 2"],
categoryFilters: {}
};
const toggleCategoryFilterUpdater = ({ category, isActive }) => state =>
Object.assign({}, state, {
categoryFilters: { ...state.categoryFilters, [category]: isActive }
});
const toggleUserLogUpdater = isActive => state =>
Object.assign({}, state, { showUserLog: isActive });
const toggleSystemLogUpdater = isActive => state =>
Object.assign({}, state, { showSystemLog: isActive });
const setStartDateUpdater = startDate => state =>
Object.assign({}, state, { startDate });
const setEndDateUpdater = endDate => state =>
Object.assign({}, state, { endDate });
const loadedCategoriesErrorUpdater = errors => state =>
Object.assign({}, state, { errors });
const loadedCategoriesSuccessUpdater = categories => state =>
Object.assign({}, state, { categories, isInitialState: false, errors: [] });
const loadedCategoriesUpdater = result =>
(result.errors
? loadedCategoriesErrorUpdater(result.errors)
: loadedCategoriesSuccessUpdater(result.data));
const createActions = setState => {
const toggleCategoryFilter = ({ category, isActive }) =>
setState(toggleCategoryFilterUpdater({ category, isActive }));
const loadCategories = getCategoriesService =>
getCategoriesService()
.then(loadedCategoriesUpdater)
.then(updater => setState(updater));
const toggleUserLog = isActive => setState(toggleUserLogUpdater(isActive));
const toggleSystemLog = isActive =>
setState(toggleSystemLogUpdater(isActive));
const setStartDate = startDate => setState(setStartDateUpdater(startDate));
const setEndDate = endDate => setState(setEndDateUpdater(endDate));
const categories = {
loadCategories,
toggleCategoryFilter
};
const dates = {
setStartDate,
setEndDate
};
const logs = {
toggleSystemLog,
toggleUserLog
};
const actions = {
categories,
dates,
logs
};
return actions;
};
export { initialState, createActions };
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment