Onboarding screens
OnboardingData object that will hold onboarding answers
This commit is contained in:
86
Shared/Onboarding/views/OnboardingDay.swift
Normal file
86
Shared/Onboarding/views/OnboardingDay.swift
Normal file
@@ -0,0 +1,86 @@
|
||||
//
|
||||
// OnboardingDay.swift
|
||||
// Feels (iOS)
|
||||
//
|
||||
// Created by Trey Tartt on 1/20/22.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
enum DayOptions: String, CaseIterable, RawRepresentable, Codable {
|
||||
case Today = "Same Day"
|
||||
case Previous = "Previous Day"
|
||||
}
|
||||
|
||||
struct OnboardingDay: View {
|
||||
@ObservedObject var onboardingData: OnboardingData
|
||||
|
||||
var previewText: String {
|
||||
switch onboardingData.inputDay {
|
||||
case .Today:
|
||||
return "Example: If you pick on a Tuesday, the value will be recorded for Tuesday"
|
||||
case .Previous:
|
||||
return "Example: If you pick on a Tuesday, the value will be recorded for Monday, the day before"
|
||||
}
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
ZStack {
|
||||
|
||||
Image("average", bundle: .main)
|
||||
.foregroundColor(Color(UIColor.darkText))
|
||||
.opacity(0.04)
|
||||
.scaleEffect(1.2)
|
||||
.padding(.bottom, 55)
|
||||
|
||||
ScrollView {
|
||||
VStack{
|
||||
Text("Will this rating be for current day or previous day")
|
||||
.font(.title)
|
||||
.foregroundColor(Color(UIColor.white))
|
||||
.padding([.trailing, .leading], 55)
|
||||
.padding([.top], 25)
|
||||
|
||||
Picker(selection: $onboardingData.inputDay,
|
||||
label: Text("")) {
|
||||
ForEach(DayOptions.allCases, id: \.self) { day in
|
||||
Text(day.rawValue)
|
||||
}
|
||||
}
|
||||
.padding()
|
||||
.colorScheme(.dark)
|
||||
.padding([.trailing, .leading], 55)
|
||||
.pickerStyle(SegmentedPickerStyle())
|
||||
|
||||
Text("When you vote your vote will be for the \(onboardingData.inputDay.rawValue)")
|
||||
.font(.body)
|
||||
.foregroundColor(Color(UIColor.white))
|
||||
.padding([.trailing, .leading], 75)
|
||||
.padding([.top], 15)
|
||||
|
||||
Text(previewText)
|
||||
.font(.body)
|
||||
.foregroundColor(Color(UIColor.white))
|
||||
.padding([.trailing, .leading], 75)
|
||||
.padding([.top], 15)
|
||||
|
||||
Spacer()
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
.background(.blue)
|
||||
}
|
||||
}
|
||||
|
||||
struct OnboardingDay_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
Group{
|
||||
OnboardingDay(onboardingData: OnboardingData())
|
||||
|
||||
OnboardingDay(onboardingData: OnboardingData())
|
||||
.preferredColorScheme(.dark)
|
||||
}
|
||||
}
|
||||
}
|
||||
49
Shared/Onboarding/views/OnboardingMain.swift
Normal file
49
Shared/Onboarding/views/OnboardingMain.swift
Normal file
@@ -0,0 +1,49 @@
|
||||
//
|
||||
// OnboardingMain.swift
|
||||
// Feels (iOS)
|
||||
//
|
||||
// Created by Trey Tartt on 1/20/22.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct OnboardingMain: View {
|
||||
@Environment(\.presentationMode) var presentationMode
|
||||
@State var onboardingData: OnboardingData
|
||||
|
||||
let completionClosure: ((OnboardingData) -> Void)
|
||||
|
||||
var body: some View {
|
||||
TabView {
|
||||
OnboardingTime(onboardingData: onboardingData)
|
||||
|
||||
OnboardingDay(onboardingData: onboardingData)
|
||||
|
||||
OnboardingTitle(onboardingData: onboardingData)
|
||||
|
||||
OnboardingWrapup(onboardingData: onboardingData, completionClosure: { _ in
|
||||
completionClosure(onboardingData)
|
||||
})
|
||||
}
|
||||
.ignoresSafeArea()
|
||||
.tabViewStyle(.page)
|
||||
.onAppear {
|
||||
setupAppearance()
|
||||
}
|
||||
.interactiveDismissDisabled()
|
||||
}
|
||||
|
||||
func setupAppearance() {
|
||||
UIPageControl.appearance().currentPageIndicatorTintColor = .white
|
||||
UIPageControl.appearance().pageIndicatorTintColor = UIColor.black.withAlphaComponent(0.2)
|
||||
}
|
||||
}
|
||||
|
||||
struct OnboardingMain_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
OnboardingMain(onboardingData: OnboardingData(),
|
||||
completionClosure: { _ in
|
||||
|
||||
})
|
||||
}
|
||||
}
|
||||
67
Shared/Onboarding/views/OnboardingTime.swift
Normal file
67
Shared/Onboarding/views/OnboardingTime.swift
Normal file
@@ -0,0 +1,67 @@
|
||||
//
|
||||
// OnboardingTime.swift
|
||||
// Feels (iOS)
|
||||
//
|
||||
// Created by Trey Tartt on 1/20/22.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct OnboardingTime: View {
|
||||
@ObservedObject var onboardingData: OnboardingData
|
||||
|
||||
var formatter: DateFormatter {
|
||||
let dateFormatter = DateFormatter()
|
||||
dateFormatter.timeStyle = .short
|
||||
return dateFormatter
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
ZStack {
|
||||
|
||||
Image("great", bundle: .main)
|
||||
.foregroundColor(Color(UIColor.darkText))
|
||||
.opacity(0.04)
|
||||
.scaleEffect(1.2)
|
||||
|
||||
ScrollView {
|
||||
VStack {
|
||||
Text("What time do you want to unlock your rating")
|
||||
.font(.title)
|
||||
.padding([.trailing, .leading], 55)
|
||||
.padding([.top], 25)
|
||||
.foregroundColor(Color(UIColor.white))
|
||||
|
||||
DatePicker("", selection: $onboardingData.date,
|
||||
displayedComponents: .hourAndMinute)
|
||||
.scaleEffect(2)
|
||||
.labelsHidden()
|
||||
.frame(minWidth: 0, maxWidth: .infinity)
|
||||
.padding()
|
||||
.padding([.top, .bottom], 25)
|
||||
.colorScheme(.dark)
|
||||
|
||||
Text("Your shit will be unlocked at \(formatter.string(from: onboardingData.date)) daily")
|
||||
.font(.body)
|
||||
.padding([.top], 15)
|
||||
.padding([.trailing, .leading], 55)
|
||||
.foregroundColor(Color(UIColor.white))
|
||||
|
||||
Spacer()
|
||||
}
|
||||
}
|
||||
}
|
||||
.background(.green)
|
||||
}
|
||||
}
|
||||
|
||||
struct OnboardingTime_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
Group {
|
||||
OnboardingTime(onboardingData: OnboardingData())
|
||||
|
||||
OnboardingTime(onboardingData: OnboardingData())
|
||||
.preferredColorScheme(.dark)
|
||||
}
|
||||
}
|
||||
}
|
||||
84
Shared/Onboarding/views/OnboardingTitle.swift
Normal file
84
Shared/Onboarding/views/OnboardingTitle.swift
Normal file
@@ -0,0 +1,84 @@
|
||||
//
|
||||
// OnboardingTitle.swift
|
||||
// Feels (iOS)
|
||||
//
|
||||
// Created by Trey Tartt on 1/20/22.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct OnboardingTitle: View {
|
||||
static let titleOptions = [
|
||||
"Its time to select.",
|
||||
"Pick your shit!",
|
||||
"How was your day?"]
|
||||
|
||||
@ObservedObject var onboardingData: OnboardingData
|
||||
|
||||
var body: some View {
|
||||
ZStack {
|
||||
|
||||
Image("average", bundle: .main)
|
||||
.foregroundColor(Color(UIColor.darkText))
|
||||
.opacity(0.04)
|
||||
.scaleEffect(1.2)
|
||||
.padding(.bottom, 55)
|
||||
|
||||
ScrollView {
|
||||
VStack{
|
||||
Text("What would you like the reminder to say?")
|
||||
.font(.title)
|
||||
.foregroundColor(Color(UIColor.white))
|
||||
.padding([.trailing, .leading], 55)
|
||||
.padding([.top], 25)
|
||||
|
||||
ForEach(OnboardingTitle.titleOptions, id: \.self) { option in
|
||||
Button(action: {
|
||||
onboardingData.title = option
|
||||
}, label: {
|
||||
Text(option)
|
||||
.font(.system(size: 15))
|
||||
.fontWeight(.bold)
|
||||
.foregroundColor(.white)
|
||||
.padding(10)
|
||||
.background(RoundedRectangle(cornerRadius: 10).stroke().foregroundColor(Color.white))
|
||||
.cornerRadius(10)
|
||||
})
|
||||
.buttonStyle(PlainButtonStyle())
|
||||
.padding([.top], 10)
|
||||
}
|
||||
|
||||
Text("-- or type your own--")
|
||||
.font(.body)
|
||||
.foregroundColor(Color(UIColor.white))
|
||||
.padding([.top], 25)
|
||||
.padding([.trailing, .leading], 55)
|
||||
|
||||
TextField("Notification", text: $onboardingData.title)
|
||||
.frame(height: 44)
|
||||
.foregroundColor(Color(UIColor.white))
|
||||
.textFieldStyle(PlainTextFieldStyle())
|
||||
.padding([.leading, .trailing], 4)
|
||||
.cornerRadius(16)
|
||||
.overlay(RoundedRectangle(cornerRadius: 16).stroke(Color.white))
|
||||
.padding([.leading, .trailing], 75)
|
||||
.padding([.top], 45)
|
||||
|
||||
Spacer()
|
||||
}
|
||||
}
|
||||
}
|
||||
.background(.orange)
|
||||
}
|
||||
}
|
||||
|
||||
struct OnboardingTitle_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
Group {
|
||||
OnboardingTitle(onboardingData: OnboardingData())
|
||||
|
||||
OnboardingTitle(onboardingData: OnboardingData())
|
||||
.preferredColorScheme(.dark)
|
||||
}
|
||||
}
|
||||
}
|
||||
107
Shared/Onboarding/views/OnboardingWrapup.swift
Normal file
107
Shared/Onboarding/views/OnboardingWrapup.swift
Normal file
@@ -0,0 +1,107 @@
|
||||
//
|
||||
// OnboardingWrapup.swift
|
||||
// Feels (iOS)
|
||||
//
|
||||
// Created by Trey Tartt on 1/21/22.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct OnboardingWrapup: View {
|
||||
@ObservedObject var onboardingData: OnboardingData
|
||||
|
||||
let completionClosure: ((OnboardingData) -> Void)
|
||||
|
||||
var formatter: DateFormatter {
|
||||
let dateFormatter = DateFormatter()
|
||||
dateFormatter.timeStyle = .short
|
||||
return dateFormatter
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
ZStack {
|
||||
|
||||
Image("good", bundle: .main)
|
||||
.foregroundColor(Color(UIColor.darkText))
|
||||
.opacity(0.04)
|
||||
.scaleEffect(1.2)
|
||||
.padding(.bottom, 55)
|
||||
|
||||
ScrollView {
|
||||
VStack {
|
||||
Spacer()
|
||||
|
||||
Text("At")
|
||||
.font(.title)
|
||||
.foregroundColor(Color(UIColor.white))
|
||||
.padding([.trailing, .leading], 55)
|
||||
.padding([.top], 15)
|
||||
|
||||
Text(formatter.string(from: onboardingData.date))
|
||||
.font(.title)
|
||||
.fontWeight(.bold)
|
||||
.foregroundColor(Color(UIColor.white))
|
||||
.padding([.trailing, .leading], 55)
|
||||
.padding([.top], 15)
|
||||
|
||||
Text("aou will get notified that")
|
||||
.font(.title)
|
||||
.foregroundColor(Color(UIColor.white))
|
||||
.padding([.trailing, .leading], 55)
|
||||
.padding([.top], 15)
|
||||
|
||||
Text(onboardingData.title)
|
||||
.font(.title)
|
||||
.fontWeight(.bold)
|
||||
.foregroundColor(Color(UIColor.white))
|
||||
.padding([.trailing, .leading], 55)
|
||||
.padding([.top], 15)
|
||||
|
||||
Text("and when you vote it will be counted for the")
|
||||
.font(.title)
|
||||
.foregroundColor(Color(UIColor.white))
|
||||
.padding([.trailing, .leading], 55)
|
||||
.padding([.top], 15)
|
||||
|
||||
Text(onboardingData.inputDay.rawValue)
|
||||
.font(.title)
|
||||
.fontWeight(.bold)
|
||||
.foregroundColor(Color(UIColor.white))
|
||||
.padding([.trailing, .leading], 55)
|
||||
.padding([.top], 15)
|
||||
|
||||
Button(action: {
|
||||
completionClosure(onboardingData)
|
||||
}, label: {
|
||||
Text("Complete")
|
||||
.font(.title)
|
||||
.fontWeight(.bold)
|
||||
.foregroundColor(.yellow)
|
||||
.padding(10)
|
||||
.padding([.leading, .trailing], 25)
|
||||
.background(RoundedRectangle(cornerRadius: 10).fill().foregroundColor(Color.white))
|
||||
.cornerRadius(10)
|
||||
})
|
||||
.padding([.top], 65)
|
||||
}
|
||||
.multilineTextAlignment(.center)
|
||||
}
|
||||
}
|
||||
.background(.yellow)
|
||||
}
|
||||
}
|
||||
|
||||
struct OnboardingWrapup_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
Group {
|
||||
OnboardingWrapup(onboardingData: OnboardingData(), completionClosure: { _ in
|
||||
|
||||
})
|
||||
|
||||
OnboardingWrapup(onboardingData: OnboardingData(), completionClosure: { _ in
|
||||
|
||||
})
|
||||
.preferredColorScheme(.dark)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user