Skip to content

Commit b6e7f6e

Browse files
author
Chris Hasson
committed
refactor(ui): Simplify DecoratedVSCodeTextField props
Refactors `DecoratedVSCodeTextField` to extend `ComponentProps<typeof VSCodeTextField>`, removing redundant prop definitions and simplifying its interface. This change improves maintainability and ensures consistency with the underlying VSCode text field component. Also adjusts `FormattedTextField` to correctly forward refs with the updated prop types.
1 parent eec55b3 commit b6e7f6e

File tree

2 files changed

+5
-33
lines changed

2 files changed

+5
-33
lines changed

webview-ui/src/components/common/DecoratedVSCodeTextField.tsx

Lines changed: 3 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,22 @@
11
import { cn } from "@/lib/utils"
22
import { VSCodeTextField } from "@vscode/webview-ui-toolkit/react"
3-
import { forwardRef, useCallback, useRef, ReactNode, ComponentRef } from "react"
3+
import { forwardRef, useCallback, useRef, ReactNode, ComponentRef, ComponentProps } from "react"
44

55
// Type for web components that have shadow DOM
66
interface WebComponentWithShadowRoot extends HTMLElement {
77
shadowRoot: ShadowRoot | null
88
}
99

10-
export interface VSCodeTextFieldWithNodesProps {
11-
className?: string
12-
placeholder?: string
13-
value?: string
14-
onInput?: (e: any) => void
15-
onBlur?: (e: any) => void
16-
onKeyDown?: (e: any) => void
17-
style?: React.CSSProperties
18-
"data-testid"?: string
10+
export interface VSCodeTextFieldWithNodesProps extends ComponentProps<typeof VSCodeTextField> {
1911
leftNodes?: ReactNode[]
2012
rightNodes?: ReactNode[]
21-
disabled?: boolean
2213
}
2314

2415
function VSCodeTextFieldWithNodesInner(
2516
props: VSCodeTextFieldWithNodesProps,
2617
forwardedRef: React.Ref<HTMLInputElement>,
2718
) {
28-
const {
29-
className,
30-
placeholder,
31-
value,
32-
onInput,
33-
onBlur,
34-
onKeyDown,
35-
style,
36-
"data-testid": dataTestId,
37-
leftNodes,
38-
rightNodes,
39-
disabled,
40-
...restProps
41-
} = props
19+
const { className, style, "data-testid": dataTestId, leftNodes, rightNodes, ...restProps } = props
4220

4321
const inputRef = useRef<HTMLInputElement | null>(null)
4422
const vscodeFieldRef = useRef<any>(null)
@@ -92,13 +70,7 @@ function VSCodeTextFieldWithNodesInner(
9270
)}
9371

9472
<VSCodeTextField
95-
placeholder={placeholder}
96-
value={value}
97-
onInput={onInput}
98-
onBlur={onBlur}
99-
onKeyDown={onKeyDown}
10073
data-testid={dataTestId}
101-
disabled={disabled}
10274
ref={handleVSCodeFieldRef}
10375
style={{
10476
flex: 1,

webview-ui/src/components/common/FormattedTextField.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ function FormattedTextFieldInner<T>(
3030
forwardedRef: React.Ref<HTMLInputElement>,
3131
) {
3232
const handleInput = useCallback(
33-
(e: any) => {
33+
(e: React.FormEvent<HTMLInputElement>) => {
3434
const input = e.target as HTMLInputElement
3535

3636
if (formatter.filter) {
@@ -48,7 +48,7 @@ function FormattedTextFieldInner<T>(
4848
return <DecoratedVSCodeTextField {...restProps} value={displayValue} onInput={handleInput} ref={forwardedRef} />
4949
}
5050

51-
export const FormattedTextField = forwardRef(FormattedTextFieldInner) as <T>(
51+
export const FormattedTextField = forwardRef(FormattedTextFieldInner as any) as <T>(
5252
props: FormattedTextFieldProps<T> & { ref?: React.Ref<HTMLInputElement> },
5353
) => React.ReactElement
5454

0 commit comments

Comments
 (0)