@bigbinary/neeto-media-recorder 2.7.29-beta.2 → 2.7.31

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,6 +8,7 @@ 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';
11
12
  import Toastr from '@bigbinary/neetoui/Toastr';
12
13
  import platform from 'platform';
13
14
  import { isNotNil } from 'ramda';
@@ -688,48 +689,119 @@ var copyRecordingLinkToClipboardOnStop = function copyRecordingLinkToClipboardOn
688
689
  recordingRef = _ref3.recordingRef,
689
690
  baseURLRef = _ref3.baseURLRef,
690
691
  successMessage = _ref3.successMessage;
691
- if (typeof window.ClipboardItem !== "function" || !((_navigator$clipboard = navigator.clipboard) !== null && _navigator$clipboard !== void 0 && _navigator$clipboard.write)) {
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
+ }))();
692
772
  return;
693
773
  }
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) {
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) {
699
783
  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;
784
+ _context5.prev = 0;
785
+ _context5.next = 3;
786
+ return resolveLink();
706
787
  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
- }));
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;
718
796
  case 8:
797
+ _context5.prev = 8;
798
+ _context5.t0 = _context5["catch"](0);
799
+ case 10:
719
800
  case "end":
720
- return _context2.stop();
801
+ return _context5.stop();
721
802
  }
722
- }, _callee2);
803
+ }, _callee5, null, [[0, 8]]);
723
804
  }))();
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
805
  };
734
806
 
735
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; }
@@ -1868,61 +1940,45 @@ var MediaRecorder$1 = function MediaRecorder(_ref, ref) {
1868
1940
  onError(SCREEN_RECORDER_ERROR.InsufficientData);
1869
1941
  }
1870
1942
  }, [elapsedTime]);
1871
- recordingRef.current = recording;
1872
1943
  var handleCreateRecordingError = function handleCreateRecordingError(error) {
1873
1944
  if (isCancelledError(error)) return;
1874
1945
  screenRecorder.setError(SCREEN_RECORDER_ERROR.CreateRecordingError);
1875
1946
  onError(SCREEN_RECORDER_ERROR.CreateRecordingError);
1876
1947
  };
