summit-registration-lite 2.0.5 → 2.0.6

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