mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2025-06-29 04:39:53 +00:00
* ios: fix toolbar in member support chat * refactor * refactor nav buttons * ios: unread reports, members requiring attention * top bar destop (special case for 1 support chat) * put Navigation view higher in hierarchy * use nav title for knocking * refactor loading secondary chat, overlay fake toolbar for knocking chats * fix member reports toolbar * unread counter for member's support chat
93 lines
3.1 KiB
Swift
93 lines
3.1 KiB
Swift
//
|
|
// MemberAdmissionView.swift
|
|
// SimpleX (iOS)
|
|
//
|
|
// Created by spaced4ndy on 28.04.2025.
|
|
// Copyright © 2025 SimpleX Chat. All rights reserved.
|
|
//
|
|
|
|
import SwiftUI
|
|
import SimpleXChat
|
|
|
|
private let memberCriterias: [(criteria: MemberCriteria?, text: LocalizedStringKey)] = [
|
|
(nil, "off"),
|
|
(.all, "all")
|
|
]
|
|
|
|
struct MemberAdmissionView: View {
|
|
@Environment(\.dismiss) var dismiss: DismissAction
|
|
@EnvironmentObject var chatModel: ChatModel
|
|
@EnvironmentObject var theme: AppTheme
|
|
@Binding var groupInfo: GroupInfo
|
|
@Binding var admission: GroupMemberAdmission
|
|
var currentAdmission: GroupMemberAdmission
|
|
let creatingGroup: Bool
|
|
let saveAdmission: () -> Void
|
|
@State private var showSaveDialogue = false
|
|
|
|
var body: some View {
|
|
let saveText: LocalizedStringKey = creatingGroup ? "Save" : "Save and notify group members"
|
|
VStack {
|
|
List {
|
|
admissionSection(
|
|
NSLocalizedString("Review members", comment: "admission stage"),
|
|
NSLocalizedString("Review members before admitting (\"knocking\").", comment: "admission stage description"),
|
|
$admission.review
|
|
)
|
|
|
|
if groupInfo.isOwner {
|
|
Section {
|
|
Button("Reset") { admission = currentAdmission }
|
|
Button(saveText) { saveAdmission() }
|
|
}
|
|
.disabled(currentAdmission == admission)
|
|
}
|
|
}
|
|
}
|
|
.modifier(BackButton(disabled: Binding.constant(false)) {
|
|
if currentAdmission == admission {
|
|
dismiss()
|
|
} else {
|
|
showSaveDialogue = true
|
|
}
|
|
})
|
|
.confirmationDialog("Save admission settings?", isPresented: $showSaveDialogue) {
|
|
Button(saveText) {
|
|
saveAdmission()
|
|
dismiss()
|
|
}
|
|
Button("Exit without saving") {
|
|
admission = currentAdmission
|
|
dismiss()
|
|
}
|
|
}
|
|
}
|
|
|
|
private func admissionSection(_ admissionStageStr: String, _ admissionStageDescrStr: String, _ memberCriteria: Binding<MemberCriteria?>) -> some View {
|
|
Section {
|
|
if groupInfo.isOwner {
|
|
Picker(admissionStageStr, selection: memberCriteria) {
|
|
ForEach(memberCriterias, id: \.criteria) { mc in
|
|
Text(mc.text)
|
|
}
|
|
}
|
|
.frame(height: 36)
|
|
} else {
|
|
infoRow(Text(admissionStageStr), memberCriteria.wrappedValue?.text ?? NSLocalizedString("off", comment: "member criteria value"))
|
|
}
|
|
} footer: {
|
|
Text(admissionStageDescrStr)
|
|
.foregroundColor(theme.colors.secondary)
|
|
}
|
|
}
|
|
}
|
|
|
|
#Preview {
|
|
MemberAdmissionView(
|
|
groupInfo: Binding.constant(GroupInfo.sampleData),
|
|
admission: Binding.constant(GroupMemberAdmission.sampleData),
|
|
currentAdmission: GroupMemberAdmission.sampleData,
|
|
creatingGroup: false,
|
|
saveAdmission: {}
|
|
)
|
|
}
|