Files
garcia-inv/src/App.tsx
2026-04-17 18:42:35 -04:00

104 lines
3.2 KiB
TypeScript

import { useState } from "react";
import { createBrowserRouter, RouterProvider } from "react-router-dom";
import { collection, doc, writeBatch } from "firebase/firestore";
import { AppLayout } from "@/components/AppLayout";
import { Button } from "@/components/ui/button";
import { GroupsProvider } from "@/context/GroupsContext";
import { CONNECTORS_SEED } from "@/data/connectorsSeed";
import { db } from "@/lib/firebase";
import { CompartmentPage } from "@/pages/CompartmentPage";
import { GroupPage } from "@/pages/GroupPage";
import { HomePage } from "@/pages/Home";
import { PlaceholderPage } from "@/pages/PlaceholderPage";
import { NewPage } from "@/pages/NewPage";
const router = createBrowserRouter([
{
path: "/",
element: <AppLayout />,
children: [
{ index: true, element: <HomePage /> },
{ path: "groups/:groupId", element: <GroupPage /> },
{
path: "groups/:groupId/compartments/:compartmentId",
element: <CompartmentPage />,
},
{ path: "search", element: <PlaceholderPage title="Search" /> },
{ path: "new", element: <NewPage /> },
{ path: "account", element: <PlaceholderPage title="Account" /> },
{ path: "settings", element: <PlaceholderPage title="Settings" /> },
],
},
]);
const CONNECTORS_COLLECTION = "connectors";
export function ConnectorsSeedControl() {
const [busy, setBusy] = useState(false);
const [notice, setNotice] = useState("");
async function insertConnectors() {
if (
!window.confirm(
`Insert ${CONNECTORS_SEED.length} new documents into Firestore collection "${CONNECTORS_COLLECTION}"? Each run creates new document IDs (duplicates if you run again).`,
)
) {
return;
}
setBusy(true);
setNotice("");
try {
const col = collection(db, CONNECTORS_COLLECTION);
const batch = writeBatch(db);
for (const row of CONNECTORS_SEED) {
batch.set(doc(col), { ...row });
}
await batch.commit();
setNotice(`Inserted ${CONNECTORS_SEED.length} rows.`);
} catch (e) {
setNotice(
e instanceof Error ? e.message : "Failed to write to Firestore.",
);
} finally {
setBusy(false);
}
}
return (
<div className="fixed right-4 bottom-24 z-50 flex max-w-xs flex-col gap-2 rounded-lg border border-border bg-background/95 p-3 shadow-md backdrop-blur-sm">
<p className="text-xs text-muted-foreground">
Local only: push rows from{" "}
<code className="text-foreground">connectorsSeed.ts</code> into{" "}
<code className="text-foreground">{CONNECTORS_COLLECTION}</code>.
</p>
<Button
type="button"
size="sm"
variant="secondary"
disabled={busy}
onClick={() => void insertConnectors()}
>
{busy ? "Inserting…" : "Insert connectors"}
</Button>
{notice ? (
<p className="text-xs text-muted-foreground wrap-break-word">
{notice}
</p>
) : null}
</div>
);
}
function App() {
return (
<GroupsProvider>
{/* {import.meta.env.DEV ? <ConnectorsSeedControl /> : null} */}
<RouterProvider router={router} />
</GroupsProvider>
);
}
export default App;