update top header graph view when custom color changes
code cleanup
This commit is contained in:
@@ -30,14 +30,12 @@ struct FeelsApp: App {
|
|||||||
.environment(\.managedObjectContext, persistenceController.viewContext)
|
.environment(\.managedObjectContext, persistenceController.viewContext)
|
||||||
}.onChange(of: scenePhase) { phase in
|
}.onChange(of: scenePhase) { phase in
|
||||||
if phase == .background {
|
if phase == .background {
|
||||||
BGTask.scheduleBackgroundProcessing()
|
// BGTask.scheduleBackgroundProcessing()
|
||||||
WidgetCenter.shared.reloadAllTimelines()
|
WidgetCenter.shared.reloadAllTimelines()
|
||||||
}
|
}
|
||||||
|
|
||||||
if phase == .active {
|
if phase == .active {
|
||||||
UIApplication.shared.applicationIconBadgeNumber = 0
|
UIApplication.shared.applicationIconBadgeNumber = 0
|
||||||
print("UserDefaultsStore input day", UserDefaultsStore.getOnboarding().inputDay)
|
|
||||||
print("UserDefaultsStore input date", UserDefaultsStore.getOnboarding().date)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,8 +13,6 @@ class PersistenceController {
|
|||||||
|
|
||||||
static let shared = PersistenceController.persistenceController
|
static let shared = PersistenceController.persistenceController
|
||||||
|
|
||||||
public var listeners = [(() -> Void)]()
|
|
||||||
|
|
||||||
private static var persistenceController: PersistenceController {
|
private static var persistenceController: PersistenceController {
|
||||||
return PersistenceController(inMemory: false)
|
return PersistenceController(inMemory: false)
|
||||||
}
|
}
|
||||||
@@ -23,8 +21,14 @@ class PersistenceController {
|
|||||||
return PersistenceController.shared.container.viewContext
|
return PersistenceController.shared.container.viewContext
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public lazy var childContext: NSManagedObjectContext = {
|
||||||
|
NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
|
||||||
|
}()
|
||||||
|
|
||||||
public var switchContainerListeners = [(() -> Void)]()
|
public var switchContainerListeners = [(() -> Void)]()
|
||||||
|
|
||||||
|
private var editedDataClosure = [() -> Void]()
|
||||||
|
|
||||||
public var earliestEntry: MoodEntry? {
|
public var earliestEntry: MoodEntry? {
|
||||||
let fetchRequest = NSFetchRequest<MoodEntry>(entityName: "MoodEntry")
|
let fetchRequest = NSFetchRequest<MoodEntry>(entityName: "MoodEntry")
|
||||||
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "forDate", ascending: true)]
|
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "forDate", ascending: true)]
|
||||||
@@ -51,6 +55,16 @@ class PersistenceController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public func addNewDataListener(closure: @escaping (() -> Void)) {
|
||||||
|
editedDataClosure.append(closure)
|
||||||
|
}
|
||||||
|
|
||||||
|
public func runDataListeners() {
|
||||||
|
for closure in editedDataClosure {
|
||||||
|
closure()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private func setupContainer() -> NSPersistentContainer {
|
private func setupContainer() -> NSPersistentContainer {
|
||||||
if useCloudKit {
|
if useCloudKit {
|
||||||
container = NSPersistentCloudKitContainer(name: "Feels")
|
container = NSPersistentCloudKitContainer(name: "Feels")
|
||||||
@@ -79,12 +93,6 @@ class PersistenceController {
|
|||||||
init(inMemory: Bool = false) {
|
init(inMemory: Bool = false) {
|
||||||
container = setupContainer()
|
container = setupContainer()
|
||||||
}
|
}
|
||||||
|
|
||||||
func updateListeners() {
|
|
||||||
for listener in listeners {
|
|
||||||
listener()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extension NSManagedObjectContext {
|
extension NSManagedObjectContext {
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ extension PersistenceController {
|
|||||||
|
|
||||||
do {
|
do {
|
||||||
try viewContext.save()
|
try viewContext.save()
|
||||||
updateListeners()
|
runDataListeners()
|
||||||
} catch {
|
} catch {
|
||||||
let nsError = error as NSError
|
let nsError = error as NSError
|
||||||
fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
|
fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ extension PersistenceController {
|
|||||||
do {
|
do {
|
||||||
try viewContext.executeAndMergeChanges(using: deleteRequest)
|
try viewContext.executeAndMergeChanges(using: deleteRequest)
|
||||||
try viewContext.save()
|
try viewContext.save()
|
||||||
updateListeners()
|
runDataListeners()
|
||||||
} catch let error as NSError {
|
} catch let error as NSError {
|
||||||
fatalError("Unresolved error \(error), \(error.userInfo)")
|
fatalError("Unresolved error \(error), \(error.userInfo)")
|
||||||
}
|
}
|
||||||
@@ -25,7 +25,7 @@ extension PersistenceController {
|
|||||||
if let entry = PersistenceController.shared.getEntry(byDate: forDate) {
|
if let entry = PersistenceController.shared.getEntry(byDate: forDate) {
|
||||||
viewContext.delete(entry)
|
viewContext.delete(entry)
|
||||||
try! viewContext.save()
|
try! viewContext.save()
|
||||||
updateListeners()
|
runDataListeners()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,10 +8,6 @@
|
|||||||
import CoreData
|
import CoreData
|
||||||
|
|
||||||
extension PersistenceController {
|
extension PersistenceController {
|
||||||
private var childContext: NSManagedObjectContext {
|
|
||||||
return NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
|
|
||||||
}
|
|
||||||
|
|
||||||
public func randomEntries(count: Int) -> [MoodEntry] {
|
public func randomEntries(count: Int) -> [MoodEntry] {
|
||||||
var entries = [MoodEntry]()
|
var entries = [MoodEntry]()
|
||||||
|
|
||||||
@@ -63,19 +59,24 @@ extension PersistenceController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func populateTestData() {
|
func populateTestData() {
|
||||||
for idx in 1..<120 {
|
|
||||||
let newItem = MoodEntry(context: viewContext)
|
|
||||||
newItem.timestamp = Date()
|
|
||||||
newItem.moodValue = Int16(Mood.allValues.randomElement()!.rawValue)
|
|
||||||
newItem.canEdit = true
|
|
||||||
newItem.canDelete = true
|
|
||||||
|
|
||||||
let date = Calendar.current.date(byAdding: .day, value: -idx, to: Date())!
|
|
||||||
newItem.forDate = date
|
|
||||||
newItem.weekDay = Int16(Calendar.current.component(.weekday, from: date))
|
|
||||||
}
|
|
||||||
do {
|
do {
|
||||||
|
self.clearDB()
|
||||||
try viewContext.save()
|
try viewContext.save()
|
||||||
|
|
||||||
|
for idx in 1..<120 {
|
||||||
|
let newItem = MoodEntry(context: viewContext)
|
||||||
|
newItem.timestamp = Date()
|
||||||
|
newItem.moodValue = Int16(Mood.allValues.randomElement()!.rawValue)
|
||||||
|
newItem.canEdit = true
|
||||||
|
newItem.canDelete = true
|
||||||
|
|
||||||
|
let date = Calendar.current.date(byAdding: .day, value: -idx, to: Date())!
|
||||||
|
newItem.forDate = date
|
||||||
|
newItem.weekDay = Int16(Calendar.current.component(.weekday, from: date))
|
||||||
|
}
|
||||||
|
|
||||||
|
try viewContext.save()
|
||||||
|
runDataListeners()
|
||||||
} catch {
|
} catch {
|
||||||
// Replace this implementation with code to handle the error appropriately.
|
// Replace this implementation with code to handle the error appropriately.
|
||||||
// fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
|
// fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ extension PersistenceController {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
updateListeners()
|
runDataListeners()
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,10 +11,16 @@ import Charts
|
|||||||
struct HeaderStatsView : UIViewRepresentable {
|
struct HeaderStatsView : UIViewRepresentable {
|
||||||
//Bar chart accepts data as array of BarChartDataEntry objects
|
//Bar chart accepts data as array of BarChartDataEntry objects
|
||||||
var entries : [BarChartDataEntry]
|
var entries : [BarChartDataEntry]
|
||||||
var moodTint: MoodTints
|
var moodTints: [Color]
|
||||||
|
|
||||||
init(fakeData: Bool, backDays: Int, moodTint: MoodTints) {
|
var tmpHolderToMakeViewDiffefrent: Color
|
||||||
self.moodTint = moodTint
|
|
||||||
|
init(fakeData: Bool, backDays: Int, moodTint: [Color]) {
|
||||||
|
self.moodTints = moodTint
|
||||||
|
guard moodTints.count == 5 else {
|
||||||
|
fatalError("mood tint count dont match")
|
||||||
|
}
|
||||||
|
self.tmpHolderToMakeViewDiffefrent = Color.random()
|
||||||
entries = [BarChartDataEntry]()
|
entries = [BarChartDataEntry]()
|
||||||
|
|
||||||
var moodEntries: [MoodEntry]?
|
var moodEntries: [MoodEntry]?
|
||||||
@@ -98,7 +104,7 @@ struct HeaderStatsView : UIViewRepresentable {
|
|||||||
let dataSet = BarChartDataSet(entries: entries)
|
let dataSet = BarChartDataSet(entries: entries)
|
||||||
|
|
||||||
// change bars color to green
|
// change bars color to green
|
||||||
dataSet.colors = Mood.allValues.map({ NSUIColor( moodTint.color(forMood: $0) ) })
|
dataSet.colors = moodTints.map({ NSUIColor( $0 ) })
|
||||||
dataSet.secondaryTextColor = UIColor.systemGray
|
dataSet.secondaryTextColor = UIColor.systemGray
|
||||||
dataSet.valueColors = [.white]
|
dataSet.valueColors = [.white]
|
||||||
dataSet.highlightAlpha = 0.0
|
dataSet.highlightAlpha = 0.0
|
||||||
@@ -122,6 +128,6 @@ struct HeaderStatsView : UIViewRepresentable {
|
|||||||
|
|
||||||
struct HeaderStatsView_Previews: PreviewProvider {
|
struct HeaderStatsView_Previews: PreviewProvider {
|
||||||
static var previews: some View {
|
static var previews: some View {
|
||||||
HeaderStatsView(fakeData: true, backDays: 30, moodTint: .Default).frame(minHeight: 85, maxHeight: 90)
|
HeaderStatsView(fakeData: true, backDays: 30, moodTint: [Color.green, Color.blue, Color.yellow, Color.red, Color.orange]).frame(minHeight: 85, maxHeight: 90)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,9 @@ struct HomeView: View {
|
|||||||
@AppStorage(UserDefaultsStore.Keys.moodImages.rawValue, store: GroupUserDefaults.groupDefaults) private var imagePack: MoodImages = .FontAwesome
|
@AppStorage(UserDefaultsStore.Keys.moodImages.rawValue, store: GroupUserDefaults.groupDefaults) private var imagePack: MoodImages = .FontAwesome
|
||||||
@AppStorage(UserDefaultsStore.Keys.moodTint.rawValue, store: GroupUserDefaults.groupDefaults) private var moodTint: MoodTints = .Default
|
@AppStorage(UserDefaultsStore.Keys.moodTint.rawValue, store: GroupUserDefaults.groupDefaults) private var moodTint: MoodTints = .Default
|
||||||
|
|
||||||
|
// 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
|
||||||
|
|
||||||
// MARK: top header storage
|
// MARK: top header storage
|
||||||
@AppStorage(UserDefaultsStore.Keys.contentViewCurrentSelectedHeaderViewBackDays.rawValue, store: GroupUserDefaults.groupDefaults) private var currentSelectedHeaderViewBackDays: Int = 30
|
@AppStorage(UserDefaultsStore.Keys.contentViewCurrentSelectedHeaderViewBackDays.rawValue, store: GroupUserDefaults.groupDefaults) private var currentSelectedHeaderViewBackDays: Int = 30
|
||||||
@AppStorage(UserDefaultsStore.Keys.contentViewHeaderTagViewOneViewType.rawValue, store: GroupUserDefaults.groupDefaults) private var firstSwichableHeaderViewType: MainSwitchableViewType = .total
|
@AppStorage(UserDefaultsStore.Keys.contentViewHeaderTagViewOneViewType.rawValue, store: GroupUserDefaults.groupDefaults) private var firstSwichableHeaderViewType: MainSwitchableViewType = .total
|
||||||
@@ -119,6 +122,10 @@ struct HomeView: View {
|
|||||||
Spacer()
|
Spacer()
|
||||||
} else {
|
} else {
|
||||||
ZStack {
|
ZStack {
|
||||||
|
|
||||||
|
Text(String(customMoodTintUpdateNumber))
|
||||||
|
.hidden()
|
||||||
|
|
||||||
VStack {
|
VStack {
|
||||||
headerView
|
headerView
|
||||||
Spacer()
|
Spacer()
|
||||||
@@ -167,11 +174,7 @@ struct HomeView: View {
|
|||||||
.foregroundColor(Color(UIColor.darkGray))
|
.foregroundColor(Color(UIColor.darkGray))
|
||||||
.font(.system(size: 20))
|
.font(.system(size: 20))
|
||||||
}).sheet(isPresented: $showingSheet) {
|
}).sheet(isPresented: $showingSheet) {
|
||||||
SettingsView(editedDataClosure: {
|
SettingsView()
|
||||||
withAnimation{
|
|
||||||
viewModel.updateData()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}.padding(.trailing)
|
}.padding(.trailing)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,10 +41,12 @@ class HomeViewViewModel: ObservableObject {
|
|||||||
|
|
||||||
PersistenceController.shared.switchContainerListeners.append {
|
PersistenceController.shared.switchContainerListeners.append {
|
||||||
self.getGroupedData(addMonthStartWeekdayPadding: self.addMonthStartWeekdayPadding)
|
self.getGroupedData(addMonthStartWeekdayPadding: self.addMonthStartWeekdayPadding)
|
||||||
|
|
||||||
}
|
}
|
||||||
PersistenceController.shared.listeners.append { [weak self] in
|
|
||||||
self?.updateData()
|
PersistenceController.shared.addNewDataListener {
|
||||||
|
withAnimation{
|
||||||
|
self.updateData()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
updateData()
|
updateData()
|
||||||
}
|
}
|
||||||
@@ -55,7 +57,7 @@ class HomeViewViewModel: ObservableObject {
|
|||||||
if addMonthStartWeekdayPadding {
|
if addMonthStartWeekdayPadding {
|
||||||
grouped = MoodEntryFunctions.padMoodEntriesForCalendar(entries: grouped)
|
grouped = MoodEntryFunctions.padMoodEntriesForCalendar(entries: grouped)
|
||||||
}
|
}
|
||||||
|
//
|
||||||
numberOfItems = numberOfEntries
|
numberOfItems = numberOfEntries
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,12 +69,11 @@ class HomeViewViewModel: ObservableObject {
|
|||||||
|
|
||||||
public func add(mood: Mood, forDate date: Date, entryType: EntryType) {
|
public func add(mood: Mood, forDate date: Date, entryType: EntryType) {
|
||||||
PersistenceController.shared.add(mood: mood, forDate: date, entryType: entryType)
|
PersistenceController.shared.add(mood: mood, forDate: date, entryType: entryType)
|
||||||
updateData()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public func update(entry: MoodEntry, toMood mood: Mood) {
|
public func update(entry: MoodEntry, toMood mood: Mood) {
|
||||||
if PersistenceController.shared.update(entryDate: entry.forDate!, withModd: mood) {
|
if !PersistenceController.shared.update(entryDate: entry.forDate!, withModd: mood) {
|
||||||
updateData()
|
#warning("show error")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -96,7 +97,6 @@ class HomeViewViewModel: ObservableObject {
|
|||||||
|
|
||||||
do {
|
do {
|
||||||
try PersistenceController.shared.viewContext.save()
|
try PersistenceController.shared.viewContext.save()
|
||||||
updateData()
|
|
||||||
} catch {
|
} catch {
|
||||||
// Replace this implementation with code to handle the error appropriately.
|
// Replace this implementation with code to handle the error appropriately.
|
||||||
// fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
|
// fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
|
||||||
|
|||||||
@@ -66,7 +66,6 @@ struct MainTabView: View {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
.onChange(of: theme, perform: { value in
|
.onChange(of: theme, perform: { value in
|
||||||
print("changed to ", value)
|
|
||||||
switch theme {
|
switch theme {
|
||||||
case .system:
|
case .system:
|
||||||
UIApplication.shared.windows.first?.overrideUserInterfaceStyle = .unspecified
|
UIApplication.shared.windows.first?.overrideUserInterfaceStyle = .unspecified
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ struct MonthView: View {
|
|||||||
|
|
||||||
@AppStorage(UserDefaultsStore.Keys.moodTint.rawValue, store: GroupUserDefaults.groupDefaults) private var moodTint: MoodTints = .Default
|
@AppStorage(UserDefaultsStore.Keys.moodTint.rawValue, store: GroupUserDefaults.groupDefaults) private var moodTint: MoodTints = .Default
|
||||||
|
|
||||||
|
// 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
|
@AppStorage(UserDefaultsStore.Keys.customMoodTintUpdateNumber.rawValue, store: GroupUserDefaults.groupDefaults) private var customMoodTintUpdateNumber: Int = 0
|
||||||
|
|
||||||
@ObservedObject var viewModel = HomeViewViewModel(addMonthStartWeekdayPadding: true)
|
@ObservedObject var viewModel = HomeViewViewModel(addMonthStartWeekdayPadding: true)
|
||||||
@@ -111,11 +112,7 @@ extension MonthView {
|
|||||||
.foregroundColor(Color(UIColor.darkGray))
|
.foregroundColor(Color(UIColor.darkGray))
|
||||||
.font(.system(size: 20))
|
.font(.system(size: 20))
|
||||||
}).sheet(isPresented: $showingSheet) {
|
}).sheet(isPresented: $showingSheet) {
|
||||||
SettingsView(editedDataClosure: {
|
SettingsView()
|
||||||
withAnimation{
|
|
||||||
viewModel.updateData()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
.padding(.top, 60)
|
.padding(.top, 60)
|
||||||
.padding(.trailing)
|
.padding(.trailing)
|
||||||
|
|||||||
@@ -11,8 +11,6 @@ import CloudKitSyncMonitor
|
|||||||
struct SettingsView: View {
|
struct SettingsView: View {
|
||||||
@Environment(\.dismiss) var dismiss
|
@Environment(\.dismiss) var dismiss
|
||||||
|
|
||||||
let editedDataClosure: (() -> Void)
|
|
||||||
|
|
||||||
@State private var showOnboarding = false
|
@State private var showOnboarding = false
|
||||||
|
|
||||||
@State private var showSpecialThanks = false
|
@State private var showSpecialThanks = false
|
||||||
@@ -104,7 +102,6 @@ struct SettingsView: View {
|
|||||||
theme.currentTheme.secondaryBGColor
|
theme.currentTheme.secondaryBGColor
|
||||||
Button(action: {
|
Button(action: {
|
||||||
PersistenceController.shared.populateTestData()
|
PersistenceController.shared.populateTestData()
|
||||||
editedDataClosure()
|
|
||||||
}, label: {
|
}, label: {
|
||||||
Text("Add test data")
|
Text("Add test data")
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(theme.currentTheme.labelColor)
|
||||||
@@ -120,7 +117,6 @@ struct SettingsView: View {
|
|||||||
theme.currentTheme.secondaryBGColor
|
theme.currentTheme.secondaryBGColor
|
||||||
Button(action: {
|
Button(action: {
|
||||||
PersistenceController.shared.clearDB()
|
PersistenceController.shared.clearDB()
|
||||||
editedDataClosure()
|
|
||||||
}, label: {
|
}, label: {
|
||||||
Text("Clear DB")
|
Text("Clear DB")
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(theme.currentTheme.labelColor)
|
||||||
@@ -224,13 +220,9 @@ struct SettingsView: View {
|
|||||||
|
|
||||||
struct SettingsView_Previews: PreviewProvider {
|
struct SettingsView_Previews: PreviewProvider {
|
||||||
static var previews: some View {
|
static var previews: some View {
|
||||||
SettingsView(editedDataClosure: {
|
SettingsView()
|
||||||
|
|
||||||
})
|
SettingsView()
|
||||||
|
|
||||||
SettingsView(editedDataClosure: {
|
|
||||||
|
|
||||||
})
|
|
||||||
.preferredColorScheme(.dark)
|
.preferredColorScheme(.dark)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -108,7 +108,6 @@ struct CurrentStreakTemplate: View, SharingTemplate {
|
|||||||
HStack(alignment: .center) {
|
HStack(alignment: .center) {
|
||||||
Button(action: {
|
Button(action: {
|
||||||
let _image = self.image
|
let _image = self.image
|
||||||
print(_image)
|
|
||||||
self.shareImage.showFuckingSheet = true
|
self.shareImage.showFuckingSheet = true
|
||||||
self.shareImage.fuckingWrappedShrable = _image
|
self.shareImage.fuckingWrappedShrable = _image
|
||||||
}, label: {
|
}, label: {
|
||||||
|
|||||||
@@ -182,7 +182,6 @@ struct LongestStreakTemplate: View, SharingTemplate {
|
|||||||
HStack(alignment: .center) {
|
HStack(alignment: .center) {
|
||||||
Button(action: {
|
Button(action: {
|
||||||
let _image = self.image
|
let _image = self.image
|
||||||
print(_image)
|
|
||||||
self.shareImage.showFuckingSheet = true
|
self.shareImage.showFuckingSheet = true
|
||||||
self.shareImage.fuckingWrappedShrable = _image
|
self.shareImage.fuckingWrappedShrable = _image
|
||||||
}, label: {
|
}, label: {
|
||||||
|
|||||||
@@ -30,6 +30,9 @@ struct SwitchableView: View {
|
|||||||
@AppStorage(UserDefaultsStore.Keys.theme.rawValue, store: GroupUserDefaults.groupDefaults) private var theme: Theme = .system
|
@AppStorage(UserDefaultsStore.Keys.theme.rawValue, store: GroupUserDefaults.groupDefaults) private var theme: Theme = .system
|
||||||
@AppStorage(UserDefaultsStore.Keys.moodTint.rawValue, store: GroupUserDefaults.groupDefaults) private var moodTint: MoodTints = .Default
|
@AppStorage(UserDefaultsStore.Keys.moodTint.rawValue, store: GroupUserDefaults.groupDefaults) private var moodTint: MoodTints = .Default
|
||||||
|
|
||||||
|
// 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
|
||||||
|
|
||||||
init(daysBack: Int, viewType: Binding<MainSwitchableViewType>, headerTypeChanged: @escaping ((MainSwitchableViewType) -> Void)) {
|
init(daysBack: Int, viewType: Binding<MainSwitchableViewType>, headerTypeChanged: @escaping ((MainSwitchableViewType) -> Void)) {
|
||||||
self.daysBack = daysBack
|
self.daysBack = daysBack
|
||||||
self.headerTypeChanged = headerTypeChanged
|
self.headerTypeChanged = headerTypeChanged
|
||||||
@@ -39,9 +42,17 @@ struct SwitchableView: View {
|
|||||||
var body: some View {
|
var body: some View {
|
||||||
VStack {
|
VStack {
|
||||||
ZStack {
|
ZStack {
|
||||||
|
Text(String(customMoodTintUpdateNumber))
|
||||||
|
.hidden()
|
||||||
switch viewType {
|
switch viewType {
|
||||||
case .total:
|
case .total:
|
||||||
HeaderStatsView(fakeData: false, backDays: daysBack, moodTint: moodTint)
|
HeaderStatsView(fakeData: false, backDays: daysBack, moodTint: [
|
||||||
|
moodTint.color(forMood: .great),
|
||||||
|
moodTint.color(forMood: .good),
|
||||||
|
moodTint.color(forMood: .average),
|
||||||
|
moodTint.color(forMood: .bad),
|
||||||
|
moodTint.color(forMood: .horrible)
|
||||||
|
])
|
||||||
.padding([.leading, .trailing], -15)
|
.padding([.leading, .trailing], -15)
|
||||||
.padding([.top, .bottom], 8)
|
.padding([.top, .bottom], 8)
|
||||||
.allowsHitTesting(false)
|
.allowsHitTesting(false)
|
||||||
|
|||||||
Reference in New Issue
Block a user