• use primary text color • for "Message Request" and "Group Request" panels don't use inset glass panel background as double insets use too much screen estate.
130 lines
4.5 KiB
Swift
130 lines
4.5 KiB
Swift
//
|
|
// Copyright 2020 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
//
|
|
|
|
import SignalServiceKit
|
|
import SignalUI
|
|
|
|
class MemberRequestView: ConversationBottomPanelView {
|
|
|
|
override var useGlassPanel: Bool {
|
|
false
|
|
}
|
|
|
|
private let thread: TSThread
|
|
|
|
private weak var fromViewController: UIViewController?
|
|
|
|
weak var delegate: MessageRequestDelegate?
|
|
|
|
init(threadViewModel: ThreadViewModel, fromViewController: UIViewController) {
|
|
self.thread = threadViewModel.threadRecord
|
|
owsAssertDebug(thread is TSGroupThread)
|
|
self.fromViewController = fromViewController
|
|
|
|
super.init(frame: .zero)
|
|
|
|
let label = UILabel()
|
|
label.font = .dynamicTypeSubheadlineClamped
|
|
label.textColor = .Signal.label
|
|
label.text = OWSLocalizedString(
|
|
"MESSAGE_REQUESTS_CONVERSATION_REQUEST_INDICATOR",
|
|
comment: "Indicator that you have requested to join this group.",
|
|
)
|
|
label.numberOfLines = 0
|
|
label.textAlignment = .center
|
|
label.lineBreakMode = .byWordWrapping
|
|
|
|
let cancelButton = UIButton(
|
|
configuration: .largeSecondary(title: OWSLocalizedString(
|
|
"MESSAGE_REQUESTS_CANCEL_REQUEST_BUTTON",
|
|
comment: "Label for button to cancel your request to join the group.",
|
|
)),
|
|
primaryAction: UIAction { [weak self] _ in
|
|
self?.didTapCancelButton()
|
|
},
|
|
)
|
|
cancelButton.configuration?.baseForegroundColor = .Signal.red
|
|
cancelButton.translatesAutoresizingMaskIntoConstraints = false
|
|
let cancelButtonContainer = UIView.container()
|
|
cancelButtonContainer.addSubview(cancelButton)
|
|
cancelButtonContainer.addConstraints([
|
|
cancelButton.topAnchor.constraint(equalTo: cancelButtonContainer.topAnchor),
|
|
cancelButton.leadingAnchor.constraint(equalTo: cancelButtonContainer.leadingAnchor, constant: 18),
|
|
cancelButton.centerXAnchor.constraint(equalTo: cancelButtonContainer.centerXAnchor),
|
|
cancelButton.bottomAnchor.constraint(equalTo: cancelButtonContainer.bottomAnchor),
|
|
])
|
|
|
|
let stackView = UIStackView(arrangedSubviews: [label, cancelButtonContainer])
|
|
stackView.axis = .vertical
|
|
stackView.spacing = 16
|
|
stackView.translatesAutoresizingMaskIntoConstraints = false
|
|
contentView.addSubview(stackView)
|
|
|
|
addConstraints([
|
|
stackView.topAnchor.constraint(equalTo: contentLayoutGuide.topAnchor),
|
|
stackView.leadingAnchor.constraint(equalTo: contentLayoutGuide.leadingAnchor),
|
|
stackView.trailingAnchor.constraint(equalTo: contentLayoutGuide.trailingAnchor),
|
|
stackView.bottomAnchor.constraint(equalTo: contentLayoutGuide.bottomAnchor),
|
|
])
|
|
}
|
|
|
|
required init(coder: NSCoder) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
|
|
// MARK: -
|
|
|
|
private func didTapCancelButton() {
|
|
showCancelRequestUI()
|
|
}
|
|
|
|
private func showCancelRequestUI() {
|
|
guard let fromViewController else {
|
|
owsFailDebug("Missing fromViewController.")
|
|
return
|
|
}
|
|
|
|
let title = OWSLocalizedString(
|
|
"MESSAGE_REQUESTS_CANCEL_REQUEST_CONFIRM_TITLE",
|
|
comment: "Title for the confirmation alert when cancelling your request to join the group.",
|
|
)
|
|
let actionSheet = ActionSheetController(title: title)
|
|
|
|
actionSheet.addAction(ActionSheetAction(
|
|
title: CommonStrings.yesButton,
|
|
style: .destructive,
|
|
) { [weak self] _ in
|
|
self?.cancelRequestToJoin()
|
|
})
|
|
actionSheet.addAction(ActionSheetAction(
|
|
title: CommonStrings.noButton,
|
|
style: .cancel,
|
|
) { _ in
|
|
// Do nothing.
|
|
})
|
|
|
|
fromViewController.presentActionSheet(actionSheet)
|
|
}
|
|
|
|
private func cancelRequestToJoin() {
|
|
guard
|
|
let fromViewController,
|
|
let groupThread = thread as? TSGroupThread,
|
|
let groupModelV2 = groupThread.groupModel as? TSGroupModelV2
|
|
else {
|
|
GroupViewUtils.showUpdateErrorUI(error: OWSAssertionError("Missing properties needed to update group"))
|
|
return
|
|
}
|
|
|
|
GroupViewUtils.updateGroupWithActivityIndicator(
|
|
fromViewController: fromViewController,
|
|
updateBlock: {
|
|
try await GroupManager.cancelRequestToJoin(groupModel: groupModelV2)
|
|
},
|
|
completion: nil,
|
|
)
|
|
}
|
|
}
|