@bigbinary/neeto-media-recorder 2.7.29-beta.1 → 2.7.29-beta.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.
package/index.js CHANGED
@@ -8,8 +8,9 @@ import PageLoader from '@bigbinary/neeto-molecules/PageLoader';
8
8
  import Alert from '@bigbinary/neetoui/Alert';
9
9
  import { Trans, useTranslation } from 'react-i18next';
10
10
  import axios from 'axios';
11
+ import Toastr from '@bigbinary/neetoui/Toastr';
11
12
  import platform from 'platform';
12
- import { isNotNil, isEmpty } from 'ramda';
13
+ import { isNotNil } from 'ramda';
13
14
  import withT from '@bigbinary/neeto-commons-frontend/react-utils/withT';
14
15
  import Typography from '@bigbinary/neetoui/Typography';
15
16
  import Spinner from '@bigbinary/neetoui/Spinner';
@@ -22,7 +23,6 @@ import Pause from '@bigbinary/neeto-icons/Pause';
22
23
  import Unlock from '@bigbinary/neeto-icons/Unlock';
23
24
  import Delete from '@bigbinary/neeto-icons/Delete';
24
25
  import Browser from '@bigbinary/neeto-icons/Browser';
25
- import { copyToClipboard } from '@bigbinary/neeto-commons-frontend/utils/general';
26
26
  import Close from '@bigbinary/neeto-icons/Close';
27
27
  import Download from '@bigbinary/neeto-icons/Download';
28
28
  import Copy from '@bigbinary/neeto-icons/Copy';
@@ -548,6 +548,11 @@ var getSupportedMimeType = function getSupportedMimeType() {
548
548
  })) !== null && _candidates$find !== void 0 ? _candidates$find : null;
549
549
  };
550
550
 
551
+ var generatePublicUrl = function generatePublicUrl(recordingId) {
552
+ var baseURL = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : window.location.origin;
553
+ return "".concat(baseURL, "/watch/").concat(recordingId);
554
+ };
555
+
551
556
  var formatTime = function formatTime(time) {
552
557
  return Math.floor(time).toString().padStart(2, "0");
553
558
  };
@@ -659,6 +664,74 @@ var isMp4Supported = function isMp4Supported() {
659
664
  return mimeType.includes(MIME_TYPE$1.mp4);
660
665
  };
661
666
 
