Skip to content

feat: Adjust forms to include Rich Parameters #5856

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 48 commits into from
Feb 1, 2023
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
ed77ef7
XService: GetTemplateParameters
mtojek Jan 24, 2023
5d8330c
Rich parameter input shows up
mtojek Jan 24, 2023
25140eb
Render option icons
mtojek Jan 25, 2023
622eb4b
Icons
mtojek Jan 25, 2023
6a9fce9
WIP
mtojek Jan 25, 2023
d5f1afc
For testing purposes: template
mtojek Jan 25, 2023
2cbc5b0
Fix: useState
mtojek Jan 25, 2023
82d7710
WIP: dynamic validation
mtojek Jan 26, 2023
79dbb5d
Yup validation
mtojek Jan 26, 2023
17dece6
Translations
mtojek Jan 26, 2023
a886301
Remove temporary template
mtojek Jan 26, 2023
dc79db5
make fmt
mtojek Jan 26, 2023
e5aa5a9
WIP
mtojek Jan 26, 2023
a009555
Fix: tests
mtojek Jan 27, 2023
1311493
Fix: fmt
mtojek Jan 27, 2023
feeb10c
URL param
mtojek Jan 27, 2023
64d3016
Refactor
mtojek Jan 27, 2023
ac61aae
Test: rich param value
mtojek Jan 27, 2023
a1f22e9
Storybook
mtojek Jan 27, 2023
dfec8ca
Fix
mtojek Jan 27, 2023
2e321df
Refactor for testing purposes
mtojek Jan 27, 2023
f41de12
Typo
mtojek Jan 27, 2023
40fa739
test: string validation
mtojek Jan 27, 2023
2017a3a
Merge branch 'main' into 5574-site-1
mtojek Jan 30, 2023
d9f03b6
Button: build parameters
mtojek Jan 30, 2023
17bee41
Full screen page
mtojek Jan 30, 2023
b9da6e0
Fix: navigate
mtojek Jan 30, 2023
f372027
XState done
mtojek Jan 31, 2023
b7c0916
refactor: postWorkspaceBuild
mtojek Jan 31, 2023
d8f7cc3
RichParameterInput rendered
mtojek Jan 31, 2023
0dac060
Fix: bad initial value
mtojek Jan 31, 2023
4036caa
Validation works
mtojek Jan 31, 2023
608d713
Maybe
mtojek Jan 31, 2023
2edca1e
Fix
mtojek Jan 31, 2023
c771199
Go back button
mtojek Jan 31, 2023
35cf603
GoBack button
mtojek Jan 31, 2023
640ae42
Form
mtojek Jan 31, 2023
f31a7a0
Fix
mtojek Jan 31, 2023
5228e9c
Storybook
mtojek Feb 1, 2023
3b842f2
Fix: CreateWorkspacePage
mtojek Feb 1, 2023
c62d5a4
fmt
mtojek Feb 1, 2023
6cab87f
Test
mtojek Feb 1, 2023
491107a
Merge branch 'main' into 5574-site-1
mtojek Feb 1, 2023
097be54
ns
mtojek Feb 1, 2023
1210435
fmt
mtojek Feb 1, 2023
26a5e5d
All tests
mtojek Feb 1, 2023
8e2576e
feat: WorkspaceActions depend on template parameters
mtojek Feb 1, 2023
1873645
Fix
mtojek Feb 1, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
URL param
  • Loading branch information
mtojek committed Jan 27, 2023
commit feeb10c40937f4d4f28d6bf6818dea5c865067c0
10 changes: 7 additions & 3 deletions site/src/components/RichParameterInput/RichParameterInput.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -50,12 +50,14 @@ export interface RichParameterInputProps {
disabled?: boolean
parameter: TemplateVersionParameter
onChange: (value: string) => void
defaultValue?: string
}

