{"version":3,"file":"async.mjs","sources":["../../../../../../../../../web/src/ui/react/utils/async.ts"],"sourcesContent":["import { Dispatch, SetStateAction, useCallback, useEffect, useRef, useState } from 'react';\n\n// useState can cause memory leaks if it is set after the component unmounted. For example, if it is\n// set after `await`, or in a `then`, `catch`, or `finally`, or in a setTimout/setInterval.\nexport const useAsyncState = <T>(initialState: T | (() => T)): [T, Dispatch<SetStateAction<T>>] => {\n  const isMounted = useRef<boolean>(true);\n  const [state, setState] = useState<T>(initialState);\n\n  useEffect(() => {\n    isMounted.current = true;\n    return () => {\n      isMounted.current = false;\n    };\n  }, []);\n\n  const setStateAction = useCallback<Dispatch<SetStateAction<T>>>((newState) => {\n    if (isMounted.current) {\n      setState(newState);\n    }\n  }, []);\n\n  return [state, setStateAction];\n};\n"],"names":["useAsyncState","initialState","isMounted","useRef","state","setState","useState","useEffect","current","setStateAction","useCallback","newState"],"mappings":";;AAEA;AACA;AACO,MAAMA,gBAAgB,CAAIC,YAAAA,GAAAA;AAC/B,IAAA,MAAMC,YAAYC,MAAAA,CAAgB,IAAA,CAAA;AAClC,IAAA,MAAM,CAACC,KAAAA,EAAOC,QAAAA,CAAS,GAAGC,QAAAA,CAAYL,YAAAA,CAAAA;IAEtCM,SAAAA,CAAU,IAAA;AACRL,QAAAA,SAAAA,CAAUM,OAAO,GAAG,IAAA;QACpB,OAAO,IAAA;AACLN,YAAAA,SAAAA,CAAUM,OAAO,GAAG,KAAA;AACtB,QAAA,CAAA;AACF,IAAA,CAAA,EAAG,EAAE,CAAA;IAEL,MAAMC,cAAAA,GAAiBC,YAAyC,CAACC,QAAAA,GAAAA;QAC/D,IAAIT,SAAAA,CAAUM,OAAO,EAAE;YACrBH,QAAAA,CAASM,QAAAA,CAAAA;AACX,QAAA;AACF,IAAA,CAAA,EAAG,EAAE,CAAA;IAEL,OAAO;AAACP,QAAAA,KAAAA;AAAOK,QAAAA;AAAe,KAAA;AAChC;;;;"}