@newtonschool/react_proctoring_library 0.0.17 → 0.0.18

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.
@@ -11,6 +11,8 @@ require("core-js/modules/es.promise.js");
11
11
 
12
12
  var _react = _interopRequireWildcard(require("react"));
13
13
 
14
+ require("./index.scss");
15
+
14
16
  var _ = require(".");
15
17
 
16
18
  var _utils = require("../utils");
@@ -46,13 +48,14 @@ const ProctorApp = _ref => {
46
48
  proctoringIdentifier,
47
49
  children,
48
50
  config,
51
+ screensharePermission,
52
+ requestScreenshare = () => {},
49
53
  getProctorParamValues = () => {},
50
54
  getWebcamSnapshot = () => {},
51
55
  getScreengrab = () => {}
52
56
  } = _ref;
53
57
  const webcamReference = (0, _react.useRef)(null);
54
58
  const canvasReference = (0, _react.useRef)(null);
55
- const screenshareReference = (0, _react.useRef)(null);
56
59
  const proctorParams = (0, _react.useMemo)(() => _objectSpread(_objectSpread({}, _defaults.defaultConfig), config.proctorParams), [config.proctorParams]);
57
60
  const statistics = (0, _react.useRef)((0, _breachUtils.getInitialStats)(proctorParams));
58
61
  const {
@@ -61,7 +64,6 @@ const ProctorApp = _ref => {
61
64
  } = config;
62
65
  const [audioPermission, setAudioPermission] = (0, _react.useState)();
63
66
  const [videoPermission, setVideoPermission] = (0, _react.useState)();
64
- const [screensharePermission, setScreensharePermission] = (0, _react.useState)(!proctorParams.screenshareSnapshots);
65
67
  const firstFullScreenDone = (0, _react.useRef)(false);
66
68
  const recurringFetchIntervalRef = (0, _react.useRef)(null);
67
69
  const sendScreengrab = (0, _react.useCallback)(async function () {
@@ -126,10 +128,9 @@ const ProctorApp = _ref => {
126
128
  sendScreengrab(true, breachData.breachedParam);
127
129
  }
128
130
  }, [userCount, isTabSwitched, isFullscreen, lookedAwayCount, sendProctoredParamValues, sendWebcamSnapshot, sendScreengrab, proctorParams]);
129
- const updateScreensharePermission = (0, _react.useCallback)(() => {
130
- (0, _webcamMicrophoneUtils.setupScreensharePermission)(setScreensharePermission, screenshareReference);
131
- }, []);
132
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, (0, _breachUtils.showProctoredComponent)(proctorParams, {
131
+ return /*#__PURE__*/_react.default.createElement("div", {
132
+ className: "".concat(proctorParams.copyPasteProctoring ? "disable-copy-paste fullwidth" : "fullwidth")
133
+ }, (0, _breachUtils.showProctoredComponent)(proctorParams, {
133
134
  isFullscreen,
134
135
  audioPermission,
135
136
  videoPermission,
@@ -141,14 +142,13 @@ const ProctorApp = _ref => {
141
142
  videoPermission: videoPermission,
142
143
  setFullscreen: setFullscreen,
143
144
  screensharePermission: screensharePermission,
144
- updateScreensharePermission: updateScreensharePermission
145
+ requestScreenshare: requestScreenshare
145
146
  }), /*#__PURE__*/_react.default.createElement(_.ActivityTracker, {
146
147
  proctorParams: proctorParams,
147
148
  setAudioPermission: setAudioPermission,
148
149
  setVideoPermission: setVideoPermission,
149
150
  webcamReference: webcamReference,
150
- canvasReference: canvasReference,
151
- screenshareReference: screenshareReference
151
+ canvasReference: canvasReference
152
152
  }));
153
153
  };
154
154
 
@@ -33,8 +33,7 @@ const ActivityTracker = _ref => {
33
33
  webcamReference,
34
34
  canvasReference,
35
35
  setAudioPermission,
36
- setVideoPermission,
37
- screenshareReference
36
+ setVideoPermission
38
37
  } = _ref;
39
38
  (0, _react.useEffect)(() => {
40
39
  if ((0, _browserUtils.isChrome)()) {
@@ -141,11 +140,7 @@ const ActivityTracker = _ref => {
141
140
  ref: canvasReference,
142
141
  className: "captured-video-canvas",
143
142
  id: "wc-ref"
144
- })), proctorParams.screenshareSnapshots && /*#__PURE__*/_react.default.createElement("video", {
145
- ref: screenshareReference,
146
- className: "captured-video-canvas",
147
- id: "ss-ref"
148
- }));
143
+ })));
149
144
  };
150
145
 
151
146
  var _default = ActivityTracker;
@@ -21,11 +21,19 @@ Object.defineProperty(exports, "ProctorApp", {
21
21
  return _ProctorApp.default;
22
22
  }
23
23
  });
24
+ Object.defineProperty(exports, "ScreenshareTracker", {
25
+ enumerable: true,
26
+ get: function get() {
27
+ return _screenshare.ScreenshareTracker;
28
+ }
29
+ });
24
30
 
25
31
  var _activityTracker = _interopRequireDefault(require("./activity-tracker"));
26
32
 
27
33
  var _permissions = require("./permissions");
28
34
 
35
+ var _screenshare = require("./screenshare");
36
+
29
37
  var _ProctorApp = _interopRequireDefault(require("./ProctorApp"));
30
38
 
