diff --git a/packages/ui/client/components/views/ViewEditor.vue b/packages/ui/client/components/views/ViewEditor.vue index 2cebb5e8c3ff..7620ab54325f 100644 --- a/packages/ui/client/components/views/ViewEditor.vue +++ b/packages/ui/client/components/views/ViewEditor.vue @@ -15,7 +15,6 @@ import { activeTraceView, getTraceEditorMarkersForFile, getTraceEntryClass, - isTraceViewEnabled, selectActiveTraceStep, } from '~/composables/trace-view' import { escapeHtml } from '~/utils/escape' @@ -141,9 +140,7 @@ function codemirrorChanges() { } const TRACE_GUTTER_ID = 'trace-step-gutter' -const traceGutterConfigs = isTraceViewEnabled(props.file) - ? [{ className: TRACE_GUTTER_ID, style: 'width: 14px' }] - : [] +const traceGutterEnabled = computed(() => activeTraceView.value?.test.file.id === props.file.id) let traceGutterLines: number[] = [] const traceEditorMarkersForFile = computed(() => { @@ -166,6 +163,13 @@ function syncTraceMarkers() { } traceGutterLines = [] + editor.setOption('gutters', [ + 'CodeMirror-linenumbers', + ...(traceGutterEnabled.value + ? [{ className: TRACE_GUTTER_ID, style: 'width: 14px' }] + : []), + ]) + const lineCount = editor.lineCount() for (const marker of traceEditorMarkersForFile.value) { const line = marker.line - 1 @@ -195,7 +199,7 @@ function syncTraceMarkers() { } watch( - [codemirrorRef, traceEditorMarkersForFile, loading], + [codemirrorRef, traceGutterEnabled, traceEditorMarkersForFile, loading], () => { syncTraceMarkers() }, @@ -453,7 +457,7 @@ onBeforeUnmount(clearListeners) :options="{ lineNumbers: true, styleActiveLine: true, - gutters: ['CodeMirror-linenumbers', ...traceGutterConfigs], + gutters: ['CodeMirror-linenumbers'], }" :mode="ext" data-testid="code-mirror" diff --git a/test/ui/test/trace.spec.ts b/test/ui/test/trace.spec.ts index 1d6bfbfb9b9d..23e3c0d0b56b 100644 --- a/test/ui/test/trace.spec.ts +++ b/test/ui/test/trace.spec.ts @@ -182,7 +182,10 @@ async function testBasic(page: Page) { await expect(activeLine).toContainText('Render simple') // markers ordered by 'test finished' > 'Render simple' > 'Render another' - const traceEditorMarkers = page.getByTestId('editor').getByTestId('trace-editor-marker') + const editor = page.getByTestId('editor') + const traceEditorMarkers = editor.getByTestId('trace-editor-marker') + const traceGutter = editor.locator('.CodeMirror-gutter.trace-step-gutter') + await expect(traceGutter).toBeVisible() await expect(traceEditorMarkers).toHaveCount(3) await expect(traceEditorMarkers.nth(1)).toHaveAttribute('aria-current', 'step') await expect(traceEditorMarkers.nth(2)).not.toHaveAttribute('aria-current', 'step') @@ -242,6 +245,7 @@ async function testBasic(page: Page) { // verify closing trace viewer doesn't immediately auto-open it again await traceView.getByRole('button', { name: 'Close Trace Viewer' }).click() await expect(traceView).toBeHidden() + await expect(traceGutter).toHaveCount(0) } async function testViewport(page: Page) {