Skip to content

Commit 6cff359

Browse files
committed
fix(site): set min and max attributes for workspace number parameters
1 parent c8f68cb commit 6cff359

File tree

3 files changed

+63
-0
lines changed

3 files changed

+63
-0
lines changed

site/src/components/RichParameterInput/RichParameterInput.stories.tsx

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,38 @@ export const NumberType: Story = {
9999
},
100100
};
101101

102+
export const NumberTypeWithIncreasingMonotonicity: Story = {
103+
args: {
104+
value: 4,
105+
id: "number_parameter",
106+
parameter: createTemplateVersionParameter({
107+
name: "number_parameter",
108+
type: "number",
109+
description: "Numeric parameter",
110+
default_value: "",
111+
validation_min: 0,
112+
validation_max: 10,
113+
validation_monotonic: "increasing",
114+
}),
115+
},
116+
};
117+
118+
export const NumberTypeWithDecreasingMonotonicity: Story = {
119+
args: {
120+
value: 4,
121+
id: "number_parameter",
122+
parameter: createTemplateVersionParameter({
123+
name: "number_parameter",
124+
type: "number",
125+
description: "Numeric parameter",
126+
default_value: "",
127+
validation_min: 0,
128+
validation_max: 10,
129+
validation_monotonic: "decreasing",
130+
}),
131+
},
132+
};
133+
102134
export const BooleanType: Story = {
103135
args: {
104136
value: "false",

site/src/components/RichParameterInput/RichParameterInput.tsx

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import type {
1818
AutofillSource,
1919
} from "utils/richParameters";
2020
import { MultiTextField } from "./MultiTextField";
21+
import {InputBaseComponentProps} from "@mui/material";
2122

2223
const isBoolean = (parameter: TemplateVersionParameter) => {
2324
return parameter.type === "bool";
@@ -217,6 +218,7 @@ export const RichParameterInput: FC<RichParameterInputProps> = ({
217218
onChange={onChange}
218219
size={size}
219220
parameter={parameter}
221+
parameterAutofill={parameterAutofill}
220222
/>
221223
{!parameter.ephemeral &&
222224
autofillSource === "user_history" &&
@@ -250,6 +252,7 @@ const RichParameterField: FC<RichParameterInputProps> = ({
250252
disabled,
251253
onChange,
252254
parameter,
255+
parameterAutofill,
253256
value,
254257
size,
255258
...props
@@ -375,6 +378,30 @@ const RichParameterField: FC<RichParameterInputProps> = ({
375378
);
376379
}
377380

381+
let inputProps: InputBaseComponentProps = {};
382+
if (parameter.type === "number") {
383+
switch (parameter.validation_monotonic) {
384+
case "increasing":
385+
inputProps = {
386+
max: parameter.validation_max,
387+
min: parameterAutofill?.value,
388+
};
389+
break;
390+
case "decreasing":
391+
inputProps = {
392+
max: parameterAutofill?.value,
393+
min: parameter.validation_min,
394+
};
395+
break;
396+
default:
397+
inputProps = {
398+
max: parameter.validation_max,
399+
min: parameter.validation_min,
400+
};
401+
break;
402+
}
403+
}
404+
378405
// A text field can technically handle all cases!
379406
// As other cases become more prominent (like filtering for numbers),
380407
// we should break this out into more finely scoped input fields.
@@ -389,6 +416,7 @@ const RichParameterField: FC<RichParameterInputProps> = ({
389416
required={parameter.required}
390417
placeholder={parameter.default_value}
391418
value={value}
419+
inputProps={inputProps}
392420
onChange={(event) => {
393421
onChange(event.target.value);
394422
}}

site/src/pages/WorkspaceSettingsPage/WorkspaceParametersPage/WorkspaceParametersForm.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,9 @@ export const WorkspaceParametersForm: FC<WorkspaceParameterFormProps> = ({
112112
);
113113
}}
114114
parameter={parameter}
115+
parameterAutofill={autofillParams?.find(
116+
({ name }) => name === parameter.name,
117+
)}
115118
/>
116119
) : null,
117120
)}

0 commit comments

Comments
 (0)