diff --git a/DuckDuckGo/Feedback and Breakage/View/Feedback.storyboard b/DuckDuckGo/Feedback and Breakage/View/Feedback.storyboard index 63e9a49efe2..80909d743d3 100644 --- a/DuckDuckGo/Feedback and Breakage/View/Feedback.storyboard +++ b/DuckDuckGo/Feedback and Breakage/View/Feedback.storyboard @@ -284,18 +284,73 @@ Gw + + + + + @@ -308,6 +363,7 @@ Gw + diff --git a/DuckDuckGo/Feedback and Breakage/View/FeedbackViewController.swift b/DuckDuckGo/Feedback and Breakage/View/FeedbackViewController.swift index a4860104f1f..a93549b6d3c 100644 --- a/DuckDuckGo/Feedback and Breakage/View/FeedbackViewController.swift +++ b/DuckDuckGo/Feedback and Breakage/View/FeedbackViewController.swift @@ -21,6 +21,13 @@ import Combine final class FeedbackViewController: NSViewController { + enum Constants { + static let defaultContentHeight: CGFloat = 160 + static let feedbackContentHeight: CGFloat = 338 + static let websiteBreakageContentHeight = CGFloat = 260 + + } + enum FormOption { case websiteBreakage case feedback(feedbackCategory: Feedback.Category) @@ -52,6 +59,7 @@ final class FeedbackViewController: NSViewController { @IBOutlet weak var submitButton: NSButton! + @IBOutlet weak var thankYouView: NSView! private var cancellables = Set() var currentTab: Tab? @@ -120,6 +128,10 @@ final class FeedbackViewController: NSViewController { case .feedback: sendFeedback() } + showThankYou() + } + + @IBAction func okButtonAction(_ sender: Any) { guard let window = view.window, let sheetParent = window.sheetParent else { assertionFailure("No sheet parent") @@ -163,7 +175,7 @@ final class FeedbackViewController: NSViewController { guard let selectedFormOption = selectedFormOption else { browserFeedbackView.isHidden = true websiteBreakageView.isHidden = true - contentViewHeightContraint.constant = 160 + setContentViewHeight(Constants.defaultContentHeight, animated: false) pickOptionMenuItem.isEnabled = true return } @@ -172,20 +184,28 @@ final class FeedbackViewController: NSViewController { switch selectedFormOption { case .feedback: browserFeedbackView.isHidden = false - contentHeight = 338 + contentHeight = Constants.feedbackContentHeight textField.makeMeFirstResponder() case .websiteBreakage: browserFeedbackView.isHidden = true - contentHeight = 260 + contentHeight = Constants.websiteBreakageContentHeight if selectedWebsiteBreakageCategory == nil { pickIssueMenuItem.isEnabled = true } } websiteBreakageView.isHidden = !browserFeedbackView.isHidden - NSAnimationContext.runAnimationGroup { [weak self] context in - context.duration = 1/3 - context.timingFunction = CAMediaTimingFunction(name: .easeInEaseOut) - self?.contentViewHeightContraint.animator().constant = contentHeight + setContentViewHeight(contentHeight, animated: true) + } + + private func setContentViewHeight(_ height: CGFloat, animated: Bool) { + if animated { + NSAnimationContext.runAnimationGroup { [weak self] context in + context.duration = 1/3 + context.timingFunction = CAMediaTimingFunction(name: .easeInEaseOut) + self?.contentViewHeightContraint.animator().constant = height + } + } else { + contentViewHeightContraint.constant = height } } @@ -253,6 +273,12 @@ final class FeedbackViewController: NSViewController { websiteBreakageSender.sendWebsiteBreakage(websiteBreakage) } } + + private func showThankYou() { + setContentViewHeight(Constants.defaultContentHeight, animated: true) + contentView.isHidden = true + thankYouView.isHidden = false + } } fileprivate extension WebsiteBreakage.Category {