Improve ViewModel

This commit is contained in:
Djorkaeff Alexandre 2024-01-23 16:47:44 -03:00
parent 7281d84d9f
commit 02a169205d
4 changed files with 37 additions and 9 deletions

View File

@ -5,7 +5,7 @@ final class MessageViewModel: ObservableObject {
@Published private(set) var message: Message
@Published private(set) var previousMessage: Message?
let messageFormatter: MessageFormatter
private let messageFormatter: MessageFormatter
init(message: Message, previousMessage: Message? = nil, server: Server?, lastOpen: Date?) {
self.message = message
@ -22,4 +22,28 @@ final class MessageViewModel: ObservableObject {
server?.useRealName == true ? message.user?.name : message.user?.username
}
var date: String? {
messageFormatter.date()
}
var time: String? {
messageFormatter.time()
}
var info: String? {
messageFormatter.info()
}
var hasDateSeparator: Bool {
messageFormatter.hasDateSeparator()
}
var hasUnreadSeparator: Bool {
messageFormatter.hasUnreadSeparator()
}
var isHeader: Bool {
messageFormatter.isHeader()
}
}

View File

@ -4,7 +4,7 @@ final class RoomViewModel: ObservableObject {
@Published var room: Room
@Published var server: Server
let formatter: RoomFormatter
private let formatter: RoomFormatter
init(room: Room, server: Server) {
self.room = room
@ -12,6 +12,10 @@ final class RoomViewModel: ObservableObject {
self.formatter = RoomFormatter(room: room, server: server)
}
var title: String? {
formatter.title
}
var iconName: String? {
if room.prid != nil {
return "discussions"

View File

@ -32,7 +32,7 @@ struct MessageView: View {
Divider()
.overlay(.secondary)
}
Text(viewModel.messageFormatter.date() ?? "")
Text(viewModel.date ?? "")
.lineLimit(1)
.font(.footnote)
.foregroundStyle(.secondary)
@ -46,24 +46,24 @@ struct MessageView: View {
var body: some View {
VStack(alignment: .leading) {
if viewModel.messageFormatter.hasDateSeparator() {
if viewModel.hasDateSeparator {
dateSeparator
} else if viewModel.messageFormatter.hasUnreadSeparator() {
} else if viewModel.hasUnreadSeparator {
unreadSeparator
}
if viewModel.messageFormatter.isHeader() {
if viewModel.isHeader {
HStack(alignment: .center) {
Text(viewModel.sender ?? "")
.lineLimit(1)
.font(.caption.bold())
.foregroundStyle(.primary)
Text(viewModel.messageFormatter.time() ?? "")
Text(viewModel.time ?? "")
.lineLimit(1)
.font(.footnote)
.foregroundStyle(.secondary)
}
}
if let text = viewModel.messageFormatter.info() {
if let text = viewModel.info {
Text(text)
.font(.caption.italic())
.foregroundStyle(.primary)

View File

@ -16,7 +16,7 @@ struct RoomView: View {
.frame(width: 16, height: 16)
.scaledToFit()
}
Text(viewModel.formatter.title ?? "")
Text(viewModel.title ?? "")
.lineLimit(1)
.font(.caption.weight(isUnread ? .bold : .medium))
.foregroundStyle(.primary)