// // ProfileView.swift // BeReal // // Created by Javier Cicchelli on 03/12/2022. // Copyright © 2022 Röck+Cöde. All rights reserved. // import DataModels import SwiftUI public struct ProfileView: View { // MARK: Environments @Environment(\.dismiss) private var dismiss // MARK: Properties private let user: User? private let logout: ActionClosure private let stringAdapter = StringAdapter() private let dateAdapter = DateAdapter() // MARK: Initialisers public init( user: User?, logout: @escaping ActionClosure ) { self.user = user self.logout = logout } // MARK: Body public var body: some View { DismissableView { ClearBackgroundList { Section { Image.photo .resizable() .scaledToFit() .frame(width: 160) .frame(maxWidth: .infinity) } .listRowBackground(Color.clear) Group { ProfileSection( header: "profile.sections.names.header.text", items: [ .init( key: "profile.sections.names.label.first_name.text", value: stringAdapter(value: user?.profile.firstName) ), .init( key: "profile.sections.names.label.last_name.text", value: stringAdapter(value: user?.profile.lastName) ) ] ) ProfileSection( header: "profile.sections.root_info.header.text", items: [ .init( key: "profile.sections.root_info.label.identifier.text", value: stringAdapter(value: user?.rootFolder.id) ), .init( key: "profile.sections.root_info.label.name.text", value: stringAdapter(value: user?.rootFolder.name) ), .init( key: "profile.sections.root_info.label.last_modified.text", value: dateAdapter(value: user?.rootFolder.lastModifiedAt) ) ] ) } .listRowBackground(Color.secondary.colorInvert()) Section { Button { logout() } label: { Text( "profile.button.log_out.text", bundle: .module ) .font(.body) .fontWeight(.semibold) .frame(maxWidth: .infinity) } .tint(.red) .controlSize(.large) .buttonStyle(.borderedProminent) .buttonBorderShape(.roundedRectangle(radius: 8)) } .listRowBackground(Color.clear) } .background(Color.primary.colorInvert()) } } } // MARK: - Images+Constants private extension Image { static let photo = Image(systemName: "person.crop.circle.fill") } // MARK: - Previews struct ProfileView_Previews: PreviewProvider { static var previews: some View { ProfileView(user: .init( profile: .init( firstName: "Some first name...", lastName: "Some last name..." ), rootFolder: .init( id: "1234567890", name: "Some folder name...", lastModifiedAt: .now ) )) { // closure for logout action. } } }