fixes unresponsive clear all on survey step

This commit is contained in:
Alex Corey 2020-10-05 17:13:22 -04:00
parent 935c7a5328
commit b1a1c82169
5 changed files with 39 additions and 10 deletions

View File

@ -1,7 +1,10 @@
export default function getSurveyValues(values) {
const surveyValues = {};
Object.keys(values).forEach(key => {
if (key.startsWith('survey_')) {
if (key.startsWith('survey_') && values[key] !== []) {
if (Array.isArray(values[key]) && values[key].length === 0) {
return;
}
surveyValues[key.substr(7)] = values[key];
}
});

View File

@ -48,7 +48,7 @@ function PreviewStep({ resource, config, survey, formErrors, i18n }) {
return (
<Fragment>
{formErrors.length > 0 && (
{formErrors && (
<ErrorMessageWrapper>
{i18n._(t`Some of the previous step(s) have errors`)}
<Tooltip

View File

@ -104,4 +104,31 @@ describe('PreviewStep', () => {
extra_vars: 'one: 1',
});
});
test('should remove survey with empty array value', async () => {
let wrapper;
await act(async () => {
wrapper = mountWithContexts(
<Formik
initialValues={{ extra_vars: 'one: 1' }}
values={{ extra_vars: 'one: 1', survey_foo: [] }}
>
<PreviewStep
resource={resource}
config={{
ask_variables_on_launch: true,
}}
formErrors={formErrors}
/>
</Formik>
);
});
const detail = wrapper.find('PromptDetail');
expect(detail).toHaveLength(1);
expect(detail.prop('resource')).toEqual(resource);
expect(detail.prop('overrides')).toEqual({
extra_vars: 'one: 1',
});
});
});

View File

@ -146,9 +146,14 @@ function MultiSelectField({ question, i18n }) {
} else {
helpers.setValue(field.value.concat(option));
}
helpers.setTouched(true);
}}
isOpen={isOpen}
selections={field.value}
onClear={() => {
helpers.setTouched(true);
helpers.setValue([]);
}}
>
{question.choices.split('\n').map(opt => (
<SelectOption key={opt} value={opt} />

View File

@ -45,15 +45,9 @@ export default function useSurveyStep(config, visitedSteps, i18n) {
});
return errors;
};
const formError = validate();
const formError = Object.keys(validate()).length > 0;
return {
step: getStep(
config,
survey,
Object.keys(formError).length > 0,
i18n,
visitedSteps
),
step: getStep(config, survey, formError, i18n, visitedSteps),
formError,
initialValues: getInitialValues(config, survey),
survey,