Add “show location“ feature in session overview

This commit is contained in:
Alfonso Grillo
2022-11-02 14:08:32 +01:00
parent ea50296b10
commit f787043129
5 changed files with 33 additions and 8 deletions
@@ -30,8 +30,9 @@ struct UserSessionCardView: View {
RoundedRectangle(cornerRadius: 8)
}
let showLocationInformations: Bool
private var showExtraInformations: Bool {
viewData.isCurrentSessionDisplayMode == false && (viewData.lastActivityDateString.isEmptyOrNil == false || viewData.lastSeenIPInfo.isEmptyOrNil == false)
viewData.isCurrentSessionDisplayMode == false && (viewData.lastActivityDateString.isEmptyOrNil == false || ipText.isEmptyOrNil == false)
}
var body: some View {
@@ -77,8 +78,8 @@ struct UserSessionCardView: View {
.multilineTextAlignment(.center)
}
}
if let lastSeenIPInfo = viewData.lastSeenIPInfo, lastSeenIPInfo.isEmpty == false {
Text(lastSeenIPInfo)
if showLocationInformations, let ipText = ipText {
Text(ipText)
.font(theme.fonts.footnote)
.foregroundColor(theme.colors.secondaryContent)
.multilineTextAlignment(.center)
@@ -117,6 +118,13 @@ struct UserSessionCardView: View {
}
}
}
private var ipText: String? {
guard let lastSeenIp = viewData.lastSeenIP, !lastSeenIp.isEmpty else {
return nil
}
return viewData.lastSeenIPLocation.map { "\(lastSeenIp) (\($0))" } ?? lastSeenIp
}
}
struct UserSessionCardViewPreview: View {
@@ -146,7 +154,7 @@ struct UserSessionCardViewPreview: View {
var body: some View {
VStack {
UserSessionCardView(viewData: viewData)
UserSessionCardView(viewData: viewData, showLocationInformations: true)
}
.frame(maxWidth: .infinity)
.background(theme.colors.system)
@@ -34,7 +34,8 @@ struct UserSessionCardViewData {
var lastActivityIcon: String?
let lastSeenIPInfo: String?
let lastSeenIP: String?
let lastSeenIPLocation: String?
let deviceAvatarViewData: DeviceAvatarViewData
@@ -95,6 +96,7 @@ struct UserSessionCardViewData {
verificationState: UserSessionInfo.VerificationState,
lastActivityTimestamp: TimeInterval?,
lastSeenIP: String?,
lastSeenIPLocation: String?,
isCurrentSessionDisplayMode: Bool = false,
isActive: Bool) {
self.sessionId = sessionId
@@ -112,7 +114,8 @@ struct UserSessionCardViewData {
}
}
self.lastActivityDateString = lastActivityDateString
lastSeenIPInfo = lastSeenIP
self.lastSeenIP = lastSeenIP
self.lastSeenIPLocation = lastSeenIPLocation
deviceAvatarViewData = DeviceAvatarViewData(deviceType: deviceType, verificationState: verificationState)
self.isCurrentSessionDisplayMode = isCurrentSessionDisplayMode
@@ -127,6 +130,7 @@ extension UserSessionCardViewData {
verificationState: sessionInfo.verificationState,
lastActivityTimestamp: sessionInfo.lastSeenTimestamp,
lastSeenIP: sessionInfo.lastSeenIP,
lastSeenIPLocation: sessionInfo.lastSeenIPLocation,
isCurrentSessionDisplayMode: sessionInfo.isCurrent,
isActive: sessionInfo.isActive)
}