Skip to content

Instantly share code, notes, and snippets.

@piotr-l
Last active May 26, 2019 12:43
Show Gist options
  • Save piotr-l/ab640fa31eed356d8bcfc70ae544c3c9 to your computer and use it in GitHub Desktop.
Save piotr-l/ab640fa31eed356d8bcfc70ae544c3c9 to your computer and use it in GitHub Desktop.
Projects
import { PROJECTS_LOADING, PROJECTS_PAGE_RECEIVED } from './constants';
import { Project } from '../../typedef';
export const ProjectsReceived = (projects: Project[]) => ({
type: PROJECTS_PAGE_RECEIVED as typeof PROJECTS_PAGE_RECEIVED,
projects: projects
})
export const ProjectsLoading = (isLoading: boolean) => ({
type: PROJECTS_LOADING as typeof PROJECTS_LOADING,
isLoading: isLoading
})
export type Actions =
| ReturnType<typeof ProjectsReceived>
| ReturnType<typeof ProjectsLoading>
export const actionMap = {
ProjectsReceived,
ProjectsLoading
}
export const PROJECTS_PAGE_RECEIVED = 'PROJECTS_PAGE_RECEIVED';
export const PROJECTS_LOADING = 'PROJECTS_LOADING';
import { Actions } from './actions';
import { PROJECTS_LOADING, PROJECTS_PAGE_RECEIVED } from './constants';
import { ProjectsState } from './state';
import { Project } from '../../typedef';
const initialState: ProjectsState = {
isLoading: false,
projects: [] as Project[]
}
export const projectsReducer = (state = initialState, action: Actions) => {
switch(action.type) {
case PROJECTS_PAGE_RECEIVED:
return {
...state,
projects: [...state.projects, ...action.projects]
}
case PROJECTS_LOADING:
return {
...state,
isLoading: action.isLoading
}
default:
return state
}
}
import { Project } from "../../typedef";
export type ProjectsState = {
isLoading: boolean;
projects: Project[]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment