@elice/material-assignment 1.231227.0 → 1.231228.0
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/cjs/components/material-assignment/MaterialAssignment.js +13 -19
- package/cjs/components/material-assignment/MaterialAssignmentContent.js +99 -130
- package/cjs/components/material-assignment/MaterialAssignmentUploadModal.js +96 -129
- package/cjs/components/material-assignment/locales.js +2 -4
- package/cjs/components/material-assignment-admin/MaterialAssignmentAdmin.js +21 -26
- package/cjs/components/material-assignment-admin/MaterialAssignmentAdmin.styled.js +9 -21
- package/cjs/components/material-assignment-admin/MaterialAssignmentAdminContent.js +320 -447
- package/cjs/components/material-assignment-admin/MaterialAssignmentAdminContentTa.js +152 -211
- package/cjs/components/shared/MaterialAssignmentContainer.js +10 -14
- package/cjs/index.js +2 -4
- package/es/components/material-assignment/MaterialAssignment.js +8 -8
- package/es/components/material-assignment/MaterialAssignmentContent.js +65 -92
- package/es/components/material-assignment/MaterialAssignmentUploadModal.js +83 -111
- package/es/components/material-assignment/locales.js +2 -2
- package/es/components/material-assignment-admin/MaterialAssignmentAdmin.js +13 -13
- package/es/components/material-assignment-admin/MaterialAssignmentAdmin.styled.js +9 -15
- package/es/components/material-assignment-admin/MaterialAssignmentAdminContent.js +231 -353
- package/es/components/material-assignment-admin/MaterialAssignmentAdminContentTa.js +94 -148
- package/es/components/shared/MaterialAssignmentContainer.js +7 -6
- package/package.json +7 -7
- package/cjs/_virtual/_rollupPluginBabelHelpers.js +0 -388
- package/es/_virtual/_rollupPluginBabelHelpers.js +0 -377
|
@@ -7,28 +7,24 @@ var blocks = require('@elice/blocks');
|
|
|
7
7
|
var designTokens = require('@elice/design-tokens');
|
|
8
8
|
var styled = require('styled-components');
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
13
|
-
var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled);
|
|
14
|
-
|
|
15
|
-
var StyledMaterialAssignmentContainer = styled__default["default"].div.withConfig({
|
|
10
|
+
const StyledMaterialAssignmentContainer = styled.div.withConfig({
|
|
16
11
|
componentId: "sc-sdhlog-0"
|
|
17
12
|
})(["height:100%;width:100%;max-width:55rem;border-radius:0.5rem;overflow:hidden;"]);
|
|
18
|
-
|
|
13
|
+
const StyledMaterialAssignmentContainerHeader = styled.div.withConfig({
|
|
19
14
|
componentId: "sc-sdhlog-1"
|
|
20
15
|
})(["padding:1rem 1.5rem;height:3.5rem;display:flex;align-items:center;background-color:", ";"], designTokens.base.color.navy7);
|
|
21
|
-
|
|
16
|
+
const StyledMaterialAssignmentContainerContent = styled.div.withConfig({
|
|
22
17
|
componentId: "sc-sdhlog-2"
|
|
23
18
|
})(["padding:1.5rem;overflow-y:auto;height:calc(100% - 3.5rem);background-color:", ";"], designTokens.base.color.navy8);
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
19
|
+
const MaterialAssignmentContainer = ({
|
|
20
|
+
title,
|
|
21
|
+
children
|
|
22
|
+
}) => {
|
|
23
|
+
return React.createElement(StyledMaterialAssignmentContainer, null, React.createElement(StyledMaterialAssignmentContainerHeader, null, React.createElement(blocks.Text, {
|
|
28
24
|
bold: true,
|
|
29
25
|
role: "navy0",
|
|
30
26
|
size: "small"
|
|
31
|
-
}, title)),
|
|
27
|
+
}, title)), React.createElement(StyledMaterialAssignmentContainerContent, null, children));
|
|
32
28
|
};
|
|
33
29
|
|
|
34
|
-
exports
|
|
30
|
+
exports.default = MaterialAssignmentContainer;
|
package/cjs/index.js
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
3
|
var MaterialAssignmentAdmin = require('./components/material-assignment-admin/MaterialAssignmentAdmin.js');
|
|
6
4
|
var MaterialAssignment = require('./components/material-assignment/MaterialAssignment.js');
|
|
7
5
|
|
|
8
6
|
|
|
9
7
|
|
|
10
|
-
exports.MaterialAssignmentAdmin = MaterialAssignmentAdmin
|
|
11
|
-
exports.MaterialAssignment = MaterialAssignment
|
|
8
|
+
exports.MaterialAssignmentAdmin = MaterialAssignmentAdmin.default;
|
|
9
|
+
exports.MaterialAssignment = MaterialAssignment.default;
|
|
@@ -7,16 +7,16 @@ import * as locales from './locales.js';
|
|
|
7
7
|
import { en } from './locales.js';
|
|
8
8
|
import MaterialAssignmentContent from './MaterialAssignmentContent.js';
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
const StyledMaterialAssignmentWrapper = styled.div.withConfig({
|
|
11
11
|
componentId: "sc-1kcyh7u-0"
|
|
12
12
|
})(["display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;height:100%;padding:3.625rem;background-color:", ";"], base.color.navy9);
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
13
|
+
const MaterialAssignment = ({
|
|
14
|
+
className,
|
|
15
|
+
materialAssignmentId,
|
|
16
|
+
userId,
|
|
17
|
+
locale = 'en'
|
|
18
|
+
}) => {
|
|
19
|
+
const prefixCls = 'em-material-assignment';
|
|
20
20
|
return React.createElement(StyledMaterialAssignmentWrapper, {
|
|
21
21
|
className: classnames(prefixCls, className)
|
|
22
22
|
}, React.createElement(IntlProvider, {
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { slicedToArray as _slicedToArray } from '../../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
1
|
import React from 'react';
|
|
3
2
|
import { useIntl, FormattedDate } from 'react-intl';
|
|
4
3
|
import { config, getOrgMaterialAssignmentGet, getOrgMaterialAssignmentGradeList, getOrgMaterialAssignmentGradeResultGet, getOrgMaterialAssignmentSubmissionGet } from '@elice/api-client';
|
|
@@ -8,62 +7,41 @@ import { enums } from '@elice/types';
|
|
|
8
7
|
import MaterialAssignmentContainer from '../shared/MaterialAssignmentContainer.js';
|
|
9
8
|
import MaterialAssignmentUploadModal from './MaterialAssignmentUploadModal.js';
|
|
10
9
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
assignmentGradeResultGetStatus = _React$useState4[0],
|
|
35
|
-
setAssignmentGradeResultGetStatus = _React$useState4[1];
|
|
36
|
-
var _React$useState5 = React.useState('idle'),
|
|
37
|
-
_React$useState6 = _slicedToArray(_React$useState5, 2),
|
|
38
|
-
assignmentSubmissionGetStatus = _React$useState6[0],
|
|
39
|
-
setAssignmentSubmissionGetStatus = _React$useState6[1];
|
|
40
|
-
var _React$useState7 = React.useState(),
|
|
41
|
-
_React$useState8 = _slicedToArray(_React$useState7, 2),
|
|
42
|
-
materialAssignmentSubmission = _React$useState8[0],
|
|
43
|
-
setMaterialAssignmentSubmission = _React$useState8[1];
|
|
44
|
-
var _React$useState9 = React.useState(),
|
|
45
|
-
_React$useState10 = _slicedToArray(_React$useState9, 2),
|
|
46
|
-
materialAssignmentGradeResult = _React$useState10[0],
|
|
47
|
-
setMaterialAssignmentGradeResult = _React$useState10[1];
|
|
48
|
-
var _React$useState11 = React.useState(),
|
|
49
|
-
_React$useState12 = _slicedToArray(_React$useState11, 2),
|
|
50
|
-
materialAssignmentGradeList = _React$useState12[0],
|
|
51
|
-
setMaterialAssignmentGradeList = _React$useState12[1];
|
|
10
|
+
const GRADE_LIST_COUNT = 20;
|
|
11
|
+
const MaterialAssignmentContent = ({
|
|
12
|
+
materialAssignmentId,
|
|
13
|
+
userId
|
|
14
|
+
}) => {
|
|
15
|
+
const intl = useIntl();
|
|
16
|
+
const isReady = useMaterialConfigApiClientUpdate(config.init);
|
|
17
|
+
const {
|
|
18
|
+
materialAssignment,
|
|
19
|
+
materialLecturePage,
|
|
20
|
+
status: assignmentGetStatus,
|
|
21
|
+
refetch: doGetOrgMaterialAssignmentGet
|
|
22
|
+
} = useMaterialFetchRaw(enums.LectureMaterialType.Assignment, React.useCallback(signal => getOrgMaterialAssignmentGet({
|
|
23
|
+
materialAssignmentId
|
|
24
|
+
}, {
|
|
25
|
+
signal
|
|
26
|
+
}), [materialAssignmentId]), isReady);
|
|
27
|
+
const [assignmentGradeListGetStatus, setAssignmentGradeListGetStatus] = React.useState('idle');
|
|
28
|
+
const [assignmentGradeResultGetStatus, setAssignmentGradeResultGetStatus] = React.useState('idle');
|
|
29
|
+
const [assignmentSubmissionGetStatus, setAssignmentSubmissionGetStatus] = React.useState('idle');
|
|
30
|
+
const [materialAssignmentSubmission, setMaterialAssignmentSubmission] = React.useState();
|
|
31
|
+
const [materialAssignmentGradeResult, setMaterialAssignmentGradeResult] = React.useState();
|
|
32
|
+
const [materialAssignmentGradeList, setMaterialAssignmentGradeList] = React.useState();
|
|
52
33
|
/** Is confirm modal visible? */
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
var isAssignmentSubmitted = Boolean(materialAssignment === null || materialAssignment === void 0 ? void 0 : materialAssignment.lastAssignmentSubmissionId);
|
|
58
|
-
var isAssignmentClosed = materialAssignment && Boolean(materialAssignment.closeDatetime < Date.now());
|
|
59
|
-
var isAssignmentResultVisible = Boolean(materialAssignment === null || materialAssignment === void 0 ? void 0 : materialAssignment.scoreFinalizedDatetime);
|
|
34
|
+
const [showAssignmentSubmitModal, setShowAssignmentSubmitModal] = React.useState(false);
|
|
35
|
+
const isAssignmentSubmitted = Boolean(materialAssignment === null || materialAssignment === void 0 ? void 0 : materialAssignment.lastAssignmentSubmissionId);
|
|
36
|
+
const isAssignmentClosed = materialAssignment && Boolean(materialAssignment.closeDatetime < Date.now());
|
|
37
|
+
const isAssignmentResultVisible = Boolean(materialAssignment === null || materialAssignment === void 0 ? void 0 : materialAssignment.scoreFinalizedDatetime);
|
|
60
38
|
//
|
|
61
39
|
//
|
|
62
40
|
//
|
|
63
41
|
/**
|
|
64
42
|
* When Grade_result exist, a comment list is called.
|
|
65
43
|
*/
|
|
66
|
-
React.useEffect(
|
|
44
|
+
React.useEffect(() => {
|
|
67
45
|
if (!isReady) {
|
|
68
46
|
return;
|
|
69
47
|
}
|
|
@@ -74,16 +52,17 @@ var MaterialAssignmentContent = function MaterialAssignmentContent(_ref) {
|
|
|
74
52
|
getOrgMaterialAssignmentGradeList({
|
|
75
53
|
offset: 0,
|
|
76
54
|
count: GRADE_LIST_COUNT,
|
|
77
|
-
materialAssignmentId
|
|
55
|
+
materialAssignmentId,
|
|
78
56
|
filterConditions: {
|
|
79
|
-
userId
|
|
57
|
+
userId
|
|
80
58
|
}
|
|
81
|
-
}).then(
|
|
82
|
-
|
|
83
|
-
|
|
59
|
+
}).then(({
|
|
60
|
+
materialAssignmentGrades,
|
|
61
|
+
materialAssignmentGradeCount
|
|
62
|
+
}) => {
|
|
84
63
|
setAssignmentGradeListGetStatus('resolved');
|
|
85
64
|
setMaterialAssignmentGradeList(materialAssignmentGrades);
|
|
86
|
-
}).catch(
|
|
65
|
+
}).catch(error => {
|
|
87
66
|
console.error(error);
|
|
88
67
|
setAssignmentGradeListGetStatus('rejected');
|
|
89
68
|
});
|
|
@@ -91,7 +70,7 @@ var MaterialAssignmentContent = function MaterialAssignmentContent(_ref) {
|
|
|
91
70
|
/**
|
|
92
71
|
* When Grade_result exist, a score is called.
|
|
93
72
|
*/
|
|
94
|
-
React.useEffect(
|
|
73
|
+
React.useEffect(() => {
|
|
95
74
|
if (!isReady) {
|
|
96
75
|
return;
|
|
97
76
|
}
|
|
@@ -100,13 +79,14 @@ var MaterialAssignmentContent = function MaterialAssignmentContent(_ref) {
|
|
|
100
79
|
}
|
|
101
80
|
setAssignmentGradeResultGetStatus('pending');
|
|
102
81
|
getOrgMaterialAssignmentGradeResultGet({
|
|
103
|
-
materialAssignmentId
|
|
104
|
-
userId
|
|
105
|
-
}).then(
|
|
106
|
-
|
|
82
|
+
materialAssignmentId,
|
|
83
|
+
userId
|
|
84
|
+
}).then(({
|
|
85
|
+
materialAssignmentGradeResult
|
|
86
|
+
}) => {
|
|
107
87
|
setAssignmentGradeResultGetStatus('resolved');
|
|
108
88
|
setMaterialAssignmentGradeResult(materialAssignmentGradeResult);
|
|
109
|
-
}).catch(
|
|
89
|
+
}).catch(error => {
|
|
110
90
|
console.error(error);
|
|
111
91
|
setAssignmentGradeResultGetStatus('rejected');
|
|
112
92
|
});
|
|
@@ -114,7 +94,7 @@ var MaterialAssignmentContent = function MaterialAssignmentContent(_ref) {
|
|
|
114
94
|
/**
|
|
115
95
|
* Get information on the assignment submitted
|
|
116
96
|
*/
|
|
117
|
-
React.useEffect(
|
|
97
|
+
React.useEffect(() => {
|
|
118
98
|
var _a;
|
|
119
99
|
if (!isReady) {
|
|
120
100
|
return;
|
|
@@ -127,11 +107,12 @@ var MaterialAssignmentContent = function MaterialAssignmentContent(_ref) {
|
|
|
127
107
|
setAssignmentSubmissionGetStatus('pending');
|
|
128
108
|
getOrgMaterialAssignmentSubmissionGet({
|
|
129
109
|
materialAssignmentSubmissionId: (_a = materialAssignment === null || materialAssignment === void 0 ? void 0 : materialAssignment.lastAssignmentSubmissionId) !== null && _a !== void 0 ? _a : 0
|
|
130
|
-
}).then(
|
|
131
|
-
|
|
110
|
+
}).then(({
|
|
111
|
+
materialAssignmentSubmission
|
|
112
|
+
}) => {
|
|
132
113
|
setAssignmentSubmissionGetStatus('resolved');
|
|
133
114
|
setMaterialAssignmentSubmission(materialAssignmentSubmission);
|
|
134
|
-
}).catch(
|
|
115
|
+
}).catch(error => {
|
|
135
116
|
console.error(error);
|
|
136
117
|
setAssignmentSubmissionGetStatus('rejected');
|
|
137
118
|
setMaterialAssignmentSubmission(undefined);
|
|
@@ -150,10 +131,10 @@ var MaterialAssignmentContent = function MaterialAssignmentContent(_ref) {
|
|
|
150
131
|
/**
|
|
151
132
|
*
|
|
152
133
|
*/
|
|
153
|
-
|
|
134
|
+
const renderAssignmentInfo = () => {
|
|
154
135
|
var _a;
|
|
155
|
-
|
|
156
|
-
|
|
136
|
+
const assignmentFilename = decodeURIComponent((materialAssignmentSubmission === null || materialAssignmentSubmission === void 0 ? void 0 : materialAssignmentSubmission.assignmentFileUrl) && new URL(materialAssignmentSubmission.assignmentFileUrl).pathname.split('/').pop() || '');
|
|
137
|
+
const renderAssignmentStatus = () => {
|
|
157
138
|
if (!isAssignmentSubmitted && isAssignmentClosed) {
|
|
158
139
|
return React.createElement(Text, {
|
|
159
140
|
bold: true,
|
|
@@ -189,7 +170,7 @@ var MaterialAssignmentContent = function MaterialAssignmentContent(_ref) {
|
|
|
189
170
|
id: 'materialAssignment.status.noSubmitted'
|
|
190
171
|
}));
|
|
191
172
|
};
|
|
192
|
-
|
|
173
|
+
const renderAssignmentScore = () => {
|
|
193
174
|
var _a;
|
|
194
175
|
return React.createElement(React.Fragment, null, React.createElement(Text, {
|
|
195
176
|
bold: true,
|
|
@@ -203,7 +184,7 @@ var MaterialAssignmentContent = function MaterialAssignmentContent(_ref) {
|
|
|
203
184
|
width: 0.25
|
|
204
185
|
}));
|
|
205
186
|
};
|
|
206
|
-
|
|
187
|
+
const renderAssignmentAttachment = () => {
|
|
207
188
|
if (materialAssignmentSubmission === null || materialAssignmentSubmission === void 0 ? void 0 : materialAssignmentSubmission.assignmentFileUrl) {
|
|
208
189
|
return React.createElement("a", {
|
|
209
190
|
href: materialAssignmentSubmission.assignmentFileUrl,
|
|
@@ -259,9 +240,7 @@ var MaterialAssignmentContent = function MaterialAssignmentContent(_ref) {
|
|
|
259
240
|
size: "tiny",
|
|
260
241
|
role: "lightpurple",
|
|
261
242
|
disabled: [isAssignmentResultVisible, !materialAssignment.isResubmitEnabled && isAssignmentSubmitted, isAssignmentClosed].some(Boolean),
|
|
262
|
-
onClick:
|
|
263
|
-
return setShowAssignmentSubmitModal(true);
|
|
264
|
-
}
|
|
243
|
+
onClick: () => setShowAssignmentSubmitModal(true)
|
|
265
244
|
}, intl.formatMessage({
|
|
266
245
|
id: 'materialAssignment.button.upload'
|
|
267
246
|
}))))), React.createElement("tr", null, React.createElement("td", null, intl.formatMessage({
|
|
@@ -278,9 +257,9 @@ var MaterialAssignmentContent = function MaterialAssignmentContent(_ref) {
|
|
|
278
257
|
/**
|
|
279
258
|
*
|
|
280
259
|
*/
|
|
281
|
-
|
|
260
|
+
const renderAssignmentFeedback = () => {
|
|
282
261
|
var _a;
|
|
283
|
-
|
|
262
|
+
const tableColumns = [{
|
|
284
263
|
Header: intl.formatMessage({
|
|
285
264
|
id: 'materialAssignment.table.header.index'
|
|
286
265
|
}),
|
|
@@ -292,18 +271,14 @@ var MaterialAssignmentContent = function MaterialAssignmentContent(_ref) {
|
|
|
292
271
|
}),
|
|
293
272
|
accessor: 'feedback'
|
|
294
273
|
}];
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
role: "navy1"
|
|
304
|
-
}, grade.comment)
|
|
305
|
-
};
|
|
306
|
-
})) !== null && _a !== void 0 ? _a : [];
|
|
274
|
+
const tableData = (_a = materialAssignmentGradeList === null || materialAssignmentGradeList === void 0 ? void 0 : materialAssignmentGradeList.filter(grade => grade.comment.length).map((grade, index) => ({
|
|
275
|
+
index: index + 1,
|
|
276
|
+
feedback: React.createElement(Text, {
|
|
277
|
+
preWrap: true,
|
|
278
|
+
size: "small",
|
|
279
|
+
role: "navy1"
|
|
280
|
+
}, grade.comment)
|
|
281
|
+
}))) !== null && _a !== void 0 ? _a : [];
|
|
307
282
|
return React.createElement(TableNext, {
|
|
308
283
|
dark: true,
|
|
309
284
|
columns: tableColumns,
|
|
@@ -316,15 +291,13 @@ var MaterialAssignmentContent = function MaterialAssignmentContent(_ref) {
|
|
|
316
291
|
/**
|
|
317
292
|
*
|
|
318
293
|
*/
|
|
319
|
-
|
|
294
|
+
const renderAssignmentUploadModal = () => {
|
|
320
295
|
if (!showAssignmentSubmitModal) {
|
|
321
296
|
return null;
|
|
322
297
|
}
|
|
323
298
|
return React.createElement(MaterialAssignmentUploadModal, {
|
|
324
299
|
materialAssignment: materialAssignment,
|
|
325
|
-
onClose:
|
|
326
|
-
return setShowAssignmentSubmitModal(false);
|
|
327
|
-
},
|
|
300
|
+
onClose: () => setShowAssignmentSubmitModal(false),
|
|
328
301
|
onSubmitCallback: doGetOrgMaterialAssignmentGet
|
|
329
302
|
});
|
|
330
303
|
};
|
|
@@ -1,99 +1,73 @@
|
|
|
1
|
-
import { slicedToArray as _slicedToArray, asyncToGenerator as _asyncToGenerator, regeneratorRuntime as _regeneratorRuntime } from '../../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
1
|
import React from 'react';
|
|
3
2
|
import { useForm, Controller } from 'react-hook-form';
|
|
4
3
|
import { useIntl } from 'react-intl';
|
|
5
4
|
import { postOrgMaterialAssignmentSubmissionAdd } from '@elice/api-client';
|
|
6
|
-
import { Files, Modal, Alert, Vspace, Radio, RadioButton, Input, Checkbox, Text
|
|
5
|
+
import { Files, Notification, Modal, Alert, Vspace, Radio, RadioButton, Input, Checkbox, Text } from '@elice/blocks';
|
|
7
6
|
import { base } from '@elice/design-tokens';
|
|
8
7
|
import { validateUrl } from '@elice/utils';
|
|
9
8
|
import styled from 'styled-components';
|
|
10
9
|
|
|
11
|
-
|
|
10
|
+
const StyledAssignmentContentFiles = styled(Files).withConfig({
|
|
12
11
|
componentId: "sc-9bizrf-0"
|
|
13
12
|
})(["width:100%;.eb-files__choose-button{border-color:", ";background-color:", ";}"], base.color.primary5, base.color.primary5);
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
13
|
+
const MaterialAssignmentUploadModal = ({
|
|
14
|
+
materialAssignment,
|
|
15
|
+
onClose,
|
|
16
|
+
onSubmitCallback
|
|
17
|
+
}) => {
|
|
18
|
+
const intl = useIntl();
|
|
19
|
+
const abortCtrl = React.useRef(new AbortController());
|
|
20
20
|
/** Select submission method */
|
|
21
|
-
|
|
22
|
-
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
23
|
-
assignmentMode = _React$useState2[0],
|
|
24
|
-
setAssignmentMode = _React$useState2[1];
|
|
21
|
+
const [assignmentMode, setAssignmentMode] = React.useState('attachment');
|
|
25
22
|
/** Check "Once you submit it, you cannot submit it again." */
|
|
26
|
-
|
|
27
|
-
_React$useState4 = _slicedToArray(_React$useState3, 2),
|
|
28
|
-
isAgreedSubmit = _React$useState4[0],
|
|
29
|
-
setAgreedSubmit = _React$useState4[1];
|
|
23
|
+
const [isAgreedSubmit, setAgreedSubmit] = React.useState(false);
|
|
30
24
|
/** Check if the submission time is past */
|
|
31
|
-
|
|
25
|
+
const isAssignmentClosed = Boolean(materialAssignment.closeDatetime < Date.now());
|
|
32
26
|
/** Check if it is possible to resubmit */
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
27
|
+
const isAssignmentResubmitEnabled = Boolean(materialAssignment.isResubmitEnabled);
|
|
28
|
+
const {
|
|
29
|
+
control,
|
|
30
|
+
formState,
|
|
31
|
+
handleSubmit,
|
|
32
|
+
reset
|
|
33
|
+
} = useForm({
|
|
34
|
+
mode: 'onChange'
|
|
35
|
+
});
|
|
41
36
|
/**
|
|
42
37
|
* Submit assignment.
|
|
43
38
|
*/
|
|
44
|
-
|
|
45
|
-
var
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
if (!(_context.t0.name === 'AbortError')) {
|
|
71
|
-
_context.next = 12;
|
|
72
|
-
break;
|
|
73
|
-
}
|
|
74
|
-
return _context.abrupt("return", Notification.error(intl.formatMessage({
|
|
75
|
-
id: 'materialAssignment.notification.submit.cancel'
|
|
76
|
-
})));
|
|
77
|
-
case 12:
|
|
78
|
-
Notification.error(intl.formatMessage({
|
|
79
|
-
id: 'materialAssignment.notification.submit.failure'
|
|
80
|
-
}));
|
|
81
|
-
case 13:
|
|
82
|
-
case "end":
|
|
83
|
-
return _context.stop();
|
|
84
|
-
}
|
|
85
|
-
}, _callee, null, [[0, 8]]);
|
|
86
|
-
}));
|
|
87
|
-
return function (_x) {
|
|
88
|
-
return _ref2.apply(this, arguments);
|
|
89
|
-
};
|
|
90
|
-
}());
|
|
39
|
+
const submitAssignment = handleSubmit(async data => {
|
|
40
|
+
var _a;
|
|
41
|
+
try {
|
|
42
|
+
await postOrgMaterialAssignmentSubmissionAdd(Object.assign(Object.assign({}, data), {
|
|
43
|
+
materialAssignmentId: (_a = materialAssignment === null || materialAssignment === void 0 ? void 0 : materialAssignment.id) !== null && _a !== void 0 ? _a : 0
|
|
44
|
+
}), {
|
|
45
|
+
signal: abortCtrl.current.signal
|
|
46
|
+
});
|
|
47
|
+
onClose();
|
|
48
|
+
Notification.success(intl.formatMessage({
|
|
49
|
+
id: 'materialAssignment.notification.submit.success'
|
|
50
|
+
}));
|
|
51
|
+
if (typeof onSubmitCallback === 'function') {
|
|
52
|
+
onSubmitCallback();
|
|
53
|
+
}
|
|
54
|
+
} catch (error) {
|
|
55
|
+
if (error.name === 'AbortError') {
|
|
56
|
+
return Notification.error(intl.formatMessage({
|
|
57
|
+
id: 'materialAssignment.notification.submit.cancel'
|
|
58
|
+
}));
|
|
59
|
+
}
|
|
60
|
+
Notification.error(intl.formatMessage({
|
|
61
|
+
id: 'materialAssignment.notification.submit.failure'
|
|
62
|
+
}));
|
|
63
|
+
}
|
|
64
|
+
});
|
|
91
65
|
//
|
|
92
66
|
//
|
|
93
67
|
//
|
|
94
|
-
React.useEffect(
|
|
95
|
-
|
|
96
|
-
return
|
|
68
|
+
React.useEffect(() => {
|
|
69
|
+
const _abortCtrl = abortCtrl.current;
|
|
70
|
+
return () => {
|
|
97
71
|
_abortCtrl.abort();
|
|
98
72
|
};
|
|
99
73
|
}, []);
|
|
@@ -126,7 +100,7 @@ var MaterialAssignmentUploadModal = function MaterialAssignmentUploadModal(_ref)
|
|
|
126
100
|
purpleWhite: true,
|
|
127
101
|
borderRound: true,
|
|
128
102
|
value: assignmentMode,
|
|
129
|
-
onChange:
|
|
103
|
+
onChange: value => {
|
|
130
104
|
reset();
|
|
131
105
|
setAgreedSubmit(false);
|
|
132
106
|
setAssignmentMode(value);
|
|
@@ -147,47 +121,45 @@ var MaterialAssignmentUploadModal = function MaterialAssignmentUploadModal(_ref)
|
|
|
147
121
|
rules: {
|
|
148
122
|
required: true
|
|
149
123
|
},
|
|
150
|
-
render:
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
}
|
|
124
|
+
render: ({
|
|
125
|
+
field
|
|
126
|
+
}) => React.createElement(StyledAssignmentContentFiles, Object.assign({}, field, {
|
|
127
|
+
ref: null,
|
|
128
|
+
files: field.value ? [field.value] : undefined,
|
|
129
|
+
accept: "*",
|
|
130
|
+
maxCount: 1,
|
|
131
|
+
maxSize: 300,
|
|
132
|
+
disabled: isAssignmentClosed,
|
|
133
|
+
dropMessage: intl.formatMessage({
|
|
134
|
+
id: 'materialAssignment.attachment.dropMessage'
|
|
135
|
+
}),
|
|
136
|
+
buttonMessage: intl.formatMessage({
|
|
137
|
+
id: 'materialAssignment.attachment.button'
|
|
138
|
+
}),
|
|
139
|
+
maxSizeMessage: intl.formatMessage({
|
|
140
|
+
id: 'materialAssignment.attachment.maxSizeMessage'
|
|
141
|
+
}),
|
|
142
|
+
onChange: newFiles => {
|
|
143
|
+
if (Array.isArray(newFiles) && newFiles[0] instanceof File) {
|
|
144
|
+
field.onChange(newFiles[0]);
|
|
145
|
+
} else {
|
|
146
|
+
field.onChange(undefined);
|
|
174
147
|
}
|
|
175
|
-
}
|
|
176
|
-
}
|
|
148
|
+
}
|
|
149
|
+
}))
|
|
177
150
|
}) : React.createElement(Controller, {
|
|
178
151
|
control: control,
|
|
179
152
|
name: "assignmentUrl",
|
|
180
153
|
rules: {
|
|
181
154
|
required: true,
|
|
182
|
-
validate:
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
});
|
|
186
|
-
}
|
|
155
|
+
validate: url => validateUrl(url !== null && url !== void 0 ? url : '') ? true : intl.formatMessage({
|
|
156
|
+
id: 'materialAssignment.input.invalid'
|
|
157
|
+
})
|
|
187
158
|
},
|
|
188
|
-
render:
|
|
189
|
-
|
|
190
|
-
|
|
159
|
+
render: ({
|
|
160
|
+
field,
|
|
161
|
+
fieldState
|
|
162
|
+
}) => {
|
|
191
163
|
var _a;
|
|
192
164
|
return React.createElement(Input, Object.assign({}, field, {
|
|
193
165
|
width: "full",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
const en = {
|
|
2
2
|
'materialAssignment.button.upload': 'Upload assignment',
|
|
3
3
|
'materialAssignment.error': 'Failed to fetch assignment',
|
|
4
4
|
'materialAssignment.status.noSubmitted': 'No submitted',
|
|
@@ -36,7 +36,7 @@ var en = {
|
|
|
36
36
|
'materialAssignment.attachment.checkbox.onceSubmit': 'I have checked all the circumstances and agree to submit the assignment.',
|
|
37
37
|
'materialAssignment.input.invalid': 'The URL is not of a valid format.'
|
|
38
38
|
};
|
|
39
|
-
|
|
39
|
+
const ko = {
|
|
40
40
|
'materialAssignment.button.upload': '과제 업로드',
|
|
41
41
|
'materialAssignment.error': '과제를 불러오는데 실패했습니다.\n잠시 후 다시 시도해주세요.',
|
|
42
42
|
'materialAssignment.status.noSubmitted': '미제출',
|
|
@@ -9,20 +9,20 @@ import MaterialAssignmentAdminContent from './MaterialAssignmentAdminContent.js'
|
|
|
9
9
|
import MaterialAssignmentAdminContentTa from './MaterialAssignmentAdminContentTa.js';
|
|
10
10
|
import { StyledMaterialAssignmentAdminContainer } from './MaterialAssignmentAdmin.styled.js';
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
12
|
+
const MaterialAssignmentAdmin = forwardRef(({
|
|
13
|
+
locale = 'en',
|
|
14
|
+
className,
|
|
15
|
+
materialAssignmentId,
|
|
16
|
+
userId,
|
|
17
|
+
adminUserId,
|
|
18
|
+
courseRole,
|
|
19
|
+
updateMaterialUserBrowserResponse
|
|
20
|
+
}, ref) => {
|
|
21
|
+
const prefixCls = 'em-material-assignment-admin';
|
|
22
22
|
// TODO: initialize in custom hook or withMaterial hoc.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
const isReady = useMaterialConfigApiClientUpdate(config.init);
|
|
24
|
+
const isCourseRoleAboveTa = courseRole > enums.CourseRole.TA;
|
|
25
|
+
const renderContent = () => {
|
|
26
26
|
if (!isReady) {
|
|
27
27
|
return React.createElement(Flex, {
|
|
28
28
|
align: "center",
|