Skip to content

Commit e1ceb58

Browse files
Bill LeoutsakosBill Leoutsakos
authored andcommitted
fix(terminal): expose selected row state and use absolute imports
1 parent 0b51931 commit e1ceb58

2 files changed

Lines changed: 17 additions & 4 deletions

File tree

‎apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/terminal/components/terminal-row-button.test.tsx‎

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@ import { BlockTileView } from '@sim/workflow-renderer'
66
import { createRoot, type Root } from 'react-dom/client'
77
import { renderToStaticMarkup } from 'react-dom/server'
88
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
9+
import {
10+
StatusDisplay,
11+
TerminalRowButton,
12+
} from '@/app/workspace/[workspaceId]/w/[workflowId]/components/terminal/components'
913
import { ROW_STYLES } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/terminal/types'
10-
import { StatusDisplay } from './status-display'
11-
import { TerminalRowButton } from './terminal-row-button'
1214

1315
let root: Root
1416
let host: HTMLDivElement
@@ -43,6 +45,7 @@ describe('TerminalRowButton', () => {
4345
const button = host.querySelector('button')!
4446
expect(button.type).toBe('button')
4547
expect(button.getAttribute('aria-expanded')).toBe('true')
48+
expect(button.getAttribute('aria-pressed')).toBe('true')
4649
expect(button.getAttribute('data-entry-id')).toBe('entry-1')
4750
expect(button.className).toBe(ROW_STYLES.rowSelected)
4851
act(() => button.focus())
@@ -59,9 +62,17 @@ describe('TerminalRowButton', () => {
5962
const button = host.querySelector('button')!
6063
expect(button.className).toBe(ROW_STYLES.row)
6164
expect(button.hasAttribute('aria-expanded')).toBe(false)
65+
expect(button.hasAttribute('aria-pressed')).toBe(false)
6266
expect(button.textContent).toBe('Block output')
6367
})
6468

69+
it('exposes the unselected state only for selectable rows', () => {
70+
act(() => {
71+
root.render(<TerminalRowButton selected={false}>Other output</TerminalRowButton>)
72+
})
73+
expect(host.querySelector('button')?.getAttribute('aria-pressed')).toBe('false')
74+
})
75+
6576
it('keeps the running status inline inside a native button', () => {
6677
const html = renderToStaticMarkup(
6778
<TerminalRowButton>

‎apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/terminal/components/terminal-row-button.tsx‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@ import type { ButtonHTMLAttributes } from 'react'
22
import { cn } from '@sim/emcn'
33
import { ROW_STYLES } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/terminal/types'
44

5-
export interface TerminalRowButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
5+
export interface TerminalRowButtonProps
6+
extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'aria-pressed'> {
67
/** Use the selected chip surface for the active output row. */
78
selected?: boolean
89
}
910

1011
/** Native terminal row action with the established EMCN chip surface. */
1112
export function TerminalRowButton({
12-
selected = false,
13+
selected,
1314
className,
1415
onClick,
1516
type,
@@ -19,6 +20,7 @@ export function TerminalRowButton({
1920
<button
2021
type={type ?? 'button'}
2122
className={cn(selected ? ROW_STYLES.rowSelected : ROW_STYLES.row, className)}
23+
aria-pressed={selected}
2224
onClick={(event) => {
2325
event.stopPropagation()
2426
onClick?.(event)

0 commit comments

Comments
 (0)