Skip to content
This repository has been archived by the owner on Dec 19, 2024. It is now read-only.

Staff page and cards #43

Merged
merged 15 commits into from
May 31, 2024
9 changes: 8 additions & 1 deletion public/admin/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,29 +16,36 @@ collections:
folder: src/content/people
create: true
fields:
- name: type
label: Staff Type
widget: select
options: [ 'Leadership', 'Advisors', 'Supporting Staff' ]
- name: name
label: Name
widget: string
- name: title
label: Title
widget: string
- name: avatar
required: false
i18n: duplicate
label: Photo
widget: image
- name: org
label: Company/University
widget: string
- name: address
required: false
i18n: duplicate
label: Mailing Address
widget: text
- name: phone
required: false
i18n: duplicate
label: Phone Number
widget: string
pattern: [ '^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$', 'Phone number must follow standard guidelines' ]
- name: email
required: false
i18n: duplicate
label: Email
widget: string
Expand Down
Binary file added public/images/david-lindstrom-1-.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/douglasmassey.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/jorgedurand.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/patricia-arias.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/vero.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
50 changes: 50 additions & 0 deletions src/components/Card.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import React from "react"

interface CardProps {
position: number
image?: string
title: string
name: string
address?: string
phone?: string
email?: string
}

const Card: React.FC<CardProps> = ({ position, image, title, name, address, phone, email }) => {
// strip 'public/' from the avatar string since astro's public folder is available without this in the link
const link = image?.replace("/public", "")
return (
<div
className={`flex flex-row items-center ${
position % 2 ? "md:flex-row-reverse md:text-right" : ""
}`}
>
{image && (
<div>
<img
className="object-cover rounded-full w-64 h-64 min-w-64 min-h-64 hidden md:block"
src={link}
alt={`${name}'s image`}
hetd54 marked this conversation as resolved.
Show resolved Hide resolved
/>
</div>
)}
<div className="px-8">
<div>
<p className="text-xl font-semibold">{name}</p>
<p className="italic">{title}</p>
</div>
<div>
{address && <p className="text-base">{address}</p>}
{phone && <p className="text-base">{phone}</p>}
{email && (
<a className="text-base hover:text-neutral-300" href={`mailto:${email}`}>
{email}
</a>
)}
</div>
</div>
</div>
)
}

export default Card
38 changes: 38 additions & 0 deletions src/components/CardContainer.astro
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
---
import Card from "./Card"
const { color, title, people } = Astro.props

interface PersonProps {
data: {
title: string
name: string
avatar?: string
email?: string
address?: string
phone?: string
}
}
---

<div class="flex flex-row items-start space-x-12 lg:px-24 xl:px-48">
<h2 class={`${color} [writing-mode:vertical-lr] rotate-180`}>{title}</h2>
<div class="flex flex-col space-y-20 flex-1">
{
people.map((person: PersonProps, i: number) => {
return (
<>
<Card
position={i}
title={person.data.title}
name={person.data.name}
image={person.data.avatar}
email={person.data.email}
phone={person.data.phone}
address={person.data.address}
/>
</>
)
})
}
</div>
</div>
2 changes: 1 addition & 1 deletion src/consts.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
export const SITE_TITLE = "MMP"
export const SITE_DESCRIPTION = "Mesoamerican Migration Project"

export const LINKS = ["news", "publications", "map", "data", "documentation", "about"]
export const LINKS = ["people", "news", "publications", "map", "data", "documentation", "about"]
15 changes: 14 additions & 1 deletion src/content/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,17 @@ const files = defineCollection({
file: z.string(),
}),
})
export const collections = { news: news, data: files }

const people = defineCollection({
type: "content",
schema: z.object({
type: z.string(),
name: z.string(),
title: z.string(),
avatar: z.string().optional(),
email: z.string().optional(),
phone: z.string().optional(),
address: z.string().optional(),
}),
})
export const collections = { news: news, data: files, people: people }
14 changes: 14 additions & 0 deletions src/content/people/advisor.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
type: Leadership
name: David Lindstrom
title: Advisor
avatar: /public/images/david-lindstrom-1-.jpg
org: Brown University
address: |-
206 Maxcy Hall
Providence, Rhode Island 02912-1916
phone: (401) 863-3765
email: [email protected]
startDate: "2024"
endDate: "2024"
---
12 changes: 12 additions & 0 deletions src/content/people/co-director-1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
type: Leadership
name: Douglas S. Massey
title: Co-Director
avatar: /public/images/douglasmassey.jpeg
org: Princeton University
address: Princeton, NJ 08544
phone: 609-258-4949
email: [email protected]
startDate: "2024"
endDate: "2024"
---
15 changes: 15 additions & 0 deletions src/content/people/co-director.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
type: Leadership
name: Jorge Durand Arp-Nisen
title: Co-Director
avatar: /public/images/jorgedurand.jpg
org: Universidad de Guadalajara
address: |-
Av. Maestros y Alcalde, Puerta Num. 1
Guadalajara, CP 44269
Jalisco, México
phone: 333-819-3327
email: [email protected]
startDate: "2024"
endDate: "2024"
---
15 changes: 15 additions & 0 deletions src/content/people/data-entry-specialist.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
type: Supporting Staff
name: Verónica Lozano
title: Data Entry Specialist
avatar: /public/images/vero.jpg
org: Universidad de Guadalajara
address: |-
Av. Maestros y Alcalde, Puerta Num. 1
Guadalajara, CP 44269
Jalisco, México
phone: 011-52-333-819-3327
email: ""
startDate: "2024"
endDate: "2024"
---
14 changes: 14 additions & 0 deletions src/content/people/professor-and-researcher-sni-nivel-iii.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
type: Advisors
name: M. Patricia Arias
title: Professor and Researcher (SNI nivel III)
avatar: /public/images/patricia-arias.jpg
org: Universidad de Guadalajara
address: |-
Argentina 374. C.P. 44160,
Guadalajara, Jalisco, Mexico
phone: 113-826-1499
email: [email protected]
startDate: "2024"
endDate: "2024"
---
17 changes: 17 additions & 0 deletions src/pages/people.astro
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
import Layout from "../layouts/Layout.astro"
import CardContainer from "../components/CardContainer.astro"
import { getCollection } from "astro:content"
const people = await getCollection("people")
const leadership = people.filter((person) => person.data.type === "Leadership")
const advisors = people.filter((person) => person.data.type === "Advisors")
const support = people.filter((person) => person.data.type === "Supporting Staff")
---

<Layout title="Staff" description="Our Leadership, Advisors, and Staff">
hetd54 marked this conversation as resolved.
Show resolved Hide resolved
<div class="flex flex-col space-y-28">
<CardContainer title="Leadership" color="text-secondary-blue-500" people={leadership} />
<CardContainer title="Advisors" color="text-primary-500" people={advisors} />
<CardContainer title="Supporting Staff" color="text-secondary-brown-500" people={support} />
</div>
</Layout>