31
39
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -0,0 +1,8 @@
1
+ .disable-copy-paste {
2
+ -webkit-user-select: none;
3
+ -ms-user-select: none;
4
+ user-select: none;
5
+ }
6
+ .fullwidth {
7
+ width: 100%;
8
+ }
@@ -35,7 +35,7 @@ const Permission = _ref => {
35
35
  videoPermission,
36
36
  setFullscreen,
37
37
  screensharePermission,
38
- updateScreensharePermission
38
+ requestScreenshare
39
39
  } = _ref;
40
40
  const showPermissionModal = isFullscreen === false || (0, _breachUtils.isWebcamRequired)(proctorParams) && audioPermisison === false || (0, _breachUtils.isWebcamRequired)(proctorParams) && videoPermission === false || !screensharePermission;
41
41
  return /*#__PURE__*/_react.default.createElement(_reactBootstrap.Modal, {
@@ -67,7 +67,7 @@ const Permission = _ref => {
67
67
  showScreensharePermission: !screensharePermission && proctorParams.screenshareSnapshots
68
68
  })), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Modal.Footer, null, !screensharePermission && proctorParams.screenshareSnapshots && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
69
69
  onClick: () => {
70
- updateScreensharePermission();
70
+ requestScreenshare();
71
71
  }
72
72
  }, text.ALLOW_SCREENSHARE), screensharePermission && !isFullscreen && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
73
73
  variant: "primary",
@@ -34,7 +34,7 @@ const PermissionBody = _ref => {
34
34
  className: "mb-2"
35
35
  }, text.PERMISSION_GENERIC), showScreensharePermission && /*#__PURE__*/_react.default.createElement("div", {
36
36
  className: "mb-2"
37
- }, (0, _browserUtils.isChrome)() && /*#__PURE__*/_react.default.createElement("strong", null, "Please switch to chrome"), /*#__PURE__*/_react.default.createElement("span", {
37
+ }, !(0, _browserUtils.isChrome)() && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("strong", null, "Please switch to chrome"), /*#__PURE__*/_react.default.createElement("br", null)), /*#__PURE__*/_react.default.createElement("span", {
38
38
  className: "pr-2 font-weight-bold"
39
39
  }, "Screenshare:"), text.PERMISSION_SCREENSHARE), showAudioPermissionText && showVideoPermissionText ? /*#__PURE__*/_react.default.createElement("div", {
40
40
  className: "mb-2"
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ScreenshareTracker = void 0;
7
+
8
+ require("core-js/modules/web.dom-collections.iterator.js");
9
+
10
+ var _react = _interopRequireWildcard(require("react"));
11
+
12
+ var _webcamMicrophoneUtils = require("../../utils/webcamMicrophoneUtils");
13
+
14
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
+
16
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
17
+
18
+ const ScreenshareTracker = _ref => {
19
+ let {
20
+ triggerRequestPermission,
21
+ permissionChangeCallback
22
+ } = _ref;
23
+ const [screensharePermission, setScreensharePermission] = (0, _react.useState)();
24
+ const screenshareReference = (0, _react.useRef)(null);
25
+ (0, _react.useEffect)(() => {
26
+ permissionChangeCallback(screensharePermission);
27
+ }, [screensharePermission, permissionChangeCallback]);
28
+ (0, _react.useEffect)(() => {
29
+ if (triggerRequestPermission) {
30
+ (0, _webcamMicrophoneUtils.setupScreensharePermission)(setScreensharePermission, screenshareReference);
31
+ }
32
+ }, [triggerRequestPermission]);
33
+ return /*#__PURE__*/_react.default.createElement("video", {
34
+ ref: screenshareReference,
35
+ className: "captured-video-canvas",
36
+ id: "ss-ref"
37
+ });
38
+ };
39
+
40
+ exports.ScreenshareTracker = ScreenshareTracker;
@@ -0,0 +1,4 @@
1
+ .captured-video-canvas {
2
+ visibility: hidden;
3
+ position: absolute;
4
+ }
@@ -10,7 +10,8 @@ const defaultConfig = {
10
10
  fullscreenExit: true,
11
11
  lookedAway: true,
12
12
  webcamSnapshots: true,
13
- screenshareSnapshots: true
13
+ screenshareSnapshots: true,
14
+ copyPasteProctoring: true
14
15
  };
15
16
  exports.defaultConfig = defaultConfig;
16
17
  const initialValues = {
package/dist/index.js CHANGED
@@ -9,5 +9,11 @@ Object.defineProperty(exports, "ProctorApp", {
9
9
  return _components.ProctorApp;
10
10
  }
11
11
  });
12
+ Object.defineProperty(exports, "ScreenshareTracker", {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _components.ScreenshareTracker;
16
+ }
17
+ });
12
18
 
13
19
  var _components = require("./components");
@@ -151,6 +151,7 @@ const setupScreensharePermission = (setScreensharePermission, screenshareReferen
151
151
  const track = stream.getTracks()[0];
152
152
 
153
153
  if (track.getSettings().displaySurface === "monitor") {
154
+ setScreensharePermission(true);
154
155
  screenshareReference.current.srcObject = stream;
155
156
 
156
157
  screenshareReference.current.onloadedmetadata = e => {
@@ -159,9 +160,8 @@ const setupScreensharePermission = (setScreensharePermission, screenshareReferen
159
160
 
160
161
  track.onended = e => {
161
162
  setScreensharePermission(false);
163
+ screenshareReference.current.srcObject = null;
162
164
  };
163
-
164
- setScreensharePermission(true);
165
165
  } else {
166
166
  screenshareReference.current = null;
167
167
  setScreensharePermission(false);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@newtonschool/react_proctoring_library",
3
- "version": "0.0.17",
3
+ "version": "0.0.18",
4
4
  "description": "Used to proctor online tests",
5
5
  "author": "ayushkagrawal,shreyachandra",
6
6
  "main": "dist/index.js",