Workers P3: Prüfstand um Freigabe, Interessenten-Panel, Anhalten-Rückfrage und Handy erweitert

Echte Seite WorkersPage im Prüfstand (Austausch-Module für Anmeldung, Mitarbeiterliste und Sitzungs-JWT), Skript-API mit Pult, Aktionen und Interessent samt Schaltern für 409, 400, Ausfall und Leerzustand, vier neue Szenarien (Freigabe, Interessent, Anhalten, Handy), jedes Szenario läuft für sich, und der Szenario Desktop bestätigt jetzt die Rückfrage vor dem Anhalten.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Sonnet 5.5 committed 2026-10-18 10:20:29 +00:00
1 parent 686db61e1c
commit 2ed2201b22
9 files changed
+847 -20

No files matched your search

+19 -5
View File
@@ -4,6 +4,9 @@
// ?fault=none|down|session|hang schaltet zwischen Board und Skript-API den echten API-Client (createWorkersApi) mit einer Fetch-Weiche
// (scripted-fetch.js): window.__wk.control.fault lässt sich zur Laufzeit auf null | 'down' | 'session' | 'hang' setzen (Ausfall-Szenario).
// Ohne den Parameter bekommt das Board die Skript-API direkt (Szenarien A bis E).
// ?page=1 zeigt statt des Boards die echte Seite WorkersPage (Reiter Hochhaus und Freigabe, PultList, ProspectPanel); AuthContext,
// useEmployees und workersClient sind dort durch stub-*.js ersetzt (build.mjs). ?tab=freigabe öffnet den Reiter gleich (Deep-Link).
// Mit ?page=1&fault=none läuft die Seite über den echten API-Client und die Fetch-Weiche (Pult, Aktionen, Interessent).
import { StrictMode, createRef } from 'react'
import { createRoot } from 'react-dom/client'
import { MemoryRouter } from 'react-router-dom'
@@ -11,9 +14,11 @@ import '../../src/styles/global.css'
import '../../src/styles/workers.css'
import PageHeader from '../../src/components/ui/PageHeader'
import WorkersBoard from '../../src/components/workers/WorkersBoard'
import WorkersPage from '../../src/pages/WorkersPage'
import { createWorkersApi } from '../../src/lib/workersApi.js'
import { createScriptedApi } from './scripted-api.js'
import { createScriptedFetch } from './scripted-fetch.js'
import { holder } from './harness-bridge.js'
const params = new URLSearchParams(window.location.search)
const scripted = createScriptedApi({ now: () => performance.now(), base: Date.now(), halted: params.get('halted') === '1' })
@@ -32,18 +37,27 @@ const api = fault === null
timeoutMs: 1500,
})
window.__wk = { stage, api: scripted, control }
holder.api = api
const pageMode = params.get('page') === '1'
const tab = params.get('tab')
const entries = [pageMode && tab ? `/hustler?tab=${encodeURIComponent(tab)}` : '/hustler']
createRoot(document.getElementById('root')).render(
<StrictMode>
<MemoryRouter>
<MemoryRouter initialEntries={entries}>
<div className="shell">
<div className="sidebar" aria-hidden="true" />
<div className="main">
<main id="inhalt">
<div className="page wk-page">
<PageHeader title="Hustler" subtitle="Die Nachtschicht deiner Claude-Armee" />
<WorkersBoard api={api} isAdmin stageRef={stage} />
</div>
{pageMode ? (
<WorkersPage />
) : (
<div className="page wk-page">
<PageHeader title="Hustler" subtitle="Die Nachtschicht deiner Claude-Armee" />
<WorkersBoard api={api} isAdmin stageRef={stage} />
</div>
)}
</main>
</div>
</div>