{"version":3,"file":"6399.chunk.7a4d5ecf3ad1d2ae74dd.js","mappings":"4qCASA,SAASA,EACLC,EACAC,GAEA,OAAQA,EAAOC,MACX,IAAK,WACD,OAAAC,EAAAA,EAAA,GACOH,GAAK,IACRI,KAAMH,EAAOI,QACbC,SAAS,EACTC,WAAOC,IAEf,IAAK,YACD,OAAAL,EAAAA,EAAA,GACOH,GAAK,IACRM,SAAS,EACTF,UAAMI,EACND,MAAON,EAAOI,UAEtB,IAAK,gBACD,OAAAF,EAAAA,EAAA,GACOH,GAAK,IACRO,WAAOC,EACPF,SAAS,EACTG,eAAe,IAEvB,QACI,OAAOT,EAEnB,CAEO,SAASU,EACZC,GAEA,MAAM,IAAEC,EAAG,OAAEC,EAAM,OAAEC,EAAS,MAAK,kBAAEC,GAAoB,EAAI,aAAEC,EAAe,IAAG,QAAEC,EAAU,GAAMN,IAE5F,KAAEP,EAAI,QAAEE,EAAO,MAAEC,EAAK,cAAEE,GAAiBS,GAAYC,EAAAA,WAE1DpB,EAAS,CACPK,UAAMI,EACNF,SAAS,EACTC,WAAOC,EACPC,eAAe,IAGbW,GAAgBC,EAAAA,EAAAA,GAAY,CAAET,MAAKE,SAAQD,WAC3CS,GAAsBC,EAAAA,EAAAA,IAmC5B,WACIC,EAAAA,EACKC,QAAmD,CAChDb,MACAE,SACAD,SACAI,UACAS,YAAa,IAAIC,EAAAA,EAAMC,aAAYC,IAC/BH,EAAYI,QAAUD,CAAK,MAGlCE,MAAKC,IACFN,EAAYI,aAAUtB,EACtBU,EAAS,CAAEhB,KAAM,WAAYG,QAAS2B,EAAS5B,MAAO,IAEzD6B,OAAMC,KACCC,EAAAA,EAAAA,IAASD,KAIbhB,EAAS,CAAEhB,KAAM,YAAaG,QAAS6B,EAAEE,UAEzCC,QAAQ9B,MAAM2B,GAAE,GAE5B,GA3DiDlB,GAE3CU,EAAcP,EAAAA,SAwBpB,SAASmB,IACDZ,EAAYI,SACZJ,EAAYI,UAGhBZ,EAAS,CAAEhB,KAAM,kBACjBoB,GACJ,CA4BA,OAzDAH,EAAAA,WAAgB,KACRJ,GACAuB,IAGG,KACCZ,EAAYI,SACZJ,EAAYI,SAChB,IAEL,IAEHX,EAAAA,WAAgB,OACSC,GACfA,EAAcR,MAAQA,GAAOQ,EAAcN,SAAWA,IAAWyB,EAAAA,EAAAA,IAAYnB,EAAcP,OAAQA,KAGnFJ,IAAkBM,GACpCuB,GACJ,GACD,CAAC1B,EAAKE,EAAQD,EAAQJ,EAAeM,IAqCjC,CACHX,OACAE,UACAC,QAER,C,uECvHO,SAASc,EAAemB,GAC3B,MAAMC,EAAMtB,EAAAA,SAKZ,OAJAA,EAAAA,WAAgB,KACZsB,EAAIX,QAAUU,CAAK,IAGhBC,EAAIX,OACf,C","sources":["webpack://Kristiania.Web/./Features/Partials/FetchData/useFetchData.ts","webpack://Kristiania.Web/./Features/Partials/Utils/usePrevious.ts"],"sourcesContent":["import type { AxiosResponse, Canceler } from 'axios';\nimport axios, { isCancel } from 'axios';\nimport * as React from 'react';\nimport { usePrevious } from '../Utils/usePrevious';\nimport { checkEquals } from '../Utils/utils';\nimport { useDebounce } from '~/Utils/Hooks/useDebounce';\nimport { axiosWrapper } from './axiosWrapper';\nimport type { FetchDataAction, FetchDataHookProps, FetchDataHookReturn, FetchDataHookState } from './types';\n\nfunction reducer(\n state: FetchDataHookState,\n action: FetchDataAction\n): FetchDataHookState {\n switch (action.type) {\n case 'SET_DATA':\n return {\n ...state,\n data: action.payload,\n loading: false,\n error: undefined,\n };\n case 'SET_ERROR':\n return {\n ...state,\n loading: false,\n data: undefined,\n error: action.payload,\n };\n case 'START_REQUEST':\n return {\n ...state,\n error: undefined,\n loading: true,\n dataRequested: true,\n };\n default:\n return state;\n }\n}\n\nexport function useFetchData(\n props: FetchDataHookProps\n): FetchDataHookReturn {\n const { url, params, method = 'get', shouldMakeRequest = true, debounceTime = 200, timeout = 0 } = props;\n\n const [{ data, loading, error, dataRequested }, dispatch] = React.useReducer<\n React.Reducer, FetchDataAction>\n >(reducer, {\n data: undefined,\n loading: false,\n error: undefined,\n dataRequested: false,\n });\n\n const previousProps = usePrevious({ url, method, params });\n const requestWithDebounce = useDebounce(request, debounceTime);\n\n const cancelToken = React.useRef();\n\n React.useEffect(() => {\n if (shouldMakeRequest) {\n fetchData();\n }\n\n return () => {\n if (cancelToken.current) {\n cancelToken.current();\n }\n };\n }, []);\n\n React.useEffect(() => {\n const propsChanged = previousProps\n ? previousProps.url !== url || previousProps.method !== method || !checkEquals(previousProps.params, params)\n : false;\n\n if ((propsChanged || !dataRequested) && shouldMakeRequest) {\n fetchData();\n }\n }, [url, method, params, dataRequested, shouldMakeRequest]);\n\n function fetchData() {\n if (cancelToken.current) {\n cancelToken.current();\n }\n\n dispatch({ type: 'START_REQUEST' });\n requestWithDebounce();\n }\n\n function request() {\n axiosWrapper\n .request>({\n url,\n method,\n params,\n timeout,\n cancelToken: new axios.CancelToken(token => {\n cancelToken.current = token;\n }),\n })\n .then(response => {\n cancelToken.current = undefined;\n dispatch({ type: 'SET_DATA', payload: response.data });\n })\n .catch(e => {\n if (isCancel(e)) {\n return;\n }\n\n dispatch({ type: 'SET_ERROR', payload: e.message });\n // eslint-disable-next-line no-console\n console.error(e);\n });\n }\n\n return {\n data,\n loading,\n error,\n };\n}\n","import * as React from 'react';\n\nexport function usePrevious(value: T) {\n const ref = React.useRef();\n React.useEffect(() => {\n ref.current = value;\n });\n\n return ref.current as T;\n}\n"],"names":["reducer","state","action","type","_objectSpread","data","payload","loading","error","undefined","dataRequested","useFetchData","props","url","params","method","shouldMakeRequest","debounceTime","timeout","dispatch","React","previousProps","usePrevious","requestWithDebounce","useDebounce","axiosWrapper","request","cancelToken","axios","CancelToken","token","current","then","response","catch","e","isCancel","message","console","fetchData","checkEquals","value","ref"],"sourceRoot":""}