Skip to content
Snippets Groups Projects
API.ts 3.00 KiB
import axios, { AxiosRequestConfig } from 'axios'
import { toast } from 'react-toastify'
import { ICustomPopup } from './models/customPopup.model'
import { IPartnersInfo } from './models/partnersInfo.model'
import { User } from './models/user.model'

const endpoints = {
  /** public endpoints */
  common: {
    WhoAmI: '/api/common/WhoAmI',
    partnersInfo: '/api/common/partnersInfo',
    customPop: '/api/common/customPopup',
    logout: '/Logout',
  },
  /** animator role required endpoints */
  animator: {
    partnersInfo: '/api/animator/partnersInfo',
    imageNames: '/api/animator/imageNames',
    customPopup: '/api/animator/customPopup',
  },
} as const

export const fetchWhoAmI = async () => {
  try {
    const { data } = await axios.get<User | null>(endpoints.common.WhoAmI)
    return data
  } catch (error) {
    console.error('error whoami', error)
    toast.error('Accès refusé, veuillez vous connecter')
  }
}

export const fetchLogout = async () => {
  return await axios.get(endpoints.common.logout)
}

export const fetchEcogestureImages = async (
  axiosHeaders: AxiosRequestConfig
) => {
  const { data: imageNames } = await axios.get<string[]>(
    endpoints.animator.imageNames,
    axiosHeaders
  )
  if (imageNames && imageNames !== null) {
    return imageNames.map(image => `/assets/ecogesture/${image}`)
  }
  return []
}

export const fetchPartnersIssue = async () => {
  try {
    const { data } = await axios.get<IPartnersInfo>(
      endpoints.common.partnersInfo
    )
    return data
  } catch (error) {
    console.error('error partnersInfo', error)
    toast.error('Aucune information des partenaires trouvée')
    throw error
  }
}

export const putPartnersInfo = async (
  partnersInfo: IPartnersInfo,
  axiosHeaders: AxiosRequestConfig
) => {
  try {
    await axios.put<IPartnersInfo>(
      endpoints.animator.partnersInfo,
      {
        grdf_failure: partnersInfo.grdf_failure,
        enedis_failure: partnersInfo.enedis_failure,
        egl_failure: partnersInfo.egl_failure,
        notification_activated: partnersInfo.notification_activated,
      },
      axiosHeaders
    )
    toast.success('Information des partenaires mises à jour !')
  } catch (error) {
    toast.error('Erreur lors de la mise à jour des information des partenaires')
    console.error(error)
  }
}

export const fetchCustomPopup = async (): Promise<ICustomPopup> => {
  try {
    const { data } = await axios.get<ICustomPopup>(endpoints.common.customPop)
    return data
  } catch (error) {
    console.error('error customPopup', error)
    toast.error('Aucune pop-up personnalisée trouvée')
    throw error
  }
}

export const putCustomPopup = async (
  customPopup: ICustomPopup,
  axiosHeaders: AxiosRequestConfig
) => {
  try {
    await axios.put(
      endpoints.animator.customPopup,
      {
        ...customPopup,
      },
      axiosHeaders
    )
    toast.success('Pop-up personnalisée enregistrée !')
  } catch (e) {
    toast.error('Erreur lors de l’enregistrement de la pop-up personnalisée')
    console.error(e)
  }
}