diff --git a/Resources/App/Images/speakers/agam-dua.png b/Resources/App/Images/speakers/agam-dua.png new file mode 100644 index 00000000..2c140375 Binary files /dev/null and b/Resources/App/Images/speakers/agam-dua.png differ diff --git a/Resources/App/Images/speakers/nick-shook.png b/Resources/App/Images/speakers/nick-shook.png new file mode 100644 index 00000000..0765eaf8 Binary files /dev/null and b/Resources/App/Images/speakers/nick-shook.png differ diff --git a/Sources/Conference/Components/Schedule.swift b/Sources/Conference/Components/Schedule.swift index 13799b81..a1269436 100644 --- a/Sources/Conference/Components/Schedule.swift +++ b/Sources/Conference/Components/Schedule.swift @@ -26,7 +26,7 @@ struct Schedule: Component { } TableRow { TableCell("9:30 - 12:30").class("text-center font-weight-bold") - createWorkshopRow(speakerName: "Daniel Steinberg") + createWorkshopRow(speakers: [AllSpeakers.instructors[0], AllSpeakers.instructors[3]]) createWorkshopRow(speakerName: "Matt Massicotte") } TableRow { @@ -35,7 +35,7 @@ struct Schedule: Component { } TableRow { TableCell("14:00 - 17:00").class("text-center font-weight-bold") - createWorkshopRow(speakerName: "Daniel Steinberg") + createWorkshopRow(speakerName: "Agam Dua") createWorkshopRow(speakerName: "Frank Lefebvre") } }.class("table table-striped table-bordered") @@ -240,7 +240,7 @@ struct Schedule: Component { func createWorkshopRow(speakerName: String) -> TableCell { if let speaker = AllSpeakers.instructors.first(where: { $0.name == speakerName }) { - return createWorkshopRow(speaker: speaker) + return createWorkshopRow(speakers: [speaker]) } else { return TableCell { Div { @@ -250,22 +250,28 @@ struct Schedule: Component { } } - func createWorkshopRow(speaker: Speaker) -> TableCell { + func createWorkshopRow(speakers: [Speaker]) -> TableCell { TableCell { Div { Div { - Span { + for speaker in speakers { + Span { Link(url: "/speakers/\(speaker.url)") { Image(url: speaker.image, description: speaker.name) } }.class("avatar") + } }.class("avatars") Div { List { - Link(speaker.name, url: "/speakers/\(speaker.url)").class("speakers-list-speaker-name") + for speaker in speakers { + ListItem { + Link(speaker.name, url: "/speakers/\(speaker.url)").class("speakers-list-speaker-name") + } + } }.class("speaker-list") Node.br() - if let talk = speaker.talks.first(where: { $0.isWorkshop }) { + if let talk = speakers.first?.talks.first(where: { $0.isWorkshop }) { Node.a( .attribute(named: "href"), .attribute(named: "data-toggle", value: "modal"), diff --git a/Sources/Conference/Models/Speaker.swift b/Sources/Conference/Models/Speaker.swift index fdeacee9..6f1864a2 100644 --- a/Sources/Conference/Models/Speaker.swift +++ b/Sources/Conference/Models/Speaker.swift @@ -74,7 +74,8 @@ struct AllSpeakers { allSpeakers[0], allSpeakers[3], allSpeakers[15], - + allSpeakers[16], + allSpeakers[17] ] static let speakers: [Speaker] = Array(allSpeakers[1...14]) static let allSpeakers: [Speaker] = [ @@ -257,7 +258,23 @@ struct AllSpeakers { linkedIn: "https://www.linkedin.com/in/franklefebvre", bio: "Frank has been developing software for Apple platforms since 1985. As a freelance developer, he usually works on low-level and AV-related software for macOS, iOS and visionOS, as well as server-side Swift applications. He is also an Apple-certified trainer, and he provides mentoring on server-side Swift and iOS development with SwiftUI.", talkIDs: [15] - ) + ), + Speaker( + name: "Nick Shook", + role: "Engineer on the Swift Server Ecosystem team", + company: "Apple", + image: "/App/Images/speakers/nick-shook.png", + bio: "I'm Nick, a Vegas native and current Seattlite. Before joining the Swift team, I spent a decade building FinTech systems including at Apple Finance and was a startup attorney advising technology and cannabis companies. I'm passionate about encouraging Swift to be the de facto choice for all teams writing software because I believe in its full-range of applications.", + talkIDs: [17] + ), + Speaker( + name: "Agam Dua", + role: "Technical Lead on the Swift Server Ecosystem & Education team", + company: "Apple", + image: "/App/Images/speakers/agam-dua.png", + bio: "Agam loves writing Swift for systems, containers & servers, especially open source projects. He recently helped ship Containerization and swift-ntp as OSS libraries from Apple and continues to building libraries to grow the Swift ecosystem. When he's not writing code, he teaches workshops to show others why he has so much fun writing Swift.", + talkIDs: [17] + ), ] }