@bigbinary/neeto-media-recorder 2.5.7 → 2.5.8-beta

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/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import { shallow } from 'zustand/shallow';
2
- import { useState, useEffect, forwardRef, useImperativeHandle, useRef } from 'react';
2
+ import { useEffect, useState, forwardRef, useRef, useImperativeHandle } from 'react';
3
3
  import classNames from 'classnames';
4
4
  import { isNotEmpty, noop } from '@bigbinary/neeto-cist';
5
5
  import { SCREEN_RECORDER_STATUS, UPLOAD_STATUS as UPLOAD_STATUS$1, MIME_TYPE as MIME_TYPE$1, ONE_MINUTE_IN_MILLISECONDS as ONE_MINUTE_IN_MILLISECONDS$1, ONE_SECOND_IN_MILLISECONDS as ONE_SECOND_IN_MILLISECONDS$1, IS_EXTENSION as IS_EXTENSION$1, SCREEN_RECORDER_ERROR, IS_SAFARI_EXTENSION, SCREEN_RECORDER_EVENT, UPLOAD_EVENT } from '@bigbinary/neeto-media-recorder/constants';
6
- import { screenRecorder, multipartS3Uploader } from '@bigbinary/neeto-media-recorder/core';
6
+ import { screenRecorder, useMultipartS3UploadStatus, getMultipartS3Uploader } from '@bigbinary/neeto-media-recorder/core';
7
7
  import PageLoader from '@bigbinary/neeto-molecules/PageLoader';
8
8
  import Alert from '@bigbinary/neetoui/Alert';
9
9
  import Button from '@bigbinary/neetoui/Button';
