@bigbinary/neeto-media-recorder 2.7.29-beta.1 → 2.7.30

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,10 @@ 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 { copyToClipboard } from '@bigbinary/neeto-commons-frontend/utils/general';
12
+ import Toastr from '@bigbinary/neetoui/Toastr';
11
13
  import platform from 'platform';
12
- import { isNotNil, isEmpty } from 'ramda';
14
+ import { isNotNil } from 'ramda';
13
15
  import withT from '@bigbinary/neeto-commons-frontend/react-utils/withT';
14
16
  import Typography from '@bigbinary/neetoui/Typography';
15
17
  import Spinner from '@bigbinary/neetoui/Spinner';
@@ -22,7 +24,6 @@ import Pause from '@bigbinary/neeto-icons/Pause';
22
24
  import Unlock from '@bigbinary/neeto-icons/Unlock';
23
25
  import Delete from '@bigbinary/neeto-icons/Delete';
24
26
  import Browser from '@bigbinary/neeto-icons/Browser';
25
- import { copyToClipboard } from '@bigbinary/neeto-commons-frontend/utils/general';
26
27
  import Close from '@bigbinary/neeto-icons/Close';
27
28
  import Download from '@bigbinary/neeto-icons/Download';
28
29
  import Copy from '@bigbinary/neeto-icons/Copy';
@@ -548,6 +549,11 @@ var getSupportedMimeType = function getSupportedMimeType() {
548
549
  })) !== null && _candidates$find !== void 0 ? _candidates$find : null;
549
550
  };
550
551
 
552
+ var generatePublicUrl = function generatePublicUrl(recordingId) {
553
+ var baseURL = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : window.location.origin;
554
+ return "".concat(baseURL, "/watch/").concat(recordingId);
555
+ };
556
+
551
557
  var formatTime = function formatTime(time) {
552
558
  return Math.floor(time).toString().padStart(2, "0");
553
559
  };
@@ -659,6 +665,145 @@ var isMp4Supported = function isMp4Supported() {
659
665
  return mimeType.includes(MIME_TYPE$1.mp4);
660
666
  };
661
667
 
