view GeoQuiz/ProfileModalView.swift @ 23:02dcebb8cc4a

fix layout issues
author Dennis C. M. <dennis@denniscm.com>
date Thu, 27 Oct 2022 09:17:13 +0200
parents 56add5561261
children 425078c01194
line wrap: on
line source

//
//  ProfileModalView.swift
//  GeoQuiz
//
//  Created by Dennis Concepción Martín on 25/9/22.
//

import SwiftUI

struct ProfileModalView: View {
    @ObservedObject var userController: UserController
    @ObservedObject var storeKitController: StoreKitController
    
    @State private var showingEditModalView = false
    
    @FetchRequest(sortDescriptors: [
        SortDescriptor(\.date, order: .reverse),
    ]) var playedGames: FetchedResults<PlayedGame>
    
    @Environment(\.dismiss) var dismiss
    @Environment(\.managedObjectContext) var moc
    
    var body: some View {
        NavigationStack {
            ScrollView {
                VStack(spacing: 30) {
                    UserProfile(
                        userController: userController,
                        storeKitController: storeKitController,
                        isShowing: $showingEditModalView
                    )
                    
                    if !playedGames.isEmpty {
                        VStack(spacing: 20) {
                            HStack {
                                Text("Latest games")
                                    .foregroundColor(.secondary)
                                
                                Spacer()
                                
                                NavigationLink {
                                    PlayedGamesList()
                                } label: {
                                    HStack {
                                        Text("Show all")
                                        Image(systemName: "chevron.right")
                                    }
                                }
                                .disabled(playedGames.isEmpty)
                            }
                            
                            ForEach(playedGames.prefix(8)) { playedGame in
                                RecentGame(game: playedGame)
                                    .padding()
                                    .background(Color(.secondarySystemGroupedBackground))
                                    .cornerRadius(20)
                            }
                        }
                    }
                }
                .padding()
            }
            .frame(maxWidth: .infinity)
            .navigationTitle("Profile")
            .navigationBarTitleDisplayMode(.inline)
            .background(Color(.systemGroupedBackground))
            .toolbar {
                ToolbarItem(placement: .cancellationAction) {
                    Button {
                        dismiss()
                    } label: {
                        Label("Exit", systemImage: "multiply")
                    }
                }
            }
            
            .sheet(isPresented: $showingEditModalView) {
                ProfileEditModalView(userController: userController)
            }
            
            #if DEBUG
            .onAppear {
                if playedGames.isEmpty {
                    PersistenceController.createMockData(with: moc)
                }
            }
            #endif
        }
    }
}

struct ProfileView_Previews: PreviewProvider {
    static var previews: some View {
        ProfileModalView(userController: UserController(), storeKitController: StoreKitController())
            .environment(\.managedObjectContext, PersistenceController.preview.container.viewContext)
    }
}