{"version":3,"file":"utils.cjs","sources":["../../../../src/components/file-input/utils.ts"],"sourcesContent":["/**\n * Hjelpefunksjon for å laste opp filer med progress-bar\n *\n * @param {string} url Endepunktet som skal lastes opp til\n * @param {FormData} data FormData med filen som skal lastes opp\n * @param progress Callback som blir kalt med oppdatert progresjon\n * @param {Record<string, string>} headers Eventuelle headers som skal sendes\n * med opplasingen. Her kan du f.eks. sende med CSRF-verdier.\n * @returns {T} Svaret fra endepunktet\n */\nexport async function upload<T>(\n    url: string,\n    data: FormData,\n    progress: (progress: number) => void,\n    headers?: Record<string, string>,\n): Promise<T> {\n    // I skrivende stund er det ikke mulig å hente progress med fetch. Derfor bruker vi XMLHttpRequest.\n    const xhr = new XMLHttpRequest();\n    const request = new Promise<ProgressEvent<XMLHttpRequestEventTarget>>(\n        (resolve, reject) => {\n            xhr.upload.addEventListener(\"progress\", (e) => {\n                if (e.lengthComputable && progress) {\n                    progress((e.loaded / e.total) * 100);\n                }\n            });\n\n            xhr.addEventListener(\"load\", (e) => {\n                if (xhr.status >= 400) {\n                    reject(e);\n                }\n                resolve(e);\n            });\n\n            xhr.addEventListener(\"error\", (e) => {\n                reject(e);\n            });\n\n            xhr.addEventListener(\"abort\", (e) => {\n                reject(e);\n            });\n\n            xhr.open(\"POST\", url);\n\n            for (const [header, value] of Object.entries(headers || {})) {\n                xhr.setRequestHeader(header, value);\n            }\n\n            xhr.send(data);\n        },\n    ).then(\n        (e) => {\n            const response: T = JSON.parse(xhr.responseText);\n            return response;\n        },\n        () => {\n            throw new Error(xhr.statusText);\n        },\n    );\n\n    return request;\n}\n"],"names":["async","url","data","progress","headers","xhr","XMLHttpRequest","Promise","resolve","reject","upload","addEventListener","e","lengthComputable","loaded","total","status","open","header","value","Object","entries","setRequestHeader","send","then","JSON","parse","responseText","Error","statusText"],"mappings":"+FAUAA,eACIC,EACAC,EACAC,EACAC,GAGA,MAAMC,EAAM,IAAIC,eA0ChB,OAzCgB,IAAIC,QAChB,CAACC,EAASC,KACNJ,EAAIK,OAAOC,iBAAiB,WAAaC,IACjCA,EAAEC,kBAAoBV,GACtBA,EAAUS,EAAEE,OAASF,EAAEG,MAAS,OAIxCV,EAAIM,iBAAiB,OAASC,IACtBP,EAAIW,QAAU,KACdP,EAAOG,GAEXJ,EAAQI,KAGZP,EAAIM,iBAAiB,QAAUC,IAC3BH,EAAOG,KAGXP,EAAIM,iBAAiB,QAAUC,IAC3BH,EAAOG,KAGXP,EAAIY,KAAK,OAAQhB,GAEjB,IAAA,MAAYiB,EAAQC,KAAUC,OAAOC,QAAQjB,GAAW,CAAA,GACpDC,EAAIiB,iBAAiBJ,EAAQC,GAGjCd,EAAIkB,KAAKrB,KAEfsB,KACGZ,GACuBa,KAAKC,MAAMrB,EAAIsB,cAGvC,KACI,MAAM,IAAIC,MAAMvB,EAAIwB,aAKhC"}