Skip to content

Commit 8d6cf7d

Browse files
author
Marcin Kwiatkowski
committed
refactor(composables): moved the useExternalCheckout composable to theme
1 parent d8fb0d3 commit 8d6cf7d

File tree

6 files changed

+77
-3
lines changed

6 files changed

+77
-3
lines changed

packages/composables/src/composables/useExternalCheckout/index.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@ import { useExternalCheckoutFactory, UseExternalCheckoutFactoryParams } from '..
33
import useCart from '../useCart';
44
// import useConfig from '../useConfig';
55

6+
/**
7+
* @deprecated since version <version?>
8+
*
9+
* @see <add docs link>
10+
*/
611
const factoryParams: UseExternalCheckoutFactoryParams = {
712
provide() {
813
return {

packages/composables/src/factories/useExternalCheckoutFactory.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@ export interface UseExternalCheckoutFactoryParams<API extends PlatformApi = any>
1414
initializeCheckout: (context: Context, params: ComposableFunctionArgs<{ baseUrl: string }>) => Promise<string>;
1515
}
1616

17+
/**
18+
* @deprecated since version <version?>
19+
*
20+
* @see <add docs link>
21+
*/
1722
export const useExternalCheckoutFactory = <API extends PlatformApi = any>(
1823
factoryParams: UseExternalCheckoutFactoryParams<API>,
1924
) => {

packages/theme/components/CartSidebar.vue

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -304,15 +304,17 @@ export default defineComponent({
304304
const visible = ref(false);
305305
const isLoaderVisible = ref(false);
306306
const tempProduct = ref();
307+
const redirectUrl = ref();
307308
308-
onMounted(() => {
309+
onMounted(async () => {
310+
const checkoutURL = await initializeCheckout({ baseUrl: '/checkout/user-account' });
311+
redirectUrl.value = checkoutURL;
309312
// eslint-disable-next-line @typescript-eslint/no-floating-promises
310313
loadCart();
311314
});
312315
313316
const goToCheckout = async () => {
314-
const redirectUrl = await initializeCheckout({ baseUrl: '/checkout/user-account' });
315-
await router.push(`${app.localePath(redirectUrl)}`);
317+
await router.push(`${app.localePath(redirectUrl.value)}`);
316318
};
317319
318320
const sendToRemove = ({ product }) => {

packages/theme/composables/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ export { default as useUiNotification } from './useUiNotification';
33
export { default as useUiState } from './useUiState';
44
export { default as useImage } from './useImage';
55
export { default as useConfig } from './useConfig';
6+
export { default as useExternalCheckout } from './useExternalCheckout';
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import { Logger } from '@vue-storefront/core';
2+
3+
import { ref, useContext } from '@nuxtjs/composition-api';
4+
import { UseExternalCheckout } from '~/composables/useExternalCheckout/useExternalCheckout';
5+
6+
export const useExternalCheckout = (): UseExternalCheckout => {
7+
const { app } = useContext();
8+
const loading = ref(false);
9+
const error = ref(null);
10+
11+
// eslint-disable-next-line consistent-return
12+
const initializeCheckout = (params) => {
13+
Logger.debug('[Magento]: Initialize external checkout', { params });
14+
15+
try {
16+
const { externalCheckout, state } = app.context.$vsf.$magento.config;
17+
const userToken = state.getCustomerToken();
18+
const cartToken = state.getCartId();
19+
20+
Logger.debug({ userToken, cartToken });
21+
loading.value = true;
22+
23+
if (externalCheckout.enable) {
24+
if (userToken && cartToken) {
25+
// @TODO: Implements Multiple Store
26+
/* if (Object.keys(externalCheckout.stores).length) {
27+
28+
} */
29+
window.location.replace(`${externalCheckout.cmsUrl}${externalCheckout.syncUrlPath}/token/${userToken}/cart/${cartToken}`);
30+
return '';
31+
}
32+
33+
window.location.replace(`${externalCheckout.cmsUrl}${externalCheckout.syncUrlPath}/token//cart/${cartToken}`);
34+
return '';
35+
}
36+
37+
return params.baseUrl;
38+
} catch (err) {
39+
error.value = err;
40+
Logger.error(err);
41+
} finally {
42+
loading.value = false;
43+
}
44+
};
45+
46+
return {
47+
initializeCheckout,
48+
loading,
49+
error,
50+
};
51+
};
52+
53+
export default useExternalCheckout;
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { Ref } from '@nuxtjs/composition-api';
2+
import { ComposableFunctionArgs } from '@vue-storefront/core';
3+
4+
export type UseExternalCheckout = {
5+
initializeCheckout: (params: ComposableFunctionArgs<{ baseUrl: string }>) => string
6+
loading: Ref<boolean>,
7+
error: Ref<string>,
8+
};

0 commit comments

Comments
 (0)