Skip to content

Commit

Permalink
Merge pull request #56 from vuestorefront-community/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
odranoelBR authored Jun 19, 2023
2 parents 0e6c7ba + 50e3d67 commit 0706e6b
Show file tree
Hide file tree
Showing 27 changed files with 603 additions and 127 deletions.
2 changes: 1 addition & 1 deletion packages/api-client/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@vue-storefront/odoo-api",
"version": "1.5.1",
"version": "1.5.2",
"private": false,
"sideEffects": false,
"server": "server/index.js",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,6 @@ mutation updateAddress($id: Int!, $name: String!, $city: String!, $countryId: In
}
email
phone
zip
}
}`;
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import gql from 'graphql-tag';
import orderFragment from '@vue-storefront/odoo-api/src/fragments/orderFragment';
import orderFragment from '../../fragments/orderFragment';

export default gql`
mutation($products: [ProductInput]!){
Expand Down
19 changes: 19 additions & 0 deletions packages/api-client/src/api/getCategories/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,23 @@ import { FetchResult } from 'apollo-link';
import gql from 'graphql-tag';
import { CategoriesResult, GraphQlGetCategoriesParams } from '../../index';
import query from './getCategoriesQuery';
import { randomIntegerBetween } from '../../';

export default async function getCategories(
context: Context,
params: GraphQlGetCategoriesParams,
customQuery?: CustomQuery
): Promise<FetchResult<CategoriesResult>> {
const redisClient = context.client.redisTagClient;
const apolloClient = context.client.apollo as ApolloClient<any>;

const cacheKey = 'API-C-ALL-CATEGORIES';
let cachedCategories = null;

if (redisClient && (cachedCategories = await redisClient.get(cacheKey))) {
return cachedCategories;
}

const { getCategories } = context.extendQuery(
customQuery, { getCategories: { query, variables: params } }
);
Expand All @@ -24,5 +33,15 @@ export default async function getCategories(
fetchPolicy: 'no-cache'
});

delete response?.data?.cookie;
if (redisClient && response.data?.categories?.categories) {
redisClient.set(
cacheKey,
response,
[cacheKey],
{ timeout: process.env.REDIS_TTL_CACHE_MAXIMUM ? randomIntegerBetween(Number(process.env.REDIS_TTL_CACHE_MINIMUM), Number(process.env.REDIS_TTL_CACHE_MAXIMUM)) : 86400 }
);
}

return response;
}
4 changes: 2 additions & 2 deletions packages/api-client/src/api/getProductTemplatesList/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@ export default async function getProductTemplatesList(
delete response?.data?.cookie;
if (cacheKey &&
redisClient &&
response.data?.products &&
response.data?.products.length > 0 &&
response.data?.products?.products &&
response.data?.products?.products?.length > 0 &&
categoryIdForCache) {
redisClient.set(
cacheKey,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ mutation updateAddress($id: Int!, $name: String!, $city: String!, $countryId: In
street
street2
city
zip
state
{
id
Expand Down
2 changes: 2 additions & 0 deletions packages/api-client/src/fragments/orderFragment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ order {
image
imageFilename
displayName
combinationInfo
}
quantity
priceTotal
Expand All @@ -30,6 +31,7 @@ order {
image
imageFilename
displayName
combinationInfo
}
quantity
priceTotal
Expand Down
6 changes: 5 additions & 1 deletion packages/api-client/src/fragments/productFragment.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
export default `
id
firstVariant
firstVariant{
id
combinationInfoVariant
}
smallImage
price
name
description
image
imageFilename
combinationInfo
slug
sku
jsonLd
Expand Down
5 changes: 4 additions & 1 deletion packages/api-client/src/fragments/wishlistItemsFragment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@ wishlistItems {
price
imageFilename
isInWishlist
firstVariant
firstVariant{
id
combinationInfoVariant
}
slug
}
}
Expand Down
1 change: 1 addition & 0 deletions packages/api-client/src/setup/apolloClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ const createOddoLink = (settings: Config): any => {
uri: settings.graphqlBaseUrl,
credentials: 'include',
fetch,
fetchOptions: settings.fetchOptions,
headers: {
Cookie: settings.auth,
'resquest-host': settings['resquest-host'],
Expand Down
20 changes: 19 additions & 1 deletion packages/api-client/src/types/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -379,6 +379,23 @@ export type ProductImage = {
video: string;
};

export interface CombinationInfo {
product_id?: number;
product_template_id?: number;
display_name?: string;
display_image?: true;
price?: number;
list_price?: number;
has_discounted_price?: boolean;
reduced_price?: boolean;
discount?: number;
discount_perc?: number;
grade_name?: string;
grade_description?: string;
slug?: string;
stock_qty?: number;
}

export type Product = {
id: number;
description?: string;
Expand All @@ -387,6 +404,7 @@ export type Product = {
slug?: string;
isInStock?: boolean;
imageFilename?: string;
combinationInfo?: CombinationInfo;
qty?: number;
sku?: string;
image?: string;
Expand All @@ -400,7 +418,7 @@ export type Product = {
hasDiscountedPrice?: number;
listPrice?: number;
realProduct?: ProductVariant;
firstVariant?: number;
firstVariant?: Product;
currency?: Currency;
isInWishlist?: boolean;
alternativeProducts?: Product[];
Expand Down
4 changes: 2 additions & 2 deletions packages/composables/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@vue-storefront/odoo",
"version": "1.5.1",
"version": "1.5.2",
"private": false,
"sideEffects": false,
"main": "lib/index.cjs.js",
Expand All @@ -19,7 +19,7 @@
"dependencies": {
"@nuxtjs/composition-api": "0.31.0",
"@vue-storefront/core": "2.7.5",
"@vue-storefront/odoo-api": "1.5.1",
"@vue-storefront/odoo-api": "1.5.2",
"winston": "^3.8.2"
},
"peerDependencies": {
Expand Down
4 changes: 2 additions & 2 deletions packages/composables/src/composables/getters/cartGetters.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ export const getCartItemImage = (orderLine: OrderLine): string => {

export const getCartItemPrice = (orderLine: OrderLine): AgnosticPrice => {
return {
regular: orderLine?.priceTotal || 12,
special: orderLine?.priceTotal || 10
regular: orderLine?.product?.combinationInfo?.list_price || 0,
special: orderLine?.product?.combinationInfo?.price || 0
};
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ export const getProductSlug = (product: Product): string => product?.slug || '';

export const getProductPrice = (product: Product): AgnosticPrice => {
return {
regular: product?.listPrice || product?.price,
special: product?.listPrice || product?.price
regular: product?.combinationInfo?.list_price || product?.combinationInfo?.list_price,
special: product?.combinationInfo?.price || product?.combinationInfo?.price
};
};

Expand Down
18 changes: 16 additions & 2 deletions packages/composables/src/composables/useCart/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
/* eslint-disable @typescript-eslint/no-unused-vars */
/* istanbul ignore file */
const resolvePath = (object, path, defaultValue) => path
.split('.')
.reduce((o, p) => o ? o[p] : defaultValue, object);

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

const cookieIndex = context?.$odoo?.config?.app?.$config?.cart?.cookieIndex || 'orderLines.length';
context.$odoo.config.app.$cookies.set('cart-size', resolvePath(data?.cart?.order, cookieIndex, 0) || 0);

return data.cart;
},

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

const addItemParams: GraphQlCartAddItemParams = {
productId,
Expand All @@ -39,6 +45,9 @@ const params: UseCartFactoryParams<Cart, OrderLine, Product> = {
customQuery
);

const cookieIndex = context?.$odoo?.config?.app?.$config?.cart?.cookieIndex || 'orderLines.length';
context.$odoo.config.app.$cookies.set('cart-size', resolvePath(data?.cartAddItem?.order, cookieIndex, 0) || 0);

return data?.cartAddItem;
}

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

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

const cookieIndex = context?.$odoo?.config?.app?.$config?.cart?.cookieIndex || 'orderLines.length';
context.$odoo.config.app.$cookies.set('cart-size', resolvePath(data?.cartUpdateItem?.order, cookieIndex, 0) || 0);

return data?.cartUpdateItem;
},

Expand Down Expand Up @@ -104,7 +118,7 @@ const params: UseCartFactoryParams<Cart, OrderLine, Product> = {
isInCart: (context: Context, { currentCart, product }) => {
const productId = product.realProduct
? product.realProduct.product.id
: product.firstVariant;
: product.firstVariant.id;

return (
currentCart?.order?.orderLines?.some(
Expand Down
4 changes: 2 additions & 2 deletions packages/composables/src/composables/useFacet/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@ const factoryParams = {
let categoryIdForProductCache = null;
if (params.input.fetchCategory) {
categoryResponse = await context.$odoo.api.getCategory(params.input.categoryParams, customQueryCategories, params.input.categoryParams?.cacheKey);
categoryIdForProductCache = categoryResponse.data?.category.id;
categoryIdForProductCache = categoryResponse.data?.category?.id;
}
if (params.input.fetchCategories) {
categoriesResponse = await context.$odoo.api.getCategories(params.input.categoryParams, customQueryCategories, params.input.categoryParams?.cacheKey);
categoryIdForProductCache = categoriesResponse?.data?.categories?.categories?.[0].id;
categoryIdForProductCache = categoriesResponse?.data?.categories?.categories?.[0]?.id;
}

const { data: productData } = await context.$odoo.api.getProductTemplatesList(params.input.productParams, customQueryProducts, params.input.productParams?.cacheKey, categoryIdForProductCache);
Expand Down
12 changes: 12 additions & 0 deletions packages/composables/src/composables/useMultipleProduct/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@ import { Product, GraphQlAddMultipleProductsParams, GraphQlRemoveMultipleProduct
import { useMultipleProductFactory, UseMultipleProductFactoryParams } from '../../factories/useMultipleProductFactory';
import useCart from '../useCart';

const resolvePath = (object, path, defaultValue) => path
.split('.')
.reduce((o, p) => o ? o[p] : defaultValue, object);

const params: UseMultipleProductFactoryParams<Product, GraphQlAddMultipleProductsParams, GraphQlRemoveMultipleProductsParams, Cart> = {
provide() {
return {
Expand All @@ -17,6 +21,10 @@ const params: UseMultipleProductFactoryParams<Product, GraphQlAddMultipleProduct
const { data } = await context.$odoo.api.cartAddMultipleItems(params, customQuery);

context.useCart.setCart(data.cartAddMultipleItems);

const cookieIndex = context?.$odoo?.config?.app?.$config?.cart?.cookieIndex || 'orderLines.length';
context.$odoo.config.app.$cookies.set('cart-size', resolvePath(data?.cartAddMultipleItems?.order, cookieIndex, 0) || 0);

return data.cartAddMultipleItems;
},

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

context.useCart.setCart(data.cartRemoveMultipleItems);

const cookieIndex = context?.$odoo?.config?.app?.$config?.cart?.cookieIndex || 'orderLines.length';
context.$odoo.config.app.$cookies.set('cart-size', resolvePath(data?.cartRemoveMultipleItems?.order, cookieIndex, 0) || 0);

return data.cartRemoveMultipleItems;
}
};
Expand Down
19 changes: 12 additions & 7 deletions packages/composables/src/composables/useUser/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/* eslint-disable @typescript-eslint/no-unused-vars */
/* istanbul ignore file */

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

const throwErrors = (errors) => {
Expand All @@ -11,13 +11,18 @@ const throwErrors = (errors) => {
};

const factoryParams: UseUserFactoryParams<Partner, GraphQlUpdateAccountParams, any> = {
load: async (context: Context) => {
load: async (context: Context, params: any & { customQuery}) => {
const { customQuery } = params;
const user = context.$odoo.config.app.$cookies.get('odoo-user');
if (user) {
const { data, errors } = await context.$odoo.api.loadUser();

if (!user) {
const { data, errors } = await context.$odoo.api.loadUser(customQuery);
context.$odoo.config.app.$cookies.set('odoo-user', data?.partner, { sameSite: true });

return data?.partner;
}
return null;

return user;
},

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

throwErrors(errors);

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

return data?.register;

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

throwErrors(errors);

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

},
Expand Down
Loading

0 comments on commit 0706e6b

Please sign in to comment.