mirror of
https://github.com/vector-im/element-ios.git
synced 2024-09-28 23:32:41 +00:00
Add “show location” feature in other sessions list
This commit is contained in:
parent
cd5ce7ea72
commit
bae2856418
5 changed files with 21 additions and 6 deletions
|
@ -45,6 +45,7 @@ struct UserOtherSessionsViewState: BindableState, Equatable {
|
|||
struct UserOtherSessionsBindings: Equatable {
|
||||
var filter: UserOtherSessionsFilter
|
||||
var isEditModeEnabled: Bool
|
||||
var showLocationInfo = false
|
||||
}
|
||||
|
||||
enum UserOtherSessionsViewAction {
|
||||
|
|
|
@ -52,6 +52,7 @@ struct UserOtherSessions: View {
|
|||
.toolbar {
|
||||
UserOtherSessionsToolbar(isEditModeEnabled: $viewModel.isEditModeEnabled,
|
||||
filter: $viewModel.filter,
|
||||
isShowLocationEnabled: $viewModel.showLocationInfo,
|
||||
allItemsSelected: viewModel.viewState.allItemsSelected,
|
||||
sessionCount: viewModel.viewState.sessionItems.count,
|
||||
onToggleSelection: { viewModel.send(viewAction: .toggleAllSelection) },
|
||||
|
@ -88,7 +89,7 @@ struct UserOtherSessions: View {
|
|||
LazyVStack(spacing: 0) {
|
||||
ForEach(viewModel.viewState.sessionItems) { viewData in
|
||||
UserSessionListItem(viewData: viewData,
|
||||
showsLocationInfo: false,
|
||||
showsLocationInfo: viewModel.showLocationInfo,
|
||||
isSeparatorHidden: viewData == viewModel.viewState.sessionItems.last,
|
||||
isEditModeEnabled: viewModel.isEditModeEnabled,
|
||||
onBackgroundTap: { sessionId in viewModel.send(viewAction: .userOtherSessionSelected(sessionId: sessionId)) },
|
||||
|
|
|
@ -21,6 +21,7 @@ struct UserOtherSessionsToolbar: ToolbarContent {
|
|||
|
||||
@Binding var isEditModeEnabled: Bool
|
||||
@Binding var filter: UserOtherSessionsFilter
|
||||
@Binding var isShowLocationEnabled: Bool
|
||||
let allItemsSelected: Bool
|
||||
let sessionCount: Int
|
||||
let onToggleSelection: () -> Void
|
||||
|
@ -93,6 +94,14 @@ struct UserOtherSessionsToolbar: ToolbarContent {
|
|||
Label(VectorL10n.userOtherSessionMenuSignOutSessions(String(sessionCount)), systemImage: "rectangle.portrait.and.arrow.forward.fill")
|
||||
}
|
||||
}
|
||||
|
||||
Button {
|
||||
isShowLocationEnabled.toggle()
|
||||
} label: {
|
||||
let text = isShowLocationEnabled ? VectorL10n.userSessionsHideLocationInfo : VectorL10n.userSessionsShowLocationInfo
|
||||
let image = isShowLocationEnabled ? "eye.slash" : "eye"
|
||||
Label(text, systemImage: image)
|
||||
}
|
||||
} label: {
|
||||
Image(systemName: "ellipsis")
|
||||
.padding(.horizontal, 4)
|
||||
|
|
|
@ -43,6 +43,10 @@ enum UserSessionsOverviewViewModelResult: Equatable {
|
|||
|
||||
// MARK: View
|
||||
|
||||
struct UserSessionsOverviewViewBindings {
|
||||
var showLocationInfo = false
|
||||
}
|
||||
|
||||
struct UserSessionsOverviewViewState: BindableState {
|
||||
var currentSessionViewData: UserSessionCardViewData?
|
||||
var unverifiedSessionsViewData = [UserSessionListItemViewData]()
|
||||
|
@ -50,7 +54,7 @@ struct UserSessionsOverviewViewState: BindableState {
|
|||
var otherSessionsViewData = [UserSessionListItemViewData]()
|
||||
var showLoadingIndicator = false
|
||||
var linkDeviceButtonVisible = false
|
||||
var showLocationInfo = false
|
||||
var bindings: UserSessionsOverviewViewBindings = .init()
|
||||
}
|
||||
|
||||
enum UserSessionsOverviewViewAction {
|
||||
|
|
|
@ -144,9 +144,9 @@ struct UserSessionsOverview: View {
|
|||
|
||||
private var otherSessionsMenu: some View {
|
||||
Menu {
|
||||
Button { viewModel.send(viewAction: .viewOtherSessionsLocation) } label: {
|
||||
let text = viewModel.viewState.showLocationInfo ? VectorL10n.userSessionsHideLocationInfo : VectorL10n.userSessionsShowLocationInfo
|
||||
let image = viewModel.viewState.showLocationInfo ? "eye.slash" : "eye"
|
||||
Button { viewModel.showLocationInfo.toggle() } label: {
|
||||
let text = viewModel.showLocationInfo ? VectorL10n.userSessionsHideLocationInfo : VectorL10n.userSessionsShowLocationInfo
|
||||
let image = viewModel.showLocationInfo ? "eye.slash" : "eye"
|
||||
Label(text, systemImage: image)
|
||||
}
|
||||
} label: {
|
||||
|
@ -166,7 +166,7 @@ struct UserSessionsOverview: View {
|
|||
LazyVStack(spacing: 0) {
|
||||
ForEach(viewModel.viewState.otherSessionsViewData.prefix(maxOtherSessionsToDisplay)) { viewData in
|
||||
UserSessionListItem(viewData: viewData,
|
||||
showsLocationInfo: viewModel.viewState.showLocationInfo,
|
||||
showsLocationInfo: viewModel.showLocationInfo,
|
||||
isSeparatorHidden: viewData == viewModel.viewState.otherSessionsViewData.last,
|
||||
onBackgroundTap: { sessionId in viewModel.send(viewAction: .tapUserSession(sessionId)) })
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue