UNPKG

cra-template-rb

Version:

The official React Boilerplate template for Create React App

46 lines (41 loc) 1.35 kB
import { PayloadAction } from '@reduxjs/toolkit'; import { Repo } from 'types/Repo'; import { createSlice } from 'utils/@reduxjs/toolkit'; import { useInjectReducer, useInjectSaga } from 'utils/redux-injectors'; import { githubRepoFormSaga } from './saga'; import { GithubRepoFormState, RepoErrorType } from './types'; export const initialState: GithubRepoFormState = { username: 'react-boilerplate', repositories: [], loading: false, error: null, }; const slice = createSlice({ name: 'githubRepoForm', initialState, reducers: { changeUsername(state, action: PayloadAction<string>) { state.username = action.payload; }, loadRepos(state) { state.loading = true; state.error = null; state.repositories = []; }, reposLoaded(state, action: PayloadAction<Repo[]>) { const repos = action.payload; state.repositories = repos; state.loading = false; }, repoError(state, action: PayloadAction<RepoErrorType>) { state.error = action.payload; state.loading = false; }, }, }); export const { actions: githubRepoFormActions, reducer } = slice; export const useGithubRepoFormSlice = () => { useInjectReducer({ key: slice.name, reducer: slice.reducer }); useInjectSaga({ key: slice.name, saga: githubRepoFormSaga }); return { actions: slice.actions }; };