filtering days in customize will filter views
This commit is contained in:
@@ -14,6 +14,8 @@ struct FeelsApp: App {
|
||||
@Environment(\.scenePhase) private var scenePhase
|
||||
@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
|
||||
|
||||
@StateObject var daysFilter = DaysFilterClass()
|
||||
|
||||
let persistenceController = PersistenceController.shared
|
||||
|
||||
init() {
|
||||
@@ -28,6 +30,7 @@ struct FeelsApp: App {
|
||||
WindowGroup {
|
||||
MainTabView()
|
||||
.environment(\.managedObjectContext, persistenceController.viewContext)
|
||||
.environmentObject(daysFilter)
|
||||
}.onChange(of: scenePhase) { phase in
|
||||
if phase == .background {
|
||||
// BGTask.scheduleBackgroundProcessing()
|
||||
|
||||
@@ -5,13 +5,14 @@
|
||||
// Created by Trey Tartt on 3/31/22.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import SwiftUI
|
||||
|
||||
class DaysFilterClass: ObservableObject {
|
||||
@Published public private(set) var currentFilters = [Int]()
|
||||
@Published public var currentFilters = [Int]()
|
||||
|
||||
init() {
|
||||
currentFilters = UserDefaultsStore.getDaysFilter()
|
||||
let storedDays = UserDefaultsStore.getDaysFilter()
|
||||
currentFilters = storedDays
|
||||
}
|
||||
|
||||
func addFilter(newFilter: Int) {
|
||||
|
||||
@@ -48,10 +48,10 @@ extension PersistenceController {
|
||||
return data
|
||||
}
|
||||
|
||||
public func splitIntoYearMonth() -> [Int: [Int: [MoodEntry]]] {
|
||||
public func splitIntoYearMonth(includedDays: [Int]) -> [Int: [Int: [MoodEntry]]] {
|
||||
let data = PersistenceController.shared.getData(startDate: Date(timeIntervalSince1970: 0),
|
||||
endDate: Date(),
|
||||
includedDays: [1,2,3,4,5,6,7]).sorted(by: {
|
||||
includedDays: includedDays).sorted(by: {
|
||||
$0.forDate! < $1.forDate!
|
||||
})
|
||||
var returnData = [Int: [Int: [MoodEntry]]]()
|
||||
|
||||
@@ -33,7 +33,7 @@ struct CustomizeView: View {
|
||||
|
||||
@StateObject private var selectedWidget = StupidAssCustomWidgetObservableObject()
|
||||
|
||||
@StateObject private var daysFilter = DaysFilterClass()
|
||||
@EnvironmentObject var daysFilter: DaysFilterClass
|
||||
|
||||
let weekdays = [("Sun", 1),
|
||||
("mon", 2),
|
||||
|
||||
@@ -27,4 +27,12 @@ struct DayChartView: ChartViewItemBuildable, View, Hashable {
|
||||
alignment: .center)
|
||||
.opacity(color == Mood.missing.color ? 0.5 : 1.0)
|
||||
}
|
||||
|
||||
var filteredDaysView: some View {
|
||||
shape.view(withText: Text(""), bgColor: Mood.missing.color, textColor: .clear)
|
||||
.frame(minWidth: 5, idealWidth: 50, maxWidth: 50,
|
||||
minHeight: 5, idealHeight: 20, maxHeight: 50,
|
||||
alignment: .center)
|
||||
.opacity(color == Mood.missing.color ? 0.5 : 1.0)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,14 +9,16 @@ import SwiftUI
|
||||
import CoreData
|
||||
import Charts
|
||||
|
||||
struct HomeViewConstants {
|
||||
struct DayViewConstants {
|
||||
static let maxHeaderHeight = 200.0
|
||||
static let minHeaderHeight = 120.0
|
||||
}
|
||||
|
||||
struct DayView: View {
|
||||
@EnvironmentObject var daysFilter: DaysFilterClass
|
||||
|
||||
@Environment(\.managedObjectContext) private var viewContext
|
||||
|
||||
|
||||
@AppStorage(UserDefaultsStore.Keys.deleteEnable.rawValue, store: GroupUserDefaults.groupDefaults) private var deleteEnabled = true
|
||||
|
||||
@AppStorage(UserDefaultsStore.Keys.theme.rawValue, store: GroupUserDefaults.groupDefaults) private var theme: Theme = .system
|
||||
@@ -47,12 +49,12 @@ struct DayView: View {
|
||||
@StateObject private var onboardingData = OnboardingDataDataManager.shared
|
||||
|
||||
// MARK: header properties
|
||||
@State private var headerHeight: CGFloat = HomeViewConstants.maxHeaderHeight
|
||||
@State private var headerHeight: CGFloat = DayViewConstants.maxHeaderHeight
|
||||
@State private var headerViewType: MainSwitchableViewType = .total
|
||||
@State private var headerOpacity: Double = 1.0
|
||||
//
|
||||
|
||||
@ObservedObject var viewModel = HomeViewViewModel(addMonthStartWeekdayPadding: false)
|
||||
@ObservedObject var viewModel: DayViewViewModel = DayViewViewModel(addMonthStartWeekdayPadding: false)
|
||||
|
||||
var body: some View {
|
||||
mainView
|
||||
@@ -62,7 +64,7 @@ struct DayView: View {
|
||||
.sheet(isPresented: $showingSheet) {
|
||||
SettingsView()
|
||||
}
|
||||
.alert(HomeViewViewModel.updateTitleHeader(forEntry: selectedEntry),
|
||||
.alert(DayViewViewModel.updateTitleHeader(forEntry: selectedEntry),
|
||||
isPresented: $showUpdateEntryAlert) {
|
||||
ForEach(Mood.allValues) { mood in
|
||||
Button(mood.strValue, action: {
|
||||
@@ -92,7 +94,7 @@ struct DayView: View {
|
||||
|
||||
// MARK: functions that do view type work
|
||||
func calcuateViewAlpha() {
|
||||
let perc = (((Double(headerHeight) - HomeViewConstants.minHeaderHeight) * 100) / (HomeViewConstants.maxHeaderHeight - HomeViewConstants.minHeaderHeight)) / 100
|
||||
let perc = (((Double(headerHeight) - DayViewConstants.minHeaderHeight) * 100) / (DayViewConstants.maxHeaderHeight - DayViewConstants.minHeaderHeight)) / 100
|
||||
headerOpacity = perc
|
||||
}
|
||||
|
||||
@@ -142,7 +144,7 @@ struct DayView: View {
|
||||
VStack {
|
||||
SmallRollUpHeaderView(entries: getBackEntries(),
|
||||
viewType: $currentSelectedHeaderViewViewType)
|
||||
.frame(height: HomeViewConstants.minHeaderHeight)
|
||||
.frame(height: DayViewConstants.minHeaderHeight)
|
||||
.padding([.trailing, .leading])
|
||||
.background(
|
||||
theme.currentTheme.secondaryBGColor
|
||||
@@ -263,8 +265,8 @@ struct DayView: View {
|
||||
.coordinateSpace(name: "scroll")
|
||||
.onPreferenceChange(ViewOffsetKey.self) { value in
|
||||
if viewModel.numberOfItems > 10 {
|
||||
calculateHeight(minHeight: HomeViewConstants.minHeaderHeight,
|
||||
maxHeight: HomeViewConstants.maxHeaderHeight,
|
||||
calculateHeight(minHeight: DayViewConstants.minHeaderHeight,
|
||||
maxHeight: DayViewConstants.maxHeaderHeight,
|
||||
yOffset: value)
|
||||
}
|
||||
}
|
||||
@@ -298,12 +300,14 @@ extension DayView {
|
||||
ForEach(entries.sorted(by: {
|
||||
return $0.forDate! > $1.forDate!
|
||||
}), id: \.self) { entry in
|
||||
EntryListView(entry: entry)
|
||||
.contentShape(Rectangle())
|
||||
.onTapGesture(perform: {
|
||||
selectedEntry = entry
|
||||
showUpdateEntryAlert = true
|
||||
})
|
||||
if daysFilter.currentFilters.contains(Int(entry.weekDay)) {
|
||||
EntryListView(entry: entry)
|
||||
.contentShape(Rectangle())
|
||||
.onTapGesture(perform: {
|
||||
selectedEntry = entry
|
||||
showUpdateEntryAlert = true
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -326,12 +330,12 @@ private let itemFormatter: DateFormatter = {
|
||||
|
||||
struct DayView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
DayView().environment(\.managedObjectContext, PersistenceController.shared.viewContext)
|
||||
DayView(viewModel: DayViewViewModel(addMonthStartWeekdayPadding: false)).environment(\.managedObjectContext, PersistenceController.shared.viewContext)
|
||||
.onAppear(perform: {
|
||||
PersistenceController.shared.populateMemory()
|
||||
})
|
||||
|
||||
DayView()
|
||||
DayView(viewModel: DayViewViewModel(addMonthStartWeekdayPadding: false))
|
||||
.preferredColorScheme(.dark)
|
||||
.environment(\.managedObjectContext, PersistenceController.shared.viewContext)
|
||||
}
|
||||
@@ -8,7 +8,7 @@
|
||||
import SwiftUI
|
||||
import CoreData
|
||||
|
||||
class HomeViewViewModel: ObservableObject {
|
||||
class DayViewViewModel: ObservableObject {
|
||||
@Published var grouped = [Int: [Int: [MoodEntry]]]()
|
||||
@Published var numberOfItems = 0
|
||||
|
||||
@@ -52,7 +52,7 @@ class HomeViewViewModel: ObservableObject {
|
||||
}
|
||||
|
||||
private func getGroupedData(addMonthStartWeekdayPadding: Bool) {
|
||||
var newStuff = PersistenceController.shared.splitIntoYearMonth()
|
||||
var newStuff = PersistenceController.shared.splitIntoYearMonth(includedDays: [1,2,3,4,5,6,7])
|
||||
if addMonthStartWeekdayPadding {
|
||||
newStuff = MoodEntryFunctions.padMoodEntriesForCalendar(entries: newStuff)
|
||||
}
|
||||
@@ -11,7 +11,7 @@ struct EmptyHomeView: View {
|
||||
@AppStorage(UserDefaultsStore.Keys.theme.rawValue, store: GroupUserDefaults.groupDefaults) private var theme: Theme = .system
|
||||
@AppStorage(UserDefaultsStore.Keys.textColor.rawValue, store: GroupUserDefaults.groupDefaults) private var textColor: Color = DefaultTextColor.textColor
|
||||
|
||||
let viewModel: HomeViewViewModel
|
||||
let viewModel: DayViewViewModel
|
||||
|
||||
var body: some View {
|
||||
ZStack {
|
||||
@@ -32,6 +32,6 @@ struct EmptyHomeView: View {
|
||||
|
||||
struct EmptyHomeView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
EmptyHomeView(viewModel: HomeViewViewModel(addMonthStartWeekdayPadding: false))
|
||||
EmptyHomeView(viewModel: DayViewViewModel(addMonthStartWeekdayPadding: false))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,6 +8,8 @@
|
||||
import SwiftUI
|
||||
|
||||
struct MainTabView: View {
|
||||
@EnvironmentObject var daysFilter: DaysFilterClass
|
||||
|
||||
@AppStorage(UserDefaultsStore.Keys.needsOnboarding.rawValue, store: GroupUserDefaults.groupDefaults) private var needsOnboarding = true
|
||||
|
||||
@AppStorage(UserDefaultsStore.Keys.theme.rawValue, store: GroupUserDefaults.groupDefaults) private var theme: Theme = .system
|
||||
@@ -23,7 +25,7 @@ struct MainTabView: View {
|
||||
Label(String(localized: "content_view_tab_main"), systemImage: "list.dash")
|
||||
}
|
||||
|
||||
MonthView()
|
||||
MonthView(viewModel: DayViewViewModel(addMonthStartWeekdayPadding: true))
|
||||
.tabItem {
|
||||
Label(String(localized: "content_view_tab_month"), systemImage: "calendar")
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ struct MonthDetailView: View {
|
||||
let monthInt: Int
|
||||
let yearInt: Int
|
||||
@State var entries: [MoodEntry]
|
||||
var parentViewModel: HomeViewViewModel
|
||||
var parentViewModel: DayViewViewModel
|
||||
|
||||
let columns = [
|
||||
GridItem(.flexible(minimum: 5, maximum: 500)),
|
||||
@@ -86,7 +86,7 @@ struct MonthDetailView: View {
|
||||
ShareSheet(photo: uiImage)
|
||||
}
|
||||
}
|
||||
.alert(HomeViewViewModel.updateTitleHeader(forEntry: selectedEntry), isPresented: $showUpdateEntryAlert) {
|
||||
.alert(DayViewViewModel.updateTitleHeader(forEntry: selectedEntry), isPresented: $showUpdateEntryAlert) {
|
||||
ForEach(Mood.allValues) { mood in
|
||||
Button(mood.strValue, action: {
|
||||
if let selectedEntry = selectedEntry {
|
||||
@@ -225,6 +225,6 @@ struct MonthDetailView_Previews: PreviewProvider {
|
||||
MonthDetailView(monthInt: 5, yearInt: 2022, entries:
|
||||
PersistenceController.shared.randomEntries(count: 30).sorted(by: {
|
||||
$0.forDate! < $1.forDate!
|
||||
}), parentViewModel: HomeViewViewModel(addMonthStartWeekdayPadding: true))
|
||||
}), parentViewModel: DayViewViewModel(addMonthStartWeekdayPadding: true))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,6 +8,8 @@
|
||||
import SwiftUI
|
||||
|
||||
struct MonthView: View {
|
||||
@EnvironmentObject var daysFilter: DaysFilterClass
|
||||
|
||||
@AppStorage(UserDefaultsStore.Keys.needsOnboarding.rawValue, store: GroupUserDefaults.groupDefaults) private var needsOnboarding = true
|
||||
|
||||
@AppStorage(UserDefaultsStore.Keys.theme.rawValue, store: GroupUserDefaults.groupDefaults) private var theme: Theme = .system
|
||||
@@ -22,7 +24,6 @@ struct MonthView: View {
|
||||
// store a value that gets changed when user updates custom colors to update the view since the moodTint doesn't change
|
||||
@AppStorage(UserDefaultsStore.Keys.customMoodTintUpdateNumber.rawValue, store: GroupUserDefaults.groupDefaults) private var customMoodTintUpdateNumber: Int = 0
|
||||
|
||||
@ObservedObject var viewModel = HomeViewViewModel(addMonthStartWeekdayPadding: true)
|
||||
|
||||
@StateObject private var selectedDetail = StupidAssDetailViewObservableObject()
|
||||
@State private var showingSheet = false
|
||||
@@ -43,6 +44,8 @@ struct MonthView: View {
|
||||
GridItem(.flexible(minimum: 5, maximum: 400))
|
||||
]
|
||||
|
||||
@ObservedObject var viewModel: DayViewViewModel
|
||||
|
||||
var body: some View {
|
||||
ZStack {
|
||||
if viewModel.hasNoData {
|
||||
@@ -201,10 +204,17 @@ extension MonthView {
|
||||
Divider()
|
||||
LazyVGrid(columns: columns, spacing: 15) {
|
||||
ForEach(entries, id: \.self) { entry in
|
||||
shape.view(withText: Text(""),
|
||||
bgColor: entry.mood == .placeholder ? .clear : moodTint.color(forMood: entry.mood),
|
||||
textColor: .clear)
|
||||
.frame(minHeight: 25, idealHeight: 25, maxHeight: 50, alignment: .center)
|
||||
if daysFilter.currentFilters.contains(Int(entry.weekDay)) {
|
||||
shape.view(withText: Text(""),
|
||||
bgColor: entry.mood == .placeholder ? .clear : moodTint.color(forMood: entry.mood),
|
||||
textColor: .clear)
|
||||
.frame(minHeight: 25, idealHeight: 25, maxHeight: 50, alignment: .center)
|
||||
} else {
|
||||
shape.view(withText: Text(""),
|
||||
bgColor: .clear,
|
||||
textColor: .clear)
|
||||
.frame(minHeight: 25, idealHeight: 25, maxHeight: 50, alignment: .center)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -223,6 +233,6 @@ extension MonthView {
|
||||
|
||||
struct HomeViewTwo_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
MonthView()
|
||||
MonthView(viewModel: DayViewViewModel(addMonthStartWeekdayPadding: true))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,8 @@ import SwiftUI
|
||||
import CoreData
|
||||
|
||||
struct YearView: View {
|
||||
@EnvironmentObject var daysFilter: DaysFilterClass
|
||||
|
||||
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
|
||||
@@ -22,7 +24,7 @@ struct YearView: View {
|
||||
@AppStorage(UserDefaultsStore.Keys.moodTint.rawValue, store: GroupUserDefaults.groupDefaults) private var moodTint: MoodTints = .Default
|
||||
@AppStorage(UserDefaultsStore.Keys.textColor.rawValue, store: GroupUserDefaults.groupDefaults) private var textColor: Color = DefaultTextColor.textColor
|
||||
|
||||
@StateObject private var viewModel = FilterViewModel()
|
||||
@StateObject private var viewModel = YearViewModel()
|
||||
//[
|
||||
// 2001: [0: [], 1: [], 2: []],
|
||||
// 2002: [0: [], 1: [], 2: []]
|
||||
@@ -159,12 +161,18 @@ struct YearView: View {
|
||||
}
|
||||
|
||||
private struct monthGridView: View {
|
||||
@EnvironmentObject var daysFilter: DaysFilterClass
|
||||
|
||||
let monthData: [DayChartView]
|
||||
|
||||
var body: some View {
|
||||
VStack {
|
||||
ForEach(monthData, id: \.self) { view in
|
||||
view
|
||||
if daysFilter.currentFilters.contains(view.weekDay) {
|
||||
view
|
||||
} else {
|
||||
view.filteredDaysView
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
import Foundation
|
||||
|
||||
class FilterViewModel: ObservableObject {
|
||||
class YearViewModel: ObservableObject {
|
||||
@Published public var entryStartDate: Date = Date()
|
||||
@Published public var entryEndDate: Date = Date()
|
||||
@Published var selectedDays = [Int]()
|
||||
Reference in New Issue
Block a user