refactor: use `tableView.allowsMultipleSelection`
This commit is contained in:
parent
db48e56dd9
commit
e9d015720b
|
@ -48,7 +48,13 @@ extension ReportSection {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
cell.setupSelected(attribute.isSelected)
|
// defalut to select the report status
|
||||||
|
if attribute.isSelected {
|
||||||
|
tableView.selectRow(at: indexPath, animated: false, scrollPosition: .none)
|
||||||
|
} else {
|
||||||
|
tableView.deselectRow(at: indexPath, animated: false)
|
||||||
|
}
|
||||||
|
|
||||||
return cell
|
return cell
|
||||||
default:
|
default:
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -68,6 +68,7 @@ class ReportViewController: UIViewController, NeedsDependency {
|
||||||
tableView.backgroundColor = .clear
|
tableView.backgroundColor = .clear
|
||||||
tableView.translatesAutoresizingMaskIntoConstraints = false
|
tableView.translatesAutoresizingMaskIntoConstraints = false
|
||||||
tableView.delegate = self
|
tableView.delegate = self
|
||||||
|
tableView.allowsMultipleSelection = true
|
||||||
return tableView
|
return tableView
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
@ -277,7 +278,13 @@ extension ReportViewController: UITableViewDelegate {
|
||||||
guard let item = viewModel.diffableDataSource?.itemIdentifier(for: indexPath) else {
|
guard let item = viewModel.diffableDataSource?.itemIdentifier(for: indexPath) else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
didToggleSelected.send(item)
|
||||||
|
}
|
||||||
|
|
||||||
|
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
|
||||||
|
guard let item = viewModel.diffableDataSource?.itemIdentifier(for: indexPath) else {
|
||||||
|
return
|
||||||
|
}
|
||||||
didToggleSelected.send(item)
|
didToggleSelected.send(item)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -113,7 +113,6 @@ class ReportViewModel: NSObject {
|
||||||
input.didToggleSelected.sink { [weak self] (item) in
|
input.didToggleSelected.sink { [weak self] (item) in
|
||||||
guard let self = self else { return }
|
guard let self = self else { return }
|
||||||
guard case let .reportStatus(objectID, attribute) = item else { return }
|
guard case let .reportStatus(objectID, attribute) = item else { return }
|
||||||
guard var snapshot = self.diffableDataSource?.snapshot() else { return }
|
|
||||||
let managedObjectContext = self.statusFetchedResultsController.fetchedResultsController.managedObjectContext
|
let managedObjectContext = self.statusFetchedResultsController.fetchedResultsController.managedObjectContext
|
||||||
guard let status = managedObjectContext.object(with: objectID) as? Status else {
|
guard let status = managedObjectContext.object(with: objectID) as? Status else {
|
||||||
return
|
return
|
||||||
|
@ -126,9 +125,6 @@ class ReportViewModel: NSObject {
|
||||||
self.reportQuery.remove(statusID: status.id)
|
self.reportQuery.remove(statusID: status.id)
|
||||||
}
|
}
|
||||||
|
|
||||||
snapshot.reloadItems([item])
|
|
||||||
self.diffableDataSource?.apply(snapshot, animatingDifferences: false)
|
|
||||||
|
|
||||||
let continueEnable = (self.reportQuery.statusIDs?.count ?? 0) > 0
|
let continueEnable = (self.reportQuery.statusIDs?.count ?? 0) > 0
|
||||||
self.continueEnableSubject.send(continueEnable)
|
self.continueEnableSubject.send(continueEnable)
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,7 +20,6 @@ final class ReportedStatusTableViewCell: UITableViewCell, StatusCell {
|
||||||
var disposeBag = Set<AnyCancellable>()
|
var disposeBag = Set<AnyCancellable>()
|
||||||
var pollCountdownSubscription: AnyCancellable?
|
var pollCountdownSubscription: AnyCancellable?
|
||||||
var observations = Set<NSKeyValueObservation>()
|
var observations = Set<NSKeyValueObservation>()
|
||||||
var checked: Bool = false
|
|
||||||
|
|
||||||
let statusView = StatusView()
|
let statusView = StatusView()
|
||||||
let separatorLine = UIView.separatorLine
|
let separatorLine = UIView.separatorLine
|
||||||
|
@ -42,7 +41,6 @@ final class ReportedStatusTableViewCell: UITableViewCell, StatusCell {
|
||||||
|
|
||||||
override func prepareForReuse() {
|
override func prepareForReuse() {
|
||||||
super.prepareForReuse()
|
super.prepareForReuse()
|
||||||
checked = false
|
|
||||||
statusView.updateContentWarningDisplay(isHidden: true, animated: false)
|
statusView.updateContentWarningDisplay(isHidden: true, animated: false)
|
||||||
statusView.statusMosaicImageViewContainer.contentWarningOverlayView.isUserInteractionEnabled = true
|
statusView.statusMosaicImageViewContainer.contentWarningOverlayView.isUserInteractionEnabled = true
|
||||||
statusView.pollTableView.dataSource = nil
|
statusView.pollTableView.dataSource = nil
|
||||||
|
@ -75,11 +73,22 @@ final class ReportedStatusTableViewCell: UITableViewCell, StatusCell {
|
||||||
if highlighted {
|
if highlighted {
|
||||||
checkbox.image = UIImage(systemName: "checkmark.circle.fill")
|
checkbox.image = UIImage(systemName: "checkmark.circle.fill")
|
||||||
checkbox.tintColor = Asset.Colors.Label.highlight.color
|
checkbox.tintColor = Asset.Colors.Label.highlight.color
|
||||||
} else if !checked {
|
} else if !isSelected {
|
||||||
checkbox.image = UIImage(systemName: "circle")
|
checkbox.image = UIImage(systemName: "circle")
|
||||||
checkbox.tintColor = Asset.Colors.Label.secondary.color
|
checkbox.tintColor = Asset.Colors.Label.secondary.color
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override func setSelected(_ selected: Bool, animated: Bool) {
|
||||||
|
super.setSelected(selected, animated: animated)
|
||||||
|
|
||||||
|
if isSelected {
|
||||||
|
checkbox.image = UIImage(systemName: "checkmark.circle.fill")
|
||||||
|
} else {
|
||||||
|
checkbox.image = UIImage(systemName: "circle")
|
||||||
|
}
|
||||||
|
checkbox.tintColor = Asset.Colors.Label.secondary.color
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension ReportedStatusTableViewCell {
|
extension ReportedStatusTableViewCell {
|
||||||
|
@ -127,16 +136,6 @@ extension ReportedStatusTableViewCell {
|
||||||
|
|
||||||
resetSeparatorLineLayout()
|
resetSeparatorLineLayout()
|
||||||
}
|
}
|
||||||
|
|
||||||
func setupSelected(_ selected: Bool) {
|
|
||||||
checked = selected
|
|
||||||
if selected {
|
|
||||||
checkbox.image = UIImage(systemName: "checkmark.circle.fill")
|
|
||||||
} else {
|
|
||||||
checkbox.image = UIImage(systemName: "circle")
|
|
||||||
}
|
|
||||||
checkbox.tintColor = Asset.Colors.Label.secondary.color
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extension ReportedStatusTableViewCell {
|
extension ReportedStatusTableViewCell {
|
||||||
|
|
Loading…
Reference in New Issue