667
+ /**
668
+ * Copy a recording's public link to the clipboard while preserving Safari's
669
+ * transient user activation. Must be invoked synchronously inside a user
670
+ * gesture handler (e.g. button onClick).
671
+ *
672
+ * Safari (WebKit) refuses navigator.clipboard.write[Text] outside a user
673
+ * gesture, so the post-recording auto-copy cannot be done in a useEffect.
674
+ * Since `recording.id` is only known once the create-recording POST resolves,
675
+ * we keep the gesture alive across that wait by handing
676
+ * navigator.clipboard.write a ClipboardItem backed by a Promise<Blob>; Safari
677
+ * preserves the activation until the promise settles.
678
+ *
679
+ * @param {Object} params
680
+ * @param {React.RefObject<Promise<unknown> | null>} params.createRecordingPromise
681
+ * @param {React.RefObject<{ id?: string | number }>} params.recordingRef
682
+ * @param {React.RefObject<string>} params.baseURLRef
683
+ * @param {string} params.successMessage Toastr message shown on success.
684
+ */
685
+ var copyRecordingLinkToClipboardOnStop = function copyRecordingLinkToClipboardOnStop(_ref3) {
686
+ var _navigator$clipboard;
687
+ var createRecordingPromise = _ref3.createRecordingPromise,
688
+ recordingRef = _ref3.recordingRef,
689
+ baseURLRef = _ref3.baseURLRef,
690
+ successMessage = _ref3.successMessage;
691
+ if (typeof window.ClipboardItem !== "function" || !((_navigator$clipboard = navigator.clipboard) !== null && _navigator$clipboard !== void 0 && _navigator$clipboard.write)) {
692
+ return;
693
+ }
694
+ var linkBlobPromise = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
695
+ var _recordingRef$current;
696
+ var recordingId, baseURL;
697
+ return _regeneratorRuntime.wrap(function _callee2$(_context2) {
698
+ while (1) switch (_context2.prev = _context2.next) {
699
+ case 0:
700
+ if (!(createRecordingPromise !== null && createRecordingPromise !== void 0 && createRecordingPromise.current)) {
701
+ _context2.next = 3;
702
+ break;
703
+ }
704
+ _context2.next = 3;
705
+ return createRecordingPromise.current;
706
+ case 3:
707
+ recordingId = recordingRef === null || recordingRef === void 0 ? void 0 : (_recordingRef$current = recordingRef.current) === null || _recordingRef$current === void 0 ? void 0 : _recordingRef$current.id;
708
+ baseURL = baseURLRef === null || baseURLRef === void 0 ? void 0 : baseURLRef.current;
709
+ if (!(!recordingId || !baseURL)) {
710
+ _context2.next = 7;
711
+ break;
712
+ }
713
+ throw new Error("Recording id or base URL unavailable");
714
+ case 7:
715
+ return _context2.abrupt("return", new Blob([generatePublicUrl(recordingId, baseURL)], {
716
+ type: "text/plain"
717
+ }));
718
+ case 8:
719
+ case "end":
720
+ return _context2.stop();
721
+ }
722
+ }, _callee2);
723
+ }))();
724
+
725
+ // Swallow the unhandled rejection on the inner promise; clipboard.write
726
+ // already observes it, but we don't want stray unhandled rejection logs.
727
+ linkBlobPromise["catch"](noop);
728
+ navigator.clipboard.write([new ClipboardItem({
729
+ "text/plain": linkBlobPromise
730
+ })]).then(function () {
731
+ return Toastr.success(successMessage);
732
+ })["catch"](noop);
733
+ };
734
+
662
735
  function ownKeys$2(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
663
736
  function _objectSpread$2(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$2(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$2(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
664
737
  var baseUrl = "/api/v1/recordings";
@@ -1052,13 +1125,13 @@ var Controls = function Controls(_ref) {
1052
1125
  var setIsRestartAlertOpen = _ref.setIsRestartAlertOpen,
1053
1126
  setIsDiscardAlertOpen = _ref.setIsDiscardAlertOpen,
1054
1127
  onDiscard = _ref.onDiscard,
1128
+ onStopRecording = _ref.onStopRecording,
1055
1129
  requested = _ref.requested,
1056
1130
  appName = _ref.appName;
1057
1131
  var _useTranslation = useTranslation(),
1058
1132
  t = _useTranslation.t;
1059
1133
  var startRecording = screenRecorder.startRecording,
1060
1134
  pauseRecording = screenRecorder.pauseRecording,
1061
- stopRecording = screenRecorder.stopRecording,
1062
1135
  resumeRecording = screenRecorder.resumeRecording,
1063
1136
  useRecorderStore = screenRecorder.useRecorderStore,
1064
1137
  setAudioConfiguration = screenRecorder.setAudioConfiguration;
@@ -1148,7 +1221,7 @@ var Controls = function Controls(_ref) {
1148
1221
  label: t("neetoMediaRecorder.record.done"),
1149
1222
  size: "large",
1150
1223
  style: "danger-text",
1151
- onClick: stopRecording
1224
+ onClick: onStopRecording
1152
1225
  }), /*#__PURE__*/jsx("div", {
1153
1226
  className: "neeto-ui-bg-gray-200 h-10 w-0.5"
1154
1227
  })]
@@ -1535,68 +1608,21 @@ var UnSupportedBrowser = withT(function (_ref) {
1535
1608
  });
1536
1609
  });
1537
1610
 
1538
- var generatePublicUrl = function generatePublicUrl(recordingId) {
1539
- var baseURL = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : window.location.origin;
1540
- return "".concat(baseURL, "/watch/").concat(recordingId);
1541
- };
1542
-
1543
1611
  var UploadingInProgress = function UploadingInProgress(_ref) {
1544
- var recording = _ref.recording,
1612
+ var _ref$baseURL = _ref.baseURL,
1613
+ baseURL = _ref$baseURL === void 0 ? "" : _ref$baseURL,
1614
+ recording = _ref.recording,
1545
1615
  uploadProgress = _ref.uploadProgress,
1546
1616
  uploadStatus = _ref.uploadStatus,
1547
1617
  onDiscard = _ref.onDiscard,
1548
1618
  onRetryUpload = _ref.onRetryUpload,
1549
1619
  isRetryUpload = _ref.isRetryUpload;
1550
- var _useState = useState(""),
1620
+ var _useState = useState(false),
1551
1621
  _useState2 = _slicedToArray(_useState, 2),
1552
- baseURL = _useState2[0],
1553
- setBaseURL = _useState2[1];
1554
- var _useState3 = useState(false),
1555
- _useState4 = _slicedToArray(_useState3, 2),
1556
- isDiscardAlertOpen = _useState4[0],
1557
- setIsDiscardAlertOpen = _useState4[1];
1622
+ isDiscardAlertOpen = _useState2[0],
1623
+ setIsDiscardAlertOpen = _useState2[1];
1558
1624
  var _useTranslation = useTranslation(),
1559
1625
  t = _useTranslation.t;
1560
- useEffect(function () {
1561
- var fetchBaseURL = /*#__PURE__*/function () {
1562
- var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
1563
- var _yield$chrome$storage, baseURL;
1564
- return _regeneratorRuntime.wrap(function _callee$(_context) {
1565
- while (1) switch (_context.prev = _context.next) {
1566
- case 0:
1567
- if (IS_EXTENSION) {
1568
- _context.next = 3;
1569
- break;
1570
- }
1571
- setBaseURL(window.location.origin);
1572
- return _context.abrupt("return");
1573
- case 3:
1574
- _context.next = 5;
1575
- return chrome.storage.local.get("baseURL");
1576
- case 5:
1577
- _yield$chrome$storage = _context.sent;
1578
- baseURL = _yield$chrome$storage.baseURL;
1579
- setBaseURL(baseURL);
1580
- case 8:
1581
- case "end":
1582
- return _context.stop();
1583
- }
1584
- }, _callee);
1585
- }));
1586
- return function fetchBaseURL() {
1587
- return _ref2.apply(this, arguments);
1588
- };
1589
- }();
1590
- fetchBaseURL();
1591
- }, []);
1592
- useEffect(function () {
1593
- if (!window.document.hasFocus() || !recording.id || isEmpty(baseURL)) {
1594
- return;
1595
- }
1596
- copyToClipboard(generatePublicUrl(recording.id, baseURL), {
1597
- message: t("neetoMediaRecorder.record.copyToClipboardToastrMessage")
1598
- });
1599
- }, [recording.id, baseURL]);
1600
1626
  var handleRecordingBlobDownload = function handleRecordingBlobDownload() {
1601
1627
  var _recording$title;
1602
1628
  downloadRecordingBlob(screenRecorder.getWebmMediaBlob(), (_recording$title = recording.title) !== null && _recording$title !== void 0 ? _recording$title : "NeetoRecord-recording");
@@ -1725,7 +1751,47 @@ var MediaRecorder$1 = function MediaRecorder(_ref, ref) {
1725
1751
  _useState8 = _slicedToArray(_useState7, 2),
1726
1752
  isRetryUpload = _useState8[0],
1727
1753
  setIsRetryUpload = _useState8[1];
1754
+ var _useState9 = useState(""),
1755
+ _useState10 = _slicedToArray(_useState9, 2),
1756
+ baseURL = _useState10[0],
1757
+ setBaseURL = _useState10[1];
1728
1758
  var recordingRef = useRef({});
1759
+ var baseURLRef = useRef("");
1760
+ useEffect(function () {
1761
+ var fetchBaseURL = /*#__PURE__*/function () {
1762
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
1763
+ var origin, _yield$chrome$storage, extensionBaseURL;
1764
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
1765
+ while (1) switch (_context.prev = _context.next) {
1766
+ case 0:
1767
+ if (IS_EXTENSION) {
1768
+ _context.next = 5;
1769
+ break;
1770
+ }
1771
+ origin = window.location.origin;
1772
+ baseURLRef.current = origin;
1773
+ setBaseURL(origin);
1774
+ return _context.abrupt("return");
1775
+ case 5:
1776
+ _context.next = 7;
1777
+ return chrome.storage.local.get("baseURL");
1778
+ case 7:
1779
+ _yield$chrome$storage = _context.sent;
1780
+ extensionBaseURL = _yield$chrome$storage.baseURL;
1781
+ baseURLRef.current = extensionBaseURL || "";
1782
+ setBaseURL(extensionBaseURL || "");
1783
+ case 11:
1784
+ case "end":
1785
+ return _context.stop();
1786
+ }
1787
+ }, _callee);
1788
+ }));
1789
+ return function fetchBaseURL() {
1790
+ return _ref2.apply(this, arguments);
1791
+ };
1792
+ }();
1793
+ fetchBaseURL();
1794
+ }, []);
1729
1795
  var _useAudioIsCapturing = useAudioIsCapturing({
1730
1796
  isMicOn: isMicOn
1731
1797
  }),
