{ "version": 3, "sources": ["../javascripts/hooks/exchange-status.ts"], "sourcesContent": ["import { useEffect, useState } from 'react';\n\nimport { requestStatus, responseStatus } from '../shared/statuses';\n\nexport enum ExchangeTypes {\n Fetching,\n Creating,\n Updating,\n Removing,\n}\n\nconst isPending = (type: ExchangeTypes, reqStatus: number) => {\n switch (type) {\n case ExchangeTypes.Fetching:\n return reqStatus === requestStatus.FETCHING || reqStatus === requestStatus.FETCHING_LIST;\n case ExchangeTypes.Creating:\n return reqStatus === requestStatus.CREATING;\n case ExchangeTypes.Updating:\n return reqStatus === requestStatus.UPDATING;\n case ExchangeTypes.Removing:\n return reqStatus === requestStatus.REMOVING;\n }\n\n return false;\n};\n\ninterface InitalState {\n type: ExchangeTypes;\n pending: boolean;\n successful: boolean;\n failed: boolean;\n}\n\nexport const initialExchangeStatus = (type: ExchangeTypes, reqStatus: number): InitalState => ({\n type,\n pending: reqStatus !== null ? isPending(type, reqStatus) : false,\n successful: false,\n failed: false,\n});\n\nconst withDataExchangeStatusEffect = (\n currentStatus: InitalState,\n callback: (state: InitalState) => void,\n reqStatus: number,\n respStatus: number,\n) => {\n useEffect(() => {\n const { type, pending, successful, failed } = currentStatus;\n\n if (!isPending(type, reqStatus) && (successful || failed)) {\n return;\n }\n\n if (pending && respStatus === responseStatus.OK) {\n callback({ type, pending: false, successful: true, failed: false });\n }\n if (pending && respStatus === responseStatus.FAILED) {\n callback({ type, pending: false, successful: false, failed: true });\n }\n if (isPending(type, reqStatus)) {\n callback({ type, pending: true, successful: false, failed: false });\n }\n }, [reqStatus, respStatus]);\n};\n\nexport const useDataExchangeStatus = (type: ExchangeTypes, httpStatuses: number[]) => {\n if (httpStatuses.length !== 2) {\n throw new Error(\n \"Both request status and response status need to be applied to 'useDataExchangeStatus'\",\n );\n }\n\n const [status, setStatus] = useState(() => initialExchangeStatus(type, httpStatuses[0]));\n\n withDataExchangeStatusEffect(status, setStatus, httpStatuses[0], httpStatuses[1]);\n return status;\n};\n"], "mappings": "uGAAA,IAAAA,EAAoC,SAWpC,IAAMC,EAAY,CAACC,EAAqBC,IAAsB,CAC5D,OAAQD,EAAM,CACZ,IAAK,GACH,OAAOC,IAAcC,EAAc,UAAYD,IAAcC,EAAc,cAC7E,IAAK,GACH,OAAOD,IAAcC,EAAc,SACrC,IAAK,GACH,OAAOD,IAAcC,EAAc,SACrC,IAAK,GACH,OAAOD,IAAcC,EAAc,QACvC,CAEA,MAAO,EACT,EASaC,EAAwB,CAACH,EAAqBC,KAAoC,CAC7F,KAAAD,EACA,QAASC,IAAc,KAAOF,EAAUC,EAAMC,CAAS,EAAI,GAC3D,WAAY,GACZ,OAAQ,EACV,GAEMG,EAA+B,CACnCC,EACAC,EACAL,EACAM,IACG,IACH,aAAU,IAAM,CACd,GAAM,CAAE,KAAAP,EAAM,QAAAQ,EAAS,WAAAC,EAAY,OAAAC,CAAO,EAAIL,EAE1C,CAACN,EAAUC,EAAMC,CAAS,IAAMQ,GAAcC,KAI9CF,GAAWD,IAAeI,EAAe,IAC3CL,EAAS,CAAE,KAAAN,EAAM,QAAS,GAAO,WAAY,GAAM,OAAQ,EAAM,CAAC,EAEhEQ,GAAWD,IAAeI,EAAe,QAC3CL,EAAS,CAAE,KAAAN,EAAM,QAAS,GAAO,WAAY,GAAO,OAAQ,EAAK,CAAC,EAEhED,EAAUC,EAAMC,CAAS,GAC3BK,EAAS,CAAE,KAAAN,EAAM,QAAS,GAAM,WAAY,GAAO,OAAQ,EAAM,CAAC,EAEtE,EAAG,CAACC,EAAWM,CAAU,CAAC,CAC5B,EAEaK,EAAwB,CAACZ,EAAqBa,IAA2B,CACpF,GAAIA,EAAa,SAAW,EAC1B,MAAM,IAAI,MACR,uFACF,EAGF,GAAM,CAACC,EAAQC,CAAS,KAAI,YAAS,IAAMZ,EAAsBH,EAAMa,EAAa,CAAC,CAAC,CAAC,EAEvF,OAAAT,EAA6BU,EAAQC,EAAWF,EAAa,CAAC,EAAGA,EAAa,CAAC,CAAC,EACzEC,CACT", "names": ["import_react", "isPending", "type", "reqStatus", "requestStatus", "initialExchangeStatus", "withDataExchangeStatusEffect", "currentStatus", "callback", "respStatus", "pending", "successful", "failed", "responseStatus", "useDataExchangeStatus", "httpStatuses", "status", "setStatus"] }