summit-registration-lite 2.0.5 → 2.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js ADDED
@@ -0,0 +1,2071 @@
1
+ (function webpackUniversalModuleDefinition(root, factory) {
2
+ if(typeof exports === 'object' && typeof module === 'object')
3
+ module.exports = factory();
4
+ else if(typeof define === 'function' && define.amd)
5
+ define("summit-registration-lite", [], factory);
6
+ else if(typeof exports === 'object')
7
+ exports["summit-registration-lite"] = factory();
8
+ else
9
+ root["summit-registration-lite"] = factory();
10
+ })(this, function() {
11
+ return /******/ (() => { // webpackBootstrap
12
+ /******/ "use strict";
13
+ /******/ // The require scope
14
+ /******/ var __webpack_require__ = {};
15
+ /******/
16
+ /************************************************************************/
17
+ /******/ /* webpack/runtime/compat get default export */
18
+ /******/ (() => {
19
+ /******/ // getDefaultExport function for compatibility with non-harmony modules
20
+ /******/ __webpack_require__.n = (module) => {
21
+ /******/ var getter = module && module.__esModule ?
22
+ /******/ () => (module['default']) :
23
+ /******/ () => (module);
24
+ /******/ __webpack_require__.d(getter, { a: getter });
25
+ /******/ return getter;
26
+ /******/ };
27
+ /******/ })();
28
+ /******/
29
+ /******/ /* webpack/runtime/define property getters */
30
+ /******/ (() => {
31
+ /******/ // define getter functions for harmony exports
32
+ /******/ __webpack_require__.d = (exports, definition) => {
33
+ /******/ for(var key in definition) {
34
+ /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
35
+ /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
36
+ /******/ }
37
+ /******/ }
38
+ /******/ };
39
+ /******/ })();
40
+ /******/
41
+ /******/ /* webpack/runtime/hasOwnProperty shorthand */
42
+ /******/ (() => {
43
+ /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
44
+ /******/ })();
45
+ /******/
46
+ /******/ /* webpack/runtime/make namespace object */
47
+ /******/ (() => {
48
+ /******/ // define __esModule on exports
49
+ /******/ __webpack_require__.r = (exports) => {
50
+ /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
51
+ /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
52
+ /******/ }
53
+ /******/ Object.defineProperty(exports, '__esModule', { value: true });
54
+ /******/ };
55
+ /******/ })();
56
+ /******/
57
+ /************************************************************************/
58
+ var __webpack_exports__ = {};
59
+ // ESM COMPAT FLAG
60
+ __webpack_require__.r(__webpack_exports__);
61
+
62
+ // EXPORTS
63
+ __webpack_require__.d(__webpack_exports__, {
64
+ "default": () => (/* binding */ summit_registration_lite)
65
+ });
66
+
67
+ ;// CONCATENATED MODULE: external "react"
68
+ const external_react_namespaceObject = require("react");
69
+ var external_react_default = /*#__PURE__*/__webpack_require__.n(external_react_namespaceObject);
70
+ ;// CONCATENATED MODULE: external "react-redux"
71
+ const external_react_redux_namespaceObject = require("react-redux");
72
+ ;// CONCATENATED MODULE: external "redux"
73
+ const external_redux_namespaceObject = require("redux");
74
+ ;// CONCATENATED MODULE: external "redux-thunk"
75
+ const external_redux_thunk_namespaceObject = require("redux-thunk");
76
+ var external_redux_thunk_default = /*#__PURE__*/__webpack_require__.n(external_redux_thunk_namespaceObject);
77
+ ;// CONCATENATED MODULE: external "redux-persist"
78
+ const external_redux_persist_namespaceObject = require("redux-persist");
79
+ ;// CONCATENATED MODULE: external "redux-persist/es/storage"
80
+ const storage_namespaceObject = require("redux-persist/es/storage");
81
+ var storage_default = /*#__PURE__*/__webpack_require__.n(storage_namespaceObject);
82
+ ;// CONCATENATED MODULE: external "openstack-uicore-foundation/lib/utils/actions"
83
+ const actions_namespaceObject = require("openstack-uicore-foundation/lib/utils/actions");
84
+ ;// CONCATENATED MODULE: external "sweetalert2"
85
+ const external_sweetalert2_namespaceObject = require("sweetalert2");
86
+ var external_sweetalert2_default = /*#__PURE__*/__webpack_require__.n(external_sweetalert2_namespaceObject);
87
+ ;// CONCATENATED MODULE: ./src/actions.js
88
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
89
+
90
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
91
+
92
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
93
+
94
+ /**
95
+ * Copyright 2020 OpenStack Foundation
96
+ * Licensed under the Apache License, Version 2.0 (the "License");
97
+ * you may not use this file except in compliance with the License.
98
+ * You may obtain a copy of the License at
99
+ * http://www.apache.org/licenses/LICENSE-2.0
100
+ * Unless required by applicable law or agreed to in writing, software
101
+ * distributed under the License is distributed on an "AS IS" BASIS,
102
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
103
+ * See the License for the specific language governing permissions and
104
+ * limitations under the License.
105
+ **/
106
+
107
+
108
+
109
+ const START_WIDGET_LOADING = 'START_WIDGET_LOADING';
110
+ const STOP_WIDGET_LOADING = 'STOP_WIDGET_LOADING';
111
+ const LOAD_INITIAL_VARS = 'LOAD_INITIAL_VARS';
112
+ const CHANGE_STEP = 'CHANGE_STEP';
113
+ const GET_TICKET_TYPES = 'GET_TICKET_TYPES';
114
+ const GET_TAX_TYPES = 'GET_TAX_TYPES';
115
+ const CREATE_RESERVATION = 'CREATE_RESERVATION';
116
+ const CREATE_RESERVATION_SUCCESS = 'CREATE_RESERVATION_SUCCESS';
117
+ const CREATE_RESERVATION_ERROR = 'CREATE_RESERVATION_ERROR';
118
+ const DELETE_RESERVATION = 'DELETE_RESERVATION';
119
+ const DELETE_RESERVATION_SUCCESS = 'DELETE_RESERVATION_SUCCESS';
120
+ const DELETE_RESERVATION_ERROR = 'DELETE_RESERVATION_ERROR';
121
+ const PAY_RESERVATION = 'PAY_RESERVATION';
122
+ const CLEAR_RESERVATION = 'CLEAR_RESERVATION';
123
+ const SET_PASSWORDLESS_LOGIN = 'SET_PASSWORDLESS_LOGIN';
124
+ const SET_PASSWORDLESS_LENGTH = 'SET_PASSWORDLESS_LENGTH';
125
+ const SET_PASSWORDLESS_ERROR = 'SET_PASSWORDLESS_ERROR';
126
+ const GO_TO_LOGIN = 'GO_TO_LOGIN';
127
+ const startWidgetLoading = (0,actions_namespaceObject.createAction)(START_WIDGET_LOADING);
128
+ const stopWidgetLoading = (0,actions_namespaceObject.createAction)(STOP_WIDGET_LOADING);
129
+ const loadSession = settings => dispatch => {
130
+ dispatch((0,actions_namespaceObject.createAction)(LOAD_INITIAL_VARS)(settings));
131
+ };
132
+ /*********************************************************************************/
133
+
134
+ /* TICKETS */
135
+
136
+ /*********************************************************************************/
137
+ // api/v1/summits/{id}/ticket-types
138
+ // api/v1/summits/{id}/tax-types
139
+
140
+ const getTicketTypes = summitId => async (dispatch, getState, {
141
+ apiBaseUrl,
142
+ getAccessToken
143
+ }) => {
144
+ try {
145
+ const accessToken = await getAccessToken();
146
+ let params = {
147
+ expand: 'badge_type,badge_type.access_levels,badge_type.badge_features',
148
+ access_token: accessToken
149
+ };
150
+ dispatch(startWidgetLoading());
151
+ return (0,actions_namespaceObject.getRequest)(null, (0,actions_namespaceObject.createAction)(GET_TICKET_TYPES), `${apiBaseUrl}/api/v1/summits/${summitId}/ticket-types`, actions_namespaceObject.authErrorHandler)(params)(dispatch).then(() => {
152
+ dispatch(stopWidgetLoading());
153
+ });
154
+ } catch (e) {
155
+ return Promise.reject();
156
+ }
157
+ };
158
+ const getTaxesTypes = summitId => async (dispatch, getState, {
159
+ apiBaseUrl,
160
+ getAccessToken
161
+ }) => {
162
+ try {
163
+ const accessToken = await getAccessToken();
164
+ let params = {
165
+ access_token: accessToken
166
+ };
167
+ dispatch(startWidgetLoading());
168
+ return (0,actions_namespaceObject.getRequest)(null, (0,actions_namespaceObject.createAction)(GET_TAX_TYPES), `${apiBaseUrl}/api/v1/summits/${summitId}/tax-types`, actions_namespaceObject.authErrorHandler)(params)(dispatch).then(() => {
169
+ dispatch(stopWidgetLoading());
170
+ });
171
+ } catch (e) {
172
+ return Promise.reject();
173
+ }
174
+ };
175
+ const reserveTicket = ({
176
+ personalInformation,
177
+ ticket,
178
+ ticketQuantity
179
+ }, {
180
+ onError
181
+ }) => async (dispatch, getState, {
182
+ apiBaseUrl,
183
+ getAccessToken
184
+ }) => {
185
+ const {
186
+ registrationLiteState: {
187
+ settings: {
188
+ summitId
189
+ }
190
+ }
191
+ } = getState();
192
+ let {
193
+ firstName,
194
+ lastName,
195
+ email,
196
+ company,
197
+ promoCode
198
+ } = personalInformation;
199
+ dispatch(startWidgetLoading());
200
+ const access_token = await getAccessToken();
201
+ const tickets = [...Array(ticketQuantity)].map(() => ({
202
+ type_id: ticket.id,
203
+ promo_code: promoCode || null
204
+ })); // Only set the attendee for the first ticket.
205
+
206
+ tickets[0].attendee_first_name = firstName;
207
+ tickets[0].attendee_last_name = lastName;
208
+ tickets[0].attendee_email = email;
209
+ let params = {
210
+ access_token,
211
+ expand: 'tickets,tickets.owner,tickets.ticket_type,tickets.ticket_type.taxes'
212
+ };
213
+ const normalizedEntity = normalizeReservation({
214
+ owner_email: email,
215
+ owner_first_name: firstName,
216
+ owner_last_name: lastName,
217
+ owner_company: company,
218
+ tickets
219
+ });
220
+
221
+ const errorHandler = (err, res) => (dispatch, state) => {
222
+ if (res && res.statusCode === 412 && onError) return onError(err, res);
223
+ return (0,actions_namespaceObject.authErrorHandler)(err, res);
224
+ };
225
+
226
+ return (0,actions_namespaceObject.postRequest)((0,actions_namespaceObject.createAction)(CREATE_RESERVATION), (0,actions_namespaceObject.createAction)(CREATE_RESERVATION_SUCCESS), `${apiBaseUrl}/api/v1/summits/${summitId}/orders/reserve`, normalizedEntity, errorHandler // entity
227
+ )(params)(dispatch).then(payload => {
228
+ dispatch(stopWidgetLoading());
229
+ payload.response.promo_code = promoCode || null;
230
+
231
+ if (!payload.response.payment_gateway_client_token) {
232
+ dispatch(payTicket(null, null, getAccessToken));
233
+ return payload;
234
+ } else {
235
+ dispatch(changeStep(2));
236
+ return payload;
237
+ }
238
+ }).catch(e => {
239
+ dispatch((0,actions_namespaceObject.createAction)(CREATE_RESERVATION_ERROR)(e));
240
+ dispatch(stopWidgetLoading());
241
+ return e;
242
+ });
243
+ };
244
+ const removeReservedTicket = () => async (dispatch, getState, {
245
+ apiBaseUrl,
246
+ getAccessToken
247
+ }) => {
248
+ let {
249
+ registrationLiteState: {
250
+ settings: {
251
+ summitId
252
+ },
253
+ reservation: {
254
+ hash
255
+ }
256
+ }
257
+ } = getState();
258
+ const access_token = await getAccessToken();
259
+ let params = {
260
+ access_token,
261
+ expand: 'tickets,tickets.owner'
262
+ };
263
+ dispatch(startWidgetLoading());
264
+ return (0,actions_namespaceObject.deleteRequest)((0,actions_namespaceObject.createAction)(DELETE_RESERVATION), (0,actions_namespaceObject.createAction)(DELETE_RESERVATION_SUCCESS), `${apiBaseUrl}/api/v1/summits/${summitId}/orders/${hash}`, {}, actions_namespaceObject.authErrorHandler // entity
265
+ )(params)(dispatch).then(payload => {
266
+ dispatch(stopWidgetLoading());
267
+ dispatch(changeStep(1));
268
+ return payload;
269
+ }).catch(e => {
270
+ dispatch((0,actions_namespaceObject.createAction)(DELETE_RESERVATION_ERROR)(e));
271
+ dispatch(changeStep(1));
272
+ dispatch(stopWidgetLoading());
273
+ return e;
274
+ });
275
+ };
276
+ const payTicket = (token = null, stripe = null, zipCode = null) => async (dispatch, getState, {
277
+ apiBaseUrl,
278
+ getAccessToken
279
+ }) => {
280
+ let {
281
+ registrationLiteState: {
282
+ settings: {
283
+ summitId,
284
+ userProfile
285
+ },
286
+ reservation
287
+ }
288
+ } = getState();
289
+ const access_token = await getAccessToken();
290
+ let params = {
291
+ access_token,
292
+ expand: 'tickets,' + 'tickets.owner,' + 'tickets.owner.extra_questions,' + 'tickets.badge,' + 'tickets.badge.type,' + 'tickets.badge.type.access_levels,' + 'tickets.badge.type.features,' + 'tickets.ticket_type,' + 'tickets.ticket_type.taxes'
293
+ };
294
+ let normalizedEntity = {
295
+ billing_address_1: (userProfile === null || userProfile === void 0 ? void 0 : userProfile.address1) || '',
296
+ billing_address_2: (userProfile === null || userProfile === void 0 ? void 0 : userProfile.address2) || '',
297
+ billing_address_zip_code: zipCode,
298
+ billing_address_city: (userProfile === null || userProfile === void 0 ? void 0 : userProfile.locality) || '',
299
+ billing_address_state: (userProfile === null || userProfile === void 0 ? void 0 : userProfile.region) || '',
300
+ billing_address_country: (userProfile === null || userProfile === void 0 ? void 0 : userProfile.country) || ''
301
+ };
302
+ dispatch(startWidgetLoading());
303
+
304
+ if (reservation.payment_gateway_client_token) {
305
+ const {
306
+ id
307
+ } = token;
308
+ stripe.confirmCardPayment(reservation.payment_gateway_client_token, {
309
+ payment_method: {
310
+ card: {
311
+ token: id
312
+ }
313
+ }
314
+ }).then(result => {
315
+ if (result.error) {
316
+ // Reserve error.message in your UI.
317
+ external_sweetalert2_default().fire(result.error.message, "Please retry purchase.", "warning");
318
+ dispatch(changeStep(1));
319
+ dispatch(removeReservedTicket());
320
+ dispatch(stopWidgetLoading());
321
+ } else {
322
+ return (0,actions_namespaceObject.putRequest)(null, (0,actions_namespaceObject.createAction)(PAY_RESERVATION), `${apiBaseUrl}/api/v1/summits/${summitId}/orders/${reservation.hash}/checkout`, normalizedEntity, actions_namespaceObject.authErrorHandler // entity
323
+ )(params)(dispatch).then(payload => {
324
+ dispatch(stopWidgetLoading());
325
+ dispatch((0,actions_namespaceObject.createAction)(CLEAR_RESERVATION)({}));
326
+ dispatch(changeStep(3));
327
+ return payload;
328
+ }).catch(e => {
329
+ dispatch(stopWidgetLoading());
330
+ return e;
331
+ }); // The payment has succeeded. Display a success message.
332
+ }
333
+ }).catch(e => {
334
+ dispatch(removeReservedTicket());
335
+ dispatch(changeStep(1));
336
+ dispatch(stopWidgetLoading());
337
+ return e;
338
+ });
339
+ } else {
340
+ // FREE TICKET
341
+ return (0,actions_namespaceObject.putRequest)(null, (0,actions_namespaceObject.createAction)(PAY_RESERVATION), `${apiBaseUrl}/api/v1/summits/${summitId}/orders/${reservation.hash}/checkout`, normalizedEntity, actions_namespaceObject.authErrorHandler // entity
342
+ )(params)(dispatch).then(payload => {
343
+ dispatch(stopWidgetLoading());
344
+ dispatch((0,actions_namespaceObject.createAction)(CLEAR_RESERVATION)({}));
345
+ dispatch(changeStep(3));
346
+ return payload;
347
+ }).catch(e => {
348
+ dispatch(removeReservedTicket());
349
+ dispatch(changeStep(1));
350
+ dispatch(stopWidgetLoading());
351
+ return e;
352
+ }); // The payment has succeeded. Display a success message.
353
+ }
354
+ };
355
+ const changeStep = step => (dispatch, getState) => {
356
+ dispatch(startWidgetLoading());
357
+ dispatch((0,actions_namespaceObject.createAction)(CHANGE_STEP)(step));
358
+ dispatch(stopWidgetLoading());
359
+ };
360
+ const goToLogin = () => (dispatch, getState) => {
361
+ dispatch((0,actions_namespaceObject.createAction)(GO_TO_LOGIN)());
362
+ };
363
+ const getLoginCode = (email, getPasswordlessCode) => async (dispatch, getState) => {
364
+ dispatch((0,actions_namespaceObject.createAction)(SET_PASSWORDLESS_LOGIN)(email));
365
+ return new Promise((resolve, reject) => {
366
+ getPasswordlessCode(email).then(res => {
367
+ dispatch((0,actions_namespaceObject.createAction)(SET_PASSWORDLESS_LENGTH)(res.response));
368
+ resolve(res);
369
+ }, err => {
370
+ reject(err);
371
+ });
372
+ });
373
+ };
374
+ const passwordlessLogin = (code, loginWithCode) => async (dispatch, getState) => {
375
+ const {
376
+ registrationLiteState: {
377
+ passwordless: {
378
+ email
379
+ }
380
+ }
381
+ } = getState();
382
+ return new Promise((resolve, reject) => {
383
+ loginWithCode(code, email).then(res => {
384
+ if (res) {
385
+ dispatch((0,actions_namespaceObject.createAction)(SET_PASSWORDLESS_ERROR)());
386
+ }
387
+
388
+ resolve(res);
389
+ }, err => {
390
+ reject(err);
391
+ });
392
+ });
393
+ };
394
+ const isInPersonTicketType = ticketType => {
395
+ /** check is the current order has or not IN_PERSON tickets types **/
396
+ if (ticketType.hasOwnProperty("badge_type")) {
397
+ let badgeType = ticketType.badge_type;
398
+ return badgeType.access_levels.some(al => {
399
+ return al.name == 'IN_PERSON';
400
+ });
401
+ }
402
+
403
+ return false;
404
+ };
405
+
406
+ const normalizeReservation = entity => {
407
+ const normalizedEntity = _objectSpread({}, entity);
408
+
409
+ if (!entity.owner_company.id) {
410
+ normalizedEntity['owner_company'] = entity.owner_company.name;
411
+ } else {
412
+ delete normalizedEntity['owner_company'];
413
+ normalizedEntity['owner_company_id'] = entity.owner_company.id;
414
+ }
415
+
416
+ return normalizedEntity;
417
+ };
418
+ ;// CONCATENATED MODULE: ./src/reducer.js
419
+ function reducer_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
420
+
421
+ function reducer_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? reducer_ownKeys(Object(source), !0).forEach(function (key) { reducer_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : reducer_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
422
+
423
+ function reducer_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
424
+
425
+ /**
426
+ * Copyright 2020 OpenStack Foundation
427
+ * Licensed under the Apache License, Version 2.0 (the "License");
428
+ * you may not use this file except in compliance with the License.
429
+ * You may obtain a copy of the License at
430
+ * http://www.apache.org/licenses/LICENSE-2.0
431
+ * Unless required by applicable law or agreed to in writing, software
432
+ * distributed under the License is distributed on an "AS IS" BASIS,
433
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
434
+ * See the License for the specific language governing permissions and
435
+ * limitations under the License.
436
+ **/
437
+
438
+ const DEFAULT_STATE = {
439
+ reservation: null,
440
+ checkout: null,
441
+ step: 0,
442
+ widgetLoading: false,
443
+ passwordless: {
444
+ email: null,
445
+ otp_length: 0,
446
+ code_sent: false,
447
+ error: false
448
+ },
449
+ ticketTypes: [],
450
+ taxTypes: [],
451
+ settings: {
452
+ apiBaseUrl: null,
453
+ summitId: null,
454
+ marketingData: null,
455
+ userProfile: null
456
+ }
457
+ };
458
+
459
+ const RegistrationLiteReducer = (state = DEFAULT_STATE, action) => {
460
+ const {
461
+ type,
462
+ payload
463
+ } = action;
464
+
465
+ switch (type) {
466
+ case START_WIDGET_LOADING:
467
+ {
468
+ return reducer_objectSpread(reducer_objectSpread({}, state), {}, {
469
+ widgetLoading: true
470
+ });
471
+ }
472
+
473
+ case STOP_WIDGET_LOADING:
474
+ {
475
+ return reducer_objectSpread(reducer_objectSpread({}, state), {}, {
476
+ widgetLoading: false
477
+ });
478
+ }
479
+
480
+ case LOAD_INITIAL_VARS:
481
+ const {
482
+ marketingData,
483
+ summitData,
484
+ apiBaseUrl,
485
+ profileData
486
+ } = payload;
487
+ Object.keys(marketingData).forEach(setting => {
488
+ if (getComputedStyle(document.documentElement).getPropertyValue(`--${setting}`)) {
489
+ document.documentElement.style.setProperty(`--${setting}`, marketingData[setting]);
490
+ document.documentElement.style.setProperty(`--${setting}50`, `${marketingData[setting]}50`);
491
+ }
492
+ });
493
+ return reducer_objectSpread(reducer_objectSpread({}, state), {}, {
494
+ reservation: null,
495
+ checkout: null,
496
+ passwordless: reducer_objectSpread({}, DEFAULT_STATE.passwordless),
497
+ settings: reducer_objectSpread(reducer_objectSpread({}, DEFAULT_STATE.settings), {}, {
498
+ marketingData: marketingData,
499
+ summitId: summitData.id,
500
+ userProfile: profileData,
501
+ apiBaseUrl: apiBaseUrl
502
+ })
503
+ });
504
+
505
+ case CHANGE_STEP:
506
+ {
507
+ return reducer_objectSpread(reducer_objectSpread({}, state), {}, {
508
+ step: payload
509
+ });
510
+ }
511
+
512
+ case GET_TICKET_TYPES:
513
+ {
514
+ return reducer_objectSpread(reducer_objectSpread({}, state), {}, {
515
+ ticketTypes: payload.response.data
516
+ });
517
+ }
518
+
519
+ case GET_TAX_TYPES:
520
+ {
521
+ return reducer_objectSpread(reducer_objectSpread({}, state), {}, {
522
+ taxTypes: payload.response.data
523
+ });
524
+ }
525
+
526
+ case GO_TO_LOGIN:
527
+ {
528
+ return reducer_objectSpread(reducer_objectSpread({}, state), {}, {
529
+ passwordless: reducer_objectSpread(reducer_objectSpread({}, state.passwordless), {}, {
530
+ code_sent: false,
531
+ error: false
532
+ })
533
+ });
534
+ }
535
+
536
+ case SET_PASSWORDLESS_LOGIN:
537
+ {
538
+ return reducer_objectSpread(reducer_objectSpread({}, state), {}, {
539
+ passwordless: reducer_objectSpread(reducer_objectSpread({}, state.passwordless), {}, {
540
+ email: payload,
541
+ error: false
542
+ })
543
+ });
544
+ }
545
+
546
+ case SET_PASSWORDLESS_LENGTH:
547
+ {
548
+ const {
549
+ otp_length
550
+ } = payload;
551
+ return reducer_objectSpread(reducer_objectSpread({}, state), {}, {
552
+ passwordless: reducer_objectSpread(reducer_objectSpread({}, state.passwordless), {}, {
553
+ otp_length,
554
+ code_sent: true,
555
+ error: false
556
+ })
557
+ });
558
+ }
559
+
560
+ case SET_PASSWORDLESS_ERROR:
561
+ {
562
+ return reducer_objectSpread(reducer_objectSpread({}, state), {}, {
563
+ passwordless: reducer_objectSpread(reducer_objectSpread({}, state.passwordless), {}, {
564
+ error: true
565
+ })
566
+ });
567
+ }
568
+
569
+ case CREATE_RESERVATION_SUCCESS:
570
+ {
571
+ const reservation = payload.response;
572
+ return reducer_objectSpread(reducer_objectSpread({}, state), {}, {
573
+ reservation
574
+ });
575
+ }
576
+
577
+ case DELETE_RESERVATION_SUCCESS:
578
+ return reducer_objectSpread(reducer_objectSpread({}, state), {}, {
579
+ reservation: null
580
+ });
581
+
582
+ case CLEAR_RESERVATION:
583
+ {
584
+ return reducer_objectSpread(reducer_objectSpread({}, state), {}, {
585
+ reservation: null
586
+ });
587
+ }
588
+
589
+ case PAY_RESERVATION:
590
+ {
591
+ return reducer_objectSpread(reducer_objectSpread({}, state), {}, {
592
+ checkout: payload.response,
593
+ reservation: null,
594
+ userProfile: null
595
+ });
596
+ }
597
+
598
+ default:
599
+ {
600
+ return state;
601
+ }
602
+ }
603
+ };
604
+
605
+ /* harmony default export */ const reducer = (RegistrationLiteReducer);
606
+ ;// CONCATENATED MODULE: ./src/store.js
607
+ /**
608
+ * Copyright 2019
609
+ * Licensed under the Apache License, Version 2.0 (the "License");
610
+ * you may not use this file except in compliance with the License.
611
+ * You may obtain a copy of the License at
612
+ * http://www.apache.org/licenses/LICENSE-2.0
613
+ * Unless required by applicable law or agreed to in writing, software
614
+ * distributed under the License is distributed on an "AS IS" BASIS,
615
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
616
+ * See the License for the specific language governing permissions and
617
+ * limitations under the License.
618
+ **/
619
+
620
+
621
+
622
+ // default: localStorage if web, AsyncStorage if react-native
623
+
624
+
625
+ let store, persistor;
626
+ const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || external_redux_namespaceObject.compose;
627
+ const getStore = (clientId, apiBaseUrl, getAccessToken) => {
628
+ if (store) return store;
629
+ const config = {
630
+ key: `root_registration_lite_${clientId}`,
631
+ storage: (storage_default()),
632
+ blacklist: ['ticketTypes', 'taxTypes'] // do not persist these keys
633
+
634
+ };
635
+ const reducers = (0,external_redux_persist_namespaceObject.persistCombineReducers)(config, {
636
+ registrationLiteState: reducer
637
+ });
638
+ store = (0,external_redux_namespaceObject.createStore)(reducers, composeEnhancers((0,external_redux_namespaceObject.applyMiddleware)(external_redux_thunk_default().withExtraArgument({
639
+ apiBaseUrl: apiBaseUrl,
640
+ getAccessToken: getAccessToken
641
+ }))));
642
+ return store;
643
+ };
644
+ const getPersistor = () => {
645
+ if (persistor) return persistor;
646
+
647
+ const onRehydrateComplete = () => {};
648
+
649
+ persistor = (0,external_redux_persist_namespaceObject.persistStore)(store, null, onRehydrateComplete);
650
+ return persistor;
651
+ };
652
+ ;// CONCATENATED MODULE: external "redux-persist/integration/react"
653
+ const react_namespaceObject = require("redux-persist/integration/react");
654
+ ;// CONCATENATED MODULE: external "react-spring"
655
+ const external_react_spring_namespaceObject = require("react-spring");
656
+ ;// CONCATENATED MODULE: external "react-use"
657
+ const external_react_use_namespaceObject = require("react-use");
658
+ ;// CONCATENATED MODULE: external "openstack-uicore-foundation/lib/components/ajaxloader"
659
+ const ajaxloader_namespaceObject = require("openstack-uicore-foundation/lib/components/ajaxloader");
660
+ var ajaxloader_default = /*#__PURE__*/__webpack_require__.n(ajaxloader_namespaceObject);
661
+ ;// CONCATENATED MODULE: external "@stripe/stripe-js"
662
+ const stripe_js_namespaceObject = require("@stripe/stripe-js");
663
+ ;// CONCATENATED MODULE: ./src/styles/general.module.scss
664
+ // extracted by mini-css-extract-plugin
665
+ /* harmony default export */ const general_module = ({"outerWrapper":"outerWrapper___OWXyi","innerWrapper":"innerWrapper___mIrBF","title":"title___Tbvkl"});
666
+ ;// CONCATENATED MODULE: ./src/components/login/index.module.scss
667
+ // extracted by mini-css-extract-plugin
668
+ /* harmony default export */ const index_module = ({"loginWrapper":"loginWrapper___sxUEn","innerWrapper":"innerWrapper___GQRkq","button":"button___QMZPu","loginCode":"loginCode___dDBup","input":"input___QR9sA"});
669
+ ;// CONCATENATED MODULE: ./src/components/login/index.js
670
+ /**
671
+ * Copyright 2020 OpenStack Foundation
672
+ * Licensed under the Apache License, Version 2.0 (the "License");
673
+ * you may not use this file except in compliance with the License.
674
+ * You may obtain a copy of the License at
675
+ * http://www.apache.org/licenses/LICENSE-2.0
676
+ * Unless required by applicable law or agreed to in writing, software
677
+ * distributed under the License is distributed on an "AS IS" BASIS,
678
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
679
+ * See the License for the specific language governing permissions and
680
+ * limitations under the License.
681
+ **/
682
+
683
+
684
+
685
+ const LoginComponent = ({
686
+ options,
687
+ login,
688
+ allowsNativeAuth,
689
+ allowsOtpAuthlogin,
690
+ getLoginCode,
691
+ getPasswordlessCode
692
+ }) => {
693
+ const [email, setEmail] = (0,external_react_namespaceObject.useState)('');
694
+ const [emailError, setEmailError] = (0,external_react_namespaceObject.useState)();
695
+
696
+ const isValidEmail = email => {
697
+ const re = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
698
+ return re.test(String(email).toLowerCase());
699
+ };
700
+
701
+ const loginCode = () => {
702
+ let isValid = isValidEmail(email);
703
+ setEmailError(!isValid);
704
+
705
+ if (isValid) {
706
+ getLoginCode(email, getPasswordlessCode);
707
+ }
708
+ };
709
+
710
+ return /*#__PURE__*/external_react_default().createElement("div", {
711
+ className: `${index_module.loginWrapper} step-wrapper`
712
+ }, /*#__PURE__*/external_react_default().createElement((external_react_default()).Fragment, null, /*#__PURE__*/external_react_default().createElement("div", {
713
+ className: `${index_module.innerWrapper}`
714
+ }, /*#__PURE__*/external_react_default().createElement("div", {
715
+ className: index_module.loginCode
716
+ }, "Enter your email address to login or signup:", /*#__PURE__*/external_react_default().createElement("div", {
717
+ className: index_module.input
718
+ }, /*#__PURE__*/external_react_default().createElement("input", {
719
+ placeholder: "youremail@example.com",
720
+ value: email,
721
+ onChange: e => setEmail(e.target.value),
722
+ onKeyPress: ev => ev.key === 'Enter' ? loginCode() : null,
723
+ "data-testid": "email-input"
724
+ }), /*#__PURE__*/external_react_default().createElement("button", {
725
+ onClick: () => loginCode(),
726
+ "data-testid": "email-button"
727
+ }, ">"), /*#__PURE__*/external_react_default().createElement("br", null)), emailError && /*#__PURE__*/external_react_default().createElement("span", {
728
+ "data-testid": "email-error"
729
+ }, "Please enter a valid email address")), /*#__PURE__*/external_react_default().createElement("span", null, "Or you may signup or login with a social provider:"), options.map((o, index) => {
730
+ return o.provider_param ? /*#__PURE__*/external_react_default().createElement("div", {
731
+ className: `${index_module.button}`,
732
+ key: `provider-${o.provider_param}`,
733
+ "data-testid": "login-button",
734
+ style: {
735
+ color: o.button_border_color ? o.button_border_color : '#ffffff',
736
+ border: `thin solid ${o.button_border_color ? o.button_border_color : o.button_color}`,
737
+ backgroundColor: o.button_color,
738
+ backgroundImage: o.provider_logo ? `url(${o.provider_logo})` : 'none',
739
+ backgroundSize: o.provider_logo_size ? o.provider_logo_size : ''
740
+ },
741
+ onClick: () => login(o.provider_param)
742
+ }, o.provider_label) : allowsNativeAuth ? /*#__PURE__*/external_react_default().createElement("div", {
743
+ className: `${index_module.button}`,
744
+ key: `provider-fnid`,
745
+ "data-testid": "login-button",
746
+ style: {
747
+ color: o.button_border_color ? o.button_border_color : '#ffffff',
748
+ border: `thin solid ${o.button_border_color ? o.button_border_color : o.button_color}`,
749
+ backgroundColor: o.button_color,
750
+ backgroundImage: o.provider_logo ? `url(${o.provider_logo})` : 'none',
751
+ backgroundSize: o.provider_logo_size ? o.provider_logo_size : ''
752
+ },
753
+ onClick: () => login(o.provider_param)
754
+ }, o.provider_label) : null;
755
+ }), allowsOtpAuthlogin && /*#__PURE__*/external_react_default().createElement("div", {
756
+ className: index_module.loginCode
757
+ }, "or get a login code emailed to you", /*#__PURE__*/external_react_default().createElement("div", {
758
+ className: index_module.input
759
+ }, /*#__PURE__*/external_react_default().createElement("input", {
760
+ placeholder: "youremail@example.com",
761
+ value: email,
762
+ onChange: e => setEmail(e.target.value),
763
+ onKeyPress: ev => ev.key === 'Enter' ? loginCode() : null,
764
+ "data-testid": "email-input"
765
+ }), /*#__PURE__*/external_react_default().createElement("button", {
766
+ onClick: () => loginCode(),
767
+ "data-testid": "email-button"
768
+ }, ">"), /*#__PURE__*/external_react_default().createElement("br", null)), emailError && /*#__PURE__*/external_react_default().createElement("span", {
769
+ "data-testid": "email-error"
770
+ }, "Please enter a valid email adress")))));
771
+ };
772
+
773
+ /* harmony default export */ const login = (LoginComponent);
774
+ ;// CONCATENATED MODULE: external "prop-types"
775
+ const external_prop_types_namespaceObject = require("prop-types");
776
+ ;// CONCATENATED MODULE: external "@stripe/react-stripe-js"
777
+ const react_stripe_js_namespaceObject = require("@stripe/react-stripe-js");
778
+ ;// CONCATENATED MODULE: ./src/components/payment/index.module.scss
779
+ // extracted by mini-css-extract-plugin
780
+ /* harmony default export */ const payment_index_module = ({"title":"title___LksVm","form":"form___v5GIx","fieldWrapper":"fieldWrapper___Eoe61"});
781
+ ;// CONCATENATED MODULE: ./src/components/stripe-form/index.module.scss
782
+ // extracted by mini-css-extract-plugin
783
+ /* harmony default export */ const stripe_form_index_module = ({"form":"form___DoT3x","fieldWrapper":"fieldWrapper___wa1Ks"});
784
+ ;// CONCATENATED MODULE: ./src/components/stripe-form/index.js
785
+ /**
786
+ * Copyright 2020 OpenStack Foundation
787
+ * Licensed under the Apache License, Version 2.0 (the "License");
788
+ * you may not use this file except in compliance with the License.
789
+ * You may obtain a copy of the License at
790
+ * http://www.apache.org/licenses/LICENSE-2.0
791
+ * Unless required by applicable law or agreed to in writing, software
792
+ * distributed under the License is distributed on an "AS IS" BASIS,
793
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
794
+ * See the License for the specific language governing permissions and
795
+ * limitations under the License.
796
+ **/
797
+
798
+
799
+
800
+
801
+
802
+
803
+ const StripeForm = ({
804
+ reservation,
805
+ payTicket,
806
+ userProfile,
807
+ marketingData
808
+ }) => {
809
+ const stripe = (0,react_stripe_js_namespaceObject.useStripe)();
810
+ const elements = (0,react_stripe_js_namespaceObject.useElements)();
811
+ const [zipCode, setZipCode] = (0,external_react_namespaceObject.useState)('');
812
+ const [zipCodeError, setZipCodeError] = (0,external_react_namespaceObject.useState)({
813
+ required: false
814
+ });
815
+ const stripeStyle = {
816
+ base: {
817
+ // Add your base input styles here. For example: #d4e5f4
818
+ color: marketingData.color_text_dark,
819
+ fontSize: '16px',
820
+ //fontFamily: 'inherit',
821
+ backgroundColor: '#ffffff',
822
+ '::placeholder': {
823
+ color: marketingData.color_text_input_hints
824
+ }
825
+ },
826
+ invalid: {
827
+ color: '#e5424d',
828
+ ':focus': {
829
+ color: '#3486cd'
830
+ }
831
+ }
832
+ };
833
+
834
+ const handleSubmit = async event => {
835
+ event.preventDefault();
836
+
837
+ if (!zipCode) {
838
+ setZipCodeError({
839
+ required: true
840
+ });
841
+ return;
842
+ } else {
843
+ setZipCodeError({
844
+ required: false
845
+ });
846
+ }
847
+
848
+ if (!stripe) {
849
+ // Stripe.js has not loaded yet. Make sure to disable
850
+ // form submission until Stripe.js has loaded.
851
+ return;
852
+ }
853
+
854
+ const cardElement = elements.getElement(react_stripe_js_namespaceObject.CardNumberElement);
855
+ const {
856
+ error,
857
+ token
858
+ } = await stripe.createToken(cardElement, {
859
+ name: `${reservation.owner_first_name} ${reservation.owner_last_name}`,
860
+ address_zip: zipCode,
861
+ address_country: userProfile.country || ''
862
+ });
863
+
864
+ if (token) {
865
+ payTicket(token, stripe, zipCode);
866
+ } else if (error) {
867
+ external_sweetalert2_default().fire("Payment error", "There's an error generating your payment, please retry.", "warning");
868
+ }
869
+ };
870
+
871
+ return /*#__PURE__*/external_react_default().createElement("form", {
872
+ className: stripe_form_index_module.form,
873
+ id: "payment-form",
874
+ onSubmit: handleSubmit
875
+ }, /*#__PURE__*/external_react_default().createElement("div", {
876
+ className: stripe_form_index_module.fieldWrapper
877
+ }, /*#__PURE__*/external_react_default().createElement(react_stripe_js_namespaceObject.CardNumberElement, {
878
+ options: {
879
+ style: stripeStyle
880
+ }
881
+ }), /*#__PURE__*/external_react_default().createElement("i", {
882
+ className: "fa fa-credit-card"
883
+ })), /*#__PURE__*/external_react_default().createElement("div", {
884
+ className: stripe_form_index_module.fieldWrapper
885
+ }, /*#__PURE__*/external_react_default().createElement(react_stripe_js_namespaceObject.CardExpiryElement, {
886
+ options: {
887
+ style: stripeStyle
888
+ }
889
+ })), /*#__PURE__*/external_react_default().createElement("div", {
890
+ className: stripe_form_index_module.fieldWrapper
891
+ }, /*#__PURE__*/external_react_default().createElement(react_stripe_js_namespaceObject.CardCvcElement, {
892
+ options: {
893
+ style: stripeStyle
894
+ }
895
+ })), /*#__PURE__*/external_react_default().createElement("div", {
896
+ className: stripe_form_index_module.fieldWrapper,
897
+ style: {
898
+ marginBottom: `${zipCodeError.required ? '25px' : '0px'}`
899
+ }
900
+ }, /*#__PURE__*/external_react_default().createElement("input", {
901
+ placeholder: "Zip Code",
902
+ value: zipCode,
903
+ onChange: e => setZipCode(e.target.value)
904
+ }), zipCodeError.required && /*#__PURE__*/external_react_default().createElement("span", null, "This field is required")));
905
+ };
906
+
907
+ const mapStateToProps = ({
908
+ registrationLiteState
909
+ }) => ({
910
+ marketingData: registrationLiteState.settings.marketingData
911
+ });
912
+
913
+ /* harmony default export */ const stripe_form = ((0,external_react_redux_namespaceObject.connect)(mapStateToProps, null)(StripeForm));
914
+ ;// CONCATENATED MODULE: ./src/components/payment/index.js
915
+ function payment_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
916
+
917
+ function payment_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? payment_ownKeys(Object(source), !0).forEach(function (key) { payment_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : payment_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
918
+
919
+ function payment_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
920
+
921
+ /**
922
+ * Copyright 2020 OpenStack Foundation
923
+ * Licensed under the Apache License, Version 2.0 (the "License");
924
+ * you may not use this file except in compliance with the License.
925
+ * You may obtain a copy of the License at
926
+ * http://www.apache.org/licenses/LICENSE-2.0
927
+ * Unless required by applicable law or agreed to in writing, software
928
+ * distributed under the License is distributed on an "AS IS" BASIS,
929
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
930
+ * See the License for the specific language governing permissions and
931
+ * limitations under the License.
932
+ **/
933
+
934
+
935
+
936
+
937
+
938
+
939
+
940
+
941
+ const PaymentComponent = ({
942
+ isActive,
943
+ userProfile,
944
+ reservation,
945
+ payTicket,
946
+ stripeKey
947
+ }) => {
948
+ const [ref, {
949
+ height
950
+ }] = (0,external_react_use_namespaceObject.useMeasure)();
951
+ const toggleAnimation = (0,external_react_spring_namespaceObject.useSpring)({
952
+ config: payment_objectSpread({
953
+ bounce: 0
954
+ }, external_react_spring_namespaceObject.config.stiff),
955
+ from: {
956
+ opacity: 0,
957
+ height: 0
958
+ },
959
+ to: {
960
+ opacity: 1,
961
+ height: isActive ? height + 10 : 0,
962
+ marginBottom: isActive ? 5 : 0
963
+ }
964
+ });
965
+ return /*#__PURE__*/external_react_default().createElement("div", {
966
+ className: `${payment_index_module.outerWrapper} step-wrapper`
967
+ }, /*#__PURE__*/external_react_default().createElement((external_react_default()).Fragment, null, /*#__PURE__*/external_react_default().createElement("div", {
968
+ className: `${payment_index_module.innerWrapper}`
969
+ }, /*#__PURE__*/external_react_default().createElement("div", {
970
+ className: payment_index_module.title
971
+ }, /*#__PURE__*/external_react_default().createElement("span", null, "Payment")), /*#__PURE__*/external_react_default().createElement(external_react_spring_namespaceObject.animated.div, {
972
+ style: payment_objectSpread({
973
+ overflow: 'hidden'
974
+ }, toggleAnimation)
975
+ }, /*#__PURE__*/external_react_default().createElement("div", {
976
+ ref: ref
977
+ }, /*#__PURE__*/external_react_default().createElement(react_stripe_js_namespaceObject.Elements, {
978
+ stripe: stripeKey
979
+ }, /*#__PURE__*/external_react_default().createElement(stripe_form, {
980
+ reservation: reservation,
981
+ payTicket: payTicket,
982
+ userProfile: userProfile
983
+ })))))));
984
+ };
985
+
986
+ /* harmony default export */ const payment = (PaymentComponent);
987
+ ;// CONCATENATED MODULE: external "openstack-uicore-foundation/lib/components"
988
+ const components_namespaceObject = require("openstack-uicore-foundation/lib/components");
989
+ ;// CONCATENATED MODULE: external "react-hook-form"
990
+ const external_react_hook_form_namespaceObject = require("react-hook-form");
991
+ ;// CONCATENATED MODULE: external "react-tooltip"
992
+ const external_react_tooltip_namespaceObject = require("react-tooltip");
993
+ var external_react_tooltip_default = /*#__PURE__*/__webpack_require__.n(external_react_tooltip_namespaceObject);
994
+ ;// CONCATENATED MODULE: ./src/helpers/capitalizeFirstLetter.js
995
+ const capitalizeFirstLetter = string => string.charAt(0).toUpperCase() + string.slice(1);
996
+ ;// CONCATENATED MODULE: ./src/helpers/formatErrorMessage.js
997
+
998
+ const formatErrorMessage = string => {
999
+ const errorMessage = capitalizeFirstLetter(string);
1000
+ return `${errorMessage}${errorMessage.endsWith('.') ? '' : '.'}`;
1001
+ };
1002
+ ;// CONCATENATED MODULE: ./src/components/personal-information/index.module.scss
1003
+ // extracted by mini-css-extract-plugin
1004
+ /* harmony default export */ const personal_information_index_module = ({"title":"title___ECoNz","form":"form___lDFka","readOnly":"readOnly___WRazF","companies":"companies___kmGFB","moreInfo":"moreInfo___cQYdZ","moreInfoTooltip":"moreInfoTooltip___lslgT","ticketQuantityNotice":"ticketQuantityNotice___L6gis","formErrors":"formErrors___dQQMe"});
1005
+ ;// CONCATENATED MODULE: ./src/components/personal-information/index.js
1006
+ function _extends() { _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; }; return _extends.apply(this, arguments); }
1007
+
1008
+ function personal_information_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1009
+
1010
+ function personal_information_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? personal_information_ownKeys(Object(source), !0).forEach(function (key) { personal_information_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : personal_information_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1011
+
1012
+ function personal_information_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
1013
+
1014
+ /**
1015
+ * Copyright 2020 OpenStack Foundation
1016
+ * Licensed under the Apache License, Version 2.0 (the "License");
1017
+ * you may not use this file except in compliance with the License.
1018
+ * You may obtain a copy of the License at
1019
+ * http://www.apache.org/licenses/LICENSE-2.0
1020
+ * Unless required by applicable law or agreed to in writing, software
1021
+ * distributed under the License is distributed on an "AS IS" BASIS,
1022
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1023
+ * See the License for the specific language governing permissions and
1024
+ * limitations under the License.
1025
+ **/
1026
+
1027
+
1028
+
1029
+
1030
+
1031
+
1032
+
1033
+
1034
+
1035
+
1036
+ const PersonalInfoComponent = ({
1037
+ isActive,
1038
+ changeForm,
1039
+ reservation,
1040
+ userProfile,
1041
+ summitId,
1042
+ handleCompanyError,
1043
+ formValues,
1044
+ formErrors
1045
+ }) => {
1046
+ var _errors$email, _errors$email2;
1047
+
1048
+ const [personalInfo, setPersonalInfo] = (0,external_react_namespaceObject.useState)({
1049
+ firstName: userProfile.given_name || '',
1050
+ lastName: userProfile.family_name || '',
1051
+ email: userProfile.email || '',
1052
+ company: {
1053
+ id: null,
1054
+ name: userProfile.company || ''
1055
+ },
1056
+ promoCode: ''
1057
+ });
1058
+ const [companyError, setCompanyError] = (0,external_react_namespaceObject.useState)(false);
1059
+ const {
1060
+ register,
1061
+ handleSubmit,
1062
+ formState: {
1063
+ errors
1064
+ }
1065
+ } = (0,external_react_hook_form_namespaceObject.useForm)();
1066
+ (0,external_react_namespaceObject.useEffect)(() => {
1067
+ if (reservation) {
1068
+ setPersonalInfo({
1069
+ firstName: reservation.owner_first_name ? reservation.owner_first_name : personalInfo.firstName,
1070
+ lastName: reservation.owner_last_name ? reservation.owner_last_name : personalInfo.lastName,
1071
+ email: reservation.owner_email ? reservation.owner_email : personalInfo.email,
1072
+ company: {
1073
+ id: null,
1074
+ name: reservation.owner_company ? reservation.owner_company : personalInfo.company
1075
+ }
1076
+ });
1077
+ }
1078
+ }, []);
1079
+
1080
+ const onCompanyChange = ev => {
1081
+ const newCompany = ev.target.value;
1082
+ setCompanyError(false);
1083
+ setPersonalInfo(personal_information_objectSpread(personal_information_objectSpread({}, personalInfo), {}, {
1084
+ company: newCompany
1085
+ }));
1086
+ };
1087
+
1088
+ const onSubmit = data => {
1089
+ if (!personalInfo.company.name) {
1090
+ setCompanyError(true);
1091
+ return;
1092
+ }
1093
+
1094
+ setPersonalInfo(personal_information_objectSpread(personal_information_objectSpread({}, personalInfo), data));
1095
+ changeForm(personal_information_objectSpread(personal_information_objectSpread({}, personalInfo), data));
1096
+ };
1097
+
1098
+ const [ref, {
1099
+ height
1100
+ }] = (0,external_react_use_namespaceObject.useMeasure)();
1101
+ const toggleAnimation = (0,external_react_spring_namespaceObject.useSpring)({
1102
+ config: personal_information_objectSpread({
1103
+ bounce: 0
1104
+ }, external_react_spring_namespaceObject.config.stiff),
1105
+ from: {
1106
+ opacity: 0,
1107
+ height: 0
1108
+ },
1109
+ to: {
1110
+ opacity: 1,
1111
+ height: isActive ? height + 10 : 0
1112
+ }
1113
+ });
1114
+ return /*#__PURE__*/external_react_default().createElement("div", {
1115
+ className: `${personal_information_index_module.outerWrapper} step-wrapper`
1116
+ }, /*#__PURE__*/external_react_default().createElement((external_react_default()).Fragment, null, /*#__PURE__*/external_react_default().createElement("div", {
1117
+ className: `${personal_information_index_module.innerWrapper}`
1118
+ }, /*#__PURE__*/external_react_default().createElement("div", {
1119
+ className: personal_information_index_module.title
1120
+ }, /*#__PURE__*/external_react_default().createElement("span", null, "Personal Information"), !isActive && /*#__PURE__*/external_react_default().createElement("div", {
1121
+ "data-testid": "personal-info"
1122
+ }, /*#__PURE__*/external_react_default().createElement("span", null, `${personalInfo.firstName} ${personalInfo.lastName} ${personalInfo.company.name ? `- ${personalInfo.company.name}` : ''}`), /*#__PURE__*/external_react_default().createElement("br", null), /*#__PURE__*/external_react_default().createElement("span", null, personalInfo.email))), /*#__PURE__*/external_react_default().createElement(external_react_spring_namespaceObject.animated.div, {
1123
+ style: personal_information_objectSpread({
1124
+ overflow: `${isActive ? '' : 'hidden'}`
1125
+ }, toggleAnimation)
1126
+ }, /*#__PURE__*/external_react_default().createElement("div", {
1127
+ ref: ref
1128
+ }, formValues.ticketQuantity > 1 && /*#__PURE__*/external_react_default().createElement("div", {
1129
+ className: `${personal_information_index_module.ticketQuantityNotice} alert alert-info`
1130
+ }, "Please note that 1 ticket from this order will be automatically assigned to you; the rest will remain unassigned, with the option to re-assign all tickets after purchase."), /*#__PURE__*/external_react_default().createElement("form", {
1131
+ id: "personal-info-form",
1132
+ onSubmit: handleSubmit(onSubmit),
1133
+ className: personal_information_index_module.form,
1134
+ "data-testid": "personal-form"
1135
+ }, /*#__PURE__*/external_react_default().createElement("div", null, /*#__PURE__*/external_react_default().createElement("input", _extends({
1136
+ type: "text",
1137
+ placeholder: "First name *",
1138
+ defaultValue: personalInfo.firstName || ''
1139
+ }, register("firstName", {
1140
+ required: true,
1141
+ maxLength: 80
1142
+ }), {
1143
+ "data-testid": "first-name"
1144
+ })), errors.firstName && /*#__PURE__*/external_react_default().createElement("span", {
1145
+ "data-testid": "first-name-error"
1146
+ }, "This field is required")), /*#__PURE__*/external_react_default().createElement("div", null, /*#__PURE__*/external_react_default().createElement("input", _extends({
1147
+ type: "text",
1148
+ placeholder: "Last name *",
1149
+ defaultValue: personalInfo.lastName || ''
1150
+ }, register("lastName", {
1151
+ required: true,
1152
+ maxLength: 100
1153
+ }), {
1154
+ "data-testid": "last-name"
1155
+ })), errors.lastName && /*#__PURE__*/external_react_default().createElement("span", {
1156
+ "data-testid": "last-name-error"
1157
+ }, "This field is required")), /*#__PURE__*/external_react_default().createElement("div", null, /*#__PURE__*/external_react_default().createElement("input", _extends({
1158
+ type: "text",
1159
+ placeholder: "Email *",
1160
+ className: personal_information_index_module.readOnly,
1161
+ readOnly: true,
1162
+ defaultValue: personalInfo.email || ''
1163
+ }, register("email", {
1164
+ required: true,
1165
+ pattern: /^\S+@\S+$/i
1166
+ }), {
1167
+ "data-testid": "email"
1168
+ })), ((_errors$email = errors.email) === null || _errors$email === void 0 ? void 0 : _errors$email.type) === 'required' && /*#__PURE__*/external_react_default().createElement("span", {
1169
+ "data-testid": "email-error-required"
1170
+ }, "This field is required"), ((_errors$email2 = errors.email) === null || _errors$email2 === void 0 ? void 0 : _errors$email2.type) === 'pattern' && /*#__PURE__*/external_react_default().createElement("span", {
1171
+ "data-testid": "email-error-invalid"
1172
+ }, "The email is invalid")), /*#__PURE__*/external_react_default().createElement("div", {
1173
+ className: personal_information_index_module.companies
1174
+ }, /*#__PURE__*/external_react_default().createElement(components_namespaceObject.RegistrationCompanyInput, {
1175
+ id: "company",
1176
+ summitId: summitId,
1177
+ onChange: onCompanyChange,
1178
+ onError: handleCompanyError,
1179
+ value: personalInfo.company
1180
+ }), companyError && /*#__PURE__*/external_react_default().createElement("span", {
1181
+ "data-testid": "company-error"
1182
+ }, "This field is required")), /*#__PURE__*/external_react_default().createElement("div", null, /*#__PURE__*/external_react_default().createElement("input", _extends({
1183
+ type: "text",
1184
+ placeholder: "Promo Code"
1185
+ }, register("promoCode"))))), /*#__PURE__*/external_react_default().createElement("a", {
1186
+ className: personal_information_index_module.moreInfo,
1187
+ "data-tip": true,
1188
+ "data-for": "promo-code-info"
1189
+ }, /*#__PURE__*/external_react_default().createElement("i", {
1190
+ className: "glyphicon glyphicon-info-sign",
1191
+ "aria-hidden": "true"
1192
+ }), ` `, "Have multiple promo codes?"), /*#__PURE__*/external_react_default().createElement((external_react_tooltip_default()), {
1193
+ id: "promo-code-info"
1194
+ }, /*#__PURE__*/external_react_default().createElement("div", {
1195
+ className: personal_information_index_module.moreInfoTooltip
1196
+ }, "In order to use multiple promo codes, you may place a new registration order with the new promo code after you complete this order. This promo code will be applied to all tickets in this order.")), formErrors.length > 0 && /*#__PURE__*/external_react_default().createElement("div", {
1197
+ className: `${personal_information_index_module.formErrors} alert alert-danger`
1198
+ }, formErrors.map((error, index) => /*#__PURE__*/external_react_default().createElement("div", {
1199
+ key: index
1200
+ }, formatErrorMessage(error)))))))));
1201
+ };
1202
+
1203
+ /* harmony default export */ const personal_information = (PersonalInfoComponent);
1204
+ ;// CONCATENATED MODULE: external "openstack-uicore-foundation/lib/components/raw-html"
1205
+ const raw_html_namespaceObject = require("openstack-uicore-foundation/lib/components/raw-html");
1206
+ var raw_html_default = /*#__PURE__*/__webpack_require__.n(raw_html_namespaceObject);
1207
+ ;// CONCATENATED MODULE: ./src/components/ticket-type/index.module.scss
1208
+ // extracted by mini-css-extract-plugin
1209
+ /* harmony default export */ const ticket_type_index_module = ({"title":"title___DNZyl","summary":"summary___quWdZ","crossOut":"crossOut___QZ7dy","discount":"discount___sEK_Q","promo":"promo___F8lPO","form":"form___aoo7w","dropdown":"dropdown____HWg0","quantity":"quantity___SIEQZ","soldOut":"soldOut___Hatfr","moreInfo":"moreInfo___LmwOe","moreInfoTooltip":"moreInfoTooltip___nOBf1","inPersonDisclaimer":"inPersonDisclaimer___PXGTz"});
1210
+ ;// CONCATENATED MODULE: ./src/helpers/getTicketMaxQuantity.js
1211
+ const getTicketMaxQuantity = ticket => ticket ? Math.min((ticket.quantity_2_sell || Number.MAX_SAFE_INTEGER) - ticket.quantity_sold, ticket.max_quantity_per_order || Number.MAX_SAFE_INTEGER) : 0;
1212
+ ;// CONCATENATED MODULE: ./src/components/ticket-dropdown/index.module.scss
1213
+ // extracted by mini-css-extract-plugin
1214
+ /* harmony default export */ const ticket_dropdown_index_module = ({"placeholder":"placeholder___pcdCn","inPersonDisclaimer":"inPersonDisclaimer___z_DzO","dropdown":"dropdown___mfbPG","soldOut":"soldOut___rBLC0"});
1215
+ ;// CONCATENATED MODULE: ./src/components/ticket-dropdown/index.js
1216
+ /**
1217
+ * Copyright 2020 OpenStack Foundation
1218
+ * Licensed under the Apache License, Version 2.0 (the "License");
1219
+ * you may not use this file except in compliance with the License.
1220
+ * You may obtain a copy of the License at
1221
+ * http://www.apache.org/licenses/LICENSE-2.0
1222
+ * Unless required by applicable law or agreed to in writing, software
1223
+ * distributed under the License is distributed on an "AS IS" BASIS,
1224
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1225
+ * See the License for the specific language governing permissions and
1226
+ * limitations under the License.
1227
+ **/
1228
+
1229
+
1230
+
1231
+
1232
+
1233
+ const TicketDropdownComponent = ({
1234
+ selectedTicket,
1235
+ ticketTypes,
1236
+ onTicketSelect
1237
+ }) => {
1238
+ const [active, setActive] = (0,external_react_namespaceObject.useState)(false);
1239
+
1240
+ const ticketSelect = ticket => {
1241
+ onTicketSelect(ticket);
1242
+ setActive(!active);
1243
+ };
1244
+
1245
+ const date = new Date();
1246
+ let now_utc = Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds()) / 1000;
1247
+ return /*#__PURE__*/external_react_default().createElement("div", {
1248
+ className: `${ticket_dropdown_index_module.outerWrapper}`
1249
+ }, /*#__PURE__*/external_react_default().createElement("div", {
1250
+ className: ticket_dropdown_index_module.placeholder,
1251
+ onClick: () => setActive(!active),
1252
+ "data-testid": "ticket-dropdown"
1253
+ }, selectedTicket ? /*#__PURE__*/external_react_default().createElement((external_react_default()).Fragment, null, /*#__PURE__*/external_react_default().createElement("span", {
1254
+ "data-testid": "selected-ticket"
1255
+ }, `${selectedTicket.name} - $${selectedTicket.cost} ${selectedTicket.currency}`), /*#__PURE__*/external_react_default().createElement("i", {
1256
+ className: "fa fa-chevron-down"
1257
+ })) : /*#__PURE__*/external_react_default().createElement((external_react_default()).Fragment, null, /*#__PURE__*/external_react_default().createElement("span", {
1258
+ "data-testid": "no-ticket"
1259
+ }, "Select a ticket"), /*#__PURE__*/external_react_default().createElement("i", {
1260
+ className: "fa fa-chevron-down"
1261
+ }))), active && /*#__PURE__*/external_react_default().createElement("div", {
1262
+ className: ticket_dropdown_index_module.dropdown,
1263
+ "data-testid": "ticket-list"
1264
+ }, ticketTypes.map(t => {
1265
+ const maxQuantity = getTicketMaxQuantity(t);
1266
+ const isTicketSoldOut = maxQuantity < 1;
1267
+
1268
+ if (t.sales_start_date === null && t.sales_end_date === null || now_utc >= t.sales_start_date && now_utc <= t.sales_end_date) {
1269
+ return /*#__PURE__*/external_react_default().createElement("div", {
1270
+ key: t.id,
1271
+ className: isTicketSoldOut ? ticket_dropdown_index_module.soldOut : '',
1272
+ onClick: () => {
1273
+ if (isTicketSoldOut) return;
1274
+ ticketSelect(t);
1275
+ }
1276
+ }, t.name, " -", ` `, !isTicketSoldOut && /*#__PURE__*/external_react_default().createElement((external_react_default()).Fragment, null, "$", t.cost, " ", t.currency), isTicketSoldOut && /*#__PURE__*/external_react_default().createElement((external_react_default()).Fragment, null, "Sold Out"));
1277
+ }
1278
+ })));
1279
+ };
1280
+
1281
+ /* harmony default export */ const ticket_dropdown = (TicketDropdownComponent);
1282
+ ;// CONCATENATED MODULE: ./src/helpers/formatCurrency.js
1283
+ const _excluded = ["locale"];
1284
+
1285
+ function formatCurrency_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1286
+
1287
+ function formatCurrency_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? formatCurrency_ownKeys(Object(source), !0).forEach(function (key) { formatCurrency_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : formatCurrency_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1288
+
1289
+ function formatCurrency_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
1290
+
1291
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
1292
+
1293
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
1294
+
1295
+ const formatCurrency = (value, _ref) => {
1296
+ let {
1297
+ locale = 'en-US'
1298
+ } = _ref,
1299
+ options = _objectWithoutProperties(_ref, _excluded);
1300
+
1301
+ const defaultOptions = {
1302
+ currency: 'USD',
1303
+ minimumFractionDigits: 0,
1304
+ maximumFractionDigits: 0
1305
+ };
1306
+ const formatter = new Intl.NumberFormat(locale, formatCurrency_objectSpread(formatCurrency_objectSpread({
1307
+ style: 'currency'
1308
+ }, defaultOptions), options));
1309
+ return formatter.format(value);
1310
+ };
1311
+ ;// CONCATENATED MODULE: ./src/components/ticket-type/index.js
1312
+ function ticket_type_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1313
+
1314
+ function ticket_type_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ticket_type_ownKeys(Object(source), !0).forEach(function (key) { ticket_type_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ticket_type_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1315
+
1316
+ function ticket_type_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
1317
+
1318
+ /**
1319
+ * Copyright 2020 OpenStack Foundation
1320
+ * Licensed under the Apache License, Version 2.0 (the "License");
1321
+ * you may not use this file except in compliance with the License.
1322
+ * You may obtain a copy of the License at
1323
+ * http://www.apache.org/licenses/LICENSE-2.0
1324
+ * Unless required by applicable law or agreed to in writing, software
1325
+ * distributed under the License is distributed on an "AS IS" BASIS,
1326
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1327
+ * See the License for the specific language governing permissions and
1328
+ * limitations under the License.
1329
+ **/
1330
+
1331
+
1332
+
1333
+
1334
+
1335
+
1336
+
1337
+
1338
+
1339
+
1340
+
1341
+ const TicketTypeComponent = ({
1342
+ ticketTypes,
1343
+ isActive,
1344
+ changeForm,
1345
+ reservation,
1346
+ inPersonDisclaimer
1347
+ }) => {
1348
+ const [ticket, setTicket] = (0,external_react_namespaceObject.useState)(null);
1349
+ const [quantity, setQuantity] = (0,external_react_namespaceObject.useState)(1);
1350
+ const minQuantity = 1;
1351
+ const maxQuantity = getTicketMaxQuantity(ticket);
1352
+ const [ref, {
1353
+ height
1354
+ }] = (0,external_react_use_namespaceObject.useMeasure)();
1355
+ const toggleAnimation = (0,external_react_spring_namespaceObject.useSpring)({
1356
+ config: ticket_type_objectSpread({
1357
+ bounce: 0
1358
+ }, external_react_spring_namespaceObject.config.stiff),
1359
+ from: {
1360
+ opacity: 0,
1361
+ height: 0
1362
+ },
1363
+ to: {
1364
+ opacity: 1,
1365
+ height: isActive ? height + 10 : 0
1366
+ }
1367
+ });
1368
+ (0,external_react_namespaceObject.useEffect)(() => {
1369
+ var _reservation$tickets;
1370
+
1371
+ if (reservation && ((_reservation$tickets = reservation.tickets) === null || _reservation$tickets === void 0 ? void 0 : _reservation$tickets.length) > 0) {
1372
+ setTicket(ticketTypes.find(t => t.id === reservation.tickets[0].ticket_type_id));
1373
+ }
1374
+ }, []);
1375
+ (0,external_react_namespaceObject.useEffect)(() => {
1376
+ changeForm({
1377
+ ticketType: ticket,
1378
+ ticketQuantity: quantity
1379
+ });
1380
+ }, [ticket, quantity]);
1381
+
1382
+ const handleTicketChange = t => {
1383
+ setTicket(t);
1384
+ setQuantity(minQuantity);
1385
+ };
1386
+
1387
+ const incrementQuantity = () => setQuantity(quantity + 1);
1388
+
1389
+ const decrementQuantity = () => setQuantity(quantity - 1);
1390
+
1391
+ return /*#__PURE__*/external_react_default().createElement("div", {
1392
+ className: `${ticket_type_index_module.outerWrapper} step-wrapper`
1393
+ }, /*#__PURE__*/external_react_default().createElement((external_react_default()).Fragment, null, /*#__PURE__*/external_react_default().createElement("div", {
1394
+ className: ticket_type_index_module.innerWrapper
1395
+ }, /*#__PURE__*/external_react_default().createElement("div", {
1396
+ className: ticket_type_index_module.title
1397
+ }, /*#__PURE__*/external_react_default().createElement("span", null, "Ticket"), /*#__PURE__*/external_react_default().createElement("div", {
1398
+ className: ticket_type_index_module.summary
1399
+ }, /*#__PURE__*/external_react_default().createElement("span", null, ticket && /*#__PURE__*/external_react_default().createElement((external_react_default()).Fragment, null, ticket.name, ` `, "(", quantity, "):", ` `, !isActive && (reservation === null || reservation === void 0 ? void 0 : reservation.discount_amount) > 0 && /*#__PURE__*/external_react_default().createElement((external_react_default()).Fragment, null, /*#__PURE__*/external_react_default().createElement("span", {
1400
+ className: ticket_type_index_module.crossOut
1401
+ }, formatCurrency(ticket.cost * quantity, {
1402
+ currency: ticket.currency
1403
+ })), ` `, /*#__PURE__*/external_react_default().createElement("span", {
1404
+ className: ticket_type_index_module.discount
1405
+ }, formatCurrency(reservation.raw_amount - reservation.discount_amount, {
1406
+ currency: ticket.currency
1407
+ })), ` `), !(reservation !== null && reservation !== void 0 && reservation.discount_amount) && /*#__PURE__*/external_react_default().createElement((external_react_default()).Fragment, null, formatCurrency(ticket.cost * quantity, {
1408
+ currency: ticket.currency
1409
+ }), ` `), ticket.currency, !isActive && (reservation === null || reservation === void 0 ? void 0 : reservation.discount_amount) > 0 && /*#__PURE__*/external_react_default().createElement("span", {
1410
+ className: ticket_type_index_module.promo
1411
+ }, "Promo code applied"), !isActive && (reservation === null || reservation === void 0 ? void 0 : reservation.taxes_amount) > 0 && /*#__PURE__*/external_react_default().createElement((external_react_default()).Fragment, null, /*#__PURE__*/external_react_default().createElement("br", null), "Taxes: $", reservation === null || reservation === void 0 ? void 0 : reservation.taxes_amount, " ", ticket === null || ticket === void 0 ? void 0 : ticket.currency)), !ticket && /*#__PURE__*/external_react_default().createElement((external_react_default()).Fragment, null, "No ticket selected")))), /*#__PURE__*/external_react_default().createElement(external_react_spring_namespaceObject.animated.div, {
1412
+ style: ticket_type_objectSpread({
1413
+ overflow: 'hidden'
1414
+ }, toggleAnimation)
1415
+ }, /*#__PURE__*/external_react_default().createElement("div", {
1416
+ ref: ref
1417
+ }, /*#__PURE__*/external_react_default().createElement("div", {
1418
+ className: ticket_type_index_module.form
1419
+ }, /*#__PURE__*/external_react_default().createElement("div", {
1420
+ className: ticket_type_index_module.dropdown
1421
+ }, /*#__PURE__*/external_react_default().createElement(ticket_dropdown, {
1422
+ selectedTicket: ticket,
1423
+ ticketTypes: ticketTypes,
1424
+ onTicketSelect: handleTicketChange
1425
+ })), ticket && /*#__PURE__*/external_react_default().createElement("div", {
1426
+ className: ticket_type_index_module.quantity
1427
+ }, /*#__PURE__*/external_react_default().createElement("div", {
1428
+ className: "input-group"
1429
+ }, /*#__PURE__*/external_react_default().createElement("span", {
1430
+ className: "input-group-btn"
1431
+ }, /*#__PURE__*/external_react_default().createElement("button", {
1432
+ "aria-label": "remove a ticket",
1433
+ className: "btn btn-default",
1434
+ onClick: decrementQuantity,
1435
+ disabled: maxQuantity === 0 || quantity === minQuantity
1436
+ }, /*#__PURE__*/external_react_default().createElement("i", {
1437
+ className: "fa fa-minus"
1438
+ }))), /*#__PURE__*/external_react_default().createElement("input", {
1439
+ className: "form-control",
1440
+ "aria-label": "ticket quanity",
1441
+ name: "ticket_quantity",
1442
+ type: "text",
1443
+ value: quantity,
1444
+ readOnly: true,
1445
+ disabled: maxQuantity === 0
1446
+ }), /*#__PURE__*/external_react_default().createElement("span", {
1447
+ className: "input-group-btn"
1448
+ }, /*#__PURE__*/external_react_default().createElement("button", {
1449
+ "aria-label": "add a ticket",
1450
+ className: "btn btn-default",
1451
+ onClick: incrementQuantity,
1452
+ disabled: maxQuantity === 0 || quantity >= maxQuantity
1453
+ }, /*#__PURE__*/external_react_default().createElement("i", {
1454
+ className: "glyphicon glyphicon-plus"
1455
+ })))))), /*#__PURE__*/external_react_default().createElement("a", {
1456
+ className: ticket_type_index_module.moreInfo,
1457
+ "data-tip": true,
1458
+ "data-for": "ticket-quantity-info"
1459
+ }, /*#__PURE__*/external_react_default().createElement("i", {
1460
+ className: "glyphicon glyphicon-info-sign",
1461
+ "aria-hidden": "true"
1462
+ }), ` `, "Need multiple ticket types?"), /*#__PURE__*/external_react_default().createElement((external_react_tooltip_default()), {
1463
+ id: "ticket-quantity-info"
1464
+ }, /*#__PURE__*/external_react_default().createElement("div", {
1465
+ className: ticket_type_index_module.moreInfoTooltip
1466
+ }, "In order to select multiple tickets of a different type, you may place a new registration order after you complete this order.")))), inPersonDisclaimer && ticket && isInPersonTicketType(ticket) && /*#__PURE__*/external_react_default().createElement("div", {
1467
+ className: ticket_type_index_module.inPersonDisclaimer
1468
+ }, /*#__PURE__*/external_react_default().createElement((raw_html_default()), null, inPersonDisclaimer)))));
1469
+ };
1470
+
1471
+ /* harmony default export */ const ticket_type = (TicketTypeComponent);
1472
+ ;// CONCATENATED MODULE: ./src/components/button-bar/index.module.scss
1473
+ // extracted by mini-css-extract-plugin
1474
+ /* harmony default export */ const button_bar_index_module = ({"button":"button___MZBIY","outerWrapper":"outerWrapper___XRnaq","innerWrapper":"innerWrapper___LFsOH","registration":"registration___jdf6T","actions":"actions___Gsf0y"});
1475
+ ;// CONCATENATED MODULE: ./src/components/button-bar/index.js
1476
+ /**
1477
+ * Copyright 2020 OpenStack Foundation
1478
+ * Licensed under the Apache License, Version 2.0 (the "License");
1479
+ * you may not use this file except in compliance with the License.
1480
+ * You may obtain a copy of the License at
1481
+ * http://www.apache.org/licenses/LICENSE-2.0
1482
+ * Unless required by applicable law or agreed to in writing, software
1483
+ * distributed under the License is distributed on an "AS IS" BASIS,
1484
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1485
+ * See the License for the specific language governing permissions and
1486
+ * limitations under the License.
1487
+ **/
1488
+
1489
+
1490
+
1491
+
1492
+ const ButtonBarComponent = ({
1493
+ step,
1494
+ changeStep,
1495
+ formValues,
1496
+ removeReservedTicket,
1497
+ inPersonDisclaimer
1498
+ }) => {
1499
+ const {
1500
+ ticketType
1501
+ } = formValues || {};
1502
+ const nextButtonText = inPersonDisclaimer && ticketType && isInPersonTicketType(ticketType) ? 'Accept' : 'Next';
1503
+ return /*#__PURE__*/external_react_default().createElement("div", {
1504
+ className: `${button_bar_index_module.outerWrapper}`
1505
+ }, step !== 3 && /*#__PURE__*/external_react_default().createElement((external_react_default()).Fragment, null, /*#__PURE__*/external_react_default().createElement("div", {
1506
+ className: `${button_bar_index_module.innerWrapper}`
1507
+ }, /*#__PURE__*/external_react_default().createElement("div", {
1508
+ className: button_bar_index_module.required
1509
+ }, step !== 0 && /*#__PURE__*/external_react_default().createElement("span", null, "* Required fields ", /*#__PURE__*/external_react_default().createElement("br", null), " ")), /*#__PURE__*/external_react_default().createElement("div", {
1510
+ className: button_bar_index_module.actions
1511
+ }, step !== 0 && step !== 2 && /*#__PURE__*/external_react_default().createElement("button", {
1512
+ className: `${button_bar_index_module.button} button`,
1513
+ onClick: () => changeStep(step - 1)
1514
+ }, "< Back"), step !== 0 && step === 2 && /*#__PURE__*/external_react_default().createElement("button", {
1515
+ className: `${button_bar_index_module.button} button`,
1516
+ onClick: () => removeReservedTicket()
1517
+ }, "< Back"), step === 0 && /*#__PURE__*/external_react_default().createElement("button", {
1518
+ disabled: !ticketType,
1519
+ className: `${button_bar_index_module.button} button`,
1520
+ onClick: () => changeStep(step + 1)
1521
+ }, nextButtonText), step === 1 && (ticketType === null || ticketType === void 0 ? void 0 : ticketType.cost) === 0 && /*#__PURE__*/external_react_default().createElement("button", {
1522
+ className: `${button_bar_index_module.button} button`,
1523
+ type: "submit",
1524
+ form: "personal-info-form"
1525
+ }, "Get Ticket"), step === 1 && (ticketType === null || ticketType === void 0 ? void 0 : ticketType.cost) > 0 && /*#__PURE__*/external_react_default().createElement("button", {
1526
+ className: `${button_bar_index_module.button} button`,
1527
+ type: "submit",
1528
+ form: "personal-info-form"
1529
+ }, "Next"), step === 2 && /*#__PURE__*/external_react_default().createElement("button", {
1530
+ className: `${button_bar_index_module.button} button`,
1531
+ type: "submit",
1532
+ form: "payment-form"
1533
+ }, "Pay Now")))));
1534
+ };
1535
+
1536
+ /* harmony default export */ const button_bar = (ButtonBarComponent);
1537
+ ;// CONCATENATED MODULE: ./src/components/purchase-complete/index.module.scss
1538
+ // extracted by mini-css-extract-plugin
1539
+ /* harmony default export */ const purchase_complete_index_module = ({"button":"button___XMN8a","wrapper":"wrapper___Jd5Xg","circle":"circle___lcN86","complete":"complete___HAHzl","actions":"actions___jJdPX","footer":"footer___FL9TW"});
1540
+ ;// CONCATENATED MODULE: external "openstack-uicore-foundation/lib/utils/methods"
1541
+ const methods_namespaceObject = require("openstack-uicore-foundation/lib/utils/methods");
1542
+ ;// CONCATENATED MODULE: ./src/components/purchase-complete/index.js
1543
+ /**
1544
+ * Copyright 2020 OpenStack Foundation
1545
+ * Licensed under the Apache License, Version 2.0 (the "License");
1546
+ * you may not use this file except in compliance with the License.
1547
+ * You may obtain a copy of the License at
1548
+ * http://www.apache.org/licenses/LICENSE-2.0
1549
+ * Unless required by applicable law or agreed to in writing, software
1550
+ * distributed under the License is distributed on an "AS IS" BASIS,
1551
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1552
+ * See the License for the specific language governing permissions and
1553
+ * limitations under the License.
1554
+ **/
1555
+
1556
+
1557
+
1558
+
1559
+ const PurchaseComplete = ({
1560
+ checkout,
1561
+ onPurchaseComplete,
1562
+ goToExtraQuestions,
1563
+ goToEvent,
1564
+ summit,
1565
+ supportEmail = "support@fntech.com"
1566
+ }) => {
1567
+ (0,external_react_namespaceObject.useEffect)(() => {
1568
+ onPurchaseComplete(checkout);
1569
+ }, []);
1570
+ const date = new Date();
1571
+ let now_utc = Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds()) / 1000;
1572
+ const isActive = summit.start_date < now_utc && summit.end_date > now_utc;
1573
+ const startDateFormatted = {
1574
+ date: (0,methods_namespaceObject.epochToMomentTimeZone)(summit.start_date, summit.time_zone_id).format('MMMM D'),
1575
+ time: (0,methods_namespaceObject.epochToMomentTimeZone)(summit.start_date, summit.time_zone_id).format('HH:mm')
1576
+ };
1577
+
1578
+ const needExtraQuestions = () => {
1579
+ return summit.order_extra_questions.some(q => q.mandatory === true) ? true : false;
1580
+ };
1581
+
1582
+ return /*#__PURE__*/external_react_default().createElement("div", {
1583
+ className: purchase_complete_index_module.wrapper
1584
+ }, /*#__PURE__*/external_react_default().createElement("div", {
1585
+ className: purchase_complete_index_module.circle
1586
+ }, /*#__PURE__*/external_react_default().createElement("i", {
1587
+ className: "fa fa-ticket"
1588
+ })), /*#__PURE__*/external_react_default().createElement("span", {
1589
+ className: purchase_complete_index_module.complete
1590
+ }, "Your order is complete"), isActive ? needExtraQuestions() ? /*#__PURE__*/external_react_default().createElement((external_react_default()).Fragment, null, /*#__PURE__*/external_react_default().createElement("span", null, "This ticket requires additional details. ", /*#__PURE__*/external_react_default().createElement("br", null)), /*#__PURE__*/external_react_default().createElement("button", {
1591
+ className: `${purchase_complete_index_module.button} button`,
1592
+ onClick: () => goToExtraQuestions()
1593
+ }, "Finish now")) : /*#__PURE__*/external_react_default().createElement((external_react_default()).Fragment, null, /*#__PURE__*/external_react_default().createElement("button", {
1594
+ className: `${purchase_complete_index_module.button} button`,
1595
+ onClick: () => goToEvent()
1596
+ }, "Access event now")) : /*#__PURE__*/external_react_default().createElement((external_react_default()).Fragment, null, /*#__PURE__*/external_react_default().createElement("span", null, "The event will start on ", startDateFormatted.date, " at ", startDateFormatted.time, " ", summit.time_zone_label, " ", /*#__PURE__*/external_react_default().createElement("br", null), "This ticket requires additional details."), /*#__PURE__*/external_react_default().createElement("div", {
1597
+ className: purchase_complete_index_module.actions
1598
+ }, /*#__PURE__*/external_react_default().createElement("button", {
1599
+ className: `${purchase_complete_index_module.button} button`,
1600
+ onClick: () => goToExtraQuestions()
1601
+ }, "Finish Now"), /*#__PURE__*/external_react_default().createElement("button", {
1602
+ className: `${purchase_complete_index_module.button} button`,
1603
+ onClick: () => goToEvent()
1604
+ }, "Do this later"))), /*#__PURE__*/external_react_default().createElement("span", {
1605
+ className: purchase_complete_index_module.footer
1606
+ }, "For further assistance, please email ", /*#__PURE__*/external_react_default().createElement("a", {
1607
+ href: `mailto:${supportEmail}`
1608
+ }, supportEmail)));
1609
+ };
1610
+
1611
+ /* harmony default export */ const purchase_complete = (PurchaseComplete);
1612
+ ;// CONCATENATED MODULE: external "react-otp-input"
1613
+ const external_react_otp_input_namespaceObject = require("react-otp-input");
1614
+ var external_react_otp_input_default = /*#__PURE__*/__webpack_require__.n(external_react_otp_input_namespaceObject);
1615
+ ;// CONCATENATED MODULE: ./src/components/login-passwordless/index.module.scss
1616
+ // extracted by mini-css-extract-plugin
1617
+ /* harmony default export */ const login_passwordless_index_module = ({"passwordlessWrapper":"passwordlessWrapper___BRQ_s","innerWrapper":"innerWrapper___nRLDi","digits":"digits___Vu5iy","codeInput":"codeInput___LnTZe","error":"error___wZflZ","verify":"verify___IBgMl","button":"button___nBhtQ","link":"link___f6fDT","resend":"resend___Nma1U"});
1618
+ ;// CONCATENATED MODULE: ./src/components/login-passwordless/index.js
1619
+ /**
1620
+ * Copyright 2020 OpenStack Foundation
1621
+ * Licensed under the Apache License, Version 2.0 (the "License");
1622
+ * you may not use this file except in compliance with the License.
1623
+ * You may obtain a copy of the License at
1624
+ * http://www.apache.org/licenses/LICENSE-2.0
1625
+ * Unless required by applicable law or agreed to in writing, software
1626
+ * distributed under the License is distributed on an "AS IS" BASIS,
1627
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1628
+ * See the License for the specific language governing permissions and
1629
+ * limitations under the License.
1630
+ **/
1631
+
1632
+
1633
+
1634
+
1635
+
1636
+ const PasswordlessLoginComponent = ({
1637
+ email,
1638
+ codeLength,
1639
+ passwordlessLogin,
1640
+ loginWithCode,
1641
+ codeError,
1642
+ goToLogin,
1643
+ getLoginCode,
1644
+ getPasswordlessCode
1645
+ }) => {
1646
+ const [otpCode, setOtpCode] = (0,external_react_namespaceObject.useState)('');
1647
+ const [otpError, setOtpError] = (0,external_react_namespaceObject.useState)(false);
1648
+
1649
+ const tryPasswordlessLogin = code => {
1650
+ if (code.length === codeLength) {
1651
+ setOtpError(false);
1652
+ passwordlessLogin(otpCode, loginWithCode);
1653
+ } else {
1654
+ setOtpError(true);
1655
+ }
1656
+ };
1657
+
1658
+ const resendCode = () => {
1659
+ getLoginCode(email, getPasswordlessCode);
1660
+ };
1661
+
1662
+ return /*#__PURE__*/external_react_default().createElement("div", {
1663
+ className: `${login_passwordless_index_module.passwordlessWrapper} step-wrapper`
1664
+ }, /*#__PURE__*/external_react_default().createElement((external_react_default()).Fragment, null, /*#__PURE__*/external_react_default().createElement("div", {
1665
+ className: `${login_passwordless_index_module.innerWrapper}`
1666
+ }, /*#__PURE__*/external_react_default().createElement("span", null, "We sent your single-use login code to ", /*#__PURE__*/external_react_default().createElement("br", null), /*#__PURE__*/external_react_default().createElement("span", {
1667
+ "data-testid": "email"
1668
+ }, email), /*#__PURE__*/external_react_default().createElement("br", null), /*#__PURE__*/external_react_default().createElement("span", {
1669
+ className: login_passwordless_index_module.digits,
1670
+ "data-testid": "code-digits"
1671
+ }, "Add the ", codeLength, " digit code below")), /*#__PURE__*/external_react_default().createElement("div", {
1672
+ className: login_passwordless_index_module.codeInput
1673
+ }, /*#__PURE__*/external_react_default().createElement((external_react_otp_input_default()), {
1674
+ value: otpCode,
1675
+ onChange: code => setOtpCode(code),
1676
+ numInputs: codeLength,
1677
+ shouldAutoFocus: true,
1678
+ hasErrored: otpError || codeError,
1679
+ errorStyle: {
1680
+ border: '1px solid #e5424d'
1681
+ },
1682
+ "data-testid": "otp-input"
1683
+ })), codeError && /*#__PURE__*/external_react_default().createElement("span", {
1684
+ className: login_passwordless_index_module.error,
1685
+ "data-testid": "error"
1686
+ }, "The code you entered it's incorrect. ", /*#__PURE__*/external_react_default().createElement("br", null), " Please try again."), /*#__PURE__*/external_react_default().createElement("div", {
1687
+ className: login_passwordless_index_module.verify
1688
+ }, /*#__PURE__*/external_react_default().createElement("div", {
1689
+ className: `${login_passwordless_index_module.button} button`,
1690
+ onClick: () => tryPasswordlessLogin(otpCode),
1691
+ "data-testid": "verify"
1692
+ }, "Verify"), /*#__PURE__*/external_react_default().createElement("b", null, "or go back and ", /*#__PURE__*/external_react_default().createElement("span", {
1693
+ className: login_passwordless_index_module.link,
1694
+ onClick: () => goToLogin(),
1695
+ "data-testid": "go-back"
1696
+ }, "try another way")))), /*#__PURE__*/external_react_default().createElement("div", {
1697
+ className: login_passwordless_index_module.resend
1698
+ }, "Didn\u2019t receive it? Check your spam/junk folder, or ", /*#__PURE__*/external_react_default().createElement("span", {
1699
+ className: login_passwordless_index_module.link,
1700
+ onClick: () => resendCode(),
1701
+ "data-testid": "resend"
1702
+ }, "resend email"), " now.")));
1703
+ };
1704
+
1705
+ /* harmony default export */ const login_passwordless = (PasswordlessLoginComponent);
1706
+ ;// CONCATENATED MODULE: ./src/components/ticket-owned/index.module.scss
1707
+ // extracted by mini-css-extract-plugin
1708
+ /* harmony default export */ const ticket_owned_index_module = ({"ticketOwnedWrapper":"ticketOwnedWrapper___nhkDY","alert":"alert___c49oP"});
1709
+ ;// CONCATENATED MODULE: ./src/components/ticket-owned/index.js
1710
+ /**
1711
+ * Copyright 2020 OpenStack Foundation
1712
+ * Licensed under the Apache License, Version 2.0 (the "License");
1713
+ * you may not use this file except in compliance with the License.
1714
+ * You may obtain a copy of the License at
1715
+ * http://www.apache.org/licenses/LICENSE-2.0
1716
+ * Unless required by applicable law or agreed to in writing, software
1717
+ * distributed under the License is distributed on an "AS IS" BASIS,
1718
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1719
+ * See the License for the specific language governing permissions and
1720
+ * limitations under the License.
1721
+ **/
1722
+
1723
+
1724
+
1725
+ const TicketOwnedComponent = ({
1726
+ ownedTickets,
1727
+ ticketTypes
1728
+ }) => {
1729
+ const ownedTicketsString = (0,external_react_namespaceObject.useMemo)(() => ownedTickets.reduce((acc, ownedTicket) => {
1730
+ const ticketType = ticketTypes.find(type => type.id === ownedTicket.type_id);
1731
+ if (!ticketType) return acc;
1732
+ return `${acc}${acc ? ', ' : ''}${ownedTicket.qty} ${ticketType.name}${!ticketType.name.toLowerCase().endsWith('ticket') ? ' ticket' : ''}${ownedTicket.qty > 1 ? 's' : ''}`;
1733
+ }, ''), [ownedTickets, ticketTypes]);
1734
+ return /*#__PURE__*/external_react_default().createElement("div", {
1735
+ className: ticket_owned_index_module.ticketOwnedWrapper
1736
+ }, /*#__PURE__*/external_react_default().createElement("div", {
1737
+ className: `${ticket_owned_index_module.alert} alert alert-warning`,
1738
+ role: "alert"
1739
+ }, "You have already ordered ", ownedTicketsString, ". If you would like to order more tickets, please do so below."));
1740
+ };
1741
+
1742
+ /* harmony default export */ const ticket_owned = (TicketOwnedComponent);
1743
+ ;// CONCATENATED MODULE: ./src/components/registration-lite.js
1744
+ const registration_lite_excluded = ["loadSession", "setMarketingSettings", "changeStep", "removeReservedTicket", "reserveTicket", "payTicket", "onPurchaseComplete", "getTicketTypes", "getTaxesTypes", "getLoginCode", "passwordlessLogin", "goToLogin", "loginOptions", "allowsNativeAuth", "allowsOtpAuth", "reservation", "checkout", "ticketTypes", "taxTypes", "step", "passwordlessCodeSent", "passwordlessEmail", "passwordlessCode", "getPasswordlessCode", "passwordlessCodeError", "loginWithCode", "goToExtraQuestions", "goToEvent", "goToRegistration", "profileData", "summitData", "supportEmail", "ticketOwned", "ownedTickets", "widgetLoading", "loading", "inPersonDisclaimer", "userProfile", "handleCompanyError"];
1745
+
1746
+ function registration_lite_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1747
+
1748
+ function registration_lite_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? registration_lite_ownKeys(Object(source), !0).forEach(function (key) { registration_lite_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : registration_lite_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1749
+
1750
+ function registration_lite_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
1751
+
1752
+ function registration_lite_objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = registration_lite_objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
1753
+
1754
+ function registration_lite_objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
1755
+
1756
+ /**
1757
+ * Copyright 2020 OpenStack Foundation
1758
+ * Licensed under the Apache License, Version 2.0 (the "License");
1759
+ * you may not use this file except in compliance with the License.
1760
+ * You may obtain a copy of the License at
1761
+ * http://www.apache.org/licenses/LICENSE-2.0
1762
+ * Unless required by applicable law or agreed to in writing, software
1763
+ * distributed under the License is distributed on an "AS IS" BASIS,
1764
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1765
+ * See the License for the specific language governing permissions and
1766
+ * limitations under the License.
1767
+ **/
1768
+
1769
+
1770
+
1771
+
1772
+
1773
+
1774
+
1775
+
1776
+
1777
+
1778
+
1779
+
1780
+
1781
+
1782
+
1783
+
1784
+
1785
+
1786
+ const RegistrationLite = _ref => {
1787
+ var _formValues$ticketTyp, _formValues$ticketTyp2;
1788
+
1789
+ let {
1790
+ loadSession,
1791
+ setMarketingSettings,
1792
+ changeStep,
1793
+ removeReservedTicket,
1794
+ reserveTicket,
1795
+ payTicket,
1796
+ onPurchaseComplete,
1797
+ getTicketTypes,
1798
+ getTaxesTypes,
1799
+ getLoginCode,
1800
+ passwordlessLogin,
1801
+ goToLogin,
1802
+ loginOptions,
1803
+ allowsNativeAuth,
1804
+ allowsOtpAuth,
1805
+ reservation,
1806
+ checkout,
1807
+ ticketTypes,
1808
+ taxTypes,
1809
+ step,
1810
+ passwordlessCodeSent,
1811
+ passwordlessEmail,
1812
+ passwordlessCode,
1813
+ getPasswordlessCode,
1814
+ passwordlessCodeError,
1815
+ loginWithCode,
1816
+ goToExtraQuestions,
1817
+ goToEvent,
1818
+ goToRegistration,
1819
+ profileData,
1820
+ summitData,
1821
+ supportEmail,
1822
+ ticketOwned,
1823
+ ownedTickets,
1824
+ widgetLoading,
1825
+ loading,
1826
+ inPersonDisclaimer,
1827
+ userProfile,
1828
+ handleCompanyError
1829
+ } = _ref,
1830
+ rest = registration_lite_objectWithoutProperties(_ref, registration_lite_excluded);
1831
+
1832
+ const [registrationForm, setRegistrationForm] = (0,external_react_namespaceObject.useState)({
1833
+ values: {
1834
+ ticketType: null,
1835
+ ticketQuantity: 1,
1836
+ personalInformation: null,
1837
+ paymentInformation: null
1838
+ },
1839
+ errors: []
1840
+ });
1841
+ const {
1842
+ values: formValues,
1843
+ errors: formErrors
1844
+ } = registrationForm;
1845
+
1846
+ const setFormValues = values => setRegistrationForm(registration_lite_objectSpread(registration_lite_objectSpread({}, registrationForm), {}, {
1847
+ values
1848
+ }));
1849
+
1850
+ const setFormErrors = errors => setRegistrationForm(registration_lite_objectSpread(registration_lite_objectSpread({}, registrationForm), {}, {
1851
+ errors
1852
+ }));
1853
+
1854
+ let publicKey = null;
1855
+
1856
+ for (let profile of summitData.payment_profiles) {
1857
+ if (profile.application_type === 'Registration') {
1858
+ publicKey = profile.test_mode_enabled ? profile.test_publishable_key : profile.live_publishable_key;
1859
+ break;
1860
+ }
1861
+ }
1862
+
1863
+ const stripePromise = (0,external_react_namespaceObject.useMemo)(() => (0,stripe_js_namespaceObject.loadStripe)(publicKey), [publicKey]);
1864
+ (0,external_react_namespaceObject.useEffect)(() => {
1865
+ loadSession(registration_lite_objectSpread(registration_lite_objectSpread({}, rest), {}, {
1866
+ summitData,
1867
+ profileData
1868
+ }));
1869
+
1870
+ if (!profileData) {
1871
+ changeStep(0);
1872
+ }
1873
+ }, [profileData]);
1874
+ (0,external_react_namespaceObject.useEffect)(() => {
1875
+ if (summitData && profileData) {
1876
+ getTicketTypes(summitData.id).then(() => getTaxesTypes(summitData.id));
1877
+ }
1878
+ }, [summitData, profileData]);
1879
+ (0,external_react_namespaceObject.useEffect)(() => {
1880
+ if (step === 1 && formValues !== null && formValues !== void 0 && formValues.ticketType && formValues !== null && formValues !== void 0 && formValues.personalInformation) {
1881
+ reserveTicket({
1882
+ personalInformation: formValues === null || formValues === void 0 ? void 0 : formValues.personalInformation,
1883
+ ticket: formValues === null || formValues === void 0 ? void 0 : formValues.ticketType,
1884
+ ticketQuantity: formValues === null || formValues === void 0 ? void 0 : formValues.ticketQuantity
1885
+ }, {
1886
+ onError: (err, res) => setFormErrors(res.body.errors)
1887
+ });
1888
+ }
1889
+
1890
+ if (step > 0 && !(formValues !== null && formValues !== void 0 && formValues.ticketType)) {
1891
+ changeStep(0);
1892
+ }
1893
+ }, [formValues]);
1894
+ (0,external_react_namespaceObject.useEffect)(() => {
1895
+ setFormErrors([]);
1896
+ }, [step]);
1897
+ const [ref, {
1898
+ height
1899
+ }] = (0,external_react_use_namespaceObject.useMeasure)();
1900
+ const toggleAnimation = (0,external_react_spring_namespaceObject.useSpring)({
1901
+ config: registration_lite_objectSpread({
1902
+ bounce: 0
1903
+ }, external_react_spring_namespaceObject.config.stiff),
1904
+ to: {
1905
+ opacity: (formValues === null || formValues === void 0 ? void 0 : (_formValues$ticketTyp = formValues.ticketType) === null || _formValues$ticketTyp === void 0 ? void 0 : _formValues$ticketTyp.cost) === 0 ? 0 : 1,
1906
+ height: (formValues === null || formValues === void 0 ? void 0 : (_formValues$ticketTyp2 = formValues.ticketType) === null || _formValues$ticketTyp2 === void 0 ? void 0 : _formValues$ticketTyp2.cost) === 0 ? 0 : height
1907
+ }
1908
+ });
1909
+
1910
+ const handleCloseClick = () => {
1911
+ // Reset the step when closed to avoid unexpected behavior from `useEffect`s w/in other steps.
1912
+ // (i.e., recalling `onPurchaseComplete` after a user completes one order, closes the window, and then reopens the registration widget)
1913
+ changeStep(0);
1914
+ rest.closeWidget();
1915
+ };
1916
+
1917
+ return /*#__PURE__*/external_react_default().createElement("div", {
1918
+ id: "modal",
1919
+ className: "modal is-active"
1920
+ }, /*#__PURE__*/external_react_default().createElement("div", {
1921
+ className: "modal-background"
1922
+ }), /*#__PURE__*/external_react_default().createElement("div", {
1923
+ className: "modal-content"
1924
+ }, /*#__PURE__*/external_react_default().createElement((ajaxloader_default()), {
1925
+ relative: true,
1926
+ color: '#ffffff',
1927
+ show: widgetLoading || loading,
1928
+ size: 80
1929
+ }), /*#__PURE__*/external_react_default().createElement("div", {
1930
+ className: `${general_module.outerWrapper} summit-registration-lite`
1931
+ }, /*#__PURE__*/external_react_default().createElement("div", {
1932
+ className: general_module.innerWrapper
1933
+ }, /*#__PURE__*/external_react_default().createElement("div", {
1934
+ className: general_module.title
1935
+ }, /*#__PURE__*/external_react_default().createElement("span", null, summitData.name), /*#__PURE__*/external_react_default().createElement("i", {
1936
+ className: "fa fa-close",
1937
+ "aria-label": "close",
1938
+ onClick: handleCloseClick
1939
+ })), /*#__PURE__*/external_react_default().createElement("div", {
1940
+ className: general_module.stepsWrapper
1941
+ }, !profileData && !passwordlessCodeSent && /*#__PURE__*/external_react_default().createElement(login, {
1942
+ options: loginOptions,
1943
+ allowsNativeAuth: allowsNativeAuth,
1944
+ allowsOtpAuth: allowsOtpAuth,
1945
+ login: provider => rest.authUser(provider),
1946
+ getLoginCode: getLoginCode,
1947
+ getPasswordlessCode: getPasswordlessCode
1948
+ }), !profileData && passwordlessCodeSent && /*#__PURE__*/external_react_default().createElement(login_passwordless, {
1949
+ codeLength: passwordlessCode,
1950
+ email: passwordlessEmail,
1951
+ passwordlessLogin: passwordlessLogin,
1952
+ loginWithCode: loginWithCode,
1953
+ codeError: passwordlessCodeError,
1954
+ goToLogin: goToLogin,
1955
+ getLoginCode: getLoginCode,
1956
+ getPasswordlessCode: getPasswordlessCode
1957
+ }), profileData && step !== 3 && ticketTypes.length > 0 && /*#__PURE__*/external_react_default().createElement((external_react_default()).Fragment, null, ticketOwned && /*#__PURE__*/external_react_default().createElement(ticket_owned, {
1958
+ ownedTickets: ownedTickets,
1959
+ ticketTypes: ticketTypes
1960
+ }), /*#__PURE__*/external_react_default().createElement(ticket_type, {
1961
+ ticketTypes: ticketTypes,
1962
+ inPersonDisclaimer: inPersonDisclaimer,
1963
+ taxTypes: taxTypes,
1964
+ reservation: reservation,
1965
+ isActive: step === 0,
1966
+ changeForm: ticketForm => setFormValues(registration_lite_objectSpread(registration_lite_objectSpread({}, formValues), ticketForm))
1967
+ }), /*#__PURE__*/external_react_default().createElement(personal_information, {
1968
+ isActive: step === 1,
1969
+ reservation: reservation,
1970
+ userProfile: profileData,
1971
+ summitId: summitData.id,
1972
+ changeForm: personalInformation => setFormValues(registration_lite_objectSpread(registration_lite_objectSpread({}, formValues), {}, {
1973
+ personalInformation
1974
+ })),
1975
+ handleCompanyError: handleCompanyError,
1976
+ formValues: formValues,
1977
+ formErrors: formErrors
1978
+ }), /*#__PURE__*/external_react_default().createElement(external_react_spring_namespaceObject.animated.div, {
1979
+ style: registration_lite_objectSpread({}, toggleAnimation)
1980
+ }, /*#__PURE__*/external_react_default().createElement("div", {
1981
+ ref: ref
1982
+ }, /*#__PURE__*/external_react_default().createElement(payment, {
1983
+ isActive: step === 2,
1984
+ reservation: reservation,
1985
+ payTicket: payTicket,
1986
+ userProfile: profileData,
1987
+ stripeKey: stripePromise
1988
+ })))), profileData && step === 3 && /*#__PURE__*/external_react_default().createElement(purchase_complete, {
1989
+ checkout: checkout,
1990
+ summit: summitData,
1991
+ onPurchaseComplete: onPurchaseComplete,
1992
+ supportEmail: supportEmail,
1993
+ goToEvent: goToEvent,
1994
+ goToExtraQuestions: goToExtraQuestions
1995
+ })), profileData && step !== 3 && /*#__PURE__*/external_react_default().createElement(button_bar, {
1996
+ step: step,
1997
+ inPersonDisclaimer: inPersonDisclaimer,
1998
+ formValues: formValues,
1999
+ removeReservedTicket: removeReservedTicket,
2000
+ changeStep: changeStep
2001
+ })))));
2002
+ };
2003
+
2004
+ const registration_lite_mapStateToProps = ({
2005
+ registrationLiteState
2006
+ }) => ({
2007
+ widgetLoading: registrationLiteState.widgetLoading,
2008
+ reservation: registrationLiteState.reservation,
2009
+ userProfile: registrationLiteState.settings.userProfile,
2010
+ checkout: registrationLiteState.checkout,
2011
+ ticketTypes: registrationLiteState.ticketTypes,
2012
+ taxTypes: registrationLiteState.taxTypes,
2013
+ step: registrationLiteState.step,
2014
+ passwordlessEmail: registrationLiteState.passwordless.email,
2015
+ passwordlessCode: registrationLiteState.passwordless.otp_length,
2016
+ passwordlessCodeSent: registrationLiteState.passwordless.code_sent,
2017
+ passwordlessCodeError: registrationLiteState.passwordless.error
2018
+ });
2019
+
2020
+ /* harmony default export */ const registration_lite = ((0,external_react_redux_namespaceObject.connect)(registration_lite_mapStateToProps, {
2021
+ loadSession: loadSession,
2022
+ changeStep: changeStep,
2023
+ reserveTicket: reserveTicket,
2024
+ removeReservedTicket: removeReservedTicket,
2025
+ payTicket: payTicket,
2026
+ getTicketTypes: getTicketTypes,
2027
+ getTaxesTypes: getTaxesTypes,
2028
+ getLoginCode: getLoginCode,
2029
+ passwordlessLogin: passwordlessLogin,
2030
+ goToLogin: goToLogin
2031
+ })(RegistrationLite));
2032
+ ;// CONCATENATED MODULE: ./src/summit-registration-lite.js
2033
+ /**
2034
+ * Copyright 2017 OpenStack Foundation
2035
+ * Licensed under the Apache License, Version 2.0 (the "License");
2036
+ * you may not use this file except in compliance with the License.
2037
+ * You may obtain a copy of the License at
2038
+ * http://www.apache.org/licenses/LICENSE-2.0
2039
+ * Unless required by applicable law or agreed to in writing, software
2040
+ * distributed under the License is distributed on an "AS IS" BASIS,
2041
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2042
+ * See the License for the specific language governing permissions and
2043
+ * limitations under the License.
2044
+ **/
2045
+
2046
+
2047
+
2048
+
2049
+
2050
+
2051
+ class RegistrationLiteWidget extends (external_react_default()).PureComponent {
2052
+ constructor(props) {
2053
+ super(props);
2054
+ this.store = getStore(props.clientId, props.apiBaseUrl, props.getAccessToken);
2055
+ }
2056
+
2057
+ render() {
2058
+ return /*#__PURE__*/external_react_default().createElement(external_react_redux_namespaceObject.Provider, {
2059
+ store: this.store
2060
+ }, /*#__PURE__*/external_react_default().createElement(react_namespaceObject.PersistGate, {
2061
+ persistor: getPersistor()
2062
+ }, /*#__PURE__*/external_react_default().createElement(registration_lite, this.props)));
2063
+ }
2064
+
2065
+ }
2066
+
2067
+ /* harmony default export */ const summit_registration_lite = (RegistrationLiteWidget);
2068
+ /******/ return __webpack_exports__;
2069
+ /******/ })()
2070
+ ;
2071
+ });