| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133 | 2×
2×
2×
2×
2×
2×
2×
2×
2×
2×
2×
28×
28×
28×
28×
28×
28×
2×
| var AsyncButton, BS, CourseActions, CourseStore, React, RenameCourse, RenameCourseField, TutorInput, _, classnames, ref;
React = require('react');
BS = require('react-bootstrap');
_ = require('underscore');
ref = require('../../flux/course'), CourseStore = ref.CourseStore, CourseActions = ref.CourseActions;
AsyncButton = require('openstax-react-components').AsyncButton;
TutorInput = require('../tutor-input').TutorInput;
classnames = require('classnames');
RenameCourseField = React.createClass({
displayName: 'RenameCourseField',
propTypes: {
courseId: React.PropTypes.string,
label: React.PropTypes.string.isRequired,
name: React.PropTypes.string.isRequired,
"default": React.PropTypes.string.isRequired,
onChange: React.PropTypes.func.isRequired,
autofocus: React.PropTypes.bool,
validate: React.PropTypes.func.isRequired
},
componentDidMount: function() {
if (this.props.autofocus) {
this.refs.input.focus();
}
if (this.props.autofocus) {
return this.refs.input.cursorToEnd();
}
},
onChange: function(value) {
return this.props.onChange(value);
},
render: function() {
return React.createElement(TutorInput, {
"ref": 'input',
"label": this.props.label,
"default": this.props["default"],
"required": true,
"onChange": this.onChange,
"validate": this.props.validate
});
}
});
RenameCourse = React.createClass({displayName: "RenameCourse",
propTypes: {
courseId: React.PropTypes.string.isRequired
},
getInitialState: function() {
return {
course_name: this.props.course.name
};
},
validate: function(name) {
var error;
error = CourseStore.validateCourseName(name, this.props.course.name);
this.setState({
invalid: error != null
});
return error;
},
performUpdate: function() {
if (!this.state.invalid) {
CourseActions.save(this.props.courseId, {
course: {
name: this.state.course_name
}
});
return CourseStore.once('saved', function() {
return this.refs.overlay.hide();
});
}
},
renderForm: function() {
var disabled, formClasses, ref1, ref2;
formClasses = classnames('modal-body', 'teacher-edit-course-form', {
'is-invalid-form': (ref1 = this.state) != null ? ref1.invalid : void 0
});
Iif ((ref2 = this.state) != null ? ref2.invalid : void 0) {
disabled = true;
}
return React.createElement(BS.Modal, React.__spread({}, this.props, {
"title": 'Rename Course',
"className": 'teacher-edit-course-modal'
}), React.createElement("div", {
"className": formClasses
}, React.createElement(RenameCourseField, {
"label": 'Course Name',
"name": 'course-name',
"default": this.props.course.name,
"onChange": ((function(_this) {
return function(val) {
return _this.setState({
course_name: val
});
};
})(this)),
"validate": this.validate,
"autofocus": true
})), React.createElement("div", {
"className": 'modal-footer'
}, React.createElement(AsyncButton, {
"className": '-edit-course-confirm',
"onClick": this.performUpdate,
"isWaiting": CourseStore.isSaving(this.props.courseId),
"waitingText": "Saving...",
"disabled": disabled
}, "Rename")));
},
render: function() {
return React.createElement(BS.OverlayTrigger, {
"rootClose": true,
"trigger": 'click',
"ref": 'overlay',
"overlay": this.renderForm()
}, React.createElement(BS.Button, {
"bsStyle": 'link',
"className": 'edit-course'
}, React.createElement("i", {
"className": 'fa fa-pencil'
}), " Rename Course"));
}
});
module.exports = RenameCourse;
|