Lot F2 du chantier server/client mode : client web read-only complétant le premier incrément livrable — pairing, liste des projets, ouverture et snapshot de l'état, sans PTY. - frontend/src/adapters/http/webSession.ts : session web (pairing/cookie). - frontend/src/features/web : PairingScreen, WebWorkspace, WebApp, index. - Câblage main.tsx et adaptations httpInvoker.ts / index.ts (cas 401). - Tests : webSession.test.ts, WebApp.test.tsx, cas 401 dans httpInvoker.test.ts. Validé : frontend 736 tests verts, build vert, garde no-direct-invoke verte, contrat B4↔F2 aligné, desktop non régressé. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
40 lines
1.3 KiB
TypeScript
40 lines
1.3 KiB
TypeScript
/** React bootstrap: mounts the app inside the DI provider. */
|
|
|
|
import React from "react";
|
|
import ReactDOM from "react-dom/client";
|
|
|
|
import { App } from "./App";
|
|
import { ViewWindow, parseViewWindowParams } from "./ViewWindow";
|
|
import { WebApp } from "@/features/web";
|
|
import { DIProvider, resolveTransport } from "./di";
|
|
import "@/shared/styles/theme.css";
|
|
|
|
const root = document.getElementById("root");
|
|
if (!root) {
|
|
throw new Error("missing #root element");
|
|
}
|
|
|
|
// #23/#47: a detached view window loads the SPA with `?panel=` (panel-only, no
|
|
// project id). When the param is present and valid, render only that view — it
|
|
// follows the main window's focused project; otherwise the full app.
|
|
const viewParams = parseViewWindowParams(window.location.search);
|
|
|
|
// Ticket #13, F2: in web (HTTP) transport mode the browser client renders the
|
|
// pairing-gated, read-only `WebApp`. Desktop (Tauri) is unchanged — it renders
|
|
// the full `App` (or a detached view window). Detached windows are desktop-only.
|
|
const isWeb = resolveTransport() === "http";
|
|
|
|
ReactDOM.createRoot(root).render(
|
|
<React.StrictMode>
|
|
<DIProvider>
|
|
{isWeb ? (
|
|
<WebApp />
|
|
) : viewParams ? (
|
|
<ViewWindow panel={viewParams.panel} />
|
|
) : (
|
|
<App />
|
|
)}
|
|
</DIProvider>
|
|
</React.StrictMode>,
|
|
);
|