UNPKG

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