Skip to content

Commit 967f3e7

Browse files
authored
Merge pull request #2762 from afrisalyp/cf14
#2762 Disable update milestone button if no changes.
2 parents 442a4f1 + 676a99b commit 967f3e7

File tree

2 files changed

+47
-4
lines changed

2 files changed

+47
-4
lines changed

src/projects/detail/components/timeline/Form/Form.jsx

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ class Form extends React.Component {
2828
this.setFormValid = this.setFormValid.bind(this)
2929
this.setFormInvalid = this.setFormInvalid.bind(this)
3030
this.submitForm = this.submitForm.bind(this)
31+
this.changeForm = this.changeForm.bind(this)
32+
3133
}
3234

3335
setFormValid() {
@@ -44,13 +46,19 @@ class Form extends React.Component {
4446
onSubmit(values)
4547
}
4648

49+
changeForm(values) {
50+
const { onChange } = this.props
51+
52+
if (onChange) onChange(values)
53+
}
54+
4755
render() {
4856
const {
4957
cancelButtonTitle,
5058
fields,
5159
onCancelClick,
5260
submitButtonTitle,
53-
title,
61+
title
5462
} = this.props
5563
const { isValid } = this.state
5664

@@ -60,6 +68,7 @@ class Form extends React.Component {
6068
onInvalid={this.setFormInvalid}
6169
onValid={this.setFormValid}
6270
onValidSubmit={this.submitForm}
71+
onChange={this.changeForm}
6372
>
6473
<div styleName="title">{title}</div>
6574
<div styleName="rows">
@@ -98,7 +107,7 @@ class Form extends React.Component {
98107
</button>
99108
<button
100109
type="submit"
101-
disabled={!isValid}
110+
disabled={!isValid || this.props.disableSubmitButton}
102111
className="tc-btn tc-btn-primary"
103112
>
104113
{submitButtonTitle}
@@ -112,6 +121,7 @@ class Form extends React.Component {
112121
Form.defaultProps = {
113122
cancelButtonTitle: 'Cancel',
114123
submitButtonTitle: 'Submit',
124+
disableSubmitButton: false
115125
}
116126

117127
Form.propTypes = {
@@ -122,8 +132,10 @@ Form.propTypes = {
122132
})).isRequired,
123133
onCancelClick: PT.func.isRequired,
124134
onSubmit: PT.func.isRequired,
135+
onChange: PT.func,
125136
submitButtonTitle: PT.string,
126137
title: PT.string.isRequired,
138+
disableSubmitButton: PT.bool
127139
}
128140

129141
export default Form

src/projects/detail/components/timeline/Milestone/Milestone.jsx

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,14 @@ class Milestone extends React.Component {
4545
this.completeFinalFixesMilestone = this.completeFinalFixesMilestone.bind(this)
4646
this.extendMilestone = this.extendMilestone.bind(this)
4747
this.submitFinalFixesRequest = this.submitFinalFixesRequest.bind(this)
48+
this.milestoneEditorChanged = this.milestoneEditorChanged.bind(this)
4849

4950
this.state = {
5051
activeMenu: '',
5152
isHoverHeader: false,
5253
isEditing: false,
53-
isMobileEditing: false
54+
isMobileEditing: false,
55+
disableSubmit: true
5456
}
5557
}
5658

@@ -90,7 +92,7 @@ class Milestone extends React.Component {
9092
}
9193

9294
closeEditForm() {
93-
this.setState({ isEditing: false, isMobileEditing: false })
95+
this.setState({ isEditing: false, isMobileEditing: false, disableSubmit: true })
9496
}
9597

9698
toggleMobileEditLink() {
@@ -103,6 +105,33 @@ class Milestone extends React.Component {
103105
updateMilestone(milestone.id, values)
104106
}
105107

108+
milestoneEditorChanged(values) {
109+
if (!this.props.milestone) {
110+
if (this.state.disableSubmit) {
111+
this.setState({ disableSubmit: false })
112+
}
113+
return
114+
}
115+
for (const key in values) {
116+
if (values.hasOwnProperty(key)) {
117+
const element = values[key]
118+
let compareElement = this.props.milestone[key]
119+
if (!(compareElement instanceof String)) {
120+
compareElement = compareElement.toString()
121+
}
122+
if (element !== compareElement) {
123+
if (this.state.disableSubmit) {
124+
this.setState({ disableSubmit: false })
125+
}
126+
return
127+
}
128+
}
129+
}
130+
if (!this.state.disableSubmit) {
131+
this.setState({ disableSubmit: true })
132+
}
133+
}
134+
106135
updateMilestoneContent(contentProps, metaDataProps) {
107136
const { updateMilestone, milestone } = this.props
108137

@@ -247,8 +276,10 @@ class Milestone extends React.Component {
247276
}]}
248277
onCancelClick={this.closeEditForm}
249278
onSubmit={this.updateMilestoneWithData}
279+
onChange={this.milestoneEditorChanged}
250280
submitButtonTitle="Update milestone"
251281
title="Milestone Properties"
282+
disableSubmitButton={this.state.disableSubmit}
252283
/>
253284
)
254285
return (

0 commit comments

Comments
 (0)