From f890b8d84f0b62df1f4e4f98d2515ea8f301f04c Mon Sep 17 00:00:00 2001
From: Rotimi Best
Date: Thu, 21 Nov 2024 14:25:52 +0100
Subject: [PATCH] fix: course settings showing save popup wrongly
---
.../components/Settings/DragAndDrop.svelte | 5 ++
.../Course/components/Settings/index.svelte | 85 +++++++++++++------
.../src/lib/components/Form/TextArea.svelte | 2 +-
.../lib/components/Modal/DeleteModal.svelte | 44 ++++++++++
.../src/lib/components/Modal/index.svelte | 2 +-
.../PageLoadProgressBar.svelte} | 0
.../lib/components/UploadWidget/index.svelte | 5 +-
apps/dashboard/src/routes/+layout.svelte | 4 +-
.../routes/courses/[id]/settings/+page.svelte | 2 +-
9 files changed, 116 insertions(+), 33 deletions(-)
create mode 100644 apps/dashboard/src/lib/components/Modal/DeleteModal.svelte
rename apps/dashboard/src/lib/components/{ProgressBar/index.svelte => Progress/PageLoadProgressBar.svelte} (100%)
diff --git a/apps/dashboard/src/lib/components/Course/components/Settings/DragAndDrop.svelte b/apps/dashboard/src/lib/components/Course/components/Settings/DragAndDrop.svelte
index 454de59c..48661188 100644
--- a/apps/dashboard/src/lib/components/Course/components/Settings/DragAndDrop.svelte
+++ b/apps/dashboard/src/lib/components/Course/components/Settings/DragAndDrop.svelte
@@ -4,6 +4,9 @@
import { dndzone } from 'svelte-dnd-action';
import Draggable from 'carbon-icons-svelte/lib/Draggable.svelte';
import { t } from '$lib/utils/functions/translations';
+ import { createEventDispatcher } from 'svelte';
+
+ const dispatch = createEventDispatcher();
const flipDurationMs = 300;
@@ -13,6 +16,8 @@
function handleDndFinalize(e) {
$settings.tabs = e.detail.items;
+
+ dispatch('change');
}
diff --git a/apps/dashboard/src/lib/components/Course/components/Settings/index.svelte b/apps/dashboard/src/lib/components/Course/components/Settings/index.svelte
index cfd6c265..239c9f56 100644
--- a/apps/dashboard/src/lib/components/Course/components/Settings/index.svelte
+++ b/apps/dashboard/src/lib/components/Course/components/Settings/index.svelte
@@ -35,6 +35,7 @@
import IconButton from '$lib/components/IconButton/index.svelte';
import generateSlug from '$lib/utils/functions/generateSlug';
import { t } from '$lib/utils/functions/translations';
+ import DeleteModal from '$lib/components/Modal/DeleteModal.svelte';
import { COURSE_TYPE } from '$lib/utils/types';
let isSaving = false;
@@ -43,9 +44,10 @@
let errors: {
title: string | undefined;
description: string | undefined;
- } = { title: undefined, description: undefined };
+ };
let avatar: string | undefined;
let hasUnsavedChanges = false;
+ let openDeleteModal = false;
function widgetControl() {
$handleOpenWidget.open = !$handleOpenWidget.open;
@@ -71,6 +73,7 @@
slideUrl: lesson.slide_url || '',
video: lesson.videos || ''
}));
+
const response = await fetch(env.PUBLIC_SERVER_URL + '/downloadCourse', {
method: 'POST',
headers: {
@@ -109,19 +112,21 @@
};
const deleteBannerImage = () => {
- $course.logo = '';
+ $settings.logo = '';
+ hasUnsavedChanges = true;
};
async function handleDeleteCourse() {
isDeleting = true;
+
try {
await deleteCourse($course.id);
- isDeleting = false;
goto($currentOrgPath + '/courses');
} catch (error) {
snackbar.error('snackbar.course_settings.error.went_wrong');
- isDeleting = false;
}
+
+ isDeleting = false;
}
const handleSave = async () => {
@@ -172,12 +177,11 @@
const generateNewCourseLink = () => {
$course.slug = generateSlug($course.title);
+ hasUnsavedChanges = true;
};
- let hasInitialized = false;
-
async function setDefault(course: Course) {
- if (!course || !Object.keys(course).length || hasInitialized) return;
+ if (!course || !Object.keys(course).length) return;
settings.set({
course_title: course.title,
@@ -190,14 +194,6 @@
is_published: !!course.is_published,
allow_new_students: course.metadata.allowNewStudent
});
-
- settings.subscribe((s) => {
- if (!hasInitialized) return;
-
- hasUnsavedChanges = true;
- });
-
- hasInitialized = true;
}
$: setDefault($course);
@@ -206,6 +202,8 @@
+
+
@@ -215,19 +213,24 @@
{#if $handleOpenWidget.open}
-
+ {
+ hasUnsavedChanges = true;
+ }}
+ />
{/if}
@@ -255,7 +258,10 @@
className="w-full mb-5"
isRequired
bind:value={$settings.course_title}
- errorMessage={errors.title}
+ errorMessage={errors?.title}
+ onInputChange={() => {
+ hasUnsavedChanges = true;
+ }}
/>