Skip to content

Commit b92504d

Browse files
whDongRuisunnywx
authored andcommitted
fix: Deploy app select vxnet (#314)
* Fix Checkbox component no value prop
1 parent bad206c commit b92504d

File tree

9 files changed

+59
-41
lines changed

9 files changed

+59
-41
lines changed

src/components/Base/Checkbox/checkbox.jsx

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export default class Checkbox extends Component {
99
static propTypes = {
1010
className: PropTypes.string,
1111
name: PropTypes.string,
12+
value: PropTypes.string,
1213
disabled: PropTypes.bool,
1314
checked: PropTypes.bool,
1415
onChange: PropTypes.func
@@ -34,8 +35,6 @@ export default class Checkbox extends Component {
3435
if (disabled) {
3536
return;
3637
}
37-
const isChecked = this.state.isChecked;
38-
this.setState({ isChecked: !isChecked });
3938
onChange && onChange(e);
4039
};
4140

@@ -46,12 +45,9 @@ export default class Checkbox extends Component {
4645
}
4746

4847
render() {
49-
const { style, className, disabled, children } = this.props;
48+
const { style, className, disabled, children, value } = this.props;
5049
const isChecked = this.state.isChecked;
51-
const color = {
52-
primary: '#fff',
53-
secondary: '#fff'
54-
};
50+
5551
return (
5652
<label
5753
className={classNames(styles.checkbox, className, {
@@ -60,8 +56,13 @@ export default class Checkbox extends Component {
6056
disabled={disabled}
6157
style={style}
6258
>
63-
{isChecked && <Icon name="check" color={color} />}
64-
<input type="checkbox" checked={isChecked} onChange={this.handleToggleCheck} />
59+
{isChecked && <Icon name="check" />}
60+
<input
61+
type="checkbox"
62+
value={value}
63+
checked={isChecked}
64+
onChange={this.handleToggleCheck}
65+
/>
6566
{children}
6667
</label>
6768
);

src/components/Base/Checkbox/group.jsx

Lines changed: 20 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -11,50 +11,47 @@ export default class CheckboxGroup extends Component {
1111
children: PropTypes.oneOfType([PropTypes.node, PropTypes.arrayOf(PropTypes.node)]),
1212
values: PropTypes.array,
1313
name: PropTypes.string,
14-
onChange: PropTypes.func,
14+
onChange: PropTypes.func
1515
};
1616

1717
static defaultProps = {
1818
children: [],
1919
values: [],
20-
name: '',
20+
name: ''
2121
};
2222

2323
constructor(props) {
2424
super(props);
25-
26-
this.values = [...props.values];
2725
}
2826

29-
handleChange = (e) => {
27+
handleChange = e => {
3028
e.stopPropagation();
3129

3230
const { name, onChange } = this.props;
3331
const targetValue = e.target.value;
32+
let values = this.props.values;
3433

3534
if (e.target.checked) {
36-
this.values.push(targetValue);
35+
values.push(targetValue);
3736
} else {
38-
remove(this.values, v => v === targetValue);
37+
remove(values, v => v === targetValue);
3938
}
40-
onChange && onChange(this.values, name);
41-
}
39+
onChange && onChange(values, name);
40+
};
4241

4342
render() {
44-
const { className, name, children } = this.props;
45-
46-
const childNodes = React.Children.map(children, (child) => React.cloneElement(child, {
47-
...child.props,
48-
key: `check-${child.props.value}`,
49-
name: child.props.name || name,
50-
checked: this.values.indexOf(child.props.value) !== -1,
51-
onChange: this.handleChange,
52-
}));
53-
54-
return (
55-
<div className={classNames(styles.group, className)}>
56-
{childNodes}
57-
</div>
43+
const { className, name, children, values } = this.props;
44+
45+
const childNodes = React.Children.map(children, child =>
46+
React.cloneElement(child, {
47+
...child.props,
48+
key: `check-${child.props.value}`,
49+
name: child.props.name || name,
50+
checked: values.indexOf(child.props.value) !== -1,
51+
onChange: this.handleChange
52+
})
5853
);
54+
55+
return <div className={classNames(styles.group, className)}>{childNodes}</div>;
5956
}
6057
}

src/components/Base/Checkbox/index.scss

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,10 @@
7272
.icon {
7373
display: block;
7474
z-index: 3;
75+
svg {
76+
--primary-color: #{$N0};
77+
--secondary-color: #{$N0};
78+
}
7579
}
7680
}
7781
&:hover{

src/components/Base/Select/select.jsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,12 @@ export default class Select extends React.Component {
4848
const { isOpen } = this.state;
4949
const { disabled } = this.props;
5050

51+
if (disabled) {
52+
return;
53+
}
5154
if (isOpen) {
5255
document.removeEventListener('click', this.handleOutsideClick.bind(this));
53-
} else if (!disabled) {
56+
} else {
5457
document.addEventListener('click', this.handleOutsideClick.bind(this));
5558
}
5659

@@ -82,11 +85,11 @@ export default class Select extends React.Component {
8285

8386
renderControl() {
8487
const { isOpen } = this.state;
85-
const { disabled } = this.props;
88+
const { value, disabled } = this.props;
8689

8790
return (
8891
<div className={styles.control} onClick={this.handleControlClick}>
89-
<div className={styles.controlLabel}>{this.currentLabel}</div>
92+
<div className={styles.controlLabel}>{value}</div>
9093
<Icon name={isOpen && !disabled ? 'caret-up' : 'caret-down'} type="dark" />
9194
</div>
9295
);

src/pages/Admin/Apps/Deploy/index.jsx

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,12 @@ export default class AppDeploy extends Component {
133133
</div>
134134
<div className={styles.cellModule}>
135135
<label className={classnames(styles.name, styles.selectName)}>Version</label>
136-
<Select className={styles.select} value={versionId} onChange={changeVersion}>
136+
<Select
137+
className={styles.select}
138+
value={versionId}
139+
onChange={changeVersion}
140+
disabled={versions.length === 0}
141+
>
137142
{versions.map(({ version_id, name }) => (
138143
<Select.Option key={version_id} value={version_id} title={name}>
139144
{name}
@@ -167,7 +172,12 @@ export default class AppDeploy extends Component {
167172
</div>
168173
<div className={styles.cellModule}>
169174
<label className={classnames(styles.name, styles.selectName)}>VxNet to Join</label>
170-
<Select className={styles.select} value={subnetId} onChange={changeSubnet}>
175+
<Select
176+
className={styles.select}
177+
value={subnetId}
178+
onChange={changeSubnet}
179+
disabled={subnets.length === 0}
180+
>
171181
{subnets.map(({ subnet_id, name }) => (
172182
<Select.Option key={subnet_id} value={subnet_id}>
173183
{subnet_id}

src/stores/app/deploy.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,8 @@ export default class AppDeployStore extends Store {
208208
let arrSubnets = this.subnets.toJSON();
209209
if (arrSubnets[0]) {
210210
this.subnetId = arrSubnets[0].subnet_id;
211+
} else {
212+
this.subnetId = '';
211213
}
212214
}
213215

src/stores/repo/create.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ export default class RepoCreateStore extends Store {
143143
const data = getFormData(e.target);
144144

145145
if (_.isEmpty(providers)) {
146-
return this.showMsg('please select at least one provider');
146+
return this.showMsg('Please select at least one Runtime Provider');
147147
}
148148

149149
for (let i = 0; i < this.selectors.length; i++) {

test/components/Base/Checkbox.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ describe('Base/Checkbox', () => {
3333
wrapper.find('input').simulate('change');
3434

3535
const isChecked = wrapper.state().isChecked;
36-
expect(isChecked).not.toBeTruthy();
36+
expect(isChecked).toBeTruthy();
3737
expect(mockChange).toHaveBeenCalled();
3838
expect(mockChange).toHaveBeenCalledTimes(1);
3939
expect(mockChange.mock.calls[0][0].target.checked).toEqual(isChecked);

test/components/Base/__snapshots__/Checkbox.test.js.snap

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ exports[`Base/Checkbox group render 1`] = `
2525
>
2626
<svg
2727
class="qicon qicon-check qicon-light"
28-
style="--primary-color:#fff;--secondary-color:#fff"
2928
>
3029
<use
3130
href="#check"
@@ -35,6 +34,7 @@ exports[`Base/Checkbox group render 1`] = `
3534
<input
3635
checked=""
3736
type="checkbox"
37+
value="1"
3838
/>
3939
option1
4040
</label>
@@ -43,6 +43,7 @@ exports[`Base/Checkbox group render 1`] = `
4343
>
4444
<input
4545
type="checkbox"
46+
value="2"
4647
/>
4748
option2
4849
</label>
@@ -55,7 +56,6 @@ exports[`Base/Checkbox group render 1`] = `
5556
>
5657
<svg
5758
class="qicon qicon-check qicon-light"
58-
style="--primary-color:#fff;--secondary-color:#fff"
5959
>
6060
<use
6161
href="#check"
@@ -65,6 +65,7 @@ exports[`Base/Checkbox group render 1`] = `
6565
<input
6666
checked=""
6767
type="checkbox"
68+
value="3"
6869
/>
6970
option3
7071
</label>

0 commit comments

Comments
 (0)