powr-sdk-web 5.3.1 → 5.3.2

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.
@@ -28,7 +28,9 @@ var PowrVerify = function PowrVerify(_ref) {
28
28
  _ref$defaultCountryCo = _ref.defaultCountryCode,
29
29
  defaultCountryCode = _ref$defaultCountryCo === void 0 ? '91' : _ref$defaultCountryCo,
30
30
  _ref$appName = _ref.appName,
31
- appName = _ref$appName === void 0 ? 'App' : _ref$appName;
31
+ appName = _ref$appName === void 0 ? 'App' : _ref$appName,
32
+ _ref$projectId = _ref.projectId,
33
+ projectId = _ref$projectId === void 0 ? undefined : _ref$projectId;
32
34
  var _useState = (0, _react.useState)(''),
33
35
  _useState2 = _slicedToArray(_useState, 2),
34
36
  phone = _useState2[0],
@@ -57,6 +59,10 @@ var PowrVerify = function PowrVerify(_ref) {
57
59
  _useState12 = _slicedToArray(_useState11, 2),
58
60
  success = _useState12[0],
59
61
  setSuccess = _useState12[1];
62
+ var _useState13 = (0, _react.useState)(0),
63
+ _useState14 = _slicedToArray(_useState13, 2),
64
+ resendTimer = _useState14[0],
65
+ setResendTimer = _useState14[1];
60
66
  var formatPhone = function formatPhone(p) {
61
67
  var clean = (p || '').replace(/\D/g, '');
62
68
  if (!clean) return '';
@@ -118,6 +124,7 @@ var PowrVerify = function PowrVerify(_ref) {
118
124
  setConfirmationResult(confirmation);
119
125
  setOtpSent(true);
120
126
  setSuccess('OTP sent to ' + phoneNumber);
127
+ setResendTimer(60);
121
128
  _context.n = 9;
122
129
  break;
123
130
  case 8:
@@ -180,8 +187,17 @@ var PowrVerify = function PowrVerify(_ref) {
180
187
  setOtpSent(false);
181
188
  setConfirmationResult(null);
182
189
  clearRecaptcha();
190
+ setResendTimer(0);
183
191
  if (typeof onVerified === 'function') {
184
- onVerified(token);
192
+ // Pass token and projectId. Keep backward compatibility by
193
+ // allowing consumers to accept a single token arg.
194
+ try {
195
+ onVerified(token, projectId);
196
+ } catch (e) {
197
+ try {
198
+ onVerified(token);
199
+ } catch (_) {/* ignore */}
200
+ }
185
201
  }
186
202
  _context2.n = 10;
187
203
  break;
@@ -203,70 +219,100 @@ var PowrVerify = function PowrVerify(_ref) {
203
219
  return _ref3.apply(this, arguments);
204
220
  };
205
221
  }();
222
+ (0, _react.useEffect)(function () {
223
+ if (resendTimer <= 0) return;
224
+ var id = setInterval(function () {
225
+ setResendTimer(function (t) {
226
+ if (t <= 1) {
227
+ clearInterval(id);
228
+ return 0;
229
+ }
230
+ return t - 1;
231
+ });
232
+ }, 1000);
233
+ return function () {
234
+ return clearInterval(id);
235
+ };
236
+ }, [resendTimer]);
206
237
  return /*#__PURE__*/_react["default"].createElement("div", {
207
238
  style: containerStyle
208
239
  }, /*#__PURE__*/_react["default"].createElement("div", {
209
240
  style: cardStyle
241
+ }, /*#__PURE__*/_react["default"].createElement("div", {
242
+ style: headerRowStyle
210
243
  }, /*#__PURE__*/_react["default"].createElement("h2", {
211
244
  style: {
212
- margin: 0,
213
- marginBottom: 12
245
+ margin: 0
214
246
  }
215
- }, appName, " \u2014 Verify Phone"), /*#__PURE__*/_react["default"].createElement("p", {
247
+ }, appName), /*#__PURE__*/_react["default"].createElement("div", {
248
+ style: pillStyle
249
+ }, "Phone Verification")), /*#__PURE__*/_react["default"].createElement("p", {
216
250
  style: {
217
- marginTop: 0,
218
- marginBottom: 16,
219
- color: '#666'
251
+ marginTop: 8,
252
+ marginBottom: 14,
253
+ color: '#6b7280'
220
254
  }
221
- }, "Enter your phone number and verify OTP. Only phone input is required."), /*#__PURE__*/_react["default"].createElement("label", {
255
+ }, "Tell us your phone and we'll send a one-time code."), /*#__PURE__*/_react["default"].createElement("label", {
222
256
  style: labelStyle
223
- }, "Phone number"), /*#__PURE__*/_react["default"].createElement("input", {
257
+ }, "Phone number"), /*#__PURE__*/_react["default"].createElement("div", {
258
+ style: phoneRowStyle
259
+ }, /*#__PURE__*/_react["default"].createElement("div", {
260
+ style: prefixBox
261
+ }, defaultCountryCode), /*#__PURE__*/_react["default"].createElement("input", {
224
262
  type: "text",
225
263
  value: phone,
226
264
  onChange: function onChange(e) {
227
- return setPhone(e.target.value);
265
+ return setPhone((e.target.value || '').replace(/\D/g, '').slice(0, 10));
228
266
  },
229
- placeholder: "e.g. 9876543210",
230
- style: inputStyle,
267
+ placeholder: "0000000000",
268
+ style: inputFlexStyle,
231
269
  disabled: otpSent
232
- }), !otpSent && /*#__PURE__*/_react["default"].createElement("button", {
270
+ })), !otpSent && /*#__PURE__*/_react["default"].createElement("button", {
233
271
  onClick: sendOtp,
234
272
  style: buttonStyle,
235
- disabled: loading
273
+ disabled: loading || phone.replace(/\D/g, '').length < 10
236
274
  }, loading ? 'Sending...' : 'Send OTP'), otpSent && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("label", {
237
275
  style: _objectSpread(_objectSpread({}, labelStyle), {}, {
238
276
  marginTop: 12
239
277
  })
240
- }, "Enter OTP"), /*#__PURE__*/_react["default"].createElement("input", {
278
+ }, "Enter OTP"), /*#__PURE__*/_react["default"].createElement("div", {
279
+ style: phoneRowStyle
280
+ }, /*#__PURE__*/_react["default"].createElement("input", {
241
281
  type: "text",
242
282
  value: otp,
243
283
  onChange: function onChange(e) {
244
- return setOtp(e.target.value);
284
+ return setOtp((e.target.value || '').replace(/\D/g, '').slice(0, 6));
245
285
  },
246
286
  placeholder: "6-digit code",
247
- style: inputStyle,
248
- maxLength: 6
249
- }), /*#__PURE__*/_react["default"].createElement("div", {
287
+ style: inputFlexStyle,
288
+ maxLength: 6,
289
+ autoFocus: true
290
+ }), /*#__PURE__*/_react["default"].createElement("button", {
291
+ onClick: verifyOtp,
292
+ style: _objectSpread({}, buttonSmallStyle),
293
+ disabled: loading || otp.length !== 6
294
+ }, loading ? 'Verifying...' : 'Verify')), /*#__PURE__*/_react["default"].createElement("div", {
250
295
  style: {
251
296
  display: 'flex',
252
- gap: 8
297
+ gap: 8,
298
+ marginTop: 10
253
299
  }
254
300
  }, /*#__PURE__*/_react["default"].createElement("button", {
255
- onClick: verifyOtp,
256
- style: _objectSpread(_objectSpread({}, buttonStyle), {}, {
257
- flex: 1
258
- }),
259
- disabled: loading || otp.length < 4
260
- }, loading ? 'Verifying...' : 'Verify OTP'), /*#__PURE__*/_react["default"].createElement("button", {
261
301
  onClick: function onClick() {
262
302
  setOtpSent(false);
263
303
  setConfirmationResult(null);
264
304
  clearRecaptcha();
265
305
  setOtp('');
306
+ setSuccess('');
307
+ setError('');
266
308
  },
267
309
  style: _objectSpread({}, secondaryButtonStyle),
268
310
  disabled: loading
269
- }, "Cancel"))), error && /*#__PURE__*/_react["default"].createElement("div", {
311
+ }, "Cancel"), /*#__PURE__*/_react["default"].createElement("button", {
312
+ onClick: sendOtp,
313
+ style: _objectSpread({}, tertiaryButtonStyle),
314
+ disabled: resendTimer > 0 || loading
315
+ }, resendTimer > 0 ? "Resend in ".concat(resendTimer, "s") : 'Resend OTP'))), error && /*#__PURE__*/_react["default"].createElement("div", {
270
316
  style: errorStyle
271
317
  }, error), success && /*#__PURE__*/_react["default"].createElement("div", {
272
318
  style: successStyle
@@ -287,6 +333,40 @@ var cardStyle = {
287
333
  boxShadow: '0 6px 18px rgba(0,0,0,0.08)',
288
334
  background: 'white'
289
335
  };
336
+ var headerRowStyle = {
337
+ display: 'flex',
338
+ justifyContent: 'space-between',
339
+ alignItems: 'center'
340
+ };
341
+ var pillStyle = {
342
+ background: '#ffedd5',
343
+ color: '#7c2d12',
344
+ padding: '6px 10px',
345
+ borderRadius: 20,
346
+ fontSize: 12,
347
+ fontWeight: 700
348
+ };
349
+ var phoneRowStyle = {
350
+ display: 'flex',
351
+ gap: 8,
352
+ alignItems: 'center',
353
+ width: '100%'
354
+ };
355
+ var prefixBox = {
356
+ background: '#fff7ed',
357
+ color: '#7c2d12',
358
+ padding: '10px 12px',
359
+ borderRadius: 8,
360
+ fontWeight: 700,
361
+ border: '1px solid #ffedd5'
362
+ };
363
+ var inputFlexStyle = {
364
+ flex: 1,
365
+ padding: 10,
366
+ borderRadius: 8,
367
+ border: '1px solid #e5e7eb',
368
+ boxSizing: 'border-box'
369
+ };
290
370
  var labelStyle = {
291
371
  fontSize: 13,
292
372
  fontWeight: 600,
@@ -308,8 +388,26 @@ var buttonStyle = {
308
388
  border: 'none',
309
389
  borderRadius: 8,
310
390
  cursor: 'pointer',
311
- fontWeight: 600,
312
- marginBottom: 8
391
+ fontWeight: 700,
392
+ marginTop: 8
393
+ };
394
+ var buttonSmallStyle = {
395
+ padding: '10px 14px',
396
+ background: '#ff6b35',
397
+ color: 'white',
398
+ border: 'none',
399
+ borderRadius: 8,
400
+ cursor: 'pointer',
401
+ fontWeight: 700
402
+ };
403
+ var tertiaryButtonStyle = {
404
+ padding: 12,
405
+ background: '#fff7ed',
406
+ color: '#7c2d12',
407
+ border: 'none',
408
+ borderRadius: 8,
409
+ cursor: 'pointer',
410
+ fontWeight: 700
313
411
  };
314
412
  var secondaryButtonStyle = {
315
413
  padding: 12,
@@ -318,7 +416,7 @@ var secondaryButtonStyle = {
318
416
  border: 'none',
319
417
  borderRadius: 8,
320
418
  cursor: 'pointer',
321
- fontWeight: 600
419
+ fontWeight: 700
322
420
  };
323
421
  var errorStyle = {
324
422
  marginTop: 8,
@@ -45,14 +45,14 @@ function _asyncToGenerator(n) { return function () { var t = this, e = arguments
45
45
  // };
46
46
 
47
47
  var firebaseConfig = {
48
- apiKey: process.env.REACT_APP_FIREBASE_API_KEY || "AIzaSyDat2fOUObvO2VYjLmFCw6rEtXJ2ifgVes",
49
- authDomain: process.env.REACT_APP_FIREBASE_AUTH_DOMAIN || "urbanstall-a4c7b.firebaseapp.com",
50
- projectId: process.env.REACT_APP_FIREBASE_PROJECT_ID || "urbanstall-a4c7b",
51
- storageBucket: process.env.REACT_APP_FIREBASE_STORAGE_BUCKET || "urbanstall-a4c7b.appspot.com",
52
- messagingSenderId: process.env.REACT_APP_FIREBASE_MESSAGING_SENDER_ID || "215923273605",
53
- appId: process.env.REACT_APP_FIREBASE_APP_ID || "1:215923273605:web:7b60fd3f961efbd0be9eec",
54
- measurementId: process.env.REACT_APP_FIREBASE_MEASUREMENT_ID || "G-KQ36ZTNCD5",
55
- databaseURL: process.env.REACT_APP_FIREBASE_DATABASE_URL || "https://urbanstall-a4c7b.firebaseio.com"
48
+ apiKey: process.env.REACT_APP_FIREBASE_API_KEY || "AIzaSyAYsrxbOH6-qHvaDVa_JBf52lFzfriJzf8",
49
+ authDomain: process.env.REACT_APP_FIREBASE_AUTH_DOMAIN || "powrapp-f19f4.firebaseapp.com",
50
+ projectId: process.env.REACT_APP_FIREBASE_PROJECT_ID || "powrapp-f19f4",
51
+ storageBucket: process.env.REACT_APP_FIREBASE_STORAGE_BUCKET || "powrapp-f19f4.firebasestorage.app",
52
+ messagingSenderId: process.env.REACT_APP_FIREBASE_MESSAGING_SENDER_ID || "594348480000",
53
+ appId: process.env.REACT_APP_FIREBASE_APP_ID || "1:594348480000:web:c8dfee7db251523b99aae5",
54
+ measurementId: process.env.REACT_APP_FIREBASE_MEASUREMENT_ID || "G-VGMYP6B1QL",
55
+ databaseURL: process.env.REACT_APP_FIREBASE_DATABASE_URL || undefined
56
56
  };
57
57
  var app = exports.app = (0, _app.initializeApp)(firebaseConfig);
58
58
  var functions = exports.functions = (0, _functions.getFunctions)(app);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "powr-sdk-web",
3
- "version": "5.3.1",
3
+ "version": "5.3.2",
4
4
  "main": "dist/index.js",
5
5
  "scripts": {
6
6
  "build": "babel src -d dist --copy-files",