-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[MBL-983] Already Reported Project Label (#1857)
* create ReportProjectCell to display swiftui view * UITableView cell will be added to the Project Page Table View * Used to display a new swiftui view for the report this project label and already reported label * add new cell below overviewSubpages and pass in project's flagging prop * rename label view * fix precondition failure: cyclic graph ReportProjectLabelView (SwiftUI View) re-renders when its text labels contain hyperlinks. Since we're rendering hyperlinks with the helper in Text+HTML.swift, this seems to cause a `precondition failure: cyclic graph` crash. This check prevents that by making sure the cell is only configured once on dequeue. * layout tableview if needed needs to be called because we're adding a SwiftUI view to the cell's contentView * conditionally render labels using `flagged` property * cleanup * pass project flagged property along with projectURL to viewcontroller so we know which label can be tappable * remove temp fix for cyclic graph crash * update tests * updateProjectPageViewControllerDataSourceTests tests * fix pamphletsubpage cell divider we don't need to hide it now that there is a new section below it. * fix view styling on iPad * formatting * support more than one hyperlink in a string * undo change in deprecated file * update hyperlink urls * set accessibility traits and cell's traitCollection * pop views on successful submissionupdate contraint margins
- Loading branch information
1 parent
70dc8b3
commit 8f40c4c
Showing
12 changed files
with
199 additions
and
65 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
61 changes: 61 additions & 0 deletions
61
Kickstarter-iOS/Features/ProjectPage/Views/Cells/ReportProjectCell.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
import Library | ||
import Prelude | ||
import SwiftUI | ||
import UIKit | ||
|
||
internal final class ReportProjectCell: UITableViewCell, ValueCell { | ||
internal func configureWith(value projectFlagged: Bool) { | ||
self.setupTableViewCellStyle(projectFlagged: projectFlagged) | ||
self.setupReportProjectLabelView(projectFlagged: projectFlagged) | ||
} | ||
|
||
internal override func layoutSubviews() { | ||
super.layoutSubviews() | ||
} | ||
|
||
internal override func bindStyles() { | ||
super.bindStyles() | ||
|
||
self.separatorInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: .greatestFiniteMagnitude) | ||
self.setNeedsLayout() | ||
} | ||
|
||
// MARK: - Private Methods | ||
|
||
private func setupTableViewCellStyle(projectFlagged: Bool) { | ||
let accessibilityTraits = projectFlagged | ||
? UIAccessibilityTraits.staticText | ||
: UIAccessibilityTraits.button | ||
|
||
_ = self | ||
|> baseTableViewCellStyle() | ||
|> ReportProjectCell.lens.accessibilityTraits .~ accessibilityTraits | ||
} | ||
|
||
private func setupReportProjectLabelView(projectFlagged: Bool) { | ||
if #available(iOS 15.0, *) { | ||
DispatchQueue.main.async { | ||
let hostingController = | ||
UIHostingController(rootView: ReportProjectLabelView(flagged: projectFlagged)) | ||
|
||
hostingController.view.translatesAutoresizingMaskIntoConstraints = false | ||
hostingController.view.backgroundColor = .clear | ||
|
||
self.contentView.addSubview(hostingController.view) | ||
|
||
let leftRightInset = self.traitCollection.isRegularRegular ? Styles.grid(16) : Styles.gridHalf(5) | ||
|
||
NSLayoutConstraint.activate([ | ||
hostingController.view.topAnchor | ||
.constraint(equalTo: self.contentView.topAnchor, constant: Styles.gridHalf(5)), | ||
hostingController.view.bottomAnchor | ||
.constraint(equalTo: self.contentView.bottomAnchor, constant: -Styles.gridHalf(5)), | ||
hostingController.view.leadingAnchor | ||
.constraint(equalTo: self.contentView.leadingAnchor, constant: leftRightInset), | ||
hostingController.view.trailingAnchor | ||
.constraint(equalTo: self.contentView.trailingAnchor, constant: -leftRightInset) | ||
]) | ||
} | ||
} | ||
} | ||
} |
67 changes: 67 additions & 0 deletions
67
Kickstarter-iOS/Features/ProjectPage/Views/ReportProjectLabelView.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
import Library | ||
import SwiftUI | ||
|
||
@available(iOS 15.0, *) | ||
struct ReportProjectLabelView: View { | ||
let flagged: Bool | ||
|
||
@SwiftUI.Environment(\.horizontalSizeClass) private var horizontalSizeClass | ||
|
||
var body: some View { | ||
if flagged { | ||
AlreadyReportedView() | ||
} else { | ||
HStack { | ||
Text(Strings.Report_this_project_to()) | ||
.font(Font(UIFont.ksr_body(size: 14))) | ||
.foregroundColor(Color(.ksr_support_700)) | ||
|
||
Spacer() | ||
|
||
Image("chevron-right") | ||
.resizable() | ||
.scaledToFit() | ||
.frame(width: 10, height: 10) | ||
} | ||
.padding(self.horizontalSizeClass == .regular ? 0 : 10) | ||
} | ||
} | ||
|
||
private struct AlreadyReportedView: View { | ||
var body: some View { | ||
HStack(alignment: .top, spacing: 10) { | ||
Image("info") | ||
.resizable() | ||
.scaledToFit() | ||
.frame(width: 20, height: 20) | ||
.foregroundColor(Color(.ksr_support_500)) | ||
|
||
Text( | ||
html: Strings.It_looks( | ||
our_rules: HelpType.prohibitedItems | ||
.url(withBaseUrl: AppEnvironment.current.apiService.serverConfig.webBaseUrl)? | ||
.absoluteString ?? "", | ||
community_guidelines: HelpType.community | ||
.url(withBaseUrl: AppEnvironment.current.apiService.serverConfig.webBaseUrl)? | ||
.absoluteString ?? "" | ||
), | ||
with: [ | ||
ReportProjectHyperLinkType.ourRules.stringLiteral(), | ||
ReportProjectHyperLinkType.communityGuidelines.stringLiteral() | ||
] | ||
) | ||
.font(Font(UIFont.ksr_caption1())) | ||
} | ||
.padding() | ||
.background(Color(.ksr_support_100)) | ||
.cornerRadius(15) | ||
} | ||
} | ||
} | ||
|
||
@available(iOS 15.0, *) | ||
struct ReportProjectView_Previews: PreviewProvider { | ||
static var previews: some View { | ||
ReportProjectLabelView(flagged: false) | ||
} | ||
} |
Oops, something went wrong.