|
1 | | -import { Button, Input, mergeClasses, Select, Switch, Text, Tooltip } from '@fluentui/react-components' |
| 1 | +import { Button, Field, Input, mergeClasses, Select, Switch, Text, Tooltip } from '@fluentui/react-components' |
2 | 2 | import { ChevronDownRegular, ChevronRightRegular, InfoRegular } from '@fluentui/react-icons' |
3 | 3 | import type { ConverterCatalogEntry, Parameter } from '../../../types' |
4 | 4 | import { useConverterPanelStyles } from './ConverterPanel.styles' |
@@ -68,6 +68,23 @@ function ConverterParameterViewer({ param, value, isMissing, onChange }: ParamIn |
68 | 68 | ) |
69 | 69 | } |
70 | 70 |
|
| 71 | +function ParameterNameLabel({ param }: { param: Parameter }) { |
| 72 | + const styles = useConverterPanelStyles() |
| 73 | + |
| 74 | + return ( |
| 75 | + <span className={styles.paramLabel}> |
| 76 | + {param.name} |
| 77 | + {param.description && ( |
| 78 | + <Tooltip content={param.description} relationship="description"> |
| 79 | + <span className={styles.paramInfo} onClick={(e) => e.preventDefault()}> |
| 80 | + <InfoRegular fontSize={12} /> |
| 81 | + </span> |
| 82 | + </Tooltip> |
| 83 | + )} |
| 84 | + </span> |
| 85 | + ) |
| 86 | +} |
| 87 | + |
71 | 88 | export interface ConverterParamsProps { |
72 | 89 | converter: ConverterCatalogEntry |
73 | 90 | paramValues: Record<string, string> |
@@ -97,37 +114,36 @@ export default function ConverterParams({ converter, paramValues, paramsExpanded |
97 | 114 | </Button> |
98 | 115 | {paramsExpanded && (converter.parameters ?? []).map((param) => { |
99 | 116 | const isMissing = showValidation && param.required && !paramValues[param.name]?.trim() |
| 117 | + const isChecked = (paramValues[param.name] ?? (typeof param.default === 'string' ? param.default : 'false')).toLowerCase() === 'true' |
| 118 | + const typeHint = param.type_name !== 'bool' && !param.choices ? param.type_name : undefined |
| 119 | + |
100 | 120 | return ( |
101 | | - <div key={param.name} className={styles.paramBlock}> |
102 | | - <span className={styles.paramLabel}> |
103 | | - <Text size={200} weight="semibold">{param.name}{param.required ? ' *' : ''}</Text> |
104 | | - {param.description && ( |
105 | | - <Tooltip content={param.description} relationship="description"> |
106 | | - <span className={styles.paramInfo}><InfoRegular fontSize={12} /></span> |
107 | | - </Tooltip> |
108 | | - )} |
109 | | - </span> |
| 121 | + <Field |
| 122 | + key={param.name} |
| 123 | + className={styles.paramBlock} |
| 124 | + label={<ParameterNameLabel param={param} />} |
| 125 | + required={param.required} |
| 126 | + validationMessage={isMissing ? 'Required' : undefined} |
| 127 | + validationState={isMissing ? 'error' : undefined} |
| 128 | + hint={typeHint} |
| 129 | + > |
110 | 130 | {param.type_name === 'bool' ? ( |
111 | | - <Switch |
112 | | - checked={(paramValues[param.name] ?? (typeof param.default === 'string' ? param.default : 'false')).toLowerCase() === 'true'} |
113 | | - onChange={(_, data) => onParamChange(param.name, data.checked ? 'true' : 'false')} |
114 | | - label={(paramValues[param.name] ?? (typeof param.default === 'string' ? param.default : 'false')).toLowerCase() === 'true' ? 'True' : 'False'} |
115 | | - data-testid={`param-${param.name}`} |
116 | | - /> |
| 131 | + <div className={styles.filePickerRow}> |
| 132 | + <Switch |
| 133 | + checked={isChecked} |
| 134 | + onChange={(_, data) => onParamChange(param.name, data.checked ? 'true' : 'false')} |
| 135 | + data-testid={`param-${param.name}`} |
| 136 | + /> |
| 137 | + <Text size={200} aria-hidden="true">{isChecked ? 'True' : 'False'}</Text> |
| 138 | + </div> |
117 | 139 | ) : param.choices ? ( |
118 | 140 | <ConverterParameterChoiceViewer param={param} value={paramValues[param.name]} isMissing={isMissing} onChange={onParamChange} /> |
119 | 141 | ) : /path|file/i.test(param.name) || /path|file/i.test(param.description ?? '') ? ( |
120 | 142 | <ParameterFileViewer param={param} value={paramValues[param.name]} isMissing={isMissing} onChange={onParamChange} onBrowse={onFileBrowse} /> |
121 | 143 | ) : ( |
122 | 144 | <ConverterParameterViewer param={param} value={paramValues[param.name]} isMissing={isMissing} onChange={onParamChange} /> |
123 | 145 | )} |
124 | | - {isMissing && ( |
125 | | - <Text size={100} className={styles.paramErrorText}>Required</Text> |
126 | | - )} |
127 | | - {param.type_name !== 'bool' && !param.choices && ( |
128 | | - <Text size={100} className={styles.hintText}>{param.type_name}</Text> |
129 | | - )} |
130 | | - </div> |
| 146 | + </Field> |
131 | 147 | ) |
132 | 148 | })} |
133 | 149 | </div> |
|
0 commit comments