diff --git a/damus.xcodeproj/project.pbxproj b/damus.xcodeproj/project.pbxproj index 0932ba0e..f554d125 100644 --- a/damus.xcodeproj/project.pbxproj +++ b/damus.xcodeproj/project.pbxproj @@ -450,6 +450,7 @@ D7315A2C2ACDF4DA0036E30A /* DamusCacheManagerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7315A2B2ACDF4DA0036E30A /* DamusCacheManagerTests.swift */; }; D7373BA62B688EA300F7783D /* DamusPurpleTranslationSetupView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7373BA52B688EA200F7783D /* DamusPurpleTranslationSetupView.swift */; }; D7373BA82B68974500F7783D /* DamusPurpleNewUserOnboardingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7373BA72B68974500F7783D /* DamusPurpleNewUserOnboardingView.swift */; }; + D7373BAA2B68A65A00F7783D /* PurpleAccountUpdateNotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7373BA92B68A65A00F7783D /* PurpleAccountUpdateNotify.swift */; }; D74AAFC22B153395006CF0F4 /* HeadlessDamusState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D74AAFC12B153395006CF0F4 /* HeadlessDamusState.swift */; }; D74AAFC32B153395006CF0F4 /* HeadlessDamusState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D74AAFC12B153395006CF0F4 /* HeadlessDamusState.swift */; }; D74AAFC52B1538DF006CF0F4 /* NotificationExtensionState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D74AAFC42B1538DE006CF0F4 /* NotificationExtensionState.swift */; }; @@ -1346,6 +1347,7 @@ D7315A2B2ACDF4DA0036E30A /* DamusCacheManagerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusCacheManagerTests.swift; sourceTree = ""; }; D7373BA52B688EA200F7783D /* DamusPurpleTranslationSetupView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusPurpleTranslationSetupView.swift; sourceTree = ""; }; D7373BA72B68974500F7783D /* DamusPurpleNewUserOnboardingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusPurpleNewUserOnboardingView.swift; sourceTree = ""; }; + D7373BA92B68A65A00F7783D /* PurpleAccountUpdateNotify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PurpleAccountUpdateNotify.swift; sourceTree = ""; }; D74AAFC12B153395006CF0F4 /* HeadlessDamusState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeadlessDamusState.swift; sourceTree = ""; }; D74AAFC42B1538DE006CF0F4 /* NotificationExtensionState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationExtensionState.swift; sourceTree = ""; }; D74AAFCB2B155D07006CF0F4 /* MakeZapRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MakeZapRequest.swift; sourceTree = ""; }; @@ -2209,6 +2211,7 @@ 4C4E137A2A76D5FB00BDD832 /* MuteThreadNotify.swift */, 4C4E137C2A76D63600BDD832 /* UnmuteThreadNotify.swift */, B57B4C612B312BD700A232C0 /* ReconnectRelaysNotify.swift */, + D7373BA92B68A65A00F7783D /* PurpleAccountUpdateNotify.swift */, ); path = Notify; sourceTree = ""; @@ -3238,6 +3241,7 @@ F71694EA2A662232001F4053 /* OnboardingSuggestionsView.swift in Sources */, 4C12536A2A76D3850004F4B8 /* RelaysChangedNotify.swift in Sources */, 4C30AC8029A6A53F00E2BD5A /* ProfilePicturesView.swift in Sources */, + D7373BAA2B68A65A00F7783D /* PurpleAccountUpdateNotify.swift in Sources */, 5C6E1DAD2A193EC2008FC15A /* GradientButtonStyle.swift in Sources */, 3CCD1E6A2A874C4E0099A953 /* Nip98HTTPAuth.swift in Sources */, 4C8EC52529D1FA6C0085D9A8 /* DamusColors.swift in Sources */, diff --git a/damus/Notify/PurpleAccountUpdateNotify.swift b/damus/Notify/PurpleAccountUpdateNotify.swift new file mode 100644 index 00000000..0042db50 --- /dev/null +++ b/damus/Notify/PurpleAccountUpdateNotify.swift @@ -0,0 +1,25 @@ +// +// PurpleAccountUpdateNotify.swift +// damus +// +// Created by Daniel D’Aquino on 2024-01-29. +// + +import Foundation + +struct PurpleAccountUpdateNotify: Notify { + typealias Payload = DamusPurple.Account + var payload: DamusPurple.Account +} + +extension NotifyHandler { + static var purple_account_update: NotifyHandler { + .init() + } +} + +extension Notifications { + static func purple_account_update(_ result: DamusPurple.Account) -> Notifications { + .init(.init(payload: result)) + } +} diff --git a/damus/Views/Purple/DamusPurpleNewUserOnboardingView.swift b/damus/Views/Purple/DamusPurpleNewUserOnboardingView.swift index f46e55b3..e8d7e83d 100644 --- a/damus/Views/Purple/DamusPurpleNewUserOnboardingView.swift +++ b/damus/Views/Purple/DamusPurpleNewUserOnboardingView.swift @@ -31,6 +31,13 @@ struct DamusPurpleNewUserOnboardingView: View { } .ignoresSafeArea() // Necessary to avoid weird white edges } + .task { + guard let account = try? await damus_state.purple.get_account(pubkey: damus_state.pubkey), account.active else { + return + } + // Let's notify other views across SwiftUI to update our user's Purple status. + notify(.purple_account_update(account)) + } } } diff --git a/damus/Views/Purple/DamusPurpleView.swift b/damus/Views/Purple/DamusPurpleView.swift index 7f2c70fd..080808e1 100644 --- a/damus/Views/Purple/DamusPurpleView.swift +++ b/damus/Views/Purple/DamusPurpleView.swift @@ -58,7 +58,6 @@ struct DamusPurpleView: View { @State var selection: DamusPurpleType = .yearly @State var show_welcome_sheet: Bool = false @State var show_manage_subscriptions = false - @State var show_settings_change_confirmation_dialog = false @State private var shouldDismissView = false @Environment(\.dismiss) var dismiss @@ -101,6 +100,9 @@ struct DamusPurpleView: View { .onDisappear { notify(.display_tabbar(true)) } + .onReceive(handle_notify(.purple_account_update), perform: { account in + self.my_account_info_state = .loaded(account: account) + }) .task { await load_products() } @@ -110,16 +112,6 @@ struct DamusPurpleView: View { }, content: { DamusPurpleNewUserOnboardingView(damus_state: damus_state) }) - .onChange(of: shouldDismissView) { shouldDismissView in - if shouldDismissView && !show_settings_change_confirmation_dialog { - dismiss() - } - } - .onChange(of: show_settings_change_confirmation_dialog) { show_settings_change_confirmation_dialog in - if shouldDismissView && !show_settings_change_confirmation_dialog { - dismiss() - } - } .manageSubscriptionsSheet(isPresented: $show_manage_subscriptions) }