Improve ViewModel
This commit is contained in:
parent
7281d84d9f
commit
02a169205d
|
@ -5,7 +5,7 @@ final class MessageViewModel: ObservableObject {
|
||||||
@Published private(set) var message: Message
|
@Published private(set) var message: Message
|
||||||
@Published private(set) var previousMessage: Message?
|
@Published private(set) var previousMessage: Message?
|
||||||
|
|
||||||
let messageFormatter: MessageFormatter
|
private let messageFormatter: MessageFormatter
|
||||||
|
|
||||||
init(message: Message, previousMessage: Message? = nil, server: Server?, lastOpen: Date?) {
|
init(message: Message, previousMessage: Message? = nil, server: Server?, lastOpen: Date?) {
|
||||||
self.message = message
|
self.message = message
|
||||||
|
@ -22,4 +22,28 @@ final class MessageViewModel: ObservableObject {
|
||||||
server?.useRealName == true ? message.user?.name : message.user?.username
|
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()
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@ final class RoomViewModel: ObservableObject {
|
||||||
@Published var room: Room
|
@Published var room: Room
|
||||||
@Published var server: Server
|
@Published var server: Server
|
||||||
|
|
||||||
let formatter: RoomFormatter
|
private let formatter: RoomFormatter
|
||||||
|
|
||||||
init(room: Room, server: Server) {
|
init(room: Room, server: Server) {
|
||||||
self.room = room
|
self.room = room
|
||||||
|
@ -12,6 +12,10 @@ final class RoomViewModel: ObservableObject {
|
||||||
self.formatter = RoomFormatter(room: room, server: server)
|
self.formatter = RoomFormatter(room: room, server: server)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var title: String? {
|
||||||
|
formatter.title
|
||||||
|
}
|
||||||
|
|
||||||
var iconName: String? {
|
var iconName: String? {
|
||||||
if room.prid != nil {
|
if room.prid != nil {
|
||||||
return "discussions"
|
return "discussions"
|
||||||
|
|
|
@ -32,7 +32,7 @@ struct MessageView: View {
|
||||||
Divider()
|
Divider()
|
||||||
.overlay(.secondary)
|
.overlay(.secondary)
|
||||||
}
|
}
|
||||||
Text(viewModel.messageFormatter.date() ?? "")
|
Text(viewModel.date ?? "")
|
||||||
.lineLimit(1)
|
.lineLimit(1)
|
||||||
.font(.footnote)
|
.font(.footnote)
|
||||||
.foregroundStyle(.secondary)
|
.foregroundStyle(.secondary)
|
||||||
|
@ -46,24 +46,24 @@ struct MessageView: View {
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
VStack(alignment: .leading) {
|
VStack(alignment: .leading) {
|
||||||
if viewModel.messageFormatter.hasDateSeparator() {
|
if viewModel.hasDateSeparator {
|
||||||
dateSeparator
|
dateSeparator
|
||||||
} else if viewModel.messageFormatter.hasUnreadSeparator() {
|
} else if viewModel.hasUnreadSeparator {
|
||||||
unreadSeparator
|
unreadSeparator
|
||||||
}
|
}
|
||||||
if viewModel.messageFormatter.isHeader() {
|
if viewModel.isHeader {
|
||||||
HStack(alignment: .center) {
|
HStack(alignment: .center) {
|
||||||
Text(viewModel.sender ?? "")
|
Text(viewModel.sender ?? "")
|
||||||
.lineLimit(1)
|
.lineLimit(1)
|
||||||
.font(.caption.bold())
|
.font(.caption.bold())
|
||||||
.foregroundStyle(.primary)
|
.foregroundStyle(.primary)
|
||||||
Text(viewModel.messageFormatter.time() ?? "")
|
Text(viewModel.time ?? "")
|
||||||
.lineLimit(1)
|
.lineLimit(1)
|
||||||
.font(.footnote)
|
.font(.footnote)
|
||||||
.foregroundStyle(.secondary)
|
.foregroundStyle(.secondary)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if let text = viewModel.messageFormatter.info() {
|
if let text = viewModel.info {
|
||||||
Text(text)
|
Text(text)
|
||||||
.font(.caption.italic())
|
.font(.caption.italic())
|
||||||
.foregroundStyle(.primary)
|
.foregroundStyle(.primary)
|
||||||
|
|
|
@ -16,7 +16,7 @@ struct RoomView: View {
|
||||||
.frame(width: 16, height: 16)
|
.frame(width: 16, height: 16)
|
||||||
.scaledToFit()
|
.scaledToFit()
|
||||||
}
|
}
|
||||||
Text(viewModel.formatter.title ?? "")
|
Text(viewModel.title ?? "")
|
||||||
.lineLimit(1)
|
.lineLimit(1)
|
||||||
.font(.caption.weight(isUnread ? .bold : .medium))
|
.font(.caption.weight(isUnread ? .bold : .medium))
|
||||||
.foregroundStyle(.primary)
|
.foregroundStyle(.primary)
|
||||||
|
|
Loading…
Reference in New Issue