1 | /**
|
2 | * Dialog component.
|
3 | * @constructor ApDialog
|
4 | */
|
5 |
|
6 | ;
|
7 |
|
8 | var _react = require('react');
|
9 |
|
10 | var _react2 = _interopRequireDefault(_react);
|
11 |
|
12 | var _classnames = require('classnames');
|
13 |
|
14 | var _classnames2 = _interopRequireDefault(_classnames);
|
15 |
|
16 | var _apemanReactTouchable = require('apeman-react-touchable');
|
17 |
|
18 | var _apemanReactIcon = require('apeman-react-icon');
|
19 |
|
20 | var _apemanReactSpinner = require('apeman-react-spinner');
|
21 |
|
22 | var _ap_dialog_header = require('./ap_dialog_header');
|
23 |
|
24 | var _ap_dialog_header2 = _interopRequireDefault(_ap_dialog_header);
|
25 |
|
26 | var _ap_dialog_body = require('./ap_dialog_body');
|
27 |
|
28 | var _ap_dialog_body2 = _interopRequireDefault(_ap_dialog_body);
|
29 |
|
30 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
31 |
|
32 | var DEFAULT_CLOSE_ICON = 'fa fa-close';
|
33 |
|
34 | /** @lends ApDialog */
|
35 | var ApDialog = _react2.default.createClass({
|
36 | displayName: 'ApDialog',
|
37 |
|
38 | // --------------------
|
39 | // Specs
|
40 | // --------------------
|
41 |
|
42 | propTypes: {
|
43 | present: _react.PropTypes.bool.isRequired,
|
44 | onClose: _react.PropTypes.func,
|
45 | spinning: _react.PropTypes.bool,
|
46 | spinner: _react.PropTypes.string,
|
47 | title: _react.PropTypes.string,
|
48 | closeIcon: _react.PropTypes.string
|
49 | },
|
50 |
|
51 | mixins: [],
|
52 |
|
53 | statics: {
|
54 | DEFAULT_CLOSE_ICON: DEFAULT_CLOSE_ICON
|
55 | },
|
56 |
|
57 | getInitialState: function getInitialState() {
|
58 | return {};
|
59 | },
|
60 | getDefaultProps: function getDefaultProps() {
|
61 | return {
|
62 | present: false,
|
63 | onClose: null,
|
64 | spinning: false,
|
65 | spinner: _apemanReactSpinner.ApSpinner.DEFAULT_THEME,
|
66 | title: null,
|
67 | closeIcon: DEFAULT_CLOSE_ICON
|
68 | };
|
69 | },
|
70 | render: function render() {
|
71 | var s = this;
|
72 | var props = s.props;
|
73 |
|
74 | if (!props.present) {
|
75 | return null;
|
76 | }
|
77 | return _react2.default.createElement(
|
78 | 'div',
|
79 | { className: (0, _classnames2.default)('ap-dialog', props.className, {
|
80 | 'ap-dialog-present': props.present
|
81 | }),
|
82 | style: Object.assign({}, props.style) },
|
83 | _react2.default.createElement(_apemanReactSpinner.ApSpinner, { theme: props.spinner,
|
84 | className: 'ap-dialog-spinner',
|
85 | enabled: props.spinning }),
|
86 | _react2.default.createElement(
|
87 | 'div',
|
88 | { className: 'ap-dialog-inner' },
|
89 | s._renderBack(),
|
90 | _react2.default.createElement(
|
91 | 'div',
|
92 | { className: 'ap-dialog-content' },
|
93 | _react2.default.createElement(
|
94 | _ap_dialog_header2.default,
|
95 | null,
|
96 | s._renderTitle(),
|
97 | s._renderCloseButton()
|
98 | ),
|
99 | _react2.default.createElement(
|
100 | _ap_dialog_body2.default,
|
101 | null,
|
102 | props.children
|
103 | )
|
104 | )
|
105 | )
|
106 | );
|
107 | },
|
108 |
|
109 | // --------------------
|
110 | // Lifecycle
|
111 | // --------------------
|
112 |
|
113 | componentWillMount: function componentWillMount() {
|
114 | var s = this;
|
115 | },
|
116 | componentDidMount: function componentDidMount() {
|
117 | var s = this;
|
118 | var props = s.props;
|
119 |
|
120 | s.toggleDocumentScroll(props.present);
|
121 | },
|
122 | componentWillReceiveProps: function componentWillReceiveProps(nextProps) {
|
123 | var s = this;
|
124 |
|
125 | s.toggleDocumentScroll(nextProps.present);
|
126 | },
|
127 | shouldComponentUpdate: function shouldComponentUpdate(nextProps, nextState) {
|
128 | var s = this;
|
129 | return true;
|
130 | },
|
131 | componentWillUpdate: function componentWillUpdate(nextProps, nextState) {
|
132 | var s = this;
|
133 | },
|
134 | componentDidUpdate: function componentDidUpdate(prevProps, prevState) {
|
135 | var s = this;
|
136 | },
|
137 | componentWillUnmount: function componentWillUnmount() {
|
138 | var s = this;
|
139 | s.toggleDocumentScroll(false);
|
140 | },
|
141 |
|
142 | // ------------------
|
143 | // Helper
|
144 | // ------------------
|
145 |
|
146 | handleClose: function handleClose(e) {
|
147 | var s = this;
|
148 | var props = s.props;
|
149 |
|
150 | if (props.onClose) {
|
151 | props.onClose(e);
|
152 | }
|
153 | },
|
154 | toggleDocumentScroll: function toggleDocumentScroll(enabled) {
|
155 | var s = false;
|
156 |
|
157 | var body = document.body;
|
158 | if (enabled) {
|
159 | body.classList.add('ap-dialog-fix');
|
160 | } else {
|
161 | body.classList.remove('ap-dialog-fix');
|
162 | }
|
163 | },
|
164 |
|
165 | // ------------------
|
166 | // Private
|
167 | // ------------------
|
168 |
|
169 | _renderBack: function _renderBack() {
|
170 | var s = this;
|
171 | var props = s.props;
|
172 |
|
173 | return _react2.default.createElement(
|
174 | 'div',
|
175 | { className: 'ap-dialog-back' },
|
176 | _react2.default.createElement(
|
177 | _apemanReactTouchable.ApTouchable,
|
178 | { onTap: s.handleClose },
|
179 | _react2.default.createElement('div', { className: 'ap-dialog-back-inner' })
|
180 | )
|
181 | );
|
182 | },
|
183 | _renderCloseButton: function _renderCloseButton() {
|
184 | var s = this;
|
185 | var props = s.props;
|
186 |
|
187 | return _react2.default.createElement(
|
188 | 'a',
|
189 | { className: 'ap-dialog-close-button' },
|
190 | _react2.default.createElement(
|
191 | _apemanReactTouchable.ApTouchable,
|
192 | { onTap: s.handleClose },
|
193 | _react2.default.createElement(
|
194 | 'span',
|
195 | null,
|
196 | _react2.default.createElement(_apemanReactIcon.ApIcon, { className: (0, _classnames2.default)('ap-dialog-close-button-icon', props.closeIcon) })
|
197 | )
|
198 | )
|
199 | );
|
200 | },
|
201 | _renderTitle: function _renderTitle() {
|
202 | var s = this;
|
203 | var props = s.props;
|
204 |
|
205 | return _react2.default.createElement(
|
206 | 'h3',
|
207 | { className: 'ap-dialog-title' },
|
208 | props.title
|
209 | );
|
210 | }
|
211 | });
|
212 |
|
213 | module.exports = ApDialog;
|
214 | //# sourceMappingURL=data:application/json;base64,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QUFKLENBRHNCOztBQUcxQixZQUFJLE9BQU8sU0FBUyxJQUFULENBSGU7QUFJMUIsWUFBSSxPQUFKLEVBQWE7QUFDVCxpQkFBSyxTQUFMLENBQWUsR0FBZixDQUFtQixlQUFuQixFQURTO1NBQWIsTUFFTztBQUNILGlCQUFLLFNBQUwsQ0FBZSxNQUFmLENBQXNCLGVBQXRCLEVBREc7U0FGUDtLQTFIeUI7Ozs7OztBQXNJN0Isd0NBQWM7QUFDSixnQkFBSSxJQUFKLENBREk7WUFFTCxRQUFTLEVBQVQsTUFGSzs7QUFHVixlQUNJOztjQUFLLFdBQVUsZ0JBQVYsRUFBTDtZQUNJOztrQkFBYSxPQUFRLEVBQUUsV0FBRixFQUFyQjtnQkFDSSx1Q0FBSyxXQUFVLHNCQUFWLEVBQUwsQ0FESjthQURKO1NBREosQ0FIVTtLQXRJZTtBQWtKN0Isc0RBQXFCO0FBQ1gsZ0JBQUksSUFBSixDQURXO1lBRVosUUFBUyxFQUFULE1BRlk7O0FBR2pCLGVBQ0k7O2NBQUcsV0FBVSx3QkFBVixFQUFIO1lBQ0k7O2tCQUFhLE9BQVEsRUFBRSxXQUFGLEVBQXJCO2dCQUNBOzs7b0JBQ0kseURBQVEsV0FBWSwwQkFBVyw2QkFBWCxFQUEwQyxNQUFNLFNBQU4sQ0FBdEQsRUFBUixDQURKO2lCQURBO2FBREo7U0FESixDQUhpQjtLQWxKUTtBQWdLN0IsMENBQWU7QUFDTCxnQkFBSSxJQUFKLENBREs7WUFFTixRQUFTLEVBQVQsTUFGTTs7QUFHWCxlQUNJOztjQUFJLFdBQVUsaUJBQVYsRUFBSjtZQUFrQyxNQUFNLEtBQU47U0FEdEMsQ0FIVztLQWhLYztDQUFsQixDQUFYOztBQXlLSixPQUFPLE9BQVAsR0FBaUIsUUFBakIiLCJmaWxlIjoiYXBfZGlhbG9nLmpzIiwic291cmNlUm9vdCI6Ii9Vc2Vycy9va3VuaXNoaW5pc2hpL1Byb2plY3RzL2FwZW1hbi1wcm9qZWN0cy9hcGVtYW4tcmVhY3QtZGlhbG9nL2xpYiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRGlhbG9nIGNvbXBvbmVudC5cbiAqIEBjb25zdHJ1Y3RvciBBcERpYWxvZ1xuICovXG5cbid1c2Ugc3RyaWN0J1xuXG5cbmltcG9ydCBSZWFjdCwge1Byb3BUeXBlcyBhcyB0eXBlc30gZnJvbSAncmVhY3QnXG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuXG5pbXBvcnQge0FwVG91Y2hhYmxlfSBmcm9tICdhcGVtYW4tcmVhY3QtdG91Y2hhYmxlJ1xuaW1wb3J0IHtBcEljb259IGZyb20gJ2FwZW1hbi1yZWFjdC1pY29uJ1xuaW1wb3J0IHtBcFNwaW5uZXJ9IGZyb20gJ2FwZW1hbi1yZWFjdC1zcGlubmVyJ1xuaW1wb3J0IEFwRGlhbG9nSGVhZGVyIGZyb20gJy4vYXBfZGlhbG9nX2hlYWRlcidcbmltcG9ydCBBcERpYWxvZ0JvZHkgZnJvbSAnLi9hcF9kaWFsb2dfYm9keSdcblxuXG5jb25zdCBERUZBVUxUX0NMT1NFX0lDT04gPSAnZmEgZmEtY2xvc2UnXG5cbi8qKiBAbGVuZHMgQXBEaWFsb2cgKi9cbmxldCBBcERpYWxvZyA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gU3BlY3NcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgcHJvcFR5cGVzOiB7XG4gICAgICAgIHByZXNlbnQ6IHR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICAgICAgb25DbG9zZTogdHlwZXMuZnVuYyxcbiAgICAgICAgc3Bpbm5pbmc6IHR5cGVzLmJvb2wsXG4gICAgICAgIHNwaW5uZXI6IHR5cGVzLnN0cmluZyxcbiAgICAgICAgdGl0bGU6IHR5cGVzLnN0cmluZyxcbiAgICAgICAgY2xvc2VJY29uOiB0eXBlcy5zdHJpbmdcbiAgICB9LFxuXG4gICAgbWl4aW5zOiBbXSxcblxuICAgIHN0YXRpY3M6IHtcbiAgICAgICAgREVGQVVMVF9DTE9TRV9JQ09OXG4gICAgfSxcblxuICAgIGdldEluaXRpYWxTdGF0ZSAoKSB7XG4gICAgICAgIHJldHVybiB7fVxuICAgIH0sXG5cbiAgICBnZXREZWZhdWx0UHJvcHMgKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJlc2VudDogZmFsc2UsXG4gICAgICAgICAgICBvbkNsb3NlOiBudWxsLFxuICAgICAgICAgICAgc3Bpbm5pbmc6IGZhbHNlLFxuICAgICAgICAgICAgc3Bpbm5lcjogQXBTcGlubmVyLkRFRkFVTFRfVEhFTUUsXG4gICAgICAgICAgICB0aXRsZTogbnVsbCxcbiAgICAgICAgICAgIGNsb3NlSWNvbjogREVGQVVMVF9DTE9TRV9JQ09OXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVuZGVyICgpIHtcbiAgICAgICAgY29uc3QgcyA9IHRoaXMsXG4gICAgICAgICAgICB7cHJvcHN9ID0gcztcbiAgICAgICAgaWYgKCFwcm9wcy5wcmVzZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9eyBjbGFzc25hbWVzKCdhcC1kaWFsb2cnLCBwcm9wcy5jbGFzc05hbWUsIHtcbiAgICAgICAgICAgICAgICAnYXAtZGlhbG9nLXByZXNlbnQnOnByb3BzLnByZXNlbnRcbiAgICAgICAgICAgIH0pIH1cbiAgICAgICAgICAgICAgICAgc3R5bGU9eyBPYmplY3QuYXNzaWduKHt9LCBwcm9wcy5zdHlsZSkgfT5cbiAgICAgICAgICAgICAgICA8QXBTcGlubmVyIHRoZW1lPXsgcHJvcHMuc3Bpbm5lciB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJhcC1kaWFsb2ctc3Bpbm5lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkPXsgcHJvcHMuc3Bpbm5pbmcgfS8+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhcC1kaWFsb2ctaW5uZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgeyBzLl9yZW5kZXJCYWNrKCkgfVxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFwLWRpYWxvZy1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8QXBEaWFsb2dIZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBzLl9yZW5kZXJUaXRsZSgpIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHMuX3JlbmRlckNsb3NlQnV0dG9uKCkgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9BcERpYWxvZ0hlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxBcERpYWxvZ0JvZHk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwcm9wcy5jaGlsZHJlbiB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0FwRGlhbG9nQm9keT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKVxuICAgIH0sXG5cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gTGlmZWN5Y2xlXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIGNvbXBvbmVudFdpbGxNb3VudCgpIHtcbiAgICAgICAgY29uc3QgcyA9IHRoaXNcblxuICAgIH0sXG5cbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgICAgY29uc3QgcyA9IHRoaXMsXG4gICAgICAgICAgICB7cHJvcHN9ID0gcztcbiAgICAgICAgcy50b2dnbGVEb2N1bWVudFNjcm9sbChwcm9wcy5wcmVzZW50KVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xuICAgICAgICBjb25zdCBzID0gdGhpc1xuXG4gICAgICAgIHMudG9nZ2xlRG9jdW1lbnRTY3JvbGwobmV4dFByb3BzLnByZXNlbnQpXG4gICAgfSxcblxuICAgIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkge1xuICAgICAgICBjb25zdCBzID0gdGhpc1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRXaWxsVXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSB7XG4gICAgICAgIGNvbnN0IHMgPSB0aGlzXG4gICAgfSxcblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgICBjb25zdCBzID0gdGhpc1xuICAgIH0sXG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgICAgY29uc3QgcyA9IHRoaXNcbiAgICAgICAgcy50b2dnbGVEb2N1bWVudFNjcm9sbChmYWxzZSlcbiAgICB9LFxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gSGVscGVyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBoYW5kbGVDbG9zZShlKSB7XG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLFxuICAgICAgICAgICAge3Byb3BzfSA9IHM7XG4gICAgICAgIGlmIChwcm9wcy5vbkNsb3NlKSB7XG4gICAgICAgICAgICBwcm9wcy5vbkNsb3NlKGUpXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgdG9nZ2xlRG9jdW1lbnRTY3JvbGwoZW5hYmxlZCkge1xuICAgICAgICBsZXQgcyA9IGZhbHNlXG5cbiAgICAgICAgbGV0IGJvZHkgPSBkb2N1bWVudC5ib2R5O1xuICAgICAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgICAgICAgYm9keS5jbGFzc0xpc3QuYWRkKCdhcC1kaWFsb2ctZml4JylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnYXAtZGlhbG9nLWZpeCcpXG4gICAgICAgIH1cblxuICAgIH0sXG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBQcml2YXRlXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBfcmVuZGVyQmFjaygpIHtcbiAgICAgICAgY29uc3QgcyA9IHRoaXMsXG4gICAgICAgICAgICB7cHJvcHN9ID0gcztcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYXAtZGlhbG9nLWJhY2tcIj5cbiAgICAgICAgICAgICAgICA8QXBUb3VjaGFibGUgb25UYXA9eyBzLmhhbmRsZUNsb3NlIH0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYXAtZGlhbG9nLWJhY2staW5uZXJcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L0FwVG91Y2hhYmxlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIClcbiAgICB9LFxuXG4gICAgX3JlbmRlckNsb3NlQnV0dG9uKCkge1xuICAgICAgICBjb25zdCBzID0gdGhpcyxcbiAgICAgICAgICAgIHtwcm9wc30gPSBzO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGEgY2xhc3NOYW1lPVwiYXAtZGlhbG9nLWNsb3NlLWJ1dHRvblwiPlxuICAgICAgICAgICAgICAgIDxBcFRvdWNoYWJsZSBvblRhcD17IHMuaGFuZGxlQ2xvc2UgfT5cbiAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPEFwSWNvbiBjbGFzc05hbWU9eyBjbGFzc25hbWVzKCdhcC1kaWFsb2ctY2xvc2UtYnV0dG9uLWljb24nLCBwcm9wcy5jbG9zZUljb24pIH0vPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L0FwVG91Y2hhYmxlPlxuICAgICAgICAgICAgPC9hPlxuICAgICAgICApXG4gICAgfSxcblxuICAgIF9yZW5kZXJUaXRsZSgpIHtcbiAgICAgICAgY29uc3QgcyA9IHRoaXMsXG4gICAgICAgICAgICB7cHJvcHN9ID0gcztcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9XCJhcC1kaWFsb2ctdGl0bGVcIj57IHByb3BzLnRpdGxlIH08L2gzPlxuICAgICAgICApXG4gICAgfVxufSlcblxubW9kdWxlLmV4cG9ydHMgPSBBcERpYWxvZzsiXX0= |
\ | No newline at end of file |