From c44e9e160dc426e932a90d5643492011135dca70 Mon Sep 17 00:00:00 2001 From: Marcin Kwiatkowski Date: Thu, 17 Mar 2022 06:46:15 +0100 Subject: [PATCH] refactor: refactored useAddresses --- .../src/composables/useAddresses/index.ts | 3 + .../src/factories/useAddressesFactory.ts | 3 + .../components/MyAccount/AddressForm.vue | 14 +-- packages/theme/composables/index.ts | 1 + .../theme/composables/useAddresses/index.ts | 114 ++++++++++++++++++ .../useAddresses/useAddresses.d.ts | 24 ++++ .../pages/MyAccount/AddressesDetails.vue | 36 +++--- 7 files changed, 170 insertions(+), 25 deletions(-) create mode 100644 packages/theme/composables/useAddresses/index.ts create mode 100644 packages/theme/composables/useAddresses/useAddresses.d.ts diff --git a/packages/composables/src/composables/useAddresses/index.ts b/packages/composables/src/composables/useAddresses/index.ts index 8fdbb2b1c..90ab389cd 100644 --- a/packages/composables/src/composables/useAddresses/index.ts +++ b/packages/composables/src/composables/useAddresses/index.ts @@ -25,6 +25,9 @@ type RemoveAddressInput = { } } & CustomQueryParams; +/** + * @deprecated since version 1.0.0 + */ const factoryParams: UseAddressesParams) => Promise; } +/** + * @deprecated since version 1.0.0 + */ export const useAddressesFactory = { - await load(); - }, // TODO: Handle Error onError: () => {}, }); diff --git a/packages/theme/composables/index.ts b/packages/theme/composables/index.ts index 12da48c31..1f056a30d 100644 --- a/packages/theme/composables/index.ts +++ b/packages/theme/composables/index.ts @@ -22,3 +22,4 @@ export { default as useShippingProvider } from './useShippingProvider'; export { default as useBilling } from './useBilling'; export { default as useRelatedProducts } from './useRelatedProducts'; export { default as usePaymentProvider } from './usePaymentProvider'; +export { default as useAddresses } from './useAddresses'; diff --git a/packages/theme/composables/useAddresses/index.ts b/packages/theme/composables/useAddresses/index.ts new file mode 100644 index 000000000..1a3f76652 --- /dev/null +++ b/packages/theme/composables/useAddresses/index.ts @@ -0,0 +1,114 @@ +import { Ref, ref, useContext } from '@nuxtjs/composition-api'; +import { Logger } from '@vue-storefront/core'; +import { transformUserCreateAddressInput, transformUserUpdateAddressInput } from '@vue-storefront/magento'; +import { ComposableFunctionArgs } from '~/composables/types'; +import { UseAddressesInterface, UseAddressesParamsInput, UseAddressesErrors } from '~/composables/useAddresses/useAddresses'; + +export const useAddresses = () : UseAddressesInterface => { + const error: Ref = ref({ + load: null, + save: null, + remove: null, + update: null, + }); + const loading: Ref = ref(false); + const { app } = useContext(); + const context = app.$vsf; + + const load = async () => { + Logger.debug('[Magento] load user addresses'); + let results = null; + + try { + loading.value = true; + const { data } = await context.$magento.api.getCustomerAddresses(); + results = data?.customer?.addresses ?? []; + Logger.debug('[Magento] load user addresses results:', results); + error.value.load = null; + } catch (err) { + error.value.load = err; + Logger.error('Magento] load user addresses error', err); + } finally { + loading.value = false; + } + + return results; + }; + + const save = async (saveParams: ComposableFunctionArgs) => { + Logger.debug('[Magento] save user address:', saveParams.address); + let results = null; + + try { + loading.value = true; + const { data } = await context.$magento.api.createCustomerAddress( + transformUserCreateAddressInput(saveParams), + ); + results = data?.createCustomerAddress ?? {}; + Logger.debug('[Magento] save user address results:', saveParams.address); + error.value.save = null; + } catch (err) { + error.value.save = err; + Logger.error('[Magento] save user address error:', err); + } finally { + loading.value = false; + } + + return results; + }; + + const update = async (updateParams: ComposableFunctionArgs) => { + Logger.debug('[Magento] update user address:', updateParams.address); + let results = null; + + try { + loading.value = true; + const { data } = await context.$magento.api.updateCustomerAddress( + transformUserUpdateAddressInput(updateParams), + ); + results = data?.updateCustomerAddress ?? {}; + Logger.debug('[Magento] update user address results:', results); + error.value.update = null; + } catch (err) { + error.value.update = err; + Logger.error('[Magento] update user address error:', err); + } finally { + loading.value = false; + } + + return results; + }; + + const remove = async (removeParams: ComposableFunctionArgs) => { + Logger.debug('[Magento] remove user address:', removeParams.address); + let results = null; + + try { + loading.value = true; + const { data } = await context.$magento.api.deleteCustomerAddress( + removeParams.address.id, + ); + results = !!data.deleteCustomerAddress; + Logger.debug('[Magento] remove user address results:', results); + error.value.remove = null; + } catch (err) { + error.value.remove = err; + Logger.error('[Magento] remove user address error:', err); + } finally { + loading.value = false; + } + + return results; + }; + + return { + error, + loading, + load, + save, + update, + remove, + }; +}; + +export default useAddresses; diff --git a/packages/theme/composables/useAddresses/useAddresses.d.ts b/packages/theme/composables/useAddresses/useAddresses.d.ts new file mode 100644 index 000000000..23289257d --- /dev/null +++ b/packages/theme/composables/useAddresses/useAddresses.d.ts @@ -0,0 +1,24 @@ +import { Ref } from '@nuxtjs/composition-api'; +import { ComposableFunctionArgs } from '@vue-storefront/core'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { CustomerAddress } from '@vue-storefront/magento-api'; + +export type UseAddressesErrors = { + load: Error; + save: Error; + remove: Error; + update: Error; +}; + +export type UseAddressesParamsInput = { + address: CustomerAddress +}; + +export interface UseAddressesInterface { + error: Ref, + loading: Ref, + load: () => Promise>, + save: (saveParams: ComposableFunctionArgs) => Promise, + update: (updateParams?: ComposableFunctionArgs) => Promise, + remove: (removeParams?: ComposableFunctionArgs) => Promise, +} diff --git a/packages/theme/pages/MyAccount/AddressesDetails.vue b/packages/theme/pages/MyAccount/AddressesDetails.vue index 838f29896..59ea9f0cc 100644 --- a/packages/theme/pages/MyAccount/AddressesDetails.vue +++ b/packages/theme/pages/MyAccount/AddressesDetails.vue @@ -16,6 +16,7 @@ @@ -82,16 +83,17 @@