UNPKG

alinea

Version:

[![npm](https://img.shields.io/npm/v/alinea.svg)](https://npmjs.org/package/alinea) [![install size](https://packagephobia.com/badge?p=alinea)](https://packagephobia.com/result?p=alinea)

76 lines (74 loc) 1.99 kB
import { useSetAtom } from "../../chunks/chunk-WF77DMLN.js"; import "../../chunks/chunk-OBOPLPUQ.js"; import { QueryClient } from "../../chunks/chunk-DJKGEOOC.js"; import "../../chunks/chunk-U5RRZUYZ.js"; // src/dashboard/dev/DevDashboard.tsx import { Client } from "alinea/core/Client"; import { joinPaths } from "alinea/core/util/Urls"; import { useEffect, useMemo, useState } from "react"; import { App } from "../App.js"; import { dbUpdateAtom } from "../atoms/DbAtoms.js"; import { jsx } from "react/jsx-runtime"; function setupDevReload({ refresh, refetch, open, close }) { const source = new EventSource("/~dev"); source.onmessage = (e) => { console.log(`[reload] received ${e.data}`); switch (e.data) { case "refetch": return refetch(); case "reload": return window.location.reload(); default: return refresh(); } }; source.onopen = open; source.onerror = close; return () => { source.close(); }; } var queryClient = new QueryClient({ defaultOptions: { queries: { retry: false } } }); function DevDashboard({ loadConfig }) { const [config, setConfig] = useState(); const [connected, setConnected] = useState(true); const forceDbUpdate = useSetAtom(dbUpdateAtom); const client = useMemo(() => { if (!config) return null; return new Client({ config, url: joinPaths(location.origin, location.pathname) }); }, [config]); function getConfig() { return loadConfig().then(setConfig); } useEffect(() => { getConfig(); return setupDevReload({ refresh: () => getConfig().then(() => forceDbUpdate(true)), refetch: () => forceDbUpdate(true), open: () => setConnected(true), close: () => setConnected(false) }); }, []); if (!config) return null; return /* @__PURE__ */ jsx( App, { queryClient, config, client, dev: process.env.NODE_ENV === "development" } ); } export { DevDashboard };