@bigbinary/neeto-media-recorder 1.0.2 → 1.0.4
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/README.md +263 -1
- package/constants.js +13 -1
- package/constants.js.map +1 -1
- package/core.js +2895 -219
- package/core.js.map +1 -1
- package/index.js +62 -160
- package/index.js.map +1 -1
- package/package.json +4 -28
- package/utils.js.map +1 -1
package/index.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { shallow } from 'zustand/shallow';
|
|
2
|
-
import React, {
|
|
3
|
-
import
|
|
4
|
-
import { Typography, Spinner, Button,
|
|
2
|
+
import React, { forwardRef, useState, useImperativeHandle, useEffect } from 'react';
|
|
3
|
+
import classNames from 'classnames';
|
|
4
|
+
import { Typography, Spinner, Button, Callout, Alert } from '@bigbinary/neetoui';
|
|
5
5
|
import { isEmpty } from 'ramda';
|
|
6
|
-
import { useTranslation
|
|
6
|
+
import { useTranslation } from 'react-i18next';
|
|
7
7
|
import { useMutation } from 'react-query';
|
|
8
8
|
import axios from 'axios';
|
|
9
9
|
import { screenRecorder, multipartS3Uploader } from '@bigbinary/neeto-media-recorder/core';
|
|
10
|
-
import { SCREEN_RECORDER_STATUS, SCREEN_RECORDER_ERROR, ONE_MINUTE_IN_MILLISECONDS, ONE_SECOND_IN_MILLISECONDS,
|
|
10
|
+
import { SCREEN_RECORDER_STATUS, SCREEN_RECORDER_ERROR, ONE_MINUTE_IN_MILLISECONDS, ONE_SECOND_IN_MILLISECONDS, SCREEN_RECORDER_EVENT, UPLOAD_EVENT, UPLOAD_STATUS } from '@bigbinary/neeto-media-recorder/constants';
|
|
11
11
|
import { withT } from '@bigbinary/neeto-commons-frontend/react-utils';
|
|
12
12
|
import { isNotEmpty, noop } from '@bigbinary/neeto-cist';
|
|
13
13
|
import { Pause, Delete, Copy } from '@bigbinary/neeto-icons';
|
|
@@ -453,69 +453,6 @@ try {
|
|
|
453
453
|
|
|
454
454
|
var _regeneratorRuntime = /*@__PURE__*/getDefaultExportFromCjs(regenerator);
|
|
455
455
|
|
|
456
|
-
var classnames = {exports: {}};
|
|
457
|
-
|
|
458
|
-
/*!
|
|
459
|
-
Copyright (c) 2018 Jed Watson.
|
|
460
|
-
Licensed under the MIT License (MIT), see
|
|
461
|
-
http://jedwatson.github.io/classnames
|
|
462
|
-
*/
|
|
463
|
-
classnames.exports;
|
|
464
|
-
|
|
465
|
-
(function (module) {
|
|
466
|
-
/* global define */
|
|
467
|
-
|
|
468
|
-
(function () {
|
|
469
|
-
|
|
470
|
-
var hasOwn = {}.hasOwnProperty;
|
|
471
|
-
|
|
472
|
-
function classNames() {
|
|
473
|
-
var classes = [];
|
|
474
|
-
|
|
475
|
-
for (var i = 0; i < arguments.length; i++) {
|
|
476
|
-
var arg = arguments[i];
|
|
477
|
-
if (!arg) continue;
|
|
478
|
-
|
|
479
|
-
var argType = typeof arg;
|
|
480
|
-
|
|
481
|
-
if (argType === 'string' || argType === 'number') {
|
|
482
|
-
classes.push(arg);
|
|
483
|
-
} else if (Array.isArray(arg)) {
|
|
484
|
-
if (arg.length) {
|
|
485
|
-
var inner = classNames.apply(null, arg);
|
|
486
|
-
if (inner) {
|
|
487
|
-
classes.push(inner);
|
|
488
|
-
}
|
|
489
|
-
}
|
|
490
|
-
} else if (argType === 'object') {
|
|
491
|
-
if (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {
|
|
492
|
-
classes.push(arg.toString());
|
|
493
|
-
continue;
|
|
494
|
-
}
|
|
495
|
-
|
|
496
|
-
for (var key in arg) {
|
|
497
|
-
if (hasOwn.call(arg, key) && arg[key]) {
|
|
498
|
-
classes.push(key);
|
|
499
|
-
}
|
|
500
|
-
}
|
|
501
|
-
}
|
|
502
|
-
}
|
|
503
|
-
|
|
504
|
-
return classes.join(' ');
|
|
505
|
-
}
|
|
506
|
-
|
|
507
|
-
if (module.exports) {
|
|
508
|
-
classNames.default = classNames;
|
|
509
|
-
module.exports = classNames;
|
|
510
|
-
} else {
|
|
511
|
-
window.classNames = classNames;
|
|
512
|
-
}
|
|
513
|
-
}());
|
|
514
|
-
} (classnames));
|
|
515
|
-
|
|
516
|
-
var classnamesExports = classnames.exports;
|
|
517
|
-
var classNames = /*@__PURE__*/getDefaultExportFromCjs(classnamesExports);
|
|
518
|
-
|
|
519
456
|
var baseUrl = "/api/v1/recordings";
|
|
520
457
|
var create = function create(payload) {
|
|
521
458
|
return axios.post(baseUrl, payload);
|
|
@@ -546,28 +483,6 @@ var useRecordingUploadSuccess = function useRecordingUploadSuccess() {
|
|
|
546
483
|
});
|
|
547
484
|
};
|
|
548
485
|
|
|
549
|
-
var useBeforeUnload = function useBeforeUnload(enabled) {
|
|
550
|
-
var _useTranslation = useTranslation(),
|
|
551
|
-
t = _useTranslation.t;
|
|
552
|
-
var handler = function handler(event) {
|
|
553
|
-
event.preventDefault();
|
|
554
|
-
var defaultMessage = t("neetoMediaRecorder.common.leaveSite");
|
|
555
|
-
|
|
556
|
-
// Gecko + IE browsers
|
|
557
|
-
event.returnValue = defaultMessage;
|
|
558
|
-
|
|
559
|
-
// Safari, Chrome, and other WebKit-derived browsers
|
|
560
|
-
return defaultMessage;
|
|
561
|
-
};
|
|
562
|
-
useEffect(function () {
|
|
563
|
-
if (!enabled) return undefined;
|
|
564
|
-
window.addEventListener("beforeunload", handler);
|
|
565
|
-
return function () {
|
|
566
|
-
return window.removeEventListener("beforeunload", handler);
|
|
567
|
-
};
|
|
568
|
-
}, [enabled]);
|
|
569
|
-
};
|
|
570
|
-
|
|
571
486
|
var AbortUpload = withT(function (_ref) {
|
|
572
487
|
var t = _ref.t;
|
|
573
488
|
return /*#__PURE__*/React.createElement("div", {
|
|
@@ -737,23 +652,15 @@ var useRecorderStatus = function useRecorderStatus() {
|
|
|
737
652
|
|
|
738
653
|
var Controls = function Controls(_ref) {
|
|
739
654
|
var _ref$className = _ref.className,
|
|
740
|
-
className = _ref$className === void 0 ? "" : _ref$className
|
|
655
|
+
className = _ref$className === void 0 ? "" : _ref$className,
|
|
656
|
+
setIsRestartAlertOpen = _ref.setIsRestartAlertOpen,
|
|
657
|
+
setIsDiscardAlertOpen = _ref.setIsDiscardAlertOpen;
|
|
741
658
|
var _useTranslation = useTranslation(),
|
|
742
659
|
t = _useTranslation.t;
|
|
743
|
-
var _useState = useState(false),
|
|
744
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
745
|
-
isDiscardAlertOpen = _useState2[0],
|
|
746
|
-
setIsDiscardAlertOpen = _useState2[1];
|
|
747
|
-
var _useState3 = useState(false),
|
|
748
|
-
_useState4 = _slicedToArray(_useState3, 2),
|
|
749
|
-
isRestartAlertOpen = _useState4[0],
|
|
750
|
-
setIsRestartAlertOpen = _useState4[1];
|
|
751
660
|
var startRecording = screenRecorder.startRecording,
|
|
752
661
|
pauseRecording = screenRecorder.pauseRecording,
|
|
753
662
|
stopRecording = screenRecorder.stopRecording,
|
|
754
663
|
resumeRecording = screenRecorder.resumeRecording,
|
|
755
|
-
discardRecording = screenRecorder.discardRecording,
|
|
756
|
-
restartRecording = screenRecorder.restartRecording,
|
|
757
664
|
useRecorderStore = screenRecorder.useRecorderStore;
|
|
758
665
|
var _useRecorderStore = useRecorderStore(function (store) {
|
|
759
666
|
return {
|
|
@@ -764,14 +671,6 @@ var Controls = function Controls(_ref) {
|
|
|
764
671
|
var _useRecorderStatus = useRecorderStatus(),
|
|
765
672
|
isStatus = _useRecorderStatus.isStatus;
|
|
766
673
|
var hasRecordingStarted = isStatus(SCREEN_RECORDER_STATUS.recording, SCREEN_RECORDER_STATUS.paused);
|
|
767
|
-
var handleDiscardAlertClose = function handleDiscardAlertClose() {
|
|
768
|
-
discardRecording();
|
|
769
|
-
setIsDiscardAlertOpen(false);
|
|
770
|
-
};
|
|
771
|
-
var handleRestartAlertClose = function handleRestartAlertClose() {
|
|
772
|
-
restartRecording();
|
|
773
|
-
setIsRestartAlertOpen(false);
|
|
774
|
-
};
|
|
775
674
|
return /*#__PURE__*/React.createElement("div", {
|
|
776
675
|
className: classNames("flex flex-row items-center gap-3 p-2", _defineProperty({
|
|
777
676
|
"neeto-ui-rounded-lg neeto-ui-border-gray-200 border-2": hasRecordingStarted
|
|
@@ -867,25 +766,7 @@ var Controls = function Controls(_ref) {
|
|
|
867
766
|
position: "top"
|
|
868
767
|
},
|
|
869
768
|
onClick: stopRecording
|
|
870
|
-
}))
|
|
871
|
-
isOpen: isDiscardAlertOpen,
|
|
872
|
-
message: t("neetoMediaRecorder.record.discardConfirmation.message"),
|
|
873
|
-
submitButtonLabel: t("neetoMediaRecorder.record.discard"),
|
|
874
|
-
title: t("neetoMediaRecorder.record.discardConfirmation.title"),
|
|
875
|
-
onClose: function onClose() {
|
|
876
|
-
return setIsDiscardAlertOpen(false);
|
|
877
|
-
},
|
|
878
|
-
onSubmit: handleDiscardAlertClose
|
|
879
|
-
}), /*#__PURE__*/React.createElement(Alert, {
|
|
880
|
-
isOpen: isRestartAlertOpen,
|
|
881
|
-
message: t("neetoMediaRecorder.record.restartConfirmation.message"),
|
|
882
|
-
submitButtonLabel: t("neetoMediaRecorder.record.restart"),
|
|
883
|
-
title: t("neetoMediaRecorder.record.restartConfirmation.title"),
|
|
884
|
-
onClose: function onClose() {
|
|
885
|
-
return setIsRestartAlertOpen(false);
|
|
886
|
-
},
|
|
887
|
-
onSubmit: handleRestartAlertClose
|
|
888
|
-
}));
|
|
769
|
+
})));
|
|
889
770
|
};
|
|
890
771
|
|
|
891
772
|
var useMultipartS3UploadStatus = function useMultipartS3UploadStatus() {
|
|
@@ -907,29 +788,6 @@ var useMultipartS3UploadStatus = function useMultipartS3UploadStatus() {
|
|
|
907
788
|
};
|
|
908
789
|
};
|
|
909
790
|
|
|
910
|
-
var SetChromeFlags = function SetChromeFlags() {
|
|
911
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
912
|
-
className: "flex h-screen w-full flex-col items-center justify-center"
|
|
913
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
914
|
-
className: "flex h-full w-full flex-col items-center justify-center space-y-4"
|
|
915
|
-
}, /*#__PURE__*/React.createElement(Callout, {
|
|
916
|
-
className: "mb-2 p-3",
|
|
917
|
-
style: "danger"
|
|
918
|
-
}, /*#__PURE__*/React.createElement(Typography, {
|
|
919
|
-
style: "body2"
|
|
920
|
-
}, /*#__PURE__*/React.createElement(Trans, {
|
|
921
|
-
i18nKey: "record.chromeFlagsMissingMessage",
|
|
922
|
-
components: {
|
|
923
|
-
Button: /*#__PURE__*/React.createElement(Button, {
|
|
924
|
-
href: "https://github.com/bigbinary/neeto-record-web#local-development-setup",
|
|
925
|
-
rel: "noreferrer",
|
|
926
|
-
style: "link",
|
|
927
|
-
target: "_blank"
|
|
928
|
-
})
|
|
929
|
-
}
|
|
930
|
-
})))));
|
|
931
|
-
};
|
|
932
|
-
|
|
933
791
|
var formatTime = function formatTime(time) {
|
|
934
792
|
return Math.floor(time).toString().padStart(2, "0");
|
|
935
793
|
};
|
|
@@ -987,7 +845,10 @@ var UploadingInProgress = withT(function (_ref) {
|
|
|
987
845
|
}), /*#__PURE__*/React.createElement(Spinner, null)));
|
|
988
846
|
});
|
|
989
847
|
|
|
990
|
-
var
|
|
848
|
+
var useRecorderStore = screenRecorder.useRecorderStore,
|
|
849
|
+
restartRecording = screenRecorder.restartRecording,
|
|
850
|
+
discardRecording = screenRecorder.discardRecording;
|
|
851
|
+
var MediaRecorder = function MediaRecorder(_ref, ref) {
|
|
991
852
|
var _ref$onUploadComplete = _ref.onUploadComplete,
|
|
992
853
|
onUploadComplete = _ref$onUploadComplete === void 0 ? noop : _ref$onUploadComplete,
|
|
993
854
|
_ref$onDiscard = _ref.onDiscard,
|
|
@@ -1002,7 +863,14 @@ var MediaRecorder = function MediaRecorder(_ref) {
|
|
|
1002
863
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
1003
864
|
uploadId = _useState4[0],
|
|
1004
865
|
setUploadId = _useState4[1];
|
|
1005
|
-
var
|
|
866
|
+
var _useState5 = useState(false),
|
|
867
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
868
|
+
isDiscardAlertOpen = _useState6[0],
|
|
869
|
+
setIsDiscardAlertOpen = _useState6[1];
|
|
870
|
+
var _useState7 = useState(false),
|
|
871
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
872
|
+
isRestartAlertOpen = _useState8[0],
|
|
873
|
+
setIsRestartAlertOpen = _useState8[1];
|
|
1006
874
|
var _useRecorderStore = useRecorderStore(function (store) {
|
|
1007
875
|
return {
|
|
1008
876
|
status: store["status"],
|
|
@@ -1071,8 +939,24 @@ var MediaRecorder = function MediaRecorder(_ref) {
|
|
|
1071
939
|
return _ref3.apply(this, arguments);
|
|
1072
940
|
};
|
|
1073
941
|
}();
|
|
1074
|
-
var
|
|
1075
|
-
|
|
942
|
+
var handleDiscardAlertClose = function handleDiscardAlertClose() {
|
|
943
|
+
discardRecording();
|
|
944
|
+
setIsDiscardAlertOpen(false);
|
|
945
|
+
};
|
|
946
|
+
var handleRestartAlertClose = function handleRestartAlertClose() {
|
|
947
|
+
restartRecording();
|
|
948
|
+
setIsRestartAlertOpen(false);
|
|
949
|
+
};
|
|
950
|
+
useImperativeHandle(ref, function () {
|
|
951
|
+
return {
|
|
952
|
+
handleDiscardRecording: function handleDiscardRecording() {
|
|
953
|
+
return setIsDiscardAlertOpen(true);
|
|
954
|
+
},
|
|
955
|
+
handleRestartRecording: function handleRestartRecording() {
|
|
956
|
+
return setIsRestartAlertOpen(true);
|
|
957
|
+
}
|
|
958
|
+
};
|
|
959
|
+
});
|
|
1076
960
|
useEffect(function () {
|
|
1077
961
|
if (!isRecorderStatus(SCREEN_RECORDER_STATUS.idle) || error === SCREEN_RECORDER_ERROR.NotAllowedError) {
|
|
1078
962
|
return;
|
|
@@ -1105,9 +989,6 @@ var MediaRecorder = function MediaRecorder(_ref) {
|
|
|
1105
989
|
};
|
|
1106
990
|
}, []);
|
|
1107
991
|
if (error === SCREEN_RECORDER_ERROR.UnSupportedBrowser) return /*#__PURE__*/React.createElement(UnSupportedBrowser, null);
|
|
1108
|
-
if (globalProps.railsEnv === "development" && error === SCREEN_RECORDER_ERROR.TypeError) {
|
|
1109
|
-
return /*#__PURE__*/React.createElement(SetChromeFlags, null);
|
|
1110
|
-
}
|
|
1111
992
|
if (isRecorderStatus(SCREEN_RECORDER_STATUS.stopped) && isUploadStatus(UPLOAD_STATUS.uploading)) {
|
|
1112
993
|
return /*#__PURE__*/React.createElement(UploadingInProgress, {
|
|
1113
994
|
recordingId: recordingId
|
|
@@ -1132,9 +1013,30 @@ var MediaRecorder = function MediaRecorder(_ref) {
|
|
|
1132
1013
|
className: "neeto-ui-bg-primary-100 neeto-ui-rounded-full flex h-32 w-32 items-center justify-center",
|
|
1133
1014
|
style: "h1"
|
|
1134
1015
|
}, countdownTimeLeft), /*#__PURE__*/React.createElement(Typography, null, t("neetoMediaRecorder.record.startsIn"))), isRecorderStatus(SCREEN_RECORDER_STATUS.recording, SCREEN_RECORDER_STATUS.paused) && /*#__PURE__*/React.createElement(Timer, null)), /*#__PURE__*/React.createElement(Controls, {
|
|
1135
|
-
className: "mt-5"
|
|
1016
|
+
className: "mt-5",
|
|
1017
|
+
setIsDiscardAlertOpen: setIsDiscardAlertOpen,
|
|
1018
|
+
setIsRestartAlertOpen: setIsRestartAlertOpen
|
|
1019
|
+
}), /*#__PURE__*/React.createElement(Alert, {
|
|
1020
|
+
isOpen: isDiscardAlertOpen,
|
|
1021
|
+
message: t("neetoMediaRecorder.record.discardConfirmation.message"),
|
|
1022
|
+
submitButtonLabel: t("neetoMediaRecorder.record.discard"),
|
|
1023
|
+
title: t("neetoMediaRecorder.record.discardConfirmation.title"),
|
|
1024
|
+
onClose: function onClose() {
|
|
1025
|
+
return setIsDiscardAlertOpen(false);
|
|
1026
|
+
},
|
|
1027
|
+
onSubmit: handleDiscardAlertClose
|
|
1028
|
+
}), /*#__PURE__*/React.createElement(Alert, {
|
|
1029
|
+
isOpen: isRestartAlertOpen,
|
|
1030
|
+
message: t("neetoMediaRecorder.record.restartConfirmation.message"),
|
|
1031
|
+
submitButtonLabel: t("neetoMediaRecorder.record.restart"),
|
|
1032
|
+
title: t("neetoMediaRecorder.record.restartConfirmation.title"),
|
|
1033
|
+
onClose: function onClose() {
|
|
1034
|
+
return setIsRestartAlertOpen(false);
|
|
1035
|
+
},
|
|
1036
|
+
onSubmit: handleRestartAlertClose
|
|
1136
1037
|
}));
|
|
1137
1038
|
};
|
|
1039
|
+
var index = /*#__PURE__*/forwardRef(MediaRecorder);
|
|
1138
1040
|
|
|
1139
|
-
export { MediaRecorder };
|
|
1041
|
+
export { index as MediaRecorder };
|
|
1140
1042
|
//# sourceMappingURL=index.js.map
|