Skip to content

Commit 0706e6b

Browse files
authored
Merge pull request #56 from vuestorefront-community/dev
Dev
2 parents 0e6c7ba + 50e3d67 commit 0706e6b

File tree

27 files changed

+603
-127
lines changed

27 files changed

+603
-127
lines changed

packages/api-client/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@vue-storefront/odoo-api",
3-
"version": "1.5.1",
3+
"version": "1.5.2",
44
"private": false,
55
"sideEffects": false,
66
"server": "server/index.js",

packages/api-client/src/api/billingUpdateAddress/billingUpdateAddressMutation.ts

+1
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,6 @@ mutation updateAddress($id: Int!, $name: String!, $city: String!, $countryId: In
1717
}
1818
email
1919
phone
20+
zip
2021
}
2122
}`;

packages/api-client/src/api/cartAddMultipleItems/cartAddMultipleItemsMutation.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import gql from 'graphql-tag';
2-
import orderFragment from '@vue-storefront/odoo-api/src/fragments/orderFragment';
2+
import orderFragment from '../../fragments/orderFragment';
33

44
export default gql`
55
mutation($products: [ProductInput]!){

packages/api-client/src/api/getCategories/index.ts

+19
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,23 @@ import { FetchResult } from 'apollo-link';
55
import gql from 'graphql-tag';
66
import { CategoriesResult, GraphQlGetCategoriesParams } from '../../index';
77
import query from './getCategoriesQuery';
8+
import { randomIntegerBetween } from '../../';
89

910
export default async function getCategories(
1011
context: Context,
1112
params: GraphQlGetCategoriesParams,
1213
customQuery?: CustomQuery
1314
): Promise<FetchResult<CategoriesResult>> {
15+
const redisClient = context.client.redisTagClient;
1416
const apolloClient = context.client.apollo as ApolloClient<any>;
1517

18+
const cacheKey = 'API-C-ALL-CATEGORIES';
19+
let cachedCategories = null;
20+
21+
if (redisClient && (cachedCategories = await redisClient.get(cacheKey))) {
22+
return cachedCategories;
23+
}
24+
1625
const { getCategories } = context.extendQuery(
1726
customQuery, { getCategories: { query, variables: params } }
1827
);
@@ -24,5 +33,15 @@ export default async function getCategories(
2433
fetchPolicy: 'no-cache'
2534
});
2635

36+
delete response?.data?.cookie;
37+
if (redisClient && response.data?.categories?.categories) {
38+
redisClient.set(
39+
cacheKey,
40+
response,
41+
[cacheKey],
42+
{ timeout: process.env.REDIS_TTL_CACHE_MAXIMUM ? randomIntegerBetween(Number(process.env.REDIS_TTL_CACHE_MINIMUM), Number(process.env.REDIS_TTL_CACHE_MAXIMUM)) : 86400 }
43+
);
44+
}
45+
2746
return response;
2847
}

