Newer
Older
import AppCore
import ComposableArchitecture
import SwiftUI
import XXModels
public struct NewGroupView: View {
public typealias Component = NewGroupComponent
typealias ViewStore = ComposableArchitecture.ViewStore<ViewState, Component.Action>
public init(store: StoreOf<Component>) {
self.store = store
}
let store: StoreOf<Component>
struct ViewState: Equatable {
init(state: Component.State) {
contacts = state.contacts
members = state.members
}
var contacts: IdentifiedArrayOf<XXModels.Contact>
var members: IdentifiedArrayOf<XXModels.Contact>
}
public var body: some View {
WithViewStore(store, observe: ViewState.init) { viewStore in
Form {
Section {
membersView(viewStore)
}
}
.navigationTitle("New Group")
.task { viewStore.send(.start) }
}
}
func membersView(_ viewStore: ViewStore) -> some View {
NavigationLink("Members (\(viewStore.members.count))") {
Form {
ForEach(viewStore.contacts) { contact in
Button {
viewStore.send(.didSelectContact(contact))
} label: {
HStack {
Text(contact.username ?? "")
Spacer()
if viewStore.members.contains(contact) {
Image(systemName: "checkmark")
}
}
}
}
}
}
}
}
#if DEBUG
public struct NewGroupView_Previews: PreviewProvider {
public static var previews: some View {
NavigationView {
NewGroupView(store: Store(
initialState: NewGroupComponent.State(),
reducer: EmptyReducer()
))
}
}
}
#endif