Skip to content

Commit 2b8302a

Browse files
committed
refactor: add showDelays functionality to EventOptions and EventTable components
1 parent 448d5ab commit 2b8302a

File tree

3 files changed

+44
-6
lines changed

3 files changed

+44
-6
lines changed

src/App.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useEffect, useRef } from "react";
1+
import { useEffect, useRef, useState } from "react";
22
import { useKeyboardEvents } from "./hooks/useKeyboardEvents";
33
import { TextareaInput } from "./components/TextareaInput";
44
import { EventOptions } from "./components/EventOptions";
@@ -7,6 +7,7 @@ import { EventTable } from "./components/EventTable";
77

88
function App() {
99
const textareaRef = useRef<HTMLTextAreaElement | null>(null);
10+
const [showDelays, setShowDelays] = useState(true);
1011
const {
1112
events,
1213
allEvents,
@@ -66,13 +67,15 @@ function App() {
6667
eventCount={filteredEventCount}
6768
totalEvents={totalEvents}
6869
events={allEvents}
70+
showDelays={showDelays}
71+
onShowDelaysChange={setShowDelays}
6972
/>
7073

7174
{/* Timeline */}
7275
<Timeline events={events} />
7376

7477
{/* Event Table */}
75-
<EventTable events={events} filters={filters} />
78+
<EventTable events={events} filters={filters} showDelays={showDelays} />
7679
</div>
7780
</div>
7881
);

src/components/EventOptions.tsx

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ interface EventOptionsProps {
77
eventCount: number;
88
totalEvents: number;
99
events: EventData[];
10+
showDelays: boolean;
11+
onShowDelaysChange: (showDelays: boolean) => void;
1012
}
1113

1214
export function EventOptions({
@@ -15,6 +17,8 @@ export function EventOptions({
1517
eventCount,
1618
totalEvents,
1719
events,
20+
showDelays,
21+
onShowDelaysChange,
1822
}: EventOptionsProps) {
1923
// Calculate event counts by type
2024
const eventCounts = events.reduce((counts, event) => {
@@ -93,6 +97,36 @@ export function EventOptions({
9397
>
9498
Hide All
9599
</button>
100+
<label className="flex items-center cursor-pointer text-xs text-text">
101+
<input
102+
type="checkbox"
103+
checked={showDelays}
104+
onChange={(e) => onShowDelaysChange(e.target.checked)}
105+
className="sr-only"
106+
/>
107+
<div
108+
className={`w-4 h-4 rounded border-2 flex items-center justify-center transition-all duration-200 mr-2 ${
109+
showDelays
110+
? "border-main bg-main shadow-sm"
111+
: "border-sub hover:border-main/70 bg-bg"
112+
}`}
113+
>
114+
{showDelays && (
115+
<svg
116+
className="w-2.5 h-2.5 text-bg"
117+
fill="currentColor"
118+
viewBox="0 0 20 20"
119+
>
120+
<path
121+
fillRule="evenodd"
122+
d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z"
123+
clipRule="evenodd"
124+
/>
125+
</svg>
126+
)}
127+
</div>
128+
Show Delays
129+
</label>
96130
</div>
97131
</div>
98132

src/components/EventTable.tsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,12 @@ import { addDelayRowsToEvents } from "../utils/delayRows";
1111
interface EventTableProps {
1212
events: EventData[];
1313
filters: EventFilters;
14+
showDelays: boolean;
1415
}
1516

16-
export function EventTable({ events, filters }: EventTableProps) {
17+
export function EventTable({ events, filters, showDelays }: EventTableProps) {
1718
const visibleColumns = getVisibleColumns(filters);
18-
const eventsWithDelays = addDelayRowsToEvents(events);
19+
const eventsWithDelays = showDelays ? addDelayRowsToEvents(events) : events;
1920

2021
if (events.length === 0) {
2122
return (
@@ -59,7 +60,7 @@ export function EventTable({ events, filters }: EventTableProps) {
5960
<tbody className="divide-y divide-sub/10">
6061
{eventsWithDelays.map((event) => {
6162
// Handle delay rows
62-
if ("isDelayRow" in event) {
63+
if (showDelays && "isDelayRow" in event) {
6364
return (
6465
<tr
6566
key={event.id}
@@ -116,7 +117,7 @@ export function EventTable({ events, filters }: EventTableProps) {
116117
<div className="flex items-center justify-between text-xs text-sub">
117118
<span>
118119
Showing {events.length} events
119-
{eventsWithDelays.filter((e) => "isDelayRow" in e).length > 0 &&
120+
{showDelays && eventsWithDelays.filter((e) => "isDelayRow" in e).length > 0 &&
120121
` with ${
121122
eventsWithDelays.filter((e) => "isDelayRow" in e).length
122123
} delay rows`}

0 commit comments

Comments
 (0)