Files
AlloVoisinsSwiftUI/AlloVoisinsSwiftUI/Features/Booster/Views/BoosterSubscriptionSelectionScreen.swift
Victor Bodinaud e305b1697a New views
2025-12-10 16:31:08 +01:00

116 lines
4.0 KiB
Swift

//
// BoosterSubscriptionSelectionScreen.swift
//
//
// Created by Victor on 12/06/2024.
//
import SwiftUI
let backgroundGradient = LinearGradient(
colors: [Color.sqRoyal(), Color.sqPurple()],
startPoint: .top, endPoint: .bottom)
struct ElipseShape: Shape {
func path(in rect: CGRect) -> Path {
var path = Path()
let width = rect.width
let height = rect.height
path.move(to: CGPoint(x: 0, y: height))
let midHeight = height * 0.1
let controlPoint1 = CGPoint(x: width * 0.5, y: height + midHeight)
let endPoint = CGPoint(x: width, y: height)
path.addQuadCurve(to: endPoint, control: controlPoint1)
path.addLine(to: CGPoint(x: width, y: 0))
path.addLine(to: CGPoint(x: 0, y: 0))
path.closeSubpath()
return path
}
}
struct BoosterSubscriptionSelectionScreen: View {
var cancellation: Bool = true
@State var mode: BoosterSubscriptionMode = .edit
@State var isNotPremier = false
var body: some View {
NavigationView {
ZStack(alignment: .top) {
VStack {
Color.sqRoyal()
.frame(height: 100)
}
ScrollViewReader { _ in
ScrollView(showsIndicators: false) {
VStack(spacing: 48) {
ZStack {
ElipseShape()
.fill(Color.sqPurple(60))
Rectangle()
.fill(backgroundGradient)
VStack(alignment: .trailing) {
BoosterLockedToPremierView()
VStack(spacing: 16) {
Image("booster_logo")
.resizable()
.frame(width: 210, height: 180)
BoosterFeaturesView()
.padding(.horizontal)
}
}
.padding([.top], 48)
}
ZStack {
Color.white
VStack(spacing: 32) {
VStack(spacing: 16) {
BoosterStatsView()
.padding([.leading, .trailing], 8)
BoosterSelectionView()
}
VStack {
SQButton("C'est parti !") {}
if cancellation {
Button(action: /*@START_MENU_TOKEN@*/ {}/*@END_MENU_TOKEN@*/, label: {
SQText("Non merci, je souhaite résilier")
.sqSize(12)
.foregroundColor(.black)
})
.padding()
}
}
.padding([.top], 8)
}
}
}
}
}
}
.edgesIgnoringSafeArea(.top)
}
.bottomSheet(isShowing: $isNotPremier, opacified: false, dismissable: false) {
OnlyForPremierView()
}
}
}
#Preview {
BoosterSubscriptionSelectionScreen()
}
enum BoosterSubscriptionMode {
case subscribe
case edit
case cancel
}