Skip to content

Commit

Permalink
Use @StateObject for ReportProjectFormViewModel
Browse files Browse the repository at this point in the history
  • Loading branch information
amy-at-kickstarter committed Nov 2, 2023
1 parent 8b83227 commit 459edfa
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 37 deletions.
24 changes: 9 additions & 15 deletions Kickstarter-iOS/Features/ReportProject/ReportProjectFormView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,26 +9,16 @@ enum ReportFormFocusField {
@available(iOS 15.0, *)
struct ReportProjectFormView: View {
@Binding var popToRoot: Bool
let projectID: String
let projectURL: String
let projectFlaggingKind: GraphAPI.FlaggingKind

@SwiftUI.Environment(\.dismiss) private var dismiss
@ObservedObject private var viewModel: ReportProjectFormViewModel
@StateObject private var viewModel = ReportProjectFormViewModel()

@State private var showLoading: Bool = false
@FocusState private var focusField: ReportFormFocusField?

init(projectID: String,
projectURL: String,
projectFlaggingKind: GraphAPI.FlaggingKind,
popToRoot: Binding<Bool>) {
self._popToRoot = popToRoot

self.viewModel = ReportProjectFormViewModel(
projectID: projectID,
projectURL: projectURL,
projectFlaggingKind: projectFlaggingKind
)
}

var body: some View {
GeometryReader { proxy in
Form {
Expand All @@ -48,7 +38,7 @@ struct ReportProjectFormView: View {
}

SwiftUI.Section(Strings.Project_url()) {
Text(viewModel.projectURL)
Text(projectURL)
.font(Font(UIFont.ksr_body()))
.foregroundColor(Color(.ksr_support_400))
.disabled(true)
Expand Down Expand Up @@ -78,6 +68,10 @@ struct ReportProjectFormView: View {
}
.onAppear {
focusField = .details

viewModel.projectID = projectID
viewModel.projectFlaggingKind = projectFlaggingKind

viewModel.inputs.viewDidLoad()
}
.onReceive(viewModel.$bannerMessage) { newValue in
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,10 +130,10 @@ struct RowView: View {
NavigationLink(
destination: {
ReportProjectFormView(
popToRoot: $popToRoot,
projectID: self.projectID,
projectURL: self.projectUrl,
projectFlaggingKind: item.flaggingKind ?? GraphAPI.FlaggingKind.guidelinesViolation,
popToRoot: $popToRoot
projectFlaggingKind: item.flaggingKind ?? GraphAPI.FlaggingKind.guidelinesViolation
)
},
label: { BaseRowView(item: item) }
Expand Down
17 changes: 5 additions & 12 deletions Library/ViewModels/ReportProjectFormViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -28,17 +28,10 @@ public final class ReportProjectFormViewModel: ReportProjectFormViewModelType,

private var cancellables = Set<AnyCancellable>()

public let projectID: String
public let projectURL: String
public let projectFlaggingKind: GraphAPI.FlaggingKind

public init(projectID: String,
projectURL: String,
projectFlaggingKind: GraphAPI.FlaggingKind) {
self.projectID = projectID
self.projectURL = projectURL
self.projectFlaggingKind = projectFlaggingKind
public var projectID: String?
public var projectFlaggingKind: GraphAPI.FlaggingKind?

public init() {
/// Only enable the save button if the user has entered detail text
self.$detailsText
.map { !$0.isEmpty }
Expand Down Expand Up @@ -92,8 +85,8 @@ public final class ReportProjectFormViewModel: ReportProjectFormViewModelType,

private func createFlaggingInput() -> AnyPublisher<EmptyResponseEnvelope, ErrorEnvelope> {
let input = CreateFlaggingInput(
contentId: projectID,
kind: projectFlaggingKind,
contentId: projectID!,
kind: projectFlaggingKind!,
details: detailsText,
clientMutationId: nil
)
Expand Down
14 changes: 6 additions & 8 deletions Library/ViewModels/ReportProjectFormViewModelTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,9 @@ final class ReportProjectFormViewModelTests: TestCase {
}

func testEmailText_AfterFetchingUsersEmail() {
let vm = ReportProjectFormViewModel(
projectID: "123", projectURL: "https://www.kickstarter.com/projects/foo/bar",
projectFlaggingKind: GraphAPI.FlaggingKind.commentDoxxing
)
let vm = ReportProjectFormViewModel()
vm.projectID = "123"
vm.projectFlaggingKind = GraphAPI.FlaggingKind.commentDoxxing

withEnvironment(apiService: self.userEmailSuccessMockService) {
let userEmail = CombineTestObserver<String?, Never>()
Expand All @@ -43,10 +42,9 @@ final class ReportProjectFormViewModelTests: TestCase {
}

func test_submitIsDisabled_untilDetailTextIsNotEmpty() {
let vm = ReportProjectFormViewModel(
projectID: "123", projectURL: "https://www.kickstarter.com/projects/foo/bar",
projectFlaggingKind: GraphAPI.FlaggingKind.commentDoxxing
)
let vm = ReportProjectFormViewModel()
vm.projectID = "123"
vm.projectFlaggingKind = GraphAPI.FlaggingKind.commentDoxxing

let saveButtonEnabled = CombineTestObserver<Bool, Never>()
saveButtonEnabled.observe(vm.$saveButtonEnabled)
Expand Down

0 comments on commit 459edfa

Please sign in to comment.