@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/index.js CHANGED
@@ -1,13 +1,13 @@
1
1
  import { shallow } from 'zustand/shallow';
2
- import React, { useEffect, useState } from 'react';
3
- import { globalProps } from '@bigbinary/neeto-commons-frontend/initializers';
4
- import { Typography, Spinner, Button, Alert, Callout } from '@bigbinary/neetoui';
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, Trans } from 'react-i18next';
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, UPLOAD_STATUS, SCREEN_RECORDER_EVENT, UPLOAD_EVENT } from '@bigbinary/neeto-media-recorder/constants';
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
- })), /*#__PURE__*/React.createElement(Alert, {
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 MediaRecorder = function MediaRecorder(_ref) {
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 useRecorderStore = screenRecorder.useRecorderStore;
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 shouldShowConfirmation = isRecorderStatus(SCREEN_RECORDER_STATUS.recording, SCREEN_RECORDER_STATUS.paused, SCREEN_RECORDER_STATUS.stopping) || isUploadStatus(UPLOAD_STATUS.uploading, UPLOAD_STATUS.aborting, UPLOAD_STATUS.completed);
1075
- useBeforeUnload(shouldShowConfirmation);
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