Dogfooding fixes: empty-state gaps + Settings/Capture mocks the sweep missed #62
@@ -7,9 +7,10 @@ import { EmptyState } from '../shell/states.js'
|
|||||||
import { Badge, Button, Card, IconButton, Tag } from '../ui/index.js'
|
import { Badge, Button, Card, IconButton, Tag } from '../ui/index.js'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Morning service — the Now/Next/Later focus cards + the burn-up cone.
|
* Morning service — the Now/Next/Later focus cards + the burn-up cone, from the
|
||||||
* `focus` (scheduler) and `forecast` (Monte Carlo) override the demo fixtures
|
* scheduler (`focus`) and Monte Carlo forecast (`forecast`). Both come from the
|
||||||
* when gitea is configured; both fall back to the handoff demo otherwise.
|
* reconciled backlog; with no open work the scheduler has nothing to pour, so we
|
||||||
|
* show the empty state.
|
||||||
*/
|
*/
|
||||||
export function FocusScreen({
|
export function FocusScreen({
|
||||||
onOpenIssue,
|
onOpenIssue,
|
||||||
@@ -66,7 +67,9 @@ export function FocusScreen({
|
|||||||
</Card>
|
</Card>
|
||||||
)
|
)
|
||||||
|
|
||||||
if (!focus) {
|
// The scheduler returns a FocusView even when the backlog has no open work —
|
||||||
|
// treat "no now/next/later" as empty, not just an absent `focus`.
|
||||||
|
if (!focus || (!focus.now && !focus.next && !focus.later)) {
|
||||||
return (
|
return (
|
||||||
<EmptyState
|
<EmptyState
|
||||||
icon="coffee"
|
icon="coffee"
|
||||||
|
|||||||
@@ -161,6 +161,25 @@ export function StandupScreen({
|
|||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<Section overline="Stale blockers" order={3}>
|
<Section overline="Stale blockers" order={3}>
|
||||||
|
{s.nag.id === 0 ? (
|
||||||
|
// Calm sentinel — nothing is over-steeping; render just the reassurance,
|
||||||
|
// no issue chrome, no click target (there's no #0 to open).
|
||||||
|
<div
|
||||||
|
style={{
|
||||||
|
display: 'flex',
|
||||||
|
gap: 10,
|
||||||
|
alignItems: 'center',
|
||||||
|
background: 'var(--paper-2)',
|
||||||
|
borderRadius: 'var(--radius-2)',
|
||||||
|
padding: '12px 14px',
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<span style={{ color: 'var(--ok)', display: 'inline-flex' }}>
|
||||||
|
<Icon name="circle-check" size={15} />
|
||||||
|
</span>
|
||||||
|
<p style={{ font: 'var(--text-agent)', color: 'var(--ink-2)', margin: 0 }}>{s.nag.text}</p>
|
||||||
|
</div>
|
||||||
|
) : (
|
||||||
<div
|
<div
|
||||||
role="button"
|
role="button"
|
||||||
tabIndex={0}
|
tabIndex={0}
|
||||||
@@ -194,6 +213,7 @@ export function StandupScreen({
|
|||||||
<p style={{ font: 'var(--text-agent)', color: 'var(--ink-2)', margin: '5px 0 0' }}>{s.nag.text}</p>
|
<p style={{ font: 'var(--text-agent)', color: 'var(--ink-2)', margin: '5px 0 0' }}>{s.nag.text}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
)}
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<footer
|
<footer
|
||||||
|
|||||||
Reference in New Issue
Block a user