struct RecommendationsView: View {
@State private var inviteRecommendations: [ContactRecommendation] = []
@State private var appUsers: [LocalCanonicalContact] = []
@State private var peopleYouMightKnow: [CanonicalContact] = []
@State private var isLoading = true
@State private var error: Error?
var body: some View {
ScrollView {
if isLoading {
ProgressView("Loading recommendations...")
.padding()
} else if let error = error {
VStack {
Text("Error loading recommendations")
.font(.headline)
Text(error.localizedDescription)
.foregroundColor(.red)
Button("Try Again") {
loadRecommendations()
}
.padding()
}
} else {
VStack(alignment: .leading, spacing: 20) {
// App Users Section
if !appUsers.isEmpty {
Text("People you know using the app")
.font(.headline)
.padding(.horizontal)
ScrollView(.horizontal, showsIndicators: false) {
HStack(spacing: 12) {
ForEach(appUsers, id: \.canonicalContact.id) { user in
AppUserCard(user: user)
}
}
.padding(.horizontal)
}
}
// People You Might Know Section
if !peopleYouMightKnow.isEmpty {
Text("People you might know")
.font(.headline)
.padding(.horizontal)
ScrollView(.horizontal, showsIndicators: false) {
HStack(spacing: 12) {
ForEach(peopleYouMightKnow, id: \.id) { user in
PeopleYouMightKnowCard(user: user)
}
}
.padding(.horizontal)
}
}
// Invite Recommendations Section
if !inviteRecommendations.isEmpty {
Text("Invite to the app")
.font(.headline)
.padding(.horizontal)
ScrollView(.horizontal, showsIndicators: false) {
HStack(spacing: 12) {
ForEach(inviteRecommendations, id: \.contact.id) {
recommendation in
InviteRecommendationCard(
recommendation: recommendation
)
}
}
.padding(.horizontal)
}
}
}
}
}
.navigationTitle("Recommendations")
.onAppear {
loadRecommendations()
}
}
}