Skip to content

Commit c39cd89

Browse files
committed
feat(inbox): inline signal source config modal, rounded cards, aligned warming-up state
- "Enable Inbox" button opens a Dialog with SignalSourcesSettings instead of navigating to Settings - Dialog stays mounted even after sources are enabled (controlled open state) - X close button in dialog header, "Back to Inbox" primary button in footer - "Back to Inbox" disabled with tooltip when no source is enabled - Signal source toggle cards and evaluations section now have rounded corners - Warming-up state uses same hedgehog image and layout as empty state - Warming-up state opens the same signal sources modal instead of navigating away - "Configure sources" button and clickable source icons open the modal
1 parent 0a65286 commit c39cd89

5 files changed

Lines changed: 532 additions & 273 deletions

File tree

115 KB
Loading

apps/code/src/renderer/features/inbox/components/InboxSignalsTab.tsx

Lines changed: 108 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import {
1818
} from "@features/inbox/utils/filterReports";
1919
import { INBOX_REFETCH_INTERVAL_MS } from "@features/inbox/utils/inboxConstants";
2020
import { useDraftStore } from "@features/message-editor/stores/draftStore";
21-
import { useSettingsDialogStore } from "@features/settings/stores/settingsDialogStore";
21+
import { SignalSourcesSettings } from "@features/settings/components/sections/SignalSourcesSettings";
2222
import { useCreateTask } from "@features/tasks/hooks/useTasks";
2323
import { useFeatureFlag } from "@hooks/useFeatureFlag";
2424
import { useRepositoryIntegration } from "@hooks/useIntegrations";
@@ -35,10 +35,12 @@ import {
3535
Badge,
3636
Box,
3737
Button,
38+
Dialog,
3839
Flex,
3940
ScrollArea,
4041
Select,
4142
Text,
43+
Tooltip,
4244
} from "@radix-ui/themes";
4345
import graphsHog from "@renderer/assets/images/graphs-hog.png";
4446
import { getCloudUrlFromRegion } from "@shared/constants/oauth";
@@ -124,7 +126,7 @@ export function InboxSignalsTab() {
124126
const statusFilter = useInboxSignalsFilterStore((s) => s.statusFilter);
125127
const { data: signalSourceConfigs } = useSignalSourceConfigs();
126128
const hasSignalSources = signalSourceConfigs?.some((c) => c.enabled) ?? false;
127-
const openSettings = useSettingsDialogStore((s) => s.open);
129+
const [sourcesDialogOpen, setSourcesDialogOpen] = useState(false);
128130

129131
const windowFocused = useRendererWindowFocusStore((s) => s.focused);
130132
const isInboxView = useNavigationStore((s) => s.view.type === "inbox");
@@ -324,81 +326,126 @@ export function InboxSignalsTab() {
324326
);
325327
}
326328