668
+ /**
669
+ * Copy a recording's public link to the clipboard while preserving Safari's
670
+ * transient user activation. Must be invoked synchronously inside a user
671
+ * gesture handler (e.g. button onClick).
672
+ *
673
+ * Safari (WebKit) refuses navigator.clipboard.write[Text] outside a user
674
+ * gesture, so the post-recording auto-copy cannot be done in a useEffect.
675
+ * Since `recording.id` is only known once the create-recording POST resolves,
676
+ * we keep the gesture alive across that wait by handing
677
+ * navigator.clipboard.write a ClipboardItem backed by a Promise<Blob>; Safari
678
+ * preserves the activation until the promise settles.
679
+ *
680
+ * @param {Object} params
681
+ * @param {React.RefObject<Promise<unknown> | null>} params.createRecordingPromise
682
+ * @param {React.RefObject<{ id?: string | number }>} params.recordingRef
683
+ * @param {React.RefObject<string>} params.baseURLRef
684
+ * @param {string} params.successMessage Toastr message shown on success.
685
+ */
686
+ var copyRecordingLinkToClipboardOnStop = function copyRecordingLinkToClipboardOnStop(_ref3) {
687
+ var _navigator$clipboard;
688
+ var createRecordingPromise = _ref3.createRecordingPromise,
689
+ recordingRef = _ref3.recordingRef,
690
+ baseURLRef = _ref3.baseURLRef,
691
+ successMessage = _ref3.successMessage;
692
+ var resolveLink = /*#__PURE__*/function () {
693
+ var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
694
+ var _recordingRef$current;
695
+ var recordingId, baseURL;
696
+ return _regeneratorRuntime.wrap(function _callee2$(_context2) {
697
+ while (1) switch (_context2.prev = _context2.next) {
698
+ case 0:
699
+ if (!(createRecordingPromise !== null && createRecordingPromise !== void 0 && createRecordingPromise.current)) {
700
+ _context2.next = 3;
701
+ break;
702
+ }
703
+ _context2.next = 3;
704
+ return createRecordingPromise.current;
705
+ case 3:
706
+ recordingId = recordingRef === null || recordingRef === void 0 ? void 0 : (_recordingRef$current = recordingRef.current) === null || _recordingRef$current === void 0 ? void 0 : _recordingRef$current.id;
707
+ baseURL = baseURLRef === null || baseURLRef === void 0 ? void 0 : baseURLRef.current;
708
+ if (!(!recordingId || !baseURL)) {
709
+ _context2.next = 7;
710
+ break;
711
+ }
712
+ throw new Error("Recording id or base URL unavailable");
713
+ case 7:
714
+ return _context2.abrupt("return", generatePublicUrl(recordingId, baseURL));
715
+ case 8:
716
+ case "end":
717
+ return _context2.stop();
718
+ }
719
+ }, _callee2);
720
+ }));
721
+ return function resolveLink() {
722
+ return _ref4.apply(this, arguments);
723
+ };
724
+ }();
725
+ if (typeof window.ClipboardItem === "function" && (_navigator$clipboard = navigator.clipboard) !== null && _navigator$clipboard !== void 0 && _navigator$clipboard.write) {
726
+ var linkBlobPromise = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
727
+ return _regeneratorRuntime.wrap(function _callee3$(_context3) {
728
+ while (1) switch (_context3.prev = _context3.next) {
729
+ case 0:
730
+ _context3.t0 = Blob;
731
+ _context3.next = 3;
732
+ return resolveLink();
733
+ case 3:
734
+ _context3.t1 = _context3.sent;
735
+ _context3.t2 = [_context3.t1];
736
+ _context3.t3 = {
737
+ type: "text/plain"
738
+ };
739
+ return _context3.abrupt("return", new _context3.t0(_context3.t2, _context3.t3));
740
+ case 7:
741
+ case "end":
742
+ return _context3.stop();
743
+ }
744
+ }, _callee3);
745
+ }))();
746
+
747
+ // Synchronously initiate clipboard.write so Safari preserves the user
748
+ // activation across the wait for linkBlobPromise.
749
+ var writePromise = navigator.clipboard.write([new ClipboardItem({
750
+ "text/plain": linkBlobPromise
751
+ })]);
752
+ _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
753
+ return _regeneratorRuntime.wrap(function _callee4$(_context4) {
754
+ while (1) switch (_context4.prev = _context4.next) {
755
+ case 0:
756
+ _context4.prev = 0;
757
+ _context4.next = 3;
758
+ return writePromise;
759
+ case 3:
760
+ Toastr.success(successMessage);
761
+ _context4.next = 8;
762
+ break;
763
+ case 6:
764
+ _context4.prev = 6;
765
+ _context4.t0 = _context4["catch"](0);
766
+ case 8:
767
+ case "end":
768
+ return _context4.stop();
769
+ }
770
+ }, _callee4, null, [[0, 6]]);
771
+ }))();
772
+ return;
773
+ }
774
+
775
+ // Legacy fallback for browsers without ClipboardItem (e.g. Firefox < 127).
776
+ // These browsers don't enforce Safari's strict gesture requirement, so a
777
+ // deferred async write is acceptable. copyToClipboard handles its own
778
+ // success toastr and falls back to document.execCommand internally.
779
+ _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee5() {
780
+ var link;
781
+ return _regeneratorRuntime.wrap(function _callee5$(_context5) {
782
+ while (1) switch (_context5.prev = _context5.next) {
783
+ case 0:
784
+ _context5.prev = 0;
785
+ _context5.next = 3;
786
+ return resolveLink();
787
+ case 3:
788
+ link = _context5.sent;
789
+ _context5.next = 6;
790
+ return copyToClipboard(link, {
791
+ message: successMessage
792
+ });
793
+ case 6:
794
+ _context5.next = 10;
795
+ break;
796
+ case 8:
797
+ _context5.prev = 8;
798
+ _context5.t0 = _context5["catch"](0);
799
+ case 10:
800
+ case "end":
801
+ return _context5.stop();
802
+ }
803
+ }, _callee5, null, [[0, 8]]);
804
+ }))();
805
+ };
806
+
662
807
  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
