UNPKG

jotai

Version:

👻 Primitive and flexible state management for React

45 lines (44 loc) • 1.27 kB
'use client'; import React from 'react'; import { isPromiseLike } from './continuablePromise.js'; import { useAtomValueRaw } from './useAtomValueRaw.js'; const attachPromiseStatus = (promise) => { if (!promise.status) { promise.status = 'pending'; promise.then((v) => { promise.status = 'fulfilled'; promise.value = v; }, (e) => { promise.status = 'rejected'; promise.reason = e; }); } }; const use = React.use || // A shim for older React versions ((promise) => { if (promise.status === 'pending') { throw promise; } else if (promise.status === 'fulfilled') { return promise.value; } else if (promise.status === 'rejected') { throw promise.reason; } else { attachPromiseStatus(promise); throw promise; } }); export function useAtomValue(atom, options) { const { unstable_promiseStatus: promiseStatus = !React.use } = options || {}; const value = useAtomValueRaw(atom, options); if (isPromiseLike(value)) { if (promiseStatus) { attachPromiseStatus(value); } return use(value); } return value; }