Correction of the visual and refresh the Allcoins of a user 🔨

pull/21/head
Emre KARTAL 1 year ago
parent 86b6e0c765
commit 4238358cb6

@ -12,7 +12,7 @@ class AppStateContainer: ObservableObject {
static let shared = AppStateContainer() static let shared = AppStateContainer()
let loggedState: LoggedState = LoggedState() let loggedState: LoggedState = LoggedState()
var onlineStatus: OnlineStatus = OnlineStatus() var onlineStatus: OnlineStatus = OnlineStatus()
var user: User? @Published var user: User?
@AppStorage("authenticationRefresh") var authenticationRefresh: String? @AppStorage("authenticationRefresh") var authenticationRefresh: String?
} }

@ -8,14 +8,17 @@
import SwiftUI import SwiftUI
struct AllcoinsCounter: View { struct AllcoinsCounter: View {
var backgroundColor: Color = .white var backgroundColor: Color = .white
var foregroundColor: Color = AllInColors.primaryColor var foregroundColor: Color = AllInColors.primaryColor
@ObservedObject var appStateContainer = AppStateContainer.shared
var body: some View { var body: some View {
HStack(alignment: .center) { HStack(alignment: .center) {
Image("allcoinIcon") Image("allcoinIcon")
.resizable() .resizable()
.frame(width: 17, height: 17, alignment: .leading) .frame(width: 17, height: 17, alignment: .leading)
Text(String(AppStateContainer.shared.user?.nbCoins ?? 0)) Text(String(appStateContainer.user?.nbCoins ?? 0))
.fontWeight(.black) .fontWeight(.black)
.foregroundColor(foregroundColor) .foregroundColor(foregroundColor)
} }

@ -31,7 +31,9 @@ struct BetCard: View {
.font(.system(size: 20)) .font(.system(size: 20))
.fontWeight(.bold) .fontWeight(.bold)
HStack{ HStack{
Text("Commence le").font(.system(size: 15)).foregroundColor(AllInColors.grey800Color) Text("Commence le")
.font(.system(size: 15))
.foregroundColor(AllInColors.grey800Color)
TextCapsule(date: bet.endRegisterDate) TextCapsule(date: bet.endRegisterDate)
Spacer() Spacer()
} }
@ -44,13 +46,14 @@ struct BetCard: View {
HStack{ HStack{
Spacer() Spacer()
UsersPreview() UsersPreview()
Text(String(bet.registered.count) + " joueurs en attente") Text(bet.registered.count.description + " joueurs en attente")
.font(.system(size: 15)) .font(.system(size: 15))
.foregroundColor(AllInColors.grey800Color) .foregroundColor(AllInColors.grey800Color)
.fontWeight(.medium) .fontWeight(.medium)
Spacer() Spacer()
}.padding(0) }
.padding(0)
ParticipateButton(isOpen: $showDetails, isParticapatedOpen: $showParticipate, bet: bet) ParticipateButton(isOpen: $showDetails, isParticapatedOpen: $showParticipate, bet: bet)
.padding(.top, 5) .padding(.top, 5)
} }
@ -60,6 +63,7 @@ struct BetCard: View {
.cornerRadius(20, corners: [.bottomLeft,.bottomRight]) .cornerRadius(20, corners: [.bottomLeft,.bottomRight])
.border(width: 1, edges: [.top], color: AllInColors.delimiterGrey) .border(width: 1, edges: [.top], color: AllInColors.delimiterGrey)
} }
.onTapGesture { .onTapGesture {
showDetails.toggle() showDetails.toggle()
} }

@ -23,17 +23,14 @@ struct BetLineLoading: View {
return totalParticipations > 0 ? CGFloat(numberOfYes) / CGFloat(totalParticipations) : 0.0 return totalParticipations > 0 ? CGFloat(numberOfYes) / CGFloat(totalParticipations) : 0.0
} }
var yesParticipations: [Participation] { var yesParticipations: [Participation] {
return participations.filter { $0.response.uppercased() == "YES" } participations.filter { $0.response.uppercased() == "YES" }
} }
var noParticipations: [Participation] { var noParticipations: [Participation] {
return participations.filter { $0.response.uppercased() == "NO" } participations.filter { $0.response.uppercased() == "NO" }
} }
var body: some View { var body: some View {
GeometryReader { geometry in GeometryReader { geometry in
VStack(alignment: .leading,spacing: 0){ VStack(alignment: .leading,spacing: 0){
@ -62,7 +59,6 @@ struct BetLineLoading: View {
.frame(width: min(CGFloat(self.value) * geometry.size.width, geometry.size.width), height: 17) .frame(width: min(CGFloat(self.value) * geometry.size.width, geometry.size.width), height: 17)
.foregroundStyle(AllInColors.BlueBetGradiant) .foregroundStyle(AllInColors.BlueBetGradiant)
.cornerRadius(999) .cornerRadius(999)
.animation(.linear)
Image("loadingHeartIcon") Image("loadingHeartIcon")
.resizable() .resizable()
.frame(width: 29, height: 32) .frame(width: 29, height: 32)
@ -86,13 +82,13 @@ struct BetLineLoading: View {
.foregroundColor(AllInColors.pink100) .foregroundColor(AllInColors.pink100)
Image("pinkAllCoinIcon") Image("pinkAllCoinIcon")
.resizable() .resizable()
.frame(width:10, height: 14) .frame(width: 12, height: 12)
} }
HStack(spacing: 5){ HStack(spacing: 5){
Image("bluePersonIcon") Image("bluePersonIcon")
.resizable() .resizable()
.frame(width:14, height: 12) .frame(width: 12, height: 12)
Text(yesParticipations.count.description) Text(yesParticipations.count.description)
.font(.system(size: 15)) .font(.system(size: 15))
.fontWeight(.bold) .fontWeight(.bold)
@ -104,13 +100,13 @@ struct BetLineLoading: View {
.foregroundColor(AllInColors.pink100) .foregroundColor(AllInColors.pink100)
Image("pinkPersonIcon") Image("pinkPersonIcon")
.resizable() .resizable()
.frame(width:10, height: 14) .frame(width: 12, height: 12)
} }
HStack(spacing: 5){ HStack(spacing: 5){
Image("blueBadgeIcon") Image("blueBadgeIcon")
.resizable() .resizable()
.frame(width:10, height: 14) .frame(width: 12, height: 12)
Text(yesParticipations.max(by: { $0.stake < $1.stake })?.stake.description ?? "0") Text(yesParticipations.max(by: { $0.stake < $1.stake })?.stake.description ?? "0")
.font(.system(size: 15)) .font(.system(size: 15))
.fontWeight(.bold) .fontWeight(.bold)
@ -122,13 +118,13 @@ struct BetLineLoading: View {
.foregroundColor(AllInColors.pink100) .foregroundColor(AllInColors.pink100)
Image("pinkBadgeIcon") Image("pinkBadgeIcon")
.resizable() .resizable()
.frame(width:10, height: 14) .frame(width: 12, height: 12)
} }
HStack(spacing: 5){ HStack(spacing: 5){
Image("blueTrophyIcon") Image("blueTrophyIcon")
.resizable() .resizable()
.frame(width:14, height: 13) .frame(width: 12, height: 12)
Text("1.2") Text("1.2")
.font(.system(size: 15)) .font(.system(size: 15))
.fontWeight(.bold) .fontWeight(.bold)
@ -140,7 +136,7 @@ struct BetLineLoading: View {
.foregroundColor(AllInColors.pink100) .foregroundColor(AllInColors.pink100)
Image("pinkTrophyIcon") Image("pinkTrophyIcon")
.resizable() .resizable()
.frame(width:10, height: 14) .frame(width:12, height: 12)
} }
} }

@ -62,11 +62,10 @@ struct DropDownAnswerMenu: View {
.padding([.leading, .trailing], 15) .padding([.leading, .trailing], 15)
} }
}) })
.frame(width: .infinity)
.background(AllInColors.componentBackgroundColor) .background(AllInColors.componentBackgroundColor)
.cornerRadius(10) .cornerRadius(8)
.overlay( .overlay(
RoundedRectangle(cornerRadius: 10, style: .continuous) RoundedRectangle(cornerRadius: 8, style: .continuous)
.stroke(AllInColors.veryLightPurpleColor, lineWidth: 0.4) .stroke(AllInColors.veryLightPurpleColor, lineWidth: 0.4)
) )
} }

@ -12,17 +12,23 @@ struct ParticiationCell: View {
@State var participation: Participation? @State var participation: Participation?
var body: some View { var body: some View {
HStack(alignment: .center, spacing: 0){ HStack(alignment: .center, spacing: 0){
Circle().frame(width: 30, height: 30).foregroundColor(AllInColors.grey700Color).padding(.trailing, 5) Circle()
.frame(width: 30, height: 30)
.foregroundColor(AllInColors.grey700Color)
.padding(.trailing, 7)
Text(participation?.user.username ?? "Unknown") Text(participation?.user.username ?? "Unknown")
.font(.system(size: 15)) .font(.system(size: 15))
.foregroundStyle(AllInColors.grey100Color) .foregroundStyle(AllInColors.primaryTextColor)
.fontWeight(.semibold) .fontWeight(.semibold)
Spacer() Spacer()
Text(participation?.stake.description ?? "NaN") Text(participation?.stake.description ?? "NaN")
.font(.system(size: 18)) .font(.system(size: 18))
.foregroundStyle(AllInColors.lightPurpleColor) .foregroundStyle(AllInColors.lightPurpleColor)
.fontWeight(.bold).padding(.trailing, 5) .fontWeight(.bold)
Image("PurpleAllCoin").resizable().frame(width: 11, height: 12) .padding(.trailing, 8)
Image("PurpleAllCoin")
.resizable()
.frame(width: 11, height: 12)
} }
} }
} }

@ -66,6 +66,7 @@ struct ParticipateButton: View {
.overlay( .overlay(
RoundedRectangle(cornerRadius: 12).stroke(AllInColors.delimiterGrey, lineWidth: 1) RoundedRectangle(cornerRadius: 12).stroke(AllInColors.delimiterGrey, lineWidth: 1)
) )
}.disabled(isDisabled) }
.disabled(isDisabled)
} }
} }

