Skip to content

Commit

Permalink
Merge pull request #176 from DroidKaigi/feature/timetable-feature-con…
Browse files Browse the repository at this point in the history
…nect-a

Attempt at connecting lower data to iOS UI
  • Loading branch information
charles-b-stb authored Aug 10, 2024
2 parents 3d6a2e4 + 89537c8 commit d037aa2
Show file tree
Hide file tree
Showing 3 changed files with 102 additions and 277 deletions.
253 changes: 23 additions & 230 deletions app-ios/Sources/TimetableFeature/SampleData.swift
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import Foundation
import shared

public enum DayTab: String, CaseIterable, Identifiable {
public enum DayTab: String, CaseIterable, Identifiable, Sendable {
public var id : RawValue { rawValue }

case workshopDay = "WorkshopDay"
Expand All @@ -20,255 +21,47 @@ public struct TimetableTimeGroupItems: Identifiable, Equatable, Hashable {

public let startsTimeString: String
public let endsTimeString: String
public let items: [TimetableItem]
public var items: [shared.TimetableItemWithFavorite]

public init(startsTimeString: String, endsTimeString: String, items: [TimetableItem]) {
public init(startsTimeString: String, endsTimeString: String, items: [shared.TimetableItemWithFavorite]) {
self.startsTimeString = startsTimeString
self.endsTimeString = endsTimeString
self.items = items
}
}

public struct TimetableItem: Equatable, Hashable {
let id: String //Not used yet
let title: String
let startsAt: Date
let endsAt: Date
let category: String
let sessionType: String
let room: String
let targetAudience: String
let languages: [String]
let asset: String
let levels: [String]
let speakers: [String]

let isFavorite: Bool

//TODO: This object is likely to change a lot when we get live data changes
}

// This exists only for previews now.
struct SampleData {
let workdayResults = [
TimetableTimeGroupItems(startsTimeString:"12:00", endsTimeString:"13:00", items: [
TimetableItem(
id: "",
title: "DroidKaigiアプリで見るアーキテクチャの変遷",
startsAt: try! Date("2024-09-11T12:00:00Z", strategy: .iso8601),
endsAt: try! Date("2024-09-11T13:00:00Z", strategy: .iso8601),
category: "",
sessionType: "",
room: "Flamingo", targetAudience: "", languages: ["EN", "JA"],
asset:"", levels: [""],
speakers: ["Maria Rodriguez"],
isFavorite:false
),
TimetableItem(
id: "",
title: "DroidKaigiアプリで見るアーキテクチャの変遷",
startsAt: try! Date("2024-09-11T12:00:00Z", strategy: .iso8601),
endsAt: try! Date("2024-09-11T13:00:00Z", strategy: .iso8601),
category: "",
sessionType: "",
room: "Flamingo", targetAudience: "", languages: ["EN", "JA"],
asset:"", levels: [""],
speakers: ["Maria Rodriguez"],
isFavorite:false
),
TimetableItem(
id: "",
title: "DroidKaigiアプリで見るアーキテクチャの変遷",
startsAt: try! Date("2024-09-11T12:00:00Z", strategy: .iso8601),
endsAt: try! Date("2024-09-11T13:00:00Z", strategy: .iso8601),
category: "",
sessionType: "",
room: "Flamingo", targetAudience: "", languages: ["EN", "JA"],
asset:"", levels: [""],
speakers: ["Maria Rodriguez"],
isFavorite:false)
]),
TimetableItemWithFavorite(timetableItem: TimetableItem.Session.companion.fake(), isFavorited: false),
TimetableItemWithFavorite(timetableItem: TimetableItem.Session.companion.fake(), isFavorited: false),
TimetableItemWithFavorite(timetableItem: TimetableItem.Session.companion.fake(), isFavorited: false)]),
TimetableTimeGroupItems(startsTimeString:"13:00", endsTimeString:"14:00", items: [
TimetableItem(
id: "",
title: "DroidKaigiアプリで見るアーキテクチャの変遷",
startsAt: try! Date("2024-09-11T13:00:00Z", strategy: .iso8601),
endsAt: try! Date("2024-09-11T14:00:00Z", strategy: .iso8601),
category: "",
sessionType: "",
room: "Flamingo", targetAudience: "", languages: ["EN", "JA"],
asset:"", levels: [""],
speakers: ["Maria Rodriguez"],
isFavorite:false
),
TimetableItem(
id: "",
title: "DroidKaigiアプリで見るアーキテクチャの変遷",
startsAt: try! Date("2024-09-11T13:00:00Z", strategy: .iso8601),
endsAt: try! Date("2024-09-11T14:00:00Z", strategy: .iso8601),
category: "",
sessionType: "",
room: "Flamingo", targetAudience: "", languages: ["EN", "JA"],
asset:"", levels: [""],
speakers: ["Maria Rodriguez"],
isFavorite:false
),
TimetableItem(
id: "",
title: "DroidKaigiアプリで見るアーキテクチャの変遷",
startsAt: try! Date("2024-09-11T13:00:00Z", strategy: .iso8601),
endsAt: try! Date("2024-09-11T14:00:00Z", strategy: .iso8601),
category: "",
sessionType: "",
room: "Flamingo", targetAudience: "", languages: ["EN", "JA"],
asset:"", levels: [""],
speakers: ["Maria Rodriguez"],
isFavorite:false)
])
TimetableItemWithFavorite(timetableItem: TimetableItem.Session.companion.fake(), isFavorited: false),
TimetableItemWithFavorite(timetableItem: TimetableItem.Session.companion.fake(), isFavorited: false),
TimetableItemWithFavorite(timetableItem: TimetableItem.Session.companion.fake(), isFavorited: false)]),
]