@@ -1764,9 +1830,9 @@ var MediaRecorder$1 = function MediaRecorder(_ref, ref) {
1764
1830
  uploadStatus = _useMultipartS3Upload.status;
1765
1831
  var shouldShowTimeLimitWarning = showTimeLimitWarning && isRecorderStatus(SCREEN_RECORDER_STATUS.recording, SCREEN_RECORDER_STATUS.paused);
1766
1832
  var _useCreateRecording = useCreateRecording({
1767
- onSuccess: function onSuccess(_ref2) {
1768
- var recording = _ref2.recording,
1769
- uploadId = _ref2.uploadId;
1833
+ onSuccess: function onSuccess(_ref3) {
1834
+ var recording = _ref3.recording,
1835
+ uploadId = _ref3.uploadId;
1770
1836
  var multipartS3Uploader = getMultipartS3Uploader();
1771
1837
  multipartS3Uploader.setRecording(recording.id, uploadId);
1772
1838
  multipartS3Uploader.setMimeType(mimeType);
@@ -1809,95 +1875,106 @@ var MediaRecorder$1 = function MediaRecorder(_ref, ref) {
1809
1875
  onError(SCREEN_RECORDER_ERROR.CreateRecordingError);
1810
1876
  };
1811
1877
  var handleCreateRecording = /*#__PURE__*/function () {
1812
- var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
1878
+ var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
1813
1879
  var payload;
1814
- return _regeneratorRuntime.wrap(function _callee2$(_context2) {
1815
- while (1) switch (_context2.prev = _context2.next) {
1880
+ return _regeneratorRuntime.wrap(function _callee3$(_context3) {
1881
+ while (1) switch (_context3.prev = _context3.next) {
1816
1882
  case 0:
1817
1883
  if (upload) {
1818
- _context2.next = 2;
1884
+ _context3.next = 2;
1819
1885
  break;
1820
1886
  }
1821
- return _context2.abrupt("return");
1887
+ return _context3.abrupt("return");
1822
1888
  case 2:
1823
1889
  payload = {
1824
1890
  folderId: folderId
1825
1891
  };
1826
- _context2.next = 5;
1892
+ _context3.next = 5;
1827
1893
  return getDeviceInfo(mimeType);
1828
1894
  case 5:
1829
- payload.deviceInfo = _context2.sent;
1830
- createRecordingPromise.current = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
1831
- return _regeneratorRuntime.wrap(function _callee$(_context) {
1832
- while (1) switch (_context.prev = _context.next) {
1895
+ payload.deviceInfo = _context3.sent;
1896
+ createRecordingPromise.current = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
1897
+ return _regeneratorRuntime.wrap(function _callee2$(_context2) {
1898
+ while (1) switch (_context2.prev = _context2.next) {
1833
1899
  case 0:
1834
- _context.prev = 0;
1835
- _context.next = 3;
1900
+ _context2.prev = 0;
1901
+ _context2.next = 3;
1836
1902
  return createRecording(payload);
1837
1903
  case 3:
1838
- _context.next = 8;
1904
+ _context2.next = 8;
1839
1905
  break;
1840
1906
  case 5:
1841
- _context.prev = 5;
1842
- _context.t0 = _context["catch"](0);
1843
- handleCreateRecordingError(_context.t0);
1907
+ _context2.prev = 5;
1908
+ _context2.t0 = _context2["catch"](0);
1909
+ handleCreateRecordingError(_context2.t0);
1844
1910
  case 8:
1845
1911
  case "end":
1846
- return _context.stop();
1912
+ return _context2.stop();
1847
1913
  }
1848
- }, _callee, null, [[0, 5]]);
1914
+ }, _callee2, null, [[0, 5]]);
1849
1915
  }))();
1850
1916
  case 7:
1851
1917
  case "end":
1852
- return _context2.stop();
1918
+ return _context3.stop();
1853
1919
  }
1854
- }, _callee2);
1920
+ }, _callee3);
1855
1921
  }));
1856
1922
  return function handleCreateRecording() {
1857
- return _ref3.apply(this, arguments);
1923
+ return _ref4.apply(this, arguments);
1858
1924
  };
1859
1925
  }();
1926
+ var handleStopRecording = function handleStopRecording() {
1927
+ if (upload) {
1928
+ copyRecordingLinkToClipboardOnStop({
1929
+ createRecordingPromise: createRecordingPromise,
1930
+ recordingRef: recordingRef,
1931
+ baseURLRef: baseURLRef,
1932
+ successMessage: t("neetoMediaRecorder.record.copyToClipboardToastrMessage")
1933
+ });
1934
+ }
1935
+ screenRecorder.stopRecording();
1936
+ };
1860
1937
  var handleUploadComplete = function handleUploadComplete() {
1861
1938
  var _recordingRef$current;
1862
1939
  return onUploadComplete((_recordingRef$current = recordingRef.current) === null || _recordingRef$current === void 0 ? void 0 : _recordingRef$current.id);
1863
1940
  };
1864
1941
  var handleDiscardRecording = /*#__PURE__*/function () {
1865
- var _ref5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
1866
- var _ref6,
1867
- _ref6$forceAbort,
1942
+ var _ref6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
1943
+ var _ref7,
1944
+ _ref7$forceAbort,
1868
1945
  forceAbort,
1869
1946
  multipartS3Uploader,
1870
- _args3 = arguments;
1871
- return _regeneratorRuntime.wrap(function _callee3$(_context3) {
1872
- while (1) switch (_context3.prev = _context3.next) {
1947
+ _args4 = arguments;
1948
+ return _regeneratorRuntime.wrap(function _callee4$(_context4) {
1949
+ while (1) switch (_context4.prev = _context4.next) {
1873
1950
  case 0:
1874
- _ref6 = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : {}, _ref6$forceAbort = _ref6.forceAbort, forceAbort = _ref6$forceAbort === void 0 ? false : _ref6$forceAbort;
1951
+ _ref7 = _args4.length > 0 && _args4[0] !== undefined ? _args4[0] : {}, _ref7$forceAbort = _ref7.forceAbort, forceAbort = _ref7$forceAbort === void 0 ? false : _ref7$forceAbort;
1875
1952
  if (upload) {
1876
- _context3.next = 4;
1953
+ _context4.next = 4;
1877
1954
  break;
1878
1955
  }
1879
1956
  onDiscard();
1880
- return _context3.abrupt("return");
1957
+ return _context4.abrupt("return");
1881
1958
  case 4:
1882
1959
  multipartS3Uploader = getMultipartS3Uploader();
1883
- _context3.next = 7;
1960
+ _context4.next = 7;
1884
1961
  return multipartS3Uploader.abortUpload(forceAbort);
1885
1962
  case 7:
1886
1963
  if (!(multipartS3Uploader.status === UPLOAD_STATUS$1.aborting)) {
1887
- _context3.next = 9;
1964
+ _context4.next = 9;
1888
1965
  break;
1889
1966
  }
1890
- return _context3.abrupt("return");
1967
+ return _context4.abrupt("return");
1891
1968
  case 9:
1892
1969
  onDiscard();
1893
1970
  case 10:
1894
1971
  case "end":
1895
- return _context3.stop();
1972
+ return _context4.stop();
1896
1973
  }
1897
- }, _callee3);
1974
+ }, _callee4);
1898
1975
  }));
