mirror of
https://github.com/mastodon/mastodon-ios.git
synced 2024-12-14 09:45:00 +01:00
66 lines
2.1 KiB
Swift
66 lines
2.1 KiB
Swift
|
//
|
||
|
// UserView+ViewModel.swift
|
||
|
//
|
||
|
//
|
||
|
// Created by MainasuK on 2022-1-19.
|
||
|
//
|
||
|
|
||
|
import os.log
|
||
|
import UIKit
|
||
|
import Combine
|
||
|
import MetaTextKit
|
||
|
|
||
|
extension UserView {
|
||
|
public final class ViewModel: ObservableObject {
|
||
|
public var disposeBag = Set<AnyCancellable>()
|
||
|
public var observations = Set<NSKeyValueObservation>()
|
||
|
|
||
|
let logger = Logger(subsystem: "StatusView", category: "ViewModel")
|
||
|
|
||
|
@Published public var authorAvatarImage: UIImage?
|
||
|
@Published public var authorAvatarImageURL: URL?
|
||
|
@Published public var authorName: MetaContent?
|
||
|
@Published public var authorUsername: String?
|
||
|
}
|
||
|
}
|
||
|
|
||
|
extension UserView.ViewModel {
|
||
|
func bind(userView: UserView) {
|
||
|
// avatar
|
||
|
Publishers.CombineLatest(
|
||
|
$authorAvatarImage,
|
||
|
$authorAvatarImageURL
|
||
|
)
|
||
|
.sink { image, url in
|
||
|
let configuration: AvatarImageView.Configuration = {
|
||
|
if let image = image {
|
||
|
return AvatarImageView.Configuration(image: image)
|
||
|
} else {
|
||
|
return AvatarImageView.Configuration(url: url)
|
||
|
}
|
||
|
}()
|
||
|
userView.avatarButton.avatarImageView.configure(configuration: configuration)
|
||
|
userView.avatarButton.avatarImageView.configure(cornerConfiguration: .init(corner: .fixed(radius: 7)))
|
||
|
}
|
||
|
.store(in: &disposeBag)
|
||
|
// name
|
||
|
$authorName
|
||
|
.sink { metaContent in
|
||
|
let metaContent = metaContent ?? PlaintextMetaContent(string: " ")
|
||
|
userView.authorNameLabel.configure(content: metaContent)
|
||
|
}
|
||
|
.store(in: &disposeBag)
|
||
|
// username
|
||
|
$authorUsername
|
||
|
.map { text -> String in
|
||
|
guard let text = text else { return "" }
|
||
|
return "@\(text)"
|
||
|
}
|
||
|
.sink { username in
|
||
|
let metaContent = PlaintextMetaContent(string: username)
|
||
|
userView.authorUsernameLabel.configure(content: metaContent)
|
||
|
}
|
||
|
.store(in: &disposeBag)
|
||
|
}
|
||
|
}
|