@ -13,6 +13,13 @@ struct ParticipationModal: View {
@Binding private var mise: String @Binding private var mise: String
private var description: String private var description: String
var participationAddedCallback: (() -> Void)? var participationAddedCallback: (() -> Void)?
var possibleGain: Int {
if let stake = Float(mise), let selectedOption = options.first(where: { $0.0 == self.selectedOption }) {
return Int(round(stake * selectedOption.2))
} else {
return 0
}
}
init(answer: Binding<Int>, mise: Binding<String>, description: String, participationAddedCallback: (() -> Void)? = nil) { init(answer: Binding<Int>, mise: Binding<String>, description: String, participationAddedCallback: (() -> Void)? = nil) {
self._selectedOption = answer self._selectedOption = answer
@ -27,23 +34,25 @@ struct ParticipationModal: View {
] ]
var body: some View { var body: some View {
GeometryReader { geometry in
VStack(alignment: .leading){ VStack(alignment: .leading){
HStack{ HStack{
Spacer() Spacer()
Rectangle() Rectangle()
.foregroundStyle(AllInColors.grey800Color) .foregroundStyle(AllInColors.lightGrey300Color)
.frame(maxWidth: 80, maxHeight: 5) .frame(maxWidth: 80, maxHeight: 5)
.cornerRadius(999) .cornerRadius(999)
Spacer() Spacer()
}.padding(10) }
.padding(10)
HStack{ HStack{
Text("Faites vos paris") Text("Faites vos paris")
.font(.system(size: 18)) .font(.system(size: 18))
.foregroundColor(AllInColors.primaryTextColor) .foregroundColor(AllInColors.primaryTextColor)
.fontWeight(.semibold) .fontWeight(.semibold)
Spacer() Spacer()
AllcoinsCounter(backgroundColor: AllInColors.purpleAccentColor, foregroundColor: .white) AllcoinsCounter(backgroundColor: AllInColors.lightPurpleColor, foregroundColor: .white)
} }
.padding(.leading, 15) .padding(.leading, 15)
VStack(alignment: .leading){ VStack(alignment: .leading){
@ -56,7 +65,7 @@ struct ParticipationModal: View {
TextField("", text: $mise, prompt: Text("Mise") TextField("", text: $mise, prompt: Text("Mise")
.foregroundColor(AllInColors.lightGrey300Color) .foregroundColor(AllInColors.lightGrey300Color)
.font(.system(size: 14)) .font(.system(size: 16))
.fontWeight(.bold)) .fontWeight(.bold))
.padding() .padding()
.keyboardType(.numberPad) .keyboardType(.numberPad)
@ -65,10 +74,10 @@ struct ParticipationModal: View {
.fill(AllInColors.lightGrey200Color) .fill(AllInColors.lightGrey200Color)
.frame(height: 40) .frame(height: 40)
) )
.frame(width: .infinity, height: 40) .frame(height: 40)
.foregroundColor(.black) .foregroundColor(.black)
.overlay( .overlay(
RoundedRectangle(cornerRadius: 10, style: .continuous) RoundedRectangle(cornerRadius: 8, style: .continuous)
.stroke(AllInColors.delimiterGrey, lineWidth: 1) .stroke(AllInColors.delimiterGrey, lineWidth: 1)
) )
.padding(.bottom, 5) .padding(.bottom, 5)
@ -81,14 +90,19 @@ struct ParticipationModal: View {
Text("Gains possibles") Text("Gains possibles")
.font(.system(size: 13)) .font(.system(size: 13))
.foregroundColor(AllInColors.primaryTextColor) .foregroundColor(AllInColors.primaryTextColor)
.fontWeight(.regular) .fontWeight(.medium)
Spacer() Spacer()
Text("231") Text(possibleGain.description)
.font(.system(size: 13)) .font(.system(size: 13))
.foregroundColor(AllInColors.primaryTextColor) .foregroundColor(AllInColors.primaryTextColor)
.fontWeight(.light) .fontWeight(.bold)
Image("allcoinIcon")
.resizable()
.frame(width: 11, height: 12)
} }
.padding(.top, 10).padding(.bottom, 0) .padding(.top, 10)
.padding(.bottom, 0)
Button { Button {
participationAddedCallback?() participationAddedCallback?()
} label: { } label: {
@ -100,9 +114,9 @@ struct ParticipationModal: View {
.padding(.vertical, 3) .padding(.vertical, 3)
} }
.buttonStyle(.borderedProminent) .buttonStyle(.borderedProminent)
.tint(AllInColors.purpleAccentColor) .tint(AllInColors.lightPurpleColor)
.disabled(checkAndSetError()) .disabled(checkAndSetError())
.padding(.bottom, 5)
} }
.padding(.horizontal, 10) .padding(.horizontal, 10)
.background(AllInColors.whiteColor) .background(AllInColors.whiteColor)
@ -110,10 +124,11 @@ struct ParticipationModal: View {
} }
.background(AllInColors.underComponentBackgroundColor) .background(AllInColors.underComponentBackgroundColor)
} }
}
func checkAndSetError() -> Bool { func checkAndSetError() -> Bool {
if let stake = Int(mise) { if let stake = Int(mise) {
if stake <= AppStateContainer.shared.user?.nbCoins ?? 0 { if stake <= AppStateContainer.shared.user?.nbCoins ?? 0 && stake > 0 {
return false return false
} else { } else {
return true return true

@ -16,7 +16,7 @@ struct RankingRow: View {
var body: some View { var body: some View {
HStack(){ HStack(){
Text(String(number)) Text(number.description)
.textStyle(weight: .bold, color: AllInColors.lightPurpleColor, size: 18) .textStyle(weight: .bold, color: AllInColors.lightPurpleColor, size: 18)
.padding(.leading, 15) .padding(.leading, 15)
@ -34,7 +34,7 @@ struct RankingRow: View {
Image("allcoinIcon") Image("allcoinIcon")
.resizable() .resizable()
.frame(width: 17, height: 17, alignment: .leading) .frame(width: 17, height: 17, alignment: .leading)
Text(String(allCoins)) Text(allCoins.description)
.textStyle(weight: .black, color: AllInColors.lightPurpleColor, size: 16) .textStyle(weight: .black, color: AllInColors.lightPurpleColor, size: 16)
.padding(.trailing, 15) .padding(.trailing, 15)
} }

@ -13,6 +13,7 @@ struct RecapBetCard: View {
@State private var isPressed = false @State private var isPressed = false
@State var showDetails: Bool = false @State var showDetails: Bool = false
@State var showPartipated: Bool = false @State var showPartipated: Bool = false
var body: some View { var body: some View {
VStack(spacing: 0){ VStack(spacing: 0){
VStack(alignment: .leading,spacing: 2){ VStack(alignment: .leading,spacing: 2){
@ -92,18 +93,17 @@ struct RecapBetCard: View {
.padding([.top,.bottom],5) .padding([.top,.bottom],5)
.background(AllInColors.primaryGradient) .background(AllInColors.primaryGradient)
.cornerRadius(8, corners: .allCorners) .cornerRadius(8, corners: .allCorners)
}
.padding([.bottom],10)
}.padding([.bottom],10) }
.frame(width: .infinity)
}.frame(width: .infinity)
.padding([.top,.bottom],8) .padding([.top,.bottom],8)
.padding([.leading,.trailing],15) .padding([.leading,.trailing],15)
.background(AllInColors.underComponentBackgroundColor) .background(AllInColors.underComponentBackgroundColor)
.cornerRadius(20, corners: [.bottomLeft,.bottomRight]) .cornerRadius(20, corners: [.bottomLeft,.bottomRight])
.padding(.bottom,0).border(width: 1, edges: [.top], color: AllInColors.delimiterGrey) .padding(.bottom,0).border(width: 1, edges: [.top], color: AllInColors.delimiterGrey)
}.scaleEffect(longPressTap ? 0.97 : 1.0) }
.scaleEffect(longPressTap ? 0.97 : 1.0)
.animation(.easeInOut, value: longPressTap) .animation(.easeInOut, value: longPressTap)
.onTapGesture { .onTapGesture {
showDetails.toggle() showDetails.toggle()

@ -18,7 +18,9 @@ struct ReviewCard: View {
VStack(alignment: .leading,spacing: 2){ VStack(alignment: .leading,spacing: 2){
HStack{ HStack{
Spacer() Spacer()
Text("proposé par Lucas").font(.system(size: 10)).foregroundColor(AllInColors.grey800Color) Text("proposé par Lucas")
.font(.system(size: 10))
.foregroundColor(AllInColors.grey800Color)
} }
Text("Etudes").font(.system(size: 15)).foregroundColor(AllInColors.grey800Color) Text("Etudes").font(.system(size: 15)).foregroundColor(AllInColors.grey800Color)
@ -32,7 +34,8 @@ struct ReviewCard: View {
} }
.frame(width: .infinity) .frame(width: .infinity)
.padding(.all,15) .padding(.all,15)
.background(AllInColors.componentBackgroundColor).cornerRadius(20, corners: [.topLeft,.topRight]).padding(.bottom,0) .background(AllInColors.componentBackgroundColor)
.cornerRadius(20, corners: [.topLeft,.topRight]).padding(.bottom,0)
VStack(alignment: .center,spacing:0){ VStack(alignment: .center,spacing:0){
HStack(){ HStack(){
@ -54,10 +57,6 @@ struct ReviewCard: View {
.frame(width: .infinity) .frame(width: .infinity)
.padding(.all,10) .padding(.all,10)
} }
.frame(width: .infinity) .frame(width: .infinity)
.padding(.all,2) .padding(.all,2)

@ -49,6 +49,9 @@ struct TextCapsule: View {
RoundedRectangle(cornerRadius: 20) RoundedRectangle(cornerRadius: 20)
.stroke(AllInColors.delimiterGrey, lineWidth: 1) .stroke(AllInColors.delimiterGrey, lineWidth: 1)
) )
Spacer()
} }
} }
} }

@ -83,42 +83,3 @@ extension View {
} }
} }
} }
struct SlideInFromBottomTransition: ViewModifier {
var yOffset: CGFloat
func body(content: Content) -> some View {
content
.offset(y: yOffset)
.animation(.easeInOut(duration: 0.3))
}
}
extension AnyTransition {
static func slideInFromBottom(yOffset: CGFloat) -> AnyTransition {
AnyTransition.modifier(
active: SlideInFromBottomTransition(yOffset: yOffset),
identity: SlideInFromBottomTransition(yOffset: 0)
)
}
}
struct SlideOutToBottomTransition: ViewModifier {
var yOffset: CGFloat
func body(content: Content) -> some View {
content
.offset(y: yOffset)
.opacity(yOffset == 0 ? 1 : 0)
.animation(.easeInOut(duration: 0.3))
}
}
extension AnyTransition {
static func slideOutToBottom(yOffset: CGFloat) -> AnyTransition {
AnyTransition.modifier(
active: SlideOutToBottomTransition(yOffset: yOffset),
identity: SlideOutToBottomTransition(yOffset: 0)
)
}
}

@ -25,7 +25,6 @@ struct DetailsView: View {
case .orderedSame: case .orderedSame:
return true return true
} }
} else { } else {
return true return true
} }
@ -37,7 +36,7 @@ struct DetailsView: View {
switch currentDate.compare(endRegisterDate) { switch currentDate.compare(endRegisterDate) {
case .orderedAscending: case .orderedAscending:
return ("En cours...", AllInColors.purpleAccentColor) return ("En cours...", AllInColors.darkPurpleColor)
case .orderedDescending: case .orderedDescending:
return ("En attente...", AllInColors.pink100) return ("En attente...", AllInColors.pink100)
case .orderedSame: case .orderedSame:
@ -45,7 +44,7 @@ struct DetailsView: View {
} }
} else { } else {
return ("Statut indisponible", AllInColors.whiteColor) return ("Statut indisponible", AllInColors.pink100)
} }
} }
@ -62,6 +61,7 @@ struct DetailsView: View {
VStack(alignment: .center) { VStack(alignment: .center) {
HStack{ HStack{
Text(StatusValues.0) Text(StatusValues.0)
.italic()
.font(.system(size: 25)) .font(.system(size: 25))
.fontWeight(.bold).padding(.bottom, 10) .fontWeight(.bold).padding(.bottom, 10)
.foregroundStyle(Color.black) .foregroundStyle(Color.black)
@ -78,15 +78,18 @@ struct DetailsView: View {
} }
.padding(.horizontal, 15) .padding(.horizontal, 15)
.background(StatusValues.1) .background(StatusValues.1)
.transition(.slideInFromBottom(yOffset:0))
VStack(spacing: 0) { VStack(spacing: 0) {
VStack(alignment: .leading, spacing: 5) { VStack(alignment: .leading, spacing: 5) {
HStack{ HStack(spacing: 3) {
Spacer() Spacer()
Text("proposé par " + (viewModel.betDetail?.bet.author.username ?? "Unknown").capitalized) Text("proposé par")
.font(.system(size: 10)) .font(.system(size: 10))
.foregroundColor(AllInColors.grey800Color) .foregroundColor(AllInColors.grey800Color)
Text((viewModel.betDetail?.bet.author.username ?? "Unknown").capitalized)
.font(.system(size: 10))
.fontWeight(.semibold)
.foregroundColor(AllInColors.primaryTextColor)
} }
Text(viewModel.betDetail?.bet.theme ?? "Not loaded") Text(viewModel.betDetail?.bet.theme ?? "Not loaded")
@ -97,26 +100,33 @@ struct DetailsView: View {
.fontWeight(.bold) .fontWeight(.bold)
.padding(.bottom, 10) .padding(.bottom, 10)
HStack { HStack {
HStack {
Spacer()
Text("Commence le") Text("Commence le")
.frame(maxWidth: 100)
.font(.system(size: 15)) .font(.system(size: 15))
.foregroundColor(AllInColors.grey800Color) .foregroundColor(AllInColors.grey800Color)
}
.frame(width: 105)
.padding(.trailing, 10)
TextCapsule(date: viewModel.betDetail?.bet.endRegisterDate ?? Date()) TextCapsule(date: viewModel.betDetail?.bet.endRegisterDate ?? Date())
Spacer() Spacer()
}.padding(.bottom, 10) }.padding(.bottom, 10)
HStack { HStack {
Text("Fini le") HStack {
.frame(maxWidth: 100) Spacer()
Text("Prend fin le")
.font(.system(size: 15)) .font(.system(size: 15))
.foregroundColor(AllInColors.grey800Color) .foregroundColor(AllInColors.grey800Color)
}
.frame(width: 105)
.padding(.trailing, 10)
TextCapsule(date: viewModel.betDetail?.bet.endBetDate ?? Date()) TextCapsule(date: viewModel.betDetail?.bet.endBetDate ?? Date())
Spacer() Spacer()
} }
} }
.frame(width: .infinity) .padding(.all, 15)
.padding(.all,15).padding(.vertical, 10) .padding(.vertical, 10)
.background(AllInColors.componentBackgroundColor) .background(AllInColors.componentBackgroundColor)
.cornerRadius(20, corners: [.topLeft,.topRight]).padding(.bottom,0) .cornerRadius(20, corners: [.topLeft,.topRight]).padding(.bottom,0)
@ -136,7 +146,7 @@ struct DetailsView: View {
ParticiationCell(participation: participation).padding(.horizontal, 10) ParticiationCell(participation: participation).padding(.horizontal, 10)
} }
} }
.padding(.bottom, 28) .padding(.bottom, geometry.safeAreaInsets.bottom + 28)
Spacer() Spacer()
} }
@ -146,15 +156,14 @@ struct DetailsView: View {
.border(width: 1, edges: [.top], color: AllInColors.delimiterGrey) .border(width: 1, edges: [.top], color: AllInColors.delimiterGrey)
Spacer() Spacer()
} }
.frame(maxWidth: .infinity, maxHeight: geometry.size.height*0.98) .frame(maxWidth: .infinity, maxHeight: (geometry.size.height + geometry.safeAreaInsets.bottom) - 50)
.background(AllInColors.componentBackgroundColor) .background(AllInColors.componentBackgroundColor)
.cornerRadius(15) .cornerRadius(15, corners: [.topLeft, .topRight])
ParticipateButton(isOpen: $isModalPresented, isParticapatedOpen: $isModalParticipated, bet: viewModel.betDetail?.bet) ParticipateButton(isOpen: $isModalPresented, isParticapatedOpen: $isModalParticipated, bet: viewModel.betDetail?.bet)
.padding(10) .padding(.bottom, geometry.safeAreaInsets.bottom + 5)
.padding(.horizontal, 10)
} }
.sheet(isPresented: $isModalParticipated) { .sheet(isPresented: $isModalParticipated) {
ParticipationModal(answer: $viewModel.answer, mise: $viewModel.mise, description: viewModel.betDetail?.bet.phrase ?? "Not loaded", participationAddedCallback: { ParticipationModal(answer: $viewModel.answer, mise: $viewModel.mise, description: viewModel.betDetail?.bet.phrase ?? "Not loaded", participationAddedCallback: {

Loading…
Cancel
Save