diff --git a/src/utils/course-utils.ts b/src/utils/course-utils.ts index 521f4fc..775e697 100644 --- a/src/utils/course-utils.ts +++ b/src/utils/course-utils.ts @@ -1,28 +1,26 @@ -import type { CollectionEntry } from 'astro:content'; +import type { Courses } from '../types/codyops-courses'; export const getUniqueCategories = ( - courses: Array> + courses: Courses[] ) => { const coursesEntries = courses.flatMap( - // @ts-ignore - // eslint-disable-next-line no-unsafe-optional-chaining - (course: CollectionEntry<'courses'>) => [...course?.data?.categories] + (course: Courses) => [...course.category] ); return [...new Set(coursesEntries)]; }; -export const getUniqueLevels = (courses: CollectionEntry<'courses'>[]) => { +export const getUniqueLevels = (courses: Courses[]) => { const coursesEntries = courses.map( - (course: CollectionEntry<'courses'>) => course.data.level + (course: Courses) => course.level ); return [...new Set(coursesEntries)]; }; -export const sortCoursesByDate = (posts: CollectionEntry<'courses'>[]) => - posts - .filter(({ data }) => !data?.draft) +export const sortCoursesByDate = (courses: Courses[]) => + courses + .filter((course) => course.status !== 'draft') // Assuming 'draft' status is used instead of a 'draft' property .sort( (a, b) => - Math.floor(new Date(b?.data?.date).getTime() / 1000) - - Math.floor(new Date(a?.data?.date).getTime() / 1000) + Math.floor(new Date(b.date_created || '').getTime() / 1000) - + Math.floor(new Date(a.date_created || '').getTime() / 1000) ); diff --git a/src/utils/from-snake-case.ts b/src/utils/from-snake-case.ts index 8cef6d4..7d0e8e0 100644 --- a/src/utils/from-snake-case.ts +++ b/src/utils/from-snake-case.ts @@ -1,3 +1,3 @@ -export const fromSnakeCase = (text: any) => { - return text.replace(/-/g, ' ').replace(/\b\w/g, (word) => word.toUpperCase()); +export const fromSnakeCase = (text: string) => { + return text.replace(/-/g, ' ').replace(/\b\w/g, (word: string) => word.toUpperCase()); }; diff --git a/src/utils/time.ts b/src/utils/time.ts index fb0b52b..ea0ad90 100644 --- a/src/utils/time.ts +++ b/src/utils/time.ts @@ -1,23 +1,35 @@ -function parseTime(time) { - const [hours, minutes, milliseconds] = time.split(':').map(Number); +interface TimeParts { + hours: number; + minutes: number; + milliseconds: number; +} + +interface TimeResult { + hours: number; + minutes: number; +} + +function parseTime(time: string | null | undefined): TimeParts { + const safeTime = time || '0:0:0'; // Provide a default string if time is null/undefined/empty + const [hours, minutes, milliseconds] = safeTime.split(':').map(Number); return { hours, minutes, milliseconds }; } -function timeToMilliseconds({ hours, minutes, milliseconds }) { +function timeToMilliseconds({ hours, minutes, milliseconds }: TimeParts): number { return (hours * 60 * 60 * 1000) + (minutes * 60 * 1000) + milliseconds; } -function millisecondsToTime(ms) { +function millisecondsToTime(ms: number): TimeResult { const totalMinutes = Math.floor(ms / (60 * 1000)); const hours = Math.floor(totalMinutes / 60); const minutes = totalMinutes % 60; return { hours, minutes }; } -export function sumTimes(times) { +export function sumTimes(times: string[]): TimeResult { const totalMilliseconds = times .map(parseTime) .map(timeToMilliseconds) - .reduce((acc, ms) => acc + ms, 0); + .reduce((acc: number, ms: number) => acc + ms, 0); return millisecondsToTime(totalMilliseconds); }