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

117 lines
3.8 KiB
Swift

//
// BoosterSubscriptionCardView.swift
//
//
// Created by Victor on 12/06/2024.
//
import SwiftUI
struct BoosterSubscriptionCardView: View {
let id: Int
@State var scale = 1.0
@Binding var selectedId: Int
var currentOption: Bool = false
var isFree: Bool = false
var isMinimized: Bool {
selectedId != id
}
init(id: Int, selectedId: Binding<Int>, currentOption: Bool = false, isFree: Bool = false) {
self.id = id
self._selectedId = selectedId
self.currentOption = currentOption
self.isFree = isFree
}
var body: some View {
VStack {
if currentOption {
SQText("Option actuelle")
.sqFont(.bold)
.foregroundColor(.sqRoyal())
}
ZStack(alignment: .topLeading) {
VStack {
SQText("3 jours")
.sqSize(32)
.sqFont(.bold)
.minimumScaleFactor(0.5)
.lineLimit(1)
.foregroundColor(.white)
SQText("par semaine")
.sqSize(14)
.minimumScaleFactor(0.5)
.lineLimit(1)
.foregroundColor(.white)
.opacity(0.7)
Spacer()
SkeletonCellView()
// SQText("20,00 / mois", size: 12)
// .minimumScaleFactor(0.5)
// .lineLimit(1)
// .foregroundColor(.white)
SQText("Sans engagement")
.sqSize(12)
.minimumScaleFactor(0.5)
.lineLimit(1)
.foregroundColor(.white)
}
.frame(maxWidth: 130, maxHeight: 140)
.padding(.bottom, 8)
.padding(.top, 30)
.padding([.leading, .trailing])
Image("booster_corner_light")
.resizable()
.frame(width: 50, height: 50)
.position(x: 25, y: 25)
.cornerRadius(8)
}
.frame(maxWidth: 130, maxHeight: 140)
.overlay(RoundedRectangle(cornerRadius: 8)
.strokeBorder(isMinimized ? Color.sqRoyal(40) : Color.sqRoyal(), lineWidth: isMinimized ? 0 : 1))
.background(
RoundedRectangle(cornerRadius: 8)
.fill(LinearGradient(
colors: [isMinimized ? Color.sqRoyal(40) : Color.sqRoyal(), isMinimized ? Color.sqRoyal(40) : Color.sqPurple()],
startPoint: .top, endPoint: .bottom))
)
if isFree {
SQText("1 mois gratuit *")
.sqFont(.bold)
.foregroundColor(.sqRoyal())
}
}
.opacity(isMinimized ? 0.5 : 1)
.scaleEffect(scale)
.animation(.easeIn(duration: 0.1))
.onChange(of: selectedId, perform: { newValue in
if isMinimized {
scale = 0.9
} else {
scale = 1
}
})
.onAppear(perform: {
if isMinimized {
scale = 0.9
} else {
scale = 1
}
})
}
}
#Preview {
ZStack {
HStack {
BoosterSubscriptionCardView(id: 1, selectedId: .constant(2))
BoosterSubscriptionCardView(id: 2, selectedId: .constant(2), currentOption: true)
BoosterSubscriptionCardView(id: 3, selectedId: .constant(2))
}
.padding()
}
.ignoresSafeArea()
}