Code review fixes

This commit is contained in:
Aleksandrs Proskurins
2022-09-14 11:28:47 +03:00
parent a46f0c240e
commit 8a5a8b4eec
3 changed files with 89 additions and 90 deletions
@@ -52,80 +52,78 @@ struct UserSessionCardView: View {
} }
var body: some View { var body: some View {
VStack() { VStack(alignment: .center, spacing: 12) {
VStack(alignment: .center, spacing: 12) { DeviceAvatarView(viewData: viewData.deviceAvatarViewData)
DeviceAvatarView(viewData: viewData.deviceAvatarViewData)
Text(viewData.sessionName)
Text(viewData.sessionName) .font(theme.fonts.headline)
.font(theme.fonts.headline) .foregroundColor(theme.colors.primaryContent)
.foregroundColor(theme.colors.primaryContent) .multilineTextAlignment(.center)
HStack {
Image(verificationStatusImageName)
Text(verificationStatusText)
.font(theme.fonts.subheadline)
.foregroundColor(verificationStatusColor)
.multilineTextAlignment(.center) .multilineTextAlignment(.center)
}
HStack {
Image(verificationStatusImageName) if viewData.isCurrentSessionDisplayMode {
Text(verificationStatusText) Text(verificationStatusAdditionalInfoText)
.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?()
}
.font(theme.fonts.footnote) .font(theme.fonts.footnote)
.foregroundColor(theme.colors.secondaryContent) .foregroundColor(theme.colors.secondaryContent)
.multilineTextAlignment(.center) .multilineTextAlignment(.center)
} else {
InlineTextButton(verificationStatusAdditionalInfoText + " %@", tappableText: VectorL10n.userSessionLearnMore) {
onLearnMoreAction?()
} }
.font(theme.fonts.footnote)
if self.showExtraInformations { .foregroundColor(theme.colors.secondaryContent)
VStack(spacing: 2) { .multilineTextAlignment(.center)
if let lastActivityDateString = viewData.lastActivityDateString, lastActivityDateString.isEmpty == false { }
Text(lastActivityDateString)
.font(theme.fonts.footnote) if self.showExtraInformations {
.foregroundColor(theme.colors.secondaryContent) VStack(spacing: 2) {
.multilineTextAlignment(.center) if let lastActivityDateString = viewData.lastActivityDateString, lastActivityDateString.isEmpty == false {
} Text(lastActivityDateString)
.font(theme.fonts.footnote)
if let lastSeenIPInfo = viewData.lastSeenIPInfo, lastSeenIPInfo.isEmpty == false { .foregroundColor(theme.colors.secondaryContent)
Text(lastSeenIPInfo) .multilineTextAlignment(.center)
.font(theme.fonts.footnote)
.foregroundColor(theme.colors.secondaryContent)
.multilineTextAlignment(.center)
}
} }
}
if let lastSeenIPInfo = viewData.lastSeenIPInfo, lastSeenIPInfo.isEmpty == false {
if viewData.isVerified == false { Text(lastSeenIPInfo)
Button { .font(theme.fonts.footnote)
onVerifyAction?(viewData.sessionId) .foregroundColor(theme.colors.secondaryContent)
} label: { .multilineTextAlignment(.center)
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)
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) .frame(maxWidth: .infinity)
.background(theme.colors.background) .background(theme.colors.background)
.clipShape(self.backgroundShape) .clipShape(self.backgroundShape)
@@ -51,7 +51,7 @@ struct UserSessionCardViewData {
sessionDisplayName: String?, sessionDisplayName: String?,
deviceType: DeviceType, deviceType: DeviceType,
isVerified: Bool, isVerified: Bool,
lastActivityDate: TimeInterval?, lastActivityTimestamp: TimeInterval?,
lastSeenIP: String?, lastSeenIP: String?,
isCurrentSessionDisplayMode: Bool = false) { isCurrentSessionDisplayMode: Bool = false) {
self.sessionId = sessionId self.sessionId = sessionId
@@ -60,8 +60,8 @@ struct UserSessionCardViewData {
var lastActivityDateString: String? var lastActivityDateString: String?
if let lastActivityDate = lastActivityDate { if let lastActivityTimestamp = lastActivityTimestamp {
lastActivityDateString = Self.lastActivityDateFormatter.lastActivityDateString(from: lastActivityDate) lastActivityDateString = Self.lastActivityDateFormatter.lastActivityDateString(from: lastActivityTimestamp)
} }
self.lastActivityDateString = lastActivityDateString self.lastActivityDateString = lastActivityDateString
@@ -75,6 +75,6 @@ struct UserSessionCardViewData {
extension UserSessionCardViewData { extension UserSessionCardViewData {
init(userSessionInfo: UserSessionInfo, isCurrentSessionDisplayMode: Bool = false) { 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)
} }
} }
@@ -24,6 +24,28 @@ struct UserSessionsOverview: View {
@Environment(\.theme) private var theme: ThemeSwiftUI @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 // MARK: Public
@ObservedObject var viewModel: UserSessionsOverviewViewModel.Context @ObservedObject var viewModel: UserSessionsOverviewViewModel.Context
@@ -38,9 +60,7 @@ struct UserSessionsOverview: View {
} }
// Current session section // Current session section
if let currentSessionViewData = viewModel.viewState.currentSessionViewData { currentSessionsSection
self.currentSessionsSection(currentSessionViewData: currentSessionViewData)
}
// Other sessions section // Other sessions section
if viewModel.viewState.otherSessionsViewData.isEmpty == false { 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 { private var otherSessionsSection: some View {
SwiftUI.Section { SwiftUI.Section {