| 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 | 2×
2×
2×
2×
2×
2×
| var BS, CloseButton, React, TutorDialog;
React = require('react');
BS = require('react-bootstrap');
TutorDialog = require('./tutor-dialog');
CloseButton = require('openstax-react-components').CloseButton;
/*
<Dialog
className='my-dialog-class'
header='Dialog Title'
confirmMsg='Are you sure you want to close?'
isChanged={-> true}
onCancel={-> alert 'Cancelling'}
>
body text
</Dialog>
*/
module.exports = React.createClass({
displayName: 'Dialog',
propTypes: {
header: React.PropTypes.node.isRequired,
onCancel: React.PropTypes.func.isRequired,
isChanged: React.PropTypes.func,
confirmMsg: React.PropTypes.string,
footer: React.PropTypes.node,
cancel: React.PropTypes.any,
primary: React.PropTypes.node,
onPrimary: React.PropTypes.func
},
onCancel: function() {
var confirmMsg, isChanged, onCancel, ref;
ref = this.props, isChanged = ref.isChanged, confirmMsg = ref.confirmMsg, onCancel = ref.onCancel;
if ((typeof isChanged === "function" ? isChanged() : void 0) && confirmMsg) {
return TutorDialog.show({
title: 'Unsaved Changes',
body: confirmMsg
}).then(function() {
return onCancel();
});
} else {
return onCancel();
}
},
render: function() {
var cancel, cancelBtn, className, classes, closeBtn, footer, header, isChanged, primary, ref;
ref = this.props, className = ref.className, header = ref.header, footer = ref.footer, primary = ref.primary, cancel = ref.cancel, isChanged = ref.isChanged;
if (cancel) {
cancelBtn = React.createElement(BS.Button, {
"aria-role": 'close',
"onClick": this.onCancel
}, cancel);
}
closeBtn = React.createElement(CloseButton, {
"onClick": this.onCancel
});
header = [header, closeBtn];
if (footer || primary || cancelBtn) {
footer = [primary, cancelBtn, footer];
}
classes = ['dialog default-dialog'];
if (typeof isChanged === "function" ? isChanged() : void 0) {
classes.push('is-changed');
}
if (className) {
classes.push(className);
}
className = classes.join(' ');
return React.createElement(BS.Panel, {
"className": className,
"header": header,
"footer": footer
}, this.props.children);
}
});
|