@elice/material-assignment 1.220803.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.
Files changed (48) hide show
  1. package/README.md +3 -0
  2. package/cjs/components/index.d.ts +2 -0
  3. package/cjs/components/material-assignment/MaterialAssignment.d.ts +9 -0
  4. package/cjs/components/material-assignment/MaterialAssignment.js +40 -0
  5. package/cjs/components/material-assignment/MaterialAssignmentContent.d.ts +7 -0
  6. package/cjs/components/material-assignment/MaterialAssignmentContent.js +397 -0
  7. package/cjs/components/material-assignment/MaterialAssignmentUploadModal.d.ts +9 -0
  8. package/cjs/components/material-assignment/MaterialAssignmentUploadModal.js +201 -0
  9. package/cjs/components/material-assignment/index.d.ts +2 -0
  10. package/cjs/components/material-assignment/locales.d.ts +39 -0
  11. package/cjs/components/material-assignment/locales.js +83 -0
  12. package/cjs/components/material-assignment-admin/MaterialAssignmentAdmin.d.ts +14 -0
  13. package/cjs/components/material-assignment-admin/MaterialAssignmentAdmin.js +64 -0
  14. package/cjs/components/material-assignment-admin/MaterialAssignmentAdmin.styled.d.ts +13 -0
  15. package/cjs/components/material-assignment-admin/MaterialAssignmentAdmin.styled.js +41 -0
  16. package/cjs/components/material-assignment-admin/MaterialAssignmentAdminContent.d.ts +12 -0
  17. package/cjs/components/material-assignment-admin/MaterialAssignmentAdminContent.js +815 -0
  18. package/cjs/components/material-assignment-admin/MaterialAssignmentAdminContentTa.d.ts +8 -0
  19. package/cjs/components/material-assignment-admin/MaterialAssignmentAdminContentTa.js +479 -0
  20. package/cjs/components/material-assignment-admin/index.d.ts +3 -0
  21. package/cjs/components/shared/MaterialAssignmentContainer.d.ts +6 -0
  22. package/cjs/components/shared/MaterialAssignmentContainer.js +34 -0
  23. package/cjs/index.d.ts +1 -0
  24. package/cjs/index.js +11 -0
  25. package/es/components/index.d.ts +2 -0
  26. package/es/components/material-assignment/MaterialAssignment.d.ts +9 -0
  27. package/es/components/material-assignment/MaterialAssignment.js +33 -0
  28. package/es/components/material-assignment/MaterialAssignmentContent.d.ts +7 -0
  29. package/es/components/material-assignment/MaterialAssignmentContent.js +391 -0
  30. package/es/components/material-assignment/MaterialAssignmentUploadModal.d.ts +9 -0
  31. package/es/components/material-assignment/MaterialAssignmentUploadModal.js +194 -0
  32. package/es/components/material-assignment/index.d.ts +2 -0
  33. package/es/components/material-assignment/locales.d.ts +39 -0
  34. package/es/components/material-assignment/locales.js +78 -0
  35. package/es/components/material-assignment-admin/MaterialAssignmentAdmin.d.ts +14 -0
  36. package/es/components/material-assignment-admin/MaterialAssignmentAdmin.js +57 -0
  37. package/es/components/material-assignment-admin/MaterialAssignmentAdmin.styled.d.ts +13 -0
  38. package/es/components/material-assignment-admin/MaterialAssignmentAdmin.styled.js +27 -0
  39. package/es/components/material-assignment-admin/MaterialAssignmentAdminContent.d.ts +12 -0
  40. package/es/components/material-assignment-admin/MaterialAssignmentAdminContent.js +808 -0
  41. package/es/components/material-assignment-admin/MaterialAssignmentAdminContentTa.d.ts +8 -0
  42. package/es/components/material-assignment-admin/MaterialAssignmentAdminContentTa.js +472 -0
  43. package/es/components/material-assignment-admin/index.d.ts +3 -0
  44. package/es/components/shared/MaterialAssignmentContainer.d.ts +6 -0
  45. package/es/components/shared/MaterialAssignmentContainer.js +27 -0
  46. package/es/index.d.ts +1 -0
  47. package/es/index.js +2 -0
  48. package/package.json +70 -0
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ interface MaterialAssignmentAdminContentTaProps {
3
+ materialAssignmentId: number;
4
+ userId: number;
5
+ adminUserId: number;
6
+ }
7
+ declare const MaterialAssignmentAdminContentTa: React.FC<MaterialAssignmentAdminContentTaProps>;
8
+ export default MaterialAssignmentAdminContentTa;
@@ -0,0 +1,472 @@
1
+ import React from 'react';
2
+ import { useForm, Controller } from 'react-hook-form';
3
+ import { FormattedDate } from 'react-intl';
4
+ import { config, getOrgUserGet, getOrgMaterialAssignmentGet, getOrgMaterialAssignmentSubmissionList, getOrgMaterialAssignmentGradeResultGet, getOrgMaterialAssignmentGradeList, postOrgMaterialAssignmentGradeEdit } from '@elice/api-client';
5
+ import { Notification, Flex, ProfileImage, Hspace, Text, Tooltip, Icon, Vspace, InfoTable, Button, TableNext, Modal, Label, Input, Textarea } from '@elice/blocks';
6
+ import { base } from '@elice/design-tokens';
7
+ import { eilStatusInfo } from '@elice/icons';
8
+ import { useMaterialConfigApiClientUpdate } from '@elice/material-shared-utils';
9
+ import dayjs from 'dayjs';
10
+ import MaterialAssignmentContainer from '../shared/MaterialAssignmentContainer.js';
11
+ import { StyledMaterialAssignmentAdminHeader, StyledMaterialAssignmentAdminHeaderCell, StyledMaterialAssignmentAdminGradeWrapper } from './MaterialAssignmentAdmin.styled.js';
12
+
13
+ const MaterialAssignmentAdminContentTa = ({
14
+ materialAssignmentId,
15
+ userId,
16
+ adminUserId
17
+ }) => {
18
+ var _a; // Form
19
+
20
+
21
+ const gradeEditFormMethods = useForm({
22
+ defaultValues: {
23
+ score: 0,
24
+ comment: ''
25
+ },
26
+ mode: 'onChange'
27
+ }); // State related with component
28
+
29
+ const [showGradeEditModal, setShowGradeEditModal] = React.useState(false); // State related with api
30
+
31
+ const [user, setUser] = React.useState(null);
32
+ const [materialAssignment, setMaterialAssignment] = React.useState(null);
33
+ const [userSubmission, setUserSubmission] = React.useState(null);
34
+ const [gradeResult, setGradeResult] = React.useState(null);
35
+ const [myGrade, setMyGrade] = React.useState(null);
36
+ const isAssignmentClosed = dayjs().isAfter(dayjs(materialAssignment === null || materialAssignment === void 0 ? void 0 : materialAssignment.closeDatetime));
37
+ const isScoreFinalized = Boolean(materialAssignment === null || materialAssignment === void 0 ? void 0 : materialAssignment.scoreFinalizedDatetime);
38
+ const isUserSubmitted = Boolean(userSubmission); // API Status
39
+
40
+ const isReady = useMaterialConfigApiClientUpdate(config.init);
41
+ const [submissionListGetStatus, setSubmissionListGetStatus] = React.useState('idle');
42
+ const fetchUserGet = React.useCallback(() => {
43
+ void getOrgUserGet({
44
+ userId
45
+ }).then(res => res.user).then(setUser);
46
+ }, [userId]);
47
+ const fetchMaterialAssignmentGet = React.useCallback(() => {
48
+ void getOrgMaterialAssignmentGet({
49
+ materialAssignmentId
50
+ }).then(res => res.materialAssignment).then(setMaterialAssignment);
51
+ }, [materialAssignmentId]);
52
+ const fetchSubmissionList = React.useCallback(() => {
53
+ setSubmissionListGetStatus('pending');
54
+ void getOrgMaterialAssignmentSubmissionList({
55
+ materialAssignmentId,
56
+ offset: 0,
57
+ count: 1,
58
+ filterConditions: {
59
+ isLast: true,
60
+ userIds: [userId]
61
+ }
62
+ }).then(res => res.materialAssignmentSubmissions[0]).then(submission => {
63
+ setUserSubmission(submission !== null && submission !== void 0 ? submission : null);
64
+ setSubmissionListGetStatus('resolved');
65
+ }).catch(err => {
66
+ console.error(err);
67
+ setSubmissionListGetStatus('rejected');
68
+ });
69
+ }, [materialAssignmentId, userId]);
70
+ const fetchGradeResult = React.useCallback(() => {
71
+ void getOrgMaterialAssignmentGradeResultGet({
72
+ materialAssignmentId,
73
+ userId
74
+ }).then(res => res.materialAssignmentGradeResult).then(setGradeResult).catch(() => {
75
+ setGradeResult(null);
76
+ });
77
+ }, [materialAssignmentId, userId]);
78
+ const fetchMyGrade = React.useCallback(() => {
79
+ void getOrgMaterialAssignmentGradeList({
80
+ materialAssignmentId,
81
+ offset: 0,
82
+ count: 1,
83
+ filterConditions: {
84
+ userId,
85
+ gradeUserId: adminUserId
86
+ }
87
+ }).then(res => res.materialAssignmentGrades[0]).then(grade => setMyGrade(grade !== null && grade !== void 0 ? grade : null));
88
+ }, [adminUserId, materialAssignmentId, userId]);
89
+
90
+ const handleGradeEditClick = () => {
91
+ var _a, _b;
92
+
93
+ setShowGradeEditModal(true);
94
+ gradeEditFormMethods.reset({
95
+ score: (_a = myGrade === null || myGrade === void 0 ? void 0 : myGrade.score) !== null && _a !== void 0 ? _a : 0,
96
+ comment: (_b = myGrade === null || myGrade === void 0 ? void 0 : myGrade.comment) !== null && _b !== void 0 ? _b : ''
97
+ });
98
+ };
99
+
100
+ const handleGradeEditSubmit = gradeEditFormMethods.handleSubmit(async ({
101
+ score,
102
+ comment
103
+ }) => {
104
+ try {
105
+ await postOrgMaterialAssignmentGradeEdit({
106
+ materialAssignmentGradeId: myGrade === null || myGrade === void 0 ? void 0 : myGrade.id,
107
+ materialAssignmentId,
108
+ userId,
109
+ score,
110
+ comment
111
+ });
112
+ fetchMyGrade();
113
+ Notification.success('저장되었습니다');
114
+ } catch (err) {
115
+ console.error(err);
116
+ Notification.error('오류가 발생했습니다.');
117
+ } finally {
118
+ setShowGradeEditModal(false);
119
+ }
120
+ });
121
+ React.useEffect(() => {
122
+ if (!isReady) {
123
+ return;
124
+ }
125
+
126
+ fetchUserGet();
127
+ fetchMyGrade();
128
+ fetchGradeResult();
129
+ fetchSubmissionList();
130
+ fetchMaterialAssignmentGet();
131
+ }, [isReady, fetchUserGet, fetchMyGrade, fetchGradeResult, fetchSubmissionList, fetchMaterialAssignmentGet]);
132
+
133
+ const renderHeader = () => {
134
+ var _a;
135
+
136
+ return React.createElement(StyledMaterialAssignmentAdminHeader, {
137
+ align: "center",
138
+ padding: "1rem",
139
+ width: "100%"
140
+ }, React.createElement(Flex, {
141
+ auto: true,
142
+ align: "center"
143
+ }, React.createElement(ProfileImage, {
144
+ src: (_a = user === null || user === void 0 ? void 0 : user.profileUrl) !== null && _a !== void 0 ? _a : '',
145
+ width: "2.5rem",
146
+ height: "2.5rem"
147
+ }), React.createElement(Hspace, {
148
+ width: 1
149
+ }), React.createElement(Text, {
150
+ size: "small",
151
+ role: "warmwhite"
152
+ }, user === null || user === void 0 ? void 0 : user.fullname)), React.createElement(StyledMaterialAssignmentAdminHeaderCell, null, React.createElement(Text, {
153
+ size: "tiny",
154
+ role: "gray4"
155
+ }, "\uC810\uC218"), React.createElement(Text, {
156
+ size: "small",
157
+ role: "white"
158
+ }, (gradeResult === null || gradeResult === void 0 ? void 0 : gradeResult.score) && isScoreFinalized ? `${gradeResult.score}점(공개됨)` : '--')), React.createElement(StyledMaterialAssignmentAdminHeaderCell, null, React.createElement(Text, {
159
+ size: "tiny",
160
+ role: "gray4"
161
+ }, "\uC81C\uCD9C \uC77C\uC2DC"), React.createElement(Text, {
162
+ size: "small",
163
+ role: "white"
164
+ }, userSubmission ? React.createElement(FormattedDate, {
165
+ value: userSubmission.createdDatetime,
166
+ dateStyle: "medium",
167
+ timeStyle: "short",
168
+ hour12: false
169
+ }) : '--')));
170
+ };
171
+
172
+ const renderGradeResult = () => {
173
+ return React.createElement(StyledMaterialAssignmentAdminGradeWrapper, {
174
+ wrap: true,
175
+ width: "100%",
176
+ align: "center"
177
+ }, React.createElement(Flex, {
178
+ auto: true,
179
+ align: "center"
180
+ }, React.createElement(Text, {
181
+ role: "navy1",
182
+ size: "small",
183
+ lineHeight: "1.375rem"
184
+ }, user ? `${user.fullname} 님의 점수` : null), React.createElement(Hspace, {
185
+ width: 0.25
186
+ }), React.createElement(Tooltip, {
187
+ useMaxWidth: true,
188
+ placement: "top",
189
+ title: '최종 점수는 관리자가 모든 채점자의 점수를 고려하여 반영한 후 공개됩니다.'
190
+ }, React.createElement(Icon, {
191
+ icon: eilStatusInfo,
192
+ color: base.color.navy1
193
+ })), React.createElement(Hspace, {
194
+ width: 0.75
195
+ }), React.createElement(Text, {
196
+ bold: true,
197
+ role: "white"
198
+ }, (gradeResult === null || gradeResult === void 0 ? void 0 : gradeResult.score) && isScoreFinalized ? `${gradeResult.score}점(공개됨)` : '--')));
199
+ };
200
+
201
+ const renderSubmissionInfo = () => {
202
+ const statusText = (() => {
203
+ if (submissionListGetStatus === 'pending') {
204
+ return null;
205
+ }
206
+
207
+ switch (true) {
208
+ case !isUserSubmitted && isAssignmentClosed:
209
+ return React.createElement(Text, {
210
+ bold: true,
211
+ role: "danger",
212
+ size: "small"
213
+ }, "\uC81C\uCD9C \uAE30\uD55C \uB9CC\uB8CC");
214
+
215
+ case isScoreFinalized:
216
+ return React.createElement(Text, {
217
+ bold: true,
218
+ role: "lightpurple",
219
+ size: "small"
220
+ }, "\uCC44\uC810 \uC644\uB8CC");
221
+
222
+ case isUserSubmitted:
223
+ return React.createElement(Text, {
224
+ bold: true,
225
+ role: "success",
226
+ size: "small"
227
+ }, "\uC81C\uCD9C\uB428");
228
+
229
+ case !isUserSubmitted:
230
+ return React.createElement(Text, {
231
+ bold: true,
232
+ role: "warning",
233
+ size: "small"
234
+ }, "\uBBF8\uC81C\uCD9C");
235
+ }
236
+ })();
237
+
238
+ const submissionAttachment = (() => {
239
+ if (!userSubmission) {
240
+ return '--';
241
+ }
242
+
243
+ if (userSubmission.assignmentFileUrl) {
244
+ const assignmentFilename = decodeURIComponent(userSubmission.assignmentFileUrl && new URL(userSubmission.assignmentFileUrl).pathname.split('/').pop() || '');
245
+ return React.createElement("a", {
246
+ href: userSubmission.assignmentFileUrl,
247
+ download: assignmentFilename,
248
+ target: "_blank",
249
+ rel: "noopener noreferrer"
250
+ }, React.createElement(Text, {
251
+ hoverable: true,
252
+ underline: true,
253
+ role: "white",
254
+ size: "small"
255
+ }, assignmentFilename));
256
+ }
257
+
258
+ if (userSubmission === null || userSubmission === void 0 ? void 0 : userSubmission.assignmentUrl) {
259
+ return React.createElement("a", {
260
+ href: userSubmission.assignmentUrl,
261
+ target: "_blank",
262
+ rel: "noopener noreferrer"
263
+ }, React.createElement(Text, {
264
+ hoverable: true,
265
+ underline: true,
266
+ role: "white",
267
+ size: "small"
268
+ }, userSubmission.assignmentUrl));
269
+ }
270
+ })();
271
+
272
+ return React.createElement(InfoTable, {
273
+ dark: true
274
+ }, React.createElement("tbody", null, React.createElement("tr", null, React.createElement("td", null, "\uC0C1\uD0DC"), React.createElement("td", null, statusText)), React.createElement("tr", null, React.createElement("td", null, "\uACFC\uC81C \uC81C\uCD9C \uAE30\uD55C"), React.createElement("td", null, React.createElement(FormattedDate, {
275
+ value: materialAssignment === null || materialAssignment === void 0 ? void 0 : materialAssignment.closeDatetime,
276
+ dateStyle: "medium",
277
+ timeStyle: "short",
278
+ hour12: false
279
+ }))), React.createElement("tr", null, React.createElement("td", null, "\uC81C\uCD9C \uC77C\uC2DC"), React.createElement("td", null, userSubmission ? React.createElement(FormattedDate, {
280
+ value: userSubmission.createdDatetime,
281
+ dateStyle: "medium",
282
+ timeStyle: "short",
283
+ hour12: false
284
+ }) : '--')), React.createElement("tr", null, React.createElement("td", null, "\uC5C5\uB85C\uB4DC\uB41C \uACFC\uC81C"), React.createElement("td", null, submissionAttachment))));
285
+ };
286
+
287
+ const renderGrade = () => {
288
+ const isGradeEditDisabled = !isAssignmentClosed || !isUserSubmitted || isScoreFinalized;
289
+
290
+ const tooltipTitle = (() => {
291
+ switch (true) {
292
+ case isScoreFinalized:
293
+ return '공개 이후 채점이 불가합니다.';
294
+
295
+ case !isAssignmentClosed:
296
+ return '제출 기한이 지난 이후 채점할 수 있습니다.';
297
+
298
+ case !isUserSubmitted:
299
+ return '미제출인 경우 채점할 수 없습니다.';
300
+ }
301
+ })();
302
+
303
+ return React.createElement(Flex, {
304
+ column: true,
305
+ align: "center"
306
+ }, React.createElement(Flex, {
307
+ align: "center",
308
+ width: "100%"
309
+ }, React.createElement(Flex, {
310
+ column: true,
311
+ auto: true
312
+ }, React.createElement(Text, {
313
+ block: true,
314
+ bold: true,
315
+ role: "white",
316
+ lineHeight: 1.375
317
+ }, "\uB0B4 \uCC44\uC810"), React.createElement(Text, {
318
+ block: true,
319
+ size: "tiny",
320
+ role: "navy3",
321
+ lineHeight: 1.6
322
+ }, "\uB0B4\uAC00 \uB9E4\uAE34 \uD3C9\uAC00\uC640 \uAD00\uB828\uB41C \uC815\uBCF4\uB97C \uBCFC \uC218 \uC788\uC2B5\uB2C8\uB2E4.")), React.createElement(Tooltip, {
323
+ placement: "top",
324
+ title: tooltipTitle,
325
+ visible: isGradeEditDisabled ? undefined : false
326
+ }, React.createElement("span", null, React.createElement(Button, {
327
+ size: "small",
328
+ role: "lightpurple",
329
+ disabled: isGradeEditDisabled,
330
+ onClick: handleGradeEditClick
331
+ }, Boolean(myGrade) ? '내 채점 수정' : '내 채점 시작')))), React.createElement(Vspace, {
332
+ height: 0.75
333
+ }), React.createElement(TableNext, {
334
+ dark: true,
335
+ emptyMessage: "\uC544\uC9C1 \uCC44\uC810\uC744 \uC2DC\uC791\uD558\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.",
336
+ columns: [{
337
+ Header: '채점자명',
338
+ accessor: 'fullname'
339
+ }, {
340
+ Header: '과제 점수',
341
+ accessor: 'grade'
342
+ }, {
343
+ Header: '채점 일시',
344
+ accessor: 'created',
345
+ textAlign: 'left'
346
+ }],
347
+ data: myGrade ? [{
348
+ fullname: React.createElement(Flex, {
349
+ paddingy: "0.25rem"
350
+ }, React.createElement(Text, {
351
+ noWrap: true,
352
+ role: "navy0",
353
+ size: "small"
354
+ }, myGrade.gradeUser.fullname), React.createElement(Hspace, {
355
+ width: 0.25
356
+ }), React.createElement(Text, {
357
+ ellipsis: true,
358
+ role: "navy3",
359
+ size: "small"
360
+ }, myGrade.gradeUser.email)),
361
+ grade: myGrade.score,
362
+ created: React.createElement(FormattedDate, {
363
+ value: myGrade.createdDatetime,
364
+ dateStyle: "medium",
365
+ timeStyle: "short",
366
+ hour12: false
367
+ })
368
+ }] : []
369
+ }));
370
+ };
371
+
372
+ const renderGradeEditModal = () => {
373
+ if (!showGradeEditModal) {
374
+ return null;
375
+ }
376
+
377
+ return React.createElement(Modal, {
378
+ title: Boolean(myGrade) ? '내 채점 수정' : '과제 채점',
379
+ footerButtons: [{
380
+ label: '확인',
381
+ size: 'small',
382
+ role: 'primary',
383
+ loading: gradeEditFormMethods.formState.isSubmitting,
384
+ disabled: gradeEditFormMethods.formState.isSubmitting || !gradeEditFormMethods.formState.isValid,
385
+ onClick: handleGradeEditSubmit
386
+ }, {
387
+ label: '취소',
388
+ size: 'small',
389
+ role: 'gray1',
390
+ onClick: () => {
391
+ setShowGradeEditModal(false);
392
+ }
393
+ }],
394
+ onHide: () => {
395
+ setShowGradeEditModal(false);
396
+ }
397
+ }, React.createElement(Label, {
398
+ bold: true,
399
+ block: true,
400
+ required: true
401
+ }, "\uC810\uC218"), React.createElement(Vspace, {
402
+ height: 0.5
403
+ }), React.createElement(Flex, {
404
+ align: "center"
405
+ }, React.createElement(Controller, {
406
+ control: gradeEditFormMethods.control,
407
+ name: "score",
408
+ rules: {
409
+ required: true,
410
+ min: 0,
411
+ max: 100
412
+ },
413
+ render: ({
414
+ field,
415
+ fieldState
416
+ }) => React.createElement(Input, Object.assign({}, field, {
417
+ invalid: fieldState.invalid,
418
+ size: "small",
419
+ width: "xsmall",
420
+ type: "number"
421
+ }))
422
+ }), React.createElement(Hspace, {
423
+ width: 0.5
424
+ }), React.createElement(Text, {
425
+ bold: true,
426
+ role: "gray9",
427
+ size: "small"
428
+ }, "\uC810"), React.createElement(Text, {
429
+ role: "gray6",
430
+ size: "small"
431
+ }, ' / 100점 만점')), React.createElement(Vspace, {
432
+ height: 1.25
433
+ }), React.createElement(Label, {
434
+ bold: true,
435
+ block: true
436
+ }, "\uD53C\uB4DC\uBC31"), React.createElement(Vspace, {
437
+ height: 0.5
438
+ }), React.createElement(Controller, {
439
+ control: gradeEditFormMethods.control,
440
+ name: "comment",
441
+ rules: {
442
+ maxLength: 1000
443
+ },
444
+ render: ({
445
+ field
446
+ }) => React.createElement(Textarea, {
447
+ value: field.value,
448
+ wordLimit: 1000,
449
+ rows: 8,
450
+ onChange: field.onChange
451
+ })
452
+ }));
453
+ };
454
+
455
+ return React.createElement(React.Fragment, null, renderHeader(), React.createElement(Flex, {
456
+ column: true,
457
+ auto: true,
458
+ padding: "3.625rem",
459
+ width: "100%",
460
+ height: "100%",
461
+ overflow: "hidden",
462
+ align: "center"
463
+ }, React.createElement(MaterialAssignmentContainer, {
464
+ title: (_a = materialAssignment === null || materialAssignment === void 0 ? void 0 : materialAssignment.title) !== null && _a !== void 0 ? _a : ''
465
+ }, renderGradeResult(), React.createElement(Vspace, {
466
+ height: 1.25
467
+ }), renderSubmissionInfo(), React.createElement(Vspace, {
468
+ height: 1.5
469
+ }), renderGrade())), renderGradeEditModal());
470
+ };
471
+
472
+ export { MaterialAssignmentAdminContentTa as default };
@@ -0,0 +1,3 @@
1
+ export { default as MaterialAssignmentAdmin } from './MaterialAssignmentAdmin';
2
+ export type { MaterialAssignmentAdminProps } from './MaterialAssignmentAdmin';
3
+ export type { MaterialAssignmentAdminApis } from './MaterialAssignmentAdminContent';
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ interface MaterialAssignmentContainerProps {
3
+ title: string;
4
+ }
5
+ declare const MaterialAssignmentContainer: React.FC<MaterialAssignmentContainerProps>;
6
+ export default MaterialAssignmentContainer;
@@ -0,0 +1,27 @@
1
+ import React from 'react';
2
+ import { Text } from '@elice/blocks';
3
+ import { base } from '@elice/design-tokens';
4
+ import styled from 'styled-components';
5
+
6
+ const StyledMaterialAssignmentContainer = styled.div.withConfig({
7
+ componentId: "sc-sdhlog-0"
8
+ })(["height:100%;width:100%;max-width:55rem;border-radius:0.5rem;overflow:hidden;"]);
9
+ const StyledMaterialAssignmentContainerHeader = styled.div.withConfig({
10
+ componentId: "sc-sdhlog-1"
11
+ })(["padding:1rem 1.5rem;height:3.5rem;display:flex;align-items:center;background-color:", ";"], base.color.navy7);
12
+ const StyledMaterialAssignmentContainerContent = styled.div.withConfig({
13
+ componentId: "sc-sdhlog-2"
14
+ })(["padding:1.5rem;overflow-y:auto;height:calc(100% - 3.5rem);background-color:", ";"], base.color.navy8);
15
+
16
+ const MaterialAssignmentContainer = ({
17
+ title,
18
+ children
19
+ }) => {
20
+ return React.createElement(StyledMaterialAssignmentContainer, null, React.createElement(StyledMaterialAssignmentContainerHeader, null, React.createElement(Text, {
21
+ bold: true,
22
+ role: "navy0",
23
+ size: "small"
24
+ }, title)), React.createElement(StyledMaterialAssignmentContainerContent, null, children));
25
+ };
26
+
27
+ export { MaterialAssignmentContainer as default };
package/es/index.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from './components';
package/es/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { default as MaterialAssignmentAdmin } from './components/material-assignment-admin/MaterialAssignmentAdmin.js';
2
+ export { default as MaterialAssignment } from './components/material-assignment/MaterialAssignment.js';
package/package.json ADDED
@@ -0,0 +1,70 @@
1
+ {
2
+ "name": "@elice/material-assignment",
3
+ "version": "1.220803.0",
4
+ "description": "User view and editing components of Elice material assignment",
5
+ "repository": "https://git.elicer.io/elice/frontend/library/elice-material",
6
+ "license": "UNLICENSED",
7
+ "main": "./cjs/index.js",
8
+ "module": "./es/index.js",
9
+ "types": "./es/index.d.ts",
10
+ "files": [
11
+ "es",
12
+ "cjs",
13
+ "package.json",
14
+ "README.md"
15
+ ],
16
+ "sideEffects": false,
17
+ "engines": {
18
+ "node": "~16.14",
19
+ "yarn": ">=1.20 <2"
20
+ },
21
+ "scripts": {
22
+ "start": "run-s watch",
23
+ "prebuild": "run-s clean",
24
+ "build": "run-p build:es build:cjs",
25
+ "build:es": "rollup -c ../../rollup.config.ts -f es",
26
+ "build:cjs": "rollup -c ../../rollup.config.ts -f cjs",
27
+ "watch": "rollup -c ../../rollup.config.ts -f es -w",
28
+ "lint": "eslint --ext .ts,.tsx ./src --max-warnings=0",
29
+ "clean": "del-cli \"es/*\" \"cjs/*\" \"dist/*\""
30
+ },
31
+ "peerDependencies": {
32
+ "@elice/api-client": "^1.220802.1",
33
+ "@elice/blocks": "^1.220803.0",
34
+ "@elice/design-tokens": "^1.220803.0",
35
+ "@elice/icons": "^1.220803.0",
36
+ "@elice/markdown": "^1.220803.0",
37
+ "@elice/material-shared-types": "22.7.2-1",
38
+ "@elice/material-shared-utils": "22.7.2-1",
39
+ "@elice/types": "^1.220802.1",
40
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
41
+ "react-intl": "^5.0.0",
42
+ "react-use": "^17.0.0",
43
+ "styled-components": "^5.2.0"
44
+ },
45
+ "dependencies": {
46
+ "classnames": "^2.2.0",
47
+ "dayjs": "^1.10.6",
48
+ "react-hook-form": "~7.12.0",
49
+ "tslib": "^2.3.1"
50
+ },
51
+ "devDependencies": {
52
+ "@elice/api-client": "^1.220802.1",
53
+ "@elice/blocks": "^1.220803.0",
54
+ "@elice/design-tokens": "^1.220803.0",
55
+ "@elice/icons": "^1.220803.0",
56
+ "@elice/icons-legacy": "npm:@elice/icons@0.220803.1",
57
+ "@elice/markdown": "^1.220803.0",
58
+ "@elice/material-shared-types": "1.220803.0",
59
+ "@elice/material-shared-utils": "1.220803.0",
60
+ "@elice/types": "^1.220802.1",
61
+ "@types/classnames": "^2.3.1",
62
+ "@types/react": "~17.0.9",
63
+ "@types/styled-components": "^5.1.21",
64
+ "react": "^17.0.2",
65
+ "react-intl": "^5.20.10",
66
+ "react-use": "^17.2.4",
67
+ "styled-components": "^5.3.0"
68
+ },
69
+ "gitHead": "21c6b42ae6550e7899c57bf39fa78cea0f47e64c"
70
+ }