@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.
Files changed (121) hide show
  1. package/dist/api/cart/Cart.service.d.ts +27 -0
  2. package/dist/api/cart/Cart.service.d.ts.map +1 -0
  3. package/dist/api/cart/Cart.service.js +205 -0
  4. package/dist/api/cart/CartService.types.d.ts +156 -0
  5. package/dist/api/cart/CartService.types.d.ts.map +1 -0
  6. package/dist/api/cart/CartService.types.js +1 -0
  7. package/dist/api/checkout/Checkout.service.d.ts +10 -0
  8. package/dist/api/checkout/Checkout.service.d.ts.map +1 -0
  9. package/dist/api/checkout/Checkout.service.js +31 -0
  10. package/dist/api/checkout/CheckoutService.types.d.ts +57 -0
  11. package/dist/api/checkout/CheckoutService.types.d.ts.map +1 -0
  12. package/dist/api/checkout/CheckoutService.types.js +1 -0
  13. package/dist/api/content/getBanners.d.ts +9 -0
  14. package/dist/api/content/getBanners.d.ts.map +1 -0
  15. package/dist/api/content/getBanners.js +32 -0
  16. package/dist/api/content/getBlog.d.ts +11 -0
  17. package/dist/api/content/getBlog.d.ts.map +1 -0
  18. package/dist/api/content/getBlog.js +43 -0
  19. package/dist/api/getTerms.d.ts +10 -0
  20. package/dist/api/getTerms.d.ts.map +1 -0
  21. package/dist/api/getTerms.js +38 -0
  22. package/dist/api/products/getProducts.d.ts +27 -0
  23. package/dist/api/products/getProducts.d.ts.map +1 -0
  24. package/dist/api/products/getProducts.js +125 -0
  25. package/dist/api/user/getUserCart.d.ts +1 -0
  26. package/dist/api/user/getUserCart.d.ts.map +1 -0
  27. package/dist/api/user/getUserCart.js +1 -0
  28. package/dist/api/user/resetPassword.d.ts +8 -0
  29. package/dist/api/user/resetPassword.d.ts.map +1 -0
  30. package/dist/api/user/resetPassword.js +4 -0
  31. package/dist/api/wishlist/Wishlist.service.d.ts +12 -0
  32. package/dist/api/wishlist/Wishlist.service.d.ts.map +1 -0
  33. package/dist/api/wishlist/Wishlist.service.js +73 -0
  34. package/dist/api/wishlist/WishlistService.types.d.ts +77 -0
  35. package/dist/api/wishlist/WishlistService.types.d.ts.map +1 -0
  36. package/dist/api/wishlist/WishlistService.types.js +1 -0
  37. package/dist/context/cart/BasketContext.d.ts +38 -0
  38. package/dist/context/cart/BasketContext.d.ts.map +1 -0
  39. package/dist/context/cart/BasketContext.js +408 -0
  40. package/dist/context.d.ts +14 -0
  41. package/dist/context.d.ts.map +1 -0
  42. package/dist/context.js +1 -0
  43. package/dist/hooks/cart/api/useAddToCart.d.ts +4 -0
  44. package/dist/hooks/cart/api/useAddToCart.d.ts.map +1 -0
  45. package/dist/hooks/cart/api/useAddToCart.js +17 -0
  46. package/dist/hooks/cart/api/useClearCart.d.ts +5 -0
  47. package/dist/hooks/cart/api/useClearCart.d.ts.map +1 -0
  48. package/dist/hooks/cart/api/useClearCart.js +17 -0
  49. package/dist/hooks/cart/api/useDeleteCartItem.d.ts +7 -0
  50. package/dist/hooks/cart/api/useDeleteCartItem.d.ts.map +1 -0
  51. package/dist/hooks/cart/api/useDeleteCartItem.js +24 -0
  52. package/dist/hooks/cart/api/useGetCartToken.d.ts +177 -0
  53. package/dist/hooks/cart/api/useGetCartToken.d.ts.map +1 -0
  54. package/dist/hooks/cart/api/useGetCartToken.js +42 -0
  55. package/dist/hooks/cart/api/useGetCurrentCart.d.ts +9 -0
  56. package/dist/hooks/cart/api/useGetCurrentCart.d.ts.map +1 -0
  57. package/dist/hooks/cart/api/useGetCurrentCart.js +13 -0
  58. package/dist/hooks/cart/api/useGetUserCart.d.ts +4 -0
  59. package/dist/hooks/cart/api/useGetUserCart.d.ts.map +1 -0
  60. package/dist/hooks/cart/api/useGetUserCart.js +14 -0
  61. package/dist/hooks/cart/api/useUpdateCart.d.ts +10 -0
  62. package/dist/hooks/cart/api/useUpdateCart.d.ts.map +1 -0
  63. package/dist/hooks/cart/api/useUpdateCart.js +22 -0
  64. package/dist/hooks/checkout/useUpdateCheckout.d.ts +7 -0
  65. package/dist/hooks/checkout/useUpdateCheckout.d.ts.map +1 -0
  66. package/dist/hooks/checkout/useUpdateCheckout.js +15 -0
  67. package/dist/hooks/wishlist/api/useAddToWishlist.d.ts +4 -0
  68. package/dist/hooks/wishlist/api/useAddToWishlist.d.ts.map +1 -0
  69. package/dist/hooks/wishlist/api/useAddToWishlist.js +12 -0
  70. package/dist/hooks/wishlist/api/useCreateWishlist.d.ts +4 -0
  71. package/dist/hooks/wishlist/api/useCreateWishlist.d.ts.map +1 -0
  72. package/dist/hooks/wishlist/api/useCreateWishlist.js +15 -0
  73. package/dist/hooks/wishlist/api/useDeleteWishlist.d.ts +4 -0
  74. package/dist/hooks/wishlist/api/useDeleteWishlist.d.ts.map +1 -0
  75. package/dist/hooks/wishlist/api/useDeleteWishlist.js +16 -0
  76. package/dist/hooks/wishlist/api/useDeleteWishlistItem.d.ts +4 -0
  77. package/dist/hooks/wishlist/api/useDeleteWishlistItem.d.ts.map +1 -0
  78. package/dist/hooks/wishlist/api/useDeleteWishlistItem.js +11 -0
  79. package/dist/hooks/wishlist/api/useGetWishlistItems.d.ts +3 -0
  80. package/dist/hooks/wishlist/api/useGetWishlistItems.d.ts.map +1 -0
  81. package/dist/hooks/wishlist/api/useGetWishlistItems.js +9 -0
  82. package/dist/hooks/wishlist/api/useGetWishlistList.d.ts +4 -0
  83. package/dist/hooks/wishlist/api/useGetWishlistList.d.ts.map +1 -0
  84. package/dist/hooks/wishlist/api/useGetWishlistList.js +13 -0
  85. package/dist/hooks/wishlist/useWishlist.d.ts +22 -0
  86. package/dist/hooks/wishlist/useWishlist.d.ts.map +1 -0
  87. package/dist/hooks/wishlist/useWishlist.js +202 -0
  88. package/dist/index.d.ts +14 -0
  89. package/dist/index.d.ts.map +1 -0
  90. package/dist/index.js +13 -0
  91. package/dist/types/ResetPassword.d.ts +8 -0
  92. package/dist/types/ResetPassword.d.ts.map +1 -0
  93. package/dist/types/ResetPassword.js +1 -0
  94. package/dist/types/Term.d.ts +15 -0
  95. package/dist/types/Term.d.ts.map +1 -0
  96. package/dist/types/Term.js +1 -0
  97. package/dist/types/content/Banners.d.ts +14 -0
  98. package/dist/types/content/Banners.d.ts.map +1 -0
  99. package/dist/types/content/Banners.js +1 -0
  100. package/dist/types/content/Blog.d.ts +12 -0
  101. package/dist/types/content/Blog.d.ts.map +1 -0
  102. package/dist/types/content/Blog.js +1 -0
  103. package/dist/types/content/ResetPassword.d.ts +8 -0
  104. package/dist/types/content/ResetPassword.d.ts.map +1 -0
  105. package/dist/types/content/ResetPassword.js +1 -0
  106. package/dist/types/products/Product.d.ts +69 -0
  107. package/dist/types/products/Product.d.ts.map +1 -0
  108. package/dist/types/products/Product.js +1 -0
  109. package/dist/types/user/ResetPassword.d.ts +8 -0
  110. package/dist/types/user/ResetPassword.d.ts.map +1 -0
  111. package/dist/types/user/ResetPassword.js +1 -0
  112. package/dist/types/wishlist/Wishlist.d.ts +31 -0
  113. package/dist/types/wishlist/Wishlist.d.ts.map +1 -0
  114. package/dist/types/wishlist/Wishlist.js +1 -0
  115. package/dist/utils/generalHelper.d.ts +12 -0
  116. package/dist/utils/generalHelper.d.ts.map +1 -0
  117. package/dist/utils/generalHelper.js +37 -0
  118. package/dist/utils/mapIncludedResources.d.ts +21 -0
  119. package/dist/utils/mapIncludedResources.d.ts.map +1 -0
  120. package/dist/utils/mapIncludedResources.js +37 -0
  121. 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,4 @@
1
+ export const resetPassword = async (ctx, { email }) => {
2
+ const { data } = await ctx.axios.get(`/api/user/reset/${email}`);
3
+ return data;
4
+ };
@@ -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"}