client/src/redux/data/ticket.js

import {
    setTickets,
    setResolvedTickets,
    setResolved,
    setUnresolved,
    loadingTickets,
    loadingResolvedTickets,
} from 'redux/slice/ticketSlice';
import axios from 'axios';
import store from 'redux/store';

const api = process.env.REACT_APP_API_URL;

/** @module ticket_data */

/**
 * Fetches unresolved tickets.
 *
 * @function
 */
export const GetUnresolvedTickets = () => {
    store.dispatch(loadingTickets());
    axios
        .get(`${api}/ticket/unresolved`, {
            headers: { 'auth-token': localStorage.getItem('auth-token') },
        })
        .then((res) => store.dispatch(setTickets(res.data)))
        .catch((err) => console.error(err));
};

/**
 * Fetches resolved tickets.
 *
 * @function
 */
export const GetResolvedTickets = () => {
    store.dispatch(loadingResolvedTickets());
    axios
        .get(`${api}/ticket/resolved`, {
            headers: { 'auth-token': localStorage.getItem('auth-token') },
        })
        .then((res) => store.dispatch(setResolvedTickets(res.data)))
        .catch((err) => console.error(err));
};

/**
 * Creates a ticket.
 *
 * @function
 * @param {Object} ticket - The ticket to be created.
 * @param {number} ticket.type - The type of the ticket (1: Payroll issue, 2: Time-off request).
 * @param {string} ticket.message - The message of the ticket.
 */
export const CreateTicket = (ticket) => {
    store.dispatch(loadingTickets());
    axios
        .post(`${api}/ticket`, ticket, {
            headers: { 'auth-token': localStorage.getItem('auth-token') },
        })
        .catch((err) => console.error(err));
};

/**
 * Resolves a Ticket.
 *
 * @function
 * @param {number} ticketId - The id of the ticket to be resolved.
 */
export const ResolveTicket = (ticketId) => {
    axios
        .put(`${api}/ticket/${ticketId}/resolve`, null, {
            headers: { 'auth-token': localStorage.getItem('auth-token') },
        })
        .then((res) => store.dispatch(setResolved(res.data)))
        .catch((err) => console.error(err));
};

/**
 * Unresolves a Ticket.
 *
 * @function
 * @param {number} ticketId - The id of the ticket to be unresolved.
 */
export const UnresolveTicket = (ticketId) => {
    axios
        .put(`${api}/ticket/${ticketId}/unresolve`, null, {
            headers: { 'auth-token': localStorage.getItem('auth-token') },
        })
        .then((res) => store.dispatch(setUnresolved(res.data)))
        .catch((err) => console.error(err));
};