forked from shadowfacts/Tusker
Status cell swipe actions
This commit is contained in:
parent
ddf5094acf
commit
18ee621489
|
@ -43,8 +43,12 @@ class TimelineViewController: UIViewController, TimelineLikeCollectionViewContro
|
||||||
|
|
||||||
override func loadView() {
|
override func loadView() {
|
||||||
var config = UICollectionLayoutListConfiguration(appearance: .plain)
|
var config = UICollectionLayoutListConfiguration(appearance: .plain)
|
||||||
// TODO: swipe actions
|
config.leadingSwipeActionsConfigurationProvider = { [unowned self] in
|
||||||
// config.trailingSwipeActionsConfigurationProvider =
|
(collectionView.cellForItem(at: $0) as? TimelineStatusCollectionViewCell)?.leadingSwipeActions()
|
||||||
|
}
|
||||||
|
config.trailingSwipeActionsConfigurationProvider = { [unowned self] in
|
||||||
|
(collectionView.cellForItem(at: $0) as? TimelineStatusCollectionViewCell)?.trailingSwipeActions()
|
||||||
|
}
|
||||||
config.itemSeparatorHandler = { [unowned self] indexPath, sectionSeparatorConfiguration in
|
config.itemSeparatorHandler = { [unowned self] indexPath, sectionSeparatorConfiguration in
|
||||||
guard let item = self.dataSource.itemIdentifier(for: indexPath) else {
|
guard let item = self.dataSource.itemIdentifier(for: indexPath) else {
|
||||||
return sectionSeparatorConfiguration
|
return sectionSeparatorConfiguration
|
||||||
|
|
|
@ -509,6 +509,61 @@ class TimelineStatusCollectionViewCell: UICollectionViewListCell, StatusCollecti
|
||||||
toggleReblog()
|
toggleReblog()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func leadingSwipeActions() -> UISwipeActionsConfiguration? {
|
||||||
|
guard mastodonController.loggedIn,
|
||||||
|
let status = mastodonController.persistentContainer.status(for: statusID) else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
let favoriteTitle = status.favourited ? "Unfavorite" : "Favorite"
|
||||||
|
let favorite = UIContextualAction(style: .normal, title: favoriteTitle) { [unowned self] _, _, completion in
|
||||||
|
Task {
|
||||||
|
await FavoriteService(status: status, mastodonController: self.mastodonController, presenter: self.delegate!).toggleFavorite()
|
||||||
|
completion(true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
favorite.image = UIImage(systemName: "star.fill")
|
||||||
|
favorite.backgroundColor = status.favourited ? UIColor(displayP3Red: 235/255, green: 77/255, blue: 62/255, alpha: 1) : UIColor(displayP3Red: 1, green: 204/255, blue: 0, alpha: 1)
|
||||||
|
|
||||||
|
let reblogTitle = status.reblogged ? "Unreblog" : "Reblog"
|
||||||
|
let reblog = UIContextualAction(style: .normal, title: reblogTitle) { _, _, completion in
|
||||||
|
Task {
|
||||||
|
await ReblogService(status: status, mastodonController: self.mastodonController, presenter: self.delegate!).toggleReblog()
|
||||||
|
completion(true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
reblog.image = UIImage(systemName: "repeat")
|
||||||
|
reblog.backgroundColor = status.reblogged ? UIColor(displayP3Red: 235/255, green: 77/255, blue: 62/255, alpha: 1) : tintColor
|
||||||
|
|
||||||
|
return UISwipeActionsConfiguration(actions: [favorite, reblog])
|
||||||
|
}
|
||||||
|
|
||||||
|
func trailingSwipeActions() -> UISwipeActionsConfiguration? {
|
||||||
|
var actions = [UIContextualAction]()
|
||||||
|
|
||||||
|
let share = UIContextualAction(style: .normal, title: "Share") { [unowned self] _, _, completion in
|
||||||
|
self.delegate?.showMoreOptions(forStatus: statusID, sourceView: self)
|
||||||
|
completion(true)
|
||||||
|
}
|
||||||
|
// bold to more closesly match other action symbols
|
||||||
|
let config = UIImage.SymbolConfiguration(weight: .bold)
|
||||||
|
share.image = UIImage(systemName: "square.and.arrow.up")!.applyingSymbolConfiguration(config)!
|
||||||
|
share.backgroundColor = .lightGray
|
||||||
|
actions.append(share)
|
||||||
|
|
||||||
|
if mastodonController.loggedIn {
|
||||||
|
let reply = UIContextualAction(style: .normal, title: "Reply") { [unowned self] _, _, completion in
|
||||||
|
self.replyPressed()
|
||||||
|
completion(true)
|
||||||
|
}
|
||||||
|
reply.image = UIImage(systemName: "arrowshape.turn.up.left.fill")
|
||||||
|
reply.backgroundColor = tintColor
|
||||||
|
actions.insert(reply, at: 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
return UISwipeActionsConfiguration(actions: actions)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extension TimelineStatusCollectionViewCell: UIContextMenuInteractionDelegate {
|
extension TimelineStatusCollectionViewCell: UIContextMenuInteractionDelegate {
|
||||||
|
|
Loading…
Reference in New Issue