1877
- var handleCreateRecording = /*#__PURE__*/function () {
1878
- var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
1879
- var payload;
1880
- return _regeneratorRuntime.wrap(function _callee3$(_context3) {
1881
- while (1) switch (_context3.prev = _context3.next) {
1948
+ var handleCreateRecording = function handleCreateRecording() {
1949
+ if (!upload) return;
1950
+ recordingRef.current = {};
1951
+ createRecordingPromise.current = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
1952
+ var payload, result;
1953
+ return _regeneratorRuntime.wrap(function _callee2$(_context2) {
1954
+ while (1) switch (_context2.prev = _context2.next) {
1882
1955
  case 0:
1883
- if (upload) {
1884
- _context3.next = 2;
1885
- break;
1886
- }
1887
- return _context3.abrupt("return");
1888
- case 2:
1956
+ _context2.prev = 0;
1889
1957
  payload = {
1890
1958
  folderId: folderId
1891
1959
  };
1892
- _context3.next = 5;
1960
+ _context2.next = 4;
1893
1961
  return getDeviceInfo(mimeType);
1894
- case 5:
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) {
1899
- case 0:
1900
- _context2.prev = 0;
1901
- _context2.next = 3;
1902
- return createRecording(payload);
1903
- case 3:
1904
- _context2.next = 8;
1905
- break;
1906
- case 5:
1907
- _context2.prev = 5;
1908
- _context2.t0 = _context2["catch"](0);
1909
- handleCreateRecordingError(_context2.t0);
1910
- case 8:
1911
- case "end":
1912
- return _context2.stop();
1913
- }
1914
- }, _callee2, null, [[0, 5]]);
1915
- }))();
1962
+ case 4:
1963
+ payload.deviceInfo = _context2.sent;
1964
+ _context2.next = 7;
1965
+ return createRecording(payload);
1916
1966
  case 7:
1967
+ result = _context2.sent;
1968
+ if (result !== null && result !== void 0 && result.recording) recordingRef.current = result.recording;
1969
+ _context2.next = 14;
1970
+ break;
1971
+ case 11:
1972
+ _context2.prev = 11;
1973
+ _context2.t0 = _context2["catch"](0);
1974
+ handleCreateRecordingError(_context2.t0);
1975
+ case 14:
1917
1976
  case "end":
1918
- return _context3.stop();
1977
+ return _context2.stop();
1919
1978
  }
1920
- }, _callee3);
1921
- }));
1922
- return function handleCreateRecording() {
1923
- return _ref4.apply(this, arguments);
1924
- };
1925
- }();
1979
+ }, _callee2, null, [[0, 11]]);
1980
+ }))();
1981
+ };
1926
1982
  var handleStopRecording = function handleStopRecording() {
1927
1983
  if (upload) {
1928
1984
  copyRecordingLinkToClipboardOnStop({
@@ -1939,42 +1995,42 @@ var MediaRecorder$1 = function MediaRecorder(_ref, ref) {
1939
1995
  return onUploadComplete((_recordingRef$current = recordingRef.current) === null || _recordingRef$current === void 0 ? void 0 : _recordingRef$current.id);
1940
1996
  };
1941
1997
  var handleDiscardRecording = /*#__PURE__*/function () {
1942
- var _ref6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
1943
- var _ref7,
1944
- _ref7$forceAbort,
1998
+ var _ref5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
1999
+ var _ref6,
2000
+ _ref6$forceAbort,
1945
2001
  forceAbort,
1946
2002
  multipartS3Uploader,
1947
- _args4 = arguments;
1948
- return _regeneratorRuntime.wrap(function _callee4$(_context4) {
1949
- while (1) switch (_context4.prev = _context4.next) {
2003
+ _args3 = arguments;
2004
+ return _regeneratorRuntime.wrap(function _callee3$(_context3) {
2005
+ while (1) switch (_context3.prev = _context3.next) {
1950
2006
  case 0:
1951
- _ref7 = _args4.length > 0 && _args4[0] !== undefined ? _args4[0] : {}, _ref7$forceAbort = _ref7.forceAbort, forceAbort = _ref7$forceAbort === void 0 ? false : _ref7$forceAbort;
2007
+ _ref6 = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : {}, _ref6$forceAbort = _ref6.forceAbort, forceAbort = _ref6$forceAbort === void 0 ? false : _ref6$forceAbort;
1952
2008
  if (upload) {
1953
- _context4.next = 4;
2009
+ _context3.next = 4;
1954
2010
  break;
1955
2011
  }
1956
2012
  onDiscard();
1957
- return _context4.abrupt("return");
2013
+ return _context3.abrupt("return");
1958
2014
  case 4:
1959
2015
  multipartS3Uploader = getMultipartS3Uploader();
1960
- _context4.next = 7;
2016
+ _context3.next = 7;
1961
2017
  return multipartS3Uploader.abortUpload(forceAbort);
1962
2018
  case 7:
1963
2019
  if (!(multipartS3Uploader.status === UPLOAD_STATUS$1.aborting)) {
1964
- _context4.next = 9;
2020
+ _context3.next = 9;
1965
2021
  break;
1966
2022
  }
1967
- return _context4.abrupt("return");
2023
+ return _context3.abrupt("return");
1968
2024
  case 9:
1969
2025
  onDiscard();
1970
2026
  case 10:
1971
2027
  case "end":
1972
- return _context4.stop();
2028
+ return _context3.stop();
1973
2029
  }
1974
- }, _callee4);
2030
+ }, _callee3);
1975
2031
  }));
1976
2032
  return function handleDiscardRecording() {
1977
- return _ref6.apply(this, arguments);
2033
+ return _ref5.apply(this, arguments);
1978
2034
  };
1979
2035
  }();
1980
2036
  var handleRestartRecording = function handleRestartRecording() {
@@ -2026,6 +2082,12 @@ var MediaRecorder$1 = function MediaRecorder(_ref, ref) {
2026
2082
  newMultipartS3Uploader.addCallback(key, uploaderCallbacks[key]);
2027
2083
  });
2028
2084
  handleCreateRecording();
2085
+ copyRecordingLinkToClipboardOnStop({
2086
+ createRecordingPromise: createRecordingPromise,
2087
+ recordingRef: recordingRef,
2088
+ baseURLRef: baseURLRef,
2089
+ successMessage: t("neetoMediaRecorder.record.copyToClipboardToastrMessage")
2090
+ });
2029
2091
  };
2030
2092
  useImperativeHandle(ref, function () {
2031
2093
  return {
@@ -2049,25 +2111,25 @@ var MediaRecorder$1 = function MediaRecorder(_ref, ref) {
2049
2111
  var multipartS3Uploader = upload ? getMultipartS3Uploader({
2050
2112
  initialize: true
2051
2113
  }) : null;
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() {
2114
+ 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() {
2053
2115
  var blob;
2054
- return _regeneratorRuntime.wrap(function _callee5$(_context5) {
2055
- while (1) switch (_context5.prev = _context5.next) {
2116
+ return _regeneratorRuntime.wrap(function _callee4$(_context4) {
2117
+ while (1) switch (_context4.prev = _context4.next) {
2056
2118
  case 0:
2057
2119
  if (upload) {
2058
- _context5.next = 5;
2120
+ _context4.next = 5;
2059
2121
  break;
2060
2122
  }
2061
2123
  blob = screenRecorder.getWebmMediaBlob();
2062
2124
  RequestedRecordingCallback(blob);
2063
2125
  onRecordingCompleted(blob);
2064
- return _context5.abrupt("return");
2126
+ return _context4.abrupt("return");
2065
2127
  case 5:
2066
2128
  if (!createRecordingPromise.current) {
2067
- _context5.next = 9;
2129
+ _context4.next = 9;
2068
2130
  break;
2069
2131
  }
2070
- _context5.next = 8;
2132
+ _context4.next = 8;
2071
2133
  return createRecordingPromise.current;
2072
2134
  case 8:
2073
2135
  createRecordingPromise.current = null;
@@ -2075,9 +2137,9 @@ var MediaRecorder$1 = function MediaRecorder(_ref, ref) {
2075
2137
  multipartS3Uploader.completeUpload();
2076
2138
  case 10:
2077
2139
  case "end":
2078
- return _context5.stop();
2140
+ return _context4.stop();
2079
2141
  }
2080
- }, _callee5);
2142
+ }, _callee4);
2081
2143
  }))), _defineProperty(_recorderCallbacks, SCREEN_RECORDER_EVENT.onDiscard, handleDiscardRecording), _defineProperty(_recorderCallbacks, SCREEN_RECORDER_EVENT.onRestart, handleRestartRecording), _recorderCallbacks);
2082
2144
  Object.keys(recorderCallbacks).forEach(function (key) {
2083
2145
  screenRecorder.addCallback(key, recorderCallbacks[key]);