export const RichParameterInput: FC<RichParameterInputProps> = ({
disabled,
onChange,
parameter,
defaultValue,
...props
}) => {
const styles = useStyles()
Expand All @@ -69,6 +71,7 @@ export const RichParameterInput: FC<RichParameterInputProps> = ({
disabled={disabled}
onChange={onChange}
parameter={parameter}
defaultValue={defaultValue}
/>
</div>
</Stack>
Expand All @@ -79,15 +82,16 @@ const RichParameterField: React.FC<RichParameterInputProps> = ({
disabled,
onChange,
parameter,
defaultValue,
...props
}) => {
const [parameterValue, setParameterValue] = useState(parameter.default_value)
const [parameterValue, setParameterValue] = useState(defaultValue)
const styles = useStyles()

if (isBoolean(parameter)) {
return (
<RadioGroup
defaultValue={parameter.default_value}
defaultValue={parameterValue}
onChange={(event) => {
onChange(event.target.value)
}}
Expand All @@ -111,7 +115,7 @@ const RichParameterField: React.FC<RichParameterInputProps> = ({
if (parameter.options.length > 0) {
return (
<RadioGroup
defaultValue={parameter.options[0].value}
defaultValue={parameterValue}
onChange={(event) => {
onChange(event.target.value)
}}
Expand Down
37 changes: 33 additions & 4 deletions site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,10 @@ export const CreateWorkspacePageView: FC<
const [parameterValues, setParameterValues] = useState<
Record<string, string>
>(props.defaultParameterValues ?? {})
const defaultRichParameterValues = extractRichParametersValues(
props.templateParameters,
props.defaultParameterValues,
)

const { t } = useTranslation("createWorkspacePage")

Expand All @@ -60,7 +64,7 @@ export const CreateWorkspacePageView: FC<
initialValues: {
name: "",
template_id: props.selectedTemplate ? props.selectedTemplate.id : "",
rich_parameter_values: defaultRichParameters(props.templateParameters),
rich_parameter_values: defaultRichParameterValues,
},
validationSchema: ValidationSchemaForRichParameters(
props.templateParameters,
Expand Down Expand Up @@ -281,6 +285,10 @@ export const CreateWorkspacePageView: FC<
})
}}
parameter={parameter}
defaultValue={initialRichParameterValue(
defaultRichParameterValues,
parameter,
)}
/>
))}
</Stack>
Expand Down Expand Up @@ -370,8 +378,9 @@ const useFormFooterStyles = makeStyles((theme) => ({
},
}))

const defaultRichParameters = (
const extractRichParametersValues = (
templateParameters?: TypesGen.TemplateVersionParameter[],
defaultValuesFromQuery?: Record<string, string>,
): TypesGen.WorkspaceBuildParameter[] => {
const defaults: TypesGen.WorkspaceBuildParameter[] = []
if (!templateParameters) {
Expand All @@ -380,23 +389,43 @@ const defaultRichParameters = (

templateParameters.forEach((parameter) => {
if (parameter.options.length > 0) {
let parameterValue = parameter.options[0].value
if (defaultValuesFromQuery && defaultValuesFromQuery[parameter.name]) {
parameterValue = defaultValuesFromQuery[parameter.name]
}

const buildParameter: TypesGen.WorkspaceBuildParameter = {
name: parameter.name,
value: parameter.options[0].value,
value: parameterValue,
}
defaults.push(buildParameter)
return
}

let parameterValue = parameter.default_value
if (defaultValuesFromQuery && defaultValuesFromQuery[parameter.name]) {
parameterValue = defaultValuesFromQuery[parameter.name]
}

const buildParameter: TypesGen.WorkspaceBuildParameter = {
name: parameter.name,
value: parameter.default_value || "",
value: parameterValue || "",
}
defaults.push(buildParameter)
})
return defaults
}

const initialRichParameterValue = (
workspaceBuildParameters: TypesGen.WorkspaceBuildParameter[],
parameter: TypesGen.TemplateVersionParameter,
): string => {
const buildParameter = workspaceBuildParameters.find((buildParameter) => {
return buildParameter.name === parameter.name
})
return (buildParameter && buildParameter.value) || ""
}

const ValidationSchemaForRichParameters = (
templateParameters?: TypesGen.TemplateVersionParameter[],
): Yup.AnySchema => {
Expand Down