From d80988e6e35b5bf8abf9a9aeaa53f421073d714a Mon Sep 17 00:00:00 2001 From: Justin Mazzocchi <2831158+jzzocc@users.noreply.github.com> Date: Mon, 5 Oct 2020 17:33:58 -0700 Subject: [PATCH] Refactoring --- DB/Sources/DB/Entities/CollectionItem.swift | 4 +++ .../ViewModels/CollectionItemsViewModel.swift | 5 +--- .../Sources/ViewModels/StatusViewModel.swift | 5 +--- Views/Status/StatusListCell.swift | 2 +- Views/Status/StatusView.swift | 27 ++++++++++--------- 5 files changed, 21 insertions(+), 22 deletions(-) diff --git a/DB/Sources/DB/Entities/CollectionItem.swift b/DB/Sources/DB/Entities/CollectionItem.swift index 4109fd7..59219f7 100644 --- a/DB/Sources/DB/Entities/CollectionItem.swift +++ b/DB/Sources/DB/Entities/CollectionItem.swift @@ -26,3 +26,7 @@ public extension CollectionItem { } } } + +public extension CollectionItem.StatusConfiguration { + static let `default` = Self() +} diff --git a/ViewModels/Sources/ViewModels/CollectionItemsViewModel.swift b/ViewModels/Sources/ViewModels/CollectionItemsViewModel.swift index 502051a..357b019 100644 --- a/ViewModels/Sources/ViewModels/CollectionItemsViewModel.swift +++ b/ViewModels/Sources/ViewModels/CollectionItemsViewModel.swift @@ -103,10 +103,7 @@ extension CollectionItemsViewModel: CollectionViewModel { cache(viewModel: viewModel, forItem: item) } - viewModel.isContextParent = configuration.isContextParent - viewModel.isPinned = configuration.isPinned - viewModel.isReplyInContext = configuration.isReplyInContext - viewModel.hasReplyFollowing = configuration.hasReplyFollowing + viewModel.configuration = configuration return viewModel case let .loadMore(loadMore): diff --git a/ViewModels/Sources/ViewModels/StatusViewModel.swift b/ViewModels/Sources/ViewModels/StatusViewModel.swift index 677abd0..f429645 100644 --- a/ViewModels/Sources/ViewModels/StatusViewModel.swift +++ b/ViewModels/Sources/ViewModels/StatusViewModel.swift @@ -17,10 +17,7 @@ public struct StatusViewModel: CollectionItemViewModel { public let attachmentViewModels: [AttachmentViewModel] public let pollOptionTitles: [String] public let pollEmoji: [Emoji] - public var isPinned = false - public var isContextParent = false - public var isReplyInContext = false - public var hasReplyFollowing = false + public var configuration = CollectionItem.StatusConfiguration.default public var sensitiveContentToggled = false public let events: AnyPublisher, Never> diff --git a/Views/Status/StatusListCell.swift b/Views/Status/StatusListCell.swift index a180bb4..01382a8 100644 --- a/Views/Status/StatusListCell.swift +++ b/Views/Status/StatusListCell.swift @@ -15,7 +15,7 @@ class StatusListCell: UITableViewCell { override func layoutSubviews() { super.layoutSubviews() - if viewModel?.hasReplyFollowing ?? false { + if viewModel?.configuration.hasReplyFollowing ?? false { separatorInset.right = .greatestFiniteMagnitude } else { separatorInset.right = UIDevice.current.userInterfaceIdiom == .phone ? 0 : layoutMargins.right diff --git a/Views/Status/StatusView.swift b/Views/Status/StatusView.swift index b7266af..aa4d6cf 100644 --- a/Views/Status/StatusView.swift +++ b/Views/Status/StatusView.swift @@ -188,20 +188,21 @@ private extension StatusView { let mutableContent = NSMutableAttributedString(attributedString: viewModel.content) let mutableDisplayName = NSMutableAttributedString(string: viewModel.displayName) let mutableSpoilerText = NSMutableAttributedString(string: viewModel.spoilerText) - let contentFont = UIFont.preferredFont(forTextStyle: viewModel.isContextParent ? .title3 : .callout) + let contentTextStyle: UIFont.TextStyle = viewModel.configuration.isContextParent ? .title3 : .callout + let contentFont = UIFont.preferredFont(forTextStyle: contentTextStyle) - contentTextView.shouldFallthrough = !viewModel.isContextParent - avatarReplyContextView.isHidden = viewModel.isContextParent - nameDateView.isHidden = viewModel.isContextParent - contextParentAvatarNameView.isHidden = !viewModel.isContextParent - actionButtonsView.isHidden = viewModel.isContextParent - contextParentItems.isHidden = !viewModel.isContextParent + contentTextView.shouldFallthrough = !viewModel.configuration.isContextParent + avatarReplyContextView.isHidden = viewModel.configuration.isContextParent + nameDateView.isHidden = viewModel.configuration.isContextParent + contextParentAvatarNameView.isHidden = !viewModel.configuration.isContextParent + actionButtonsView.isHidden = viewModel.configuration.isContextParent + contextParentItems.isHidden = !viewModel.configuration.isContextParent let avatarImageView: UIImageView let displayNameLabel: UILabel let accountLabel: UILabel - if viewModel.isContextParent { + if viewModel.configuration.isContextParent { avatarImageView = contextParentAvatarImageView displayNameLabel = contextParentDisplayNameLabel accountLabel = contextParentAccountLabel @@ -283,7 +284,7 @@ private extension StatusView { withConfiguration: UIImage.SymbolConfiguration(scale: .small)) metaLabel.isHidden = false metaIcon.isHidden = false - } else if viewModel.isPinned { + } else if viewModel.configuration.isPinned { metaLabel.text = NSLocalizedString("status.pinned-post", comment: "") metaIcon.image = UIImage( systemName: "pin", @@ -304,9 +305,9 @@ private extension StatusView { sensitiveContentView.isHidden = !viewModel.shouldDisplaySensitiveContent - inReplyToView.isHidden = !viewModel.isReplyInContext + inReplyToView.isHidden = !viewModel.configuration.isReplyInContext - hasReplyFollowingView.isHidden = !viewModel.hasReplyFollowing + hasReplyFollowingView.isHidden = !viewModel.configuration.hasReplyFollowing } // swiftlint:enable function_body_length @@ -314,7 +315,7 @@ private extension StatusView { let reblogColor: UIColor = reblogged ? .systemGreen : .secondaryLabel let reblogButton: UIButton - if statusConfiguration.viewModel.isContextParent { + if statusConfiguration.viewModel.configuration.isContextParent { reblogButton = contextParentReblogButton } else { reblogButton = self.reblogButton @@ -329,7 +330,7 @@ private extension StatusView { let favoriteButton: UIButton let scale: UIImage.SymbolScale - if statusConfiguration.viewModel.isContextParent { + if statusConfiguration.viewModel.configuration.isContextParent { favoriteButton = contextParentFavoriteButton scale = .medium } else {