cra-template-rb
Version:
The official React Boilerplate template for Create React App
46 lines (41 loc) • 1.35 kB
text/typescript
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 };
};