packages/api-client/src/api/getProductTemplatesList/index.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ export default async function getProductTemplatesList(
3434
delete response?.data?.cookie;
3535
if (cacheKey &&
3636
redisClient &&
37-
response.data?.products &&
38-
response.data?.products.length > 0 &&
37+
response.data?.products?.products &&
38+
response.data?.products?.products?.length > 0 &&
3939
categoryIdForCache) {
4040
redisClient.set(
4141
cacheKey,

packages/api-client/src/api/shippingUpdateAddress/shippingUpdateAddressMutation.ts

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ mutation updateAddress($id: Int!, $name: String!, $city: String!, $countryId: In
77
street
88
street2
99
city
10+
zip
1011
state
1112
{
1213
id

packages/api-client/src/fragments/orderFragment.ts

+2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ order {
1717
image
1818
imageFilename
1919
displayName
20+
combinationInfo
2021
}
2122
quantity
2223
priceTotal
@@ -30,6 +31,7 @@ order {
3031
image
3132
imageFilename
3233
displayName
34+
combinationInfo
3335
}
3436
quantity
3537
priceTotal

packages/api-client/src/fragments/productFragment.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
export default `
22
id
3-
firstVariant
3+
firstVariant{
4+
id
5+
combinationInfoVariant
6+
}
47
smallImage
58
price
69
name
710
description
811
image
912
imageFilename
13+
combinationInfo
1014
slug
1115
sku
1216
jsonLd

packages/api-client/src/fragments/wishlistItemsFragment.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ wishlistItems {
99
price
1010
imageFilename
1111
isInWishlist
12-
firstVariant
12+
firstVariant{
13+
id
14+
combinationInfoVariant
15+
}
1316
slug
1417
}
1518
}

packages/api-client/src/setup/apolloClient.ts

+1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ const createOddoLink = (settings: Config): any => {
3838
uri: settings.graphqlBaseUrl,
3939
credentials: 'include',
4040
fetch,
41+
fetchOptions: settings.fetchOptions,
4142
headers: {
4243
Cookie: settings.auth,
4344
'resquest-host': settings['resquest-host'],

packages/api-client/src/types/types.ts

+19-1
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,23 @@ export type ProductImage = {
379379
video: string;
380380
};
381381

382+
export interface CombinationInfo {
383+
product_id?: number;
384+
product_template_id?: number;
385+
display_name?: string;
386+
display_image?: true;
387+
price?: number;
388+
list_price?: number;
389+
has_discounted_price?: boolean;
390+
reduced_price?: boolean;
391+
discount?: number;
392+
discount_perc?: number;
393+
grade_name?: string;
394+
grade_description?: string;
395+
slug?: string;
396+
stock_qty?: number;
397+
}
398+
382399
export type Product = {
383400
id: number;
384401
description?: string;
@@ -387,6 +404,7 @@ export type Product = {
387404
slug?: string;
388405
isInStock?: boolean;
389406
imageFilename?: string;
407+
combinationInfo?: CombinationInfo;
390408
qty?: number;
391409
sku?: string;
392410
image?: string;
@@ -400,7 +418,7 @@ export type Product = {
400418
hasDiscountedPrice?: number;
401419
listPrice?: number;
402420
realProduct?: ProductVariant;
403-
firstVariant?: number;
421+
firstVariant?: Product;
404422
currency?: Currency;
405423
isInWishlist?: boolean;
406424
alternativeProducts?: Product[];

packages/composables/package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@vue-storefront/odoo",
3-
"version": "1.5.1",
3+
"version": "1.5.2",
44
"private": false,
55
"sideEffects": false,
66
"main": "lib/index.cjs.js",
@@ -19,7 +19,7 @@
1919
"dependencies": {
2020
"@nuxtjs/composition-api": "0.31.0",
2121
"@vue-storefront/core": "2.7.5",
22-
"@vue-storefront/odoo-api": "1.5.1",
22+
"@vue-storefront/odoo-api": "1.5.2",
2323
"winston": "^3.8.2"
2424
},
2525
"peerDependencies": {

packages/composables/src/composables/getters/cartGetters.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ export const getCartItemImage = (orderLine: OrderLine): string => {
3636

3737
export const getCartItemPrice = (orderLine: OrderLine): AgnosticPrice => {
3838
return {
39-
regular: orderLine?.priceTotal || 12,
40-
special: orderLine?.priceTotal || 10
39+
regular: orderLine?.product?.combinationInfo?.list_price || 0,
40+
special: orderLine?.product?.combinationInfo?.price || 0
4141
};
4242
};
4343

packages/composables/src/composables/getters/productGetters.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ export const getProductSlug = (product: Product): string => product?.slug || '';
2626

2727
export const getProductPrice = (product: Product): AgnosticPrice => {
2828
return {
29-
regular: product?.listPrice || product?.price,
30-
special: product?.listPrice || product?.price
29+
regular: product?.combinationInfo?.list_price || product?.combinationInfo?.list_price,
30+
special: product?.combinationInfo?.price || product?.combinationInfo?.price
3131
};
3232
};
3333

packages/composables/src/composables/useCart/index.ts

+16-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
/* eslint-disable @typescript-eslint/no-unused-vars */
22
/* istanbul ignore file */
3+
const resolvePath = (object, path, defaultValue) => path
4+
.split('.')
5+
.reduce((o, p) => o ? o[p] : defaultValue, object);
36

47
import {
58
Context,
@@ -20,6 +23,9 @@ const params: UseCartFactoryParams<Cart, OrderLine, Product> = {
2023
load: async (context: Context, { customQuery }) => {
2124
const { data } = await context.$odoo.api.cartLoad(customQuery);
2225

26+
const cookieIndex = context?.$odoo?.config?.app?.$config?.cart?.cookieIndex || 'orderLines.length';
27+
context.$odoo.config.app.$cookies.set('cart-size', resolvePath(data?.cart?.order, cookieIndex, 0) || 0);
28+
2329
return data.cart;
2430
},
2531

@@ -28,7 +34,7 @@ const params: UseCartFactoryParams<Cart, OrderLine, Product> = {
2834
if (!params.isInCart(context, { currentCart, product })) {
2935
const productId = product.realProduct
3036
? product.realProduct?.product?.id
31-
: product.firstVariant;
37+
: product.firstVariant.id;
3238

3339
const addItemParams: GraphQlCartAddItemParams = {
3440
productId,
@@ -39,6 +45,9 @@ const params: UseCartFactoryParams<Cart, OrderLine, Product> = {
3945
customQuery
4046
);
4147

48+
const cookieIndex = context?.$odoo?.config?.app?.$config?.cart?.cookieIndex || 'orderLines.length';
49+
context.$odoo.config.app.$cookies.set('cart-size', resolvePath(data?.cartAddItem?.order, cookieIndex, 0) || 0);
50+
4251
return data?.cartAddItem;
4352
}
4453

@@ -53,6 +62,8 @@ const params: UseCartFactoryParams<Cart, OrderLine, Product> = {
5362
addItemParams,
5463
customQuery
5564
);
65+
const cookieIndex = context?.$odoo?.config?.app?.$config?.cart?.cookieIndex || 'orderLines.length';
66+
context.$odoo.config.app.$cookies.set('cart-size', resolvePath(data?.cartRemoveItem?.order, cookieIndex, 0) || 0);
5667

5768
return data?.cartRemoveItem;
5869
},
@@ -68,6 +79,9 @@ const params: UseCartFactoryParams<Cart, OrderLine, Product> = {
6879
customQuery
6980
);
7081

82+
const cookieIndex = context?.$odoo?.config?.app?.$config?.cart?.cookieIndex || 'orderLines.length';
83+
context.$odoo.config.app.$cookies.set('cart-size', resolvePath(data?.cartUpdateItem?.order, cookieIndex, 0) || 0);
84+
7185
return data?.cartUpdateItem;
7286
},
7387

@@ -104,7 +118,7 @@ const params: UseCartFactoryParams<Cart, OrderLine, Product> = {
104118
isInCart: (context: Context, { currentCart, product }) => {
105119
const productId = product.realProduct
106120
? product.realProduct.product.id
107-
: product.firstVariant;
121+
: product.firstVariant.id;
108122

109123
return (
110124
currentCart?.order?.orderLines?.some(

packages/composables/src/composables/useFacet/index.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@ const factoryParams = {
1313
let categoryIdForProductCache = null;
1414
if (params.input.fetchCategory) {
1515
categoryResponse = await context.$odoo.api.getCategory(params.input.categoryParams, customQueryCategories, params.input.categoryParams?.cacheKey);
16-
categoryIdForProductCache = categoryResponse.data?.category.id;
16+
categoryIdForProductCache = categoryResponse.data?.category?.id;
1717
}
1818
if (params.input.fetchCategories) {
1919
categoriesResponse = await context.$odoo.api.getCategories(params.input.categoryParams, customQueryCategories, params.input.categoryParams?.cacheKey);
20-
categoryIdForProductCache = categoriesResponse?.data?.categories?.categories?.[0].id;
20+
categoryIdForProductCache = categoriesResponse?.data?.categories?.categories?.[0]?.id;
2121
}
2222

2323
const { data: productData } = await context.$odoo.api.getProductTemplatesList(params.input.productParams, customQueryProducts, params.input.productParams?.cacheKey, categoryIdForProductCache);

packages/composables/src/composables/useMultipleProduct/index.ts

+12
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@ import { Product, GraphQlAddMultipleProductsParams, GraphQlRemoveMultipleProduct
33
import { useMultipleProductFactory, UseMultipleProductFactoryParams } from '../../factories/useMultipleProductFactory';
44
import useCart from '../useCart';
55

6+
const resolvePath = (object, path, defaultValue) => path
7+
.split('.')
8+
.reduce((o, p) => o ? o[p] : defaultValue, object);
9+
610
const params: UseMultipleProductFactoryParams<Product, GraphQlAddMultipleProductsParams, GraphQlRemoveMultipleProductsParams, Cart> = {
711
provide() {
812
return {
@@ -17,6 +21,10 @@ const params: UseMultipleProductFactoryParams<Product, GraphQlAddMultipleProduct
1721
const { data } = await context.$odoo.api.cartAddMultipleItems(params, customQuery);
1822

1923
context.useCart.setCart(data.cartAddMultipleItems);
24+
25+
const cookieIndex = context?.$odoo?.config?.app?.$config?.cart?.cookieIndex || 'orderLines.length';
26+
context.$odoo.config.app.$cookies.set('cart-size', resolvePath(data?.cartAddMultipleItems?.order, cookieIndex, 0) || 0);
27+
2028
return data.cartAddMultipleItems;
2129
},
2230

@@ -27,6 +35,10 @@ const params: UseMultipleProductFactoryParams<Product, GraphQlAddMultipleProduct
2735
const { data } = await context.$odoo.api.cartRemoveMultipleItems(params, customQuery);
2836

2937
context.useCart.setCart(data.cartRemoveMultipleItems);
38+
39+
const cookieIndex = context?.$odoo?.config?.app?.$config?.cart?.cookieIndex || 'orderLines.length';
40+
context.$odoo.config.app.$cookies.set('cart-size', resolvePath(data?.cartRemoveMultipleItems?.order, cookieIndex, 0) || 0);
41+
3042
return data.cartRemoveMultipleItems;
3143
}
3244
};

packages/composables/src/composables/useUser/index.ts

+12-7
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/* eslint-disable @typescript-eslint/no-unused-vars */
22
/* istanbul ignore file */
33

4-
import { Context, useUserFactory, UseUserFactoryParams} from '@vue-storefront/core';
4+
import { Context, useUserFactory, UseUserFactoryParams, CustomQuery} from '@vue-storefront/core';
55
import { Partner, GraphQlUpdateAccountParams, GraphQlLoginParams, AgnosticUser } from '@vue-storefront/odoo-api';
66

77
const throwErrors = (errors) => {
@@ -11,13 +11,18 @@ const throwErrors = (errors) => {
1111
};
1212

1313
const factoryParams: UseUserFactoryParams<Partner, GraphQlUpdateAccountParams, any> = {
14-
load: async (context: Context) => {
14+
load: async (context: Context, params: any & { customQuery}) => {
15+
const { customQuery } = params;
1516
const user = context.$odoo.config.app.$cookies.get('odoo-user');
16-
if (user) {
17-
const { data, errors } = await context.$odoo.api.loadUser();
17+
18+
if (!user) {
19+
const { data, errors } = await context.$odoo.api.loadUser(customQuery);
20+
context.$odoo.config.app.$cookies.set('odoo-user', data?.partner, { sameSite: true });
21+
1822
return data?.partner;
1923
}
20-
return null;
24+
25+
return user;
2126
},
2227

2328
logOut: async (context: Context) => {
@@ -46,7 +51,7 @@ const factoryParams: UseUserFactoryParams<Partner, GraphQlUpdateAccountParams, a
4651

4752
throwErrors(errors);
4853

49-
context.$odoo.config.app.$cookies.set('odoo-user', data.register);
54+
context.$odoo.config.app.$cookies.set('odoo-user', data.register, { sameSite: true });
5055

5156
return data?.register;
5257

@@ -63,7 +68,7 @@ const factoryParams: UseUserFactoryParams<Partner, GraphQlUpdateAccountParams, a
6368

6469
throwErrors(errors);
6570

66-
context.$odoo.config.app.$cookies.set('odoo-user', data?.login?.partner);
71+
context.$odoo.config.app.$cookies.set('odoo-user', data?.login?.partner, { sameSite: true });
6772
return data?.login?.partner;
6873

6974
},

0 commit comments

Comments
 (0)