@q2devel/q2-core 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/cart/Cart.service.d.ts +27 -0
- package/dist/api/cart/Cart.service.d.ts.map +1 -0
- package/dist/api/cart/Cart.service.js +205 -0
- package/dist/api/cart/CartService.types.d.ts +156 -0
- package/dist/api/cart/CartService.types.d.ts.map +1 -0
- package/dist/api/cart/CartService.types.js +1 -0
- package/dist/api/checkout/Checkout.service.d.ts +10 -0
- package/dist/api/checkout/Checkout.service.d.ts.map +1 -0
- package/dist/api/checkout/Checkout.service.js +31 -0
- package/dist/api/checkout/CheckoutService.types.d.ts +57 -0
- package/dist/api/checkout/CheckoutService.types.d.ts.map +1 -0
- package/dist/api/checkout/CheckoutService.types.js +1 -0
- package/dist/api/content/getBanners.d.ts +9 -0
- package/dist/api/content/getBanners.d.ts.map +1 -0
- package/dist/api/content/getBanners.js +32 -0
- package/dist/api/content/getBlog.d.ts +11 -0
- package/dist/api/content/getBlog.d.ts.map +1 -0
- package/dist/api/content/getBlog.js +43 -0
- package/dist/api/getTerms.d.ts +10 -0
- package/dist/api/getTerms.d.ts.map +1 -0
- package/dist/api/getTerms.js +38 -0
- package/dist/api/products/getProducts.d.ts +27 -0
- package/dist/api/products/getProducts.d.ts.map +1 -0
- package/dist/api/products/getProducts.js +125 -0
- package/dist/api/user/getUserCart.d.ts +1 -0
- package/dist/api/user/getUserCart.d.ts.map +1 -0
- package/dist/api/user/getUserCart.js +1 -0
- package/dist/api/user/resetPassword.d.ts +8 -0
- package/dist/api/user/resetPassword.d.ts.map +1 -0
- package/dist/api/user/resetPassword.js +4 -0
- package/dist/api/wishlist/Wishlist.service.d.ts +12 -0
- package/dist/api/wishlist/Wishlist.service.d.ts.map +1 -0
- package/dist/api/wishlist/Wishlist.service.js +73 -0
- package/dist/api/wishlist/WishlistService.types.d.ts +77 -0
- package/dist/api/wishlist/WishlistService.types.d.ts.map +1 -0
- package/dist/api/wishlist/WishlistService.types.js +1 -0
- package/dist/context/cart/BasketContext.d.ts +38 -0
- package/dist/context/cart/BasketContext.d.ts.map +1 -0
- package/dist/context/cart/BasketContext.js +408 -0
- package/dist/context.d.ts +14 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +1 -0
- package/dist/hooks/cart/api/useAddToCart.d.ts +4 -0
- package/dist/hooks/cart/api/useAddToCart.d.ts.map +1 -0
- package/dist/hooks/cart/api/useAddToCart.js +17 -0
- package/dist/hooks/cart/api/useClearCart.d.ts +5 -0
- package/dist/hooks/cart/api/useClearCart.d.ts.map +1 -0
- package/dist/hooks/cart/api/useClearCart.js +17 -0
- package/dist/hooks/cart/api/useDeleteCartItem.d.ts +7 -0
- package/dist/hooks/cart/api/useDeleteCartItem.d.ts.map +1 -0
- package/dist/hooks/cart/api/useDeleteCartItem.js +24 -0
- package/dist/hooks/cart/api/useGetCartToken.d.ts +177 -0
- package/dist/hooks/cart/api/useGetCartToken.d.ts.map +1 -0
- package/dist/hooks/cart/api/useGetCartToken.js +42 -0
- package/dist/hooks/cart/api/useGetCurrentCart.d.ts +9 -0
- package/dist/hooks/cart/api/useGetCurrentCart.d.ts.map +1 -0
- package/dist/hooks/cart/api/useGetCurrentCart.js +13 -0
- package/dist/hooks/cart/api/useGetUserCart.d.ts +4 -0
- package/dist/hooks/cart/api/useGetUserCart.d.ts.map +1 -0
- package/dist/hooks/cart/api/useGetUserCart.js +14 -0
- package/dist/hooks/cart/api/useUpdateCart.d.ts +10 -0
- package/dist/hooks/cart/api/useUpdateCart.d.ts.map +1 -0
- package/dist/hooks/cart/api/useUpdateCart.js +22 -0
- package/dist/hooks/checkout/useUpdateCheckout.d.ts +7 -0
- package/dist/hooks/checkout/useUpdateCheckout.d.ts.map +1 -0
- package/dist/hooks/checkout/useUpdateCheckout.js +15 -0
- package/dist/hooks/wishlist/api/useAddToWishlist.d.ts +4 -0
- package/dist/hooks/wishlist/api/useAddToWishlist.d.ts.map +1 -0
- package/dist/hooks/wishlist/api/useAddToWishlist.js +12 -0
- package/dist/hooks/wishlist/api/useCreateWishlist.d.ts +4 -0
- package/dist/hooks/wishlist/api/useCreateWishlist.d.ts.map +1 -0
- package/dist/hooks/wishlist/api/useCreateWishlist.js +15 -0
- package/dist/hooks/wishlist/api/useDeleteWishlist.d.ts +4 -0
- package/dist/hooks/wishlist/api/useDeleteWishlist.d.ts.map +1 -0
- package/dist/hooks/wishlist/api/useDeleteWishlist.js +16 -0
- package/dist/hooks/wishlist/api/useDeleteWishlistItem.d.ts +4 -0
- package/dist/hooks/wishlist/api/useDeleteWishlistItem.d.ts.map +1 -0
- package/dist/hooks/wishlist/api/useDeleteWishlistItem.js +11 -0
- package/dist/hooks/wishlist/api/useGetWishlistItems.d.ts +3 -0
- package/dist/hooks/wishlist/api/useGetWishlistItems.d.ts.map +1 -0
- package/dist/hooks/wishlist/api/useGetWishlistItems.js +9 -0
- package/dist/hooks/wishlist/api/useGetWishlistList.d.ts +4 -0
- package/dist/hooks/wishlist/api/useGetWishlistList.d.ts.map +1 -0
- package/dist/hooks/wishlist/api/useGetWishlistList.js +13 -0
- package/dist/hooks/wishlist/useWishlist.d.ts +22 -0
- package/dist/hooks/wishlist/useWishlist.d.ts.map +1 -0
- package/dist/hooks/wishlist/useWishlist.js +202 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/types/ResetPassword.d.ts +8 -0
- package/dist/types/ResetPassword.d.ts.map +1 -0
- package/dist/types/ResetPassword.js +1 -0
- package/dist/types/Term.d.ts +15 -0
- package/dist/types/Term.d.ts.map +1 -0
- package/dist/types/Term.js +1 -0
- package/dist/types/content/Banners.d.ts +14 -0
- package/dist/types/content/Banners.d.ts.map +1 -0
- package/dist/types/content/Banners.js +1 -0
- package/dist/types/content/Blog.d.ts +12 -0
- package/dist/types/content/Blog.d.ts.map +1 -0
- package/dist/types/content/Blog.js +1 -0
- package/dist/types/content/ResetPassword.d.ts +8 -0
- package/dist/types/content/ResetPassword.d.ts.map +1 -0
- package/dist/types/content/ResetPassword.js +1 -0
- package/dist/types/products/Product.d.ts +69 -0
- package/dist/types/products/Product.d.ts.map +1 -0
- package/dist/types/products/Product.js +1 -0
- package/dist/types/user/ResetPassword.d.ts +8 -0
- package/dist/types/user/ResetPassword.d.ts.map +1 -0
- package/dist/types/user/ResetPassword.js +1 -0
- package/dist/types/wishlist/Wishlist.d.ts +31 -0
- package/dist/types/wishlist/Wishlist.d.ts.map +1 -0
- package/dist/types/wishlist/Wishlist.js +1 -0
- package/dist/utils/generalHelper.d.ts +12 -0
- package/dist/utils/generalHelper.d.ts.map +1 -0
- package/dist/utils/generalHelper.js +37 -0
- package/dist/utils/mapIncludedResources.d.ts +21 -0
- package/dist/utils/mapIncludedResources.d.ts.map +1 -0
- package/dist/utils/mapIncludedResources.js +37 -0
- package/package.json +31 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// api/getTerms.ts
|
|
2
|
+
import { DrupalJsonApiParams } from 'drupal-jsonapi-params';
|
|
3
|
+
import mapIncludedResources from '../utils/mapIncludedResources';
|
|
4
|
+
export const getTerms = async (ctx, { categoryId, include = ['parent'], mapFn }) => {
|
|
5
|
+
const cacheKey = ['terms', ctx.locale, ...(categoryId ?? []), ...(include ?? [])].join(':');
|
|
6
|
+
if (ctx.getCache) {
|
|
7
|
+
const cached = await ctx.getCache(cacheKey);
|
|
8
|
+
if (cached)
|
|
9
|
+
return cached;
|
|
10
|
+
}
|
|
11
|
+
const params = new DrupalJsonApiParams()
|
|
12
|
+
.addInclude(include)
|
|
13
|
+
.addFilter('langcode', ctx.locale);
|
|
14
|
+
if (categoryId) {
|
|
15
|
+
params.addFilter('drupal_internal__tid', categoryId, 'IN');
|
|
16
|
+
}
|
|
17
|
+
const url = ctx.locale === ctx.defaultLocale
|
|
18
|
+
? `/jsonapi/taxonomy_term/produktykategorie`
|
|
19
|
+
: `/${ctx.locale}/jsonapi/taxonomy_term/produktykategorie`;
|
|
20
|
+
const { data } = await ctx.axios.get(`${url}?${params.getQueryString()}`);
|
|
21
|
+
const resources = mapIncludedResources(data);
|
|
22
|
+
// awaitujeme mapFn u každého elementu, pokud je zadán
|
|
23
|
+
const mapped = await Promise.all(resources.map(async (item) => {
|
|
24
|
+
const base = {
|
|
25
|
+
uuid: item.id,
|
|
26
|
+
id: item.drupal_internal__tid,
|
|
27
|
+
type: item.type ?? 'default',
|
|
28
|
+
name: item.name,
|
|
29
|
+
description: item.description?.processed ?? '',
|
|
30
|
+
parent: item.parent?.[0],
|
|
31
|
+
};
|
|
32
|
+
return mapFn ? await mapFn(base, item) : base;
|
|
33
|
+
}));
|
|
34
|
+
if (ctx.setCache) {
|
|
35
|
+
await ctx.setCache(cacheKey, mapped);
|
|
36
|
+
}
|
|
37
|
+
return mapped;
|
|
38
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { CoreContext } from '../../context';
|
|
2
|
+
import { Product } from '../../types/products/Product';
|
|
3
|
+
type GetProductsParams = {
|
|
4
|
+
categoryId?: string[];
|
|
5
|
+
productId?: string;
|
|
6
|
+
searchTerm?: string;
|
|
7
|
+
limit?: number;
|
|
8
|
+
offset?: number;
|
|
9
|
+
filters?: Array<{
|
|
10
|
+
path: string;
|
|
11
|
+
value: string | string[] | null;
|
|
12
|
+
operator?: string;
|
|
13
|
+
}>;
|
|
14
|
+
sort?: string;
|
|
15
|
+
tag?: string;
|
|
16
|
+
include?: string[];
|
|
17
|
+
cache?: boolean;
|
|
18
|
+
};
|
|
19
|
+
export declare const getProducts: (ctx: CoreContext, { categoryId, productId, searchTerm, limit, offset, filters, sort, tag, include, cache, }: GetProductsParams) => Promise<Product[]>;
|
|
20
|
+
type GetProductCountParams = {
|
|
21
|
+
categoryId?: string[];
|
|
22
|
+
tag?: string;
|
|
23
|
+
cache?: boolean;
|
|
24
|
+
};
|
|
25
|
+
export declare const getProductCount: (ctx: CoreContext, { categoryId, tag, cache, }: GetProductCountParams) => Promise<number>;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=getProducts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getProducts.d.ts","sourceRoot":"","sources":["../../../api/products/getProducts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAI5C,OAAO,EAAE,OAAO,EAAuB,MAAM,8BAA8B,CAAC;AAE5E,KAAK,iBAAiB,GAAG;IACvB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;QAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,WAAW,GACtB,KAAK,WAAW,EAChB,2FAWG,iBAAiB,KACnB,OAAO,CAAC,OAAO,EAAE,CAwGnB,CAAC;AAGF,KAAK,qBAAqB,GAAG;IAC3B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,KAAK,WAAW,EAChB,6BAIG,qBAAqB,KACvB,OAAO,CAAC,MAAM,CAgChB,CAAC"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { DrupalJsonApiParams } from 'drupal-jsonapi-params';
|
|
2
|
+
import mapIncludedResources from '../../utils/mapIncludedResources';
|
|
3
|
+
import { getDiscountPercent, handleSortChange } from '../../utils/generalHelper';
|
|
4
|
+
export const getProducts = async (ctx, { categoryId, productId, searchTerm, limit, offset, filters = [], sort = '', tag = '', include = ['product_id', 'product_id.field_category'], cache = true, }) => {
|
|
5
|
+
const cacheKey = ['products', ctx.locale,
|
|
6
|
+
categoryId?.length ? `cat:${categoryId.join(',')}` : '',
|
|
7
|
+
productId ? `id:${productId}` : '',
|
|
8
|
+
searchTerm ? `search:${searchTerm}` : '',
|
|
9
|
+
limit ? `limit:${limit}` : '',
|
|
10
|
+
offset ? `offset:${offset}` : '',
|
|
11
|
+
filters.length ? `filters:${JSON.stringify(filters)}` : '',
|
|
12
|
+
sort ? `sort:${sort}` : '',
|
|
13
|
+
tag ? `tag:${tag}` : '',
|
|
14
|
+
].filter(Boolean).join(':');
|
|
15
|
+
// if (cache && ctx.getCache) {
|
|
16
|
+
// const cached = await ctx.getCache<Product[]>(cacheKey);
|
|
17
|
+
// if (cached) return cached;
|
|
18
|
+
// }
|
|
19
|
+
const params = new DrupalJsonApiParams().addInclude(include);
|
|
20
|
+
if (tag)
|
|
21
|
+
params.addFilter(`product_id.${tag}`, '1');
|
|
22
|
+
if (categoryId)
|
|
23
|
+
params.addFilter('tid', categoryId, 'IN');
|
|
24
|
+
if (productId)
|
|
25
|
+
params.addFilter('variation_id', productId);
|
|
26
|
+
if (searchTerm)
|
|
27
|
+
params.addFilter('title', searchTerm);
|
|
28
|
+
if (limit)
|
|
29
|
+
params.addPageLimit(limit);
|
|
30
|
+
if (offset)
|
|
31
|
+
params.addPageOffset(offset);
|
|
32
|
+
if (sort) {
|
|
33
|
+
const sortData = handleSortChange(sort);
|
|
34
|
+
if (sortData) {
|
|
35
|
+
params.addSort(sortData.title, sortData.direction);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const url = ctx.locale === ctx.defaultLocale
|
|
39
|
+
? `/jsonapi/index/variation`
|
|
40
|
+
: `/${ctx.locale}/jsonapi/index/variation`;
|
|
41
|
+
const { data } = await ctx.axios.get(`${url}?${params.getQueryString()}`);
|
|
42
|
+
const resolvedProducts = mapIncludedResources(data);
|
|
43
|
+
const mappedProducts = resolvedProducts.map((item) => {
|
|
44
|
+
const default_product = item.product_id;
|
|
45
|
+
const images = default_product.field_image ?? [];
|
|
46
|
+
const discountPercent = getDiscountPercent(item.price, item.list_price);
|
|
47
|
+
//optional badges -demo purposes
|
|
48
|
+
const badges = [
|
|
49
|
+
...(item.field_news ? [{ text: 'Novinka', color: 'bg-green-100 text-green-800' }] : []),
|
|
50
|
+
...(item.field_aftersale ? [{ text: 'Doprodej', color: 'bg-red-100 text-red-800' }] : []),
|
|
51
|
+
];
|
|
52
|
+
const variations = default_product.variations?.map((v) => {
|
|
53
|
+
const discountPercentVariation = getDiscountPercent(v.price, v.list_price);
|
|
54
|
+
return {
|
|
55
|
+
uuid: v.id,
|
|
56
|
+
id: v.drupal_internal__variation_id,
|
|
57
|
+
title: v.title,
|
|
58
|
+
sku: v.sku,
|
|
59
|
+
price: v?.list_price?.number ? v.list_price.number : v.price?.number ?? 0,
|
|
60
|
+
discountPercentVariation,
|
|
61
|
+
ean: v.field_ean,
|
|
62
|
+
stock: v?.field_stock_level?.available_stock ?? 0,
|
|
63
|
+
};
|
|
64
|
+
}) ?? [];
|
|
65
|
+
return {
|
|
66
|
+
variation_id: item.drupal_internal__variation_id,
|
|
67
|
+
variation_uuid: item.id,
|
|
68
|
+
type: item.type,
|
|
69
|
+
variation_name: item.title,
|
|
70
|
+
sku: item.field_sku ?? '',
|
|
71
|
+
description: default_product.body?.value ?? '',
|
|
72
|
+
price: item?.list_price?.number ? item.list_price.number : item.price?.number ?? 0,
|
|
73
|
+
discountPercent,
|
|
74
|
+
product_id: default_product.drupal_internal__product_id,
|
|
75
|
+
product_name: default_product.title,
|
|
76
|
+
changed: item.changed,
|
|
77
|
+
category: default_product.field_category ?? '',
|
|
78
|
+
images: images.length > 0
|
|
79
|
+
? images.map((img) => ({
|
|
80
|
+
href: ctx.makeAbsoluteUrl(img.field_media_image?.uri?.url),
|
|
81
|
+
alt: img.name,
|
|
82
|
+
}))
|
|
83
|
+
: [{ href: '/q2_logo.png', alt: 'Q2' }],
|
|
84
|
+
badges,
|
|
85
|
+
variations,
|
|
86
|
+
// Additional fields can be added here if needed - demo purposes
|
|
87
|
+
field_news: item.field_news ?? false,
|
|
88
|
+
field_aftersale: item.field_aftersale ?? false,
|
|
89
|
+
field_care: default_product.field_care ?? [],
|
|
90
|
+
field_features: default_product.field_features ?? [],
|
|
91
|
+
field_returns: default_product.field_returns ?? [],
|
|
92
|
+
field_shipping: default_product.field_shipping ?? [],
|
|
93
|
+
};
|
|
94
|
+
});
|
|
95
|
+
if (cache && ctx.setCache) {
|
|
96
|
+
await ctx.setCache(cacheKey, mappedProducts);
|
|
97
|
+
}
|
|
98
|
+
return mappedProducts;
|
|
99
|
+
};
|
|
100
|
+
export const getProductCount = async (ctx, { categoryId = [], tag = '', cache = true, }) => {
|
|
101
|
+
const cacheKey = ['productCount', ctx.locale,
|
|
102
|
+
categoryId?.length ? `cat:${categoryId.join(',')}` : '',
|
|
103
|
+
tag ? `tag:${tag}` : '',
|
|
104
|
+
].filter(Boolean).join(':');
|
|
105
|
+
// if (cache && ctx.getCache) {
|
|
106
|
+
// const cached = await ctx.getCache<number>(cacheKey);
|
|
107
|
+
// if (cached !== null) return cached;
|
|
108
|
+
// }
|
|
109
|
+
const params = new DrupalJsonApiParams();
|
|
110
|
+
if (categoryId.length > 0) {
|
|
111
|
+
params.addFilter('tid', categoryId, 'IN');
|
|
112
|
+
}
|
|
113
|
+
if (tag) {
|
|
114
|
+
params.addFilter(`product_id.${tag}`, '1');
|
|
115
|
+
}
|
|
116
|
+
params.addPageLimit(1); // limit 1, protože chceme jen count
|
|
117
|
+
const url = ctx.locale === ctx.defaultLocale
|
|
118
|
+
? `/jsonapi/index/variation`
|
|
119
|
+
: `/${ctx.locale}/jsonapi/index/variation`;
|
|
120
|
+
const { data } = await ctx.axios.get(`${url}?${params.getQueryString()}`);
|
|
121
|
+
if (cache && ctx.setCache) {
|
|
122
|
+
await ctx.setCache(cacheKey, data.meta?.count ?? 0);
|
|
123
|
+
}
|
|
124
|
+
return data.meta?.count ?? 0;
|
|
125
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=getUserCart.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getUserCart.d.ts","sourceRoot":"","sources":["../../../api/user/getUserCart.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { CoreContext } from '../../context';
|
|
2
|
+
import { ResetPasswordResponse } from '../../types/user/ResetPassword';
|
|
3
|
+
type ResetPasswordParams = {
|
|
4
|
+
email: string;
|
|
5
|
+
};
|
|
6
|
+
export declare const resetPassword: (ctx: CoreContext, { email }: ResetPasswordParams) => Promise<ResetPasswordResponse>;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=resetPassword.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resetPassword.d.ts","sourceRoot":"","sources":["../../../api/user/resetPassword.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,KAAK,mBAAmB,GAAG;IACzB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,KAAK,WAAW,EAChB,WAAW,mBAAmB,KAC7B,OAAO,CAAC,qBAAqB,CAG/B,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { AxiosRequestConfig } from 'axios';
|
|
2
|
+
import { CoreContext } from '../../context';
|
|
3
|
+
import { AddToWishlistRequest, CreateWishlistRequest, CreateWishlistResponse, DeleteWishlistItemRequest, DeleteWishlistRequest, GetWishlistItemsResponse, GetWishlistResponse, UpdateWishlistItemRequest, UpdateWishlistRequest, UpdateWishlistResponse } from './WishlistService.types';
|
|
4
|
+
export declare const createWishlist: (ctx: CoreContext, request: CreateWishlistRequest, config?: AxiosRequestConfig) => Promise<CreateWishlistResponse>;
|
|
5
|
+
export declare const getWishlistList: (ctx: CoreContext, config?: AxiosRequestConfig) => Promise<GetWishlistResponse>;
|
|
6
|
+
export declare const updateWishlist: (ctx: CoreContext, request: UpdateWishlistRequest, config?: AxiosRequestConfig) => Promise<UpdateWishlistResponse>;
|
|
7
|
+
export declare const deleteWishlist: (ctx: CoreContext, request: DeleteWishlistRequest, config?: AxiosRequestConfig) => Promise<void>;
|
|
8
|
+
export declare const addToWishlist: (ctx: CoreContext, request: AddToWishlistRequest, config?: AxiosRequestConfig) => Promise<void>;
|
|
9
|
+
export declare const updateWishlistItem: (ctx: CoreContext, request: UpdateWishlistItemRequest, config?: AxiosRequestConfig) => Promise<void>;
|
|
10
|
+
export declare const deleteWishlistItem: (ctx: CoreContext, request: DeleteWishlistItemRequest, config?: AxiosRequestConfig) => Promise<void>;
|
|
11
|
+
export declare const getWishlistItems: (ctx: CoreContext, wishlistIds: string[], config?: AxiosRequestConfig) => Promise<GetWishlistItemsResponse>;
|
|
12
|
+
//# sourceMappingURL=Wishlist.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Wishlist.service.d.ts","sourceRoot":"","sources":["../../../api/wishlist/Wishlist.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAG3C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,yBAAyB,EACzB,qBAAqB,EACrB,wBAAwB,EACxB,mBAAmB,EACnB,yBAAyB,EACzB,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,yBAAyB,CAAC;AAQjC,eAAO,MAAM,cAAc,GACzB,KAAK,WAAW,EAChB,SAAS,qBAAqB,EAC9B,SAAQ,kBAAuB,KAC9B,OAAO,CAAC,sBAAsB,CAMhC,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,KAAK,WAAW,EAChB,SAAQ,kBAAuB,KAC9B,OAAO,CAAC,mBAAmB,CAM7B,CAAC;AAEF,eAAO,MAAM,cAAc,GACzB,KAAK,WAAW,EAChB,SAAS,qBAAqB,EAC9B,SAAQ,kBAAuB,KAC9B,OAAO,CAAC,sBAAsB,CAMhC,CAAC;AAEF,eAAO,MAAM,cAAc,GACzB,KAAK,WAAW,EAChB,SAAS,qBAAqB,EAC9B,SAAQ,kBAAuB,KAC9B,OAAO,CAAC,IAAI,CAMd,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,KAAK,WAAW,EAChB,SAAS,oBAAoB,EAC7B,SAAQ,kBAAuB,KAC9B,OAAO,CAAC,IAAI,CAKd,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,KAAK,WAAW,EAChB,SAAS,yBAAyB,EAClC,SAAQ,kBAAuB,KAC9B,OAAO,CAAC,IAAI,CAKd,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,KAAK,WAAW,EAChB,SAAS,yBAAyB,EAClC,SAAQ,kBAAuB,KAC9B,OAAO,CAAC,IAAI,CAMd,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,KAAK,WAAW,EAChB,aAAa,MAAM,EAAE,EACrB,SAAQ,kBAAuB,KAC9B,OAAO,CAAC,wBAAwB,CAyBlC,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { DrupalJsonApiParams } from 'drupal-jsonapi-params';
|
|
2
|
+
import mapIncludedResources from '../../utils/mapIncludedResources';
|
|
3
|
+
const getHeaders = (ctx, customHeaders = {}) => ({
|
|
4
|
+
'Content-Type': 'application/vnd.api+json',
|
|
5
|
+
...(ctx.accessToken && { Authorization: `Bearer ${ctx.accessToken}` }),
|
|
6
|
+
...customHeaders,
|
|
7
|
+
});
|
|
8
|
+
export const createWishlist = async (ctx, request, config = {}) => {
|
|
9
|
+
const { data } = await ctx.axios.post('/wishlist', request, {
|
|
10
|
+
...config,
|
|
11
|
+
headers: getHeaders(ctx, config.headers),
|
|
12
|
+
});
|
|
13
|
+
return data;
|
|
14
|
+
};
|
|
15
|
+
export const getWishlistList = async (ctx, config = {}) => {
|
|
16
|
+
const { data } = await ctx.axios.get('/wishlist', {
|
|
17
|
+
...config,
|
|
18
|
+
headers: getHeaders(ctx, config.headers),
|
|
19
|
+
});
|
|
20
|
+
return data;
|
|
21
|
+
};
|
|
22
|
+
export const updateWishlist = async (ctx, request, config = {}) => {
|
|
23
|
+
const { data } = await ctx.axios.put('/wishlist', request, {
|
|
24
|
+
...config,
|
|
25
|
+
headers: getHeaders(ctx, config.headers),
|
|
26
|
+
});
|
|
27
|
+
return data;
|
|
28
|
+
};
|
|
29
|
+
export const deleteWishlist = async (ctx, request, config = {}) => {
|
|
30
|
+
await ctx.axios.delete('/wishlist', {
|
|
31
|
+
...config,
|
|
32
|
+
data: request,
|
|
33
|
+
headers: getHeaders(ctx, config.headers),
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
export const addToWishlist = async (ctx, request, config = {}) => {
|
|
37
|
+
await ctx.axios.post('/wishlistItem', request, {
|
|
38
|
+
...config,
|
|
39
|
+
headers: getHeaders(ctx, config.headers),
|
|
40
|
+
});
|
|
41
|
+
};
|
|
42
|
+
export const updateWishlistItem = async (ctx, request, config = {}) => {
|
|
43
|
+
await ctx.axios.put('/wishlistItem', request, {
|
|
44
|
+
...config,
|
|
45
|
+
headers: getHeaders(ctx, config.headers),
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
export const deleteWishlistItem = async (ctx, request, config = {}) => {
|
|
49
|
+
await ctx.axios.delete('/wishlistItem', {
|
|
50
|
+
...config,
|
|
51
|
+
data: request,
|
|
52
|
+
headers: getHeaders(ctx, config.headers),
|
|
53
|
+
});
|
|
54
|
+
};
|
|
55
|
+
export const getWishlistItems = async (ctx, wishlistIds, config = {}) => {
|
|
56
|
+
if (!wishlistIds.length) {
|
|
57
|
+
return { data: [] };
|
|
58
|
+
}
|
|
59
|
+
const params = new DrupalJsonApiParams()
|
|
60
|
+
.addFilter('wishlist_id.meta.drupal_internal__target_id', wishlistIds, 'IN')
|
|
61
|
+
.addInclude(['variation_id', 'wishlist_id', 'variation_id.product_id']);
|
|
62
|
+
const { data } = await ctx.axios.get(`/jsonapi/wishlist_item/wishlist_item?${params.getQueryString()}`, {
|
|
63
|
+
...config,
|
|
64
|
+
headers: getHeaders(ctx, config.headers),
|
|
65
|
+
});
|
|
66
|
+
if (!data.data || (Array.isArray(data.data) && data.data.length === 0)) {
|
|
67
|
+
return { data: [] };
|
|
68
|
+
}
|
|
69
|
+
const mappedItems = mapIncludedResources(data);
|
|
70
|
+
return {
|
|
71
|
+
data: mappedItems,
|
|
72
|
+
};
|
|
73
|
+
};
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
export type CreateWishlistRequest = {
|
|
2
|
+
name: string;
|
|
3
|
+
note: string;
|
|
4
|
+
};
|
|
5
|
+
export type CreateWishlistResponse = {
|
|
6
|
+
data: {
|
|
7
|
+
id: string;
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
export type WishlistItem = {
|
|
11
|
+
id: string;
|
|
12
|
+
drupalId: number;
|
|
13
|
+
quantity: number;
|
|
14
|
+
productId: string;
|
|
15
|
+
productDrupalId: number;
|
|
16
|
+
wishlistId: string;
|
|
17
|
+
wishlistDrupalId: number;
|
|
18
|
+
drupal_internal__id: number;
|
|
19
|
+
productDetails?: {
|
|
20
|
+
name: string;
|
|
21
|
+
description: string;
|
|
22
|
+
body?: string;
|
|
23
|
+
field_features?: string[];
|
|
24
|
+
field_care?: string[];
|
|
25
|
+
field_returns?: string[];
|
|
26
|
+
field_shipping?: string[];
|
|
27
|
+
field_news?: boolean;
|
|
28
|
+
field_aftersale?: boolean;
|
|
29
|
+
price?: number;
|
|
30
|
+
variationId?: string;
|
|
31
|
+
sku?: string;
|
|
32
|
+
} | null;
|
|
33
|
+
};
|
|
34
|
+
export type Wishlist = {
|
|
35
|
+
wishlist_id: string;
|
|
36
|
+
name: string;
|
|
37
|
+
owner: string;
|
|
38
|
+
note: string | null;
|
|
39
|
+
items_count: number;
|
|
40
|
+
};
|
|
41
|
+
export type GetWishlistResponse = {
|
|
42
|
+
message: string;
|
|
43
|
+
wishlist_ids: Wishlist[];
|
|
44
|
+
};
|
|
45
|
+
export type GetWishlistItemsResponse = {
|
|
46
|
+
data: WishlistItem[];
|
|
47
|
+
};
|
|
48
|
+
export type UpdateWishlistRequest = {
|
|
49
|
+
wishlist_id: string;
|
|
50
|
+
name?: string;
|
|
51
|
+
note?: string;
|
|
52
|
+
};
|
|
53
|
+
export type UpdateWishlistResponse = {
|
|
54
|
+
data: {
|
|
55
|
+
id: string;
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
export type DeleteWishlistRequest = {
|
|
59
|
+
wishlist_id: string;
|
|
60
|
+
};
|
|
61
|
+
export type AddToWishlistRequest = {
|
|
62
|
+
wishlist_id: string;
|
|
63
|
+
variation_id: string;
|
|
64
|
+
quantity: number;
|
|
65
|
+
};
|
|
66
|
+
export type UpdateWishlistItemRequest = {
|
|
67
|
+
wishlist_item_id: string;
|
|
68
|
+
wishlist_id?: string;
|
|
69
|
+
variation_id?: string;
|
|
70
|
+
quantity?: number;
|
|
71
|
+
};
|
|
72
|
+
export type DeleteWishlistItemRequest = {
|
|
73
|
+
wishlist_item_id: string;
|
|
74
|
+
wishlist_id?: string;
|
|
75
|
+
variation_id?: string;
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=WishlistService.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WishlistService.types.d.ts","sourceRoot":"","sources":["../../../api/wishlist/WishlistService.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACjC,IAAI,EAAE;QACF,EAAE,EAAE,MAAM,CAAA;KACb,CAAA;CACJ,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,MAAM,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,gBAAgB,EAAE,MAAM,CAAA;IACxB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,cAAc,CAAC,EAAE;QACb,IAAI,EAAE,MAAM,CAAA;QACZ,WAAW,EAAE,MAAM,CAAA;QACnB,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;QACzB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;QACrB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;QACxB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;QACzB,UAAU,CAAC,EAAE,OAAO,CAAA;QACpB,eAAe,CAAC,EAAE,OAAO,CAAA;QACzB,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,GAAG,CAAC,EAAE,MAAM,CAAA;KACf,GAAG,IAAI,CAAA;CACX,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,QAAQ,EAAE,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG;IACnC,IAAI,EAAE,YAAY,EAAE,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAChC,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACjC,IAAI,EAAE;QACF,EAAE,EAAE,MAAM,CAAA;KACb,CAAA;CACJ,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAChC,WAAW,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IAC/B,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,yBAAyB,GAAG;IACpC,gBAAgB,EAAE,MAAM,CAAA;IACxB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,yBAAyB,GAAG;IACpC,gBAAgB,EAAE,MAAM,CAAA;IACxB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { BasketProduct } from '../../api/cart/CartService.types';
|
|
2
|
+
import { CheckoutRequest, UserCheckoutRequest } from '../../api/checkout/CheckoutService.types';
|
|
3
|
+
import { Product } from '../../types/products/Product';
|
|
4
|
+
import { AxiosError } from 'axios';
|
|
5
|
+
import { ReactNode } from 'react';
|
|
6
|
+
import { CoreContext } from '../../context';
|
|
7
|
+
type BasketContextType = {
|
|
8
|
+
basketProducts: BasketProduct[];
|
|
9
|
+
subtotal: number;
|
|
10
|
+
totalItems: number;
|
|
11
|
+
addToBasket: (product: Product, quantity?: number) => Promise<void>;
|
|
12
|
+
addMultipleToBasket: (products: Product[], quantity?: number) => Promise<void>;
|
|
13
|
+
removeFromBasket: (productId: string) => Promise<void>;
|
|
14
|
+
updateQuantity: (productId: string, quantity: number) => Promise<void>;
|
|
15
|
+
clearBasket: () => Promise<void>;
|
|
16
|
+
isBasketOpen: boolean;
|
|
17
|
+
openBasket: () => void;
|
|
18
|
+
closeBasket: () => void;
|
|
19
|
+
isLoading: boolean;
|
|
20
|
+
getProductQuantityInBasket: (productId: string) => number;
|
|
21
|
+
updateOrderForCheckout: (request: CheckoutRequest | UserCheckoutRequest, callbacks?: CheckoutCallbacks) => Promise<void>;
|
|
22
|
+
getDrupalOrderId: () => number | null;
|
|
23
|
+
pendingUpdates: Record<string, number>;
|
|
24
|
+
processingItems: Record<string, boolean>;
|
|
25
|
+
isAddingToCart: boolean;
|
|
26
|
+
};
|
|
27
|
+
type CheckoutCallbacks = {
|
|
28
|
+
onSuccess?: () => void;
|
|
29
|
+
onError?: (error: AxiosError<any>) => void;
|
|
30
|
+
};
|
|
31
|
+
type BasketProviderProps = {
|
|
32
|
+
children: ReactNode;
|
|
33
|
+
ctx: CoreContext;
|
|
34
|
+
};
|
|
35
|
+
export declare const BasketProvider: ({ children, ctx }: BasketProviderProps) => import("react/jsx-runtime").JSX.Element;
|
|
36
|
+
export declare const useBasket: () => BasketContextType;
|
|
37
|
+
export {};
|
|
38
|
+
//# sourceMappingURL=BasketContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BasketContext.d.ts","sourceRoot":"","sources":["../../../context/cart/BasketContext.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAA;AAUhE,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAA;AAC/F,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAClC,OAAO,EAAiB,SAAS,EAA2C,MAAM,OAAO,CAAA;AACzF,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAM3C,KAAK,iBAAiB,GAAG;IACrB,cAAc,EAAE,aAAa,EAAE,CAAA;IAC/B,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACnE,mBAAmB,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9E,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACtD,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACtE,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAChC,YAAY,EAAE,OAAO,CAAA;IACrB,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,WAAW,EAAE,MAAM,IAAI,CAAA;IACvB,SAAS,EAAE,OAAO,CAAA;IAClB,0BAA0B,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAA;IACzD,sBAAsB,EAAE,CACpB,OAAO,EAAE,eAAe,GAAG,mBAAmB,EAC9C,SAAS,CAAC,EAAE,iBAAiB,KAC5B,OAAO,CAAC,IAAI,CAAC,CAAA;IAClB,gBAAgB,EAAE,MAAM,MAAM,GAAG,IAAI,CAAA;IACrC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACtC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACxC,cAAc,EAAE,OAAO,CAAA;CAC1B,CAAA;AAED,KAAK,iBAAiB,GAAG;IACrB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,KAAK,IAAI,CAAA;CAC7C,CAAA;AAID,KAAK,mBAAmB,GAAG;IACvB,QAAQ,EAAE,SAAS,CAAA;IACnB,GAAG,EAAE,WAAW,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,mBAAmB,mBAAmB,4CA4cpE,CAAA;AAED,eAAO,MAAM,SAAS,QAAO,iBAM5B,CAAA"}
|