import { onMount } from 'svelte';
import { stores } from '@sapper/app';
+ import { dndzone } from 'svelte-dnd-action';
import Time24 from 'carbon-icons-svelte/lib/Time24';
import Edit24 from 'carbon-icons-svelte/lib/Edit24';
import Save24 from 'carbon-icons-svelte/lib/Save24';
@@ -21,7 +22,10 @@
import TextField from '../../../../components/Form/TextField.svelte';
import IconButton from '../../../../components/IconButton/index.svelte';
import Select from '../../../../components/Form/Select.svelte';
- import { fetchCourse } from '../../../../utils/services/courses';
+ import {
+ fetchCourse,
+ updateLesson,
+ } from '../../../../utils/services/courses';
import CourseContainer from '../../../../components/CourseContainer/index.svelte';
import { profile } from '../../../../utils/store/user';
import {
@@ -43,6 +47,7 @@
let isStudent = true;
const { page } = stores();
+ const flipDurationMs = 300;
function formatDate(date) {
const d = new Date(date);
@@ -69,6 +74,36 @@
}, 100);
}
+ function handleDndConsider(e) {
+ $lessons = e.detail.items;
+ }
+
+ function handleDndFinalize(e) {
+ const prevLessonsByOrder = $lessons.reduce(
+ (acc, l) => ({ ...acc, [l.id]: l.order }),
+ {}
+ );
+ $lessons = e.detail.items;
+
+ // Only update the lesson order that changed
+ e.detail.items.forEach((item, index) => {
+ const order = index + 1;
+
+ if (order !== prevLessonsByOrder[item.id]) {
+ $lessons[index].order = order;
+ updateLesson({ order }, item.id).then((update) =>
+ console.log(`updated lesson order`, update)
+ );
+ }
+ });
+ }
+
+ function getLessonOrder(id) {
+ const index = $lessons.findIndex((lesson) => lesson.id === id);
+
+ return index + 1;
+ }
+
onMount(async () => {
if ($course.id) return;
const { data } = await fetchCourse(courseId);
@@ -88,23 +123,35 @@
-
-
-
-
- {#each $lessons as lesson, index}
+
+
+ {#each $lessons as lesson (lesson.id)}
@@ -132,7 +179,7 @@
- {#if lessonEditing === index}
+ {#if lessonEditing === lesson.id}
{
lessonEditing = null;
@@ -142,7 +189,7 @@
{:else}
-
(lessonEditing = index)}>
+ (lessonEditing = lesson.id)}>
{/if}
@@ -150,10 +197,12 @@
-
{index + 1}.
+
+ {getLessonOrder(lesson.id)}.
+
- {#if lessonEditing === index}
+ {#if lessonEditing === lesson.id}
{:else}
@@ -177,7 +226,7 @@
-->