Skip to content

Commit

Permalink
[MBL-982] Support Project Fragment's Flagging Property (#1855)
Browse files Browse the repository at this point in the history
* update GraphQL project fragment and adapters so that we can parse out the flagging field

* add viewmodel outputs so that the projectpageviewcontroller knows if a project has been flagged by the user previously

* update tests

* format
  • Loading branch information
scottkicks committed Sep 20, 2023
1 parent a1701ad commit e0657bf
Show file tree
Hide file tree
Showing 13 changed files with 585 additions and 56 deletions.
Expand Up @@ -530,6 +530,12 @@ public final class ProjectPageViewController: UIViewController, MessageBannerVie
.observeValues { [weak self] in
self?.tableView.reloadData()
}

self.viewModel.outputs.projectFlagged
.observeForUI()
.observeValues { _ in
// TODO: Use this flag to hide or show the Report this project label [MBL-983](https://kickstarter.atlassian.net/browse/MBL-983)
}
}

private func prepareToPlayAudioVideoURL(audioVideoURL: URL,
Expand Down
475 changes: 475 additions & 0 deletions KsApi/GraphAPI.swift

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions KsApi/models/Project.swift
Expand Up @@ -12,6 +12,7 @@ public struct Project {
public var memberData: MemberData
public var dates: Dates
public var displayPrelaunch: Bool?
public var flagging: Bool?
public var id: Int
public var location: Location
public var name: String
Expand Down Expand Up @@ -272,6 +273,7 @@ extension Project: Decodable {
case category
case creator
case displayPrelaunch = "display_prelaunch"
case flagging
case id
case location
case name
Expand All @@ -297,6 +299,7 @@ extension Project: Decodable {
self.dates = try Project.Dates(from: decoder)
self.displayPrelaunch = try values.decodeIfPresent(Bool.self, forKey: .displayPrelaunch)
self.extendedProjectProperties = nil
self.flagging = try values.decodeIfPresent(Bool.self, forKey: .flagging) ?? false
self.id = try values.decode(Int.self, forKey: .id)
self.location = (try? values.decodeIfPresent(Location.self, forKey: .location)) ?? Location.none
self.name = try values.decode(String.self, forKey: .name)
Expand Down
Expand Up @@ -61,6 +61,7 @@ extension Project {
let fragment = data.project?.fragments.projectFragment,
let project = Project.project(
from: fragment,
flagging: data.project?.flagging != nil,
rewards: [noRewardReward(from: fragment)],
addOns: nil,
backing: nil,
Expand All @@ -83,6 +84,7 @@ extension Project {
let fragment = data.project?.fragments.projectFragment,
let project = Project.project(
from: fragment,
flagging: data.project?.flagging != nil,
rewards: [noRewardReward(from: fragment)],
addOns: nil,
backing: nil,
Expand Down
Expand Up @@ -129,6 +129,9 @@ final class Project_FetchProjectQueryDataTests: XCTestCase {
// Project Send Capi Events
XCTAssertEqual(project.sendMetaCapiEvents, true)

// Project Flagging
XCTAssertEqual(project.flagging, false)

/// Project User
XCTAssertEqual(
project.creator.avatar.large,
Expand Down
65 changes: 34 additions & 31 deletions KsApi/models/graphql/adapters/Project+ProjectFragment.swift
Expand Up @@ -10,6 +10,7 @@ extension Project {
*/
static func project(
from projectFragment: GraphAPI.ProjectFragment,
flagging: Bool? = nil,
rewards: [Reward] = [],
addOns: [Reward]? = nil,
backing: Backing? = nil,
Expand Down Expand Up @@ -66,37 +67,39 @@ extension Project {

let extendedProjectProperties = extendedProject(from: projectFragment)

return Project(
availableCardTypes: availableCardTypes,
blurb: projectFragment.description,
category: category,
country: country,
creator: creator,
extendedProjectProperties: extendedProjectProperties,
memberData: memberData,
dates: dates,
displayPrelaunch: displayPrelaunch,
id: projectFragment.pid,
location: location,
name: projectFragment.name,
personalization: projectPersonalization(
isStarred: projectFragment.isWatched,
backing: backing,
friends: []
),
photo: photo,
prelaunchActivated: projectFragment.prelaunchActivated,
rewardData: RewardData(addOns: addOns, rewards: rewards),
sendMetaCapiEvents: projectFragment.sendMetaCapiEvents,
slug: generatedSlug ?? projectFragment.slug,
staffPick: projectFragment.isProjectWeLove,
state: state,
stats: projectStats(from: projectFragment, currentUserChosenCurrency: currentUserChosenCurrency),
tags: discoverTags,
urls: urls,
video: projectVideo(from: projectFragment),
watchesCount: projectFragment.watchesCount
)
return
Project(
availableCardTypes: availableCardTypes,
blurb: projectFragment.description,
category: category,
country: country,
creator: creator,
extendedProjectProperties: extendedProjectProperties,
memberData: memberData,
dates: dates,
displayPrelaunch: displayPrelaunch,
flagging: flagging,
id: projectFragment.pid,
location: location,
name: projectFragment.name,
personalization: projectPersonalization(
isStarred: projectFragment.isWatched,
backing: backing,
friends: []
),
photo: photo,
prelaunchActivated: projectFragment.prelaunchActivated,
rewardData: RewardData(addOns: addOns, rewards: rewards),
sendMetaCapiEvents: projectFragment.sendMetaCapiEvents,
slug: generatedSlug ?? projectFragment.slug,
staffPick: projectFragment.isProjectWeLove,
state: state,
stats: projectStats(from: projectFragment, currentUserChosenCurrency: currentUserChosenCurrency),
tags: discoverTags,
urls: urls,
video: projectVideo(from: projectFragment),
watchesCount: projectFragment.watchesCount
)
}
}

Expand Down
Expand Up @@ -13,6 +13,7 @@ final class Project_ProjectFragmentTests: XCTestCase {

let project = Project.project(
from: fragment,
flagging: false,
currentUserChosenCurrency: nil
)

Expand Down Expand Up @@ -60,6 +61,7 @@ final class Project_ProjectFragmentTests: XCTestCase {
XCTAssertTrue(project.staffPick)
XCTAssertTrue(project.prelaunchActivated!)
XCTAssertFalse(project.displayPrelaunch!)
XCTAssertEqual(project.flagging, false)
XCTAssertNil(project.personalization.backing)
XCTAssertNil(project.rewardData.addOns)
XCTAssertEqual(project.sendMetaCapiEvents, false)
Expand Down

0 comments on commit e0657bf

Please sign in to comment.