@elice/material-runbox 1.260825.0-runboxusability.2 → 1.260825.0-runboxusability.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.
Files changed (65) hide show
  1. package/cjs/_virtual/_rollupPluginBabelHelpers.js +16 -0
  2. package/cjs/components/material-runbox/MaterialRunboxContent.js +8 -0
  3. package/cjs/components/material-runbox/MaterialRunboxHeader.js +22 -18
  4. package/cjs/components/material-runbox/disk/MaterialRunboxDiskUsageAlert.d.ts +13 -0
  5. package/cjs/components/material-runbox/disk/MaterialRunboxDiskUsageAlert.js +71 -0
  6. package/cjs/components/material-runbox/disk/MaterialRunboxDiskUsageDialog.d.ts +10 -0
  7. package/cjs/components/material-runbox/disk/MaterialRunboxDiskUsageDialog.js +98 -0
  8. package/cjs/components/material-runbox/disk/MaterialRunboxEnvResetButton.d.ts +10 -0
  9. package/cjs/components/material-runbox/disk/MaterialRunboxEnvResetButton.js +68 -0
  10. package/cjs/components/material-runbox/disk/MaterialRunboxEnvResetDialog.d.ts +14 -0
  11. package/cjs/components/material-runbox/disk/MaterialRunboxEnvResetDialog.js +103 -0
  12. package/cjs/components/material-runbox/disk/index.d.ts +8 -1
  13. package/cjs/components/material-runbox/disk/index.js +8 -2
  14. package/cjs/components/material-runbox/hooks/index.d.ts +2 -0
  15. package/cjs/components/material-runbox/hooks/index.js +6 -0
  16. package/cjs/components/material-runbox/hooks/useRunboxDiskUsage.d.ts +16 -0
  17. package/cjs/components/material-runbox/hooks/useRunboxDiskUsage.js +50 -0
  18. package/cjs/components/material-runbox/hooks/useRunboxEnvReset.d.ts +16 -0
  19. package/cjs/components/material-runbox/hooks/useRunboxEnvReset.js +95 -0
  20. package/cjs/components/material-runbox/locales/en.json.js +1 -1
  21. package/cjs/components/material-runbox/locales/ja.json.js +1 -1
  22. package/cjs/components/material-runbox/locales/ko.json.js +1 -1
  23. package/cjs/components/material-runbox/locales/th.json.js +1 -1
  24. package/cjs/components/material-runbox/runtime/Runtime.js +5 -2
  25. package/cjs/components/material-runbox/runtime/RuntimeOverlayTerminated.d.ts +4 -0
  26. package/cjs/components/material-runbox/runtime/RuntimeOverlayTerminated.js +16 -4
  27. package/cjs/components/material-runbox/status/MaterialRunboxStatusButton.d.ts +4 -7
  28. package/cjs/components/material-runbox/status/MaterialRunboxStatusButton.js +43 -15
  29. package/cjs/components/material-runbox/status/MaterialRunboxStatusPopover.d.ts +4 -7
  30. package/cjs/components/material-runbox/status/MaterialRunboxStatusPopover.js +16 -3
  31. package/es/_virtual/_rollupPluginBabelHelpers.js +13 -1
  32. package/es/components/material-runbox/MaterialRunboxContent.js +8 -0
  33. package/es/components/material-runbox/MaterialRunboxHeader.js +22 -18
  34. package/es/components/material-runbox/disk/MaterialRunboxDiskUsageAlert.d.ts +13 -0
  35. package/es/components/material-runbox/disk/MaterialRunboxDiskUsageAlert.js +67 -0
  36. package/es/components/material-runbox/disk/MaterialRunboxDiskUsageDialog.d.ts +10 -0
  37. package/es/components/material-runbox/disk/MaterialRunboxDiskUsageDialog.js +94 -0
  38. package/es/components/material-runbox/disk/MaterialRunboxEnvResetButton.d.ts +10 -0
  39. package/es/components/material-runbox/disk/MaterialRunboxEnvResetButton.js +60 -0
  40. package/es/components/material-runbox/disk/MaterialRunboxEnvResetDialog.d.ts +14 -0
  41. package/es/components/material-runbox/disk/MaterialRunboxEnvResetDialog.js +95 -0
  42. package/es/components/material-runbox/disk/index.d.ts +8 -1
  43. package/es/components/material-runbox/disk/index.js +4 -1
  44. package/es/components/material-runbox/hooks/index.d.ts +2 -0
  45. package/es/components/material-runbox/hooks/index.js +2 -0
  46. package/es/components/material-runbox/hooks/useRunboxDiskUsage.d.ts +16 -0
  47. package/es/components/material-runbox/hooks/useRunboxDiskUsage.js +42 -0
  48. package/es/components/material-runbox/hooks/useRunboxEnvReset.d.ts +16 -0
  49. package/es/components/material-runbox/hooks/useRunboxEnvReset.js +89 -0
  50. package/es/components/material-runbox/locales/en.json.js +1 -1
  51. package/es/components/material-runbox/locales/ja.json.js +1 -1
  52. package/es/components/material-runbox/locales/ko.json.js +1 -1
  53. package/es/components/material-runbox/locales/th.json.js +1 -1
  54. package/es/components/material-runbox/runtime/Runtime.js +5 -2
  55. package/es/components/material-runbox/runtime/RuntimeOverlayTerminated.d.ts +4 -0
  56. package/es/components/material-runbox/runtime/RuntimeOverlayTerminated.js +18 -6
  57. package/es/components/material-runbox/status/MaterialRunboxStatusButton.d.ts +4 -7
  58. package/es/components/material-runbox/status/MaterialRunboxStatusButton.js +46 -18
  59. package/es/components/material-runbox/status/MaterialRunboxStatusPopover.d.ts +4 -7
  60. package/es/components/material-runbox/status/MaterialRunboxStatusPopover.js +17 -4
  61. package/package.json +6 -6
  62. package/cjs/components/material-runbox/disk/MaterialRunboxDiskAlmostFullSnackbar.d.ts +0 -5
  63. package/cjs/components/material-runbox/disk/MaterialRunboxDiskAlmostFullSnackbar.js +0 -98
  64. package/es/components/material-runbox/disk/MaterialRunboxDiskAlmostFullSnackbar.d.ts +0 -5
  65. package/es/components/material-runbox/disk/MaterialRunboxDiskAlmostFullSnackbar.js +0 -94
