You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
3.3 KiB
106 lines
3.3 KiB
// redux/actions/moveAction.ts
|
|
import { CREATE_MOVE, DELETE, DELETE_MOVE, GET, GET_MOVES, MOVE_ERROR, POST, PUT, UPDATE_MOVE } from '../constants';
|
|
import {
|
|
Move
|
|
} from "../../entities/Move";
|
|
import { Dispatch } from "redux";
|
|
import { API_BASE_URL } from "../../config";
|
|
|
|
|
|
export const createMove = (move: Move) => {
|
|
const verb = POST
|
|
return async (dispatch: Dispatch) => {
|
|
try {
|
|
const response = await fetch(`${API_BASE_URL}/move`, {
|
|
method: verb,
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
body: JSON.stringify(move),
|
|
});
|
|
|
|
if (!response.ok) {
|
|
throw new Error(`Failed to ${verb}: ${response.statusText}`);
|
|
}
|
|
|
|
const data = await response.json();
|
|
dispatch({ type: CREATE_MOVE, payload: data });
|
|
}
|
|
catch (error) {
|
|
console.error(error);
|
|
// @ts-ignore
|
|
dispatch({ type: MOVE_ERROR, payload: error.message });
|
|
}
|
|
}
|
|
}
|
|
|
|
export const getMoves = () => {
|
|
const verb = GET
|
|
return async (dispatch: Dispatch) => {
|
|
try {
|
|
const response = await fetch(`${API_BASE_URL}/move`);
|
|
|
|
if (!response.ok) {
|
|
throw new Error(`Failed to ${verb}: ${response.statusText}`);
|
|
}
|
|
|
|
const data = await response.json();
|
|
dispatch({ type: GET_MOVES, payload: data });
|
|
}
|
|
catch (error) {
|
|
console.error(error);
|
|
// @ts-ignore
|
|
dispatch({ type: MOVE_ERROR, payload: error.message });
|
|
}
|
|
}
|
|
}
|
|
|
|
export const updateMove = (id: string, move: Move) => {
|
|
const verb = PUT
|
|
return async (dispatch: Dispatch) => {
|
|
try {
|
|
const response = await fetch(`${API_BASE_URL}/move/${id}`, {
|
|
method: verb,
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
body: JSON.stringify(move),
|
|
});
|
|
|
|
if (!response.ok) {
|
|
throw new Error(`Failed to ${verb}: ${response.statusText}`);
|
|
}
|
|
|
|
const updatedMove = await response.json();
|
|
dispatch({ type: UPDATE_MOVE, payload: updatedMove });
|
|
}
|
|
catch (error) {
|
|
console.error(error);
|
|
// @ts-ignore
|
|
dispatch({ type: MOVE_ERROR, payload: error.message });
|
|
}
|
|
}
|
|
}
|
|
|
|
export const deleteMove = (id: string) => {
|
|
const verb = DELETE
|
|
return async (dispatch: Dispatch) => {
|
|
try {
|
|
const response = await fetch(`${API_BASE_URL}/move/${id}`, {
|
|
method: verb,
|
|
});
|
|
|
|
if (!response.ok) {
|
|
throw new Error(`Failed to ${verb}: ${response.statusText}`);
|
|
}
|
|
|
|
dispatch({ type: DELETE_MOVE, payload: id });
|
|
}
|
|
catch (error) {
|
|
console.error(error);
|
|
// @ts-ignore
|
|
dispatch({ type: MOVE_ERROR, payload: error.message });
|
|
}
|
|
}
|
|
}
|