Skip to content

Commit 7c025b2

Browse files
committed
Generalize ProviderSelectField into SelectWithOnChange
1 parent c773d05 commit 7c025b2

File tree

4 files changed

+31
-22
lines changed

4 files changed

+31
-22
lines changed

app/javascript/components/provider-form/index.jsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import MiqFormRenderer from '../../forms/data-driven-form';
88
import miqRedirectBack from '../../helpers/miq-redirect-back';
99
import mapper from '../../forms/mappers/componentMapper';
1010
import ProtocolSelector from './protocol-selector';
11-
import ProviderSelectField from './provider-select-field';
1211
import ProviderCredentials from './provider-credentials';
1312
import ValidateProviderCredentials from './validate-provider-credentials';
1413
import DetectButton from './detect-button';
@@ -58,7 +57,7 @@ const loadProviderFields = type => API.options(`/api/providers?type=${type}`).th
5857
);
5958

6059
const typeSelectField = (edit, filter, setState) => ({
61-
component: 'provider-select-field',
60+
component: 'select-with-onchange',
6261
id: 'type',
6362
name: 'type',
6463
label: __('Type'),
@@ -68,7 +67,7 @@ const typeSelectField = (edit, filter, setState) => ({
6867
API.options('/api/providers').then(({ data: { supported_providers } }) => supported_providers // eslint-disable-line camelcase
6968
.filter(({ kind }) => kind === filter)
7069
.map(({ title, type }) => ({ value: type, label: title }))),
71-
loadSchema: value => loadProviderFields(value).then(fields => setState(({ fields: [firstField] }) => ({
70+
onChange: value => loadProviderFields(value).then(fields => setState(({ fields: [firstField] }) => ({
7271
fields: [firstField, ...fields],
7372
}))),
7473
});
@@ -161,7 +160,6 @@ const ProviderForm = ({ providerId, kind, title, redirect }) => {
161160
const componentMapper = {
162161
...mapper,
163162
'protocol-selector': ProtocolSelector,
164-
'provider-select-field': ProviderSelectField,
165163
'provider-credentials': ProviderCredentials,
166164
'validate-provider-credentials': ValidateProviderCredentials,
167165
'detect-button': DetectButton,

app/javascript/components/provider-form/provider-select-field.jsx

Lines changed: 0 additions & 18 deletions
This file was deleted.
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import React, { useEffect } from 'react';
2+
import PropTypes from 'prop-types';
3+
4+
import { useFieldApi } from '@@ddf';
5+
import Select from './index';
6+
7+
const SelectWithOnChange = ({ onChange, ...props }) => {
8+
const { input: { value } } = useFieldApi(props);
9+
10+
useEffect(() => {
11+
if (!props.isDisabled && value) {
12+
onChange(value);
13+
}
14+
}, [value]);
15+
16+
return <Select {...props} />;
17+
};
18+
19+
SelectWithOnChange.propTypes = {
20+
loadSchema: PropTypes.func,
21+
};
22+
23+
SelectWithOnChange.defaultProps = {
24+
loadSchema: () => undefined,
25+
};
26+
27+
export default SelectWithOnChange;

app/javascript/forms/mappers/componentMapper.jsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import DualListSelect from '../../components/dual-list-select';
88
import EditPasswordField from '../../components/async-credentials/edit-password-field';
99
import PasswordField from '../../components/async-credentials/password-field';
1010
import Select from '../../components/select';
11+
import SelectWithOnChange from '../../components/select/with-onchange';
1112
import { DataDrivenFormCodeEditor } from '../../components/code-editor';
1213
import FieldArray from '../../components/field-array';
1314

@@ -23,6 +24,7 @@ const mapper = {
2324
'password-field': PasswordField,
2425
'validate-credentials': AsyncCredentials,
2526
[componentTypes.SELECT]: Select,
27+
[`${componentTypes.SELECT}-with-onchange`]: SelectWithOnChange,
2628
};
2729

2830
export default mapper;

0 commit comments

Comments
 (0)