#11 - Modify Utils
This commit is contained in:
parent
c007668002
commit
989a0dbb50
@ -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)
|
||||||
);
|
);
|
||||||
|
@ -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());
|
||||||
};
|
};
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user