let day1Results = [
TimetableTimeGroupItems(startsTimeString:"12:00", endsTimeString:"13:00", items: [
TimetableItem(
id: "",
title: "A Beginner's Guide to Understanding the Latest Android Technology",
startsAt: try! Date("2024-09-12T12:00:00Z", strategy: .iso8601),
endsAt: try! Date("2024-09-12T13:00:00Z", strategy: .iso8601),
category: "",
sessionType: "",
room: "Flamingo", targetAudience: "", languages: ["EN", "JA"],
asset:"", levels: [""],
speakers: ["Kelvin Lueilwitz"],
isFavorite:false),
TimetableItem(
id: "",
title: "How to Stay Updated on the Newest Android Technology Innovations",
startsAt: try! Date("2024-09-12T12:00:00Z", strategy: .iso8601),
endsAt: try! Date("2024-09-12T13:00:00Z", strategy: .iso8601),
category: "",
sessionType: "",
room: "Flamingo", targetAudience: "", languages: ["EN", "JA"],
asset:"", levels: [""],
speakers: ["Mallory Turner"],
isFavorite:false),
TimetableItem(
id: "",
title: "The Ultimate Guide to Exploring the Latest Android Technology Features",
startsAt: try! Date("2024-09-12T12:00:00Z", strategy: .iso8601),
endsAt: try! Date("2024-09-12T13:00:00Z", strategy: .iso8601),
category: "",
sessionType: "",
room: "Flamingo", targetAudience: "", languages: ["EN", "JA"],
asset:"", levels: [""],
speakers: ["Clementina Mills"],
isFavorite:false)
]),
TimetableItemWithFavorite(timetableItem: TimetableItem.Session.companion.fake(), isFavorited: false),
TimetableItemWithFavorite(timetableItem: TimetableItem.Session.companion.fake(), isFavorited: false),
TimetableItemWithFavorite(timetableItem: TimetableItem.Session.companion.fake(), isFavorited: false)]),
TimetableTimeGroupItems(startsTimeString:"13:00", endsTimeString:"14:00", items: [
TimetableItem(
id: "",
title: "A Beginner's Guide to Understanding the Latest Android Technology",
startsAt: try! Date("2024-09-12T13:00:00Z", strategy: .iso8601),
endsAt: try! Date("2024-09-12T14:00:00Z", strategy: .iso8601),
category: "",
sessionType: "",
room: "Flamingo", targetAudience: "", languages: ["EN", "JA"],
asset:"", levels: [""],
speakers: ["Kelvin Lueilwitz"],
isFavorite:false),
TimetableItem(
id: "",
title: "How to Stay Updated on the Newest Android Technology Innovations",
startsAt: try! Date("2024-09-12T13:00:00Z", strategy: .iso8601),
endsAt: try! Date("2024-09-12T14:00:00Z", strategy: .iso8601),
category: "",
sessionType: "",
room: "Flamingo", targetAudience: "", languages: ["EN", "JA"],
asset:"", levels: [""],
speakers: ["Mallory Turner"],
isFavorite:false),
TimetableItem(
id: "",
title: "The Ultimate Guide to Exploring the Latest Android Technology Features",
startsAt: try! Date("2024-09-12T13:00:00Z", strategy: .iso8601),
endsAt: try! Date("2024-09-12T14:00:00Z", strategy: .iso8601),
category: "",
sessionType: "",
room: "Flamingo", targetAudience: "", languages: ["EN", "JA"],
asset:"", levels: [""],
speakers: ["Clementina Mills"],
isFavorite:false)
])
TimetableItemWithFavorite(timetableItem: TimetableItem.Session.companion.fake(), isFavorited: false),
TimetableItemWithFavorite(timetableItem: TimetableItem.Session.companion.fake(), isFavorited: false),
TimetableItemWithFavorite(timetableItem: TimetableItem.Session.companion.fake(), isFavorited: false)]),
]