@@ -8,6 +8,9 @@ function _arrayLikeToArray(r, a) {
8
8
  function _arrayWithHoles(r) {
9
9
  if (Array.isArray(r)) return r;
10
10
  }
11
+ function _arrayWithoutHoles(r) {
12
+ if (Array.isArray(r)) return _arrayLikeToArray(r);
13
+ }
11
14
  function asyncGeneratorStep(n, t, e, r, o, a, c) {
12
15
  try {
13
16
  var i = n[a](c),
@@ -41,6 +44,9 @@ function _defineProperty(e, r, t) {
41
44
  writable: true
42
45
  }) : e[r] = t, e;
43
46
  }
47
+ function _iterableToArray(r) {
48
+ if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r);
49
+ }
44
50
  function _iterableToArrayLimit(r, l) {
45
51
  var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
46
52
  if (null != t) {
@@ -71,6 +77,9 @@ function _iterableToArrayLimit(r, l) {
71
77
  function _nonIterableRest() {
72
78
  throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
73
79
  }
80
+ function _nonIterableSpread() {
81
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
82
+ }
74
83
  function _regenerator() {
75
84
  /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
76
85
  var e,
@@ -189,6 +198,9 @@ function _taggedTemplateLiteral(e, t) {
189
198
  }
190
199
  }));
191
200
  }
201
+ function _toConsumableArray(r) {
202
+ return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread();
203
+ }
192
204
  function _toPrimitive(t, r) {
193
205
  if ("object" != typeof t || !t) return t;
194
206
  var e = t[Symbol.toPrimitive];
@@ -213,14 +225,18 @@ function _unsupportedIterableToArray(r, a) {
213
225
 
214
226
  exports.arrayLikeToArray = _arrayLikeToArray;
215
227
  exports.arrayWithHoles = _arrayWithHoles;
228
+ exports.arrayWithoutHoles = _arrayWithoutHoles;
216
229
  exports.asyncToGenerator = _asyncToGenerator;
217
230
  exports.defineProperty = _defineProperty;
231
+ exports.iterableToArray = _iterableToArray;
218
232
  exports.iterableToArrayLimit = _iterableToArrayLimit;
219
233
  exports.nonIterableRest = _nonIterableRest;
234
+ exports.nonIterableSpread = _nonIterableSpread;
220
235
  exports.regenerator = _regenerator;
221
236
  exports.regeneratorDefine = _regeneratorDefine;
222
237
  exports.slicedToArray = _slicedToArray;
223
238
  exports.taggedTemplateLiteral = _taggedTemplateLiteral;
239
+ exports.toConsumableArray = _toConsumableArray;
224
240
  exports.toPrimitive = _toPrimitive;
225
241
  exports.toPropertyKey = _toPropertyKey;
226
242
  exports.unsupportedIterableToArray = _unsupportedIterableToArray;
@@ -19,6 +19,8 @@ var MaterialRunboxHeader = require('./MaterialRunboxHeader.js');
19
19
  var MaterialRunboxContext = require('./contexts/MaterialRunboxContext.js');
20
20
  var MaterialRunboxApiContext = require('./contexts/MaterialRunboxApiContext.js');
21
21
  var MaterialRunboxCommandContext = require('./contexts/MaterialRunboxCommandContext.js');
22
+ var MaterialRunboxDiskUsageAlert = require('./disk/MaterialRunboxDiskUsageAlert.js');
23
+ var MaterialRunboxDiskUsageDialog = require('./disk/MaterialRunboxDiskUsageDialog.js');
22
24
  var useMaterialRunboxRunboxIdStarterGet = require('./hooks/useMaterialRunboxRunboxIdStarterGet.js');
23
25
 
24
26
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
@@ -288,6 +290,12 @@ var MaterialRunboxContent = function MaterialRunboxContent(_ref) {
288
290
  studentUserId: studentUserId,
289
291
  userId: userId,
290
292
  isTutoring: isTutoring
293
+ }), jsxRuntime.jsx(MaterialRunboxDiskUsageAlert.default, {
294
+ runtimeTemplateId: runtimeTemplate.id,
295
+ courseId: courseId,
296
+ userId: studentUserId
297
+ }), jsxRuntime.jsx(MaterialRunboxDiskUsageDialog.default, {
298
+ runboxId: runbox.id
291
299
  }), jsxRuntime.jsx(MaterialRunboxBody.default, Object.assign({
292
300
  setSnackbarRoot: setSnackbarRoot
293
301
  }, props))]
