From 8a5a8b4eec87175573d3995ae8a63f1300a10e93 Mon Sep 17 00:00:00 2001 From: Aleksandrs Proskurins Date: Wed, 14 Sep 2022 11:28:47 +0300 Subject: [PATCH] Code review fixes --- .../UserSessionCardView.swift | 126 +++++++++--------- .../UserSessionCardViewData.swift | 8 +- .../View/UserSessionsOverview.swift | 45 ++++--- 3 files changed, 89 insertions(+), 90 deletions(-) diff --git a/RiotSwiftUI/Modules/UserSessions/UserSessionCardView/UserSessionCardView.swift b/RiotSwiftUI/Modules/UserSessions/UserSessionCardView/UserSessionCardView.swift index 855ffa9c1..7032d5701 100644 --- a/RiotSwiftUI/Modules/UserSessions/UserSessionCardView/UserSessionCardView.swift +++ b/RiotSwiftUI/Modules/UserSessions/UserSessionCardView/UserSessionCardView.swift @@ -52,80 +52,78 @@ struct UserSessionCardView: View { } var body: some View { - VStack() { - VStack(alignment: .center, spacing: 12) { - DeviceAvatarView(viewData: viewData.deviceAvatarViewData) - - Text(viewData.sessionName) - .font(theme.fonts.headline) - .foregroundColor(theme.colors.primaryContent) + VStack(alignment: .center, spacing: 12) { + DeviceAvatarView(viewData: viewData.deviceAvatarViewData) + + Text(viewData.sessionName) + .font(theme.fonts.headline) + .foregroundColor(theme.colors.primaryContent) + .multilineTextAlignment(.center) + + HStack { + Image(verificationStatusImageName) + Text(verificationStatusText) + .font(theme.fonts.subheadline) + .foregroundColor(verificationStatusColor) .multilineTextAlignment(.center) - - HStack { - Image(verificationStatusImageName) - Text(verificationStatusText) - .font(theme.fonts.subheadline) - .foregroundColor(verificationStatusColor) - .multilineTextAlignment(.center) - } - - if viewData.isCurrentSessionDisplayMode { - Text(verificationStatusAdditionalInfoText) - .font(theme.fonts.footnote) - .foregroundColor(theme.colors.secondaryContent) - .multilineTextAlignment(.center) - } else { - InlineTextButton(verificationStatusAdditionalInfoText + " %@", tappableText: VectorL10n.userSessionLearnMore) { - onLearnMoreAction?() - } + } + + if viewData.isCurrentSessionDisplayMode { + Text(verificationStatusAdditionalInfoText) .font(theme.fonts.footnote) .foregroundColor(theme.colors.secondaryContent) .multilineTextAlignment(.center) + } else { + InlineTextButton(verificationStatusAdditionalInfoText + " %@", tappableText: VectorL10n.userSessionLearnMore) { + onLearnMoreAction?() } - - if self.showExtraInformations { - VStack(spacing: 2) { - if let lastActivityDateString = viewData.lastActivityDateString, lastActivityDateString.isEmpty == false { - Text(lastActivityDateString) - .font(theme.fonts.footnote) - .foregroundColor(theme.colors.secondaryContent) - .multilineTextAlignment(.center) - } - - if let lastSeenIPInfo = viewData.lastSeenIPInfo, lastSeenIPInfo.isEmpty == false { - Text(lastSeenIPInfo) - .font(theme.fonts.footnote) - .foregroundColor(theme.colors.secondaryContent) - .multilineTextAlignment(.center) - } + .font(theme.fonts.footnote) + .foregroundColor(theme.colors.secondaryContent) + .multilineTextAlignment(.center) + } + + if self.showExtraInformations { + VStack(spacing: 2) { + if let lastActivityDateString = viewData.lastActivityDateString, lastActivityDateString.isEmpty == false { + Text(lastActivityDateString) + .font(theme.fonts.footnote) + .foregroundColor(theme.colors.secondaryContent) + .multilineTextAlignment(.center) } - } - - if viewData.isVerified == false { - Button { - onVerifyAction?(viewData.sessionId) - } label: { - Text(VectorL10n.userSessionVerifyAction) - .font(theme.fonts.body) + + if let lastSeenIPInfo = viewData.lastSeenIPInfo, lastSeenIPInfo.isEmpty == false { + Text(lastSeenIPInfo) + .font(theme.fonts.footnote) + .foregroundColor(theme.colors.secondaryContent) + .multilineTextAlignment(.center) } - .buttonStyle(PrimaryActionButtonStyle()) - .padding(.top, 4) - .padding(.bottom, 3) - } - - if viewData.isCurrentSessionDisplayMode { - Button { - onViewDetailsAction?(viewData.sessionId) - } label: { - Text(VectorL10n.userSessionViewDetails) - .font(theme.fonts.body) - .foregroundColor(theme.colors.accent) - } - .padding(.top, 4) } } - .padding(24) + + if viewData.isVerified == false { + Button { + onVerifyAction?(viewData.sessionId) + } label: { + Text(VectorL10n.userSessionVerifyAction) + .font(theme.fonts.body) + } + .buttonStyle(PrimaryActionButtonStyle()) + .padding(.top, 4) + .padding(.bottom, 3) + } + + if viewData.isCurrentSessionDisplayMode { + Button { + onViewDetailsAction?(viewData.sessionId) + } label: { + Text(VectorL10n.userSessionViewDetails) + .font(theme.fonts.body) + .foregroundColor(theme.colors.accent) + } + .padding(.top, 4) + } } + .padding(24) .frame(maxWidth: .infinity) .background(theme.colors.background) .clipShape(self.backgroundShape) diff --git a/RiotSwiftUI/Modules/UserSessions/UserSessionCardView/UserSessionCardViewData.swift b/RiotSwiftUI/Modules/UserSessions/UserSessionCardView/UserSessionCardViewData.swift index bbbbc71c0..d63175a0e 100644 --- a/RiotSwiftUI/Modules/UserSessions/UserSessionCardView/UserSessionCardViewData.swift +++ b/RiotSwiftUI/Modules/UserSessions/UserSessionCardView/UserSessionCardViewData.swift @@ -51,7 +51,7 @@ struct UserSessionCardViewData { sessionDisplayName: String?, deviceType: DeviceType, isVerified: Bool, - lastActivityDate: TimeInterval?, + lastActivityTimestamp: TimeInterval?, lastSeenIP: String?, isCurrentSessionDisplayMode: Bool = false) { self.sessionId = sessionId @@ -60,8 +60,8 @@ struct UserSessionCardViewData { var lastActivityDateString: String? - if let lastActivityDate = lastActivityDate { - lastActivityDateString = Self.lastActivityDateFormatter.lastActivityDateString(from: lastActivityDate) + if let lastActivityTimestamp = lastActivityTimestamp { + lastActivityDateString = Self.lastActivityDateFormatter.lastActivityDateString(from: lastActivityTimestamp) } self.lastActivityDateString = lastActivityDateString @@ -75,6 +75,6 @@ struct UserSessionCardViewData { extension UserSessionCardViewData { init(userSessionInfo: UserSessionInfo, isCurrentSessionDisplayMode: Bool = false) { - self.init(sessionId: userSessionInfo.sessionId, sessionDisplayName: userSessionInfo.sessionName, deviceType: userSessionInfo.deviceType, isVerified: userSessionInfo.isVerified, lastActivityDate: userSessionInfo.lastSeenTimestamp, lastSeenIP: userSessionInfo.lastSeenIP, isCurrentSessionDisplayMode: isCurrentSessionDisplayMode) + self.init(sessionId: userSessionInfo.sessionId, sessionDisplayName: userSessionInfo.sessionName, deviceType: userSessionInfo.deviceType, isVerified: userSessionInfo.isVerified, lastActivityTimestamp: userSessionInfo.lastSeenTimestamp, lastSeenIP: userSessionInfo.lastSeenIP, isCurrentSessionDisplayMode: isCurrentSessionDisplayMode) } } diff --git a/RiotSwiftUI/Modules/UserSessions/UserSessionsOverview/View/UserSessionsOverview.swift b/RiotSwiftUI/Modules/UserSessions/UserSessionsOverview/View/UserSessionsOverview.swift index 4e32d1dbf..fbfb70c3f 100644 --- a/RiotSwiftUI/Modules/UserSessions/UserSessionsOverview/View/UserSessionsOverview.swift +++ b/RiotSwiftUI/Modules/UserSessions/UserSessionsOverview/View/UserSessionsOverview.swift @@ -24,6 +24,28 @@ struct UserSessionsOverview: View { @Environment(\.theme) private var theme: ThemeSwiftUI + @ViewBuilder + private var currentSessionsSection: some View { + if let currentSessionViewData = viewModel.viewState.currentSessionViewData { + SwiftUI.Section { + UserSessionCardView(viewData: currentSessionViewData, onVerifyAction: { _ in + viewModel.send(viewAction: .verifyCurrentSession) + }, onViewDetailsAction: { _ in + viewModel.send(viewAction: .viewCurrentSessionDetails) + }) + .padding(.horizontal, 16) + } header: { + Text(VectorL10n.userSessionsOverviewCurrentSessionSectionTitle) + .font(theme.fonts.footnote) + .foregroundColor(theme.colors.secondaryContent) + .frame(maxWidth: .infinity, alignment: .leading) + .padding(.horizontal, 16) + .padding(.top, 24) + .padding(.bottom, 11) + } + } + } + // MARK: Public @ObservedObject var viewModel: UserSessionsOverviewViewModel.Context @@ -38,9 +60,7 @@ struct UserSessionsOverview: View { } // Current session section - if let currentSessionViewData = viewModel.viewState.currentSessionViewData { - self.currentSessionsSection(currentSessionViewData: currentSessionViewData) - } + currentSessionsSection // Other sessions section if viewModel.viewState.otherSessionsViewData.isEmpty == false { @@ -56,25 +76,6 @@ struct UserSessionsOverview: View { } } - private func currentSessionsSection(currentSessionViewData: UserSessionCardViewData) -> some View { - SwiftUI.Section { - UserSessionCardView(viewData: currentSessionViewData, onVerifyAction: { _ in - viewModel.send(viewAction: .verifyCurrentSession) - }, onViewDetailsAction: { _ in - viewModel.send(viewAction: .viewCurrentSessionDetails) - }) - .padding(.horizontal, 16) - } header: { - Text(VectorL10n.userSessionsOverviewCurrentSessionSectionTitle) - .font(theme.fonts.footnote) - .foregroundColor(theme.colors.secondaryContent) - .frame(maxWidth: .infinity, alignment: .leading) - .padding(.horizontal, 16) - .padding(.top, 24) - .padding(.bottom, 11) - } - } - private var otherSessionsSection: some View { SwiftUI.Section {