Skip to content

Commit c51735a

Browse files
sethiddenMarcin Kwiatkowski
authored andcommitted
refactor(composable): refactor useReview (#729)
* refactor(composable): refactor useReview squash this * refactor(theme): change to new refactored usereview composable * refactor(composable): deprecate useReview factory aswell * refactor(theme): move commands into separate files and change naming convention * refactor(theme): add spaces for readability * refactor(theme): add typings for commands * refactor(theme): fix useReview imports * fix(theme): fix TypeScript errors after adding context.d.ts $magento types * refactor(theme): adjust to lack of state refs in composable * refactor(composable): remove unused params also use local types, not magento-api ones * refactor(composables): add composable command types
1 parent 482c9c0 commit c51735a

File tree

18 files changed

+214
-25
lines changed

18 files changed

+214
-25
lines changed

packages/composables/src/composables/useReview/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
/* istanbul ignore file */
2+
3+
/**
4+
* @deprecated since version 1.0.0
5+
*/
26
import {
37
ComposableFunctionArgs,
48
Context,

packages/composables/src/factories/useReviewFactory.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 { Ref, computed } from '@vue/composition-api';
25
import {
36
ComposableFunctionArgs,

packages/theme/components/ProductAddReviewForm.vue

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -116,14 +116,13 @@ import {
116116
useRoute,
117117
useContext,
118118
} from '@nuxtjs/composition-api';
119-
import { useReview } from '@vue-storefront/magento';
120119
import { extend, ValidationObserver, ValidationProvider } from 'vee-validate';
121120
import { min, oneOf, required } from 'vee-validate/dist/rules';
122121
import {
123122
SfInput, SfButton, SfSelect, SfTextarea,
124123
} from '@storefront-ui/vue';
125124
import { reviewGetters, userGetters } from '~/getters';
126-
import { useUser } from '~/composables';
125+
import { useUser, useReview } from '~/composables';
127126
128127
extend('required', {
129128
...required,
@@ -168,16 +167,16 @@ export default defineComponent({
168167
typeof $recaptcha !== 'undefined' && $config.isRecaptcha,
169168
);
170169
const {
171-
loading, loadReviewMetadata, metadata, error,
172-
} = useReview(
173-
`productReviews-${id}`,
174-
);
170+
loading, loadReviewMetadata, error,
171+
} = useReview();
175172
const { isAuthenticated, user } = useUser();
176173
177174
const reviewSent = ref(false);
178175
179176
const form = ref(BASE_FORM(id));
180177
178+
const metadata = ref([]);
179+
181180
const ratingMetadata = computed(() => reviewGetters.getReviewMetadata([...metadata.value]));
182181
183182
const formSubmitValue = computed(() => {
@@ -234,7 +233,7 @@ export default defineComponent({
234233
};
235234
236235
onBeforeMount(async () => {
237-
await loadReviewMetadata();
236+
metadata.value = await loadReviewMetadata();
238237
});
239238
240239
return {

packages/theme/components/__tests__/ProductAddReviewForm.spec.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,20 @@
22
import { waitFor } from '@testing-library/vue';
33
import userEvent from '@testing-library/user-event';
44
import { useRoute } from '@nuxtjs/composition-api';
5-
import { useUser, useReview } from '@vue-storefront/magento';
65
import {
76
render,
87
useUserMock,
98
useReviewMock,
109
} from '~/test-utils';
1110

11+
import { useReview, useUser } from '~/composables';
1212
import ProductAddReviewForm from '../ProductAddReviewForm';
1313

1414
jest.mock('@vue-storefront/magento', () => {
1515
const originalModule = jest.requireActual('@vue-storefront/magento');
1616
return {
1717
...originalModule,
1818
useUser: jest.fn(),
19-
useReview: jest.fn(),
2019
};
2120
});
2221

@@ -30,6 +29,14 @@ jest.mock('@nuxtjs/composition-api', () => {
3029
};
3130
});
3231

32+
jest.mock('~/composables/useReview', () => {
33+
const originalModule = jest.requireActual('~/composables/useReview');
34+
return {
35+
...originalModule,
36+
useReview: jest.fn(),
37+
};
38+
});
39+
3340
describe.skip('<ProductAddReviewForm/>', () => {
3441
it('Form fields are rendered and validated', async () => {
3542
useUser.mockReturnValue(useUserMock());
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { ApiClientMethods, IntegrationContext } from '@vue-storefront/core';
2+
import { ClientInstance, Config, MagentoApiMethods } from '@vue-storefront/magento-api';
3+
4+
declare module '@vue-storefront/core' {
5+
export interface Context {
6+
$magento: IntegrationContext<ClientInstance, Config, ApiClientMethods<MagentoApiMethods>>;
7+
}
8+
}

packages/theme/composables/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ export { default as useCart } from './useCart';
1616
export { default as useContent } from './useContent';
1717
export { default as useCategorySearch } from './useCategorySearch';
1818
export { default as useProduct } from './useProduct';
19+
export { default as useReview } from './useReview';
1920
export { default as useShipping } from './useShipping';
2021
export { default as useShippingProvider } from './useShippingProvider';
2122
export { default as useRelatedProducts } from './useRelatedProducts';

packages/theme/composables/useCart/useCart.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export interface UseCartInterface<CART, CART_ITEM, PRODUCT> {
1717
clear: (params: ComposableFunctionArgs<{ realCart?: boolean; }>) => Promise<void>;
1818
applyCoupon: (params: ComposableFunctionArgs<{ couponCode: string; }>) => Promise<void>;
1919
removeCoupon: (params: ComposableFunctionArgs<{}>) => Promise<void>;
20-
isInCart: (context: Context, params: { currentCart: CART; product: PRODUCT }) => boolean;
20+
isInCart: (params: { currentCart: CART; product: PRODUCT }) => boolean;
2121
setCart: (newCart: CART) => void;
2222
cart: ComputedRef<CART>;
2323
loading: Ref<boolean>;

packages/theme/composables/useProduct/commands/getProductDetailsCommand.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@ export const getProductDetailsCommand = {
1010
...searchParams,
1111
} as GetProductSearchParams, customQuery);
1212

13-
return result.data?.products ?? [];
13+
return result.data?.products;
1414
},
1515
};

packages/theme/composables/useProduct/commands/getProductListCommand.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@ export const getProductListCommand = {
88
.api
99
.products(searchParams as GetProductSearchParams, customQuery);
1010

11-
return result.data?.products ?? [];
11+
return result.data?.products;
1212
},
1313
};

packages/theme/composables/useProduct/index.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
import { ref, useContext } from '@nuxtjs/composition-api';
66
import { getProductListCommand } from '~/composables/useProduct/commands/getProductListCommand';
77
import { getProductDetailsCommand } from '~/composables/useProduct/commands/getProductDetailsCommand';
8+
import { ProductsListQuery } from '~/modules/GraphQL/types';
89

910
export const useProduct = (id: string) => {
1011
const loading = ref(false);
@@ -17,7 +18,7 @@ export const useProduct = (id: string) => {
1718

1819
const getProductList = async (searchParams) => {
1920
Logger.debug(`useProduct/${id}/getProductList`, searchParams);
20-
let products = [];
21+
let products : ProductsListQuery['products'] = null;
2122

2223
try {
2324
loading.value = true;
@@ -35,7 +36,7 @@ export const useProduct = (id: string) => {
3536

3637
const getProductDetails = async (searchParams) => {
3738
Logger.debug(`useProduct/${id}/getProductDetails`, searchParams);
38-
let products = [];
39+
let products : ProductsListQuery['products'] = null;
3940

4041
try {
4142
loading.value = true;

0 commit comments

Comments
 (0)