@@ -22,7 +22,6 @@ var MaterialRunboxContext = require('./contexts/MaterialRunboxContext.js');
22
22
  var MaterialRunboxApiContext = require('./contexts/MaterialRunboxApiContext.js');
23
23
  var MaterialRunboxTimer = require('./timer/MaterialRunboxTimer.js');
24
24
  var MaterialRunboxStatusButton = require('./status/MaterialRunboxStatusButton.js');
25
- var MaterialRunboxDiskAlmostFullSnackbar = require('./disk/MaterialRunboxDiskAlmostFullSnackbar.js');
26
25
  var useRunboxControl = require('./hooks/useRunboxControl.js');
27
26
 
28
27
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
@@ -35,25 +34,28 @@ var StyledHeader = /*#__PURE__*/_styled__default.default("div", {
35
34
  })("position:relative;flex:0 0 3rem;display:flex;justify-content:flex-start;align-items:center;gap:1rem;padding:0 1rem;width:100%;border-bottom:1px solid ", function (_ref) {
36
35
  var theme = _ref.theme;
37
36
  return theme.palette.divider;
38
- }, ";overflow:hidden;background-color:", function (_ref2) {
37
+ }, ";overflow:hidden;color:", function (_ref2) {
39
38
  var theme = _ref2.theme;
39
+ return theme.palette.text.primary;
40
+ }, ";background-color:", function (_ref3) {
41
+ var theme = _ref3.theme;
40
42
  return theme.palette.background.paper;
41
43
  }, ";");
42
44
  //
43
45
  //
44
46
  //
