mirror of
https://github.com/mastodon/mastodon-ios
synced 2025-04-11 22:58:02 +02:00
Add first draft for Notification-count-view (IOS-241)
This commit is contained in:
parent
67e1e5e3b4
commit
48f58642ac
@ -169,6 +169,7 @@
|
||||
D85DF9722C481B1100A01408 /* NotificationRequestTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D85DF96F2C481B1100A01408 /* NotificationRequestTableViewCell.swift */; };
|
||||
D85DF9742C481B3500A01408 /* DataSourceFacade+Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = D85DF9732C481B3500A01408 /* DataSourceFacade+Notifications.swift */; };
|
||||
D85DF9762C4965A900A01408 /* NotificationRequestsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D85DF9752C4965A900A01408 /* NotificationRequestsViewModel.swift */; };
|
||||
D85DF97A2C4E49A400A01408 /* NotificationRequestCountView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D85DF9792C4E49A400A01408 /* NotificationRequestCountView.swift */; };
|
||||
D87364F92AE28DB500C8F919 /* Kanna in Frameworks */ = {isa = PBXBuildFile; productRef = D87364F82AE28DB500C8F919 /* Kanna */; };
|
||||
D87BFC8B291D5C6B00FEE264 /* MastodonLoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D87BFC8A291D5C6B00FEE264 /* MastodonLoginView.swift */; };
|
||||
D87BFC8D291EB81200FEE264 /* MastodonLoginViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D87BFC8C291EB81200FEE264 /* MastodonLoginViewModel.swift */; };
|
||||
@ -815,6 +816,7 @@
|
||||
D85DF96F2C481B1100A01408 /* NotificationRequestTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NotificationRequestTableViewCell.swift; sourceTree = "<group>"; };
|
||||
D85DF9732C481B3500A01408 /* DataSourceFacade+Notifications.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "DataSourceFacade+Notifications.swift"; sourceTree = "<group>"; };
|
||||
D85DF9752C4965A900A01408 /* NotificationRequestsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationRequestsViewModel.swift; sourceTree = "<group>"; };
|
||||
D85DF9792C4E49A400A01408 /* NotificationRequestCountView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationRequestCountView.swift; sourceTree = "<group>"; };
|
||||
D87BFC8A291D5C6B00FEE264 /* MastodonLoginView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonLoginView.swift; sourceTree = "<group>"; };
|
||||
D87BFC8C291EB81200FEE264 /* MastodonLoginViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonLoginViewModel.swift; sourceTree = "<group>"; };
|
||||
D87BFC8E291EC26A00FEE264 /* MastodonLoginServerTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonLoginServerTableViewCell.swift; sourceTree = "<group>"; };
|
||||
@ -1853,6 +1855,7 @@
|
||||
D85DF96E2C481B1100A01408 /* NotificationRequestsTableViewController.swift */,
|
||||
D85DF96F2C481B1100A01408 /* NotificationRequestTableViewCell.swift */,
|
||||
D85DF9752C4965A900A01408 /* NotificationRequestsViewModel.swift */,
|
||||
D85DF9792C4E49A400A01408 /* NotificationRequestCountView.swift */,
|
||||
);
|
||||
name = Requests;
|
||||
path = "Notification Filtering/Requests";
|
||||
@ -3825,6 +3828,7 @@
|
||||
D852C23C2AC5D02C00309232 /* AboutInstanceViewController.swift in Sources */,
|
||||
D8F917142A4D74C3008A5370 /* GeneralSettingsDiffableTableViewDataSource.swift in Sources */,
|
||||
2A5242772C199EC2005B9E22 /* PrivacySafetySettingPreset.swift in Sources */,
|
||||
D85DF97A2C4E49A400A01408 /* NotificationRequestCountView.swift in Sources */,
|
||||
DB6180FA26391F2E0018D199 /* MediaPreviewViewModel.swift in Sources */,
|
||||
2D7631A825C1535600929FB9 /* StatusTableViewCell.swift in Sources */,
|
||||
DB6B7500272FF73800C70B6E /* UserTableViewCell.swift in Sources */,
|
||||
|
@ -0,0 +1,44 @@
|
||||
// Copyright © 2024 Mastodon gGmbH. All rights reserved.
|
||||
|
||||
import UIKit
|
||||
import MastodonAsset
|
||||
|
||||
class NotificationRequestCountView: UIView {
|
||||
|
||||
let countLabel: UILabel
|
||||
|
||||
init() {
|
||||
countLabel = UILabel()
|
||||
countLabel.translatesAutoresizingMaskIntoConstraints = false
|
||||
countLabel.textColor = .white
|
||||
countLabel.font = UIFontMetrics(forTextStyle: .footnote).scaledFont(for: .systemFont(ofSize: 13, weight: .regular))
|
||||
countLabel.textAlignment = .center
|
||||
|
||||
super.init(frame: .zero)
|
||||
|
||||
addSubview(countLabel)
|
||||
|
||||
backgroundColor = Asset.Colors.Brand.blurple.color
|
||||
layer.borderWidth = 2.0
|
||||
layer.borderColor = UIColor.white.cgColor
|
||||
applyCornerRadius(radius: 10)
|
||||
|
||||
setupConstraints()
|
||||
}
|
||||
|
||||
required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") }
|
||||
|
||||
private func setupConstraints() {
|
||||
let constraints = [
|
||||
countLabel.topAnchor.constraint(equalTo: topAnchor, constant: 2),
|
||||
countLabel.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 5),
|
||||
trailingAnchor.constraint(equalTo: countLabel.trailingAnchor, constant: 5),
|
||||
bottomAnchor.constraint(equalTo: countLabel.bottomAnchor, constant: 2),
|
||||
|
||||
widthAnchor.constraint(greaterThanOrEqualToConstant: 20),
|
||||
heightAnchor.constraint(greaterThanOrEqualToConstant: 20)
|
||||
]
|
||||
|
||||
NSLayoutConstraint.activate(constraints)
|
||||
}
|
||||
}
|
@ -36,6 +36,8 @@ class NotificationRequestTableViewCell: UITableViewCell {
|
||||
let rejectNotificationRequestActivityIndicatorView: UIActivityIndicatorView
|
||||
let rejectNotificationRequestButton: HighlightDimmableButton
|
||||
|
||||
let requestCountView: NotificationRequestCountView
|
||||
|
||||
private let buttonStackView: UIStackView
|
||||
|
||||
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
|
||||
@ -118,12 +120,16 @@ class NotificationRequestTableViewCell: UITableViewCell {
|
||||
contentStackView.axis = .vertical
|
||||
contentStackView.alignment = .leading
|
||||
|
||||
requestCountView = NotificationRequestCountView()
|
||||
requestCountView.translatesAutoresizingMaskIntoConstraints = false
|
||||
|
||||
super.init(style: style, reuseIdentifier: reuseIdentifier)
|
||||
|
||||
acceptNotificationRequestButton.addTarget(self, action: #selector(NotificationRequestTableViewCell.acceptNotificationRequest(_:)), for: .touchUpInside)
|
||||
rejectNotificationRequestButton.addTarget(self, action: #selector(NotificationRequestTableViewCell.rejectNotificationRequest(_:)), for: .touchUpInside)
|
||||
|
||||
contentView.addSubview(contentStackView)
|
||||
contentView.addSubview(requestCountView)
|
||||
setupConstraints()
|
||||
}
|
||||
|
||||
@ -148,6 +154,9 @@ class NotificationRequestTableViewCell: UITableViewCell {
|
||||
rejectNotificationRequestActivityIndicatorView.centerXAnchor.constraint(equalTo: rejectNotificationRequestButton.centerXAnchor),
|
||||
rejectNotificationRequestActivityIndicatorView.centerYAnchor.constraint(equalTo: rejectNotificationRequestButton.centerYAnchor),
|
||||
|
||||
requestCountView.trailingAnchor.constraint(equalTo: avatarButton.trailingAnchor, constant: 2),
|
||||
requestCountView.bottomAnchor.constraint(equalTo: avatarButton.bottomAnchor, constant: 2),
|
||||
|
||||
]
|
||||
NSLayoutConstraint.activate(constraints)
|
||||
|
||||
@ -180,6 +189,10 @@ class NotificationRequestTableViewCell: UITableViewCell {
|
||||
let metaUsername = PlaintextMetaContent(string: "@\(account.acct)")
|
||||
usernameLabel.configure(content: metaUsername)
|
||||
|
||||
requestCountView.countLabel.text = request.notificationsCount
|
||||
requestCountView.setNeedsLayout()
|
||||
requestCountView.layoutIfNeeded()
|
||||
|
||||
self.notificationRequest = request
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user