Skip to content

Commit a5da647

Browse files
authored
feat: Add source column to log panels (#1166)
1 parent 910fcb5 commit a5da647

File tree

15 files changed

+493
-123
lines changed

15 files changed

+493
-123
lines changed

src/components/AutoScrollArea.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { css } from '@emotion/react'
12
import { ScrollArea, ScrollAreaProps } from '@radix-ui/themes'
23
import { ReactNode, UIEvent, useRef } from 'react'
34

@@ -50,7 +51,14 @@ export function AutoScrollArea({
5051

5152
return (
5253
<ScrollArea {...props} onScroll={handleScroll}>
53-
<div ref={handleMount}>{children}</div>
54+
<div
55+
ref={handleMount}
56+
css={css`
57+
height: 100%;
58+
`}
59+
>
60+
{children}
61+
</div>
5462
</ScrollArea>
5563
)
5664
}

src/components/Validator/ExecutionDetails.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { Check, LogEntry } from '@/schemas/k6'
88
import { ReadOnlyEditor } from '../Monaco/ReadOnlyEditor'
99

1010
import { ChecksSection } from './ChecksSection'
11-
import { LogsSection } from './LogsSection'
11+
import { LogsSection, useConsoleFilter } from './LogsSection'
1212

1313
interface ExecutionDetailsProps {
1414
isRunning: boolean
@@ -27,6 +27,10 @@ export function ExecutionDetails({
2727
script !== undefined ? 'script' : 'logs'
2828
)
2929

30+
const consoleFilter = useConsoleFilter({
31+
browser: false,
32+
})
33+
3034
const handleTabChange = (value: string) => {
3135
if (value !== 'logs' && value !== 'checks' && value !== 'script') {
3236
return
@@ -74,7 +78,7 @@ export function ExecutionDetails({
7478
min-height: 0;
7579
`}
7680
>
77-
<LogsSection logs={logs} autoScroll={isRunning} />
81+
<LogsSection {...consoleFilter} autoScroll={isRunning} logs={logs} />
7882
</Tabs.Content>
7983
{script !== undefined && (
8084
<Tabs.Content

src/components/Validator/LogsSection.tsx

Lines changed: 0 additions & 112 deletions
This file was deleted.
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
import { css } from '@emotion/react'
2+
import * as ToggleGroup from '@radix-ui/react-toggle-group'
3+
import { Separator } from '@radix-ui/themes'
4+
5+
import { ConsoleFilter, SourcesOptions } from './types'
6+
7+
function isLogSource(value: string) {
8+
return value === 'browser' || value === 'runtime' || value === 'script'
9+
}
10+
11+
function isLogLevel(value: string) {
12+
return (
13+
value === 'debug' ||
14+
value === 'info' ||
15+
value === 'warning' ||
16+
value === 'error'
17+
)
18+
}
19+
20+
const toggleGroupStyles = css`
21+
display: flex;
22+
gap: var(--space-1);
23+
`
24+
25+
const toggleItemStyles = css`
26+
box-sizing: border-box;
27+
padding: var(--space-1) var(--space-2);
28+
font-size: var(--font-size-2);
29+
border: none;
30+
border-radius: var(--radius-2);
31+
cursor: pointer;
32+
color: var(--gray-11);
33+
background-color: transparent;
34+
35+
&[data-state='on'] {
36+
background-color: var(--gray-a4);
37+
}
38+
`
39+
40+
interface LogFilterProps {
41+
sources: SourcesOptions
42+
filter: ConsoleFilter
43+
onChange: (filter: ConsoleFilter) => void
44+
}
45+
46+
export function LogFilter({ sources, filter, onChange }: LogFilterProps) {
47+
const handleLogLevelsChange = (values: string[]) => {
48+
onChange({
49+
...filter,
50+
levels: values.filter(isLogLevel),
51+
})
52+
}
53+
54+
const handleLogSourcesChange = (values: string[]) => {
55+
onChange({
56+
...filter,
57+
sources: values.filter(isLogSource),
58+
})
59+
}
60+
61+
return (
62+
<>
63+
<ToggleGroup.Root
64+
type="multiple"
65+
value={filter.levels}
66+
css={toggleGroupStyles}
67+
aria-label="Filter by log level"
68+
onValueChange={handleLogLevelsChange}
69+
>
70+
<ToggleGroup.Item
71+
value={'debug'}
72+
css={toggleItemStyles}
73+
aria-label={`Filter debug logs`}
74+
>
75+
Debug
76+
</ToggleGroup.Item>
77+
<ToggleGroup.Item
78+
value={'info'}
79+
css={toggleItemStyles}
80+
aria-label={`Filter info logs`}
81+
>
82+
Info
83+
</ToggleGroup.Item>
84+
<ToggleGroup.Item
85+
value={'warning'}
86+
css={toggleItemStyles}
87+
aria-label={`Filter warning logs`}
88+
>
89+
Warning
90+
</ToggleGroup.Item>
91+
<ToggleGroup.Item
92+
value={'error'}
93+
css={toggleItemStyles}
94+
aria-label={`Filter error logs`}
95+
>
96+
Error
97+
</ToggleGroup.Item>
98+
</ToggleGroup.Root>
99+
<Separator orientation="vertical" />
100+
<ToggleGroup.Root
101+
type="multiple"
102+
value={filter.sources}
103+
css={toggleGroupStyles}
104+
aria-label="Filter by log source"
105+
onValueChange={handleLogSourcesChange}
106+
>
107+
{sources.browser && (
108+
<ToggleGroup.Item
109+
value={'browser'}
110+
css={toggleItemStyles}
111+
aria-label={`Filter browser logs`}
112+
>
113+
Browser
114+
</ToggleGroup.Item>
115+
)}
116+
{sources.script && (
117+
<ToggleGroup.Item
118+
value={'script'}
119+
css={toggleItemStyles}
120+
aria-label={`Filter script logs`}
121+
>
122+
Script
123+
</ToggleGroup.Item>
124+
)}
125+
{sources.runtime && (
126+
<ToggleGroup.Item
127+
value={'runtime'}
128+
css={toggleItemStyles}
129+
aria-label={`Filter runtime logs`}
130+
>
131+
Runtime
132+
</ToggleGroup.Item>
133+
)}
134+
</ToggleGroup.Root>
135+
</>
136+
)
137+
}

0 commit comments

Comments
 (0)