summit-registration-lite 3.0.29 → 4.0.0
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.
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
.passwordlessWrapper___BRQ_s{height:400px;display:flex;justify-content:center;align-items:center;flex-direction:column}.passwordlessWrapper___BRQ_s .innerWrapper___nRLDi{text-align:center;font-weight:bold;height:100%;width:300px;display:flex;flex-direction:column;justify-content:center}.passwordlessWrapper___BRQ_s .innerWrapper___nRLDi .logo___qNVrv{width:175px;align-self:center}.passwordlessWrapper___BRQ_s .innerWrapper___nRLDi .digits___Vu5iy{margin-top:15px;display:inline-block}.passwordlessWrapper___BRQ_s .innerWrapper___nRLDi .codeInput___LnTZe{margin-top:20px;display:flex;justify-content:center}.passwordlessWrapper___BRQ_s .innerWrapper___nRLDi .codeInput___LnTZe input{height:56px;width:56px;font-size:42px;background-color:var(--color_primary50);border:1px solid var(--color_primary);border-radius:5px;padding:5px;display:inline-flex;text-transform:uppercase;text-align:center;margin:0 5px}.passwordlessWrapper___BRQ_s .innerWrapper___nRLDi .error___wZflZ{margin-top:10px;color:#e5424d;font-size:14px}.passwordlessWrapper___BRQ_s .innerWrapper___nRLDi .verify___IBgMl{margin-top:20px}.passwordlessWrapper___BRQ_s .innerWrapper___nRLDi .verify___IBgMl .button___nBhtQ{padding:10px 30px;font-weight:normal;justify-content:center;margin:5px 0;border-radius:5px;cursor:pointer;background-color:var(--color_secondary_contrast);color:#FFFFFF;width:100%;font-size:1em}.passwordlessWrapper___BRQ_s .innerWrapper___nRLDi .verify___IBgMl .link___f6fDT{color:var(--color_primary);text-decoration:underline;cursor:pointer}.passwordlessWrapper___BRQ_s .resend___Nma1U{margin:auto 0 0 0;font-weight:normal;font-size:14px}.passwordlessWrapper___BRQ_s .resend___Nma1U span{color:var(--color_primary);text-decoration:underline;cursor:pointer}
|
|
2
|
+
|
|
@@ -0,0 +1,240 @@
|
|
|
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
|
+
/******/ var __webpack_modules__ = ({
|
|
13
|
+
|
|
14
|
+
/***/ 802:
|
|
15
|
+
/***/ ((module) => {
|
|
16
|
+
|
|
17
|
+
module.exports = "data:image/svg+xml,%3c!-- Generator: Adobe Illustrator 25.4.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3e %3csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 812.24 471.64' style='enable-background:new 0 0 812.24 471.64;' xml:space='preserve'%3e %3cstyle type='text/css'%3e .st0%7bfill:%230C64C8;%7d %3c/style%3e %3cg%3e %3cpath d='M170.89,146.78l-64.77,178.08h535.23l64.77-178.08L170.89,146.78L170.89,146.78z M384.48,309.44H341.7l-25.6-80.85 l-29.41,80.85h-42.6l41.94-115.3h-65.52l-9.29,25.54h56.62l-10.8,29.7h-56.62l-21.84,60.06h-45.63l53.39-146.78h153.49l25.72,81.24 l29.56-81.24h42.75L384.48,309.44z'/%3e %3cg%3e %3cpath class='st0' d='M588.49,162.71v50.86c-4-4.27-8.59-7.47-13.76-9.61s-10.92-3.21-17.26-3.21c-13.01,0-23.73,4.67-32.17,14.02 c-8.44,9.34-12.66,22.83-12.66,40.45c0,15.75,3.82,29.13,11.46,40.15c7.64,11.01,18.69,16.52,33.17,16.52 c7.2,0,13.74-1.54,19.61-4.6c4.4-2.34,9.27-6.84,14.61-13.52v15.72h38.12V162.71H588.49z M583.59,275.94 c-3.47,4.07-7.8,6.11-13.01,6.11c-4.87,0-8.96-2.02-12.26-6.06s-4.95-10.4-4.95-19.07c0-9.28,1.6-15.88,4.8-19.82 s7.17-5.91,11.91-5.91c5.4,0,9.87,2.05,13.41,6.16c3.53,4.1,5.3,10.33,5.3,18.67C588.79,265.23,587.05,271.87,583.59,275.94z'/%3e %3cpath class='st0' d='M473.92,207.72c-14.37,0-26.03,7.27-26.03,16.25v2.96v45.48h9.09l3.47,37.09h26.95l3.47-37.09h9.09v-45.48 v-2.96C499.95,214.99,488.29,207.72,473.92,207.72z'/%3e %3cellipse transform='matrix(2.075247e-03 -1 1 2.075247e-03 290.6104 655.8611)' class='st0' cx='473.92' cy='182.32' rx='19.87' ry='19.86'/%3e %3c/g%3e %3c/g%3e %3c/svg%3e"
|
|
18
|
+
|
|
19
|
+
/***/ }),
|
|
20
|
+
|
|
21
|
+
/***/ 580:
|
|
22
|
+
/***/ ((module) => {
|
|
23
|
+
|
|
24
|
+
"use strict";
|
|
25
|
+
module.exports = require("prop-types");
|
|
26
|
+
|
|
27
|
+
/***/ }),
|
|
28
|
+
|
|
29
|
+
/***/ 689:
|
|
30
|
+
/***/ ((module) => {
|
|
31
|
+
|
|
32
|
+
"use strict";
|
|
33
|
+
module.exports = require("react");
|
|
34
|
+
|
|
35
|
+
/***/ })
|
|
36
|
+
|
|
37
|
+
/******/ });
|
|
38
|
+
/************************************************************************/
|
|
39
|
+
/******/ // The module cache
|
|
40
|
+
/******/ var __webpack_module_cache__ = {};
|
|
41
|
+
/******/
|
|
42
|
+
/******/ // The require function
|
|
43
|
+
/******/ function __webpack_require__(moduleId) {
|
|
44
|
+
/******/ // Check if module is in cache
|
|
45
|
+
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
|
46
|
+
/******/ if (cachedModule !== undefined) {
|
|
47
|
+
/******/ return cachedModule.exports;
|
|
48
|
+
/******/ }
|
|
49
|
+
/******/ // Create a new module (and put it into the cache)
|
|
50
|
+
/******/ var module = __webpack_module_cache__[moduleId] = {
|
|
51
|
+
/******/ // no module.id needed
|
|
52
|
+
/******/ // no module.loaded needed
|
|
53
|
+
/******/ exports: {}
|
|
54
|
+
/******/ };
|
|
55
|
+
/******/
|
|
56
|
+
/******/ // Execute the module function
|
|
57
|
+
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
|
58
|
+
/******/
|
|
59
|
+
/******/ // Return the exports of the module
|
|
60
|
+
/******/ return module.exports;
|
|
61
|
+
/******/ }
|
|
62
|
+
/******/
|
|
63
|
+
/************************************************************************/
|
|
64
|
+
/******/ /* webpack/runtime/compat get default export */
|
|
65
|
+
/******/ (() => {
|
|
66
|
+
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
|
67
|
+
/******/ __webpack_require__.n = (module) => {
|
|
68
|
+
/******/ var getter = module && module.__esModule ?
|
|
69
|
+
/******/ () => (module['default']) :
|
|
70
|
+
/******/ () => (module);
|
|
71
|
+
/******/ __webpack_require__.d(getter, { a: getter });
|
|
72
|
+
/******/ return getter;
|
|
73
|
+
/******/ };
|
|
74
|
+
/******/ })();
|
|
75
|
+
/******/
|
|
76
|
+
/******/ /* webpack/runtime/define property getters */
|
|
77
|
+
/******/ (() => {
|
|
78
|
+
/******/ // define getter functions for harmony exports
|
|
79
|
+
/******/ __webpack_require__.d = (exports, definition) => {
|
|
80
|
+
/******/ for(var key in definition) {
|
|
81
|
+
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
|
82
|
+
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
|
83
|
+
/******/ }
|
|
84
|
+
/******/ }
|
|
85
|
+
/******/ };
|
|
86
|
+
/******/ })();
|
|
87
|
+
/******/
|
|
88
|
+
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
|
89
|
+
/******/ (() => {
|
|
90
|
+
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
|
|
91
|
+
/******/ })();
|
|
92
|
+
/******/
|
|
93
|
+
/******/ /* webpack/runtime/make namespace object */
|
|
94
|
+
/******/ (() => {
|
|
95
|
+
/******/ // define __esModule on exports
|
|
96
|
+
/******/ __webpack_require__.r = (exports) => {
|
|
97
|
+
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
|
98
|
+
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
99
|
+
/******/ }
|
|
100
|
+
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
|
101
|
+
/******/ };
|
|
102
|
+
/******/ })();
|
|
103
|
+
/******/
|
|
104
|
+
/************************************************************************/
|
|
105
|
+
var __webpack_exports__ = {};
|
|
106
|
+
// This entry need to be wrapped in an IIFE because it need to be in strict mode.
|
|
107
|
+
(() => {
|
|
108
|
+
"use strict";
|
|
109
|
+
// ESM COMPAT FLAG
|
|
110
|
+
__webpack_require__.r(__webpack_exports__);
|
|
111
|
+
|
|
112
|
+
// EXPORTS
|
|
113
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
114
|
+
"default": () => (/* binding */ login_passwordless)
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
// EXTERNAL MODULE: external "react"
|
|
118
|
+
var external_react_ = __webpack_require__(689);
|
|
119
|
+
var external_react_default = /*#__PURE__*/__webpack_require__.n(external_react_);
|
|
120
|
+
// EXTERNAL MODULE: external "prop-types"
|
|
121
|
+
var external_prop_types_ = __webpack_require__(580);
|
|
122
|
+
var external_prop_types_default = /*#__PURE__*/__webpack_require__.n(external_prop_types_);
|
|
123
|
+
;// CONCATENATED MODULE: external "react-otp-input"
|
|
124
|
+
const external_react_otp_input_namespaceObject = require("react-otp-input");
|
|
125
|
+
var external_react_otp_input_default = /*#__PURE__*/__webpack_require__.n(external_react_otp_input_namespaceObject);
|
|
126
|
+
;// CONCATENATED MODULE: ./src/components/login-passwordless/index.module.scss
|
|
127
|
+
// extracted by mini-css-extract-plugin
|
|
128
|
+
/* harmony default export */ const index_module = ({"passwordlessWrapper":"passwordlessWrapper___BRQ_s","innerWrapper":"innerWrapper___nRLDi","logo":"logo___qNVrv","digits":"digits___Vu5iy","codeInput":"codeInput___LnTZe","error":"error___wZflZ","verify":"verify___IBgMl","button":"button___nBhtQ","link":"link___f6fDT","resend":"resend___Nma1U"});
|
|
129
|
+
// EXTERNAL MODULE: ./src/assets/FNid_WHT_logo_rgb.svg
|
|
130
|
+
var FNid_WHT_logo_rgb = __webpack_require__(802);
|
|
131
|
+
var FNid_WHT_logo_rgb_default = /*#__PURE__*/__webpack_require__.n(FNid_WHT_logo_rgb);
|
|
132
|
+
;// CONCATENATED MODULE: ./src/components/login-passwordless/index.js
|
|
133
|
+
/**
|
|
134
|
+
* Copyright 2020 OpenStack Foundation
|
|
135
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
136
|
+
* you may not use this file except in compliance with the License.
|
|
137
|
+
* You may obtain a copy of the License at
|
|
138
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
139
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
140
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
141
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
142
|
+
* See the License for the specific language governing permissions and
|
|
143
|
+
* limitations under the License.
|
|
144
|
+
**/
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
const PasswordlessLoginComponent = ({
|
|
152
|
+
email,
|
|
153
|
+
codeLength,
|
|
154
|
+
passwordlessLogin,
|
|
155
|
+
loginWithCode,
|
|
156
|
+
codeError,
|
|
157
|
+
goToLogin,
|
|
158
|
+
getLoginCode,
|
|
159
|
+
getPasswordlessCode
|
|
160
|
+
}) => {
|
|
161
|
+
const [otpCode, setOtpCode] = (0,external_react_.useState)('');
|
|
162
|
+
const [otpError, setOtpError] = (0,external_react_.useState)(false);
|
|
163
|
+
|
|
164
|
+
const tryPasswordlessLogin = code => {
|
|
165
|
+
if (code.length === codeLength) {
|
|
166
|
+
setOtpError(false);
|
|
167
|
+
passwordlessLogin(otpCode, loginWithCode);
|
|
168
|
+
} else {
|
|
169
|
+
setOtpError(true);
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
const resendCode = () => {
|
|
174
|
+
getLoginCode(email, getPasswordlessCode);
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
return /*#__PURE__*/external_react_default().createElement("div", {
|
|
178
|
+
className: `${index_module.passwordlessWrapper} step-wrapper`
|
|
179
|
+
}, /*#__PURE__*/external_react_default().createElement((external_react_default()).Fragment, null, /*#__PURE__*/external_react_default().createElement("div", {
|
|
180
|
+
className: `${index_module.innerWrapper}`
|
|
181
|
+
}, /*#__PURE__*/external_react_default().createElement("img", {
|
|
182
|
+
src: (FNid_WHT_logo_rgb_default()),
|
|
183
|
+
alt: "FNid",
|
|
184
|
+
className: index_module.logo
|
|
185
|
+
}), /*#__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", {
|
|
186
|
+
"data-testid": "email"
|
|
187
|
+
}, email), /*#__PURE__*/external_react_default().createElement("br", null), /*#__PURE__*/external_react_default().createElement("span", {
|
|
188
|
+
className: index_module.digits,
|
|
189
|
+
"data-testid": "code-digits"
|
|
190
|
+
}, "Add the ", codeLength, " digit code below")), /*#__PURE__*/external_react_default().createElement("div", {
|
|
191
|
+
className: index_module.codeInput
|
|
192
|
+
}, /*#__PURE__*/external_react_default().createElement((external_react_otp_input_default()), {
|
|
193
|
+
value: otpCode,
|
|
194
|
+
onChange: code => setOtpCode(code),
|
|
195
|
+
numInputs: codeLength,
|
|
196
|
+
shouldAutoFocus: true,
|
|
197
|
+
hasErrored: otpError || codeError,
|
|
198
|
+
errorStyle: {
|
|
199
|
+
border: '1px solid #e5424d'
|
|
200
|
+
},
|
|
201
|
+
"data-testid": "otp-input"
|
|
202
|
+
})), codeError && /*#__PURE__*/external_react_default().createElement("span", {
|
|
203
|
+
className: index_module.error,
|
|
204
|
+
"data-testid": "error"
|
|
205
|
+
}, "The code you entered it's incorrect. ", /*#__PURE__*/external_react_default().createElement("br", null), " Please try again."), /*#__PURE__*/external_react_default().createElement("div", {
|
|
206
|
+
className: index_module.verify
|
|
207
|
+
}, /*#__PURE__*/external_react_default().createElement("div", {
|
|
208
|
+
className: `${index_module.button} button`,
|
|
209
|
+
onClick: () => tryPasswordlessLogin(otpCode),
|
|
210
|
+
"data-testid": "verify"
|
|
211
|
+
}, "Verify Email"), /*#__PURE__*/external_react_default().createElement("b", null, "or go back and ", /*#__PURE__*/external_react_default().createElement("span", {
|
|
212
|
+
className: index_module.link,
|
|
213
|
+
onClick: () => goToLogin(),
|
|
214
|
+
"data-testid": "go-back"
|
|
215
|
+
}, "try another way")))), /*#__PURE__*/external_react_default().createElement("div", {
|
|
216
|
+
className: index_module.resend
|
|
217
|
+
}, "Didn\u2019t receive it? Check your spam/junk folder, or ", /*#__PURE__*/external_react_default().createElement("span", {
|
|
218
|
+
className: index_module.link,
|
|
219
|
+
onClick: () => resendCode(),
|
|
220
|
+
"data-testid": "resend"
|
|
221
|
+
}, "resend email"), " now.")));
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
PasswordlessLoginComponent.propTypes = {
|
|
225
|
+
email: (external_prop_types_default()).string.isRequired,
|
|
226
|
+
codeLength: (external_prop_types_default()).number.isRequired,
|
|
227
|
+
passwordlessLogin: (external_prop_types_default()).func.isRequired,
|
|
228
|
+
loginWithCode: (external_prop_types_default()).func,
|
|
229
|
+
codeError: (external_prop_types_default()).bool,
|
|
230
|
+
goToLogin: (external_prop_types_default()).func.isRequired,
|
|
231
|
+
getLoginCode: (external_prop_types_default()).func.isRequired,
|
|
232
|
+
getPasswordlessCode: (external_prop_types_default()).func
|
|
233
|
+
};
|
|
234
|
+
/* harmony default export */ const login_passwordless = (PasswordlessLoginComponent);
|
|
235
|
+
})();
|
|
236
|
+
|
|
237
|
+
/******/ return __webpack_exports__;
|
|
238
|
+
/******/ })()
|
|
239
|
+
;
|
|
240
|
+
});
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
.loginWrapper___sxUEn{display:flex;justify-content:center;font-weight:bold;text-align:center;padding:20px 0 30px}.innerWrapper___GQRkq{display:flex;flex-direction:column;justify-content:center;width:300px}.innerWrapper___GQRkq span{margin:10px 0}.button___QMZPu{padding:10px 30px;background-color:red;color:white;font-weight:normal;display:inline-flex;justify-content:center;margin:5px 0;border-radius:5px;cursor:pointer;background-position:28px center;background-repeat:no-repeat;background-size:16px;line-height:1.4;box-shadow:0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12)}.button___QMZPu:hover{box-shadow:0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12)}.loginCode___dDBup{margin-bottom:10px;font-size:16px}.loginCode___dDBup>div{margin-top:10px}.loginCode___dDBup span{display:inline-block;font-weight:normal;font-size:14px;color:#e5424d}.input___QR9sA{display:flex;height:40px;margin-top:5px}.input___QR9sA input{border:1px solid var(--color_primary);border-radius:5px;padding:5px;width:100%}.input___QR9sA input::placeholder{color:var(--color_text_input_hints)}.input___QR9sA button{margin-left:5px;background-color:var(--color_secondary_contrast);padding:0px 15px;border:1px solid var(--color_secondary_contrast);color:#fff;box-shadow:none;text-align:center;white-space:nowrap;font-weight:bold;border-radius:5px;cursor:pointer;display:flex;align-items:center;justify-content:center}
|
|
2
|
+
|
|
@@ -0,0 +1,243 @@
|
|
|
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
|
+
/******/ var __webpack_modules__ = ({
|
|
14
|
+
|
|
15
|
+
/***/ 580:
|
|
16
|
+
/***/ ((module) => {
|
|
17
|
+
|
|
18
|
+
module.exports = require("prop-types");
|
|
19
|
+
|
|
20
|
+
/***/ }),
|
|
21
|
+
|
|
22
|
+
/***/ 689:
|
|
23
|
+
/***/ ((module) => {
|
|
24
|
+
|
|
25
|
+
module.exports = require("react");
|
|
26
|
+
|
|
27
|
+
/***/ })
|
|
28
|
+
|
|
29
|
+
/******/ });
|
|
30
|
+
/************************************************************************/
|
|
31
|
+
/******/ // The module cache
|
|
32
|
+
/******/ var __webpack_module_cache__ = {};
|
|
33
|
+
/******/
|
|
34
|
+
/******/ // The require function
|
|
35
|
+
/******/ function __webpack_require__(moduleId) {
|
|
36
|
+
/******/ // Check if module is in cache
|
|
37
|
+
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
|
38
|
+
/******/ if (cachedModule !== undefined) {
|
|
39
|
+
/******/ return cachedModule.exports;
|
|
40
|
+
/******/ }
|
|
41
|
+
/******/ // Create a new module (and put it into the cache)
|
|
42
|
+
/******/ var module = __webpack_module_cache__[moduleId] = {
|
|
43
|
+
/******/ // no module.id needed
|
|
44
|
+
/******/ // no module.loaded needed
|
|
45
|
+
/******/ exports: {}
|
|
46
|
+
/******/ };
|
|
47
|
+
/******/
|
|
48
|
+
/******/ // Execute the module function
|
|
49
|
+
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
|
50
|
+
/******/
|
|
51
|
+
/******/ // Return the exports of the module
|
|
52
|
+
/******/ return module.exports;
|
|
53
|
+
/******/ }
|
|
54
|
+
/******/
|
|
55
|
+
/************************************************************************/
|
|
56
|
+
/******/ /* webpack/runtime/compat get default export */
|
|
57
|
+
/******/ (() => {
|
|
58
|
+
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
|
59
|
+
/******/ __webpack_require__.n = (module) => {
|
|
60
|
+
/******/ var getter = module && module.__esModule ?
|
|
61
|
+
/******/ () => (module['default']) :
|
|
62
|
+
/******/ () => (module);
|
|
63
|
+
/******/ __webpack_require__.d(getter, { a: getter });
|
|
64
|
+
/******/ return getter;
|
|
65
|
+
/******/ };
|
|
66
|
+
/******/ })();
|
|
67
|
+
/******/
|
|
68
|
+
/******/ /* webpack/runtime/define property getters */
|
|
69
|
+
/******/ (() => {
|
|
70
|
+
/******/ // define getter functions for harmony exports
|
|
71
|
+
/******/ __webpack_require__.d = (exports, definition) => {
|
|
72
|
+
/******/ for(var key in definition) {
|
|
73
|
+
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
|
74
|
+
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
|
75
|
+
/******/ }
|
|
76
|
+
/******/ }
|
|
77
|
+
/******/ };
|
|
78
|
+
/******/ })();
|
|
79
|
+
/******/
|
|
80
|
+
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
|
81
|
+
/******/ (() => {
|
|
82
|
+
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
|
|
83
|
+
/******/ })();
|
|
84
|
+
/******/
|
|
85
|
+
/******/ /* webpack/runtime/make namespace object */
|
|
86
|
+
/******/ (() => {
|
|
87
|
+
/******/ // define __esModule on exports
|
|
88
|
+
/******/ __webpack_require__.r = (exports) => {
|
|
89
|
+
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
|
90
|
+
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
91
|
+
/******/ }
|
|
92
|
+
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
|
93
|
+
/******/ };
|
|
94
|
+
/******/ })();
|
|
95
|
+
/******/
|
|
96
|
+
/************************************************************************/
|
|
97
|
+
var __webpack_exports__ = {};
|
|
98
|
+
// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
|
|
99
|
+
(() => {
|
|
100
|
+
// ESM COMPAT FLAG
|
|
101
|
+
__webpack_require__.r(__webpack_exports__);
|
|
102
|
+
|
|
103
|
+
// EXPORTS
|
|
104
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
105
|
+
"default": () => (/* binding */ login)
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
// EXTERNAL MODULE: external "react"
|
|
109
|
+
var external_react_ = __webpack_require__(689);
|
|
110
|
+
var external_react_default = /*#__PURE__*/__webpack_require__.n(external_react_);
|
|
111
|
+
// EXTERNAL MODULE: external "prop-types"
|
|
112
|
+
var external_prop_types_ = __webpack_require__(580);
|
|
113
|
+
var external_prop_types_default = /*#__PURE__*/__webpack_require__.n(external_prop_types_);
|
|
114
|
+
;// CONCATENATED MODULE: ./src/components/login/index.module.scss
|
|
115
|
+
// extracted by mini-css-extract-plugin
|
|
116
|
+
/* harmony default export */ const index_module = ({"loginWrapper":"loginWrapper___sxUEn","innerWrapper":"innerWrapper___GQRkq","button":"button___QMZPu","loginCode":"loginCode___dDBup","input":"input___QR9sA"});
|
|
117
|
+
;// CONCATENATED MODULE: ./src/components/login/index.js
|
|
118
|
+
/**
|
|
119
|
+
* Copyright 2020 OpenStack Foundation
|
|
120
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
121
|
+
* you may not use this file except in compliance with the License.
|
|
122
|
+
* You may obtain a copy of the License at
|
|
123
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
124
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
125
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
126
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
127
|
+
* See the License for the specific language governing permissions and
|
|
128
|
+
* limitations under the License.
|
|
129
|
+
**/
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
const LoginComponent = ({
|
|
135
|
+
loginOptions,
|
|
136
|
+
login,
|
|
137
|
+
allowsNativeAuth,
|
|
138
|
+
allowsOtpAuthlogin,
|
|
139
|
+
getLoginCode,
|
|
140
|
+
getPasswordlessCode,
|
|
141
|
+
initialEmailValue
|
|
142
|
+
}) => {
|
|
143
|
+
const [email, setEmail] = (0,external_react_.useState)(initialEmailValue);
|
|
144
|
+
const [emailError, setEmailError] = (0,external_react_.useState)();
|
|
145
|
+
|
|
146
|
+
const isValidEmail = email => {
|
|
147
|
+
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,}))$/;
|
|
148
|
+
return re.test(String(email).toLowerCase());
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
const loginCode = () => {
|
|
152
|
+
let isValid = isValidEmail(email);
|
|
153
|
+
setEmailError(!isValid);
|
|
154
|
+
|
|
155
|
+
if (isValid) {
|
|
156
|
+
getLoginCode(email, getPasswordlessCode);
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
return /*#__PURE__*/external_react_default().createElement("div", {
|
|
161
|
+
className: `${index_module.loginWrapper} step-wrapper`
|
|
162
|
+
}, /*#__PURE__*/external_react_default().createElement((external_react_default()).Fragment, null, /*#__PURE__*/external_react_default().createElement("div", {
|
|
163
|
+
className: `${index_module.innerWrapper}`
|
|
164
|
+
}, /*#__PURE__*/external_react_default().createElement("div", {
|
|
165
|
+
className: index_module.loginCode
|
|
166
|
+
}, "Enter your email to begin registration:", /*#__PURE__*/external_react_default().createElement("div", {
|
|
167
|
+
className: index_module.input
|
|
168
|
+
}, /*#__PURE__*/external_react_default().createElement("input", {
|
|
169
|
+
placeholder: "youremail@example.com",
|
|
170
|
+
value: email,
|
|
171
|
+
onChange: e => setEmail(e.target.value),
|
|
172
|
+
onKeyPress: ev => ev.key === 'Enter' ? loginCode() : null,
|
|
173
|
+
"data-testid": "email-input"
|
|
174
|
+
}), /*#__PURE__*/external_react_default().createElement("button", {
|
|
175
|
+
onClick: () => loginCode(),
|
|
176
|
+
"data-testid": "email-button"
|
|
177
|
+
}, ">"), /*#__PURE__*/external_react_default().createElement("br", null)), emailError && /*#__PURE__*/external_react_default().createElement("span", {
|
|
178
|
+
"data-testid": "email-error"
|
|
179
|
+
}, "Please enter a valid email address")), /*#__PURE__*/external_react_default().createElement("span", null, "Or you may login with one of the following:"), loginOptions.map((o, index) => {
|
|
180
|
+
return o.provider_param ? /*#__PURE__*/external_react_default().createElement("div", {
|
|
181
|
+
className: `${index_module.button}`,
|
|
182
|
+
key: `provider-${o.provider_param}`,
|
|
183
|
+
"data-testid": "login-button",
|
|
184
|
+
style: {
|
|
185
|
+
color: o.button_border_color ? o.button_border_color : '#ffffff',
|
|
186
|
+
border: `thin solid ${o.button_border_color ? o.button_border_color : o.button_color}`,
|
|
187
|
+
backgroundColor: o.button_color,
|
|
188
|
+
backgroundImage: o.provider_logo ? `url(${o.provider_logo})` : 'none',
|
|
189
|
+
backgroundSize: o.provider_logo_size ? o.provider_logo_size : ''
|
|
190
|
+
},
|
|
191
|
+
onClick: () => login(o.provider_param)
|
|
192
|
+
}, o.provider_label) : allowsNativeAuth ? /*#__PURE__*/external_react_default().createElement("div", {
|
|
193
|
+
className: `${index_module.button}`,
|
|
194
|
+
key: `provider-fnid`,
|
|
195
|
+
"data-testid": "login-button",
|
|
196
|
+
style: {
|
|
197
|
+
color: o.button_border_color ? o.button_border_color : '#ffffff',
|
|
198
|
+
border: `thin solid ${o.button_border_color ? o.button_border_color : o.button_color}`,
|
|
199
|
+
backgroundColor: o.button_color,
|
|
200
|
+
backgroundImage: o.provider_logo ? `url(${o.provider_logo})` : 'none',
|
|
201
|
+
backgroundSize: o.provider_logo_size ? o.provider_logo_size : ''
|
|
202
|
+
},
|
|
203
|
+
onClick: () => login(o.provider_param)
|
|
204
|
+
}, o.provider_label) : null;
|
|
205
|
+
}), allowsOtpAuthlogin && /*#__PURE__*/external_react_default().createElement("div", {
|
|
206
|
+
className: index_module.loginCode
|
|
207
|
+
}, "or get a login code emailed to you", /*#__PURE__*/external_react_default().createElement("div", {
|
|
208
|
+
className: index_module.input
|
|
209
|
+
}, /*#__PURE__*/external_react_default().createElement("input", {
|
|
210
|
+
placeholder: "youremail@example.com",
|
|
211
|
+
value: email,
|
|
212
|
+
onChange: e => setEmail(e.target.value),
|
|
213
|
+
onKeyPress: ev => ev.key === 'Enter' ? loginCode() : null,
|
|
214
|
+
"data-testid": "email-input"
|
|
215
|
+
}), /*#__PURE__*/external_react_default().createElement("button", {
|
|
216
|
+
onClick: () => loginCode(),
|
|
217
|
+
"data-testid": "email-button"
|
|
218
|
+
}, ">"), /*#__PURE__*/external_react_default().createElement("br", null)), emailError && /*#__PURE__*/external_react_default().createElement("span", {
|
|
219
|
+
"data-testid": "email-error"
|
|
220
|
+
}, "Please enter a valid email adress")))));
|
|
221
|
+
};
|
|
222
|
+
|
|
223
|
+
LoginComponent.propTypes = {
|
|
224
|
+
loginOptions: (external_prop_types_default()).array.isRequired,
|
|
225
|
+
login: (external_prop_types_default()).func.isRequired,
|
|
226
|
+
allowsNativeAuth: (external_prop_types_default()).bool,
|
|
227
|
+
allowsOtpAuthlogin: (external_prop_types_default()).bool,
|
|
228
|
+
getLoginCode: (external_prop_types_default()).func.isRequired,
|
|
229
|
+
getPasswordlessCode: (external_prop_types_default()).func,
|
|
230
|
+
initialEmailValue: (external_prop_types_default()).string
|
|
231
|
+
};
|
|
232
|
+
LoginComponent.defaultProps = {
|
|
233
|
+
allowsNativeAuth: true,
|
|
234
|
+
allowsOtpAuthlogin: false,
|
|
235
|
+
initialEmailValue: ''
|
|
236
|
+
};
|
|
237
|
+
/* harmony default export */ const login = (LoginComponent);
|
|
238
|
+
})();
|
|
239
|
+
|
|
240
|
+
/******/ return __webpack_exports__;
|
|
241
|
+
/******/ })()
|
|
242
|
+
;
|
|
243
|
+
});
|
package/dist/index.js
CHANGED
|
@@ -11,11 +11,301 @@
|
|
|
11
11
|
return /******/ (() => { // webpackBootstrap
|
|
12
12
|
/******/ var __webpack_modules__ = ({
|
|
13
13
|
|
|
14
|
+
/***/ 168:
|
|
15
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
16
|
+
|
|
17
|
+
"use strict";
|
|
18
|
+
|
|
19
|
+
// EXPORTS
|
|
20
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
21
|
+
"default": () => (/* binding */ login_passwordless)
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
// EXTERNAL MODULE: external "react"
|
|
25
|
+
var external_react_ = __webpack_require__(689);
|
|
26
|
+
var external_react_default = /*#__PURE__*/__webpack_require__.n(external_react_);
|
|
27
|
+
// EXTERNAL MODULE: external "prop-types"
|
|
28
|
+
var external_prop_types_ = __webpack_require__(580);
|
|
29
|
+
var external_prop_types_default = /*#__PURE__*/__webpack_require__.n(external_prop_types_);
|
|
30
|
+
;// CONCATENATED MODULE: external "react-otp-input"
|
|
31
|
+
const external_react_otp_input_namespaceObject = require("react-otp-input");
|
|
32
|
+
var external_react_otp_input_default = /*#__PURE__*/__webpack_require__.n(external_react_otp_input_namespaceObject);
|
|
33
|
+
;// CONCATENATED MODULE: ./src/components/login-passwordless/index.module.scss
|
|
34
|
+
// extracted by mini-css-extract-plugin
|
|
35
|
+
/* harmony default export */ const index_module = ({"passwordlessWrapper":"passwordlessWrapper___BRQ_s","innerWrapper":"innerWrapper___nRLDi","logo":"logo___qNVrv","digits":"digits___Vu5iy","codeInput":"codeInput___LnTZe","error":"error___wZflZ","verify":"verify___IBgMl","button":"button___nBhtQ","link":"link___f6fDT","resend":"resend___Nma1U"});
|
|
36
|
+
// EXTERNAL MODULE: ./src/assets/FNid_WHT_logo_rgb.svg
|
|
37
|
+
var FNid_WHT_logo_rgb = __webpack_require__(802);
|
|
38
|
+
var FNid_WHT_logo_rgb_default = /*#__PURE__*/__webpack_require__.n(FNid_WHT_logo_rgb);
|
|
39
|
+
;// CONCATENATED MODULE: ./src/components/login-passwordless/index.js
|
|
40
|
+
/**
|
|
41
|
+
* Copyright 2020 OpenStack Foundation
|
|
42
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
43
|
+
* you may not use this file except in compliance with the License.
|
|
44
|
+
* You may obtain a copy of the License at
|
|
45
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
46
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
47
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
48
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
49
|
+
* See the License for the specific language governing permissions and
|
|
50
|
+
* limitations under the License.
|
|
51
|
+
**/
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
const PasswordlessLoginComponent = ({
|
|
59
|
+
email,
|
|
60
|
+
codeLength,
|
|
61
|
+
passwordlessLogin,
|
|
62
|
+
loginWithCode,
|
|
63
|
+
codeError,
|
|
64
|
+
goToLogin,
|
|
65
|
+
getLoginCode,
|
|
66
|
+
getPasswordlessCode
|
|
67
|
+
}) => {
|
|
68
|
+
const [otpCode, setOtpCode] = (0,external_react_.useState)('');
|
|
69
|
+
const [otpError, setOtpError] = (0,external_react_.useState)(false);
|
|
70
|
+
|
|
71
|
+
const tryPasswordlessLogin = code => {
|
|
72
|
+
if (code.length === codeLength) {
|
|
73
|
+
setOtpError(false);
|
|
74
|
+
passwordlessLogin(otpCode, loginWithCode);
|
|
75
|
+
} else {
|
|
76
|
+
setOtpError(true);
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
const resendCode = () => {
|
|
81
|
+
getLoginCode(email, getPasswordlessCode);
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
return /*#__PURE__*/external_react_default().createElement("div", {
|
|
85
|
+
className: `${index_module.passwordlessWrapper} step-wrapper`
|
|
86
|
+
}, /*#__PURE__*/external_react_default().createElement((external_react_default()).Fragment, null, /*#__PURE__*/external_react_default().createElement("div", {
|
|
87
|
+
className: `${index_module.innerWrapper}`
|
|
88
|
+
}, /*#__PURE__*/external_react_default().createElement("img", {
|
|
89
|
+
src: (FNid_WHT_logo_rgb_default()),
|
|
90
|
+
alt: "FNid",
|
|
91
|
+
className: index_module.logo
|
|
92
|
+
}), /*#__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", {
|
|
93
|
+
"data-testid": "email"
|
|
94
|
+
}, email), /*#__PURE__*/external_react_default().createElement("br", null), /*#__PURE__*/external_react_default().createElement("span", {
|
|
95
|
+
className: index_module.digits,
|
|
96
|
+
"data-testid": "code-digits"
|
|
97
|
+
}, "Add the ", codeLength, " digit code below")), /*#__PURE__*/external_react_default().createElement("div", {
|
|
98
|
+
className: index_module.codeInput
|
|
99
|
+
}, /*#__PURE__*/external_react_default().createElement((external_react_otp_input_default()), {
|
|
100
|
+
value: otpCode,
|
|
101
|
+
onChange: code => setOtpCode(code),
|
|
102
|
+
numInputs: codeLength,
|
|
103
|
+
shouldAutoFocus: true,
|
|
104
|
+
hasErrored: otpError || codeError,
|
|
105
|
+
errorStyle: {
|
|
106
|
+
border: '1px solid #e5424d'
|
|
107
|
+
},
|
|
108
|
+
"data-testid": "otp-input"
|
|
109
|
+
})), codeError && /*#__PURE__*/external_react_default().createElement("span", {
|
|
110
|
+
className: index_module.error,
|
|
111
|
+
"data-testid": "error"
|
|
112
|
+
}, "The code you entered it's incorrect. ", /*#__PURE__*/external_react_default().createElement("br", null), " Please try again."), /*#__PURE__*/external_react_default().createElement("div", {
|
|
113
|
+
className: index_module.verify
|
|
114
|
+
}, /*#__PURE__*/external_react_default().createElement("div", {
|
|
115
|
+
className: `${index_module.button} button`,
|
|
116
|
+
onClick: () => tryPasswordlessLogin(otpCode),
|
|
117
|
+
"data-testid": "verify"
|
|
118
|
+
}, "Verify Email"), /*#__PURE__*/external_react_default().createElement("b", null, "or go back and ", /*#__PURE__*/external_react_default().createElement("span", {
|
|
119
|
+
className: index_module.link,
|
|
120
|
+
onClick: () => goToLogin(),
|
|
121
|
+
"data-testid": "go-back"
|
|
122
|
+
}, "try another way")))), /*#__PURE__*/external_react_default().createElement("div", {
|
|
123
|
+
className: index_module.resend
|
|
124
|
+
}, "Didn\u2019t receive it? Check your spam/junk folder, or ", /*#__PURE__*/external_react_default().createElement("span", {
|
|
125
|
+
className: index_module.link,
|
|
126
|
+
onClick: () => resendCode(),
|
|
127
|
+
"data-testid": "resend"
|
|
128
|
+
}, "resend email"), " now.")));
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
PasswordlessLoginComponent.propTypes = {
|
|
132
|
+
email: (external_prop_types_default()).string.isRequired,
|
|
133
|
+
codeLength: (external_prop_types_default()).number.isRequired,
|
|
134
|
+
passwordlessLogin: (external_prop_types_default()).func.isRequired,
|
|
135
|
+
loginWithCode: (external_prop_types_default()).func,
|
|
136
|
+
codeError: (external_prop_types_default()).bool,
|
|
137
|
+
goToLogin: (external_prop_types_default()).func.isRequired,
|
|
138
|
+
getLoginCode: (external_prop_types_default()).func.isRequired,
|
|
139
|
+
getPasswordlessCode: (external_prop_types_default()).func
|
|
140
|
+
};
|
|
141
|
+
/* harmony default export */ const login_passwordless = (PasswordlessLoginComponent);
|
|
142
|
+
|
|
143
|
+
/***/ }),
|
|
144
|
+
|
|
145
|
+
/***/ 711:
|
|
146
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
147
|
+
|
|
148
|
+
"use strict";
|
|
149
|
+
|
|
150
|
+
// EXPORTS
|
|
151
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
152
|
+
"default": () => (/* binding */ login)
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
// EXTERNAL MODULE: external "react"
|
|
156
|
+
var external_react_ = __webpack_require__(689);
|
|
157
|
+
var external_react_default = /*#__PURE__*/__webpack_require__.n(external_react_);
|
|
158
|
+
// EXTERNAL MODULE: external "prop-types"
|
|
159
|
+
var external_prop_types_ = __webpack_require__(580);
|
|
160
|
+
var external_prop_types_default = /*#__PURE__*/__webpack_require__.n(external_prop_types_);
|
|
161
|
+
;// CONCATENATED MODULE: ./src/components/login/index.module.scss
|
|
162
|
+
// extracted by mini-css-extract-plugin
|
|
163
|
+
/* harmony default export */ const index_module = ({"loginWrapper":"loginWrapper___sxUEn","innerWrapper":"innerWrapper___GQRkq","button":"button___QMZPu","loginCode":"loginCode___dDBup","input":"input___QR9sA"});
|
|
164
|
+
;// CONCATENATED MODULE: ./src/components/login/index.js
|
|
165
|
+
/**
|
|
166
|
+
* Copyright 2020 OpenStack Foundation
|
|
167
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
168
|
+
* you may not use this file except in compliance with the License.
|
|
169
|
+
* You may obtain a copy of the License at
|
|
170
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
171
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
172
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
173
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
174
|
+
* See the License for the specific language governing permissions and
|
|
175
|
+
* limitations under the License.
|
|
176
|
+
**/
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
const LoginComponent = ({
|
|
182
|
+
loginOptions,
|
|
183
|
+
login,
|
|
184
|
+
allowsNativeAuth,
|
|
185
|
+
allowsOtpAuthlogin,
|
|
186
|
+
getLoginCode,
|
|
187
|
+
getPasswordlessCode,
|
|
188
|
+
initialEmailValue
|
|
189
|
+
}) => {
|
|
190
|
+
const [email, setEmail] = (0,external_react_.useState)(initialEmailValue);
|
|
191
|
+
const [emailError, setEmailError] = (0,external_react_.useState)();
|
|
192
|
+
|
|
193
|
+
const isValidEmail = email => {
|
|
194
|
+
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,}))$/;
|
|
195
|
+
return re.test(String(email).toLowerCase());
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
const loginCode = () => {
|
|
199
|
+
let isValid = isValidEmail(email);
|
|
200
|
+
setEmailError(!isValid);
|
|
201
|
+
|
|
202
|
+
if (isValid) {
|
|
203
|
+
getLoginCode(email, getPasswordlessCode);
|
|
204
|
+
}
|
|
205
|
+
};
|
|
206
|
+
|
|
207
|
+
return /*#__PURE__*/external_react_default().createElement("div", {
|
|
208
|
+
className: `${index_module.loginWrapper} step-wrapper`
|
|
209
|
+
}, /*#__PURE__*/external_react_default().createElement((external_react_default()).Fragment, null, /*#__PURE__*/external_react_default().createElement("div", {
|
|
210
|
+
className: `${index_module.innerWrapper}`
|
|
211
|
+
}, /*#__PURE__*/external_react_default().createElement("div", {
|
|
212
|
+
className: index_module.loginCode
|
|
213
|
+
}, "Enter your email to begin registration:", /*#__PURE__*/external_react_default().createElement("div", {
|
|
214
|
+
className: index_module.input
|
|
215
|
+
}, /*#__PURE__*/external_react_default().createElement("input", {
|
|
216
|
+
placeholder: "youremail@example.com",
|
|
217
|
+
value: email,
|
|
218
|
+
onChange: e => setEmail(e.target.value),
|
|
219
|
+
onKeyPress: ev => ev.key === 'Enter' ? loginCode() : null,
|
|
220
|
+
"data-testid": "email-input"
|
|
221
|
+
}), /*#__PURE__*/external_react_default().createElement("button", {
|
|
222
|
+
onClick: () => loginCode(),
|
|
223
|
+
"data-testid": "email-button"
|
|
224
|
+
}, ">"), /*#__PURE__*/external_react_default().createElement("br", null)), emailError && /*#__PURE__*/external_react_default().createElement("span", {
|
|
225
|
+
"data-testid": "email-error"
|
|
226
|
+
}, "Please enter a valid email address")), /*#__PURE__*/external_react_default().createElement("span", null, "Or you may login with one of the following:"), loginOptions.map((o, index) => {
|
|
227
|
+
return o.provider_param ? /*#__PURE__*/external_react_default().createElement("div", {
|
|
228
|
+
className: `${index_module.button}`,
|
|
229
|
+
key: `provider-${o.provider_param}`,
|
|
230
|
+
"data-testid": "login-button",
|
|
231
|
+
style: {
|
|
232
|
+
color: o.button_border_color ? o.button_border_color : '#ffffff',
|
|
233
|
+
border: `thin solid ${o.button_border_color ? o.button_border_color : o.button_color}`,
|
|
234
|
+
backgroundColor: o.button_color,
|
|
235
|
+
backgroundImage: o.provider_logo ? `url(${o.provider_logo})` : 'none',
|
|
236
|
+
backgroundSize: o.provider_logo_size ? o.provider_logo_size : ''
|
|
237
|
+
},
|
|
238
|
+
onClick: () => login(o.provider_param)
|
|
239
|
+
}, o.provider_label) : allowsNativeAuth ? /*#__PURE__*/external_react_default().createElement("div", {
|
|
240
|
+
className: `${index_module.button}`,
|
|
241
|
+
key: `provider-fnid`,
|
|
242
|
+
"data-testid": "login-button",
|
|
243
|
+
style: {
|
|
244
|
+
color: o.button_border_color ? o.button_border_color : '#ffffff',
|
|
245
|
+
border: `thin solid ${o.button_border_color ? o.button_border_color : o.button_color}`,
|
|
246
|
+
backgroundColor: o.button_color,
|
|
247
|
+
backgroundImage: o.provider_logo ? `url(${o.provider_logo})` : 'none',
|
|
248
|
+
backgroundSize: o.provider_logo_size ? o.provider_logo_size : ''
|
|
249
|
+
},
|
|
250
|
+
onClick: () => login(o.provider_param)
|
|
251
|
+
}, o.provider_label) : null;
|
|
252
|
+
}), allowsOtpAuthlogin && /*#__PURE__*/external_react_default().createElement("div", {
|
|
253
|
+
className: index_module.loginCode
|
|
254
|
+
}, "or get a login code emailed to you", /*#__PURE__*/external_react_default().createElement("div", {
|
|
255
|
+
className: index_module.input
|
|
256
|
+
}, /*#__PURE__*/external_react_default().createElement("input", {
|
|
257
|
+
placeholder: "youremail@example.com",
|
|
258
|
+
value: email,
|
|
259
|
+
onChange: e => setEmail(e.target.value),
|
|
260
|
+
onKeyPress: ev => ev.key === 'Enter' ? loginCode() : null,
|
|
261
|
+
"data-testid": "email-input"
|
|
262
|
+
}), /*#__PURE__*/external_react_default().createElement("button", {
|
|
263
|
+
onClick: () => loginCode(),
|
|
264
|
+
"data-testid": "email-button"
|
|
265
|
+
}, ">"), /*#__PURE__*/external_react_default().createElement("br", null)), emailError && /*#__PURE__*/external_react_default().createElement("span", {
|
|
266
|
+
"data-testid": "email-error"
|
|
267
|
+
}, "Please enter a valid email adress")))));
|
|
268
|
+
};
|
|
269
|
+
|
|
270
|
+
LoginComponent.propTypes = {
|
|
271
|
+
loginOptions: (external_prop_types_default()).array.isRequired,
|
|
272
|
+
login: (external_prop_types_default()).func.isRequired,
|
|
273
|
+
allowsNativeAuth: (external_prop_types_default()).bool,
|
|
274
|
+
allowsOtpAuthlogin: (external_prop_types_default()).bool,
|
|
275
|
+
getLoginCode: (external_prop_types_default()).func.isRequired,
|
|
276
|
+
getPasswordlessCode: (external_prop_types_default()).func,
|
|
277
|
+
initialEmailValue: (external_prop_types_default()).string
|
|
278
|
+
};
|
|
279
|
+
LoginComponent.defaultProps = {
|
|
280
|
+
allowsNativeAuth: true,
|
|
281
|
+
allowsOtpAuthlogin: false,
|
|
282
|
+
initialEmailValue: ''
|
|
283
|
+
};
|
|
284
|
+
/* harmony default export */ const login = (LoginComponent);
|
|
285
|
+
|
|
286
|
+
/***/ }),
|
|
287
|
+
|
|
14
288
|
/***/ 802:
|
|
15
289
|
/***/ ((module) => {
|
|
16
290
|
|
|
17
291
|
module.exports = "data:image/svg+xml,%3c!-- Generator: Adobe Illustrator 25.4.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3e %3csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 812.24 471.64' style='enable-background:new 0 0 812.24 471.64;' xml:space='preserve'%3e %3cstyle type='text/css'%3e .st0%7bfill:%230C64C8;%7d %3c/style%3e %3cg%3e %3cpath d='M170.89,146.78l-64.77,178.08h535.23l64.77-178.08L170.89,146.78L170.89,146.78z M384.48,309.44H341.7l-25.6-80.85 l-29.41,80.85h-42.6l41.94-115.3h-65.52l-9.29,25.54h56.62l-10.8,29.7h-56.62l-21.84,60.06h-45.63l53.39-146.78h153.49l25.72,81.24 l29.56-81.24h42.75L384.48,309.44z'/%3e %3cg%3e %3cpath class='st0' d='M588.49,162.71v50.86c-4-4.27-8.59-7.47-13.76-9.61s-10.92-3.21-17.26-3.21c-13.01,0-23.73,4.67-32.17,14.02 c-8.44,9.34-12.66,22.83-12.66,40.45c0,15.75,3.82,29.13,11.46,40.15c7.64,11.01,18.69,16.52,33.17,16.52 c7.2,0,13.74-1.54,19.61-4.6c4.4-2.34,9.27-6.84,14.61-13.52v15.72h38.12V162.71H588.49z M583.59,275.94 c-3.47,4.07-7.8,6.11-13.01,6.11c-4.87,0-8.96-2.02-12.26-6.06s-4.95-10.4-4.95-19.07c0-9.28,1.6-15.88,4.8-19.82 s7.17-5.91,11.91-5.91c5.4,0,9.87,2.05,13.41,6.16c3.53,4.1,5.3,10.33,5.3,18.67C588.79,265.23,587.05,271.87,583.59,275.94z'/%3e %3cpath class='st0' d='M473.92,207.72c-14.37,0-26.03,7.27-26.03,16.25v2.96v45.48h9.09l3.47,37.09h26.95l3.47-37.09h9.09v-45.48 v-2.96C499.95,214.99,488.29,207.72,473.92,207.72z'/%3e %3cellipse transform='matrix(2.075247e-03 -1 1 2.075247e-03 290.6104 655.8611)' class='st0' cx='473.92' cy='182.32' rx='19.87' ry='19.86'/%3e %3c/g%3e %3c/g%3e %3c/svg%3e"
|
|
18
292
|
|
|
293
|
+
/***/ }),
|
|
294
|
+
|
|
295
|
+
/***/ 580:
|
|
296
|
+
/***/ ((module) => {
|
|
297
|
+
|
|
298
|
+
"use strict";
|
|
299
|
+
module.exports = require("prop-types");
|
|
300
|
+
|
|
301
|
+
/***/ }),
|
|
302
|
+
|
|
303
|
+
/***/ 689:
|
|
304
|
+
/***/ ((module) => {
|
|
305
|
+
|
|
306
|
+
"use strict";
|
|
307
|
+
module.exports = require("react");
|
|
308
|
+
|
|
19
309
|
/***/ })
|
|
20
310
|
|
|
21
311
|
/******/ });
|
|
@@ -95,12 +385,14 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
95
385
|
|
|
96
386
|
// EXPORTS
|
|
97
387
|
__webpack_require__.d(__webpack_exports__, {
|
|
388
|
+
"LoginComponent": () => (/* reexport */ login["default"]),
|
|
389
|
+
"PasswordlessLoginComponent": () => (/* reexport */ login_passwordless["default"]),
|
|
98
390
|
"default": () => (/* binding */ summit_registration_lite)
|
|
99
391
|
});
|
|
100
392
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
var external_react_default = /*#__PURE__*/__webpack_require__.n(
|
|
393
|
+
// EXTERNAL MODULE: external "react"
|
|
394
|
+
var external_react_ = __webpack_require__(689);
|
|
395
|
+
var external_react_default = /*#__PURE__*/__webpack_require__.n(external_react_);
|
|
104
396
|
;// CONCATENATED MODULE: external "react-redux"
|
|
105
397
|
const external_react_redux_namespaceObject = require("react-redux");
|
|
106
398
|
;// CONCATENATED MODULE: external "redux"
|
|
@@ -1032,9 +1324,9 @@ const getPersistor = () => {
|
|
|
1032
1324
|
};
|
|
1033
1325
|
;// CONCATENATED MODULE: external "redux-persist/integration/react"
|
|
1034
1326
|
const react_namespaceObject = require("redux-persist/integration/react");
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
var external_prop_types_default = /*#__PURE__*/__webpack_require__.n(
|
|
1327
|
+
// EXTERNAL MODULE: external "prop-types"
|
|
1328
|
+
var external_prop_types_ = __webpack_require__(580);
|
|
1329
|
+
var external_prop_types_default = /*#__PURE__*/__webpack_require__.n(external_prop_types_);
|
|
1038
1330
|
;// CONCATENATED MODULE: external "react-spring"
|
|
1039
1331
|
const external_react_spring_namespaceObject = require("react-spring");
|
|
1040
1332
|
;// CONCATENATED MODULE: external "react-use"
|
|
@@ -1047,118 +1339,11 @@ var ajaxloader_default = /*#__PURE__*/__webpack_require__.n(ajaxloader_namespace
|
|
|
1047
1339
|
;// CONCATENATED MODULE: ./src/styles/general.module.scss
|
|
1048
1340
|
// extracted by mini-css-extract-plugin
|
|
1049
1341
|
/* harmony default export */ const general_module = ({"modal":"modal___G3Cmq","modalContent":"modalContent___lIaqw","outerWrapper":"outerWrapper___OWXyi","innerWrapper":"innerWrapper___mIrBF","title":"title___Tbvkl"});
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
/* harmony default export */ const index_module = ({"loginWrapper":"loginWrapper___sxUEn","innerWrapper":"innerWrapper___GQRkq","button":"button___QMZPu","loginCode":"loginCode___dDBup","input":"input___QR9sA"});
|
|
1053
|
-
;// CONCATENATED MODULE: ./src/components/login/index.js
|
|
1054
|
-
/**
|
|
1055
|
-
* Copyright 2020 OpenStack Foundation
|
|
1056
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
1057
|
-
* you may not use this file except in compliance with the License.
|
|
1058
|
-
* You may obtain a copy of the License at
|
|
1059
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
1060
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
1061
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
1062
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
1063
|
-
* See the License for the specific language governing permissions and
|
|
1064
|
-
* limitations under the License.
|
|
1065
|
-
**/
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
const LoginComponent = ({
|
|
1070
|
-
options,
|
|
1071
|
-
login,
|
|
1072
|
-
allowsNativeAuth,
|
|
1073
|
-
allowsOtpAuthlogin,
|
|
1074
|
-
getLoginCode,
|
|
1075
|
-
getPasswordlessCode,
|
|
1076
|
-
initialEmailValue = ''
|
|
1077
|
-
}) => {
|
|
1078
|
-
const [email, setEmail] = (0,external_react_namespaceObject.useState)(initialEmailValue);
|
|
1079
|
-
const [emailError, setEmailError] = (0,external_react_namespaceObject.useState)();
|
|
1080
|
-
|
|
1081
|
-
const isValidEmail = email => {
|
|
1082
|
-
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,}))$/;
|
|
1083
|
-
return re.test(String(email).toLowerCase());
|
|
1084
|
-
};
|
|
1085
|
-
|
|
1086
|
-
const loginCode = () => {
|
|
1087
|
-
let isValid = isValidEmail(email);
|
|
1088
|
-
setEmailError(!isValid);
|
|
1089
|
-
|
|
1090
|
-
if (isValid) {
|
|
1091
|
-
getLoginCode(email, getPasswordlessCode);
|
|
1092
|
-
}
|
|
1093
|
-
};
|
|
1094
|
-
|
|
1095
|
-
return /*#__PURE__*/external_react_default().createElement("div", {
|
|
1096
|
-
className: `${index_module.loginWrapper} step-wrapper`
|
|
1097
|
-
}, /*#__PURE__*/external_react_default().createElement((external_react_default()).Fragment, null, /*#__PURE__*/external_react_default().createElement("div", {
|
|
1098
|
-
className: `${index_module.innerWrapper}`
|
|
1099
|
-
}, /*#__PURE__*/external_react_default().createElement("div", {
|
|
1100
|
-
className: index_module.loginCode
|
|
1101
|
-
}, "Enter your email to begin registration:", /*#__PURE__*/external_react_default().createElement("div", {
|
|
1102
|
-
className: index_module.input
|
|
1103
|
-
}, /*#__PURE__*/external_react_default().createElement("input", {
|
|
1104
|
-
placeholder: "youremail@example.com",
|
|
1105
|
-
value: email,
|
|
1106
|
-
onChange: e => setEmail(e.target.value),
|
|
1107
|
-
onKeyPress: ev => ev.key === 'Enter' ? loginCode() : null,
|
|
1108
|
-
"data-testid": "email-input"
|
|
1109
|
-
}), /*#__PURE__*/external_react_default().createElement("button", {
|
|
1110
|
-
onClick: () => loginCode(),
|
|
1111
|
-
"data-testid": "email-button"
|
|
1112
|
-
}, ">"), /*#__PURE__*/external_react_default().createElement("br", null)), emailError && /*#__PURE__*/external_react_default().createElement("span", {
|
|
1113
|
-
"data-testid": "email-error"
|
|
1114
|
-
}, "Please enter a valid email address")), /*#__PURE__*/external_react_default().createElement("span", null, "Or you may login with one of the following:"), options.map((o, index) => {
|
|
1115
|
-
return o.provider_param ? /*#__PURE__*/external_react_default().createElement("div", {
|
|
1116
|
-
className: `${index_module.button}`,
|
|
1117
|
-
key: `provider-${o.provider_param}`,
|
|
1118
|
-
"data-testid": "login-button",
|
|
1119
|
-
style: {
|
|
1120
|
-
color: o.button_border_color ? o.button_border_color : '#ffffff',
|
|
1121
|
-
border: `thin solid ${o.button_border_color ? o.button_border_color : o.button_color}`,
|
|
1122
|
-
backgroundColor: o.button_color,
|
|
1123
|
-
backgroundImage: o.provider_logo ? `url(${o.provider_logo})` : 'none',
|
|
1124
|
-
backgroundSize: o.provider_logo_size ? o.provider_logo_size : ''
|
|
1125
|
-
},
|
|
1126
|
-
onClick: () => login(o.provider_param)
|
|
1127
|
-
}, o.provider_label) : allowsNativeAuth ? /*#__PURE__*/external_react_default().createElement("div", {
|
|
1128
|
-
className: `${index_module.button}`,
|
|
1129
|
-
key: `provider-fnid`,
|
|
1130
|
-
"data-testid": "login-button",
|
|
1131
|
-
style: {
|
|
1132
|
-
color: o.button_border_color ? o.button_border_color : '#ffffff',
|
|
1133
|
-
border: `thin solid ${o.button_border_color ? o.button_border_color : o.button_color}`,
|
|
1134
|
-
backgroundColor: o.button_color,
|
|
1135
|
-
backgroundImage: o.provider_logo ? `url(${o.provider_logo})` : 'none',
|
|
1136
|
-
backgroundSize: o.provider_logo_size ? o.provider_logo_size : ''
|
|
1137
|
-
},
|
|
1138
|
-
onClick: () => login(o.provider_param)
|
|
1139
|
-
}, o.provider_label) : null;
|
|
1140
|
-
}), allowsOtpAuthlogin && /*#__PURE__*/external_react_default().createElement("div", {
|
|
1141
|
-
className: index_module.loginCode
|
|
1142
|
-
}, "or get a login code emailed to you", /*#__PURE__*/external_react_default().createElement("div", {
|
|
1143
|
-
className: index_module.input
|
|
1144
|
-
}, /*#__PURE__*/external_react_default().createElement("input", {
|
|
1145
|
-
placeholder: "youremail@example.com",
|
|
1146
|
-
value: email,
|
|
1147
|
-
onChange: e => setEmail(e.target.value),
|
|
1148
|
-
onKeyPress: ev => ev.key === 'Enter' ? loginCode() : null,
|
|
1149
|
-
"data-testid": "email-input"
|
|
1150
|
-
}), /*#__PURE__*/external_react_default().createElement("button", {
|
|
1151
|
-
onClick: () => loginCode(),
|
|
1152
|
-
"data-testid": "email-button"
|
|
1153
|
-
}, ">"), /*#__PURE__*/external_react_default().createElement("br", null)), emailError && /*#__PURE__*/external_react_default().createElement("span", {
|
|
1154
|
-
"data-testid": "email-error"
|
|
1155
|
-
}, "Please enter a valid email adress")))));
|
|
1156
|
-
};
|
|
1157
|
-
|
|
1158
|
-
/* harmony default export */ const login = (LoginComponent);
|
|
1342
|
+
// EXTERNAL MODULE: ./src/components/login/index.js + 1 modules
|
|
1343
|
+
var login = __webpack_require__(711);
|
|
1159
1344
|
;// CONCATENATED MODULE: ./src/components/payment/index.module.scss
|
|
1160
1345
|
// extracted by mini-css-extract-plugin
|
|
1161
|
-
/* harmony default export */ const
|
|
1346
|
+
/* harmony default export */ const index_module = ({"title":"title___LksVm","form":"form___v5GIx","fieldWrapper":"fieldWrapper___Eoe61"});
|
|
1162
1347
|
;// CONCATENATED MODULE: external "openstack-uicore-foundation/lib/components"
|
|
1163
1348
|
const components_namespaceObject = require("openstack-uicore-foundation/lib/components");
|
|
1164
1349
|
;// CONCATENATED MODULE: external "openstack-uicore-foundation/lib/utils/methods"
|
|
@@ -1201,14 +1386,14 @@ const LawPayForm = ({
|
|
|
1201
1386
|
provider,
|
|
1202
1387
|
timestamp
|
|
1203
1388
|
}) => {
|
|
1204
|
-
const [hostedFields, setHostedFields] = (0,
|
|
1205
|
-
const [lawPayFields, setLawPayFields] = (0,
|
|
1389
|
+
const [hostedFields, setHostedFields] = (0,external_react_.useState)(null);
|
|
1390
|
+
const [lawPayFields, setLawPayFields] = (0,external_react_.useState)({
|
|
1206
1391
|
exp_month: '',
|
|
1207
1392
|
exp_year: '',
|
|
1208
1393
|
postal_code: userProfile.postal_code || '',
|
|
1209
1394
|
address1: userProfile.address1 || ''
|
|
1210
1395
|
});
|
|
1211
|
-
const [lawPayErrors, setLawPayErrors] = (0,
|
|
1396
|
+
const [lawPayErrors, setLawPayErrors] = (0,external_react_.useState)({
|
|
1212
1397
|
exp_month: '',
|
|
1213
1398
|
exp_year: '',
|
|
1214
1399
|
postal_code: '',
|
|
@@ -1253,7 +1438,7 @@ const LawPayForm = ({
|
|
|
1253
1438
|
setLawPayErrors(lawpay_form_objectSpread(lawpay_form_objectSpread({}, lawPayErrors), fieldErrors));
|
|
1254
1439
|
};
|
|
1255
1440
|
|
|
1256
|
-
(0,
|
|
1441
|
+
(0,external_react_.useEffect)(() => {
|
|
1257
1442
|
if (window.AffiniPay && !hostedFields) {
|
|
1258
1443
|
setHostedFields(window.AffiniPay.HostedFields.initializeFields(hostedFieldsConfiguration, hostedFieldsCallBack));
|
|
1259
1444
|
}
|
|
@@ -1556,7 +1741,7 @@ const StripeForm = ({
|
|
|
1556
1741
|
}) => {
|
|
1557
1742
|
const stripe = (0,react_stripe_js_namespaceObject.useStripe)();
|
|
1558
1743
|
const elements = (0,react_stripe_js_namespaceObject.useElements)();
|
|
1559
|
-
const [stripeErrors, setStripeErrors] = (0,
|
|
1744
|
+
const [stripeErrors, setStripeErrors] = (0,external_react_.useState)({});
|
|
1560
1745
|
const {
|
|
1561
1746
|
register,
|
|
1562
1747
|
handleSubmit,
|
|
@@ -1713,7 +1898,7 @@ const stripe_component_StripeProvider = ({
|
|
|
1713
1898
|
provider,
|
|
1714
1899
|
stripeOptions
|
|
1715
1900
|
}) => {
|
|
1716
|
-
const stripePromise = (0,
|
|
1901
|
+
const stripePromise = (0,external_react_.useMemo)(() => (0,stripe_js_namespaceObject.loadStripe)(providerKey), [providerKey]);
|
|
1717
1902
|
const options = {
|
|
1718
1903
|
fonts: stripeOptions === null || stripeOptions === void 0 ? void 0 : stripeOptions.fonts
|
|
1719
1904
|
};
|
|
@@ -1788,11 +1973,11 @@ const PaymentComponent = ({
|
|
|
1788
1973
|
}
|
|
1789
1974
|
});
|
|
1790
1975
|
return /*#__PURE__*/external_react_default().createElement("div", {
|
|
1791
|
-
className: `${
|
|
1976
|
+
className: `${index_module.outerWrapper} step-wrapper`
|
|
1792
1977
|
}, /*#__PURE__*/external_react_default().createElement((external_react_default()).Fragment, null, /*#__PURE__*/external_react_default().createElement("div", {
|
|
1793
|
-
className: `${
|
|
1978
|
+
className: `${index_module.innerWrapper}`
|
|
1794
1979
|
}, /*#__PURE__*/external_react_default().createElement("div", {
|
|
1795
|
-
className:
|
|
1980
|
+
className: index_module.title
|
|
1796
1981
|
}, /*#__PURE__*/external_react_default().createElement("span", null, "Payment")), /*#__PURE__*/external_react_default().createElement(external_react_spring_namespaceObject.animated.div, {
|
|
1797
1982
|
style: payment_objectSpread({
|
|
1798
1983
|
overflow: `${isActive ? '' : 'hidden'}`
|
|
@@ -1880,7 +2065,7 @@ const PersonalInfoComponent = ({
|
|
|
1880
2065
|
}) => {
|
|
1881
2066
|
var _errors$email, _errors$email2;
|
|
1882
2067
|
|
|
1883
|
-
const [personalInfo, setPersonalInfo] = (0,
|
|
2068
|
+
const [personalInfo, setPersonalInfo] = (0,external_react_.useState)({
|
|
1884
2069
|
firstName: userProfile.given_name || (invitation ? invitation.first_name : ''),
|
|
1885
2070
|
lastName: userProfile.family_name || (invitation ? invitation.last_name : ''),
|
|
1886
2071
|
email: userProfile.email || '',
|
|
@@ -1890,7 +2075,7 @@ const PersonalInfoComponent = ({
|
|
|
1890
2075
|
},
|
|
1891
2076
|
promoCode: ''
|
|
1892
2077
|
});
|
|
1893
|
-
const [companyError, setCompanyError] = (0,
|
|
2078
|
+
const [companyError, setCompanyError] = (0,external_react_.useState)(false);
|
|
1894
2079
|
const {
|
|
1895
2080
|
register,
|
|
1896
2081
|
handleSubmit,
|
|
@@ -1898,7 +2083,7 @@ const PersonalInfoComponent = ({
|
|
|
1898
2083
|
errors
|
|
1899
2084
|
}
|
|
1900
2085
|
} = (0,external_react_hook_form_namespaceObject.useForm)();
|
|
1901
|
-
(0,
|
|
2086
|
+
(0,external_react_.useEffect)(() => {
|
|
1902
2087
|
if (reservation) {
|
|
1903
2088
|
setPersonalInfo({
|
|
1904
2089
|
firstName: reservation.owner_first_name ? reservation.owner_first_name : personalInfo.firstName,
|
|
@@ -2101,7 +2286,7 @@ const TicketDropdownComponent = ({
|
|
|
2101
2286
|
ticketTypes,
|
|
2102
2287
|
onTicketSelect
|
|
2103
2288
|
}) => {
|
|
2104
|
-
const [active, setActive] = (0,
|
|
2289
|
+
const [active, setActive] = (0,external_react_.useState)(false);
|
|
2105
2290
|
|
|
2106
2291
|
const ticketSelect = ticket => {
|
|
2107
2292
|
onTicketSelect(ticket);
|
|
@@ -2213,8 +2398,8 @@ const TicketTypeComponent = ({
|
|
|
2213
2398
|
inPersonDisclaimer,
|
|
2214
2399
|
showMultipleTicketTexts
|
|
2215
2400
|
}) => {
|
|
2216
|
-
const [ticket, setTicket] = (0,
|
|
2217
|
-
const [quantity, setQuantity] = (0,
|
|
2401
|
+
const [ticket, setTicket] = (0,external_react_.useState)(null);
|
|
2402
|
+
const [quantity, setQuantity] = (0,external_react_.useState)(1);
|
|
2218
2403
|
const minQuantity = 1;
|
|
2219
2404
|
const maxQuantity = getTicketMaxQuantity(ticket);
|
|
2220
2405
|
const [ref, {
|
|
@@ -2233,14 +2418,14 @@ const TicketTypeComponent = ({
|
|
|
2233
2418
|
height: isActive ? height + 10 : 0
|
|
2234
2419
|
}
|
|
2235
2420
|
});
|
|
2236
|
-
(0,
|
|
2421
|
+
(0,external_react_.useEffect)(() => {
|
|
2237
2422
|
var _reservation$tickets;
|
|
2238
2423
|
|
|
2239
2424
|
if (reservation && ((_reservation$tickets = reservation.tickets) === null || _reservation$tickets === void 0 ? void 0 : _reservation$tickets.length) > 0) {
|
|
2240
2425
|
setTicket(ticketTypes.find(t => t.id === reservation.tickets[0].ticket_type_id));
|
|
2241
2426
|
}
|
|
2242
2427
|
}, []);
|
|
2243
|
-
(0,
|
|
2428
|
+
(0,external_react_.useEffect)(() => {
|
|
2244
2429
|
changeForm({
|
|
2245
2430
|
ticketType: ticket,
|
|
2246
2431
|
ticketQuantity: quantity
|
|
@@ -2278,6 +2463,7 @@ const TicketTypeComponent = ({
|
|
|
2278
2463
|
className: ticket_type_index_module.promo
|
|
2279
2464
|
}, "Subtotal: ", `${ticket === null || ticket === void 0 ? void 0 : ticket.currency_symbol} ${(((reservation === null || reservation === void 0 ? void 0 : reservation.raw_amount_in_cents) - (reservation === null || reservation === void 0 ? void 0 : reservation.discount_amount_in_cents)) / 100).toFixed(2)} ${ticket === null || ticket === void 0 ? void 0 : ticket.currency}`), !isActive && (reservation === null || reservation === void 0 ? void 0 : reservation.taxes_amount) > 0 && /*#__PURE__*/external_react_default().createElement((external_react_default()).Fragment, null, reservation === null || reservation === void 0 ? void 0 : reservation.applied_taxes.map(tax => {
|
|
2280
2465
|
return /*#__PURE__*/external_react_default().createElement((external_react_default()).Fragment, null, /*#__PURE__*/external_react_default().createElement("span", {
|
|
2466
|
+
key: tax.id,
|
|
2281
2467
|
className: ticket_type_index_module.taxes
|
|
2282
2468
|
}, /*#__PURE__*/external_react_default().createElement("abbr", {
|
|
2283
2469
|
title: tax.name
|
|
@@ -2440,7 +2626,7 @@ const PurchaseComplete = ({
|
|
|
2440
2626
|
summit,
|
|
2441
2627
|
supportEmail = "support@fntech.com"
|
|
2442
2628
|
}) => {
|
|
2443
|
-
(0,
|
|
2629
|
+
(0,external_react_.useEffect)(() => {
|
|
2444
2630
|
onPurchaseComplete(checkout);
|
|
2445
2631
|
}, []);
|
|
2446
2632
|
const date = new Date();
|
|
@@ -2482,108 +2668,8 @@ const PurchaseComplete = ({
|
|
|
2482
2668
|
};
|
|
2483
2669
|
|
|
2484
2670
|
/* harmony default export */ const purchase_complete = (PurchaseComplete);
|
|
2485
|
-
|
|
2486
|
-
|
|
2487
|
-
var external_react_otp_input_default = /*#__PURE__*/__webpack_require__.n(external_react_otp_input_namespaceObject);
|
|
2488
|
-
;// CONCATENATED MODULE: ./src/components/login-passwordless/index.module.scss
|
|
2489
|
-
// extracted by mini-css-extract-plugin
|
|
2490
|
-
/* harmony default export */ const login_passwordless_index_module = ({"passwordlessWrapper":"passwordlessWrapper___BRQ_s","innerWrapper":"innerWrapper___nRLDi","logo":"logo___qNVrv","digits":"digits___Vu5iy","codeInput":"codeInput___LnTZe","error":"error___wZflZ","verify":"verify___IBgMl","button":"button___nBhtQ","link":"link___f6fDT","resend":"resend___Nma1U"});
|
|
2491
|
-
// EXTERNAL MODULE: ./src/assets/FNid_WHT_logo_rgb.svg
|
|
2492
|
-
var FNid_WHT_logo_rgb = __webpack_require__(802);
|
|
2493
|
-
var FNid_WHT_logo_rgb_default = /*#__PURE__*/__webpack_require__.n(FNid_WHT_logo_rgb);
|
|
2494
|
-
;// CONCATENATED MODULE: ./src/components/login-passwordless/index.js
|
|
2495
|
-
/**
|
|
2496
|
-
* Copyright 2020 OpenStack Foundation
|
|
2497
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
2498
|
-
* you may not use this file except in compliance with the License.
|
|
2499
|
-
* You may obtain a copy of the License at
|
|
2500
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
2501
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
2502
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
2503
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
2504
|
-
* See the License for the specific language governing permissions and
|
|
2505
|
-
* limitations under the License.
|
|
2506
|
-
**/
|
|
2507
|
-
|
|
2508
|
-
|
|
2509
|
-
|
|
2510
|
-
|
|
2511
|
-
|
|
2512
|
-
|
|
2513
|
-
const PasswordlessLoginComponent = ({
|
|
2514
|
-
email,
|
|
2515
|
-
codeLength,
|
|
2516
|
-
passwordlessLogin,
|
|
2517
|
-
loginWithCode,
|
|
2518
|
-
codeError,
|
|
2519
|
-
goToLogin,
|
|
2520
|
-
getLoginCode,
|
|
2521
|
-
getPasswordlessCode
|
|
2522
|
-
}) => {
|
|
2523
|
-
const [otpCode, setOtpCode] = (0,external_react_namespaceObject.useState)('');
|
|
2524
|
-
const [otpError, setOtpError] = (0,external_react_namespaceObject.useState)(false);
|
|
2525
|
-
|
|
2526
|
-
const tryPasswordlessLogin = code => {
|
|
2527
|
-
if (code.length === codeLength) {
|
|
2528
|
-
setOtpError(false);
|
|
2529
|
-
passwordlessLogin(otpCode, loginWithCode);
|
|
2530
|
-
} else {
|
|
2531
|
-
setOtpError(true);
|
|
2532
|
-
}
|
|
2533
|
-
};
|
|
2534
|
-
|
|
2535
|
-
const resendCode = () => {
|
|
2536
|
-
getLoginCode(email, getPasswordlessCode);
|
|
2537
|
-
};
|
|
2538
|
-
|
|
2539
|
-
return /*#__PURE__*/external_react_default().createElement("div", {
|
|
2540
|
-
className: `${login_passwordless_index_module.passwordlessWrapper} step-wrapper`
|
|
2541
|
-
}, /*#__PURE__*/external_react_default().createElement((external_react_default()).Fragment, null, /*#__PURE__*/external_react_default().createElement("div", {
|
|
2542
|
-
className: `${login_passwordless_index_module.innerWrapper}`
|
|
2543
|
-
}, /*#__PURE__*/external_react_default().createElement("img", {
|
|
2544
|
-
src: (FNid_WHT_logo_rgb_default()),
|
|
2545
|
-
alt: "FNid",
|
|
2546
|
-
className: login_passwordless_index_module.logo
|
|
2547
|
-
}), /*#__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", {
|
|
2548
|
-
"data-testid": "email"
|
|
2549
|
-
}, email), /*#__PURE__*/external_react_default().createElement("br", null), /*#__PURE__*/external_react_default().createElement("span", {
|
|
2550
|
-
className: login_passwordless_index_module.digits,
|
|
2551
|
-
"data-testid": "code-digits"
|
|
2552
|
-
}, "Add the ", codeLength, " digit code below")), /*#__PURE__*/external_react_default().createElement("div", {
|
|
2553
|
-
className: login_passwordless_index_module.codeInput
|
|
2554
|
-
}, /*#__PURE__*/external_react_default().createElement((external_react_otp_input_default()), {
|
|
2555
|
-
value: otpCode,
|
|
2556
|
-
onChange: code => setOtpCode(code),
|
|
2557
|
-
numInputs: codeLength,
|
|
2558
|
-
shouldAutoFocus: true,
|
|
2559
|
-
hasErrored: otpError || codeError,
|
|
2560
|
-
errorStyle: {
|
|
2561
|
-
border: '1px solid #e5424d'
|
|
2562
|
-
},
|
|
2563
|
-
"data-testid": "otp-input"
|
|
2564
|
-
})), codeError && /*#__PURE__*/external_react_default().createElement("span", {
|
|
2565
|
-
className: login_passwordless_index_module.error,
|
|
2566
|
-
"data-testid": "error"
|
|
2567
|
-
}, "The code you entered it's incorrect. ", /*#__PURE__*/external_react_default().createElement("br", null), " Please try again."), /*#__PURE__*/external_react_default().createElement("div", {
|
|
2568
|
-
className: login_passwordless_index_module.verify
|
|
2569
|
-
}, /*#__PURE__*/external_react_default().createElement("div", {
|
|
2570
|
-
className: `${login_passwordless_index_module.button} button`,
|
|
2571
|
-
onClick: () => tryPasswordlessLogin(otpCode),
|
|
2572
|
-
"data-testid": "verify"
|
|
2573
|
-
}, "Verify Email"), /*#__PURE__*/external_react_default().createElement("b", null, "or go back and ", /*#__PURE__*/external_react_default().createElement("span", {
|
|
2574
|
-
className: login_passwordless_index_module.link,
|
|
2575
|
-
onClick: () => goToLogin(),
|
|
2576
|
-
"data-testid": "go-back"
|
|
2577
|
-
}, "try another way")))), /*#__PURE__*/external_react_default().createElement("div", {
|
|
2578
|
-
className: login_passwordless_index_module.resend
|
|
2579
|
-
}, "Didn\u2019t receive it? Check your spam/junk folder, or ", /*#__PURE__*/external_react_default().createElement("span", {
|
|
2580
|
-
className: login_passwordless_index_module.link,
|
|
2581
|
-
onClick: () => resendCode(),
|
|
2582
|
-
"data-testid": "resend"
|
|
2583
|
-
}, "resend email"), " now.")));
|
|
2584
|
-
};
|
|
2585
|
-
|
|
2586
|
-
/* harmony default export */ const login_passwordless = (PasswordlessLoginComponent);
|
|
2671
|
+
// EXTERNAL MODULE: ./src/components/login-passwordless/index.js + 2 modules
|
|
2672
|
+
var login_passwordless = __webpack_require__(168);
|
|
2587
2673
|
;// CONCATENATED MODULE: ./src/components/ticket-owned/index.module.scss
|
|
2588
2674
|
// extracted by mini-css-extract-plugin
|
|
2589
2675
|
/* harmony default export */ const ticket_owned_index_module = ({"ticketOwnedWrapper":"ticketOwnedWrapper___nhkDY","alert":"alert___c49oP"});
|
|
@@ -2607,17 +2693,19 @@ const TicketOwnedComponent = ({
|
|
|
2607
2693
|
ownedTickets,
|
|
2608
2694
|
ticketTypes
|
|
2609
2695
|
}) => {
|
|
2610
|
-
const ownedTicketsString = (0,
|
|
2696
|
+
const ownedTicketsString = (0,external_react_.useMemo)(() => ownedTickets.reduce((acc, ownedTicket, index) => {
|
|
2611
2697
|
const ticketType = ticketTypes.find(type => type.id === ownedTicket.type_id);
|
|
2612
2698
|
if (!ticketType) return acc;
|
|
2613
|
-
return
|
|
2699
|
+
return `
|
|
2700
|
+
${acc}${acc ? `${index + 1 === ownedTickets.length ? ' and ' : ', '}` : ''}
|
|
2701
|
+
${ownedTicket.qty} ${ticketType.name}${index === 0 ? !ticketType.name.toLowerCase().endsWith('ticket') ? ' ticket' : '' : ticketType.name.toLowerCase().endsWith('ticket') ? '' : ''}${ownedTicket.qty > 1 ? 's' : ''}`;
|
|
2614
2702
|
}, ''), [ownedTickets, ticketTypes]);
|
|
2615
2703
|
return /*#__PURE__*/external_react_default().createElement("div", {
|
|
2616
2704
|
className: ticket_owned_index_module.ticketOwnedWrapper
|
|
2617
2705
|
}, /*#__PURE__*/external_react_default().createElement("div", {
|
|
2618
2706
|
className: `${ticket_owned_index_module.alert} alert alert-warning`,
|
|
2619
2707
|
role: "alert"
|
|
2620
|
-
}, "You have already ordered ", ownedTicketsString, ". If you would like to order more
|
|
2708
|
+
}, "You have already ordered ", ownedTicketsString, ". If you would like to order more, please do so below."));
|
|
2621
2709
|
};
|
|
2622
2710
|
|
|
2623
2711
|
/* harmony default export */ const ticket_owned = (TicketOwnedComponent);
|
|
@@ -2826,7 +2914,7 @@ const RegistrationLite = _ref => {
|
|
|
2826
2914
|
} = _ref,
|
|
2827
2915
|
rest = registration_lite_objectWithoutProperties(_ref, registration_lite_excluded);
|
|
2828
2916
|
|
|
2829
|
-
const [registrationForm, setRegistrationForm] = (0,
|
|
2917
|
+
const [registrationForm, setRegistrationForm] = (0,external_react_.useState)({
|
|
2830
2918
|
values: {
|
|
2831
2919
|
ticketType: null,
|
|
2832
2920
|
ticketQuantity: 1,
|
|
@@ -2835,7 +2923,7 @@ const RegistrationLite = _ref => {
|
|
|
2835
2923
|
},
|
|
2836
2924
|
errors: []
|
|
2837
2925
|
});
|
|
2838
|
-
const [ticketTaxesError, setTicketTaxesError] = (0,
|
|
2926
|
+
const [ticketTaxesError, setTicketTaxesError] = (0,external_react_.useState)(false);
|
|
2839
2927
|
const {
|
|
2840
2928
|
values: formValues,
|
|
2841
2929
|
errors: formErrors
|
|
@@ -2853,7 +2941,7 @@ const RegistrationLite = _ref => {
|
|
|
2853
2941
|
publicKey,
|
|
2854
2942
|
provider
|
|
2855
2943
|
} = getCurrentProvider(summitData);
|
|
2856
|
-
(0,
|
|
2944
|
+
(0,external_react_.useEffect)(() => {
|
|
2857
2945
|
loadSession(registration_lite_objectSpread(registration_lite_objectSpread({}, rest), {}, {
|
|
2858
2946
|
summitData,
|
|
2859
2947
|
profileData
|
|
@@ -2863,17 +2951,17 @@ const RegistrationLite = _ref => {
|
|
|
2863
2951
|
changeStep(0);
|
|
2864
2952
|
}
|
|
2865
2953
|
}, [profileData]);
|
|
2866
|
-
(0,
|
|
2954
|
+
(0,external_react_.useEffect)(() => {
|
|
2867
2955
|
if (summitData && profileData) {
|
|
2868
2956
|
handleGetTicketTypesAndTaxes(summitData.id);
|
|
2869
2957
|
}
|
|
2870
2958
|
}, [summitData, profileData]);
|
|
2871
|
-
(0,
|
|
2959
|
+
(0,external_react_.useEffect)(() => {
|
|
2872
2960
|
if (summitData && profileData) {
|
|
2873
2961
|
getMyInvitation(summitData.id).catch(e => console.log(e));
|
|
2874
2962
|
}
|
|
2875
2963
|
}, [summitData, profileData]);
|
|
2876
|
-
(0,
|
|
2964
|
+
(0,external_react_.useEffect)(() => {
|
|
2877
2965
|
if (step === 1 && formValues !== null && formValues !== void 0 && formValues.ticketType && formValues !== null && formValues !== void 0 && formValues.personalInformation) {
|
|
2878
2966
|
reserveTicket({
|
|
2879
2967
|
provider,
|
|
@@ -2899,7 +2987,7 @@ const RegistrationLite = _ref => {
|
|
|
2899
2987
|
changeStep(0);
|
|
2900
2988
|
}
|
|
2901
2989
|
}, [formValues]);
|
|
2902
|
-
(0,
|
|
2990
|
+
(0,external_react_.useEffect)(() => {
|
|
2903
2991
|
setFormErrors([]);
|
|
2904
2992
|
}, [step]);
|
|
2905
2993
|
const [ref, {
|
|
@@ -2968,15 +3056,15 @@ const RegistrationLite = _ref => {
|
|
|
2968
3056
|
noAllowedTicketsMessage: noAllowedTicketsMessage
|
|
2969
3057
|
}), !ticketTaxesError && /*#__PURE__*/external_react_default().createElement("div", {
|
|
2970
3058
|
className: general_module.stepsWrapper
|
|
2971
|
-
}, !profileData && !passwordlessCodeSent && /*#__PURE__*/external_react_default().createElement(login, {
|
|
2972
|
-
|
|
3059
|
+
}, !profileData && !passwordlessCodeSent && /*#__PURE__*/external_react_default().createElement(login["default"], {
|
|
3060
|
+
loginOptions: loginOptions,
|
|
2973
3061
|
allowsNativeAuth: allowsNativeAuth,
|
|
2974
3062
|
allowsOtpAuth: allowsOtpAuth,
|
|
2975
3063
|
login: provider => rest.authUser(provider),
|
|
2976
3064
|
getLoginCode: getLoginCode,
|
|
2977
3065
|
getPasswordlessCode: getPasswordlessCode,
|
|
2978
3066
|
initialEmailValue: loginInitialEmailInputValue
|
|
2979
|
-
}), !profileData && passwordlessCodeSent && /*#__PURE__*/external_react_default().createElement(login_passwordless, {
|
|
3067
|
+
}), !profileData && passwordlessCodeSent && /*#__PURE__*/external_react_default().createElement(login_passwordless["default"], {
|
|
2980
3068
|
codeLength: passwordlessCode,
|
|
2981
3069
|
email: passwordlessEmail,
|
|
2982
3070
|
passwordlessLogin: passwordlessLogin,
|
|
@@ -3124,6 +3212,8 @@ class RegistrationLiteWidget extends (external_react_default()).PureComponent {
|
|
|
3124
3212
|
|
|
3125
3213
|
}
|
|
3126
3214
|
|
|
3215
|
+
|
|
3216
|
+
|
|
3127
3217
|
/* harmony default export */ const summit_registration_lite = (RegistrationLiteWidget);
|
|
3128
3218
|
})();
|
|
3129
3219
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "summit-registration-lite",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0",
|
|
4
4
|
"description": "Summit Registration Lite",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -48,6 +48,7 @@
|
|
|
48
48
|
"dotenv-webpack": "^7.1.0",
|
|
49
49
|
"dropzone": "^6.0.0-beta.2",
|
|
50
50
|
"file-loader": "^6.2.0",
|
|
51
|
+
"final-form": "^4.20.9",
|
|
51
52
|
"font-awesome": "4.7.0",
|
|
52
53
|
"history": "^4.7.2",
|
|
53
54
|
"html-webpack-plugin": "^5.5.0",
|
|
@@ -70,6 +71,7 @@
|
|
|
70
71
|
"react-dnd-html5-backend": "^16.0.1",
|
|
71
72
|
"react-dom": "^16.4.1",
|
|
72
73
|
"react-dropzone": "^14.2.1",
|
|
74
|
+
"react-final-form": "^6.5.9",
|
|
73
75
|
"react-redux": "^7.2.0",
|
|
74
76
|
"react-router": "^4.3.1",
|
|
75
77
|
"react-router-dom": "^4.3.1",
|