mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-04-21 17:12:45 +02:00
Code review fixes
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
+23
-22
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user