Skip to content

Commit cc7d50e

Browse files
author
Marcin Kwiatkowski
authored
refactor: refactored useCOuntrySearch composable (#757)
1 parent 30f783b commit cc7d50e

File tree

8 files changed

+105
-33
lines changed

8 files changed

+105
-33
lines changed

packages/composables/src/composables/useCountrySearch/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
/**
2+
* @deprecated since version 1.0.0
3+
*/
14
import {
25
Context, Logger,
36
} from '@vue-storefront/core';

packages/composables/src/factories/useCountrySearchFactory.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
/**
2+
* @deprecated since version 1.0.0
3+
*/
14
import { computed } from '@vue/composition-api';
25
import {
36
Context,

packages/theme/components/MyAccount/AddressForm.vue

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -193,9 +193,6 @@ import {
193193
SfSelect,
194194
SfCheckbox,
195195
} from '@storefront-ui/vue';
196-
import {
197-
useCountrySearch,
198-
} from '@vue-storefront/magento';
199196
import { required, min, oneOf } from 'vee-validate/dist/rules';
200197
import {
201198
ValidationProvider,
@@ -207,8 +204,10 @@ import {
207204
computed,
208205
onBeforeMount,
209206
defineComponent,
207+
ref,
210208
} from '@nuxtjs/composition-api';
211209
import omitDeep from 'omit-deep';
210+
import { useCountrySearch } from '~/composables';
212211
import { addressGetter } from '~/getters';
213212
214213
extend('required', {
@@ -268,10 +267,11 @@ export default defineComponent({
268267
setup(props, { emit }) {
269268
const {
270269
load: loadCountries,
271-
countries,
272270
search: searchCountry,
273-
country,
274-
} = useCountrySearch('my-account-shipping');
271+
} = useCountrySearch();
272+
273+
const countries = ref([]);
274+
const country = ref(null);
275275
276276
const form = reactive({
277277
apartment: props.address.apartment,
@@ -309,9 +309,9 @@ export default defineComponent({
309309
};
310310
311311
onBeforeMount(async () => {
312-
await loadCountries();
312+
countries.value = await loadCountries();
313313
if (props.address.country_code) {
314-
await searchCountry({ id: props.address.country_code });
314+
country.value = await searchCountry({ id: props.address.country_code });
315315
}
316316
});
317317

packages/theme/composables/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,4 @@ export { default as useAddresses } from './useAddresses';
2727
export { default as useMakeOrder } from './useMakeOrder';
2828
export { default as useUserOrder } from './useUserOrder';
2929
export { default as useUserAddress } from './useUserAddress';
30+
export { default as useCountrySearch } from './useCountrySearch';

packages/theme/composables/types.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51530,3 +51530,4 @@ export interface FacetResultsData {
5153051530
itemsPerPage: number;
5153151531
availableFilters: Record<string, any>;
5153251532
}
51533+
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
import { ref, useContext } from '@nuxtjs/composition-api';
2+
import { Logger } from '@vue-storefront/core';
3+
import { ComposableFunctionArgs, Maybe, Country, Countries } from '~/composables/types';
4+
5+
export const useCountrySearch = () => {
6+
const { app } = useContext();
7+
const loading = ref(false);
8+
const error = ref({
9+
search: null,
10+
load: null,
11+
});
12+
13+
const search = async (params: ComposableFunctionArgs<{ id: string }>): Promise<Maybe<Country>> => {
14+
let results = null;
15+
16+
try {
17+
loading.value = true;
18+
19+
Logger.debug('[Magento]: Search country information based on', { params });
20+
21+
const { data } = await app.$vsf.$magento.api.country(params.id);
22+
23+
Logger.debug('[Result]:', { data });
24+
25+
results = data?.country ?? null;
26+
error.value.search = null;
27+
} catch (err) {
28+
error.value.search = err;
29+
Logger.error('useCountrySearch/search', err);
30+
} finally {
31+
loading.value = false;
32+
}
33+
34+
return results;
35+
};
36+
37+
const load = async (): Promise<Array<Countries>> => {
38+
let results = [];
39+
40+
try {
41+
loading.value = true;
42+
43+
Logger.debug('[Magento]: Load available countries on store');
44+
45+
const { data } = await app.$vsf.$magento.api.countries();
46+
47+
Logger.debug('[Result]:', { data });
48+
49+
results = data?.countries ?? [];
50+
error.value.search = null;
51+
} catch (err) {
52+
error.value.search = err;
53+
Logger.error('useCountrySearch/load', err);
54+
} finally {
55+
loading.value = false;
56+
}
57+
58+
return results;
59+
};
60+
61+
return {
62+
load,
63+
search,
64+
loading,
65+
error,
66+
};
67+
};
68+
69+
export default useCountrySearch;

packages/theme/pages/Checkout/Billing.vue

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -275,10 +275,6 @@ import {
275275
SfSelect,
276276
SfCheckbox,
277277
} from '@storefront-ui/vue';
278-
import {
279-
useCountrySearch,
280-
addressGetter,
281-
} from '@vue-storefront/magento';
282278
import { ValidationProvider, ValidationObserver, extend } from 'vee-validate';
283279
import { required, min, digits } from 'vee-validate/dist/rules';
284280
import {
@@ -290,9 +286,9 @@ import {
290286
defineComponent,
291287
useContext,
292288
} from '@nuxtjs/composition-api';
293-
import { userBillingGetters } from '~/getters';
289+
import { userBillingGetters, addressGetter } from '~/getters';
294290
import {
295-
useShipping, useUser, useBilling, useUserAddress,
291+
useShipping, useUser, useBilling, useUserAddress, useCountrySearch,
296292
} from '~/composables';
297293
import UserAddressDetails from '~/components/UserAddressDetails.vue';
298294
import {
@@ -349,10 +345,10 @@ export default defineComponent({
349345
} = useShipping();
350346
const {
351347
load: loadCountries,
352-
countries,
353348
search: searchCountry,
354-
country,
355-
} = useCountrySearch('Step:Billing');
349+
} = useCountrySearch();
350+
const countries = ref([]);
351+
const country = ref(null);
356352
const { isAuthenticated } = useUser();
357353
let oldBilling = null;
358354
const sameAsShipping = ref(false);
@@ -412,21 +408,21 @@ export default defineComponent({
412408
sameAsShipping.value = !sameAsShipping.value;
413409
if (sameAsShipping.value) {
414410
shippingDetails.value = await loadShipping();
415-
await searchCountry({ id: shippingDetails.value.country_code });
411+
country.value = await searchCountry({ id: shippingDetails.value.country_code });
416412
oldBilling = { ...billingDetails.value };
417413
billingDetails.value = {
418414
...formatAddressReturnToData(shippingDetails.value),
419415
};
420416
currentAddressId.value = NOT_SELECTED_ADDRESS;
421417
setAsDefault.value = false;
422418
if (billingDetails.value.country_code) {
423-
await searchCountry({ id: billingDetails?.value.country_code });
419+
country.value = await searchCountry({ id: billingDetails?.value.country_code });
424420
}
425421
return;
426422
}
427423
billingDetails.value = oldBilling;
428424
if (billingDetails.value.country_code) {
429-
await searchCountry({ id: billingDetails?.value.country_code });
425+
country.value = await searchCountry({ id: billingDetails?.value.country_code });
430426
}
431427
};
432428
@@ -465,7 +461,7 @@ export default defineComponent({
465461
466462
const changeCountry = async (id) => {
467463
changeBillingDetails('country_code', id);
468-
await searchCountry({ id });
464+
country.value = await searchCountry({ id });
469465
};
470466
471467
watch(billingAddress, (addr) => {
@@ -478,10 +474,11 @@ export default defineComponent({
478474
await router.push(app.localePath('/checkout/user-account'));
479475
}
480476
481-
const [loadedBilling] = await Promise.all([load(), loadCountries()]);
477+
const [loadedBilling, loadedCountries] = await Promise.all([load(), loadCountries()]);
482478
billingAddress.value = loadedBilling;
479+
countries.value = loadedCountries;
483480
if (billingDetails.value?.country_code) {
484-
await searchCountry({ id: billingDetails.value.country_code });
481+
country.value = await searchCountry({ id: billingDetails.value.country_code });
485482
}
486483
487484
if (!userBilling.value?.addresses && isAuthenticated.value) {

packages/theme/pages/Checkout/Shipping.vue

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -270,13 +270,10 @@ import {
270270
useRouter,
271271
useContext,
272272
} from '@nuxtjs/composition-api';
273-
import {
274-
useCountrySearch,
275-
} from '@vue-storefront/magento';
276273
import { required, min, digits } from 'vee-validate/dist/rules';
277274
import { ValidationProvider, ValidationObserver, extend } from 'vee-validate';
278275
import { userShippingGetters, addressGetter } from '~/getters';
279-
import { useUser, useShipping, useUserAddress } from '~/composables';
276+
import { useUser, useShipping, useUserAddress, useCountrySearch } from '~/composables';
280277
import { addressFromApiToForm } from '~/helpers/checkout/address';
281278
import { mergeItem } from '~/helpers/asyncLocalStorage';
282279
import { isPreviousStepValid } from '~/helpers/checkout/steps';
@@ -325,10 +322,10 @@ export default defineComponent({
325322
326323
const {
327324
load: loadCountries,
328-
countries,
329325
search: searchCountry,
330-
country,
331-
} = useCountrySearch('Step:Shipping');
326+
} = useCountrySearch();
327+
const countries = ref([]);
328+
const country = ref(null);
332329
const { isAuthenticated } = useUser();
333330
const shippingDetails = ref(addressFromApiToForm(address.value) || {});
334331
const shippingMethods = ref([]);
@@ -419,7 +416,7 @@ export default defineComponent({
419416
420417
const changeCountry = async (id) => {
421418
changeShippingDetails('country_code', id);
422-
await searchCountry({ id });
419+
country.value = await searchCountry({ id });
423420
};
424421
425422
watch(address, (addr) => {
@@ -430,17 +427,18 @@ export default defineComponent({
430427
if (!validStep) {
431428
await router.push(app.localePath('/checkout/user-account'));
432429
}
433-
const [loadedShippingInfo, loadedUserShipping] = await Promise.all([
430+
const [loadedShippingInfo, loadedUserShipping, loadedCountries] = await Promise.all([
434431
loadShipping(),
435432
loadUserShipping(),
436433
loadCountries(),
437434
]);
438435
439436
address.value = loadedShippingInfo;
440437
userShipping.value = loadedUserShipping;
438+
countries.value = loadedCountries;
441439
442440
if (shippingDetails.value?.country_code) {
443-
await searchCountry({ id: shippingDetails.value.country_code });
441+
country.value = await searchCountry({ id: shippingDetails.value.country_code });
444442
}
445443
446444
const shippingAddresses = userShippingGetters.getAddresses(

0 commit comments

Comments
 (0)