UNPKG

15.3 kBJavaScriptView Raw
1/**
2 * Dialog to confirm.
3 * @constructor ApConfirmDialog
4 */
5
6'use strict';
7
8var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
9
10var _react = require('react');
11
12var _react2 = _interopRequireDefault(_react);
13
14var _classnames = require('classnames');
15
16var _classnames2 = _interopRequireDefault(_classnames);
17
18var _apemanReactTouchable = require('apeman-react-touchable');
19
20var _apemanReactCheckbox = require('apeman-react-checkbox');
21
22var _apemanReactButton = require('apeman-react-button');
23
24var _apemanReactMixins = require('apeman-react-mixins');
25
26var _ap_dialog = require('./ap_dialog');
27
28var _ap_dialog2 = _interopRequireDefault(_ap_dialog);
29
30var _uuid = require('uuid');
31
32var _uuid2 = _interopRequireDefault(_uuid);
33
34function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
35
36/** lends ApConfirmDialog */
37var ApConfirmDialog = _react2.default.createClass({
38 displayName: 'ApConfirmDialog',
39
40 // --------------------
41 // Specs
42 // --------------------
43
44 propTypes: {
45 present: _react.PropTypes.bool.isRequired,
46 /** Handler for submit event */
47 onSubmit: _react.PropTypes.func,
48 /** Handler for cancel event */
49 onCancel: _react.PropTypes.func,
50 /** Dialog title */
51 title: _react.PropTypes.string,
52 /** Dialog message */
53 message: _react.PropTypes.string,
54 /** Id of checkbox */
55 checkboxId: _react.PropTypes.string,
56 /** Name of checkbox */
57 checkboxName: _react.PropTypes.string,
58 /** Label text of checkbox */
59 checkboxText: _react.PropTypes.string,
60 /** Errot text when not checked */
61 errorText: _react.PropTypes.string,
62 /** Submit button text */
63 submitText: _react.PropTypes.string
64 },
65
66 mixins: [_apemanReactMixins.ApPureMixin],
67
68 statics: {},
69
70 getInitialState: function getInitialState() {
71 return {
72 checked: false,
73 errored: false
74 };
75 },
76 getDefaultProps: function getDefaultProps() {
77 var id = _uuid2.default.v4().replace(/\-/g, '');
78 return {
79 onSubmit: null,
80 onCancel: null,
81 checkboxId: 'ap-confirm-dialog-checkbox-' + id,
82 checkboxName: 'ap-confirm-check-' + id,
83 checkboxText: null,
84 submitText: 'submit',
85 errorText: 'Needs check before submit.',
86 message: 'Once destroyed, there is no going back. Please be certain.'
87 };
88 },
89 render: function render() {
90 var s = this;
91 var state = s.state;
92 var props = s.props;
93
94 if (!props.present) {
95 return null;
96 }
97 return _react2.default.createElement(
98 _ap_dialog2.default,
99 _extends({ className: (0, _classnames2.default)('ap-confirm-dialog', props.className),
100 style: Object.assign({}, props.style),
101 onClose: s.handleCancel
102 }, props),
103 _react2.default.createElement(
104 'p',
105 { className: 'ap-confirm-dialog-message' },
106 props.message
107 ),
108 _react2.default.createElement(
109 'div',
110 null,
111 props.children
112 ),
113 _react2.default.createElement(
114 'div',
115 { className: 'ap-confirm-dialog-control' },
116 s._renderError(state.errored),
117 s._renderCheckbox(state.checked),
118 s._renderSubmitButton(state.checked)
119 )
120 );
121 },
122 toggleCheckbox: function toggleCheckbox() {
123 var s = this;
124 var state = s.state;
125 s.setState({
126 checked: !state.checked,
127 errored: false
128 });
129 },
130 handleSubmit: function handleSubmit(e) {
131 var s = this;
132 var state = s.state;
133 var props = s.props;
134
135 if (!state.checked) {
136 s.setState({
137 errored: true
138 });
139 return;
140 }
141 s.setState({
142 errored: false
143 });
144 if (props.onSubmit) {
145 props.onSubmit(e);
146 }
147 },
148 handleCancel: function handleCancel(e) {
149 var s = this;
150 var props = s.props;
151
152 s.setState({ errored: false });
153 if (props.onCancel) {
154 props.onCancel(e);
155 }
156 },
157
158 // ------------------
159 // Private
160 // ------------------
161 _renderError: function _renderError(errored) {
162 var s = this;
163 var props = s.props;
164
165 if (!errored) {
166 return null;
167 }
168 return _react2.default.createElement(
169 'div',
170 { className: 'ap-confirm-dialog-err' },
171 _react2.default.createElement(
172 'span',
173 null,
174 props.errorText
175 )
176 );
177 },
178 _renderCheckbox: function _renderCheckbox(checked) {
179 var s = this;
180 var props = s.props;
181
182 return _react2.default.createElement(
183 'div',
184 null,
185 _react2.default.createElement(_apemanReactCheckbox.ApCheckbox, { className: 'ap-confirm-dialog-checkbox',
186 checked: checked,
187 name: props.checkboxName,
188 id: props.checkboxId,
189 title: props.checkboxText,
190 onChange: s.toggleCheckbox,
191 value: 'YES'
192
193 })
194 );
195 },
196 _renderSubmitButton: function _renderSubmitButton(checked) {
197 var s = this;
198 var props = s.props;
199
200 return _react2.default.createElement(
201 _apemanReactButton.ApButton,
202 { onTap: s.handleSubmit,
203 disabled: false,
204 primary: true,
205 className: (0, _classnames2.default)('ap-confirm-dialog-button', {
206 'ap-confirm-dialog-button-disabled': !checked
207 }) },
208 _react2.default.createElement(
209 'span',
210 { className: 'ap-confirm-dialog-button-text' },
211 props.submitText
212 )
213 );
214 }
215});
216
217module.exports = ApConfirmDialog;
218//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwX2NvbmZpcm1fZGlhbG9nLmpzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUtBOzs7O0FBRUE7Ozs7QUFDQTs7OztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBQ0E7Ozs7Ozs7QUFHQSxJQUFNLGtCQUFrQixnQkFBTSxXQUFOLENBQWtCOzs7Ozs7O0FBTXhDLGFBQVc7QUFDVCxhQUFTLGlCQUFNLElBQU4sQ0FBVyxVQUFYOztBQUVULGNBQVUsaUJBQU0sSUFBTjs7QUFFVixjQUFVLGlCQUFNLElBQU47O0FBRVYsV0FBTyxpQkFBTSxNQUFOOztBQUVQLGFBQVMsaUJBQU0sTUFBTjs7QUFFVCxnQkFBWSxpQkFBTSxNQUFOOztBQUVaLGtCQUFjLGlCQUFNLE1BQU47O0FBRWQsa0JBQWMsaUJBQU0sTUFBTjs7QUFFZCxlQUFXLGlCQUFNLE1BQU47O0FBRVgsZ0JBQVksaUJBQU0sTUFBTjtHQW5CZDs7QUFzQkEsVUFBUSxnQ0FBUjs7QUFJQSxXQUFTLEVBQVQ7O0FBRUEsOENBQW1CO0FBQ2pCLFdBQU87QUFDTCxlQUFTLEtBQVQ7QUFDQSxlQUFTLEtBQVQ7S0FGRixDQURpQjtHQWxDcUI7QUF5Q3hDLDhDQUFtQjtBQUNqQixRQUFJLEtBQUssZUFBSyxFQUFMLEdBQVUsT0FBVixDQUFrQixLQUFsQixFQUF5QixFQUF6QixDQUFMLENBRGE7QUFFakIsV0FBTztBQUNMLGdCQUFVLElBQVY7QUFDQSxnQkFBVSxJQUFWO0FBQ0Esa0RBQTBDLEVBQTFDO0FBQ0EsMENBQWtDLEVBQWxDO0FBQ0Esb0JBQWMsSUFBZDtBQUNBLGtCQUFZLFFBQVo7QUFDQSxpQkFBVyw0QkFBWDtBQUNBLGVBQVMsNERBQVQ7S0FSRixDQUZpQjtHQXpDcUI7QUF1RHhDLDRCQUFVO0FBQ1IsUUFBTSxJQUFJLElBQUosQ0FERTtRQUVGLFFBQWlCLEVBQWpCLE1BRkU7UUFFSyxRQUFVLEVBQVYsTUFGTDs7QUFHUixRQUFJLENBQUMsTUFBTSxPQUFOLEVBQWU7QUFD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dXJjZVJvb3QiOiIvVXNlcnMvb2t1bmlzaGluaXNoaS9Qcm9qZWN0cy9hcGVtYW4tcHJvamVjdHMvYXBlbWFuLXJlYWN0LWRpYWxvZy9saWIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERpYWxvZyB0byBjb25maXJtLlxuICogQGNvbnN0cnVjdG9yIEFwQ29uZmlybURpYWxvZ1xuICovXG5cbid1c2Ugc3RyaWN0J1xuXG5pbXBvcnQgUmVhY3QsIHtQcm9wVHlwZXMgYXMgdHlwZXN9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcblxuaW1wb3J0IHtBcFRvdWNoYWJsZX0gZnJvbSAnYXBlbWFuLXJlYWN0LXRvdWNoYWJsZSdcbmltcG9ydCB7QXBDaGVja2JveH0gZnJvbSAnYXBlbWFuLXJlYWN0LWNoZWNrYm94J1xuaW1wb3J0IHtBcEJ1dHRvbn0gZnJvbSAnYXBlbWFuLXJlYWN0LWJ1dHRvbidcbmltcG9ydCB7QXBQdXJlTWl4aW59IGZyb20gJ2FwZW1hbi1yZWFjdC1taXhpbnMnXG5pbXBvcnQgQXBEaWFsb2cgZnJvbSAnLi9hcF9kaWFsb2cnXG5pbXBvcnQgdXVpZCBmcm9tICd1dWlkJ1xuXG4vKiogbGVuZHMgQXBDb25maXJtRGlhbG9nICovXG5jb25zdCBBcENvbmZpcm1EaWFsb2cgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gU3BlY3NcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwcm9wVHlwZXM6IHtcbiAgICBwcmVzZW50OiB0eXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgLyoqIEhhbmRsZXIgZm9yIHN1Ym1pdCBldmVudCAqL1xuICAgIG9uU3VibWl0OiB0eXBlcy5mdW5jLFxuICAgIC8qKiBIYW5kbGVyIGZvciBjYW5jZWwgZXZlbnQgKi9cbiAgICBvbkNhbmNlbDogdHlwZXMuZnVuYyxcbiAgICAvKiogRGlhbG9nIHRpdGxlICovXG4gICAgdGl0bGU6IHR5cGVzLnN0cmluZyxcbiAgICAvKiogRGlhbG9nIG1lc3NhZ2UgKi9cbiAgICBtZXNzYWdlOiB0eXBlcy5zdHJpbmcsXG4gICAgLyoqIElkIG9mIGNoZWNrYm94ICovXG4gICAgY2hlY2tib3hJZDogdHlwZXMuc3RyaW5nLFxuICAgIC8qKiBOYW1lIG9mIGNoZWNrYm94ICovXG4gICAgY2hlY2tib3hOYW1lOiB0eXBlcy5zdHJpbmcsXG4gICAgLyoqIExhYmVsIHRleHQgb2YgY2hlY2tib3ggKi9cbiAgICBjaGVja2JveFRleHQ6IHR5cGVzLnN0cmluZyxcbiAgICAvKiogRXJyb3QgdGV4dCB3aGVuIG5vdCBjaGVja2VkICovXG4gICAgZXJyb3JUZXh0OiB0eXBlcy5zdHJpbmcsXG4gICAgLyoqIFN1Ym1pdCBidXR0b24gdGV4dCAqL1xuICAgIHN1Ym1pdFRleHQ6IHR5cGVzLnN0cmluZ1xuICB9LFxuXG4gIG1peGluczogW1xuICAgIEFwUHVyZU1peGluXG4gIF0sXG5cbiAgc3RhdGljczoge30sXG5cbiAgZ2V0SW5pdGlhbFN0YXRlICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2hlY2tlZDogZmFsc2UsXG4gICAgICBlcnJvcmVkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBnZXREZWZhdWx0UHJvcHMgKCkge1xuICAgIGxldCBpZCA9IHV1aWQudjQoKS5yZXBsYWNlKC9cXC0vZywgJycpXG4gICAgcmV0dXJuIHtcbiAgICAgIG9uU3VibWl0OiBudWxsLFxuICAgICAgb25DYW5jZWw6IG51bGwsXG4gICAgICBjaGVja2JveElkOiBgYXAtY29uZmlybS1kaWFsb2ctY2hlY2tib3gtJHtpZH1gLFxuICAgICAgY2hlY2tib3hOYW1lOiBgYXAtY29uZmlybS1jaGVjay0ke2lkfWAsXG4gICAgICBjaGVja2JveFRleHQ6IG51bGwsXG4gICAgICBzdWJtaXRUZXh0OiAnc3VibWl0JyxcbiAgICAgIGVycm9yVGV4dDogJ05lZWRzIGNoZWNrIGJlZm9yZSBzdWJtaXQuJyxcbiAgICAgIG1lc3NhZ2U6ICdPbmNlIGRlc3Ryb3llZCwgdGhlcmUgaXMgbm8gZ29pbmcgYmFjay4gUGxlYXNlIGJlIGNlcnRhaW4uJ1xuICAgIH1cbiAgfSxcblxuICByZW5kZXIgKCkge1xuICAgIGNvbnN0IHMgPSB0aGlzXG4gICAgbGV0IHsgc3RhdGUsIHByb3BzIH0gPSBzXG4gICAgaWYgKCFwcm9wcy5wcmVzZW50KSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPEFwRGlhbG9nIGNsYXNzTmFtZT17IGNsYXNzbmFtZXMoJ2FwLWNvbmZpcm0tZGlhbG9nJywgcHJvcHMuY2xhc3NOYW1lKSB9XG4gICAgICAgICAgICAgICAgc3R5bGU9eyBPYmplY3QuYXNzaWduKHt9LCBwcm9wcy5zdHlsZSkgfVxuICAgICAgICAgICAgICAgIG9uQ2xvc2U9eyBzLmhhbmRsZUNhbmNlbCB9XG4gICAgICAgIHsgLi4ucHJvcHMgfVxuICAgICAgPlxuICAgICAgICA8cCBjbGFzc05hbWU9XCJhcC1jb25maXJtLWRpYWxvZy1tZXNzYWdlXCI+XG4gICAgICAgICAgeyBwcm9wcy5tZXNzYWdlIH1cbiAgICAgICAgPC9wPlxuICAgICAgICA8ZGl2PnsgcHJvcHMuY2hpbGRyZW4gfTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFwLWNvbmZpcm0tZGlhbG9nLWNvbnRyb2xcIj5cbiAgICAgICAgICB7IHMuX3JlbmRlckVycm9yKHN0YXRlLmVycm9yZWQpIH1cbiAgICAgICAgICB7IHMuX3JlbmRlckNoZWNrYm94KHN0YXRlLmNoZWNrZWQpIH1cbiAgICAgICAgICB7IHMuX3JlbmRlclN1Ym1pdEJ1dHRvbihzdGF0ZS5jaGVja2VkKSB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9BcERpYWxvZz5cbiAgICApXG4gIH0sXG5cbiAgdG9nZ2xlQ2hlY2tib3goKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBsZXQgc3RhdGUgPSBzLnN0YXRlXG4gICAgcy5zZXRTdGF0ZSh7XG4gICAgICBjaGVja2VkOiAhc3RhdGUuY2hlY2tlZCxcbiAgICAgIGVycm9yZWQ6IGZhbHNlXG4gICAgfSlcbiAgfSxcblxuICBoYW5kbGVTdWJtaXQoZSkge1xuICAgIGNvbnN0IHMgPSB0aGlzXG4gICAgbGV0IHsgc3RhdGUsIHByb3BzIH0gPSBzXG4gICAgaWYgKCFzdGF0ZS5jaGVja2VkKSB7XG4gICAgICBzLnNldFN0YXRlKHtcbiAgICAgICAgZXJyb3JlZDogdHJ1ZVxuICAgICAgfSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBzLnNldFN0YXRlKHtcbiAgICAgIGVycm9yZWQ6IGZhbHNlXG4gICAgfSlcbiAgICBpZiAocHJvcHMub25TdWJtaXQpIHtcbiAgICAgIHByb3BzLm9uU3VibWl0KGUpXG4gICAgfVxuICB9LFxuXG4gIGhhbmRsZUNhbmNlbChlKSB7XG4gICAgY29uc3QgcyA9IHRoaXMsXG4gICAgICB7IHByb3BzIH0gPSBzXG4gICAgcy5zZXRTdGF0ZSh7IGVycm9yZWQ6IGZhbHNlIH0pXG4gICAgaWYgKHByb3BzLm9uQ2FuY2VsKSB7XG4gICAgICBwcm9wcy5vbkNhbmNlbChlKVxuICAgIH1cbiAgfSxcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gUHJpdmF0ZVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS1cbiAgX3JlbmRlckVycm9yKGVycm9yZWQpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIGxldCB7IHByb3BzIH0gPSBzXG4gICAgaWYgKCFlcnJvcmVkKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJhcC1jb25maXJtLWRpYWxvZy1lcnJcIj5cbiAgICAgICAgPHNwYW4+eyBwcm9wcy5lcnJvclRleHQgfTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfSxcbiAgX3JlbmRlckNoZWNrYm94IChjaGVja2VkKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBsZXQgeyBwcm9wcyB9ID0gc1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2PlxuICAgICAgICA8QXBDaGVja2JveCBjbGFzc05hbWU9XCJhcC1jb25maXJtLWRpYWxvZy1jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9eyBjaGVja2VkIH1cbiAgICAgICAgICAgICAgICAgICAgbmFtZT17IHByb3BzLmNoZWNrYm94TmFtZSB9XG4gICAgICAgICAgICAgICAgICAgIGlkPXsgcHJvcHMuY2hlY2tib3hJZCB9XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPXsgcHJvcHMuY2hlY2tib3hUZXh0IH1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyBzLnRvZ2dsZUNoZWNrYm94IH1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJZRVNcIlxuXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH0sXG4gIF9yZW5kZXJTdWJtaXRCdXR0b24gKGNoZWNrZWQpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIGxldCB7IHByb3BzIH0gPSBzXG4gICAgcmV0dXJuIChcbiAgICAgIDxBcEJ1dHRvbiBvblRhcD17IHMuaGFuZGxlU3VibWl0IH1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17IGZhbHNlIH1cbiAgICAgICAgICAgICAgICBwcmltYXJ5PXsgdHJ1ZSB9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXsgY2xhc3NuYW1lcygnYXAtY29uZmlybS1kaWFsb2ctYnV0dG9uJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcC1jb25maXJtLWRpYWxvZy1idXR0b24tZGlzYWJsZWQnOiAhY2hlY2tlZFxuICAgICAgICAgICAgICAgICAgICAgIH0pIH0+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImFwLWNvbmZpcm0tZGlhbG9nLWJ1dHRvbi10ZXh0XCI+eyBwcm9wcy5zdWJtaXRUZXh0IH08L3NwYW4+XG4gICAgICA8L0FwQnV0dG9uPlxuICAgIClcbiAgfVxuXG59KVxuXG5tb2R1bGUuZXhwb3J0cyA9IEFwQ29uZmlybURpYWxvZ1xuIl19
\No newline at end of file