mirror of
https://github.com/ansible/awx.git
synced 2026-05-08 09:57:35 -02:30
merge survey fields into rest of jt promt form
This commit is contained in:
@@ -16,7 +16,6 @@ function LaunchPrompt({ config, resource, onLaunch, onCancel, i18n }) {
|
|||||||
validate,
|
validate,
|
||||||
visitStep,
|
visitStep,
|
||||||
visitAllSteps,
|
visitAllSteps,
|
||||||
// formErrors,
|
|
||||||
contentError,
|
contentError,
|
||||||
} = useSteps(config, resource, i18n);
|
} = useSteps(config, resource, i18n);
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ function OtherPromptsStep({ config, i18n }) {
|
|||||||
of hosts that will be managed or affected by the playbook. Multiple
|
of hosts that will be managed or affected by the playbook. Multiple
|
||||||
patterns are allowed. Refer to Ansible documentation for more
|
patterns are allowed. Refer to Ansible documentation for more
|
||||||
information and examples on patterns.`)}
|
information and examples on patterns.`)}
|
||||||
isRequired
|
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
{config.ask_verbosity_on_launch && <VerbosityField i18n={i18n} />}
|
{config.ask_verbosity_on_launch && <VerbosityField i18n={i18n} />}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import React, { useEffect, useState } from 'react';
|
import React, { useState } from 'react';
|
||||||
import { withI18n } from '@lingui/react';
|
import { withI18n } from '@lingui/react';
|
||||||
import { Formik, useField } from 'formik';
|
import { useField } from 'formik';
|
||||||
import {
|
import {
|
||||||
Form,
|
Form,
|
||||||
FormGroup,
|
FormGroup,
|
||||||
@@ -21,35 +21,6 @@ import {
|
|||||||
import { Survey } from '@types';
|
import { Survey } from '@types';
|
||||||
|
|
||||||
function SurveyStep({ survey, i18n }) {
|
function SurveyStep({ survey, i18n }) {
|
||||||
const initialValues = {};
|
|
||||||
survey.spec.forEach(question => {
|
|
||||||
if (question.type === 'multiselect') {
|
|
||||||
initialValues[question.variable] = question.default.split('\n');
|
|
||||||
} else {
|
|
||||||
initialValues[question.variable] = question.default;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return (
|
|
||||||
<SurveySubForm survey={survey} initialValues={initialValues} i18n={i18n} />
|
|
||||||
);
|
|
||||||
}
|
|
||||||
SurveyStep.propTypes = {
|
|
||||||
survey: Survey.isRequired,
|
|
||||||
};
|
|
||||||
|
|
||||||
// This is a nested Formik form to perform validation on individual
|
|
||||||
// survey questions. When changes to the inner form occur (onBlur), the
|
|
||||||
// values for all questions are added to the outer form's `survey` field
|
|
||||||
// as a single object.
|
|
||||||
function SurveySubForm({ survey, initialValues, i18n }) {
|
|
||||||
const [, , surveyFieldHelpers] = useField('survey');
|
|
||||||
useEffect(() => {
|
|
||||||
// set survey initial values to parent form
|
|
||||||
surveyFieldHelpers.setValue(initialValues);
|
|
||||||
/* eslint-disable-next-line react-hooks/exhaustive-deps */
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
const fieldTypes = {
|
const fieldTypes = {
|
||||||
text: TextField,
|
text: TextField,
|
||||||
textarea: TextField,
|
textarea: TextField,
|
||||||
@@ -60,21 +31,19 @@ function SurveySubForm({ survey, initialValues, i18n }) {
|
|||||||
float: NumberField,
|
float: NumberField,
|
||||||
};
|
};
|
||||||
return (
|
return (
|
||||||
<Formik initialValues={initialValues}>
|
<Form>
|
||||||
{({ values }) => (
|
{survey.spec.map(question => {
|
||||||
<Form onBlur={() => surveyFieldHelpers.setValue(values)}>
|
const Field = fieldTypes[question.type];
|
||||||
{' '}
|
return (
|
||||||
{survey.spec.map(question => {
|
<Field key={question.variable} question={question} i18n={i18n} />
|
||||||
const Field = fieldTypes[question.type];
|
);
|
||||||
return (
|
})}
|
||||||
<Field key={question.variable} question={question} i18n={i18n} />
|
</Form>
|
||||||
);
|
|
||||||
})}
|
|
||||||
</Form>
|
|
||||||
)}
|
|
||||||
</Formik>
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
SurveyStep.propTypes = {
|
||||||
|
survey: Survey.isRequired,
|
||||||
|
};
|
||||||
|
|
||||||
function TextField({ question, i18n }) {
|
function TextField({ question, i18n }) {
|
||||||
const validators = [
|
const validators = [
|
||||||
@@ -85,7 +54,7 @@ function TextField({ question, i18n }) {
|
|||||||
return (
|
return (
|
||||||
<FormField
|
<FormField
|
||||||
id={`survey-question-${question.variable}`}
|
id={`survey-question-${question.variable}`}
|
||||||
name={question.variable}
|
name={`survey_${question.variable}`}
|
||||||
label={question.question_name}
|
label={question.question_name}
|
||||||
tooltip={question.question_description}
|
tooltip={question.question_description}
|
||||||
isRequired={question.required}
|
isRequired={question.required}
|
||||||
@@ -106,7 +75,7 @@ function NumberField({ question, i18n }) {
|
|||||||
return (
|
return (
|
||||||
<FormField
|
<FormField
|
||||||
id={`survey-question-${question.variable}`}
|
id={`survey-question-${question.variable}`}
|
||||||
name={question.variable}
|
name={`survey_${question.variable}`}
|
||||||
label={question.question_name}
|
label={question.question_name}
|
||||||
tooltip={question.question_description}
|
tooltip={question.question_description}
|
||||||
isRequired={question.required}
|
isRequired={question.required}
|
||||||
@@ -119,7 +88,7 @@ function NumberField({ question, i18n }) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function MultipleChoiceField({ question }) {
|
function MultipleChoiceField({ question }) {
|
||||||
const [field, meta] = useField(question.variable);
|
const [field, meta] = useField(`survey_${question.variable}`);
|
||||||
const id = `survey-question-${question.variable}`;
|
const id = `survey-question-${question.variable}`;
|
||||||
const isValid = !(meta.touched && meta.error);
|
const isValid = !(meta.touched && meta.error);
|
||||||
return (
|
return (
|
||||||
@@ -147,7 +116,7 @@ function MultipleChoiceField({ question }) {
|
|||||||
|
|
||||||
function MultiSelectField({ question }) {
|
function MultiSelectField({ question }) {
|
||||||
const [isOpen, setIsOpen] = useState(false);
|
const [isOpen, setIsOpen] = useState(false);
|
||||||
const [field, meta, helpers] = useField(question.variable);
|
const [field, meta, helpers] = useField(`survey_${question.variable}`);
|
||||||
const id = `survey-question-${question.variable}`;
|
const id = `survey-question-${question.variable}`;
|
||||||
const isValid = !(meta.touched && meta.error);
|
const isValid = !(meta.touched && meta.error);
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ export default function useSurveyStep(config, resource, visitedSteps, i18n) {
|
|||||||
survey.spec.forEach(question => {
|
survey.spec.forEach(question => {
|
||||||
const errMessage = validateField(
|
const errMessage = validateField(
|
||||||
question,
|
question,
|
||||||
values[question.variable],
|
values[`survey_${question.variable}`],
|
||||||
i18n
|
i18n
|
||||||
);
|
);
|
||||||
if (errMessage) {
|
if (errMessage) {
|
||||||
|
|||||||
Reference in New Issue
Block a user