808
  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
809
  var baseUrl = "/api/v1/recordings";
@@ -1052,13 +1197,13 @@ var Controls = function Controls(_ref) {
1052
1197
  var setIsRestartAlertOpen = _ref.setIsRestartAlertOpen,
1053
1198
  setIsDiscardAlertOpen = _ref.setIsDiscardAlertOpen,
1054
1199
  onDiscard = _ref.onDiscard,
1200
+ onStopRecording = _ref.onStopRecording,
1055
1201
  requested = _ref.requested,
1056
1202
  appName = _ref.appName;
1057
1203
  var _useTranslation = useTranslation(),
1058
1204
  t = _useTranslation.t;
1059
1205
  var startRecording = screenRecorder.startRecording,
1060
1206
  pauseRecording = screenRecorder.pauseRecording,
1061
- stopRecording = screenRecorder.stopRecording,
1062
1207
  resumeRecording = screenRecorder.resumeRecording,
1063
1208
  useRecorderStore = screenRecorder.useRecorderStore,
1064
1209
  setAudioConfiguration = screenRecorder.setAudioConfiguration;
@@ -1148,7 +1293,7 @@ var Controls = function Controls(_ref) {
1148
1293
  label: t("neetoMediaRecorder.record.done"),
1149
1294
  size: "large",
1150
1295
  style: "danger-text",
1151
- onClick: stopRecording
1296
+ onClick: onStopRecording
1152
1297
  }), /*#__PURE__*/jsx("div", {
1153
1298
  className: "neeto-ui-bg-gray-200 h-10 w-0.5"
1154
1299
  })]
@@ -1535,68 +1680,21 @@ var UnSupportedBrowser = withT(function (_ref) {
1535
1680
  });
1536
1681
  });
1537
1682
 
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
1683
  var UploadingInProgress = function UploadingInProgress(_ref) {
1544
- var recording = _ref.recording,
1684
+ var _ref$baseURL = _ref.baseURL,
1685
+ baseURL = _ref$baseURL === void 0 ? "" : _ref$baseURL,
1686
+ recording = _ref.recording,
1545
1687
  uploadProgress = _ref.uploadProgress,
1546
1688
  uploadStatus = _ref.uploadStatus,
1547
1689
  onDiscard = _ref.onDiscard,
1548
1690
  onRetryUpload = _ref.onRetryUpload,
1549
1691
  isRetryUpload = _ref.isRetryUpload;
1550
- var _useState = useState(""),
1692
+ var _useState = useState(false),
1551
1693
  _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];
1694
+ isDiscardAlertOpen = _useState2[0],
1695
+ setIsDiscardAlertOpen = _useState2[1];
1558
1696
  var _useTranslation = useTranslation(),
1559
1697
  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
1698
  var handleRecordingBlobDownload = function handleRecordingBlobDownload() {
1601
1699
  var _recording$title;
1602
1700
  downloadRecordingBlob(screenRecorder.getWebmMediaBlob(), (_recording$title = recording.title) !== null && _recording$title !== void 0 ? _recording$title : "NeetoRecord-recording");
@@ -1725,7 +1823,47 @@ var MediaRecorder$1 = function MediaRecorder(_ref, ref) {
1725
1823
  _useState8 = _slicedToArray(_useState7, 2),
1726
1824
  isRetryUpload = _useState8[0],
1727
1825
  setIsRetryUpload = _useState8[1];
1826
+ var _useState9 = useState(""),
1827
+ _useState10 = _slicedToArray(_useState9, 2),
1828
+ baseURL = _useState10[0],
1829
+ setBaseURL = _useState10[1];
1728
1830
  var recordingRef = useRef({});
1831
+ var baseURLRef = useRef("");
1832
+ useEffect(function () {
1833
+ var fetchBaseURL = /*#__PURE__*/function () {
1834
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
1835
+ var origin, _yield$chrome$storage, extensionBaseURL;
1836
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
1837
+ while (1) switch (_context.prev = _context.next) {
1838
+ case 0:
1839
+ if (IS_EXTENSION) {
1840
+ _context.next = 5;
1841
+ break;
1842
+ }
1843
+ origin = window.location.origin;
1844
+ baseURLRef.current = origin;
1845
+ setBaseURL(origin);
1846
+ return _context.abrupt("return");
1847
+ case 5:
1848
+ _context.next = 7;
1849
+ return chrome.storage.local.get("baseURL");
1850
+ case 7:
1851
+ _yield$chrome$storage = _context.sent;
1852
+ extensionBaseURL = _yield$chrome$storage.baseURL;
1853
+ baseURLRef.current = extensionBaseURL || "";
1854
+ setBaseURL(extensionBaseURL || "");
1855
+ case 11:
1856
+ case "end":
1857
+ return _context.stop();
1858
+ }
1859
+ }, _callee);
1860
+ }));
1861
+ return function fetchBaseURL() {
1862
+ return _ref2.apply(this, arguments);
1863
+ };
1864
+ }();
1865
+ fetchBaseURL();
1866
+ }, []);
1729
1867
  var _useAudioIsCapturing = useAudioIsCapturing({
1730
1868
  isMicOn: isMicOn
1731
1869
  }),
