UNPKG

4.19 kBSource Map (JSON)View Raw
1{"version":3,"names":["UNINTIALIZED_STATE","useSyncState","initialState","stateRef","React","useRef","isSchedulingRef","isMountedRef","useEffect","current","trackingState","setTrackingState","useState","getState","useCallback","setState","state","scheduleUpdate","callback","flushUpdates","useDebugValue"],"sources":["useSyncState.tsx"],"sourcesContent":["import * as React from 'react';\n\nconst UNINTIALIZED_STATE = {};\n\n/**\n * This is definitely not compatible with concurrent mode, but we don't have a solution for sync state yet.\n */\nexport default function useSyncState<T>(initialState?: (() => T) | T) {\n const stateRef = React.useRef<T>(UNINTIALIZED_STATE as any);\n const isSchedulingRef = React.useRef(false);\n const isMountedRef = React.useRef(true);\n\n React.useEffect(() => {\n isMountedRef.current = true;\n\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n\n if (stateRef.current === UNINTIALIZED_STATE) {\n stateRef.current =\n // @ts-expect-error: initialState is a function, but TypeScript doesn't think so\n typeof initialState === 'function' ? initialState() : initialState;\n }\n\n const [trackingState, setTrackingState] = React.useState(stateRef.current);\n\n const getState = React.useCallback(() => stateRef.current, []);\n\n const setState = React.useCallback((state: T) => {\n if (state === stateRef.current || !isMountedRef.current) {\n return;\n }\n\n stateRef.current = state;\n\n if (!isSchedulingRef.current) {\n setTrackingState(state);\n }\n }, []);\n\n const scheduleUpdate = React.useCallback((callback: () => void) => {\n isSchedulingRef.current = true;\n\n try {\n callback();\n } finally {\n isSchedulingRef.current = false;\n }\n }, []);\n\n const flushUpdates = React.useCallback(() => {\n if (!isMountedRef.current) {\n return;\n }\n\n // Make sure that the tracking state is up-to-date.\n // We call it unconditionally, but React should skip the update if state is unchanged.\n setTrackingState(stateRef.current);\n }, []);\n\n // If we're rendering and the tracking state is out of date, update it immediately\n // This will make sure that our updates are applied as early as possible.\n if (trackingState !== stateRef.current) {\n setTrackingState(stateRef.current);\n }\n\n const state = stateRef.current;\n\n React.useDebugValue(state);\n\n return [state, getState, setState, scheduleUpdate, flushUpdates] as const;\n}\n"],"mappings":";;;;;;;AAAA;;;;;;AAEA,MAAMA,kBAAkB,GAAG,EAA3B;AAEA;AACA;AACA;;AACe,SAASC,YAAT,CAAyBC,YAAzB,EAAuD;EACpE,MAAMC,QAAQ,GAAGC,KAAK,CAACC,MAAN,CAAgBL,kBAAhB,CAAjB;EACA,MAAMM,eAAe,GAAGF,KAAK,CAACC,MAAN,CAAa,KAAb,CAAxB;EACA,MAAME,YAAY,GAAGH,KAAK,CAACC,MAAN,CAAa,IAAb,CAArB;EAEAD,KAAK,CAACI,SAAN,CAAgB,MAAM;IACpBD,YAAY,CAACE,OAAb,GAAuB,IAAvB;IAEA,OAAO,MAAM;MACXF,YAAY,CAACE,OAAb,GAAuB,KAAvB;IACD,CAFD;EAGD,CAND,EAMG,EANH;;EAQA,IAAIN,QAAQ,CAACM,OAAT,KAAqBT,kBAAzB,EAA6C;IAC3CG,QAAQ,CAACM,OAAT,GACE;IACA,OAAOP,YAAP,KAAwB,UAAxB,GAAqCA,YAAY,EAAjD,GAAsDA,YAFxD;EAGD;;EAED,MAAM,CAACQ,aAAD,EAAgBC,gBAAhB,IAAoCP,KAAK,CAACQ,QAAN,CAAeT,QAAQ,CAACM,OAAxB,CAA1C;EAEA,MAAMI,QAAQ,GAAGT,KAAK,CAACU,WAAN,CAAkB,MAAMX,QAAQ,CAACM,OAAjC,EAA0C,EAA1C,CAAjB;EAEA,MAAMM,QAAQ,GAAGX,KAAK,CAACU,WAAN,CAAmBE,KAAD,IAAc;IAC/C,IAAIA,KAAK,KAAKb,QAAQ,CAACM,OAAnB,IAA8B,CAACF,YAAY,CAACE,OAAhD,EAAyD;MACvD;IACD;;IAEDN,QAAQ,CAACM,OAAT,GAAmBO,KAAnB;;IAEA,IAAI,CAACV,eAAe,CAACG,OAArB,EAA8B;MAC5BE,gBAAgB,CAACK,KAAD,CAAhB;IACD;EACF,CAVgB,EAUd,EAVc,CAAjB;EAYA,MAAMC,cAAc,GAAGb,KAAK,CAACU,WAAN,CAAmBI,QAAD,IAA0B;IACjEZ,eAAe,CAACG,OAAhB,GAA0B,IAA1B;;IAEA,IAAI;MACFS,QAAQ;IACT,CAFD,SAEU;MACRZ,eAAe,CAACG,OAAhB,GAA0B,KAA1B;IACD;EACF,CARsB,EAQpB,EARoB,CAAvB;EAUA,MAAMU,YAAY,GAAGf,KAAK,CAACU,WAAN,CAAkB,MAAM;IAC3C,IAAI,CAACP,YAAY,CAACE,OAAlB,EAA2B;MACzB;IACD,CAH0C,CAK3C;IACA;;;IACAE,gBAAgB,CAACR,QAAQ,CAACM,OAAV,CAAhB;EACD,CARoB,EAQlB,EARkB,CAArB,CA7CoE,CAuDpE;EACA;;EACA,IAAIC,aAAa,KAAKP,QAAQ,CAACM,OAA/B,EAAwC;IACtCE,gBAAgB,CAACR,QAAQ,CAACM,OAAV,CAAhB;EACD;;EAED,MAAMO,KAAK,GAAGb,QAAQ,CAACM,OAAvB;EAEAL,KAAK,CAACgB,aAAN,CAAoBJ,KAApB;EAEA,OAAO,CAACA,KAAD,EAAQH,QAAR,EAAkBE,QAAlB,EAA4BE,cAA5B,EAA4CE,YAA5C,CAAP;AACD"}
\No newline at end of file