diff --git a/public/images/avatar/alejandro-alvarez.jpg b/public/images/avatar/alejandro-alvarez.jpg new file mode 100644 index 0000000..93e0cbb Binary files /dev/null and b/public/images/avatar/alejandro-alvarez.jpg differ diff --git a/public/images/avatar/jenny-acuna.jpeg b/public/images/avatar/jenny-acuna.jpeg new file mode 100644 index 0000000..0b4950a Binary files /dev/null and b/public/images/avatar/jenny-acuna.jpeg differ diff --git a/src/assets/data/team.ts b/src/assets/data/team.ts index a23a9aa..3db820f 100644 --- a/src/assets/data/team.ts +++ b/src/assets/data/team.ts @@ -146,4 +146,16 @@ export const volunteerMembers: VolunteerMember[] = [ image: "/images/avatar/mateo-usme.png", linkedin: "https://www.linkedin.com/in/mateousmevalencia/", }, + { + slug: "alejandro-alvarez", + name: "Alejandro Alvarez", + role: "Redes Sociales", + image: "/images/avatar/alejandro-alvarez.jpg", + }, + { + slug: "jenny-acuna", + name: "Jenny Acuña", + role: "Logística", + image: "/images/avatar/jenny-acuna.jpeg", + }, ]; diff --git a/src/components/shadcn-studio/blocks/user-schedule-02/user-schedule-02.tsx b/src/components/shadcn-studio/blocks/user-schedule-02/user-schedule-02.tsx index 0e84395..ccb9b83 100644 --- a/src/components/shadcn-studio/blocks/user-schedule-02/user-schedule-02.tsx +++ b/src/components/shadcn-studio/blocks/user-schedule-02/user-schedule-02.tsx @@ -45,6 +45,7 @@ import { useLanguage, useTranslations } from "@/contexts/language-context"; import { getKeynoteHref, getLocalizedKeynote } from "@/lib/keynotes"; import { resolveSpeakersForScheduleEvent, + resolveTalkForScheduleEvent, shouldShowScheduleSpeakers, } from "@/lib/schedule-speakers"; import { @@ -54,7 +55,7 @@ import { } from "@/lib/schedule-sponsors"; import { resolveSpeakerImageUrl } from "@/lib/speaker-image-url"; import type { SponsorWithTier } from "@/lib/sponsors"; -import { getTalkByTalkKey, getTalkHref } from "@/lib/talks"; +import { getTalkHref } from "@/lib/talks"; import { assetPath, cn } from "@/lib/utils"; type ScheduleCardProps = { @@ -227,9 +228,7 @@ function ScheduleEventCard({ event, t, locale }: ScheduleEventCardProps) { const keynote = event.keynoteSlug ? getLocalizedKeynote(event.keynoteSlug, locale) : undefined; - const talk = event.talkKey - ? getTalkByTalkKey(event.talkKey, locale) - : undefined; + const talk = resolveTalkForScheduleEvent(event, locale); const eventSpeakers = resolveSpeakersForScheduleEvent(event, locale); const showSpeakers = shouldShowScheduleSpeakers(event, eventSpeakers) && diff --git a/src/lib/i18n/blocks-en.ts b/src/lib/i18n/blocks-en.ts index 6feeb12..bb8ce72 100644 --- a/src/lib/i18n/blocks-en.ts +++ b/src/lib/i18n/blocks-en.ts @@ -112,8 +112,10 @@ export const blocksEn = { "jesus-mena": "Auditorium Co-host", "yurley-sanchez-florez": "Auditorium Co-host", "veruzka-borges": "Auditorium Co-host", - "juan-camilo-velasquez": "Keynotes Patron", - "mateo-usme-valencia": "Keynotes Patron", + "juan-camilo-velasquez": "Keynotes Godfather", + "mateo-usme-valencia": "Keynotes Godfather", + "alejandro-alvarez": "Social Networks", + "jenny-acuna": "Logistics", }, }, }, diff --git a/src/lib/i18n/blocks-es.ts b/src/lib/i18n/blocks-es.ts index 285b52a..3325e72 100644 --- a/src/lib/i18n/blocks-es.ts +++ b/src/lib/i18n/blocks-es.ts @@ -118,6 +118,8 @@ export const blocksEs: BlocksMessages = { "veruzka-borges": "Co-host de auditorio", "juan-camilo-velasquez": "Padrino Keynotes", "mateo-usme-valencia": "Padrino Keynotes", + "alejandro-alvarez": "Redes Sociales", + "jenny-acuna": "Logística", }, }, }, diff --git a/src/lib/schedule-speakers.ts b/src/lib/schedule-speakers.ts index ca8c0f3..ce71119 100644 --- a/src/lib/schedule-speakers.ts +++ b/src/lib/schedule-speakers.ts @@ -2,7 +2,12 @@ import type { ScheduleEvent } from "@/assets/data/schedule"; import { speakers } from "@/assets/data/speakers"; import { getLocalizedKeynote } from "@/lib/keynotes"; import type { SiteLocale } from "@/lib/site-messages"; -import { getTalkByTalkKey, getTalkSpeakers } from "@/lib/talks"; +import { + getTalkBySpeakerSlug, + getTalkByTalkKey, + getTalkSpeakers, + type Talk, +} from "@/lib/talks"; export type ScheduleEventSpeaker = { name: string; @@ -40,6 +45,44 @@ function resolveSpeakerByName(name: string): ScheduleEventSpeaker { }; } +function getSpeakerNamesFromEvent(event: ScheduleEvent) { + return event.speaker + .split("/") + .map((name) => name.trim()) + .filter(Boolean); +} + +export function resolveTalkForScheduleEvent( + event: ScheduleEvent, + locale: SiteLocale, +): Talk | undefined { + if (event.keynoteSlug) { + return undefined; + } + + if (event.talkKey) { + return getTalkByTalkKey(event.talkKey, locale); + } + + const expectedFormat = event.type === "workshop" ? "workshop" : "talk"; + + for (const name of getSpeakerNamesFromEvent(event)) { + const speaker = speakersByNormalizedName.get(normalizeSpeakerName(name)); + + if (!speaker) { + continue; + } + + const talk = getTalkBySpeakerSlug(speaker.slug, locale); + + if (talk?.format === expectedFormat) { + return talk; + } + } + + return undefined; +} + export function resolveSpeakersForScheduleEvent( event: ScheduleEvent, locale: SiteLocale, @@ -59,24 +102,20 @@ export function resolveSpeakersForScheduleEvent( } } - if (event.talkKey) { - const talk = getTalkByTalkKey(event.talkKey, locale); - - if (talk) { - return getTalkSpeakers(talk, locale).map((speaker) => ({ - name: speaker.name, - slug: speaker.slug, - image: speaker.image, - href: `/speakers/${speaker.slug}`, - })); - } + const talk = resolveTalkForScheduleEvent(event, locale); + + if (talk) { + return getTalkSpeakers(talk, locale).map((speaker) => ({ + name: speaker.name, + slug: speaker.slug, + image: speaker.image, + href: `/speakers/${speaker.slug}`, + })); } - return event.speaker - .split("/") - .map((name) => name.trim()) - .filter(Boolean) - .map((name) => resolveSpeakerByName(name)); + return getSpeakerNamesFromEvent(event).map((name) => + resolveSpeakerByName(name), + ); } export function shouldShowScheduleSpeakers(