@@ -376,7 +376,7 @@ class ProductDetailViewModel @Inject constructor(
376376 * Validates if the view model was started for the **add** flow AND there is an already valid product to modify.
377377 */
378378 val isProductUnderCreation: Boolean
379- get() = isAddNewProductFlow and isProductStoredAtSite.not ()
379+ get() = isAddNewProductFlow && isProductStoredAtSite.not ()
380380
381381 /* *
382382 * Returns boolean value of [navArgs.isTrashEnabled] to determine if the detail fragment should enable
@@ -1017,11 +1017,11 @@ class ProductDetailViewModel @Inject constructor(
10171017 * 3. is a Draft
10181018 */
10191019 fun saveAsDraftIfNewVariableProduct () = launch {
1020- viewState.productDraft
1020+ viewState.productAggregateDraft
10211021 ?.takeIf {
1022- isProductStoredAtSite.not () and
1023- it.productType.isVariableProduct() and
1024- (it.status == DRAFT )
1022+ isProductStoredAtSite.not () &&
1023+ it.product. productType.isVariableProduct() &&
1024+ (it.product. status == DRAFT )
10251025 }
10261026 ?.takeIf { addProduct(it).first }
10271027 ?.let {
@@ -1035,31 +1035,31 @@ class ProductDetailViewModel @Inject constructor(
10351035 stat = AnalyticsEvent .PRODUCT_DETAIL_UPDATE_BUTTON_TAPPED ,
10361036 properties = mapOf (AnalyticsTracker .KEY_IS_AI_CONTENT to navArgs.isAIContent)
10371037 )
1038- viewState.productDraft ?.let {
1039- val product = if (isPublish) it.copy(status = ProductStatus .PUBLISH ) else it
1038+ viewState.productAggregateDraft ?.let {
1039+ val product = if (isPublish) it.copy(product = it.product.copy( status = ProductStatus .PUBLISH ) ) else it
10401040 viewState = viewState.copy(isProgressDialogShown = true )
10411041 launch { updateProduct(isPublish, product) }
10421042 }
10431043 }
10441044
10451045 private fun startPublishProduct (productStatus : ProductStatus , exitWhenDone : Boolean = false) {
1046- viewState.productDraft ?.let {
1047- val product = it.copy(status = productStatus)
1048- trackPublishing(product)
1046+ viewState.productAggregateDraft ?.let {
1047+ val productAggregate = it.copy( product = it.product. copy(status = productStatus) )
1048+ trackPublishing(productAggregate. product)
10491049
10501050 viewState = viewState.copy(isProgressDialogShown = true )
10511051
10521052 launch {
1053- val (isSuccess, newProductId) = addProduct(product )
1053+ val (isSuccess, newProductId) = addProduct(productAggregate )
10541054 viewState = viewState.copy(isProgressDialogShown = false )
10551055 val snackbarMessage = pickAddProductRequestSnackbarText(isSuccess, productStatus)
10561056 triggerEvent(ShowSnackbar (snackbarMessage))
10571057 if (isSuccess) {
10581058 if (isPublishingFirstProduct()) {
10591059 triggerEvent(
10601060 ProductNavigationTarget .ViewFirstProductCelebration (
1061- productName = product.name,
1062- permalink = product.permalink
1061+ productName = productAggregate. product.name,
1062+ permalink = productAggregate. product.permalink
10631063 )
10641064 )
10651065 }
@@ -1070,13 +1070,13 @@ class ProductDetailViewModel @Inject constructor(
10701070 )
10711071 }
10721072 tracker.track(AnalyticsEvent .ADD_PRODUCT_SUCCESS )
1073- if (product .remoteId != newProductId) {
1073+ if (productAggregate .remoteId != newProductId) {
10741074 // Assign the current uploads to the new product id
10751075 mediaFileUploadHandler.assignUploadsToCreatedProduct(newProductId)
10761076 }
10771077 if (exitWhenDone) {
10781078 triggerEvent(ProductNavigationTarget .ExitProduct )
1079- } else if (product .remoteId != newProductId) {
1079+ } else if (productAggregate .remoteId != newProductId) {
10801080 // Restart observing image uploads using the new product id
10811081 observeImageUploadEvents()
10821082 }
@@ -1954,19 +1954,21 @@ class ProductDetailViewModel @Inject constructor(
19541954 * Updates the product to the backend only if network is connected.
19551955 * Otherwise, an offline snackbar is displayed.
19561956 */
1957- private suspend fun updateProduct (isPublish : Boolean , product : Product ) {
1957+ private suspend fun updateProduct (isPublish : Boolean , productAggregate : ProductAggregate ) {
19581958 if (! checkConnection()) {
19591959 viewState = viewState.copy(isProgressDialogShown = false )
19601960 return
19611961 }
1962- val result = productRepository.updateProduct(product.copy(password = viewState.draftPassword))
1962+ val result = productRepository.updateProduct(
1963+ productAggregate.copy(product = productAggregate.product.copy(password = viewState.draftPassword))
1964+ )
19631965 if (result.first) {
19641966 val successMsg = pickProductUpdateSuccessText(isPublish)
19651967 val isPasswordChanged = storedProductAggregate.value?.product?.password != viewState.draftPassword
19661968 if (isPasswordChanged && determineProductPasswordApi() == ProductPasswordApi .WPCOM ) {
19671969 // Update the product password using WordPress.com API
19681970 val password = viewState.productDraft?.password
1969- if (productRepository.updateProductPassword(product .remoteId, password)) {
1971+ if (productRepository.updateProductPassword(productAggregate .remoteId, password)) {
19701972 storedProductAggregate.update { it?.copy(product = it.product.copy(password = password)) }
19711973 triggerEvent(ShowSnackbar (successMsg))
19721974 } else {
@@ -1982,7 +1984,7 @@ class ProductDetailViewModel @Inject constructor(
19821984 productDraft = null
19831985 )
19841986 triggerEvent(ProductUpdated )
1985- loadRemoteProduct(product .remoteId)
1987+ loadRemoteProduct(productAggregate .remoteId)
19861988 } else {
19871989 result.second?.let {
19881990 if (it.canDisplayMessage) {
@@ -2001,10 +2003,10 @@ class ProductDetailViewModel @Inject constructor(
20012003 * Otherwise, an offline snackbar is displayed. Returns true only
20022004 * if product successfully added
20032005 */
2004- private suspend fun addProduct (product : Product ): Pair <Boolean , Long > {
2006+ private suspend fun addProduct (productAggregate : ProductAggregate ): Pair <Boolean , Long > {
20052007 if (! checkConnection()) return Pair (false , 0L )
20062008
2007- val result = productRepository.addProduct(product )
2009+ val result = productRepository.addProduct(productAggregate )
20082010 val (isSuccess, newProductRemoteId) = result
20092011 if (isSuccess) {
20102012 checkLinkedProductPromo()
@@ -2512,7 +2514,7 @@ class ProductDetailViewModel @Inject constructor(
25122514 fun onDuplicateProduct () {
25132515 launch {
25142516 tracker.track(AnalyticsEvent .PRODUCT_DETAIL_DUPLICATE_BUTTON_TAPPED )
2515- viewState.productDraft ?.let { product ->
2517+ viewState.productAggregateDraft ?.let { product ->
25162518
25172519 triggerEvent(ShowDuplicateProductInProgress )
25182520 val result = duplicateProduct(product)
0 commit comments