@@ -121,10 +121,7 @@ function _iterableToArrayLimit(arr, i) {
121
121
  _n = !0,
122
122
  _d = !1;
123
123
  try {
124
- if (_x = (_i = _i.call(arr)).next, 0 === i) {
125
- if (Object(_i) !== _i) return;
126
- _n = !1;
127
- } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0);
124
+ if (_x = (_i = _i.call(arr)).next, 0 === i) ; else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0);
128
125
  } catch (err) {
129
126
  _d = !0, _e = err;
130
127
  } finally {
@@ -169,8 +166,6 @@ var regeneratorRuntime$1 = {exports: {}};
169
166
 
170
167
  var _typeof = {exports: {}};
171
168
 
172
- _typeof.exports;
173
-
174
169
  (function (module) {
175
170
  function _typeof(obj) {
176
171
  "@babel/helpers - typeof";
@@ -186,8 +181,6 @@ _typeof.exports;
186
181
 
187
182
  var _typeofExports = _typeof.exports;
188
183
 
189
- regeneratorRuntime$1.exports;
190
-
191
184
  (function (module) {
192
185
  var _typeof = _typeofExports["default"];
193
186
  function _regeneratorRuntime() {
@@ -949,23 +942,39 @@ var Controls = function Controls(_ref) {
949
942
  });
950
943
  };
951
944
 
952
- var useMultipartS3UploadStatus = function useMultipartS3UploadStatus() {
953
- var useMultipartS3UploadStore = multipartS3Uploader.useMultipartS3UploadStore;
954
- var _useMultipartS3Upload = useMultipartS3UploadStore(function (store) {
955
- return {
956
- status: store["status"]
945
+ var useHandleErrors = function useHandleErrors(_ref) {
946
+ var error = _ref.error,
947
+ recorderStatus = _ref.recorderStatus;
948
+ var _useRecorderStatus = useRecorderStatus(),
949
+ isRecorderStatus = _useRecorderStatus.isStatus;
950
+ useEffect(function () {
951
+ if (error === SCREEN_RECORDER_ERROR.UnSupportedBrowser) return noop;
952
+ if (error === SCREEN_RECORDER_ERROR.FailedToStart) return noop;
953
+ if (!isRecorderStatus(SCREEN_RECORDER_STATUS.idle) || error === SCREEN_RECORDER_ERROR.NotAllowedError || error === SCREEN_RECORDER_ERROR.MicPermissionDenied || IS_SAFARI_EXTENSION) {
954
+ if (error !== SCREEN_RECORDER_ERROR.MicPermissionDenied) return noop;
955
+ var cleanupFunction = noop;
956
+ window.navigator.permissions.query({
957
+ name: "microphone"
958
+ })
959
+ // eslint-disable-next-line promise/prefer-await-to-then
960
+ .then(function (micPermission) {
961
+ var handleChange = function handleChange() {
962
+ if (micPermission.state === "granted") {
963
+ screenRecorder.startRecording();
964
+ }
965
+ };
966
+ micPermission.addEventListener("change", handleChange);
967
+ cleanupFunction = function cleanupFunction() {
968
+ return micPermission.removeEventListener("change", handleChange);
969
+ };
970
+ });
971
+ return function () {
972
+ cleanupFunction();
957
973
  };
958
- }, shallow),
959
- status = _useMultipartS3Upload.status;
960
- var isStatus = function isStatus() {
961
- for (var _len = arguments.length, statuses = new Array(_len), _key = 0; _key < _len; _key++) {
962
- statuses[_key] = arguments[_key];
963
974
  }
964
- return statuses.includes(status);
965
- };
966
- return {
967
- isStatus: isStatus
968
- };
975
+ screenRecorder.startRecording();
976
+ return noop;
977
+ }, [recorderStatus, error]);
969
978
  };
970
979
 
971
980
  var Timer = function Timer() {
@@ -1239,7 +1248,6 @@ var _window;
1239
1248
  var useRecorderStore = screenRecorder.useRecorderStore,
1240
1249
  restartRecording = screenRecorder.restartRecording,
1241
1250
  discardRecording = screenRecorder.discardRecording;
1242
- var useMultipartS3UploadStore = multipartS3Uploader.useMultipartS3UploadStore;
1243
1251
  var globalProps = ((_window = window) === null || _window === void 0 ? void 0 : _window.globalProps) || {};
1244
1252
  var MediaRecorder = function MediaRecorder(_ref, ref) {
1245
1253
  var _ref$onUploadComplete = _ref.onUploadComplete,
@@ -1266,6 +1274,12 @@ var MediaRecorder = function MediaRecorder(_ref, ref) {
1266
1274
  _useState8 = _slicedToArray(_useState7, 2),
1267
1275
  isRetryUpload = _useState8[0],
1268
1276
  setIsRetryUpload = _useState8[1];
1277
+ var recordingRef = useRef({});
1278
+
1279
+ /**
1280
+ * @type {React.MutableRefObject<Promise<unknown> | null>}
1281
+ */
1282
+ var createRecordingPromise = useRef(null);
1269
1283
  var _useRecorderStore = useRecorderStore(function (store) {
1270
1284
  return {
1271
1285
  status: store["status"],
@@ -1278,23 +1292,19 @@ var MediaRecorder = function MediaRecorder(_ref, ref) {
1278
1292
  error = _useRecorderStore.error,
1279
1293
  countdownTimeLeft = _useRecorderStore.countdownTimeLeft,
1280
1294
  showTimeLimitWarning = _useRecorderStore.showTimeLimitWarning;
1281
- var _useMultipartS3Upload = useMultipartS3UploadStore(function (store) {
1282
- return {
1283
- status: store["status"]
1284
- };
1285
- }, shallow),
1286
- uploadStatus = _useMultipartS3Upload.status;
1287
1295
  var _useRecorderStatus = useRecorderStatus(),
1288
1296
  isRecorderStatus = _useRecorderStatus.isStatus;
1289
- var _useMultipartS3Upload2 = useMultipartS3UploadStatus(),
1290
- isUploadStatus = _useMultipartS3Upload2.isStatus;
1297
+ var _useMultipartS3Upload = useMultipartS3UploadStatus(),
1298
+ isUploadStatus = _useMultipartS3Upload.isStatus,
1299
+ uploadStatus = _useMultipartS3Upload.status;
1291
1300
  var shouldShowTimeLimitWarning = showTimeLimitWarning && isRecorderStatus(SCREEN_RECORDER_STATUS.recording, SCREEN_RECORDER_STATUS.paused);
1292
1301
  var _useCreateRecording = useCreateRecording({
1293
1302
  onSuccess: function onSuccess(_ref2) {
1294
1303
  var recording = _ref2.recording,
1295
1304
  uploadId = _ref2.uploadId;
1305
+ var multipartS3Uploader = getMultipartS3Uploader();
1296
1306
  multipartS3Uploader.initialize(recording.id, uploadId);
1297
- var uploadStatus = useMultipartS3UploadStore.getState().status;
1307
+ var uploadStatus = multipartS3Uploader.status;
1298
1308
  var recorderStatus = useRecorderStore.getState().status;
1299
1309
  if (uploadStatus === UPLOAD_STATUS$1.uploading || isRetryUpload) {
1300
1310
  setIsRetryUpload(false);
@@ -1303,15 +1313,19 @@ var MediaRecorder = function MediaRecorder(_ref, ref) {
1303
1313
  recorderStatus: recorderStatus,
1304
1314
  uploadStatus: uploadStatus
1305
1315
  })) {
1306
- handleDiscardRecording();
1316
+ handleDiscardRecording({
1317
+ forceAbort: true
1318
+ });
1307
1319
  }
1308
1320
  }
1309
1321
  }),
1310
- createRecording = _useCreateRecording.mutate,
1322
+ createRecording = _useCreateRecording.mutateAsync,
1323
+ isCreatingRecording = _useCreateRecording.isPending,
1311
1324
  _useCreateRecording$d = _useCreateRecording.data,
1312
1325
  _useCreateRecording$d2 = _useCreateRecording$d === void 0 ? {} : _useCreateRecording$d,
1313
1326
  _useCreateRecording$d3 = _useCreateRecording$d2.recording,
1314
1327
  recording = _useCreateRecording$d3 === void 0 ? {} : _useCreateRecording$d3;
1328
+ recordingRef.current = recording;
1315
1329
  var handleCreateRecording = /*#__PURE__*/function () {
1316
1330
  var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
1317
1331
  var deviceInfo;
@@ -1322,7 +1336,7 @@ var MediaRecorder = function MediaRecorder(_ref, ref) {
1322
1336
  return getDeviceInfo();
1323
1337
  case 2:
1324
1338
  deviceInfo = _context.sent;
1325
- createRecording(deviceInfo);
1339
+ createRecordingPromise.current = createRecording(deviceInfo);
1326
1340
  case 4:
1327
1341
  case "end":
1328
1342
  return _context.stop();
@@ -1334,26 +1348,32 @@ var MediaRecorder = function MediaRecorder(_ref, ref) {
1334
1348
  };
1335
1349
  }();
1336
1350
  var handleUploadComplete = function handleUploadComplete() {
1337
- return onUploadComplete(recording.id);
1351
+ var _recordingRef$current;
1352
+ return onUploadComplete((_recordingRef$current = recordingRef.current) === null || _recordingRef$current === void 0 ? void 0 : _recordingRef$current.id);
1338
1353
  };
1339
1354
  var handleDiscardRecording = /*#__PURE__*/function () {
1340
1355
  var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
1341
- var uploadStatus;
1356
+ var _ref5,
1357
+ _ref5$forceAbort,
1358
+ forceAbort,
1359
+ multipartS3Uploader,
1360
+ _args2 = arguments;
1342
1361
  return _regeneratorRuntime.wrap(function _callee2$(_context2) {
1343
1362
  while (1) switch (_context2.prev = _context2.next) {
1344
1363
  case 0:
1345
- _context2.next = 2;
1346
- return multipartS3Uploader.abortUpload();
1347
- case 2:
1348
- uploadStatus = useMultipartS3UploadStore.getState().status;
1349
- if (!(uploadStatus === UPLOAD_STATUS$1.aborting)) {
1350
- _context2.next = 5;
1364
+ _ref5 = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : {}, _ref5$forceAbort = _ref5.forceAbort, forceAbort = _ref5$forceAbort === void 0 ? false : _ref5$forceAbort;
1365
+ multipartS3Uploader = getMultipartS3Uploader();
1366
+ _context2.next = 4;
1367
+ return multipartS3Uploader.abortUpload(forceAbort);
1368
+ case 4:
1369
+ if (!(multipartS3Uploader.status === UPLOAD_STATUS$1.aborting)) {
1370
+ _context2.next = 6;
1351
1371
  break;
1352
1372
  }
1353
1373
  return _context2.abrupt("return");
1354
- case 5:
1355
- onDiscard();
1356
1374
  case 6:
1375
+ onDiscard();
1376
+ case 7:
1357
1377
  case "end":
1358
1378
  return _context2.stop();
1359
1379
  }
@@ -1363,32 +1383,22 @@ var MediaRecorder = function MediaRecorder(_ref, ref) {
1363
1383
  return _ref4.apply(this, arguments);
1364
1384
  };
1365
1385
  }();
1366
- var handleRestartRecording = /*#__PURE__*/function () {
1367
- var _ref5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
1368
- return _regeneratorRuntime.wrap(function _callee3$(_context3) {
1369
- while (1) switch (_context3.prev = _context3.next) {
1370
- case 0:
1371
- _context3.next = 2;
1372
- return multipartS3Uploader.abortUpload();
1373
- case 2:
1374
- multipartS3Uploader.resetState();
1375
- case 3:
1376
- case "end":
1377
- return _context3.stop();
1378
- }
1379
- }, _callee3);
1380
- }));
1381
- return function handleRestartRecording() {
1382
- return _ref5.apply(this, arguments);
1383
- };
1384
- }();
1385
- var handleDiscardAlertClose = function handleDiscardAlertClose() {
1386
+ var handleRestartRecording = function handleRestartRecording() {
1387
+ getMultipartS3Uploader().abortUpload();
1388
+ };
1389
+ var onDiscardAlertClose = function onDiscardAlertClose() {
1390
+ return setIsDiscardAlertOpen(false);
1391
+ };
1392
+ var onRestartAlertClose = function onRestartAlertClose() {
1393
+ return setIsRestartAlertOpen(false);
1394
+ };
1395
+ var handleConfirmDiscard = function handleConfirmDiscard() {
1386
1396
  discardRecording();
1387
- setIsDiscardAlertOpen(false);
1397
+ onDiscardAlertClose();
1388
1398
  };
1389
- var handleRestartAlertClose = function handleRestartAlertClose() {
1399
+ var handleConfirmRestart = function handleConfirmRestart() {
1390
1400
  restartRecording();
1391
- setIsRestartAlertOpen(false);
1401
+ onRestartAlertClose();
1392
1402
  };
1393
1403
  var handleUploadError = function handleUploadError() {
1394
1404
  setUploadProgress(0);
@@ -1396,29 +1406,18 @@ var MediaRecorder = function MediaRecorder(_ref, ref) {
1396
1406
  var handleUploadProgress = function handleUploadProgress(progress) {
1397
1407
  setUploadProgress(progress);
1398
1408
  };
1399
- var handleReUpload = /*#__PURE__*/function () {
1400
- var _ref6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
1401
- return _regeneratorRuntime.wrap(function _callee4$(_context4) {
1402
- while (1) switch (_context4.prev = _context4.next) {
1403
- case 0:
1404
- setIsRetryUpload(true);
1405
- setUploadProgress(0);
1406
- _context4.next = 4;
1407
- return multipartS3Uploader.abortUpload();
1408
- case 4:
1409
- multipartS3Uploader.resetState();
1410
- multipartS3Uploader.push(screenRecorder.getWebmMediaBlob());
1411
- handleCreateRecording();
1412
- case 7:
1413
- case "end":
1414
- return _context4.stop();
1415
- }
1416
- }, _callee4);
1417
- }));
1418
- return function handleReUpload() {
1419
- return _ref6.apply(this, arguments);
1420
- };
1421
- }();
1409
+ var handleReUpload = function handleReUpload() {
1410
+ var multipartS3Uploader = getMultipartS3Uploader();
1411
+ setIsRetryUpload(true);
1412
+ setUploadProgress(0);
1413
+ multipartS3Uploader.abortUpload();
1414
+
1415
+ // Create a new multipartS3Uploader instance to push the blob
1416
+ getMultipartS3Uploader({
1417
+ initialize: true
1418
+ }).push(screenRecorder.getWebmMediaBlob());
1419
+ handleCreateRecording();
1420
+ };
1422
1421
  useImperativeHandle(ref, function () {
1423
1422
  return {
1424
1423
  handleDiscardRecording: function handleDiscardRecording() {
@@ -1429,63 +1428,62 @@ var MediaRecorder = function MediaRecorder(_ref, ref) {
1429
1428
  }
1430
1429
  };
1431
1430
  });
1432
- var asyncCleanupFunc = useRef(null);
1431
+ useHandleErrors({
1432
+ error: error,
1433
+ recorderStatus: recorderStatus
1434
+ });
1433
1435
  useEffect(function () {
1434
- if (error === SCREEN_RECORDER_ERROR.UnSupportedBrowser) return noop;
1435
- if (error === SCREEN_RECORDER_ERROR.NotSupportedError) return noop;
1436
- if (error === SCREEN_RECORDER_ERROR.InvalidStateError) return noop;
1437
- if (!isRecorderStatus(SCREEN_RECORDER_STATUS.idle) || error === SCREEN_RECORDER_ERROR.NotAllowedError || error === SCREEN_RECORDER_ERROR.MicPermissionDenied || IS_SAFARI_EXTENSION) {
1438
- if (error !== SCREEN_RECORDER_ERROR.MicPermissionDenied) return noop;
1439
- window.navigator.permissions.query({
1440
- name: "microphone"
1441
- })
1442
- // eslint-disable-next-line promise/prefer-await-to-then
1443
- .then(function (micPermission) {
1444
- var handleChange = function handleChange() {
1445
- if (micPermission.state === "granted") {
1446
- screenRecorder.startRecording();
1447
- }
1448
- };
1449
- micPermission.addEventListener("change", handleChange);
1450
- asyncCleanupFunc.current = function () {
1451
- return micPermission.removeEventListener("change", handleChange);
1452
- };
1436
+ var _cleanupFunction = noop;
1437
+ var handleOnScreenRecorderStart = function handleOnScreenRecorderStart() {
1438
+ var _recorderCallbacks, _uploaderCallbacks;
1439
+ var multipartS3Uploader = getMultipartS3Uploader({
1440
+ initialize: true
1453
1441
  });
1454
- return function () {
1455
- if (!asyncCleanupFunc.current) return;
1456
- asyncCleanupFunc.current();
1457
- asyncCleanupFunc.current = null;
1458
- };
1459
- }
1460
- screenRecorder.startRecording();
1461
- return noop;
1462
- }, [recorderStatus, error]);
1463
- useEffect(function () {
1464
- var _recorderCallbacks, _uploaderCallbacks;
1465
- var recorderCallbacks = (_recorderCallbacks = {}, _defineProperty(_recorderCallbacks, SCREEN_RECORDER_EVENT.onDataAvailable, multipartS3Uploader.push), _defineProperty(_recorderCallbacks, SCREEN_RECORDER_EVENT.onStop, multipartS3Uploader.completeUpload), _defineProperty(_recorderCallbacks, SCREEN_RECORDER_EVENT.onDiscard, handleDiscardRecording), _defineProperty(_recorderCallbacks, SCREEN_RECORDER_EVENT.onRestart, handleRestartRecording), _recorderCallbacks);
1466
- var uploaderCallbacks = (_uploaderCallbacks = {}, _defineProperty(_uploaderCallbacks, UPLOAD_EVENT.onComplete, handleUploadComplete), _defineProperty(_uploaderCallbacks, UPLOAD_EVENT.onError, handleUploadError), _defineProperty(_uploaderCallbacks, UPLOAD_EVENT.onProgress, handleUploadProgress), _uploaderCallbacks);
1467
- Object.keys(recorderCallbacks).forEach(function (key) {
1468
- screenRecorder.addCallback(key, recorderCallbacks[key]);
1469
- });
1470
- Object.keys(uploaderCallbacks).forEach(function (key) {
1471
- multipartS3Uploader.addCallback(key, uploaderCallbacks[key]);
1472
- });
1473
- return function () {
1442
+ var recorderCallbacks = (_recorderCallbacks = {}, _defineProperty(_recorderCallbacks, SCREEN_RECORDER_EVENT.onDataAvailable, multipartS3Uploader.push), _defineProperty(_recorderCallbacks, SCREEN_RECORDER_EVENT.onStop, _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
1443
+ return _regeneratorRuntime.wrap(function _callee3$(_context3) {
1444
+ while (1) switch (_context3.prev = _context3.next) {
1445
+ case 0:
1446
+ if (!createRecordingPromise.current) {
1447
+ _context3.next = 4;
1448
+ break;
1449
+ }
1450
+ _context3.next = 3;
1451
+ return createRecordingPromise.current;
1452
+ case 3:
1453
+ createRecordingPromise.current = null;
1454
+ case 4:
1455
+ multipartS3Uploader.completeUpload();
1456
+ case 5:
1457
+ case "end":
1458
+ return _context3.stop();
1459
+ }
1460
+ }, _callee3);
1461
+ }))), _defineProperty(_recorderCallbacks, SCREEN_RECORDER_EVENT.onDiscard, handleDiscardRecording), _defineProperty(_recorderCallbacks, SCREEN_RECORDER_EVENT.onRestart, handleRestartRecording), _recorderCallbacks);
1462
+ var uploaderCallbacks = (_uploaderCallbacks = {}, _defineProperty(_uploaderCallbacks, UPLOAD_EVENT.onComplete, handleUploadComplete), _defineProperty(_uploaderCallbacks, UPLOAD_EVENT.onError, handleUploadError), _defineProperty(_uploaderCallbacks, UPLOAD_EVENT.onProgress, handleUploadProgress), _uploaderCallbacks);
1474
1463
  Object.keys(recorderCallbacks).forEach(function (key) {
1475
- screenRecorder.removeCallback(key, recorderCallbacks[key]);
1464
+ screenRecorder.addCallback(key, recorderCallbacks[key]);
1476
1465
  });
1477
1466
  Object.keys(uploaderCallbacks).forEach(function (key) {
1478
- multipartS3Uploader.removeCallback(key, uploaderCallbacks[key]);
1467
+ multipartS3Uploader.addCallback(key, uploaderCallbacks[key]);
1479
1468
  });
1469
+ _cleanupFunction = function cleanupFunction() {
1470
+ Object.keys(recorderCallbacks).forEach(function (key) {
1471
+ screenRecorder.removeCallback(key, recorderCallbacks[key]);
1472
+ });
1473
+ Object.keys(uploaderCallbacks).forEach(function (key) {
1474
+ multipartS3Uploader.removeCallback(key, uploaderCallbacks[key]);
1475
+ });
1476
+ multipartS3Uploader.removeCallback(UPLOAD_EVENT.onAbort, _cleanupFunction);
1477
+ };
1478
+ multipartS3Uploader.addCallback(UPLOAD_EVENT.onAbort, _cleanupFunction);
1479
+ handleCreateRecording();
1480
1480
  };
1481
- }, [recording.id]);
1482
- useEffect(function () {
1483
- screenRecorder.addCallback(SCREEN_RECORDER_EVENT.onStart, handleCreateRecording);
1481
+ screenRecorder.addCallback(SCREEN_RECORDER_EVENT.onStart, handleOnScreenRecorderStart);
1484
1482
  screenRecorder.addCallback(SCREEN_RECORDER_EVENT.onDiscardDuringCountdown, onDiscard);
1485
1483
  return function () {
1486
1484
  screenRecorder.revokePermissions();
1487
- multipartS3Uploader.resetState();
1488
1485
  screenRecorder.resetState();
1486
+ _cleanupFunction();
1489
1487
  };
1490
1488
  }, []);
1491
1489
  useEffect(function () {
@@ -1496,7 +1494,7 @@ var MediaRecorder = function MediaRecorder(_ref, ref) {
1496
1494
  if (error === SCREEN_RECORDER_ERROR.UnSupportedBrowser) {
1497
1495
  return /*#__PURE__*/jsx(UnSupportedBrowser, {});
1498
1496
  }
1499
- if (error === SCREEN_RECORDER_ERROR.NotSupportedError || error === SCREEN_RECORDER_ERROR.InvalidStateError) {
1497
+ if (error === SCREEN_RECORDER_ERROR.FailedToStart) {
1500
1498
  return /*#__PURE__*/jsxs("div", {
1501
1499
  className: "flex h-screen w-full flex-col items-center justify-center gap-4",
1502
1500
  children: [/*#__PURE__*/jsx(Callout, {
@@ -1513,7 +1511,14 @@ var MediaRecorder = function MediaRecorder(_ref, ref) {
1513
1511
  })]
1514
1512
  });
1515
1513
  }
1516
- if (isRetryUpload || isRecorderStatus(SCREEN_RECORDER_STATUS.stopped) && isUploadStatus(UPLOAD_STATUS$1.uploading, UPLOAD_STATUS$1.error)) {
1514
+ var isBeingUploadedOrHasErrorUploading = isUploadStatus(UPLOAD_STATUS$1.uploading, UPLOAD_STATUS$1.error);
1515
+ if (hasRecordingDiscarded({
1516
+ recorderStatus: recorderStatus,
1517
+ uploadStatus: uploadStatus
1518
+ })) {
1519
+ return /*#__PURE__*/jsx(AbortUpload, {});
1520
+ }
1521
+ if (isRetryUpload || isRecorderStatus(SCREEN_RECORDER_STATUS.stopped) && (isCreatingRecording || isBeingUploadedOrHasErrorUploading)) {
1517
1522
  return /*#__PURE__*/jsx(UploadingInProgress, {
1518
1523
  recording: recording,
1519
1524
  uploadProgress: uploadProgress,
@@ -1528,12 +1533,6 @@ var MediaRecorder = function MediaRecorder(_ref, ref) {
1528
1533
  children: /*#__PURE__*/jsx(PageLoader, {})
1529
1534
  });
1530
1535
  }
1531
- if (hasRecordingDiscarded({
1532
- recorderStatus: recorderStatus,
1533
- uploadStatus: uploadStatus
1534
- })) {
1535
- return /*#__PURE__*/jsx(AbortUpload, {});
1536
- }
1537
1536
  return /*#__PURE__*/jsxs("div", {
1538
1537
  className: "flex h-screen w-full flex-col items-center justify-start py-10 xl:py-14 2xl:py-20",
1539
1538
  children: [/*#__PURE__*/jsxs("div", {
@@ -1606,19 +1605,15 @@ var MediaRecorder = function MediaRecorder(_ref, ref) {
1606
1605
  message: t("neetoMediaRecorder.record.discardConfirmation.message"),
1607
1606
  submitButtonLabel: t("neetoMediaRecorder.record.discard"),
1608
1607
  title: t("neetoMediaRecorder.record.discardConfirmation.title"),
1609
- onClose: function onClose() {
1610
- return setIsDiscardAlertOpen(false);
1611
- },
1612
- onSubmit: handleDiscardAlertClose
1608
+ onClose: onDiscardAlertClose,
1609
+ onSubmit: handleConfirmDiscard
1613
1610
  }), /*#__PURE__*/jsx(Alert, {
1614
1611
  isOpen: isRestartAlertOpen,
1615
1612
  message: t("neetoMediaRecorder.record.restartConfirmation.message"),
1616
1613
  submitButtonLabel: t("neetoMediaRecorder.record.restart"),
1617
1614
  title: t("neetoMediaRecorder.record.restartConfirmation.title"),
1618
- onClose: function onClose() {
1619
- return setIsRestartAlertOpen(false);
1620
- },
1621
- onSubmit: handleRestartAlertClose
1615
+ onClose: onRestartAlertClose,
1616
+ onSubmit: handleConfirmRestart
1622
1617
  })]
1623
1618
  });
1624
1619
  };