@@ -2,22 +2,36 @@ import { Option } from '@vscode-elements/elements/dist/includes/vscode-select/ty
22import { useField , useFormikContext } from 'formik' ;
33import { useEffect , useMemo , useRef } from 'react' ;
44import { WizardField , WizardInput , WizardSelectOption } from 'webview/types' ;
5+ import { DynamicRowInput } from './DynamicRowInput' ;
6+ import { FieldErrorMessage } from './FieldErrorMessage' ;
57
68interface Props {
79 field : WizardField ;
10+ prefix ?: string ;
11+ simple ?: boolean ;
812}
913
10- const getFieldProps = ( field : WizardField ) => {
14+ const getFieldId = ( field : WizardField , prefix ?: string ) => {
15+ if ( prefix ) {
16+ return `${ prefix } .${ field . id } ` ;
17+ }
18+
19+ return field . id ;
20+ } ;
21+
22+ const getFieldProps = ( field : WizardField , prefix ?: string ) => {
1123 switch ( field . type ) {
1224 case WizardInput . Readonly :
1325 return { readonly : true } ;
1426 case WizardInput . Checkbox :
15- return { name : field . id , checked : false } ;
27+ return { name : getFieldId ( field , prefix ) , checked : false } ;
1628 case WizardInput . Select :
17- return { name : field . id } ;
29+ return { name : getFieldId ( field , prefix ) } ;
30+ case WizardInput . DynamicRow :
31+ return { name : getFieldId ( field , prefix ) } ;
1832 default :
1933 return {
20- name : field . id ,
34+ name : getFieldId ( field , prefix ) ,
2135 placeholder : field . placeholder ,
2236 } ;
2337 }
@@ -33,10 +47,10 @@ const mapOption = (option: WizardSelectOption): Option => {
3347 } ;
3448} ;
3549
36- export const FieldRenderer : React . FC < Props > = ( { field } ) => {
50+ export const FieldRenderer : React . FC < Props > = ( { field, simple = false , prefix } ) => {
3751 const { values } = useFormikContext < any > ( ) ;
3852 const el = useRef < any > ( null ) ;
39- const [ fieldProps , meta ] = useField ( getFieldProps ( field ) ) ;
53+ const [ fieldProps , meta ] = useField ( getFieldProps ( field , prefix ) ) ;
4054
4155 /**
4256 * vscode-elements do not support (yet) onChange prop
@@ -86,6 +100,9 @@ export const FieldRenderer: React.FC<Props> = ({ field }) => {
86100 />
87101 ) ;
88102 }
103+ case WizardInput . DynamicRow : {
104+ return < DynamicRowInput field = { field } /> ;
105+ }
89106 case WizardInput . Checkbox : {
90107 return < vscode-checkbox { ...fieldProps } ref = { el } /> ;
91108 }
@@ -99,9 +116,25 @@ export const FieldRenderer: React.FC<Props> = ({ field }) => {
99116 }
100117
101118 if ( fieldInner ) {
119+ if ( simple ) {
120+ return (
121+ < >
122+ { fieldInner }
123+ < vscode-form-helper >
124+ < p className = "error" >
125+ < FieldErrorMessage name = { fieldProps . name } />
126+ </ p >
127+ </ vscode-form-helper >
128+ </ >
129+ ) ;
130+ }
131+
102132 return (
103133 < vscode-form-group >
104- < vscode-label > { field . label } </ vscode-label >
134+ { field . type !== WizardInput . DynamicRow && < vscode-label > { field . label } </ vscode-label > }
135+ { field . type === WizardInput . DynamicRow && (
136+ < div className = "dynamic-row-title" > { field . label } </ div >
137+ ) }
105138 { fieldInner }
106139 < vscode-form-helper >
107140 { meta . touched && meta . error && < p className = "error" > { meta . error } </ p > }
0 commit comments