import axios from 'axios'; import { ICrudGetAction, ICrudPutAction, ICrudDeleteAction } from 'react-jhipster'; import { REQUEST, SUCCESS, FAILURE } from './action-type.util'; import { messages } from '../config/constants'; export const ACTION_TYPES = { FETCH_ROLES: 'userManagement/FETCH_ROLES', FETCH_USERS: 'userManagement/FETCH_USERS', FETCH_USER: 'userManagement/FETCH_USER', CREATE_USER: 'userManagement/CREATE_USER', UPDATE_USER: 'userManagement/UPDATE_USER', DELETE_USER: 'userManagement/DELETE_USER' }; const initialState = { loading: false, errorMessage: null, users: [], authorities: [], user: {}, updating: false, updateSuccess: false, totalItems: 0 }; // Reducer export default (state = initialState, action) => { switch (action.type) { case REQUEST(ACTION_TYPES.FETCH_ROLES): return { ...state }; case REQUEST(ACTION_TYPES.FETCH_USERS): case REQUEST(ACTION_TYPES.FETCH_USER): return { ...state, errorMessage: null, updateSuccess: false, loading: true }; case REQUEST(ACTION_TYPES.CREATE_USER): case REQUEST(ACTION_TYPES.UPDATE_USER): case REQUEST(ACTION_TYPES.DELETE_USER): return { ...state, errorMessage: null, updateSuccess: false, updating: true }; case FAILURE(ACTION_TYPES.FETCH_USERS): case FAILURE(ACTION_TYPES.FETCH_USER): case FAILURE(ACTION_TYPES.FETCH_ROLES): case FAILURE(ACTION_TYPES.CREATE_USER): case FAILURE(ACTION_TYPES.UPDATE_USER): case FAILURE(ACTION_TYPES.DELETE_USER): return { ...state, loading: false, updating: false, updateSuccess: false, errorMessage: action.payload }; case SUCCESS(ACTION_TYPES.FETCH_ROLES): return { ...state, loading: false, authorities: action.payload.data }; case SUCCESS(ACTION_TYPES.FETCH_USERS): return { ...state, loading: false, users: action.payload.data, totalItems: action.payload.headers['x-total-count'] }; case SUCCESS(ACTION_TYPES.FETCH_USER): return { ...state, loading: false, user: action.payload.data }; case SUCCESS(ACTION_TYPES.CREATE_USER): case SUCCESS(ACTION_TYPES.UPDATE_USER): return { ...state, updating: false, updateSuccess: true, user: action.payload.data }; case SUCCESS(ACTION_TYPES.DELETE_USER): return { ...state, updating: false, updateSuccess: true, user: {} }; default: return state; } }; const apiUrl = '/api/users'; // Actions export const getUsers: ICrudGetAction = (page, size, sort) => { const requestUrl = `${apiUrl}${sort ? `?page=${page}&size=${size}&sort=${sort}` : ''}`; return { type: ACTION_TYPES.FETCH_USERS, payload: axios.get(requestUrl) }; }; export const getRoles: ICrudGetAction = () => ({ type: ACTION_TYPES.FETCH_ROLES, payload: axios.get(`${apiUrl}/authorities`) }); export const getUser: ICrudGetAction = id => { const requestUrl = `${apiUrl}/${id}`; return { type: ACTION_TYPES.FETCH_USER, payload: axios.get(requestUrl) }; }; export const createUser: ICrudPutAction = user => async dispatch => { const result = await dispatch({ type: ACTION_TYPES.CREATE_USER, meta: { successMessage: messages.DATA_CREATE_SUCCESS_ALERT, errorMessage: messages.DATA_UPDATE_ERROR_ALERT }, payload: axios.post(apiUrl, user) }); dispatch(getUsers()); return result; }; export const updateUser: ICrudPutAction = user => async dispatch => { const result = await dispatch({ type: ACTION_TYPES.UPDATE_USER, meta: { successMessage: messages.DATA_CREATE_SUCCESS_ALERT, errorMessage: messages.DATA_UPDATE_ERROR_ALERT }, payload: axios.put(apiUrl, user) }); dispatch(getUsers()); return result; }; export const deleteUser: ICrudDeleteAction = id => async dispatch => { const requestUrl = `${apiUrl}/${id}`; const result = await dispatch({ type: ACTION_TYPES.DELETE_USER, meta: { successMessage: messages.DATA_DELETE_SUCCESS_ALERT, errorMessage: messages.DATA_UPDATE_ERROR_ALERT }, payload: axios.delete(requestUrl) }); dispatch(getUsers()); return result; };