Add task completion animations, subscription trials, and quiet debug console
- Completion animations: play user-selected animation on task card after completing, with DataManager guard to prevent race condition during animation playback. Works in both AllTasksView and ResidenceDetailView. Animation preference persisted via @AppStorage and configurable from Settings. - Subscription: add trial fields (trialStart, trialEnd, trialActive) and subscriptionSource to model, cross-platform purchase guard, trial banner in upgrade prompt, and platform-aware subscription management in profile. - Analytics: disable PostHog SDK debug logging and remove console print statements to reduce debug console noise. - Documents: remove redundant nested do-catch blocks in ViewModel wrapper. - Widgets: add debounced timeline reloads and thread-safe file I/O queue. - Onboarding: fix animation leak on disappear, remove unused state vars. - Remove unused files (ContentView, StateFlowExtensions, CustomView). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -3,13 +3,13 @@ import SwiftUI
|
||||
struct MainTabView: View {
|
||||
@EnvironmentObject private var themeManager: ThemeManager
|
||||
@State private var selectedTab = 0
|
||||
@StateObject private var authManager = AuthenticationManager.shared
|
||||
@ObservedObject private var authManager = AuthenticationManager.shared
|
||||
@ObservedObject private var pushManager = PushNotificationManager.shared
|
||||
var refreshID: UUID
|
||||
|
||||
var body: some View {
|
||||
TabView(selection: $selectedTab) {
|
||||
NavigationView {
|
||||
NavigationStack {
|
||||
ResidencesListView()
|
||||
}
|
||||
.id(refreshID)
|
||||
@@ -19,7 +19,7 @@ struct MainTabView: View {
|
||||
.tag(0)
|
||||
.accessibilityIdentifier(AccessibilityIdentifiers.Navigation.residencesTab)
|
||||
|
||||
NavigationView {
|
||||
NavigationStack {
|
||||
AllTasksView()
|
||||
}
|
||||
.id(refreshID)
|
||||
@@ -29,7 +29,7 @@ struct MainTabView: View {
|
||||
.tag(1)
|
||||
.accessibilityIdentifier(AccessibilityIdentifiers.Navigation.tasksTab)
|
||||
|
||||
NavigationView {
|
||||
NavigationStack {
|
||||
ContractorsListView()
|
||||
}
|
||||
.id(refreshID)
|
||||
@@ -39,7 +39,7 @@ struct MainTabView: View {
|
||||
.tag(2)
|
||||
.accessibilityIdentifier(AccessibilityIdentifiers.Navigation.contractorsTab)
|
||||
|
||||
NavigationView {
|
||||
NavigationStack {
|
||||
DocumentsWarrantiesView(residenceId: nil)
|
||||
}
|
||||
.id(refreshID)
|
||||
@@ -50,7 +50,7 @@ struct MainTabView: View {
|
||||
.accessibilityIdentifier(AccessibilityIdentifiers.Navigation.documentsTab)
|
||||
}
|
||||
.tint(Color.appPrimary)
|
||||
.onChange(of: authManager.isAuthenticated) { _ in
|
||||
.onChange(of: authManager.isAuthenticated) { _, _ in
|
||||
selectedTab = 0
|
||||
}
|
||||
.onAppear {
|
||||
|
||||
Reference in New Issue
Block a user