From 6e24435a9f5a434a8f04265553d0edd745aae280 Mon Sep 17 00:00:00 2001 From: rotimi-best Date: Fri, 24 Sep 2021 13:20:40 +0300 Subject: [PATCH] CLASSROOMIO-T-4: Add deadline and show it was late or early --- .../Lesson/Exercise/EditMode.svelte | 10 +++-- .../Lesson/Exercise/MarkExerciseModal.svelte | 23 ++++++++++- .../Lesson/Exercise/ViewMode.svelte | 14 ++++++- src/components/Form/DateTime.svelte | 5 ++- src/components/Navigation/index.svelte | 1 + src/components/Tailwindcss.svelte | 4 ++ src/routes/courses/[id]/submissions.svelte | 38 ++++++++++++++++--- src/utils/functions/formatDate.js | 13 +++++++ src/utils/functions/isSubmissionEarly.js | 5 +++ src/utils/services/submissions/index.js | 3 +- 10 files changed, 101 insertions(+), 15 deletions(-) create mode 100644 src/utils/functions/formatDate.js create mode 100644 src/utils/functions/isSubmissionEarly.js diff --git a/src/components/Course/components/Lesson/Exercise/EditMode.svelte b/src/components/Course/components/Lesson/Exercise/EditMode.svelte index 1ac53b52..a0456e0e 100644 --- a/src/components/Course/components/Lesson/Exercise/EditMode.svelte +++ b/src/components/Course/components/Lesson/Exercise/EditMode.svelte @@ -35,6 +35,7 @@ QUESTION_TYPES, } from '../../../../Question/constants'; import { filterOutDeleted } from './functions'; + import Date from '../../../../Form/Date.svelte'; // import EditContent from "../../../../EditContent/index.svelte"; // import readme from "../../readme.js"; @@ -100,11 +101,12 @@ /> ($questionnaire.is_due_by_dirty = true)} + value={$questionnaire.due_by} + onInput={(e) => { + $questionnaire.due_by = e.target.value; + $questionnaire.is_due_by_dirty = true; + }} /> -

Details

+

+ Details + {#if data.isEarly} + + early + + {:else} + + late + + {/if} +

@@ -148,3 +163,9 @@
+ + diff --git a/src/components/Course/components/Lesson/Exercise/ViewMode.svelte b/src/components/Course/components/Lesson/Exercise/ViewMode.svelte index 857acc27..33f48761 100644 --- a/src/components/Course/components/Lesson/Exercise/ViewMode.svelte +++ b/src/components/Course/components/Lesson/Exercise/ViewMode.svelte @@ -1,4 +1,5 @@ diff --git a/src/components/Navigation/index.svelte b/src/components/Navigation/index.svelte index 524f236a..8e934f52 100644 --- a/src/components/Navigation/index.svelte +++ b/src/components/Navigation/index.svelte @@ -142,6 +142,7 @@ a { text-decoration: none; + color: var(--main-primary-color); padding: 0 1.5em; font-weight: 700; display: flex; diff --git a/src/components/Tailwindcss.svelte b/src/components/Tailwindcss.svelte index 82f5f4a9..505cf16d 100644 --- a/src/components/Tailwindcss.svelte +++ b/src/components/Tailwindcss.svelte @@ -61,6 +61,10 @@ fill: var(--main-primary-color); } + .prose a { + color: var(--main-primary-color); + } + .success :global(svg.carbon-icon) { fill: green; } diff --git a/src/routes/courses/[id]/submissions.svelte b/src/routes/courses/[id]/submissions.svelte index 2cc58b8e..53f188d8 100644 --- a/src/routes/courses/[id]/submissions.svelte +++ b/src/routes/courses/[id]/submissions.svelte @@ -25,6 +25,9 @@ import { formatAnswers } from '../../../components/Course/function'; import { snackbarStore } from '../../../components/Snackbar/store'; import { SNACKBAR_SEVERITY } from '../../../components/Snackbar/constants'; + import Date from '../../../components/Form/Date.svelte'; + import isSubmissionEarly from '../../../utils/functions/isSubmissionEarly'; + import formatDate from '../../../utils/functions/formatDate'; const flipDurationMs = 300; @@ -188,12 +191,22 @@ const sectionById = {}; for (const submission of submissions) { - const { id, exercise, course, answers, groupmember, status_id } = - submission; + const { + id, + created_at, + exercise, + course, + answers, + groupmember, + status_id, + } = submission; + const isEarly = isSubmissionEarly(created_at, exercise.due_by); const submissionItem = { id, statusId: status_id, + isEarly, + submittedAt: formatDate(created_at), exercise: { id: exercise.id, title: exercise.title, @@ -205,10 +218,11 @@ title: exercise.lesson.title, }, }; - console.log(`answers`, answers); + submissionIdData[id] = { id, status_id, + isEarly, title: exercise.title, student: submissionItem.student, questions: exercise.questions, @@ -281,11 +295,16 @@ > {#each items as item (item.id)}
{ + goto(`${$page.path}?submissionId=${item.id}`); + }} > Student avatar +

+ {item.submittedAt} +

+
{/each}
diff --git a/src/utils/functions/formatDate.js b/src/utils/functions/formatDate.js new file mode 100644 index 00000000..bb1a1cea --- /dev/null +++ b/src/utils/functions/formatDate.js @@ -0,0 +1,13 @@ +export default (date) => { + const d = new Date(date); + + const ye = new Intl.DateTimeFormat('en', { year: 'numeric' }).format(d); + const mo = new Intl.DateTimeFormat('en', { month: '2-digit' }).format(d); + const da = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(d); + + // return `${ye}-${mo}-${da} ${d.toLocaleTimeString('en-US')}`; + return new Intl.DateTimeFormat('en-US', { + dateStyle: 'full', + timeStyle: 'medium', + }).format(d); +}; diff --git a/src/utils/functions/isSubmissionEarly.js b/src/utils/functions/isSubmissionEarly.js new file mode 100644 index 00000000..daaa5343 --- /dev/null +++ b/src/utils/functions/isSubmissionEarly.js @@ -0,0 +1,5 @@ +export default (created_at, due_date) => { + return !!due_date + ? !!(new Date(created_at).getTime() <= new Date(due_date).getTime()) + : true; +}; diff --git a/src/utils/services/submissions/index.js b/src/utils/services/submissions/index.js index fe709f89..2eeee4fd 100644 --- a/src/utils/services/submissions/index.js +++ b/src/utils/services/submissions/index.js @@ -10,9 +10,10 @@ export function fetchSubmissions(course_id) { .select( ` id, + created_at, answers:question_answer(*), exercise:exercise_id( - id, title, + id, title, due_by, lesson:lesson_id(id, title), questions:question( *,