329+
const sourcesDialog = (
330+
<Dialog.Root open={sourcesDialogOpen} onOpenChange={setSourcesDialogOpen}>
331+
<Dialog.Content maxWidth="520px">
332+
<Flex align="center" justify="between" mb="3">
333+
<Dialog.Title size="3" mb="0">
334+
Signal sources
335+
</Dialog.Title>
336+
<Dialog.Close>
337+
<button
338+
type="button"
339+
className="rounded p-1 text-gray-11 hover:bg-gray-3 hover:text-gray-12"
340+
aria-label="Close"
341+
>
342+
<XIcon size={16} />
343+
</button>
344+
</Dialog.Close>
345+
</Flex>
346+
<SignalSourcesSettings />
347+
<Flex justify="end" mt="4">
348+
{hasSignalSources ? (
349+
<Dialog.Close>
350+
<Button size="2">Back to Inbox</Button>
351+
</Dialog.Close>
352+
) : (
353+
<Tooltip content="You haven't enabled any signal source yet!">
354+
<Button size="2" disabled>
355+
Back to Inbox
356+
</Button>
357+
</Tooltip>
358+
)}
359+
</Flex>
360+
</Dialog.Content>
361+
</Dialog.Root>
362+
);
363+
327364
if (allReports.length === 0) {
328365
if (!hasSignalSources) {
329366
return (
330-
<Flex
331-
direction="column"
332-
align="center"
333-
justify="center"
334-
height="100%"
335-
px="5"
336-
style={{ margin: "0 auto" }}
337-
>
338-
<Flex direction="column" align="center" style={{ maxWidth: 420 }}>
339-
<img
340-
src={graphsHog}
341-
alt=""
342-
style={{ width: 128, marginBottom: 20 }}
343-
/>
344-
345-
<Text
346-
size="4"
347-
weight="bold"
348-
align="center"
349-
style={{ color: "var(--gray-12)" }}
350-
>
351-
Welcome to your Inbox
352-
</Text>
367+
<>
368+
<Flex
369+
direction="column"
370+
align="center"
371+
justify="center"
372+
height="100%"
373+
px="5"
374+
style={{ margin: "0 auto" }}
375+
>
376+
<Flex direction="column" align="center" style={{ maxWidth: 420 }}>
377+
<img
378+
src={graphsHog}
379+
alt=""
380+
style={{ width: 128, marginBottom: 20 }}
381+
/>
353382

354-
<Flex
355-
direction="column"
356-
align="center"
357-
gap="3"
358-
mt="3"
359-
style={{ maxWidth: 360 }}
360-
>
361383
<Text
362-
size="1"
384+
size="4"
385+
weight="bold"
363386
align="center"
364-
style={{ color: "var(--gray-11)", lineHeight: 1.35 }}
387+
style={{ color: "var(--gray-12)" }}
365388
>
366-
<Text weight="medium" style={{ color: "var(--gray-12)" }}>
367-
Background analysis of your data — while you sleep.
368-
</Text>
369-
<br />
370-
Session recordings watched automatically. Issues, tickets, and
371-
evals analyzed around the clock.
389+
Welcome to your Inbox
372390
</Text>
373391

374-
<ArrowDownIcon size={14} style={{ color: "var(--gray-8)" }} />
375-
376-
<Text
377-
size="1"
392+
<Flex
393+
direction="column"
378394
align="center"
379-
style={{ color: "var(--gray-11)", lineHeight: 1.35 }}
395+
gap="3"
396+
mt="3"
397+
style={{ maxWidth: 360 }}
380398
>
381-
<Text weight="medium" style={{ color: "var(--gray-12)" }}>
382-
Ready-to-run fixes for real user problems.
399+
<Text
400+
size="1"
401+
align="center"
402+
style={{ color: "var(--gray-11)", lineHeight: 1.35 }}
403+
>
404+
<Text weight="medium" style={{ color: "var(--gray-12)" }}>
405+
Background analysis of your data — while you sleep.
406+
</Text>
407+
<br />
408+
Session recordings watched automatically. Issues, tickets, and
409+
evals analyzed around the clock.
383410
</Text>
384-
<br />
385-
Each report includes evidence and impact numbers — just execute
386-
the prompt in your agent.
387-
</Text>
388-
</Flex>
389411

390-
<Button
391-
size="2"
392-
style={{ marginTop: 20 }}
393-
onClick={() => openSettings("signals")}
394-
>
395-
Enable Inbox
396-
</Button>
412+
<ArrowDownIcon size={14} style={{ color: "var(--gray-8)" }} />
413+
414+
<Text
415+
size="1"
416+
align="center"
417+
style={{ color: "var(--gray-11)", lineHeight: 1.35 }}
418+
>
419+
<Text weight="medium" style={{ color: "var(--gray-12)" }}>
420+
Ready-to-run fixes for real user problems.
421+
</Text>
422+
<br />
423+
Each report includes evidence and impact numbers — just
424+
execute the prompt in your agent.
425+
</Text>
426+
</Flex>
427+
428+
<Button
429+
size="2"
430+
style={{ marginTop: 20 }}
431+
onClick={() => setSourcesDialogOpen(true)}
432+
>
433+
Enable Inbox
434+
</Button>
435+
</Flex>
397436
</Flex>
398-
</Flex>
437+
{sourcesDialog}
438+
</>
399439
);
400440
}
401-
return <InboxWarmingUpState />;
441+
return (
442+
<>
443+
<InboxWarmingUpState
444+
onConfigureSources={() => setSourcesDialogOpen(true)}
445+
/>
446+
{sourcesDialog}
447+
</>
448+
);
402449
}
403450

404451
return (

0 commit comments

Comments
 (0)