diff --git a/Feels.xcodeproj/project.pbxproj b/Feels.xcodeproj/project.pbxproj index b081ce8..c7d2f1f 100644 --- a/Feels.xcodeproj/project.pbxproj +++ b/Feels.xcodeproj/project.pbxproj @@ -16,15 +16,11 @@ 1C2618FE27960A4F00FDC148 /* FilterViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C2618FD27960A4F00FDC148 /* FilterViewModel.swift */; }; 1C26190327960CE500FDC148 /* ChartDataBuildable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C26190227960CE500FDC148 /* ChartDataBuildable.swift */; }; 1C26190727960DC900FDC148 /* ChartViewItemBuildable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C26190627960DC900FDC148 /* ChartViewItemBuildable.swift */; }; - 1C412082278F2B8800D9153A /* FilterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C412081278F2B8800D9153A /* FilterView.swift */; }; - 1C412083278F2B8800D9153A /* FilterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C412081278F2B8800D9153A /* FilterView.swift */; }; 1C5F4976279C84090092F1B4 /* OnboardingData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C5F4975279C84090092F1B4 /* OnboardingData.swift */; }; 1C5F4978279C945E0092F1B4 /* UserDefaultsStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C5F4977279C945E0092F1B4 /* UserDefaultsStore.swift */; }; 1C683FCA2792281400745862 /* Stats.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C683FC92792281400745862 /* Stats.swift */; }; 1C683FCB2792281400745862 /* Stats.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C683FC92792281400745862 /* Stats.swift */; }; 1C683FCC2792281400745862 /* Stats.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C683FC92792281400745862 /* Stats.swift */; }; - 1C6B377A2799B78A001EF820 /* BGView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C6B37792799B78A001EF820 /* BGView.swift */; }; - 1C7190A427A483D300388EDC /* SmallHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C7190A327A483D300388EDC /* SmallHeaderView.swift */; }; 1C744F2C278CE15600953A57 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C744F2B278CE15600953A57 /* AppDelegate.swift */; }; 1C747CC9279F06EB00762CBD /* CloudKitSyncMonitor in Frameworks */ = {isa = PBXBuildFile; productRef = 1C747CC8279F06EB00762CBD /* CloudKitSyncMonitor */; }; 1CA037702799FFA600D26164 /* ContentModeViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CA0376F2799FFA600D26164 /* ContentModeViewModel.swift */; }; @@ -34,6 +30,16 @@ 1CA0377A279A296E00D26164 /* OnboardingMain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CA03779279A296E00D26164 /* OnboardingMain.swift */; }; 1CA0377C279B605000D26164 /* OnboardingWrapup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CA0377B279B605000D26164 /* OnboardingWrapup.swift */; }; 1CA2662D2793908700C0E12C /* Persistence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CD90AEF278C7DDF001C4FEA /* Persistence.swift */; }; + 1CAD603427A5C1C800C520BD /* SmallRollUpHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CAD602B27A5C1C800C520BD /* SmallRollUpHeaderView.swift */; }; + 1CAD603527A5C1C800C520BD /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CAD602C27A5C1C800C520BD /* SettingsView.swift */; }; + 1CAD603627A5C1C800C520BD /* GraphView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CAD602D27A5C1C800C520BD /* GraphView.swift */; }; + 1CAD603727A5C1C800C520BD /* FilterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CAD602E27A5C1C800C520BD /* FilterView.swift */; }; + 1CAD603827A5C1C800C520BD /* AddMoodHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CAD602F27A5C1C800C520BD /* AddMoodHeaderView.swift */; }; + 1CAD603927A5C1C800C520BD /* HeaderPercView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CAD603027A5C1C800C520BD /* HeaderPercView.swift */; }; + 1CAD603A27A5C1C800C520BD /* BGView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CAD603127A5C1C800C520BD /* BGView.swift */; }; + 1CAD603B27A5C1C800C520BD /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CAD603227A5C1C800C520BD /* ContentView.swift */; }; + 1CAD603C27A5C1C800C520BD /* HeaderStatsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CAD603327A5C1C800C520BD /* HeaderStatsView.swift */; }; + 1CAD603E27A6ECCD00C520BD /* SwitchableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CAD603D27A6ECCD00C520BD /* SwitchableView.swift */; }; 1CC469AA278F30A0003E0C6E /* BGTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CC469A9278F30A0003E0C6E /* BGTask.swift */; }; 1CC469AC27907D48003E0C6E /* DayChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CC469AB27907D48003E0C6E /* DayChartView.swift */; }; 1CD90B07278C7DE0001C4FEA /* Tests_iOS.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CD90B06278C7DE0001C4FEA /* Tests_iOS.swift */; }; @@ -47,16 +53,6 @@ 1CD90B1C278C7DE0001C4FEA /* Persistence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CD90AEF278C7DDF001C4FEA /* Persistence.swift */; }; 1CD90B1E278C7DE0001C4FEA /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1CD90AF0278C7DE0001C4FEA /* Assets.xcassets */; }; 1CD90B1F278C7DE0001C4FEA /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1CD90AF0278C7DE0001C4FEA /* Assets.xcassets */; }; - 1CD90B37278C7E38001C4FEA /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CD90B32278C7E38001C4FEA /* SettingsView.swift */; }; - 1CD90B38278C7E38001C4FEA /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CD90B32278C7E38001C4FEA /* SettingsView.swift */; }; - 1CD90B39278C7E38001C4FEA /* GraphView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CD90B33278C7E38001C4FEA /* GraphView.swift */; }; - 1CD90B3A278C7E38001C4FEA /* GraphView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CD90B33278C7E38001C4FEA /* GraphView.swift */; }; - 1CD90B3B278C7E38001C4FEA /* AddMoodHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CD90B34278C7E38001C4FEA /* AddMoodHeaderView.swift */; }; - 1CD90B3C278C7E38001C4FEA /* AddMoodHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CD90B34278C7E38001C4FEA /* AddMoodHeaderView.swift */; }; - 1CD90B3D278C7E38001C4FEA /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CD90B35278C7E38001C4FEA /* ContentView.swift */; }; - 1CD90B3E278C7E38001C4FEA /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CD90B35278C7E38001C4FEA /* ContentView.swift */; }; - 1CD90B3F278C7E38001C4FEA /* HeaderStatsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CD90B36278C7E38001C4FEA /* HeaderStatsView.swift */; }; - 1CD90B40278C7E38001C4FEA /* HeaderStatsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CD90B36278C7E38001C4FEA /* HeaderStatsView.swift */; }; 1CD90B48278C7E7A001C4FEA /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1CD90B47278C7E7A001C4FEA /* WidgetKit.framework */; platformFilter = maccatalyst; }; 1CD90B4A278C7E7A001C4FEA /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1CD90B49278C7E7A001C4FEA /* SwiftUI.framework */; platformFilter = maccatalyst; }; 1CD90B4D278C7E7A001C4FEA /* FeelsWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CD90B4C278C7E7A001C4FEA /* FeelsWidget.swift */; }; @@ -124,12 +120,9 @@ 1C2618FD27960A4F00FDC148 /* FilterViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilterViewModel.swift; sourceTree = ""; }; 1C26190227960CE500FDC148 /* ChartDataBuildable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChartDataBuildable.swift; sourceTree = ""; }; 1C26190627960DC900FDC148 /* ChartViewItemBuildable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChartViewItemBuildable.swift; sourceTree = ""; }; - 1C412081278F2B8800D9153A /* FilterView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilterView.swift; sourceTree = ""; }; 1C5F4975279C84090092F1B4 /* OnboardingData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingData.swift; sourceTree = ""; }; 1C5F4977279C945E0092F1B4 /* UserDefaultsStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDefaultsStore.swift; sourceTree = ""; }; 1C683FC92792281400745862 /* Stats.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Stats.swift; sourceTree = ""; }; - 1C6B37792799B78A001EF820 /* BGView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BGView.swift; sourceTree = ""; }; - 1C7190A327A483D300388EDC /* SmallHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SmallHeaderView.swift; sourceTree = ""; }; 1C744F2B278CE15600953A57 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 1CA0376F2799FFA600D26164 /* ContentModeViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentModeViewModel.swift; sourceTree = ""; }; 1CA03772279A293D00D26164 /* OnboardingTime.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingTime.swift; sourceTree = ""; }; @@ -137,6 +130,16 @@ 1CA03776279A295600D26164 /* OnboardingTitle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingTitle.swift; sourceTree = ""; }; 1CA03779279A296E00D26164 /* OnboardingMain.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingMain.swift; sourceTree = ""; }; 1CA0377B279B605000D26164 /* OnboardingWrapup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingWrapup.swift; sourceTree = ""; }; + 1CAD602B27A5C1C800C520BD /* SmallRollUpHeaderView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SmallRollUpHeaderView.swift; sourceTree = ""; }; + 1CAD602C27A5C1C800C520BD /* SettingsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = ""; }; + 1CAD602D27A5C1C800C520BD /* GraphView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GraphView.swift; sourceTree = ""; }; + 1CAD602E27A5C1C800C520BD /* FilterView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FilterView.swift; sourceTree = ""; }; + 1CAD602F27A5C1C800C520BD /* AddMoodHeaderView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddMoodHeaderView.swift; sourceTree = ""; }; + 1CAD603027A5C1C800C520BD /* HeaderPercView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HeaderPercView.swift; sourceTree = ""; }; + 1CAD603127A5C1C800C520BD /* BGView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BGView.swift; sourceTree = ""; }; + 1CAD603227A5C1C800C520BD /* ContentView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; + 1CAD603327A5C1C800C520BD /* HeaderStatsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HeaderStatsView.swift; sourceTree = ""; }; + 1CAD603D27A6ECCD00C520BD /* SwitchableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwitchableView.swift; sourceTree = ""; }; 1CC469A9278F30A0003E0C6E /* BGTask.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BGTask.swift; sourceTree = ""; }; 1CC469AB27907D48003E0C6E /* DayChartView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DayChartView.swift; sourceTree = ""; }; 1CD90AEC278C7DDF001C4FEA /* Shared.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Shared.xcdatamodel; sourceTree = ""; }; @@ -152,11 +155,6 @@ 1CD90B0E278C7DE0001C4FEA /* Tests macOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Tests macOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 1CD90B12278C7DE0001C4FEA /* Tests_macOS.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tests_macOS.swift; sourceTree = ""; }; 1CD90B14278C7DE0001C4FEA /* Tests_macOSLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tests_macOSLaunchTests.swift; sourceTree = ""; }; - 1CD90B32278C7E38001C4FEA /* SettingsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = ""; }; - 1CD90B33278C7E38001C4FEA /* GraphView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GraphView.swift; sourceTree = ""; }; - 1CD90B34278C7E38001C4FEA /* AddMoodHeaderView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddMoodHeaderView.swift; sourceTree = ""; }; - 1CD90B35278C7E38001C4FEA /* ContentView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; - 1CD90B36278C7E38001C4FEA /* HeaderStatsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HeaderStatsView.swift; sourceTree = ""; }; 1CD90B45278C7E7A001C4FEA /* FeelsWidgetExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = FeelsWidgetExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; 1CD90B47278C7E7A001C4FEA /* WidgetKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WidgetKit.framework; path = System/Library/Frameworks/WidgetKit.framework; sourceTree = SDKROOT; }; 1CD90B49278C7E7A001C4FEA /* SwiftUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftUI.framework; path = System/Library/Frameworks/SwiftUI.framework; sourceTree = SDKROOT; }; @@ -251,6 +249,23 @@ path = views; sourceTree = ""; }; + 1CAD602A27A5C1C800C520BD /* Views */ = { + isa = PBXGroup; + children = ( + 1CAD602F27A5C1C800C520BD /* AddMoodHeaderView.swift */, + 1CAD603127A5C1C800C520BD /* BGView.swift */, + 1CAD603227A5C1C800C520BD /* ContentView.swift */, + 1CAD602E27A5C1C800C520BD /* FilterView.swift */, + 1CAD602D27A5C1C800C520BD /* GraphView.swift */, + 1CAD603027A5C1C800C520BD /* HeaderPercView.swift */, + 1CAD603327A5C1C800C520BD /* HeaderStatsView.swift */, + 1CAD602C27A5C1C800C520BD /* SettingsView.swift */, + 1CAD602B27A5C1C800C520BD /* SmallRollUpHeaderView.swift */, + 1CAD603D27A6ECCD00C520BD /* SwitchableView.swift */, + ); + path = Views; + sourceTree = ""; + }; 1CD90AE5278C7DDF001C4FEA = { isa = PBXGroup; children = ( @@ -282,7 +297,7 @@ 1C683FC92792281400745862 /* Stats.swift */, 1CA03771279A291F00D26164 /* Onboarding */, 1C26190127960CDA00FDC148 /* Protocol */, - 1CD90B31278C7E38001C4FEA /* views */, + 1CAD602A27A5C1C800C520BD /* Views */, 1CD90B60278C7EBA001C4FEA /* Models */, 1CD90AF0278C7DE0001C4FEA /* Assets.xcassets */, 1CD90AEB278C7DDF001C4FEA /* Feels.xcdatamodeld */, @@ -328,21 +343,6 @@ path = "Tests macOS"; sourceTree = ""; }; - 1CD90B31278C7E38001C4FEA /* views */ = { - isa = PBXGroup; - children = ( - 1CD90B34278C7E38001C4FEA /* AddMoodHeaderView.swift */, - 1C6B37792799B78A001EF820 /* BGView.swift */, - 1CD90B35278C7E38001C4FEA /* ContentView.swift */, - 1C412081278F2B8800D9153A /* FilterView.swift */, - 1CD90B33278C7E38001C4FEA /* GraphView.swift */, - 1CD90B36278C7E38001C4FEA /* HeaderStatsView.swift */, - 1CD90B32278C7E38001C4FEA /* SettingsView.swift */, - 1C7190A327A483D300388EDC /* SmallHeaderView.swift */, - ); - path = views; - sourceTree = ""; - }; 1CD90B46278C7E7A001C4FEA /* Frameworks */ = { isa = PBXGroup; children = ( @@ -578,33 +578,35 @@ files = ( 1CA037702799FFA600D26164 /* ContentModeViewModel.swift in Sources */, 1CA03773279A293D00D26164 /* OnboardingTime.swift in Sources */, - 1CD90B39278C7E38001C4FEA /* GraphView.swift in Sources */, + 1CAD603927A5C1C800C520BD /* HeaderPercView.swift in Sources */, + 1CAD603C27A5C1C800C520BD /* HeaderStatsView.swift in Sources */, + 1CAD603827A5C1C800C520BD /* AddMoodHeaderView.swift in Sources */, 1CA0377C279B605000D26164 /* OnboardingWrapup.swift in Sources */, 1CA03775279A294800D26164 /* OnboardingDay.swift in Sources */, + 1CAD603727A5C1C800C520BD /* FilterView.swift in Sources */, 1C683FCA2792281400745862 /* Stats.swift in Sources */, + 1CAD603E27A6ECCD00C520BD /* SwitchableView.swift in Sources */, 1CD90B76278C8119001C4FEA /* LocalNotification.swift in Sources */, 1CD90B16278C7DE0001C4FEA /* Feels.xcdatamodeld in Sources */, 1CC469AA278F30A0003E0C6E /* BGTask.swift in Sources */, - 1C6B377A2799B78A001EF820 /* BGView.swift in Sources */, + 1CAD603B27A5C1C800C520BD /* ContentView.swift in Sources */, 1C5F4976279C84090092F1B4 /* OnboardingData.swift in Sources */, + 1CAD603427A5C1C800C520BD /* SmallRollUpHeaderView.swift in Sources */, + 1CAD603A27A5C1C800C520BD /* BGView.swift in Sources */, 1C26190727960DC900FDC148 /* ChartViewItemBuildable.swift in Sources */, 1CD90B5D278C7EAD001C4FEA /* Random.swift in Sources */, 1C2618FE27960A4F00FDC148 /* FilterViewModel.swift in Sources */, 1C744F2C278CE15600953A57 /* AppDelegate.swift in Sources */, 1CD90B63278C7EBA001C4FEA /* Mood.swift in Sources */, + 1CAD603527A5C1C800C520BD /* SettingsView.swift in Sources */, 1CD90B53278C7E7A001C4FEA /* FeelsWidget.intentdefinition in Sources */, - 1CD90B3D278C7E38001C4FEA /* ContentView.swift in Sources */, - 1CD90B3F278C7E38001C4FEA /* HeaderStatsView.swift in Sources */, - 1CD90B3B278C7E38001C4FEA /* AddMoodHeaderView.swift in Sources */, - 1C7190A427A483D300388EDC /* SmallHeaderView.swift in Sources */, 1CC469AC27907D48003E0C6E /* DayChartView.swift in Sources */, - 1CD90B37278C7E38001C4FEA /* SettingsView.swift in Sources */, 1C26190327960CE500FDC148 /* ChartDataBuildable.swift in Sources */, + 1CAD603627A5C1C800C520BD /* GraphView.swift in Sources */, 1CD90B66278C7EBA001C4FEA /* MoodEntryExtension.swift in Sources */, 1CD90B1C278C7DE0001C4FEA /* Persistence.swift in Sources */, 1CA0377A279A296E00D26164 /* OnboardingMain.swift in Sources */, 1C5F4978279C945E0092F1B4 /* UserDefaultsStore.swift in Sources */, - 1C412082278F2B8800D9153A /* FilterView.swift in Sources */, 1CD90B18278C7DE0001C4FEA /* FeelsApp.swift in Sources */, 1CA03777279A295600D26164 /* OnboardingTitle.swift in Sources */, ); @@ -614,14 +616,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 1C412083278F2B8800D9153A /* FilterView.swift in Sources */, 1CD90B64278C7EBA001C4FEA /* Mood.swift in Sources */, - 1CD90B3A278C7E38001C4FEA /* GraphView.swift in Sources */, 1CD90B17278C7DE0001C4FEA /* Feels.xcdatamodeld in Sources */, - 1CD90B3E278C7E38001C4FEA /* ContentView.swift in Sources */, - 1CD90B40278C7E38001C4FEA /* HeaderStatsView.swift in Sources */, - 1CD90B3C278C7E38001C4FEA /* AddMoodHeaderView.swift in Sources */, - 1CD90B38278C7E38001C4FEA /* SettingsView.swift in Sources */, 1CD90B67278C7EBA001C4FEA /* MoodEntryExtension.swift in Sources */, 1CD90B77278C8119001C4FEA /* LocalNotification.swift in Sources */, 1CD90B19278C7DE0001C4FEA /* FeelsApp.swift in Sources */, diff --git a/Shared/views/ContentView.swift b/Shared/views/ContentView.swift index 87eef7e..9b03d38 100644 --- a/Shared/views/ContentView.swift +++ b/Shared/views/ContentView.swift @@ -250,14 +250,23 @@ struct ContentView: View { .frame(height: headerHeight) .frame(minWidth: 0, maxWidth: .infinity) } else { - HeaderStatsView(fakeData: false, backDays: 30) - .frame(height: headerHeight) - - // should match backDays above - Text(String(format: String(localized: "content_view_header_title"), 30)) - .font(.body) - .foregroundColor(Color(UIColor.systemGray)) - .frame(maxWidth: .infinity, alignment: .center) + TabView { + SwitchableView(daysBack: 30) + .frame(height: headerHeight) + .frame(minWidth: 0, maxWidth: .infinity) + .contentShape(Rectangle()) + + SwitchableView(daysBack: 7) + .frame(height: headerHeight) + .frame(minWidth: 0, maxWidth: .infinity) + .contentShape(Rectangle()) + } + .tabViewStyle(.page) + .onAppear { + UIPageControl.appearance().currentPageIndicatorTintColor = UIColor.label + UIPageControl.appearance().pageIndicatorTintColor = UIColor.black.withAlphaComponent(0.2) + } + .padding(.bottom, 12) } } } @@ -305,7 +314,13 @@ struct ContentView: View { VStack { SmallRollUpHeaderView(fakeData: false, backDays: 30) - .padding([.leading, .trailing]) + .background( + Color(UIColor.systemBackground) + ) + .clipShape(RoundedRectangle(cornerRadius: 25, style: .continuous)) + .padding() + .padding([.top, .bottom], 5) + Spacer() } .opacity(1 - headerOpacity) diff --git a/Shared/views/HeaderPercView.swift b/Shared/views/HeaderPercView.swift new file mode 100644 index 0000000..297db43 --- /dev/null +++ b/Shared/views/HeaderPercView.swift @@ -0,0 +1,82 @@ +// +// HeaderPercView.swift +// Feels (iOS) +// +// Created by Trey Tartt on 1/29/22. +// + +import SwiftUI + +struct HeaderPercView: View { + typealias model = (mood: Mood, total: Int, percent: Float) + var entries = [model]() + let backDays: Int + + init(fakeData: Bool, backDays: Int) { + self.backDays = backDays + var moodEntries: [MoodEntry]? + + if fakeData { + moodEntries = PersistenceController.shared.randomEntries(count: 10) + } else { + var daysAgo = Calendar.current.date(byAdding: .day, value: -backDays, to: Date())! + daysAgo = Calendar.current.date(bySettingHour: 0, minute: 0, second: 0, of: daysAgo)! + + moodEntries = PersistenceController.shared.getData(startDate: daysAgo, endDate: Date(), includedDays: [1,2,3,4,5,6,7]) + } + + let totalEntryCount = moodEntries?.count ?? 0 + + if let moodEntries = moodEntries { + for (_, mood) in Mood.allValues.enumerated() { + + let moodEntries = moodEntries.filter({ + Int($0.moodValue) == mood.rawValue + }) + + let total = moodEntries.count + + let perc = (Float(total) / Float(totalEntryCount)) * 100 + + + entries.append((mood, total, perc)) + } + } + + entries = entries.sorted(by: { + $0.0.rawValue > $1.0.rawValue + }) + } + + var body: some View { + VStack { + Spacer() + HStack { + ForEach(entries.prefix(3), id: \.0) { model in + Text("\(model.percent, specifier: "%.0f")%") + .font(.title) + .fontWeight(.bold) + .foregroundColor(model.mood.color) + .frame(maxWidth: .infinity) + } + } + Spacer() + HStack { + ForEach(entries.suffix(2), id: \.0) { model in + Text("\(model.percent, specifier: "%.0f")%") + .font(.title) + .fontWeight(.bold) + .foregroundColor(model.mood.color) + .frame(maxWidth: .infinity) + } + } + Spacer() + } + } +} + +struct HeaderPercView_Previews: PreviewProvider { + static var previews: some View { + SmallRollUpHeaderView(fakeData: true, backDays: 30) + } +} diff --git a/Shared/views/HeaderStatsView.swift b/Shared/views/HeaderStatsView.swift index 8b25542..f6a026d 100644 --- a/Shared/views/HeaderStatsView.swift +++ b/Shared/views/HeaderStatsView.swift @@ -95,6 +95,8 @@ struct HeaderStatsView : UIViewRepresentable { dataSet.colors = Mood.allValues.map({ NSUIColor( $0.color ) }) dataSet.secondaryTextColor = UIColor.systemGray dataSet.valueColors = [.white] + dataSet.highlightAlpha = 0.0 + if let descriptor = UIFontDescriptor.preferredFontDescriptor( withTextStyle: .body).withSymbolicTraits([.traitBold]) { dataSet.valueFont = UIFont(descriptor: descriptor, size: 0) diff --git a/Shared/views/SmallHeaderView.swift b/Shared/views/SmallRollUpHeaderView.swift similarity index 98% rename from Shared/views/SmallHeaderView.swift rename to Shared/views/SmallRollUpHeaderView.swift index 9fe8444..f94b2e6 100644 --- a/Shared/views/SmallHeaderView.swift +++ b/Shared/views/SmallRollUpHeaderView.swift @@ -54,7 +54,6 @@ struct SmallRollUpHeaderView: View { .frame(maxWidth: .infinity, alignment: .center) .padding(.top, 2) } - .padding([.top]) } } diff --git a/Shared/views/SwitchableView.swift b/Shared/views/SwitchableView.swift new file mode 100644 index 0000000..ed6940b --- /dev/null +++ b/Shared/views/SwitchableView.swift @@ -0,0 +1,51 @@ +// +// SwitchableView.swift +// Feels (iOS) +// +// Created by Trey Tartt on 1/30/22. +// + +import SwiftUI + + +struct SwitchableView: View { + @State var currentViewIdx = 0 + + let daysBack: Int + + var body: some View { + VStack { + ZStack { + HeaderStatsView(fakeData: false, backDays: daysBack) + .opacity(currentViewIdx == 0 ? 1 : 0) + + HeaderPercView(fakeData: false, backDays: daysBack) + .opacity(currentViewIdx == 1 ? 1 : 0) + } + .padding([.top, .bottom], -7) + + Text(String(format: String(localized: "content_view_header_title"), daysBack)) + .font(.body) + .foregroundColor(Color(UIColor.systemGray)) + .frame(maxWidth: .infinity, alignment: .center) + .padding(.bottom, 15) + } + .background( + Color(UIColor.systemBackground) + ) + .clipShape(RoundedRectangle(cornerRadius: 25, style: .continuous)) + .padding() + .onTapGesture { + currentViewIdx += 1 + if currentViewIdx == 2 { + currentViewIdx = 0 + } + } + } +} + +struct SwitchableView_Previews: PreviewProvider { + static var previews: some View { + SwitchableView(daysBack: 30) + } +}