@@ -1764,9 +1902,9 @@ var MediaRecorder$1 = function MediaRecorder(_ref, ref) {
1764
1902
  uploadStatus = _useMultipartS3Upload.status;
1765
1903
  var shouldShowTimeLimitWarning = showTimeLimitWarning && isRecorderStatus(SCREEN_RECORDER_STATUS.recording, SCREEN_RECORDER_STATUS.paused);
1766
1904
  var _useCreateRecording = useCreateRecording({
1767
- onSuccess: function onSuccess(_ref2) {
1768
- var recording = _ref2.recording,
1769
- uploadId = _ref2.uploadId;
1905
+ onSuccess: function onSuccess(_ref3) {
1906
+ var recording = _ref3.recording,
1907
+ uploadId = _ref3.uploadId;
1770
1908
  var multipartS3Uploader = getMultipartS3Uploader();
1771
1909
  multipartS3Uploader.setRecording(recording.id, uploadId);
1772
1910
  multipartS3Uploader.setMimeType(mimeType);
@@ -1809,95 +1947,106 @@ var MediaRecorder$1 = function MediaRecorder(_ref, ref) {
1809
1947
  onError(SCREEN_RECORDER_ERROR.CreateRecordingError);
1810
1948
  };
1811
1949
  var handleCreateRecording = /*#__PURE__*/function () {
1812
- var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
1950
+ var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
1813
1951
  var payload;
1814
- return _regeneratorRuntime.wrap(function _callee2$(_context2) {
1815
- while (1) switch (_context2.prev = _context2.next) {
1952
+ return _regeneratorRuntime.wrap(function _callee3$(_context3) {
1953
+ while (1) switch (_context3.prev = _context3.next) {
1816
1954
  case 0:
1817
1955
  if (upload) {
1818
- _context2.next = 2;
1956
+ _context3.next = 2;
1819
1957
  break;
1820
1958
  }
1821
- return _context2.abrupt("return");
1959
+ return _context3.abrupt("return");
1822
1960
  case 2:
1823
1961
  payload = {
1824
1962
  folderId: folderId
1825
1963
  };
1826
- _context2.next = 5;
1964
+ _context3.next = 5;
1827
1965
  return getDeviceInfo(mimeType);
1828
1966
  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) {
1967
+ payload.deviceInfo = _context3.sent;
1968
+ createRecordingPromise.current = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
1969
+ return _regeneratorRuntime.wrap(function _callee2$(_context2) {
1970
+ while (1) switch (_context2.prev = _context2.next) {
1833
1971
  case 0:
1834
- _context.prev = 0;
1835
- _context.next = 3;
1972
+ _context2.prev = 0;
1973
+ _context2.next = 3;
1836
1974
  return createRecording(payload);
1837
1975
  case 3:
1838
- _context.next = 8;
1976
+ _context2.next = 8;
1839
1977
  break;
1840
1978
  case 5:
1841
- _context.prev = 5;
1842
- _context.t0 = _context["catch"](0);
1843
- handleCreateRecordingError(_context.t0);
1979
+ _context2.prev = 5;
1980
+ _context2.t0 = _context2["catch"](0);
1981
+ handleCreateRecordingError(_context2.t0);
1844
1982
  case 8:
1845
1983
  case "end":
1846
- return _context.stop();
1984
+ return _context2.stop();
1847
1985
  }
1848
- }, _callee, null, [[0, 5]]);
1986
+ }, _callee2, null, [[0, 5]]);
1849
1987
  }))();
1850
1988
  case 7:
1851
1989
  case "end":
1852
- return _context2.stop();
1990
+ return _context3.stop();
1853
1991
  }
1854
- }, _callee2);
1992
+ }, _callee3);
1855
1993
  }));
