You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
2.1 KiB
Plaintext
58 lines
2.1 KiB
Plaintext
---
|
|
import Base from './Base.astro'
|
|
|
|
const years = await Astro.glob('../pages/archivio/*/index.md')
|
|
const currentYear = years
|
|
.map(module => module.file.split('/').at(-2))
|
|
.toSorted()
|
|
.at(-1)
|
|
const {
|
|
file,
|
|
frontmatter: { title, tutors: tutorEntries },
|
|
} = Astro.props
|
|
const selectedCourseLabel = file.split('/').at(-1)
|
|
|
|
const allCourses = await Astro.glob(`../pages/archivio/*/*`)
|
|
const courses = allCourses.filter(module => module.file.includes(file.split('/').at(-2)))
|
|
|
|
function upperFirst(string) {
|
|
return string.charAt(0).toUpperCase() + string.slice(1)
|
|
}
|
|
---
|
|
|
|
<Base title={title} courses={courses} selectedCourseLabel={selectedCourseLabel}>
|
|
<h1>{title}</h1>
|
|
{
|
|
tutorEntries && (
|
|
<div class="tutor-entries">
|
|
<h2>I Tutor</h2>
|
|
{tutorEntries.map(({ name, image, contacts }) => (
|
|
<div class="tutor">
|
|
<h3 class="name">{name ?? '???'}</h3>
|
|
<img class="image" src={image ? image : '/tutors/placeholder-person.svg'} alt={name} />
|
|
{contacts && (
|
|
<ul class="contacts">
|
|
{contacts.map(({ type, value }) => (
|
|
<li>
|
|
<strong>{upperFirst(type)}</strong>:{' '}
|
|
{type === 'email' ? (
|
|
<a href={`mailto:${value}`}>{value}</a>
|
|
) : type === 'telegram' ? (
|
|
<a href={`https://t.me/${value}`}>{value}</a>
|
|
) : type === 'website' ? (
|
|
<a href={value}>{value}</a>
|
|
) : (
|
|
value
|
|
)}
|
|
</li>
|
|
))}
|
|
</ul>
|
|
)}
|
|
</div>
|
|
))}
|
|
</div>
|
|
)
|
|
}
|
|
<slot />
|
|
</Base>
|