// // PersonalityPackPickerView.swift // Reflect (iOS) // // Created by Trey Tartt on 4/2/22. // import SwiftUI struct PersonalityPackPickerView: View { @AppStorage(UserDefaultsStore.Keys.theme.rawValue, store: GroupUserDefaults.groupDefaults) private var theme: Theme = .system @AppStorage(UserDefaultsStore.Keys.personalityPack.rawValue, store: GroupUserDefaults.groupDefaults) private var personalityPack: PersonalityPack = .Default @State private var showOver18Alert = false @AppStorage(UserDefaultsStore.Keys.showNSFW.rawValue, store: GroupUserDefaults.groupDefaults) private var showNSFW: Bool = false private var textColor: Color { theme.currentTheme.labelColor } var body: some View { VStack { ForEach(PersonalityPack.allCases, id: \.self) { aPack in VStack(spacing: 10) { Text(String(aPack.title())) .font(.body) .foregroundColor(textColor) Text(aPack.randomPushNotificationStrings().title) .font(.body) .foregroundColor(Color(UIColor.systemGray)) Text(aPack.randomPushNotificationStrings().body) .font(.body) .foregroundColor(Color(UIColor.systemGray)) } .frame(minWidth: 0, maxWidth: .infinity) .padding() .contentShape(Rectangle()) .background( RoundedRectangle(cornerRadius: 10, style: .continuous) .fill(personalityPack == aPack ? theme.currentTheme.bgColor : .clear) .padding(5) ) .accessibilityIdentifier(AccessibilityID.Customize.personalityPackOption(aPack.title())) .onTapGesture { let impactMed = UIImpactFeedbackGenerator(style: .heavy) impactMed.impactOccurred() personalityPack = aPack AnalyticsManager.shared.track(.personalityPackChanged(packTitle: aPack.title())) LocalNotification.rescheduleNotifiations() // } } .accessibilityAddTraits(.isButton) .accessibilityLabel(String(localized: "Select \(aPack.title()) personality pack")) // .blur(radius: aPack.rawValue == PersonalityPack.Rude.rawValue && !showNSFW ? 5 : 0) .alert(isPresented: $showOver18Alert) { let primaryButton = Alert.Button.default(Text(String(localized: "customize_view_over18alert_ok"))) { showNSFW = true } let secondaryButton = Alert.Button.cancel(Text(String(localized: "customize_view_over18alert_no"))) { showNSFW = false } return Alert(title: Text(String(localized: "customize_view_over18alert_title")), message: Text(String(localized: "customize_view_over18alert_body")), primaryButton: primaryButton, secondaryButton: secondaryButton) } if aPack.rawValue != (PersonalityPack.allCases.sorted(by: { $0.rawValue > $1.rawValue }).first?.rawValue) ?? 0 { Divider() } } } .background(theme.currentTheme.secondaryBGColor) .fixedSize(horizontal: false, vertical: true) .cornerRadius(Constants.viewsCornerRaidus, corners: [.topLeft, .topRight, .bottomLeft, .bottomRight]) } } struct PersonalityPackPickerView_Previews: PreviewProvider { static var previews: some View { PersonalityPackPickerView() } }