1899
1976
  return function handleDiscardRecording() {
1900
- return _ref5.apply(this, arguments);
1977
+ return _ref6.apply(this, arguments);
1901
1978
  };
1902
1979
  }();
1903
1980
  var handleRestartRecording = function handleRestartRecording() {
@@ -1972,25 +2049,25 @@ var MediaRecorder$1 = function MediaRecorder(_ref, ref) {
1972
2049
  var multipartS3Uploader = upload ? getMultipartS3Uploader({
1973
2050
  initialize: true
1974
2051
  }) : null;
1975
- var recorderCallbacks = (_recorderCallbacks = {}, _defineProperty(_recorderCallbacks, SCREEN_RECORDER_EVENT.onDataAvailable, upload ? multipartS3Uploader.push : noop), _defineProperty(_recorderCallbacks, SCREEN_RECORDER_EVENT.onStop, _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
2052
+ var recorderCallbacks = (_recorderCallbacks = {}, _defineProperty(_recorderCallbacks, SCREEN_RECORDER_EVENT.onDataAvailable, upload ? multipartS3Uploader.push : noop), _defineProperty(_recorderCallbacks, SCREEN_RECORDER_EVENT.onStop, _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee5() {
1976
2053
  var blob;
1977
- return _regeneratorRuntime.wrap(function _callee4$(_context4) {
1978
- while (1) switch (_context4.prev = _context4.next) {
2054
+ return _regeneratorRuntime.wrap(function _callee5$(_context5) {
2055
+ while (1) switch (_context5.prev = _context5.next) {
1979
2056
  case 0:
1980
2057
  if (upload) {
1981
- _context4.next = 5;
2058
+ _context5.next = 5;
1982
2059
  break;
1983
2060
  }
1984
2061
  blob = screenRecorder.getWebmMediaBlob();
1985
2062
  RequestedRecordingCallback(blob);
1986
2063
  onRecordingCompleted(blob);
1987
- return _context4.abrupt("return");
2064
+ return _context5.abrupt("return");
1988
2065
  case 5:
1989
2066
  if (!createRecordingPromise.current) {
1990
- _context4.next = 9;
2067
+ _context5.next = 9;
1991
2068
  break;
1992
2069
  }
1993
- _context4.next = 8;
2070
+ _context5.next = 8;
1994
2071
  return createRecordingPromise.current;
1995
2072
  case 8:
1996
2073
  createRecordingPromise.current = null;
@@ -1998,9 +2075,9 @@ var MediaRecorder$1 = function MediaRecorder(_ref, ref) {
1998
2075
  multipartS3Uploader.completeUpload();
1999
2076
  case 10:
2000
2077
  case "end":
2001
- return _context4.stop();
2078
+ return _context5.stop();
2002
2079
  }
2003
- }, _callee4);
2080
+ }, _callee5);
2004
2081
  }))), _defineProperty(_recorderCallbacks, SCREEN_RECORDER_EVENT.onDiscard, handleDiscardRecording), _defineProperty(_recorderCallbacks, SCREEN_RECORDER_EVENT.onRestart, handleRestartRecording), _recorderCallbacks);
2005
2082
  Object.keys(recorderCallbacks).forEach(function (key) {
2006
2083
  screenRecorder.addCallback(key, recorderCallbacks[key]);
@@ -2053,6 +2130,7 @@ var MediaRecorder$1 = function MediaRecorder(_ref, ref) {
2053
2130
  }
2054
2131
  if (isRetryUpload || isRecorderStatus(SCREEN_RECORDER_STATUS.stopped) && (isCreatingRecording || isBeingUploadedOrHasErrorUploading)) {
2055
2132
  return /*#__PURE__*/jsx(UploadingInProgress, {
2133
+ baseURL: baseURL,
2056
2134
  isRetryUpload: isRetryUpload,
2057
2135
  recording: recording,
2058
2136
  uploadProgress: uploadProgress,
@@ -2088,7 +2166,8 @@ var MediaRecorder$1 = function MediaRecorder(_ref, ref) {
2088
2166
  onDiscard: onDiscard,
2089
2167
  requested: requested,
2090
2168
  setIsDiscardAlertOpen: setIsDiscardAlertOpen,
2091
- setIsRestartAlertOpen: setIsRestartAlertOpen
2169
+ setIsRestartAlertOpen: setIsRestartAlertOpen,
2170
+ onStopRecording: handleStopRecording
2092
2171
  }), /*#__PURE__*/jsx(Alert, {
2093
2172
  isOpen: isDiscardAlertOpen,
2094
2173
  message: t("neetoMediaRecorder.record.discardConfirmation.message"),