UNPKG

@forbespro/lead-agent

Version:
218 lines (217 loc) 7.51 kB
import De, { useRef as S, useMemo as Ve, useCallback as G, useDebugValue as we } from "react"; import { s as Ce } from "./index36.js"; import { withArgs as Ie, subscribeCallback as Le } from "./index37.js"; import { useSWRConfig as Ke } from "./index37.js"; import { b as Oe, s as Ae, z as _e, e as s, U as B, B as ke, o as Ne, a as ce, n as be, u as Y, r as le, t as Fe, I as fe, m as xe } from "./index38.js"; import { j as Xe } from "./index38.js"; import { ERROR_REVALIDATE_EVENT as de, FOCUS_EVENT as ye, RECONNECT_EVENT as Me, MUTATE_EVENT as Pe } from "./index39.js"; const J = De.use || // This extra generic is to avoid TypeScript mixing up the generic and JSX sytax // and emitting an error. // We assume that this is only for the `use(thenable)` case, not `use(context)`. // https://github.com/facebook/react/blob/aed00dacfb79d17c53218404c52b1c7aa59c4a89/packages/react-server/src/ReactFizzThenable.js#L45 ((c) => { switch (c.status) { case "pending": throw c; case "fulfilled": return c.value; case "rejected": throw c.reason; default: throw c.status = "pending", c.then((g) => { c.status = "fulfilled", c.value = g; }, (g) => { c.status = "rejected", c.reason = g; }), c; } }), K = { dedupe: !0 }, Ue = (c, g, f) => { const { cache: v, compare: F, suspense: x, fallbackData: Q, revalidateOnMount: L, revalidateIfStale: y, refreshInterval: O, refreshWhenHidden: X, refreshWhenOffline: Z, keepPreviousData: ge } = f, [A, Re, E, me] = Oe.get(v), [e, $] = Ae(c), M = S(!1), w = S(!1), _ = S(e), P = S(g), U = S(f), n = () => U.current, q = () => n().isVisible() && n().isOnline(), [p, W, Ee, pe] = _e(v, e), C = S({}).current, k = s(Q) ? s(f.fallback) ? B : f.fallback[e] : Q, ee = (r, t) => { for (const o in C) { const a = o; if (a === "data") { if (!F(r[a], t[a]) && (!s(r[a]) || !F(b, t[a]))) return !1; } else if (t[a] !== r[a]) return !1; } return !0; }, te = Ve(() => { const r = !e || !g ? !1 : s(L) ? n().isPaused() || x ? !1 : y !== !1 : L, t = (u) => { const R = xe(u); return delete R._k, r ? { isValidating: !0, isLoading: !0, ...R } : R; }, o = p(), a = pe(), d = t(o), V = o === a ? d : t(a); let i = d; return [ () => { const u = t(p()); return ee(u, i) ? (i.data = u.data, i.isLoading = u.isLoading, i.isValidating = u.isValidating, i.error = u.error, i) : (i = u, u); }, () => V ]; }, [ v, e ]), T = Ce.useSyncExternalStore(G( (r) => Ee(e, (t, o) => { ee(o, t) || r(); }), // eslint-disable-next-line react-hooks/exhaustive-deps [ v, e ] ), te[0], te[1]), re = !M.current, he = A[e] && A[e].length > 0, D = T.data, h = s(D) ? k && ke(k) ? J(k) : k : D, N = T.error, H = S(h), b = ge ? s(D) ? s(H.current) ? h : H.current : D : h, se = he && !s(N) ? !1 : re && !s(L) ? L : n().isPaused() ? !1 : x ? s(h) ? !1 : y : s(h) || y, ae = !!(e && g && re && se), Se = s(T.isValidating) ? ae : T.isValidating, ve = s(T.isLoading) ? ae : T.isLoading, I = G( async (r) => { const t = P.current; if (!e || !t || w.current || n().isPaused()) return !1; let o, a, d = !0; const V = r || {}, i = !E[e] || !V.dedupe, u = () => fe ? !w.current && e === _.current && M.current : e === _.current, R = { isValidating: !1, isLoading: !1 }, ie = () => { W(R); }, oe = () => { const l = E[e]; l && l[1] === a && delete E[e]; }, ue = { isValidating: !0 }; s(p().data) && (ue.isLoading = !0); try { if (i && (W(ue), f.loadingTimeout && s(p().data) && setTimeout(() => { d && u() && n().onLoadingSlow(e, f); }, f.loadingTimeout), E[e] = [ t($), Ne() ]), [o, a] = E[e], o = await o, i && setTimeout(oe, f.dedupingInterval), !E[e] || E[e][1] !== a) return i && u() && n().onDiscarded(e), !1; R.error = B; const l = Re[e]; if (!s(l) && // case 1 (a <= l[0] || // case 2 a <= l[1] || // case 3 l[1] === 0)) return ie(), i && u() && n().onDiscarded(e), !1; const m = p().data; R.data = F(m, o) ? m : o, i && u() && n().onSuccess(o, e, f); } catch (l) { oe(); const m = n(), { shouldRetryOnError: j } = m; m.isPaused() || (R.error = l, i && u() && (m.onError(l, e, m), (j === !0 || ce(j) && j(l)) && (!n().revalidateOnFocus || !n().revalidateOnReconnect || q()) && m.onErrorRetry(l, e, m, (Te) => { const z = A[e]; z && z[0] && z[0](de, Te); }, { retryCount: (V.retryCount || 0) + 1, dedupe: !0 }))); } return d = !1, ie(), !0; }, // `setState` is immutable, and `eventsCallback`, `fnArg`, and // `keyValidating` are depending on `key`, so we can exclude them from // the deps array. // // FIXME: // `fn` and `config` might be changed during the lifecycle, // but they might be changed every render like this. // `useSWR('key', () => fetch('/api/'), { suspense: true })` // So we omit the values from the deps array // even though it might cause unexpected behaviors. // eslint-disable-next-line react-hooks/exhaustive-deps [ e, v ] ), ne = G( // Use callback to make sure `keyRef.current` returns latest result every time (...r) => be(v, _.current, ...r), // eslint-disable-next-line react-hooks/exhaustive-deps [] ); if (Y(() => { P.current = g, U.current = f, s(D) || (H.current = D); }), Y(() => { if (!e) return; const r = I.bind(B, K); let t = 0; n().revalidateOnFocus && (t = Date.now() + n().focusThrottleInterval); const a = Le(e, A, (d, V = {}) => { if (d == ye) { const i = Date.now(); n().revalidateOnFocus && i > t && q() && (t = i + n().focusThrottleInterval, r()); } else if (d == Me) n().revalidateOnReconnect && q() && r(); else { if (d == Pe) return I(); if (d == de) return I(V); } }); return w.current = !1, _.current = e, M.current = !0, W({ _k: $ }), se && (s(h) || le ? r() : Fe(r)), () => { w.current = !0, a(); }; }, [ e ]), Y(() => { let r; function t() { const a = ce(O) ? O(p().data) : O; a && r !== -1 && (r = setTimeout(o, a)); } function o() { !p().error && (X || n().isVisible()) && (Z || n().isOnline()) ? I(K).then(t) : t(); } return t(), () => { r && (clearTimeout(r), r = -1); }; }, [ O, X, Z, e ]), we(b), x && s(h) && e) { if (!fe && le) throw new Error("Fallback data is required when using Suspense in SSR."); P.current = g, U.current = f, w.current = !1; const r = me[e]; if (!s(r)) { const t = ne(r); J(t); } if (s(N)) { const t = I(K); s(b) || (t.status = "fulfilled", t.value = !0), J(t); } else throw N; } return { mutate: ne, get data() { return C.data = !0, b; }, get error() { return C.error = !0, N; }, get isValidating() { return C.isValidating = !0, Se; }, get isLoading() { return C.isLoading = !0, ve; } }; }, Be = Ie(Ue); export { Be as default, Xe as mutate, Ke as useSWRConfig };