1856
1994
  return function handleCreateRecording() {
1857
- return _ref3.apply(this, arguments);
1995
+ return _ref4.apply(this, arguments);
1858
1996
  };
1859
1997
  }();
1998
+ var handleStopRecording = function handleStopRecording() {
1999
+ if (upload) {
2000
+ copyRecordingLinkToClipboardOnStop({
2001
+ createRecordingPromise: createRecordingPromise,
2002
+ recordingRef: recordingRef,
2003
+ baseURLRef: baseURLRef,
2004
+ successMessage: t("neetoMediaRecorder.record.copyToClipboardToastrMessage")
2005
+ });
2006
+ }
2007
+ screenRecorder.stopRecording();
2008
+ };
1860
2009
  var handleUploadComplete = function handleUploadComplete() {
1861
2010
  var _recordingRef$current;
1862
2011
  return onUploadComplete((_recordingRef$current = recordingRef.current) === null || _recordingRef$current === void 0 ? void 0 : _recordingRef$current.id);
1863
2012
  };
1864
2013
  var handleDiscardRecording = /*#__PURE__*/function () {
1865
- var _ref5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
1866
- var _ref6,
1867
- _ref6$forceAbort,
2014
+ var _ref6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
2015
+ var _ref7,
2016
+ _ref7$forceAbort,
1868
2017
  forceAbort,
1869
2018
  multipartS3Uploader,
1870
- _args3 = arguments;
1871
- return _regeneratorRuntime.wrap(function _callee3$(_context3) {
1872
- while (1) switch (_context3.prev = _context3.next) {
2019
+ _args4 = arguments;
2020
+ return _regeneratorRuntime.wrap(function _callee4$(_context4) {
2021
+ while (1) switch (_context4.prev = _context4.next) {
1873
2022
  case 0:
1874
- _ref6 = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : {}, _ref6$forceAbort = _ref6.forceAbort, forceAbort = _ref6$forceAbort === void 0 ? false : _ref6$forceAbort;
2023
+ _ref7 = _args4.length > 0 && _args4[0] !== undefined ? _args4[0] : {}, _ref7$forceAbort = _ref7.forceAbort, forceAbort = _ref7$forceAbort === void 0 ? false : _ref7$forceAbort;
1875
2024
  if (upload) {
1876
- _context3.next = 4;
2025
+ _context4.next = 4;
1877
2026
  break;
1878
2027
  }
1879
2028
  onDiscard();
1880
- return _context3.abrupt("return");
2029
+ return _context4.abrupt("return");
1881
2030
  case 4:
1882
2031
  multipartS3Uploader = getMultipartS3Uploader();
1883
- _context3.next = 7;
2032
+ _context4.next = 7;
1884
2033
  return multipartS3Uploader.abortUpload(forceAbort);
1885
2034
  case 7:
1886
2035
  if (!(multipartS3Uploader.status === UPLOAD_STATUS$1.aborting)) {
1887
- _context3.next = 9;
2036
+ _context4.next = 9;
1888
2037
  break;
1889
2038
  }
1890
- return _context3.abrupt("return");
2039
+ return _context4.abrupt("return");
1891
2040
  case 9:
1892
2041
  onDiscard();
1893
2042
  case 10:
1894
2043
  case "end":
1895
- return _context3.stop();
2044
+ return _context4.stop();
1896
2045
  }
1897
- }, _callee3);
2046
+ }, _callee4);
1898
2047
  }));