45
- var MaterialRunboxHeader = function MaterialRunboxHeader(_ref3) {
46
- var runbox = _ref3.runbox,
47
- runtime = _ref3.runtime,
48
- runtimeTemplate = _ref3.runtimeTemplate,
49
- courseId = _ref3.courseId,
50
- userId = _ref3.userId,
51
- studentUserId = _ref3.studentUserId,
52
- isTutoring = _ref3.isTutoring,
53
- refetch = _ref3.refetch,
54
- getAchievementColor = _ref3.getAchievementColor,
55
- _ref3$hideTimerPopove = _ref3.hideTimerPopover,
56
- hideTimerPopover = _ref3$hideTimerPopove === void 0 ? false : _ref3$hideTimerPopove;
47
+ var MaterialRunboxHeader = function MaterialRunboxHeader(_ref4) {
48
+ var runbox = _ref4.runbox,
49
+ runtime = _ref4.runtime,
50
+ runtimeTemplate = _ref4.runtimeTemplate,
51
+ courseId = _ref4.courseId,
52
+ userId = _ref4.userId,
53
+ studentUserId = _ref4.studentUserId,
54
+ isTutoring = _ref4.isTutoring,
55
+ refetch = _ref4.refetch,
56
+ getAchievementColor = _ref4.getAchievementColor,
57
+ _ref4$hideTimerPopove = _ref4.hideTimerPopover,
58
+ hideTimerPopover = _ref4$hideTimerPopove === void 0 ? false : _ref4$hideTimerPopove;
57
59
  var intl$1 = intl.useRawEliceIntl();
58
60
  var _useMaterialRunboxCon = MaterialRunboxContext.useMaterialRunboxContext(),
59
61
  enableAutoShutdownToggle = _useMaterialRunboxCon.enableAutoShutdownToggle;
@@ -104,8 +106,8 @@ var MaterialRunboxHeader = function MaterialRunboxHeader(_ref3) {
104
106
  courseId: courseId,
105
107
  runtime: runtime
106
108
  }],
107
- queryFn: function queryFn(_ref4) {
108
- var signal = _ref4.signal;
109
+ queryFn: function queryFn(_ref5) {
110
+ var signal = _ref5.signal;
109
111
  return materialRunboxApi.runbox.runboxRunboxIdSubmitInfoGet({
110
112
  eliceCourseId: courseId,
111
113
  runboxId: runtime === null || runtime === void 0 ? void 0 : runtime.runboxId
@@ -226,8 +228,10 @@ var MaterialRunboxHeader = function MaterialRunboxHeader(_ref3) {
226
228
  stopRuntime: stopRuntime,
227
229
  hideTimerPopover: hideTimerPopover,
228
230
  isTutoring: isTutoring
229
- }) : null, jsxRuntime.jsx(MaterialRunboxStatusButton.default, {}), jsxRuntime.jsx(MaterialRunboxDiskAlmostFullSnackbar.default, {
230
- runboxId: runbox.id
231
+ }) : null, jsxRuntime.jsx(MaterialRunboxStatusButton.default, {
232
+ runtimeTemplateId: runtimeTemplate.id,
233
+ courseId: courseId,
234
+ userId: studentUserId
231
235
  }), jsxRuntime.jsxs(material.Stack, {
232
236
  direction: "row",
233
237
  alignItems: "center",
@@ -0,0 +1,13 @@
1
+ import type React from 'react';
2
+ export interface MaterialRunboxDiskUsageAlertProps {
3
+ runtimeTemplateId: string;
4
+ courseId: number;
5
+ /** User ID for tutoring. */
6
+ userId?: number;
7
+ }
8
+ /**
9
+ * Persistent bar under the header once disk usage passes 80%. Unlike the notice
10
+ * dialog it stays put, because it carries the only way out — the reset CTA.
11
+ */
12
+ declare const MaterialRunboxDiskUsageAlert: React.FC<MaterialRunboxDiskUsageAlertProps>;
13
+ export default MaterialRunboxDiskUsageAlert;
@@ -0,0 +1,71 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var intl = require('@elice/intl');
7
+ var muiElements = require('@elice/mui-elements');
8
+ var proSolidSvgIcons = require('@fortawesome/pro-solid-svg-icons');
9
+ var material = require('@mui/material');
10
+ var MaterialRunboxEnvResetButton = require('./MaterialRunboxEnvResetButton.js');
11
+ var useRunboxDiskUsage = require('../hooks/useRunboxDiskUsage.js');
12
+
13
+ //
14
+ //
15
+ //
16
+ /**
17
+ * Persistent bar under the header once disk usage passes 80%. Unlike the notice
18
+ * dialog it stays put, because it carries the only way out — the reset CTA.
19
+ */
20
+ var MaterialRunboxDiskUsageAlert = function MaterialRunboxDiskUsageAlert(_ref) {
21
+ var runtimeTemplateId = _ref.runtimeTemplateId,
22
+ courseId = _ref.courseId,
23
+ userId = _ref.userId;
24
+ var intl$1 = intl.useRawEliceIntl();
25
+ var _useRunboxDiskUsage = useRunboxDiskUsage.useRunboxDiskUsage(),
26
+ severity = _useRunboxDiskUsage.severity,
27
+ diskCurrent = _useRunboxDiskUsage.diskCurrent,
28
+ diskTotal = _useRunboxDiskUsage.diskTotal;
29
+ if (!severity) {
30
+ return null;
31
+ }
32
+ //
33
+ //
34
+ //
35
+ return jsxRuntime.jsx(material.Alert, {
36
+ severity: severity,
37
+ sx: {
38
+ width: '100%',
39
+ borderRadius: '0',
40
+ alignItems: 'center'
41
+ },
42
+ action: jsxRuntime.jsx(MaterialRunboxEnvResetButton.default, {
43
+ variant: "text",
44
+ size: "small",
45
+ color: "inherit",
46
+ startIcon: jsxRuntime.jsx(muiElements.EliceIcon, {
47
+ icon: proSolidSvgIcons.faArrowsRotate
48
+ }),
49
+ runtimeTemplateId: runtimeTemplateId,
50
+ courseId: courseId,
51
+ userId: userId
52
+ }),
53
+ children: jsxRuntime.jsx(material.Typography, {
54
+ variant: "body2",
55
+ children: intl$1.formatMessage({
56
+ id: "runbox.disk.usage.alert.".concat(severity)
57
+ }, {
58
+ used: intl$1.formatDataSize(diskCurrent, {
59
+ unitSystem: 'iec',
60
+ maximumFractionDigits: 2
61
+ }),
62
+ total: intl$1.formatDataSize(diskTotal, {
63
+ unitSystem: 'iec',
64
+ maximumFractionDigits: 2
65
+ })
66
+ })
67
+ })
68
+ });
69
+ };
70
+
71
+ exports.default = MaterialRunboxDiskUsageAlert;
@@ -0,0 +1,10 @@
1
+ import type React from 'react';
2
+ export interface MaterialRunboxDiskUsageDialogProps {
3
+ runboxId: string;
4
+ }
5
+ /**
6
+ * Notice shown once per severity per runbox for the browser session. The reset
7
+ * CTA lives in the alert bar, so this only has to be acknowledged.
8
+ */
9
+ declare const MaterialRunboxDiskUsageDialog: React.FC<MaterialRunboxDiskUsageDialogProps>;
10
+ export default MaterialRunboxDiskUsageDialog;
@@ -0,0 +1,98 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _rollupPluginBabelHelpers = require('../../../_virtual/_rollupPluginBabelHelpers.js');
6
+ var jsxRuntime = require('react/jsx-runtime');
7
+ var reactUse = require('react-use');
8
+ var intl = require('@elice/intl');
9
+ var muiElements = require('@elice/mui-elements');
10
+ var proSolidSvgIcons = require('@fortawesome/pro-solid-svg-icons');
11
+ var material = require('@mui/material');
12
+ var useRunboxDiskUsage = require('../hooks/useRunboxDiskUsage.js');
13
+
14
+ //
15
+ //
16
+ //
17
+ var SEEN_STORAGE_KEY = 'MaterialRunboxDiskUsage.seenNotice';
18
+ //
19
+ //
20
+ //
21
+ /**
22
+ * Notice shown once per severity per runbox for the browser session. The reset
23
+ * CTA lives in the alert bar, so this only has to be acknowledged.
24
+ */
25
+ var MaterialRunboxDiskUsageDialog = function MaterialRunboxDiskUsageDialog(_ref) {
26
+ var runboxId = _ref.runboxId;
27
+ var _a;
28
+ var intl$1 = intl.useRawEliceIntl();
29
+ var _useRunboxDiskUsage = useRunboxDiskUsage.useRunboxDiskUsage(),
30
+ severity = _useRunboxDiskUsage.severity,
31
+ diskCurrent = _useRunboxDiskUsage.diskCurrent,
32
+ diskTotal = _useRunboxDiskUsage.diskTotal;
33
+ var _useSessionStorage = reactUse.useSessionStorage(SEEN_STORAGE_KEY, {}),
34
+ _useSessionStorage2 = _rollupPluginBabelHelpers.slicedToArray(_useSessionStorage, 2),
35
+ seen = _useSessionStorage2[0],
36
+ setSeen = _useSessionStorage2[1];
37
+ var seenSeverities = (_a = seen === null || seen === void 0 ? void 0 : seen[runboxId]) !== null && _a !== void 0 ? _a : [];
38
+ /**
39
+ *
40
+ */
41
+ var handleClose = function handleClose() {
42
+ if (!severity) {
43
+ return;
44
+ }
45
+ setSeen(Object.assign(Object.assign({}, seen), _rollupPluginBabelHelpers.defineProperty({}, runboxId, [].concat(_rollupPluginBabelHelpers.toConsumableArray(seenSeverities), [severity]))));
46
+ };
47
+ //
48
+ //
49
+ //
50
+ if (!severity) {
51
+ return null;
52
+ }
53
+ return jsxRuntime.jsxs(material.Dialog, {
54
+ fullWidth: true,
55
+ open: !seenSeverities.includes(severity),
56
+ maxWidth: "xs",
57
+ onClose: handleClose,
58
+ children: [jsxRuntime.jsx(material.DialogTitle, {
59
+ children: jsxRuntime.jsxs(material.Stack, {
60
+ direction: "row",
61
+ alignItems: "center",
62
+ gap: "0.5rem",
63
+ children: [jsxRuntime.jsx(muiElements.EliceIcon, {
64
+ icon: severity === 'error' ? proSolidSvgIcons.faCircleExclamation : proSolidSvgIcons.faTriangleExclamation,
65
+ color: severity
66
+ }), intl$1.formatMessage({
67
+ id: 'runbox.disk.usage.dialog.title'
68
+ })]
69
+ })
70
+ }), jsxRuntime.jsx(material.DialogContent, {
71
+ children: jsxRuntime.jsx(material.DialogContentText, {
72
+ whiteSpace: "pre-line",
73
+ children: intl$1.formatMessage({
74
+ id: "runbox.disk.usage.dialog.description.".concat(severity)
75
+ }, {
76
+ used: intl$1.formatDataSize(diskCurrent, {
77
+ unitSystem: 'iec',
78
+ maximumFractionDigits: 2
79
+ }),
80
+ total: intl$1.formatDataSize(diskTotal, {
81
+ unitSystem: 'iec',
82
+ maximumFractionDigits: 2
83
+ })
84
+ })
85
+ })
86
+ }), jsxRuntime.jsx(material.DialogActions, {
87
+ children: jsxRuntime.jsx(material.Button, {
88
+ color: "inherit",
89
+ onClick: handleClose,
90
+ children: intl$1.formatMessage({
91
+ id: 'runbox.disk.usage.dialog.actions.close'
92
+ })
93
+ })
94
+ })]
95
+ });
96
+ };
97
+
98
+ exports.default = MaterialRunboxDiskUsageDialog;
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import type { ButtonProps } from '@mui/material';
3
+ export interface MaterialRunboxEnvResetButtonProps extends Omit<ButtonProps, 'onClick'> {
4
+ runtimeTemplateId: string;
5
+ courseId: number;
6
+ userId?: number;
7
+ onSuccess?: () => void;
8
+ }
9
+ declare const MaterialRunboxEnvResetButton: React.FC<MaterialRunboxEnvResetButtonProps>;
10
+ export default MaterialRunboxEnvResetButton;
@@ -0,0 +1,68 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _rollupPluginBabelHelpers = require('../../../_virtual/_rollupPluginBabelHelpers.js');
6
+ var tslib = require('tslib');
7
+ var jsxRuntime = require('react/jsx-runtime');
8
+ var React = require('react');
9
+ var intl = require('@elice/intl');
10
+ var material = require('@mui/material');
11
+ var MaterialRunboxEnvResetDialog = require('./MaterialRunboxEnvResetDialog.js');
12
+ var useRunboxEnvReset = require('../hooks/useRunboxEnvReset.js');
13
+
14
+ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
15
+
16
+ var React__default = /*#__PURE__*/_interopDefaultCompat(React);
17
+
18
+ //
19
+ //
20
+ //
21
+ var MaterialRunboxEnvResetButton = function MaterialRunboxEnvResetButton(_a) {
22
+ var runtimeTemplateId = _a.runtimeTemplateId,
23
+ courseId = _a.courseId,
24
+ userId = _a.userId,
25
+ _onSuccess = _a.onSuccess,
26
+ props = tslib.__rest(_a, ["runtimeTemplateId", "courseId", "userId", "onSuccess"]);
27
+ var intl$1 = intl.useRawEliceIntl();
28
+ var _React$useState = React__default.default.useState(false),
29
+ _React$useState2 = _rollupPluginBabelHelpers.slicedToArray(_React$useState, 2),
30
+ isDialogOpened = _React$useState2[0],
31
+ setDialogOpened = _React$useState2[1];
32
+ var _useRunboxEnvReset = useRunboxEnvReset.useRunboxEnvReset({
33
+ onSuccess: function onSuccess() {
34
+ setDialogOpened(false);
35
+ _onSuccess === null || _onSuccess === void 0 ? void 0 : _onSuccess();
36
+ }
37
+ }),
38
+ reset = _useRunboxEnvReset.reset,
39
+ isResetting = _useRunboxEnvReset.isResetting;
40
+ //
41
+ //
42
+ //
43
+ return jsxRuntime.jsxs(jsxRuntime.Fragment, {
44
+ children: [jsxRuntime.jsx(material.Button, Object.assign({}, props, {
45
+ onClick: function onClick() {
46
+ return setDialogOpened(true);
47
+ },
48
+ children: intl$1.formatMessage({
49
+ id: 'runbox.disk.env_reset.title'
50
+ })
51
+ })), jsxRuntime.jsx(MaterialRunboxEnvResetDialog.default, {
52
+ open: isDialogOpened,
53
+ isResetting: isResetting,
54
+ onClose: function onClose() {
55
+ return setDialogOpened(false);
56
+ },
57
+ onConfirm: function onConfirm() {
58
+ return void reset({
59
+ runtimeTemplateId: runtimeTemplateId,
60
+ courseId: courseId,
61
+ userId: userId
62
+ });
63
+ }
64
+ })]
65
+ });
66
+ };
67
+
68
+ exports.default = MaterialRunboxEnvResetButton;
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ export interface MaterialRunboxEnvResetDialogProps {
3
+ open: boolean;
4
+ isResetting?: boolean;
5
+ onClose: () => void;
6
+ onConfirm: () => void;
7
+ }
8
+ /**
9
+ * Confirms clearing the practice environment. The checkbox is the explicit
10
+ * acknowledgement `[R-3]` asks for: the delete action stays disabled until it
11
+ * is ticked.
12
+ */
13
+ declare const MaterialRunboxEnvResetDialog: React.FC<MaterialRunboxEnvResetDialogProps>;
14
+ export default MaterialRunboxEnvResetDialog;
@@ -0,0 +1,103 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _rollupPluginBabelHelpers = require('../../../_virtual/_rollupPluginBabelHelpers.js');
6
+ var jsxRuntime = require('react/jsx-runtime');
7
+ var React = require('react');
8
+ var intl = require('@elice/intl');
9
+ var muiElements = require('@elice/mui-elements');
10
+ var proSolidSvgIcons = require('@fortawesome/pro-solid-svg-icons');
11
+ var lab = require('@mui/lab');
12
+ var material = require('@mui/material');
13
+
14
+ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
15
+
16
+ var React__default = /*#__PURE__*/_interopDefaultCompat(React);
17
+
18
+ //
19
+ //
20
+ //
21
+ /**
22
+ * Confirms clearing the practice environment. The checkbox is the explicit
23
+ * acknowledgement `[R-3]` asks for: the delete action stays disabled until it
24
+ * is ticked.
25
+ */
26
+ var MaterialRunboxEnvResetDialog = function MaterialRunboxEnvResetDialog(_ref) {
27
+ var open = _ref.open,
28
+ _ref$isResetting = _ref.isResetting,
29
+ isResetting = _ref$isResetting === void 0 ? false : _ref$isResetting,
30
+ onClose = _ref.onClose,
31
+ onConfirm = _ref.onConfirm;
32
+ var intl$1 = intl.useRawEliceIntl();
33
+ var _React$useState = React__default.default.useState(false),
34
+ _React$useState2 = _rollupPluginBabelHelpers.slicedToArray(_React$useState, 2),
35
+ isAcknowledged = _React$useState2[0],
36
+ setAcknowledged = _React$useState2[1];
37
+ React__default.default.useEffect(function () {
38
+ if (!open) {
39
+ setAcknowledged(false);
40
+ }
41
+ }, [open]);
42
+ //
43
+ //
44
+ //
45
+ return jsxRuntime.jsxs(material.Dialog, {
46
+ fullWidth: true,
47
+ open: open,
48
+ maxWidth: "xs",
49
+ onClose: onClose,
50
+ children: [jsxRuntime.jsx(material.DialogTitle, {
51
+ children: jsxRuntime.jsxs(material.Stack, {
52
+ direction: "row",
53
+ alignItems: "center",
54
+ gap: "0.5rem",
55
+ children: [jsxRuntime.jsx(muiElements.EliceIcon, {
56
+ icon: proSolidSvgIcons.faCircleExclamation,
57
+ color: "error"
58
+ }), intl$1.formatMessage({
59
+ id: 'runbox.disk.env_reset.dialog.title'
60
+ })]
61
+ })
62
+ }), jsxRuntime.jsxs(material.DialogContent, {
63
+ children: [jsxRuntime.jsx(material.DialogContentText, {
64
+ whiteSpace: "pre-line",
65
+ children: intl$1.formatMessage({
66
+ id: 'runbox.disk.env_reset.dialog.description'
67
+ })
68
+ }), jsxRuntime.jsx(material.FormControlLabel, {
69
+ sx: {
70
+ marginTop: '1rem'
71
+ },
72
+ control: jsxRuntime.jsx(material.Checkbox, {
73
+ checked: isAcknowledged,
74
+ onChange: function onChange(e) {
75
+ return setAcknowledged(e.target.checked);
76
+ }
77
+ }),
78
+ label: intl$1.formatMessage({
79
+ id: 'runbox.disk.env_reset.dialog.acknowledge'
80
+ })
81
+ })]
82
+ }), jsxRuntime.jsxs(material.DialogActions, {
83
+ children: [jsxRuntime.jsx(material.Button, {
84
+ color: "inherit",
85
+ disabled: isResetting,
86
+ onClick: onClose,
87
+ children: intl$1.formatMessage({
88
+ id: 'runbox.disk.env_reset.dialog.actions.cancel'
89
+ })
90
+ }), jsxRuntime.jsx(lab.LoadingButton, {
91
+ color: "error",
92
+ loading: isResetting,
93
+ disabled: !isAcknowledged,
94
+ onClick: onConfirm,
95
+ children: intl$1.formatMessage({
96
+ id: 'runbox.disk.env_reset.dialog.actions.confirm'
97
+ })
98
+ })]
99
+ })]
100
+ });
101
+ };
102
+
103
+ exports.default = MaterialRunboxEnvResetDialog;
@@ -1 +1,8 @@
1
- export { default as MaterialRunboxDiskAlmostFullSnackbar } from './MaterialRunboxDiskAlmostFullSnackbar';
1
+ export { default as MaterialRunboxDiskUsageAlert } from './MaterialRunboxDiskUsageAlert';
2
+ export { default as MaterialRunboxDiskUsageDialog } from './MaterialRunboxDiskUsageDialog';
3
+ export { default as MaterialRunboxEnvResetButton } from './MaterialRunboxEnvResetButton';
4
+ export { default as MaterialRunboxEnvResetDialog } from './MaterialRunboxEnvResetDialog';
5
+ export type { MaterialRunboxDiskUsageAlertProps } from './MaterialRunboxDiskUsageAlert';
6
+ export type { MaterialRunboxDiskUsageDialogProps } from './MaterialRunboxDiskUsageDialog';
7
+ export type { MaterialRunboxEnvResetButtonProps } from './MaterialRunboxEnvResetButton';
8
+ export type { MaterialRunboxEnvResetDialogProps } from './MaterialRunboxEnvResetDialog';
@@ -1,7 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var MaterialRunboxDiskAlmostFullSnackbar = require('./MaterialRunboxDiskAlmostFullSnackbar.js');
3
+ var MaterialRunboxDiskUsageAlert = require('./MaterialRunboxDiskUsageAlert.js');
4
+ var MaterialRunboxDiskUsageDialog = require('./MaterialRunboxDiskUsageDialog.js');
5
+ var MaterialRunboxEnvResetButton = require('./MaterialRunboxEnvResetButton.js');
6
+ var MaterialRunboxEnvResetDialog = require('./MaterialRunboxEnvResetDialog.js');
4
7
 
5
8
 
6
9
 
7
- exports.MaterialRunboxDiskAlmostFullSnackbar = MaterialRunboxDiskAlmostFullSnackbar.default;
10
+ exports.MaterialRunboxDiskUsageAlert = MaterialRunboxDiskUsageAlert.default;
11
+ exports.MaterialRunboxDiskUsageDialog = MaterialRunboxDiskUsageDialog.default;
12
+ exports.MaterialRunboxEnvResetButton = MaterialRunboxEnvResetButton.default;
13
+ exports.MaterialRunboxEnvResetDialog = MaterialRunboxEnvResetDialog.default;
@@ -4,3 +4,5 @@ export * from './useRunboxTimer';
4
4
  export * from './useInfiniteRunboxRunboxIdGrade';
5
5
  export * from './useMaterialRunboxRunboxIdStarterGet';
6
6
  export * from './useRunboxNetworkStatus';
7
+ export * from './useRunboxDiskUsage';
8
+ export * from './useRunboxEnvReset';
@@ -6,6 +6,8 @@ var useRunboxTimer = require('./useRunboxTimer.js');
6
6
  var useInfiniteRunboxRunboxIdGrade = require('./useInfiniteRunboxRunboxIdGrade.js');
7
7
  var useMaterialRunboxRunboxIdStarterGet = require('./useMaterialRunboxRunboxIdStarterGet.js');
8
8
  var useRunboxNetworkStatus = require('./useRunboxNetworkStatus.js');
9
+ var useRunboxDiskUsage = require('./useRunboxDiskUsage.js');
10
+ var useRunboxEnvReset = require('./useRunboxEnvReset.js');
9
11
 
10
12
 
11
13
 
@@ -25,3 +27,7 @@ Object.defineProperty(exports, "RunboxNetworkStatus", {
25
27
  get: function () { return useRunboxNetworkStatus.RunboxNetworkStatus; }
26
28
  });
27
29
  exports.useRunboxNetworkStatus = useRunboxNetworkStatus.useRunboxNetworkStatus;
30
+ exports.DISK_USAGE_ERROR_RATIO = useRunboxDiskUsage.DISK_USAGE_ERROR_RATIO;
31
+ exports.DISK_USAGE_WARNING_RATIO = useRunboxDiskUsage.DISK_USAGE_WARNING_RATIO;
32
+ exports.useRunboxDiskUsage = useRunboxDiskUsage.useRunboxDiskUsage;
33
+ exports.useRunboxEnvReset = useRunboxEnvReset.useRunboxEnvReset;
@@ -0,0 +1,16 @@
1
+ /** Matches MUI's `Alert` severity, which is where this value ends up. */
2
+ export type RunboxDiskUsageSeverity = 'warning' | 'error';
3
+ interface UseRunboxDiskUsageReturn {
4
+ /** `null` below the first threshold, or while the container reports no stats. */
5
+ severity: RunboxDiskUsageSeverity | null;
6
+ diskCurrent: number;
7
+ diskTotal: number;
8
+ }
9
+ export declare const DISK_USAGE_WARNING_RATIO = 0.8;
10
+ export declare const DISK_USAGE_ERROR_RATIO = 0.9;
11
+ /**
12
+ * Disk usage against the 80% / 90% thresholds. The numbers come from the
13
+ * container stats stream, so they are only available while the runtime is up.
14
+ */
15
+ export declare const useRunboxDiskUsage: () => UseRunboxDiskUsageReturn;
16
+ export {};
@@ -0,0 +1,50 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var runboxClient = require('@elice/runbox-client');
5
+
6
+ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
7
+
8
+ var React__default = /*#__PURE__*/_interopDefaultCompat(React);
9
+
10
+ //
11
+ //
12
+ //
13
+ var DISK_USAGE_WARNING_RATIO = 0.8;
14
+ var DISK_USAGE_ERROR_RATIO = 0.9;
15
+ //
16
+ //
17
+ //
18
+ /**
19
+ * Disk usage against the 80% / 90% thresholds. The numbers come from the
20
+ * container stats stream, so they are only available while the runtime is up.
21
+ */
22
+ var useRunboxDiskUsage = function useRunboxDiskUsage() {
23
+ var _a, _b;
24
+ var contStats = runboxClient.useEliceRunboxContainerStats();
25
+ var stats = contStats ? contStats[contStats.length - 1] : null;
26
+ var diskCurrent = (_a = stats === null || stats === void 0 ? void 0 : stats.diskCurrent) !== null && _a !== void 0 ? _a : 0;
27
+ var diskTotal = (_b = stats === null || stats === void 0 ? void 0 : stats.diskTotal) !== null && _b !== void 0 ? _b : 0;
28
+ var severity = React__default.default.useMemo(function () {
29
+ if (!stats || diskTotal <= 0) {
30
+ return null;
31
+ }
32
+ var ratio = diskCurrent / diskTotal;
33
+ if (ratio >= DISK_USAGE_ERROR_RATIO) {
34
+ return 'error';
35
+ }
36
+ if (ratio >= DISK_USAGE_WARNING_RATIO) {
37
+ return 'warning';
38
+ }
39
+ return null;
40
+ }, [stats, diskCurrent, diskTotal]);
41
+ return {
42
+ severity: severity,
43
+ diskCurrent: diskCurrent,
44
+ diskTotal: diskTotal
45
+ };
46
+ };
47
+
48
+ exports.DISK_USAGE_ERROR_RATIO = DISK_USAGE_ERROR_RATIO;
49
+ exports.DISK_USAGE_WARNING_RATIO = DISK_USAGE_WARNING_RATIO;
50
+ exports.useRunboxDiskUsage = useRunboxDiskUsage;