alinea
Version:
[](https://npmjs.org/package/alinea) [](https://packagephobia.com/result?p=alinea)
76 lines (74 loc) • 1.99 kB
JavaScript
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
};