Compare commits

..

8 Commits

12 changed files with 51 additions and 108 deletions

View File

@ -7,19 +7,7 @@ type Props = {
const { course }: Props = Astro.props; const { course }: Props = Astro.props;
const isDev = import.meta.env.DEV; const courseDurations = course.modules.flatMap((time:any) => (time.duration));
const statusFilter = isDev ? { '_neq': 'archived' } : { '_eq': 'published' };
const filteredModules = course.modules.filter((module: any) => {
if (statusFilter._neq) {
return module.status !== statusFilter._neq;
} else if (statusFilter._eq) {
return module.status === statusFilter._eq;
}
return true;
});
const courseDurations = filteredModules.flatMap((time:any) => (time.duration));
const totalCourseDuration = sumTimes(courseDurations); const totalCourseDuration = sumTimes(courseDurations);
--- ---
@ -40,7 +28,7 @@ const totalCourseDuration = sumTimes(courseDurations);
</div> </div>
</div> </div>
<div class="accordion accordion-btn-icon-start"> <div class="accordion accordion-btn-icon-start">
{filteredModules.map((item: any, index:number) => ( {course.modules.map((item: any, index:number) => (
<div class="accordion-item"> <div class="accordion-item">
<div class="accordion-header" id={`headingCourse${index}`}> <div class="accordion-header" id={`headingCourse${index}`}>
<a <a

View File

@ -16,10 +16,10 @@ const tier_one = getPrices('price_tier_one',import.meta.env.ASTRO_CURRENCY.toLow
<figure class="figure"> <figure class="figure">
<Image <Image
class="card-img" class="card-img"
src={`${import.meta.env.ASTRO_ASSETS}/${course.image}`} src={`${import.meta.env.ASTRO_DIRECTUS_API}/assets/${course.image}`}
alt={`${course.name} Image Description`} alt="Image Description"
width={325} width=-1
height={455} height=-1
/> />
</figure> </figure>
</a> </a>

View File

@ -19,12 +19,12 @@ const { course }: Props = Astro.props;
<div class="d-flex align-items-center flex-wrap"> <div class="d-flex align-items-center flex-wrap">
<div class="d-flex align-items-center me-4"> <div class="d-flex align-items-center me-4">
<div class="flex-shrink-0 avatar-group avatar-group-xs"> <div class="flex-shrink-0 avatar-group avatar-group-xs">
{course.user_created.avatar && ( {course?.image && (
<figure class="avatar avatar-xs avatar-circle"> <figure class="avatar avatar-xs avatar-circle">
<Image <Image
class="avatar-img" class="avatar-img"
src={`${import.meta.env.ASTRO_ASSETS}/${course.user_created.avatar}`} src={`${import.meta.env.ASTRO_DIRECTUS_API}/assets/${course.user_created.avatar}`}
alt={`${course.user_created.first_name} Avatar`} alt="Course Image"
width={40} width={40}
height={40} height={40}
/> />

View File

@ -71,10 +71,10 @@ const getOverallRating = (reviews: any) => {
<div class="flex-shrink-0"> <div class="flex-shrink-0">
<Image <Image
class="avatar avatar-sm avatar-circle" class="avatar avatar-sm avatar-circle"
src={`${import.meta.env.ASTRO_ASSETS}/${review.user_created.avatar}`} src={`${import.meta.env.ASTRO_DIRECTUS_API}/assets/${review.user_created.avatar}`}
alt={`${review.user_created.avatar} Avatar`} alt="Image Description"
width={50} width="50"
height={50} height="50"
/> />
</div> </div>

View File

@ -2,13 +2,11 @@
import { Image } from 'astro:assets'; import { Image } from 'astro:assets';
import Logo from '../../assets/svg/logo.svg'; import Logo from '../../assets/svg/logo.svg';
import { getAllCourses, filterCoursesByCloud } from '../../libs/courses'; import { getAllCourses, filterCoursesByCloud } from '../../libs/courses';
import { getCareers } from '../../libs/careers';
import { slugifyCourse } from '../../utils/text'; import { slugifyCourse } from '../../utils/text';
const awsCourses = filterCoursesByCloud(getAllCourses(), ['aws']); const awsCourses = filterCoursesByCloud(getAllCourses(), ['aws']);
const gcpCourses = filterCoursesByCloud(getAllCourses(), ['gcp']); const gcpCourses = filterCoursesByCloud(getAllCourses(), ['gcp']);
const azrCourses = filterCoursesByCloud(getAllCourses(), ['azr']); const azrCourses = filterCoursesByCloud(getAllCourses(), ['azr']);
const careers = await getCareers();
--- ---
<header id="header" class={`navbar navbar-expand-lg navbar-end navbar-sticky-top navbar-dark root`}> <header id="header" class={`navbar navbar-expand-lg navbar-end navbar-sticky-top navbar-dark root`}>
@ -51,17 +49,30 @@ const careers = await getCareers();
aria-labelledby="dropdownSubMenu" aria-labelledby="dropdownSubMenu"
style="min-width: 14rem" style="min-width: 14rem"
> >
{careers.map((career: any) => ( <a
<a class="dropdown-item text-white"
class="dropdown-item text-white" id="devops_header"
id={career.slug + '_header'} href=`/carreras/devops/`
href={`/carreras/${career.slug}/`} role="button"
role="button" aria-expanded="false"
aria-expanded="false" >DevOps Engineer
> </a>
{career.name} <a
</a> class="dropdown-item text-white"
))} id="cloud_header"
href=`/carreras/cloudops/`
role="button"
aria-expanded="false"
>Cloud Engineer
</a>
<a
class="dropdown-item text-white"
id="aws_devops_header"
href=`/carreras/aws-devops/`
role="button"
aria-expanded="false"
>AWS DevOps
</a>
</div> </div>
<div class="nav-indicator nav-indicator--blue"></div> <div class="nav-indicator nav-indicator--blue"></div>
</li> </li>
@ -165,4 +176,4 @@ const careers = await getCareers();
font-size: large; font-size: large;
} }
} }
</style> </style>

View File

@ -11,8 +11,8 @@ const { post }: Props = Astro.props;
<figure class="shape-container"> <figure class="shape-container">
<Image <Image
class="card-img img-fluid" class="card-img img-fluid"
src={`${import.meta.env.ASTRO_ASSETS}/${post.cover_image}`} src={`${import.meta.env.ASTRO_DIRECTUS_API}/assets/${post.cover_image}`}
alt={`${post.title} Image`} alt="Image placeholder"
inferSize={true} inferSize={true}
/> />
<div class="shape shape-bottom zi-1" style="margin-bottom: -0.25rem"> <div class="shape shape-bottom zi-1" style="margin-bottom: -0.25rem">

View File

@ -12,8 +12,8 @@ const { post }: Props = Astro.props;
<figure class="shape-container overflow-hidden" style="height: 100%"> <figure class="shape-container overflow-hidden" style="height: 100%">
<Image <Image
class="card-img" class="card-img"
src={`${import.meta.env.ASTRO_ASSETS}/${post.cover_image}`} src={`${import.meta.env.ASTRO_DIRECTUS_API}/assets/${post.cover_image}`}
alt={`${post.title} Image`} alt="Image placeholder"
style="height: 100%" style="height: 100%"
inferSize={true} inferSize={true}
/> />

View File

@ -3,14 +3,11 @@ import { readItems, type Query } from '@directus/sdk';
import type { CodyopsCareers, Careers } from '../types/codyops-careers'; import type { CodyopsCareers, Careers } from '../types/codyops-careers';
import { sumTimes } from '../utils/time'; import { sumTimes } from '../utils/time';
const isDev = import.meta.env.DEV; // Astro's way to check for development mode
export async function getCareers(): Promise<Careers[]> { export async function getCareers(): Promise<Careers[]> {
const careers = await directus.request( const careers = await directus.request(
readItems<CodyopsCareers, 'codyops_careers', Query<CodyopsCareers, Careers>>('codyops_careers', { readItems<CodyopsCareers, 'codyops_careers', Query<CodyopsCareers, Careers>>('codyops_careers', {
fields: [ fields: [
'slug', 'slug',
'status',
'name', 'name',
'description', 'description',
'banner', 'banner',
@ -31,9 +28,6 @@ export async function getCareers(): Promise<Careers[]> {
], ],
}, },
], ],
filter: {
status: isDev ? { '_neq': 'archived' } : { '_eq': 'published' }
},
}) })
); );

View File

@ -2,20 +2,10 @@ import directus from "./directus";
import { readItems, type Query } from "@directus/sdk"; import { readItems, type Query } from "@directus/sdk";
import type { CodyopsCourses, Courses } from "../types/codyops-courses"; import type { CodyopsCourses, Courses } from "../types/codyops-courses";
const isDev = import.meta.env.DEV; // Astro's way to check for development mode
export const courses = await directus.request( export const courses = await directus.request(
readItems<CodyopsCourses, 'codyops_courses', Query<CodyopsCourses, Courses>>("codyops_courses", { readItems<CodyopsCourses, 'codyops_courses', Query<CodyopsCourses, Courses>>("codyops_courses", {
fields: [ fields: [
'id', '*',
'name',
'level',
'category',
'cloud',
'image',
'description',
'features',
'status',
{ {
codyops_careers: [ codyops_careers: [
{ {
@ -39,15 +29,10 @@ export const courses = await directus.request(
'duration', 'duration',
'title', 'title',
'description', 'description',
'video', 'video'
'status'
] ]
} }
], ]}
filter: {
status: isDev ? { '_neq': 'archived' } : { '_eq': 'published' }
},
}
) )
); );

View File

@ -1,28 +1,10 @@
import directus from "./directus"; import directus from "./directus";
import { readItems, type Query } from "@directus/sdk"; import { readItems } from "@directus/sdk";
import type { DirectusSchema, Review } from "../types/codyops-reviews";
const isDev = import.meta.env.DEV; // Astro's way to check for development mode
export const reviews = await directus.request( export const reviews = await directus.request(
readItems<DirectusSchema, 'codyops_reviews', Query<DirectusSchema, Review>>("codyops_reviews", { readItems("codyops_reviews", {
fields: [ fields: ['*', 'user_created.*']
'stars', }
'date_created',
'course_id',
'feedback',
{
user_created: [
'first_name',
'last_name',
'avatar'
]
},
],
filter: {
status: isDev ? { '_neq': 'archived' } : { '_eq': 'published' }
},
}
) )
); );

View File

@ -26,8 +26,8 @@ const { post } = Astro.props;
<h1 class="h2 text-white text-center">{post.title}</h1><br> <h1 class="h2 text-white text-center">{post.title}</h1><br>
<Image <Image
class="card-img" class="card-img"
src={`${import.meta.env.ASTRO_ASSETS}/${post.cover_image}`} src={`${import.meta.env.ASTRO_DIRECTUS_API}/assets/${post.cover_image}`}
alt={`${post.title} Image`} alt="Image placeholder"
inferSize={true} inferSize={true}
/> />
<div class="container content-space-1"> <div class="container content-space-1">

View File

@ -1,17 +0,0 @@
import type { Users } from "./codyops-users";
export interface Review {
slug: string;
status: string;
user_created?: Partial<Users>;
user_updated: string | null;
date_created: string | null;
date_updated: string | null;
stars: number;
course_id: number;
feedback: string;
}
export interface DirectusSchema {
codyops_reviews: Review[];
}