Skip to content

Commit 277206e

Browse files
committed
refactor(perf): Update cart and order only if the address key has changed
1 parent 046665c commit 277206e

3 files changed

Lines changed: 37 additions & 22 deletions

File tree

src/composables/address.js

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,11 @@ export const useAddress = defineStore('useAddressStore', () => {
5252
let data = await resp.json();
5353

5454
if (['addSuccess', 'editSuccess'].includes(data['action'])) {
55-
state[`${type}Data`] = data['values'];
55+
if (billingIsShipping) {
56+
state.billingData = state.shippingData = data['values'];
57+
} else {
58+
state[`${type}Data`] = data['values'];
59+
}
5660
await updateAddresses(type, billingIsShipping);
5761
}
5862
state[`${type}IsUpdating`] = undefined;
@@ -86,14 +90,22 @@ export const useAddress = defineStore('useAddressStore', () => {
8690
async function updateAddresses(type, billingIsShipping = false) {
8791
let key = state[`${type}Data`]['key'];
8892
if (type === 'shipping') {
89-
const {updateCart} = useCart();
90-
await updateCart({shipping_address_key: key});
93+
const {updateCart, fetchCart, shippingAddressKey} = useCart();
94+
if (key === shippingAddressKey.value) {
95+
// The address skel is the same, we just need to reload the relation
96+
fetchCart();
97+
} else {
98+
await updateCart({shipping_address_key: key});
99+
}
91100
} else if (type === 'billing') {
92-
const {addOrUpdateOrder} = useOrder();
93-
await addOrUpdateOrder({billing_address_key: key});
101+
const {addOrUpdateOrder, fetchOrder, billingAddressKey} = useOrder();
102+
if (key === billingAddressKey.value) { // The address skel is the same, we just need to reload the relation
103+
fetchOrder(shopStore.state.orderKey);
104+
} else {
105+
await addOrUpdateOrder({billing_address_key: key});
106+
}
94107
if (billingIsShipping) {
95-
const {updateCart} = useCart();
96-
await updateCart({shipping_address_key: key});
108+
await updateAddresses('shipping', false);
97109
}
98110
}
99111
}

src/composables/cart.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {reactive} from 'vue'
1+
import {computed, reactive} from 'vue';
22
import {Request} from '@viur/vue-utils'
33
import { removeUndefinedValues} from '../utils'
44

@@ -93,7 +93,7 @@ export function useCart() {
9393
cart_type:cart_type?cart_type:shopStore.state.cartRoot['cart_type'],
9494
name:name?name:shopStore.state.cartRoot['name'],
9595
customer_comment:customer_comment?customer_comment:shopStore.state.cartRoot['customer_comment'],
96-
shipping_address_key:shipping_address_key?shipping_address_key:shopStore.state.cartRoot?.['shipping_address']?.['dest']?.['key'],
96+
shipping_address_key:shipping_address_key?shipping_address_key:shippingAddressKey.value,
9797
shipping_key:shipping_key?shipping_key:shopStore.state.cartRoot?.['shipping']?.['dest']?.['key'],
9898
discount_key:discount_key?discount_key:shopStore.state.cartRoot?.['discount']?.['dest']?.['key'],
9999
cart_key:cart_key ? cart_key : shopStore.state.cartRoot['key'],
@@ -174,7 +174,7 @@ export function useCart() {
174174
});
175175
}
176176

177-
177+
const shippingAddressKey = computed(() => shopStore.state.cartRoot?.['shipping_address']?.['dest']?.['key']);
178178

179179
return {
180180
state,
@@ -187,6 +187,7 @@ export function useCart() {
187187
createCart,
188188
getValue,
189189
addDiscount,
190-
removeDiscount
190+
removeDiscount,
191+
shippingAddressKey,
191192
}
192193
}

src/composables/order.js

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import {reactive} from 'vue'
2-
import {Request} from '@viur/vue-utils'
3-
import { useViurShopStore } from '../shop'
4-
import { removeUndefinedValues} from '../utils'
5-
import { useUrlSearchParams } from '@vueuse/core'
1+
import {Request} from '@viur/vue-utils';
2+
import {useUrlSearchParams} from '@vueuse/core';
3+
import {computed, reactive} from 'vue';
4+
import {useViurShopStore} from '../shop';
5+
import {removeUndefinedValues} from '../utils';
66

77
export function useOrder() {
88
const state = reactive({
@@ -51,7 +51,7 @@ export function useOrder() {
5151
let url = shopStore.state.shopApiUrl+"/order_add"
5252
let data = {
5353
payment_provider:payment_provider?payment_provider:shopStore.state.order?.['payment_provider'],
54-
billing_address_key:billing_address_key?billing_address_key:shopStore.state.order?.['billing_address_key']?.['dest']?.['key'],
54+
billing_address_key:billing_address_key?billing_address_key:billingAddressKey.value,
5555
customer_key:customer_key?customer_key:shopStore.state.order?.['customer_key']?.['dest']?.['key'],
5656
state_ordered:state_ordered?state_ordered:shopStore.state.order?.['state_ordered'],
5757
state_paid:state_paid?state_paid:shopStore.state.order?.['state_paid'],
@@ -76,10 +76,12 @@ export function useOrder() {
7676
})
7777
}
7878

79+
const billingAddressKey = computed(() => shopStore.state.order?.['billing_address']?.['dest']?.['key']);
7980

80-
return {
81-
state,
82-
fetchOrder,
83-
addOrUpdateOrder
84-
}
81+
return {
82+
state,
83+
fetchOrder,
84+
addOrUpdateOrder,
85+
billingAddressKey,
86+
};
8587
}

0 commit comments

Comments
 (0)