diff --git a/Feels.xcodeproj/project.pbxproj b/Feels.xcodeproj/project.pbxproj index c626787..1947658 100644 --- a/Feels.xcodeproj/project.pbxproj +++ b/Feels.xcodeproj/project.pbxproj @@ -75,6 +75,10 @@ 1C658D7827C0744D003231EE /* PersistenceUPDATE.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C658D7627C0744D003231EE /* PersistenceUPDATE.swift */; }; 1C683FCA2792281400745862 /* Stats.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C683FC92792281400745862 /* Stats.swift */; }; 1C683FCB2792281400745862 /* Stats.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C683FC92792281400745862 /* Stats.swift */; }; + 1C718C7027F611C900A8F9FE /* DaysFilterClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C718C6F27F611C900A8F9FE /* DaysFilterClass.swift */; }; + 1C718C7127F611C900A8F9FE /* DaysFilterClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C718C6F27F611C900A8F9FE /* DaysFilterClass.swift */; }; + 1C718C7327F611E300A8F9FE /* StupidAssCustomWidgetObservableObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C718C7227F611E300A8F9FE /* StupidAssCustomWidgetObservableObject.swift */; }; + 1C718C7427F611E300A8F9FE /* StupidAssCustomWidgetObservableObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C718C7227F611E300A8F9FE /* StupidAssCustomWidgetObservableObject.swift */; }; 1C7352B927DD02760024B5D2 /* ImagePickerGridView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C7352B827DD02760024B5D2 /* ImagePickerGridView.swift */; }; 1C744F2C278CE15600953A57 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C744F2B278CE15600953A57 /* AppDelegate.swift */; }; 1C747CC9279F06EB00762CBD /* CloudKitSyncMonitor in Frameworks */ = {isa = PBXBuildFile; productRef = 1C747CC8279F06EB00762CBD /* CloudKitSyncMonitor */; }; @@ -220,6 +224,8 @@ 1C5F4977279C945E0092F1B4 /* UserDefaultsStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDefaultsStore.swift; sourceTree = ""; }; 1C658D7627C0744D003231EE /* PersistenceUPDATE.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PersistenceUPDATE.swift; sourceTree = ""; }; 1C683FC92792281400745862 /* Stats.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Stats.swift; sourceTree = ""; }; + 1C718C6F27F611C900A8F9FE /* DaysFilterClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DaysFilterClass.swift; sourceTree = ""; }; + 1C718C7227F611E300A8F9FE /* StupidAssCustomWidgetObservableObject.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StupidAssCustomWidgetObservableObject.swift; sourceTree = ""; }; 1C7352B827DD02760024B5D2 /* ImagePickerGridView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImagePickerGridView.swift; sourceTree = ""; }; 1C744F2B278CE15600953A57 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 1C76E86D27C882A400ADEE1F /* SharingImageModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SharingImageModels.swift; sourceTree = ""; }; @@ -601,6 +607,8 @@ 1C5F4977279C945E0092F1B4 /* UserDefaultsStore.swift */, 1C95ABC827E6F73A00509BD3 /* Shapes.swift */, 1C95ABCB27E6FA7200509BD3 /* DiamondView.swift */, + 1C718C6F27F611C900A8F9FE /* DaysFilterClass.swift */, + 1C718C7227F611E300A8F9FE /* StupidAssCustomWidgetObservableObject.swift */, ); path = Models; sourceTree = ""; @@ -824,6 +832,7 @@ 1C2162F227C156E6004353D1 /* CustomizeView.swift in Sources */, 1C683FCA2792281400745862 /* Stats.swift in Sources */, 1C76E86E27C882A400ADEE1F /* SharingImageModels.swift in Sources */, + 1C718C7327F611E300A8F9FE /* StupidAssCustomWidgetObservableObject.swift in Sources */, 1CAD603E27A6ECCD00C520BD /* SwitchableView.swift in Sources */, 1CD90B76278C8119001C4FEA /* LocalNotification.swift in Sources */, 1C358FB627B0AE15002C83A6 /* AllMoodsTotalTemplate.swift in Sources */, @@ -878,6 +887,7 @@ 1C361F0A27C0356000E832FC /* MonthView.swift in Sources */, 1C361F1427C03C8600E832FC /* OnboardingDataDataManager.swift in Sources */, 1C358FAD27ADD0C3002C83A6 /* Theme.swift in Sources */, + 1C718C7027F611C900A8F9FE /* DaysFilterClass.swift in Sources */, 1C95ABCC27E6FA7200509BD3 /* DiamondView.swift in Sources */, 1C2162EB27C14EFA004353D1 /* Date+Extensions.swift in Sources */, 1C02589C27B9677A00EB91AC /* CreateWidgetView.swift in Sources */, @@ -940,6 +950,7 @@ 1C04489727C2DB9B00D22444 /* BGView.swift in Sources */, 1CB101C827B81CAC00D1C033 /* MoodMetrics.swift in Sources */, 1C683FCB2792281400745862 /* Stats.swift in Sources */, + 1C718C7127F611C900A8F9FE /* DaysFilterClass.swift in Sources */, 1CEC967327B9CA0C00CC8688 /* CustomWidgetModel.swift in Sources */, 1C10E25027A1AB220047948B /* OnboardingDay.swift in Sources */, 1C04488827C1CD8C00D22444 /* PersonalityPackable.swift in Sources */, @@ -956,6 +967,7 @@ 1C04489627C2DB0100D22444 /* Theme.swift in Sources */, 1C361F0F27C03C0E00E832FC /* LocalNotification.swift in Sources */, 1C10E24E27A1AB110047948B /* UserDefaultsStore.swift in Sources */, + 1C718C7427F611E300A8F9FE /* StupidAssCustomWidgetObservableObject.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Shared/Models/DaysFilterClass.swift b/Shared/Models/DaysFilterClass.swift new file mode 100644 index 0000000..eb7808a --- /dev/null +++ b/Shared/Models/DaysFilterClass.swift @@ -0,0 +1,28 @@ +// +// DaysFilterClass.swift +// Feels +// +// Created by Trey Tartt on 3/31/22. +// + +import Foundation + +class DaysFilterClass: ObservableObject { + @Published public private(set) var currentFilters = [Int]() + + init() { + currentFilters = UserDefaultsStore.getDaysFilter() + } + + func addFilter(newFilter: Int) { + currentFilters.append(newFilter) + currentFilters = UserDefaultsStore.saveDaysFilter(days: currentFilters) + } + + func removeFilter(filter: Int) { + if let index = currentFilters.firstIndex(of: filter) { + currentFilters.remove(at: index) + } + currentFilters = UserDefaultsStore.saveDaysFilter(days: currentFilters) + } +} diff --git a/Shared/Models/StupidAssCustomWidgetObservableObject.swift b/Shared/Models/StupidAssCustomWidgetObservableObject.swift new file mode 100644 index 0000000..4991e28 --- /dev/null +++ b/Shared/Models/StupidAssCustomWidgetObservableObject.swift @@ -0,0 +1,13 @@ +// +// StupidAssCustomWidgetObservableObject.swift +// Feels +// +// Created by Trey Tartt on 3/31/22. +// + +import Foundation + +class StupidAssCustomWidgetObservableObject: ObservableObject { + @Published var fuckingWrapped: CustomWidgetModel? = nil + @Published var showFuckingSheet = false +} diff --git a/Shared/Models/UserDefaultsStore.swift b/Shared/Models/UserDefaultsStore.swift index 6f47870..6aeab83 100644 --- a/Shared/Models/UserDefaultsStore.swift +++ b/Shared/Models/UserDefaultsStore.swift @@ -24,6 +24,7 @@ class UserDefaultsStore { case textColor case showNSFW case shape + case daysFilter case contentViewCurrentSelectedHeaderViewBackDays case contentViewHeaderTag @@ -211,5 +212,19 @@ class UserDefaultsStore { fatalError("error saving") } } + + @discardableResult + static func saveDaysFilter(days: [Int]) -> [Int] { + GroupUserDefaults.groupDefaults.set(days, forKey: UserDefaultsStore.Keys.daysFilter.rawValue) + return UserDefaultsStore.getDaysFilter() + } + + static func getDaysFilter() -> [Int] { + if let data = GroupUserDefaults.groupDefaults.object(forKey: UserDefaultsStore.Keys.daysFilter.rawValue) as? [Int] { + return data + } else { + return [] + } + } } diff --git a/Shared/views/CustomizeView/CustomizeView.swift b/Shared/views/CustomizeView/CustomizeView.swift index d21fbcb..bbe260b 100644 --- a/Shared/views/CustomizeView/CustomizeView.swift +++ b/Shared/views/CustomizeView/CustomizeView.swift @@ -31,12 +31,17 @@ struct CustomizeView: View { @State var shapeRefreshToggleThing: Bool = false - class StupidAssCustomWidgetObservableObject: ObservableObject { - @Published var fuckingWrapped: CustomWidgetModel? = nil - @Published var showFuckingSheet = false - } - @StateObject private var selectedWidget = StupidAssCustomWidgetObservableObject() + + @StateObject private var daysFilter = DaysFilterClass() + + let weekdays = [("Sun", 1), + ("mon", 2), + ("tue", 3), + ("wed", 4), + ("thur", 5), + ("fri", 6), + ("sat", 7)] let iconSets: [(String,String)] = [ ("AppIconGoodImage", "AppIconGood"), @@ -64,6 +69,8 @@ struct CustomizeView: View { pickTextColor } Divider() + dayFilterView + Divider() shapePicker Divider() pickPeronsalityPack @@ -513,6 +520,31 @@ struct CustomizeView: View { .fixedSize(horizontal: false, vertical: true) .cornerRadius(10, corners: [.topLeft, .topRight, .bottomLeft, .bottomRight]) } + + private var dayFilterView: some View { + ZStack { + theme.currentTheme.secondaryBGColor + HStack { + ForEach(weekdays.indices, id: \.self) { dayIdx in + let day = String(weekdays[dayIdx].0) + let value = weekdays[dayIdx].1 + + Button(day.capitalized, action: { + if daysFilter.currentFilters.contains(value) { + daysFilter.removeFilter(filter: value) + } else { + daysFilter.addFilter(newFilter: value) + } + }) + .frame(maxWidth: .infinity) + .foregroundColor(daysFilter.currentFilters.contains(value) ? .green : .red) + } + } + .padding() + } + .fixedSize(horizontal: false, vertical: true) + .cornerRadius(10, corners: [.topLeft, .topRight, .bottomLeft, .bottomRight]) + } } struct CustomizeView_Previews: PreviewProvider { diff --git a/Shared/views/FilterView/FilterView.swift b/Shared/views/FilterView/FilterView.swift index 52269b9..08810a2 100644 --- a/Shared/views/FilterView/FilterView.swift +++ b/Shared/views/FilterView/FilterView.swift @@ -9,7 +9,6 @@ import SwiftUI import CoreData struct YearView: View { - let weekdays = [("Sun", 1), ("mon", 2), ("tue", 3), ("wed", 4), ("thur", 5), ("fri", 6), ("sat", 7)] let months = [(0, "J"), (1, "F"), (2,"M"), (3,"A"), (4,"M"), (5, "J"), (6,"J"), (7,"A"), (8,"S"), (9,"O"), (10, "N"), (11,"D")] @State private var toggle = true