Skip to content

Commit 691f487

Browse files
committed
Move hidden input into its own component
1 parent 1579fe0 commit 691f487

File tree

2 files changed

+35
-27
lines changed

2 files changed

+35
-27
lines changed

src/js/CheckboxTree.jsx

Lines changed: 5 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import PropTypes from 'prop-types';
55
import React from 'react';
66

77
import GlobalActions from './components/GlobalActions';
8+
import HiddenInput from './components/HiddenInput';
89
import TreeNode from './components/TreeNode';
910
import defaultLang from './lang/default';
1011
import iconsShape from './shapes/iconsShape';
@@ -296,34 +297,11 @@ class CheckboxTree extends React.Component {
296297
}
297298

298299
renderHiddenInput() {
299-
const { name, nameAsArray } = this.props;
300+
const { checked, name, nameAsArray } = this.props;
300301

301-
if (name === undefined) {
302-
return null;
303-
}
304-
305-
if (nameAsArray) {
306-
return this.renderArrayHiddenInput();
307-
}
308-
309-
return this.renderJoinedHiddenInput();
310-
}
311-
312-
renderArrayHiddenInput() {
313-
const { checked, name: inputName } = this.props;
314-
315-
return checked.map((value) => {
316-
const name = `${inputName}[]`;
317-
318-
return <input key={value} name={name} type="hidden" value={value} />;
319-
});
320-
}
321-
322-
renderJoinedHiddenInput() {
323-
const { checked, name } = this.props;
324-
const inputValue = checked.join(',');
325-
326-
return <input name={name} type="hidden" value={inputValue} />;
302+
return name === undefined ? null : (
303+
<HiddenInput checked={checked} name={name} nameAsArray={nameAsArray} />
304+
);
327305
}
328306

329307
render() {

src/js/components/HiddenInput.jsx

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import PropTypes from 'prop-types';
2+
import React from 'react';
3+
4+
import listShape from '../shapes/listShape';
5+
6+
const propTypes = {
7+
checked: listShape.isRequired,
8+
name: PropTypes.string.isRequired,
9+
nameAsArray: PropTypes.bool.isRequired,
10+
};
11+
12+
function renderInputArray(name, checked) {
13+
const inputName = `${name}[]`;
14+
15+
return checked.map((value) => (
16+
<input key={value} name={inputName} type="hidden" value={value} />
17+
));
18+
}
19+
20+
function HiddenInput({ checked, name, nameAsArray }) {
21+
if (nameAsArray) {
22+
return <>{renderInputArray(name, checked)}</>;
23+
}
24+
25+
return <input name={name} type="hidden" value={checked.join(',')} />;
26+
}
27+
28+
HiddenInput.propTypes = propTypes;
29+
30+
export default HiddenInput;

0 commit comments

Comments
 (0)