From 1ab5963f79046151d75f036b448b6427d67e19f8 Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Mon, 15 Aug 2022 21:34:55 +0100 Subject: [PATCH] Add MakeReportDrawer functor --- Package.swift | 2 + .../ReportingFeature/MakeReportDrawer.swift | 86 +++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 Sources/ReportingFeature/MakeReportDrawer.swift diff --git a/Package.swift b/Package.swift index a59f5922..bf5cff5a 100644 --- a/Package.swift +++ b/Package.swift @@ -749,6 +749,8 @@ let package = Package( .target( name: "ReportingFeature", dependencies: [ + .target(name: "DrawerFeature"), + .target(name: "Shared"), .product(name: "SwiftCSV", package: "SwiftCSV"), .product(name: "XCTestDynamicOverlay", package: "xctest-dynamic-overlay"), ], diff --git a/Sources/ReportingFeature/MakeReportDrawer.swift b/Sources/ReportingFeature/MakeReportDrawer.swift new file mode 100644 index 00000000..b8b4aa39 --- /dev/null +++ b/Sources/ReportingFeature/MakeReportDrawer.swift @@ -0,0 +1,86 @@ +import DrawerFeature +import Shared +import UIKit +import XCTestDynamicOverlay + +public struct MakeReportDrawer { + public struct Config { + public init( + onReport: @escaping () -> Void = {}, + onCancel: @escaping () -> Void = {} + ) { + self.onReport = onReport + self.onCancel = onCancel + } + + public var onReport: () -> Void + public var onCancel: () -> Void + } + + public var run: (Config) -> UIViewController + + public func callAsFunction(_ config: Config) -> UIViewController { + run(config) + } +} + +extension MakeReportDrawer { + public static let live = MakeReportDrawer { config in + let cancelButton = CapsuleButton() + cancelButton.setStyle(.seeThrough) + cancelButton.setTitle(Localized.Chat.Report.cancel, for: .normal) + + let reportButton = CapsuleButton() + reportButton.setStyle(.red) + reportButton.setTitle(Localized.Chat.Report.action, for: .normal) + + let drawer = DrawerController(with: [ + DrawerImage( + image: Asset.drawerNegative.image + ), + DrawerText( + font: Fonts.Mulish.semiBold.font(size: 18.0), + text: Localized.Chat.Report.title, + color: Asset.neutralActive.color + ), + DrawerText( + font: Fonts.Mulish.semiBold.font(size: 14.0), + text: Localized.Chat.Report.subtitle, + color: Asset.neutralWeak.color, + lineHeightMultiple: 1.35, + spacingAfter: 25 + ), + DrawerStack( + axis: .vertical, + spacing: 20.0, + views: [reportButton, cancelButton] + ) + ]) + + reportButton.publisher(for: .touchUpInside) + .receive(on: DispatchQueue.main) + .sink { [unowned drawer] in + drawer.dismiss(animated: true) { + config.onReport() + } + } + .store(in: &drawer.cancellables) + + cancelButton.publisher(for: .touchUpInside) + .receive(on: DispatchQueue.main) + .sink { [unowned drawer] in + drawer.dismiss(animated: true) { + config.onCancel() + } + } + .store(in: &drawer.cancellables) + + return drawer + } +} + +extension MakeReportDrawer { + public static let unimplemented = MakeReportDrawer( + run: XCTUnimplemented("\(Self.self)") + ) +} -- GitLab