From 02a169205d78810c86de8e3f5077d2fe980fe91b Mon Sep 17 00:00:00 2001 From: Djorkaeff Alexandre Date: Tue, 23 Jan 2024 16:47:44 -0300 Subject: [PATCH] Improve ViewModel --- .../ViewModels/MessageViewModel.swift | 26 ++++++++++++++++++- .../ViewModels/RoomViewModel.swift | 6 ++++- .../Views/MessageView.swift | 12 ++++----- ios/RocketChat Watch App/Views/RoomView.swift | 2 +- 4 files changed, 37 insertions(+), 9 deletions(-) diff --git a/ios/RocketChat Watch App/ViewModels/MessageViewModel.swift b/ios/RocketChat Watch App/ViewModels/MessageViewModel.swift index 2ac1a06a1..2afaccf50 100644 --- a/ios/RocketChat Watch App/ViewModels/MessageViewModel.swift +++ b/ios/RocketChat Watch App/ViewModels/MessageViewModel.swift @@ -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() + } + } diff --git a/ios/RocketChat Watch App/ViewModels/RoomViewModel.swift b/ios/RocketChat Watch App/ViewModels/RoomViewModel.swift index 7de3c23aa..5d9f67b91 100644 --- a/ios/RocketChat Watch App/ViewModels/RoomViewModel.swift +++ b/ios/RocketChat Watch App/ViewModels/RoomViewModel.swift @@ -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" diff --git a/ios/RocketChat Watch App/Views/MessageView.swift b/ios/RocketChat Watch App/Views/MessageView.swift index a6420ffec..fcd4a866a 100644 --- a/ios/RocketChat Watch App/Views/MessageView.swift +++ b/ios/RocketChat Watch App/Views/MessageView.swift @@ -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) diff --git a/ios/RocketChat Watch App/Views/RoomView.swift b/ios/RocketChat Watch App/Views/RoomView.swift index 2a023794e..2dbb539ec 100644 --- a/ios/RocketChat Watch App/Views/RoomView.swift +++ b/ios/RocketChat Watch App/Views/RoomView.swift @@ -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)