Allow focusing the different avatars making up a DM details cluster separately. (#3341)

This commit is contained in:
Stefan Ceriu
2024-09-27 15:23:20 +03:00
committed by GitHub
parent 9d23dec2e9
commit 8a3994016d
12 changed files with 65 additions and 51 deletions
@@ -13,20 +13,39 @@ struct LoadableAvatarImage: View {
private let contentID: String?
private let avatarSize: AvatarSize
private let mediaProvider: MediaProviderProtocol?
private let onTap: ((URL) -> Void)?
@ScaledMetric private var frameSize: CGFloat
init(url: URL?, name: String?, contentID: String?, avatarSize: AvatarSize, mediaProvider: MediaProviderProtocol?) {
init(url: URL?, name: String?,
contentID: String?,
avatarSize: AvatarSize,
mediaProvider: MediaProviderProtocol?,
onTap: ((URL) -> Void)? = nil) {
self.url = url
self.name = name
self.contentID = contentID
self.avatarSize = avatarSize
self.mediaProvider = mediaProvider
self.onTap = onTap
_frameSize = ScaledMetric(wrappedValue: avatarSize.value)
}
var body: some View {
if let onTap, let url {
Button {
onTap(url)
} label: {
clippedAvatar
}
.buttonStyle(.borderless) // Add a button style to stop the whole row being tappable.
} else {
clippedAvatar
}
}
private var clippedAvatar: some View {
avatar
.frame(width: frameSize, height: frameSize)
.background(Color.compound.bgCanvasDefault)
@@ -34,7 +53,7 @@ struct LoadableAvatarImage: View {
}
@ViewBuilder
var avatar: some View {
private var avatar: some View {
if let url {
LoadableImage(url: url,
mediaType: .avatar,