let day2Results = [
TimetableTimeGroupItems(startsTimeString:"12:00", endsTimeString:"13:00", items: [
TimetableItem(
id: "",
title: "Why Should You Invest in the Newest Android Technology?",
startsAt: try! Date("2024-09-13T12:00:00Z", strategy: .iso8601),
endsAt: try! Date("2024-09-13T13:00:00Z", strategy: .iso8601),
category: "",
sessionType: "",
room: "Flamingo", targetAudience: "", languages: ["EN", "JA"],
asset:"", levels: [""],
speakers: ["Waldo Torp"],
isFavorite:false),
TimetableItem(
id: "",
title: "5 Ways the Newest Android Technology is Changing the Tech Industry",
startsAt: try! Date("2024-09-13T12:00:00Z", strategy: .iso8601),
endsAt: try! Date("2024-09-13T13:00:00Z", strategy: .iso8601),
category: "",
sessionType: "",
room: "Flamingo", targetAudience: "", languages: ["EN", "JA"],
asset:"", levels: [""],
speakers: ["Baron Stracke"],
isFavorite:false),
TimetableItem(
id: "",
title: "The Ultimate List of Resources for Learning More About the Latest Android Technology",
startsAt: try! Date("2024-09-13T12:00:00Z", strategy: .iso8601),
endsAt: try! Date("2024-09-13T13:00:00Z", strategy: .iso8601),
category: "",
sessionType: "",
room: "Flamingo", targetAudience: "", languages: ["EN", "JA"],
asset:"", levels: [""],
speakers: ["Carole Volkman"],
isFavorite:false)
]),
TimetableItemWithFavorite(timetableItem: TimetableItem.Session.companion.fake(), isFavorited: false),
TimetableItemWithFavorite(timetableItem: TimetableItem.Session.companion.fake(), isFavorited: false),
TimetableItemWithFavorite(timetableItem: TimetableItem.Session.companion.fake(), isFavorited: false)]),
TimetableTimeGroupItems(startsTimeString:"13:00", endsTimeString:"14:00", items: [
TimetableItem(
id: "",
title: "Why Should You Invest in the Newest Android Technology?",
startsAt: try! Date("2024-09-13T13:00:00Z", strategy: .iso8601),
endsAt: try! Date("2024-09-13T14:00:00Z", strategy: .iso8601),
category: "",
sessionType: "",
room: "Flamingo", targetAudience: "", languages: ["EN", "JA"],
asset:"", levels: [""],
speakers: ["Waldo Torp"],
isFavorite:false),
TimetableItem(
id: "",
title: "5 Ways the Newest Android Technology is Changing the Tech Industry",
startsAt: try! Date("2024-09-13T13:00:00Z", strategy: .iso8601),
endsAt: try! Date("2024-09-13T14:00:00Z", strategy: .iso8601),
category: "",
sessionType: "",
room: "Flamingo", targetAudience: "", languages: ["EN", "JA"],
asset:"", levels: [""],
speakers: ["Baron Stracke"],
isFavorite:false),
TimetableItem(
id: "",
title: "The Ultimate List of Resources for Learning More About the Latest Android Technology",
startsAt: try! Date("2024-09-13T13:00:00Z", strategy: .iso8601),
endsAt: try! Date("2024-09-13T14:00:00Z", strategy: .iso8601),
category: "",
sessionType: "",
room: "Flamingo", targetAudience: "", languages: ["EN", "JA"],
asset:"", levels: [""],
speakers: ["Carole Volkman"],
isFavorite:false)
])
TimetableItemWithFavorite(timetableItem: TimetableItem.Session.companion.fake(), isFavorited: false),
TimetableItemWithFavorite(timetableItem: TimetableItem.Session.companion.fake(), isFavorited: false),
TimetableItemWithFavorite(timetableItem: TimetableItem.Session.companion.fake(), isFavorited: false)]),
]
}
45 changes: 15 additions & 30 deletions app-ios/Sources/TimetableFeature/TimetableListView.swift
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import ComposableArchitecture
import CommonComponents
import SwiftUI
import Theme
import shared

