From 901740bf0e98f413b91a2735f9b552923bf43018 Mon Sep 17 00:00:00 2001 From: Pantelis Giazitsis Date: Wed, 5 Nov 2025 17:35:07 +0200 Subject: [PATCH 1/5] Added elevation in AI button --- .../WeatherStations/StationDetails/Overview/OverviewView.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/PresentationLayer/UIComponents/Screens/WeatherStations/StationDetails/Overview/OverviewView.swift b/PresentationLayer/UIComponents/Screens/WeatherStations/StationDetails/Overview/OverviewView.swift index 4c8ec0541..9dcac2313 100644 --- a/PresentationLayer/UIComponents/Screens/WeatherStations/StationDetails/Overview/OverviewView.swift +++ b/PresentationLayer/UIComponents/Screens/WeatherStations/StationDetails/Overview/OverviewView.swift @@ -147,6 +147,7 @@ private extension OverviewView { } .cornerRadius(CGFloat(.cardCornerRadius)) } + .wxmShadow() } } From f0535cfe95278c529a3e6ae02d7d9ce128812161 Mon Sep 17 00:00:00 2001 From: Pantelis Giazitsis Date: Wed, 5 Nov 2025 17:54:52 +0200 Subject: [PATCH 2/5] Cache response while station details is on screen --- .../StationDetails/Overview/OverviewViewModel.swift | 6 +++++- .../WeatherStations/StationSupport/StationSupportView.swift | 3 --- .../StationSupport/StationSupportViewModel.swift | 4 +++- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/PresentationLayer/UIComponents/Screens/WeatherStations/StationDetails/Overview/OverviewViewModel.swift b/PresentationLayer/UIComponents/Screens/WeatherStations/StationDetails/Overview/OverviewViewModel.swift index f85ee0422..e4d29a956 100644 --- a/PresentationLayer/UIComponents/Screens/WeatherStations/StationDetails/Overview/OverviewViewModel.swift +++ b/PresentationLayer/UIComponents/Screens/WeatherStations/StationDetails/Overview/OverviewViewModel.swift @@ -16,6 +16,9 @@ class OverviewViewModel: ObservableObject { @Published private(set) var ctaObject: CTAContainerView.CTAObject? @Published private(set) var showNoDataInfo: Bool = false @Published var showStationHealthInfo: Bool = false + // Keep a ref on the created view model in order to keep it in memory as long as the screen is visible. + // We do this for caching purposes. + private var stationSupportViewModel: StationSupportViewModel? var weatherNoDataText: LocalizableString { followState.weatherNoDataText @@ -91,8 +94,9 @@ class OverviewViewModel: ObservableObject { guard let name = device?.name else { return } - let vm = ViewModelsFactory.getStationSupportViewModel(deviceName: name) + let vm = stationSupportViewModel ?? ViewModelsFactory.getStationSupportViewModel(deviceName: name) Router.shared.showBottomSheet(.stationSupport(vm), bgColor: .top) + stationSupportViewModel = vm } } diff --git a/PresentationLayer/UIComponents/Screens/WeatherStations/StationSupport/StationSupportView.swift b/PresentationLayer/UIComponents/Screens/WeatherStations/StationSupport/StationSupportView.swift index 78e4f0831..972a2a74b 100644 --- a/PresentationLayer/UIComponents/Screens/WeatherStations/StationSupport/StationSupportView.swift +++ b/PresentationLayer/UIComponents/Screens/WeatherStations/StationSupport/StationSupportView.swift @@ -32,9 +32,6 @@ struct StationSupportView: View { .padding() } } - .task { - viewModel.refresh() - } } } diff --git a/PresentationLayer/UIComponents/Screens/WeatherStations/StationSupport/StationSupportViewModel.swift b/PresentationLayer/UIComponents/Screens/WeatherStations/StationSupport/StationSupportViewModel.swift index d719e871e..e9ceda4c8 100644 --- a/PresentationLayer/UIComponents/Screens/WeatherStations/StationSupport/StationSupportViewModel.swift +++ b/PresentationLayer/UIComponents/Screens/WeatherStations/StationSupport/StationSupportViewModel.swift @@ -20,9 +20,11 @@ class StationSupportViewModel: ObservableObject { init(stationName: String, useCase: MeUseCaseApi) { self.stationName = stationName self.useCase = useCase + + refresh() } - func refresh() { + private func refresh() { mode = .loading do { try useCase.getDeviceSupport(deviceName: stationName) From 46e141329c9a82438b50569465853cb4f6025d6e Mon Sep 17 00:00:00 2001 From: Pantelis Giazitsis Date: Wed, 5 Nov 2025 18:19:28 +0200 Subject: [PATCH 3/5] Fixed linter issues --- .../UIComponents/Screens/RewardAnalyticsView.swift | 4 ++-- .../StationDetails/StationDetailsContainerView.swift | 2 +- .../StationSupport/StationSupportViewModel.swift | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/PresentationLayer/UIComponents/Screens/RewardAnalyticsView.swift b/PresentationLayer/UIComponents/Screens/RewardAnalyticsView.swift index e4b944e5f..c99a83f7a 100644 --- a/PresentationLayer/UIComponents/Screens/RewardAnalyticsView.swift +++ b/PresentationLayer/UIComponents/Screens/RewardAnalyticsView.swift @@ -104,7 +104,7 @@ private struct ContentView: View { } .scrollIndicators(.hidden) .animation(.easeIn(duration: animationDuration), - value: viewModel.stationItems.values.reduce(into: 0) { $0 = $0 + ($1.isExpanded ? 1 : 0) }) + value: viewModel.stationItems.values.reduce(into: 0) { $0 += ($1.isExpanded ? 1 : 0) }) } } @@ -235,7 +235,7 @@ private struct ContentView: View { } if isExpanded, let stationItem { - expandedView(for: deviceId , stationItem: stationItem) + expandedView(for: deviceId, stationItem: stationItem) } } .WXMCardStyle() diff --git a/PresentationLayer/UIComponents/Screens/WeatherStations/StationDetails/StationDetailsContainerView.swift b/PresentationLayer/UIComponents/Screens/WeatherStations/StationDetails/StationDetailsContainerView.swift index a19f8a46d..6c0454d2e 100644 --- a/PresentationLayer/UIComponents/Screens/WeatherStations/StationDetails/StationDetailsContainerView.swift +++ b/PresentationLayer/UIComponents/Screens/WeatherStations/StationDetails/StationDetailsContainerView.swift @@ -41,7 +41,7 @@ struct StationDetailsContainerView: View { .frame(width: 30.0, height: 30.0) } .wxmPopOver(show: $showSettingsPopOver) { - VStack(alignment:.leading, spacing: CGFloat(.mediumSpacing)) { + VStack(alignment: .leading, spacing: CGFloat(.mediumSpacing)) { Button { [weak viewModel] in showSettingsPopOver = false viewModel?.handleShareButtonTap() diff --git a/PresentationLayer/UIComponents/Screens/WeatherStations/StationSupport/StationSupportViewModel.swift b/PresentationLayer/UIComponents/Screens/WeatherStations/StationSupport/StationSupportViewModel.swift index e9ceda4c8..d60658301 100644 --- a/PresentationLayer/UIComponents/Screens/WeatherStations/StationSupport/StationSupportViewModel.swift +++ b/PresentationLayer/UIComponents/Screens/WeatherStations/StationSupport/StationSupportViewModel.swift @@ -21,7 +21,7 @@ class StationSupportViewModel: ObservableObject { self.stationName = stationName self.useCase = useCase - refresh() + refresh() } private func refresh() { From 7b9acf7698f3c0eff898264a851e0280ff5625a2 Mon Sep 17 00:00:00 2001 From: Pantelis Giazitsis Date: Thu, 6 Nov 2025 15:09:55 +0200 Subject: [PATCH 4/5] Fixed tests --- .../StationSupport/StationSupportViewModel.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PresentationLayer/UIComponents/Screens/WeatherStations/StationSupport/StationSupportViewModel.swift b/PresentationLayer/UIComponents/Screens/WeatherStations/StationSupport/StationSupportViewModel.swift index d60658301..29af1e99f 100644 --- a/PresentationLayer/UIComponents/Screens/WeatherStations/StationSupport/StationSupportViewModel.swift +++ b/PresentationLayer/UIComponents/Screens/WeatherStations/StationSupport/StationSupportViewModel.swift @@ -24,7 +24,7 @@ class StationSupportViewModel: ObservableObject { refresh() } - private func refresh() { + func refresh() { mode = .loading do { try useCase.getDeviceSupport(deviceName: stationName) From 1ed975c171e4b1e54c7d8cc0177304f7f1223aa9 Mon Sep 17 00:00:00 2001 From: Pantelis Giazitsis Date: Thu, 6 Nov 2025 15:10:11 +0200 Subject: [PATCH 5/5] Fixed display name --- wxm-ios.xcodeproj/project.pbxproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wxm-ios.xcodeproj/project.pbxproj b/wxm-ios.xcodeproj/project.pbxproj index 7a6357ce6..eee8a1fc4 100644 --- a/wxm-ios.xcodeproj/project.pbxproj +++ b/wxm-ios.xcodeproj/project.pbxproj @@ -4965,7 +4965,7 @@ ); GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = "wxm-ios/Info.plist"; - INFOPLIST_KEY_CFBundleDisplayName = "WXM Dev"; + INFOPLIST_KEY_CFBundleDisplayName = "WXM Mock"; INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO; INFOPLIST_KEY_LSApplicationCategoryType = ""; INFOPLIST_KEY_LSSupportsOpeningDocumentsInPlace = YES; @@ -5192,7 +5192,7 @@ ); GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = "wxm-ios/Info.plist"; - INFOPLIST_KEY_CFBundleDisplayName = "WXM Dev"; + INFOPLIST_KEY_CFBundleDisplayName = WeatherXM; INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO; INFOPLIST_KEY_LSApplicationCategoryType = ""; INFOPLIST_KEY_LSSupportsOpeningDocumentsInPlace = YES;