Skip to content

Commit

Permalink
Add watch project (#1522)
Browse files Browse the repository at this point in the history
  • Loading branch information
hadia committed Jan 24, 2022
1 parent c162e71 commit f0569f5
Show file tree
Hide file tree
Showing 7 changed files with 51 additions and 2 deletions.
9 changes: 9 additions & 0 deletions app/src/main/graphql/project.graphql
Expand Up @@ -85,6 +85,15 @@ mutation CreateComment($body: String!, $commentableId: ID!, $parentId: ID, $clie
}
}

mutation watchProject($id: ID!) {
watchProject(input: {id: $id}) {
clientMutationId
project {
...fullProject
}
}
}

query GetProjectComments($slug: String!, $limit: Int!, $cursor: String) {
project(slug: $slug) {
id
Expand Down
Expand Up @@ -76,6 +76,10 @@ open class MockApolloClient : ApolloClientType {
return Observable.just(listOf(reward, reward))
}

override fun watchProject(project: Project): Observable<Project> {
return Observable.just(project.toBuilder().isStarred(true).build())
}

override fun cancelBacking(backing: Backing, note: String): Observable<Any> {
return Observable.just(true)
}
Expand Down
Expand Up @@ -68,6 +68,8 @@ interface ApolloClientType {

fun getProjectAddOns(slug: String, locationId: Location): Observable<List<Reward>>

fun watchProject(project: Project): Observable<Project>

fun getStoredCards(): Observable<List<StoredCard>>

fun savePaymentMethod(savePaymentMethodData: SavePaymentMethodData): Observable<StoredCard>
Expand Down
30 changes: 30 additions & 0 deletions app/src/main/java/com/kickstarter/services/KSApolloClient.kt
Expand Up @@ -18,6 +18,7 @@ import UpdateUserEmailMutation
import UpdateUserPasswordMutation
import UserPaymentsQuery
import UserPrivacyQuery
import WatchProjectMutation
import com.apollographql.apollo.ApolloCall
import com.apollographql.apollo.ApolloClient
import com.apollographql.apollo.api.Response
Expand Down Expand Up @@ -670,6 +671,35 @@ class KSApolloClient(val service: ApolloClient) : ApolloClientType {
}
}

override fun watchProject(project: Project): Observable<Project> {
return Observable.defer {
val ps = PublishSubject.create<Project>()
this.service.mutate(
WatchProjectMutation.builder().id(encodeRelayId(project)).build()
)
.enqueue(object : ApolloCall.Callback<WatchProjectMutation.Data>() {
override fun onFailure(exception: ApolloException) {
ps.onError(exception)
}

override fun onResponse(response: Response<WatchProjectMutation.Data>) {
if (response.hasErrors()) {
ps.onError(java.lang.Exception(response.errors?.first()?.message))
}
/* make a copy of what you posted. just in case
* we want to update the list without doing
* a full refresh.
*/
ps.onNext(
projectTransformer(response.data?.watchProject()?.project()?.fragments()?.fullProject())
)
ps.onCompleted()
}
})
return@defer ps
}
}

private fun getAddOnsFromProject(addOnsGr: GetProjectAddOnsQuery.AddOns): List<Reward> {
return addOnsGr.nodes()?.map { node ->
val shippingRulesGr = node.shippingRulesExpanded()?.nodes()?.map { it.fragments().shippingRule() } ?: emptyList()
Expand Down
Expand Up @@ -1210,7 +1210,7 @@ interface ProjectViewModel {
}

private fun saveProject(project: Project): Observable<Project> {
return this.client.saveProject(project)
return this.apolloClient.watchProject(project)
.compose(neverError())
}

Expand Down
Expand Up @@ -1145,7 +1145,7 @@ interface ProjectPageViewModel {
}

private fun saveProject(project: Project): Observable<Project> {
return this.client.saveProject(project)
return this.apolloClient.watchProject(project)
.compose(neverError())
}

Expand Down
Expand Up @@ -524,6 +524,10 @@ class ProjectPageViewModelTest : KSRobolectricTestCase() {
this.savedTest.assertValues(false, true)
this.heartDrawableId.assertValues(R.drawable.icon__heart_outline, R.drawable.icon__heart)
this.showSavedPromptTest.assertValueCount(0)
this.projectData.assertValues(
ProjectDataFactory.project(project),
ProjectDataFactory.project(project.toBuilder().isStarred(true).build())
)
}

@Test
Expand Down

0 comments on commit f0569f5

Please sign in to comment.