diff --git a/src/pages/WorkersPage.jsx b/src/pages/WorkersPage.jsx index daef049..9ca00a6 100644 --- a/src/pages/WorkersPage.jsx +++ b/src/pages/WorkersPage.jsx @@ -12,7 +12,9 @@ import '../styles/workers.css' import '../styles/hustler/schrift.css' import '../styles/hustler/hochhaus.css' import '../styles/hustler/keller.css' +import '../styles/hustler/hustler-keller-ui.css' import '../styles/hustler/pult.css' +import '../styles/hustler/hustler-pult-ui.css' import '../styles/hustler/hustler-ui.css' import '../styles/hustler/hustler-welt.css' import '../styles/hustler/hustler-kopf.css' @@ -72,29 +74,24 @@ export default function WorkersPage() { onOpen={(tab) => setParams({ tab })} /> )} - {/* Pult und Keller stecken bis T9/T10 noch in der alten hellen Hülle (.page.wk-page); hustler-ui.css gibt ihnen dafür normale Höhe */} {active.id === 'freigabe' && ( -
- setParams({ tab: 'hochhaus' })} - /> -
+ setParams({ tab: 'hochhaus' })} + /> )} {active.id === 'botleads' && ( -
- setParams({ tab: 'botleads' })} - kpis={state?.kpis} - workers={workers} - onBack={() => setParams({ tab: 'hochhaus' })} - /> -
+ setParams({ tab: 'botleads' })} + kpis={state?.kpis} + workers={workers} + onBack={() => setParams({ tab: 'hochhaus' })} + /> )} ) diff --git a/src/styles/hustler/hustler-ui.css b/src/styles/hustler/hustler-ui.css index b1a1f37..00c7ca4 100644 --- a/src/styles/hustler/hustler-ui.css +++ b/src/styles/hustler/hustler-ui.css @@ -8,11 +8,8 @@ /* Mobilleiste aus global.css (.mobile-bar, 52 px) abziehen */ .hk-seite { height: calc(100vh - 52px); height: calc(100dvh - 52px); } } -.hk-seite > .hk-hochhaus { position: absolute; inset: 0; } +.hk-seite > .hk-hochhaus, .hk-seite > .hk-pult, .hk-seite > .hk-keller { position: absolute; inset: 0; } -/* Übergang bis T9/T10: Pult und Keller stehen noch in der alten hellen Hülle (.page.wk-page), brauchen normale Höhe, Scrollen und hellen Grund. - Entfällt, sobald PultList und BotLeadList in ihre Pixelszenen umgebaut sind (.hk-pult / .hk-keller füllen dann selbst die Seite). */ -.hk-seite[data-tab="freigabe"], .hk-seite[data-tab="botleads"] { height: auto; overflow: visible; background: none; } /* ---------- Hochhaus: Laden und Leerzustand im Pixel-Stil ---------- */ .hk-hochhaus .hk-laden, diff --git a/tests/unit/hustlerSeite.test.mjs b/tests/unit/hustlerSeite.test.mjs index a654c2c..3ecf4ff 100644 --- a/tests/unit/hustlerSeite.test.mjs +++ b/tests/unit/hustlerSeite.test.mjs @@ -268,16 +268,16 @@ test('Seite: ohne ?tab, mit ?tab=hochhaus und mit unbekanntem Tab erscheint das } }) -test('Seite: ?tab=freigabe zeigt das Pult in der alten Hülle, ?tab=botleads den Keller; data-tab folgt', async () => { +test('Seite: ?tab=freigabe zeigt das Pult, ?tab=botleads den Keller, beide direkt in .hk-seite (keine alte helle Hülle mehr); data-tab folgt', async () => { const pult = await seite('tab=freigabe') try { assert.equal(pult.root().props['data-tab'], 'freigabe'); assert.deepEqual(pult.screen(), ['pult']) - assert.equal(byClass(pult.root(), 'page').length, 1); assert.ok(hasClass(byClass(pult.root(), 'page')[0], 'wk-page')) + assert.equal(byClass(pult.root(), 'page').length, 0); assert.equal(byClass(pult.root(), 'wk-page').length, 0) } finally { pult.end() } const keller = await seite('tab=botleads') try { assert.equal(keller.root().props['data-tab'], 'botleads'); assert.deepEqual(keller.screen(), ['keller']) - assert.equal(byClass(keller.root(), 'page').length, 1) + assert.equal(byClass(keller.root(), 'page').length, 0); assert.equal(byClass(keller.root(), 'wk-page').length, 0) } finally { keller.end() } }) diff --git a/tests/unit/workersRoute.test.mjs b/tests/unit/workersRoute.test.mjs index dcb2911..2c09aff 100644 --- a/tests/unit/workersRoute.test.mjs +++ b/tests/unit/workersRoute.test.mjs @@ -47,7 +47,7 @@ test('WorkersPage: freigabe zeigt die PultList, botleads die BotLeadList (api, b }) test('CSS-Importe der Hustler-Oberfläche stehen nur in WorkersPage, nicht in den Komponenten (sonst nicht unter Node mit fakeReact ladbar)', () => { const s = readFileSync(new URL('../../src/pages/WorkersPage.jsx', import.meta.url), 'utf8') - for (const css of ['workers', 'hustler/schrift', 'hustler/hochhaus', 'hustler/keller', 'hustler/pult', 'hustler/hustler-ui', 'hustler/hustler-welt', 'hustler/hustler-kopf', 'hustler/hustler-detail', 'hustler/hustler-regie']) assert.ok(s.includes(`import '../styles/${css}.css'`), css) + for (const css of ['workers', 'hustler/schrift', 'hustler/hochhaus', 'hustler/keller', 'hustler/pult', 'hustler/hustler-ui', 'hustler/hustler-welt', 'hustler/hustler-kopf', 'hustler/hustler-detail', 'hustler/hustler-regie', 'hustler/hustler-pult-ui', 'hustler/hustler-keller-ui']) assert.ok(s.includes(`import '../styles/${css}.css'`), css) const walk = (dir) => readdirSync(dir, { withFileTypes: true }).flatMap((e) => (e.isDirectory() ? walk(path.join(dir, e.name)) : [path.join(dir, e.name)])) const root = fileURLToPath(new URL('../../src/components/workers/', import.meta.url)) const files = walk(root).filter((f) => /\.(jsx?|mjs)$/.test(f))