one
Version:
One is a React framework for web, iOS, and Android apps.
43 lines (40 loc) • 1.38 kB
JavaScript
import { useRef } from "react";
import { getServerContext } from "../vite/one-server-only.mjs";
import { getQueryKey } from "./getQueryKey.mjs";
import { resolveZeroQuery } from "./resolveQuery.mjs";
import { useQuery as useQuery$1 } from "./useQueryZero.mjs";
const clientInitialData = getServerContext()?.postRenderData;
const serverQueryData = {};
globalThis["__vxrnServerData__"] = serverQueryData;
const promises = /* @__PURE__ */ new WeakMap();
const useQuery = ((query, enable = true) => {
const snapshot = useQuery$1(query, enable);
const queryIdRef = useRef(void 0);
if (query && !queryIdRef.current) queryIdRef.current = getQueryKey(query);
const queryId = queryIdRef.current || "";
if (typeof window === "undefined") {
if (!query) return [];
const promise = promises.get(query);
const value = serverQueryData[queryId];
if (value) return value;
if (!promise) {
const promise2 = new Promise((res, rej) => {
resolveZeroQuery(query).then((val) => {
serverQueryData[queryId] = val;
res();
}).catch((err) => {
promises.set(query, null);
rej(err);
});
});
promises.set(query, promise2);
throw promise2;
}
if (promise) throw promise;
return [];
}
if (clientInitialData && !snapshot) return clientInitialData[queryId] || [];
return snapshot || [];
});
export { useQuery };
//# sourceMappingURL=useQuery.mjs.map