4850 bring leaving space experience in line with web (#6062)

* Bring leaving space experience in line with Web #4850

- Done
This commit is contained in:
Gil Eluard
2022-04-27 13:31:14 +02:00
committed by GitHub
parent 2b5989bc9b
commit 987eb7d5c0
23 changed files with 537 additions and 60 deletions
@@ -90,6 +90,7 @@ struct MatrixItemChooser: View {
.frame(maxHeight: .infinity, alignment: .top)
.animation(nil)
}
.animation(nil)
}
@ViewBuilder
@@ -116,8 +117,36 @@ struct MatrixItemChooser: View {
.onChange(of: searchText) { value in
viewModel.send(viewAction: .searchTextChanged(searchText))
}
if let selectionHeader = viewModel.viewState.selectionHeader, searchText.isEmpty {
Spacer().frame(height: spacerHeight)
itemSelectionHeader(with: selectionHeader)
}
}
}
private func itemSelectionHeader(with selectionHeader: MatrixItemChooserSelectionHeader) -> some View {
VStack(alignment:.leading) {
HStack {
Text(selectionHeader.title)
.font(theme.fonts.calloutSB)
.foregroundColor(theme.colors.primaryContent)
Text("\(viewModel.viewState.itemCount)")
.font(theme.fonts.calloutSB)
.foregroundColor(theme.colors.tertiaryContent)
}
HStack {
RadioButton(title: selectionHeader.selectAllTitle, selected: viewModel.viewState.itemCount > 0 && viewModel.viewState.selectedItemIds.count == viewModel.viewState.itemCount) {
viewModel.send(viewAction: .selectAll)
}
RadioButton(title: selectionHeader.selectNoneTitle, selected: viewModel.viewState.selectedItemIds.isEmpty) {
viewModel.send(viewAction: .selectNone)
}
}
}
.padding(.vertical, 4)
.padding(.horizontal)
.background(theme.colors.tile)
}
}
// MARK: - Previews
@@ -127,9 +156,9 @@ struct MatrixItemChooser_Previews: PreviewProvider {
static let stateRenderer = MockMatrixItemChooserScreenState.stateRenderer
static var previews: some View {
stateRenderer.screenGroup(addNavigation: true)
stateRenderer.screenGroup(addNavigation: false)
.theme(.light).preferredColorScheme(.light)
stateRenderer.screenGroup(addNavigation: true)
stateRenderer.screenGroup(addNavigation: false)
.theme(.dark).preferredColorScheme(.dark)
}
}