balmet.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

axios.js (1830B)


      1 import axios from 'axios'
      2 import { useUserStore } from '../state/User'
      3 
      4 const Axios = axios.create({
      5     baseURL: window.extendifySdkData.root,
      6     headers: {
      7         'X-WP-Nonce': window.extendifySdkData.nonce,
      8         'X-Requested-With': 'XMLHttpRequest',
      9         'X-Extendify': true,
     10     },
     11 })
     12 
     13 function findResponse(response) {
     14     return Object.prototype.hasOwnProperty.call(response, 'data')
     15         ? response.data
     16         : response
     17 }
     18 
     19 function handleErrors(error) {
     20     if (!error.response) {
     21         return
     22     }
     23     console.error(error.response)
     24     // TODO: add a global error message system
     25     return Promise.reject(findResponse(error.response))
     26 }
     27 
     28 function addDefaults(request) {
     29     if (request.data) {
     30         request.data.remaining_imports = useUserStore.getState().remainingImports()
     31         request.data.entry_point = useUserStore.getState().entryPoint
     32         request.data.total_imports = useUserStore.getState().imports
     33     }
     34     return request
     35 }
     36 
     37 function checkDevMode(request) {
     38     request.headers['X-Extendify-Dev-Mode'] = window.location.search.indexOf('DEVMODE') > -1
     39     request.headers['X-Extendify-Local-Mode'] = window.location.search.indexOf('LOCALMODE') > -1
     40     return request
     41 }
     42 
     43 function checkForSoftError(response) {
     44     if (Object.prototype.hasOwnProperty.call(response, 'soft_error')) {
     45         window.dispatchEvent(new CustomEvent('extendify-sdk::softerror-encountered', {
     46             detail: response.soft_error,
     47             bubbles: true,
     48         }))
     49     }
     50     return response
     51 }
     52 
     53 Axios.interceptors.response.use((response) => checkForSoftError(findResponse(response)),
     54     (error) => handleErrors(error))
     55 
     56 // TODO: setup a pipe function instead of this nested pattern
     57 Axios.interceptors.request.use((request) => checkDevMode(addDefaults(request)),
     58     (error) => error)
     59 
     60 export { Axios }