#11 - Modify Utils

This commit is contained in:
Luciano Giacchetta 2025-08-20 14:59:28 -03:00
parent c007668002
commit 989a0dbb50
3 changed files with 30 additions and 20 deletions

View File

@ -1,28 +1,26 @@
import type { CollectionEntry } from 'astro:content'; import type { Courses } from '../types/codyops-courses';
export const getUniqueCategories = ( export const getUniqueCategories = (
courses: Array<CollectionEntry<'courses'>> courses: Courses[]
) => { ) => {
const coursesEntries = courses.flatMap( const coursesEntries = courses.flatMap(
// @ts-ignore (course: Courses) => [...course.category]
// eslint-disable-next-line no-unsafe-optional-chaining
(course: CollectionEntry<'courses'>) => [...course?.data?.categories]
); );
return [...new Set(coursesEntries)]; return [...new Set(coursesEntries)];
}; };
export const getUniqueLevels = (courses: CollectionEntry<'courses'>[]) => { export const getUniqueLevels = (courses: Courses[]) => {
const coursesEntries = courses.map( const coursesEntries = courses.map(
(course: CollectionEntry<'courses'>) => course.data.level (course: Courses) => course.level
); );
return [...new Set(coursesEntries)]; return [...new Set(coursesEntries)];
}; };
export const sortCoursesByDate = (posts: CollectionEntry<'courses'>[]) => export const sortCoursesByDate = (courses: Courses[]) =>
posts courses
.filter(({ data }) => !data?.draft) .filter((course) => course.status !== 'draft') // Assuming 'draft' status is used instead of a 'draft' property
.sort( .sort(
(a, b) => (a, b) =>
Math.floor(new Date(b?.data?.date).getTime() / 1000) - Math.floor(new Date(b.date_created || '').getTime() / 1000) -
Math.floor(new Date(a?.data?.date).getTime() / 1000) Math.floor(new Date(a.date_created || '').getTime() / 1000)
); );

View File

@ -1,3 +1,3 @@
export const fromSnakeCase = (text: any) => { export const fromSnakeCase = (text: string) => {
return text.replace(/-/g, ' ').replace(/\b\w/g, (word) => word.toUpperCase()); return text.replace(/-/g, ' ').replace(/\b\w/g, (word: string) => word.toUpperCase());
}; };

View File

@ -1,23 +1,35 @@
function parseTime(time) { interface TimeParts {
const [hours, minutes, milliseconds] = time.split(':').map(Number); 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 }; 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; 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 totalMinutes = Math.floor(ms / (60 * 1000));
const hours = Math.floor(totalMinutes / 60); const hours = Math.floor(totalMinutes / 60);
const minutes = totalMinutes % 60; const minutes = totalMinutes % 60;
return { hours, minutes }; return { hours, minutes };
} }
export function sumTimes(times) { export function sumTimes(times: string[]): TimeResult {
const totalMilliseconds = times const totalMilliseconds = times
.map(parseTime) .map(parseTime)
.map(timeToMilliseconds) .map(timeToMilliseconds)
.reduce((acc, ms) => acc + ms, 0); .reduce((acc: number, ms: number) => acc + ms, 0);
return millisecondsToTime(totalMilliseconds); return millisecondsToTime(totalMilliseconds);
} }