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:
Trey t
2026-03-05 11:35:08 -06:00
parent c5f2bee83f
commit 98dbacdea0
73 changed files with 1770 additions and 529 deletions

View File

@@ -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 {