Delete a course functionality
This commit is contained in:
@@ -47,7 +47,7 @@
|
||||
let openPopover = false;
|
||||
let player = null;
|
||||
let aiButtonClass =
|
||||
'flex items-center px-5 py-2 border border-gray-300 hover:bg-gray-200 rounded-md w-full mb-2';
|
||||
'flex items-center px-5 py-2 border border-gray-300 hover:bg-gray-200 dark:hover:bg-gray-700 rounded-md w-full mb-2';
|
||||
|
||||
const onChange =
|
||||
(tab = 0) =>
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
import { settingsDialog } from './store';
|
||||
import { course } from '$lib/components/Course/store';
|
||||
import { updateCourse, deleteCourse } from '$lib/utils/services/courses';
|
||||
import { currentOrgPath } from '$lib/utils/store/org';
|
||||
|
||||
let shouldDelete = false;
|
||||
let avatar;
|
||||
@@ -41,7 +42,7 @@
|
||||
async function handleDelete() {
|
||||
$settingsDialog.open = false;
|
||||
await deleteCourse($course.id);
|
||||
goto('/courses');
|
||||
goto($currentOrgPath + '/courses');
|
||||
}
|
||||
|
||||
// function setAvatar(logo) {
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
import getCurrencyFormatter from '$lib/utils/functions/getCurrencyFormatter';
|
||||
import OverflowMenuHorizontalIcon from 'carbon-icons-svelte/lib/OverflowMenuHorizontal.svelte';
|
||||
import ArrowRight from 'carbon-icons-svelte/lib/ArrowRight.svelte';
|
||||
// import { deleteCourse } from '$lib/utils/services/courses';
|
||||
|
||||
export let bannerImage: string | undefined;
|
||||
export let id = '';
|
||||
@@ -17,6 +18,7 @@
|
||||
export let totalLessons = 0;
|
||||
export let currency = 'NGN';
|
||||
export let isOnLandingPage = false;
|
||||
// export let onDelete = (id: string) => {};
|
||||
|
||||
let formatter = getCurrencyFormatter(currency);
|
||||
|
||||
@@ -37,10 +39,15 @@
|
||||
}
|
||||
// {
|
||||
// label: 'Delete',
|
||||
// show: () => role_id === ROLE.TUTOR,
|
||||
// onClick() {
|
||||
// console.log('Deleting');
|
||||
// },
|
||||
// },
|
||||
// (async () => {
|
||||
// await deleteCourse(id);
|
||||
// onDelete(id);
|
||||
// console.log('Deleting');
|
||||
// })();
|
||||
// }
|
||||
// }
|
||||
].filter((option) => option.show());
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
<script>
|
||||
<script lang="ts">
|
||||
import Box from '../Box/index.svelte';
|
||||
import Card from './components/Card/index.svelte';
|
||||
import CardLoader from './components/Card/Loader.svelte';
|
||||
import CoursesEmptyIcon from '../Icons/CoursesEmptyIcon.svelte';
|
||||
import CopyCourseModal from './components/CopyCourseModal/index.svelte';
|
||||
import { courses, courseMetaDeta } from './store';
|
||||
import { isMobile } from '$lib/utils/store/useMobile';
|
||||
</script>
|
||||
|
||||
<CopyCourseModal />
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { writable } from 'svelte/store';
|
||||
import type { Course } from '$lib/utils/types';
|
||||
|
||||
export const courses = writable([]);
|
||||
export const courses = writable<Course[]>([]);
|
||||
export const courseMetaDeta = writable({
|
||||
isLoading: true
|
||||
});
|
||||
@@ -0,0 +1,5 @@
|
||||
export enum STATUS {
|
||||
ACTIVE,
|
||||
ARCHIVE,
|
||||
DELETED
|
||||
}
|
||||
@@ -2,9 +2,10 @@ import { supabase } from '$lib/utils/functions/supabase';
|
||||
import { isUUID } from '$lib/utils/functions/isUUID';
|
||||
import { QUESTION_TYPE } from '$lib/components/Question/constants';
|
||||
import type { Lesson, Course, Group, Groupmember, Exercise } from '$lib/utils/types';
|
||||
import { STATUS } from '$lib/utils/constants/course';
|
||||
|
||||
export async function fetchCourse(courseId?: Course['id'], slug?: Course['slug']) {
|
||||
let match: { slug?: string; id?: string } = {};
|
||||
let match: { slug?: string; id?: string; status?: string } = {};
|
||||
|
||||
if (slug) {
|
||||
match.slug = slug;
|
||||
@@ -12,6 +13,8 @@ export async function fetchCourse(courseId?: Course['id'], slug?: Course['slug']
|
||||
match.id = courseId;
|
||||
}
|
||||
|
||||
match.status = STATUS[STATUS.ACTIVE];
|
||||
|
||||
const { data, error } = await supabase
|
||||
.from('course')
|
||||
.select(
|
||||
@@ -109,7 +112,7 @@ export async function updateCourse(
|
||||
avatar: string | undefined,
|
||||
course: Course
|
||||
) {
|
||||
if (avatar) {
|
||||
if (avatar && courseId) {
|
||||
const filename = `course/${courseId + Date.now()}.webp`;
|
||||
|
||||
const { data } = await supabase.storage.from('avatars').upload(filename, avatar, {
|
||||
@@ -132,7 +135,7 @@ export async function updateCourse(
|
||||
}
|
||||
|
||||
export async function deleteCourse(courseId: Course['id']) {
|
||||
return await supabase.from('course').delete().match({ id: courseId });
|
||||
return await supabase.from('course').update({ status: 'DELETED' }).match({ id: courseId });
|
||||
}
|
||||
|
||||
export function addGroupMember(member: any) {
|
||||
|
||||
@@ -147,6 +147,7 @@ export async function getCourseBySiteName(siteName) {
|
||||
`
|
||||
)
|
||||
.eq('group.organization.siteName', siteName)
|
||||
.eq('status', 'ACTIVE')
|
||||
.eq('is_published', true);
|
||||
|
||||
if (error) {
|
||||
|
||||
@@ -99,6 +99,7 @@ export interface Course {
|
||||
organization?: Organization;
|
||||
is_certificate_downloadable?: boolean;
|
||||
certificate_theme?: string;
|
||||
status: string;
|
||||
}
|
||||
|
||||
export interface Groupmember {
|
||||
|
||||
Reference in New Issue
Block a user