public struct TimetableView: View {
private let store: StoreOf<TimetableReducer>
Expand Down Expand Up @@ -91,7 +93,9 @@ struct TimetableListView: View {
Button {
store.send(.view(.timetableItemTapped))
} label: {
TimeGroupMiniList(contents: item)
TimeGroupMiniList(contents: item, onItemTap: { item in
store.send(.view(.timetableItemTapped))
})
}
}
}.scrollContentBackground(.hidden)
Expand All @@ -105,6 +109,7 @@ struct TimetableListView: View {

struct TimeGroupMiniList: View {
let contents: TimetableTimeGroupItems
let onItemTap: (TimetableItemWithFavorite) -> Void

var body: some View {
HStack {
Expand All @@ -116,45 +121,25 @@ struct TimeGroupMiniList: View {
}.padding(10).foregroundStyle(AssetColors.Surface.onSurface.swiftUIColor)
VStack {
ForEach(contents.items, id: \.self) { item in
ListViewItem(listItem: item)
TimetableCard(
timetableItem: item.timetableItem,
isFavorite: item.isFavorited,
onTap: {_ in
onItemTap(item)
},
onTapFavorite: {_ in
})
}
}
}.background(Color.clear)

}
}

struct ListViewItem: View {
let listItem: TimetableItem

public var body: some View {
VStack(alignment: .leading) {
HStack {
TagView(tagText: listItem.room, highlight: true)
ForEach(listItem.languages, id: \.self) { lang in
TagView(tagText: lang, highlight: false)
}
Spacer()
Image(systemName: listItem.isFavorite ? "heart.fill" : "heart").foregroundStyle(AssetColors.Surface.onSurface.swiftUIColor)
}
Text(listItem.title).font(.title)
ForEach(listItem.speakers, id: \.self){ speaker in
PhotoView(photo:"person.circle.fill",
name: speaker)
}


}.foregroundStyle(AssetColors.Surface.onSurface.swiftUIColor).padding(10)
.overlay(
RoundedRectangle(cornerRadius: 5)
.stroke(AssetColors.Surface.onSurface.swiftUIColor, lineWidth: 1)
)
}
}

struct TagView: View {
let tagText: String
let highlight: Bool

var body: some View {
HStack {
if highlight {
Expand Down
Loading

0 comments on commit d037aa2

Please sign in to comment.