1899
2048
  return function handleDiscardRecording() {
1900
- return _ref5.apply(this, arguments);
2049
+ return _ref6.apply(this, arguments);
1901
2050
  };
1902
2051
  }();
1903
2052
  var handleRestartRecording = function handleRestartRecording() {
@@ -1972,25 +2121,25 @@ var MediaRecorder$1 = function MediaRecorder(_ref, ref) {
1972
2121
  var multipartS3Uploader = upload ? getMultipartS3Uploader({
1973
2122
  initialize: true
1974
2123
  }) : 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() {
2124
+ 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
2125
  var blob;
1977
- return _regeneratorRuntime.wrap(function _callee4$(_context4) {
1978
- while (1) switch (_context4.prev = _context4.next) {
2126
+ return _regeneratorRuntime.wrap(function _callee5$(_context5) {
2127
+ while (1) switch (_context5.prev = _context5.next) {
1979
2128
  case 0:
1980
2129
  if (upload) {
1981
- _context4.next = 5;
2130
+ _context5.next = 5;
1982
2131
  break;
1983
2132
  }
1984
2133
  blob = screenRecorder.getWebmMediaBlob();
1985
2134
  RequestedRecordingCallback(blob);
1986
2135
  onRecordingCompleted(blob);
1987
- return _context4.abrupt("return");
2136
+ return _context5.abrupt("return");
1988
2137
  case 5:
1989
2138
  if (!createRecordingPromise.current) {
1990
- _context4.next = 9;
2139
+ _context5.next = 9;
1991
2140
  break;
1992
2141
  }
1993
- _context4.next = 8;
2142
+ _context5.next = 8;
1994
2143
  return createRecordingPromise.current;
1995
2144
  case 8:
1996
2145
  createRecordingPromise.current = null;
@@ -1998,9 +2147,9 @@ var MediaRecorder$1 = function MediaRecorder(_ref, ref) {
1998
2147
  multipartS3Uploader.completeUpload();
1999
2148
  case 10:
2000
2149
  case "end":
2001
- return _context4.stop();
2150
+ return _context5.stop();
2002
2151
  }
2003
- }, _callee4);
2152
+ }, _callee5);
2004
2153
  }))), _defineProperty(_recorderCallbacks, SCREEN_RECORDER_EVENT.onDiscard, handleDiscardRecording), _defineProperty(_recorderCallbacks, SCREEN_RECORDER_EVENT.onRestart, handleRestartRecording), _recorderCallbacks);
2005
2154
  Object.keys(recorderCallbacks).forEach(function (key) {
2006
2155
  screenRecorder.addCallback(key, recorderCallbacks[key]);
@@ -2053,6 +2202,7 @@ var MediaRecorder$1 = function MediaRecorder(_ref, ref) {
2053
2202
  }
2054
2203
  if (isRetryUpload || isRecorderStatus(SCREEN_RECORDER_STATUS.stopped) && (isCreatingRecording || isBeingUploadedOrHasErrorUploading)) {
2055
2204
  return /*#__PURE__*/jsx(UploadingInProgress, {
2205
+ baseURL: baseURL,
2056
2206
  isRetryUpload: isRetryUpload,
2057
2207
  recording: recording,
2058
2208
  uploadProgress: uploadProgress,
@@ -2088,7 +2238,8 @@ var MediaRecorder$1 = function MediaRecorder(_ref, ref) {
2088
2238
  onDiscard: onDiscard,
2089
2239
  requested: requested,
2090
2240
  setIsDiscardAlertOpen: setIsDiscardAlertOpen,
2091
- setIsRestartAlertOpen: setIsRestartAlertOpen
2241
+ setIsRestartAlertOpen: setIsRestartAlertOpen,
2242
+ onStopRecording: handleStopRecording
2092
2243
  }), /*#__PURE__*/jsx(Alert, {
2093
2244
  isOpen: isDiscardAlertOpen,
2094
2245
  message: t("neetoMediaRecorder.record.discardConfirmation.message"),