@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,202 @@
1
+ 'use client';
2
+ import { useCallback, useMemo } from 'react';
3
+ import { useAddToWishlist } from './api/useAddToWishlist';
4
+ import { useCreateWishlist } from './api/useCreateWishlist';
5
+ import { useDeleteWishlist } from './api/useDeleteWishlist';
6
+ import { useDeleteWishlistItem } from './api/useDeleteWishlistItem';
7
+ import { useGetWishlistItems } from './api/useGetWishlistItems';
8
+ import { useGetWishlistList } from './api/useGetWishlistList';
9
+ const FAVORITES_WISHLIST_ID = '1';
10
+ export const useWishlist = (ctx) => {
11
+ // const t = useTranslations('wishlist')
12
+ // const FAVORITES_WISHLIST_NAME = t('default-wishlist')
13
+ const FAVORITES_WISHLIST_NAME = ctx.locale === 'cs' ? 'Oblíbené' : 'Favorites';
14
+ const isLogged = !!(ctx.accessToken || ctx.userId);
15
+ const { data: wishlistsData } = useGetWishlistList(ctx);
16
+ const { mutate: createWishlist, isPending: isCreatingWishlist } = useCreateWishlist(ctx);
17
+ const { mutate: addToWishlist, isPending: isAddingToWishlist } = useAddToWishlist(ctx);
18
+ const { mutate: deleteWishlist, isPending: isDeletingWishlist } = useDeleteWishlist(ctx);
19
+ const { mutate: deleteWishlistItem, isPending: isDeletingFromWishlist } = useDeleteWishlistItem(ctx);
20
+ const isWishlistPending = isCreatingWishlist || isAddingToWishlist || isDeletingFromWishlist || isDeletingWishlist;
21
+ const wishlists = useMemo(() => wishlistsData?.wishlist_ids || [], [wishlistsData]);
22
+ const favoritesWishlist = useMemo(() => wishlists.find((wishlist) => wishlist.wishlist_id === FAVORITES_WISHLIST_ID), [wishlists]);
23
+ const wishlistIds = useMemo(() => wishlists.map((wishlist) => wishlist.wishlist_id), [wishlists]);
24
+ const { data: wishlistItemsData } = useGetWishlistItems(ctx, wishlistIds);
25
+ const wishlistItems = wishlistItemsData?.data || [];
26
+ const isProductInFavorites = useCallback((productUuid) => {
27
+ if (!wishlistItems.length)
28
+ return false;
29
+ return wishlistItems.some((item) => {
30
+ return (item.variation_id?.id === productUuid &&
31
+ item.wishlist_id?.drupal_internal__id?.toString() === FAVORITES_WISHLIST_ID);
32
+ });
33
+ }, [wishlistItems]);
34
+ const isProductInWishlist = useCallback((productUuid) => {
35
+ if (!wishlistItems.length)
36
+ return false;
37
+ return wishlistItems.some((item) => {
38
+ return item.variation_id?.id === productUuid;
39
+ });
40
+ }, [wishlistItems]);
41
+ const findFavoritesItemForProduct = useCallback((productUuid) => {
42
+ return wishlistItems.find((item) => {
43
+ return (item.variation_id?.id === productUuid &&
44
+ item.wishlist_id?.drupal_internal__id?.toString() === FAVORITES_WISHLIST_ID);
45
+ });
46
+ }, [wishlistItems]);
47
+ const handleLikeToggle = useCallback((product) => {
48
+ const isInFavorites = isProductInFavorites(product.variation_uuid);
49
+ if (isInFavorites) {
50
+ const wishlistItem = findFavoritesItemForProduct(product.variation_uuid);
51
+ if (wishlistItem) {
52
+ deleteWishlistItem({
53
+ wishlist_item_id: wishlistItem.drupal_internal__id.toString(),
54
+ });
55
+ }
56
+ }
57
+ else {
58
+ if (favoritesWishlist) {
59
+ addToWishlist({
60
+ wishlist_id: FAVORITES_WISHLIST_ID,
61
+ variation_id: product.variation_id,
62
+ quantity: 1,
63
+ });
64
+ }
65
+ else {
66
+ createWishlist({
67
+ name: FAVORITES_WISHLIST_NAME,
68
+ note: '',
69
+ }, {
70
+ onSuccess: (data) => {
71
+ addToWishlist({
72
+ wishlist_id: FAVORITES_WISHLIST_ID,
73
+ variation_id: product.variation_id,
74
+ quantity: 1,
75
+ });
76
+ },
77
+ });
78
+ }
79
+ }
80
+ }, [
81
+ favoritesWishlist,
82
+ createWishlist,
83
+ addToWishlist,
84
+ isProductInFavorites,
85
+ findFavoritesItemForProduct,
86
+ deleteWishlistItem,
87
+ ]);
88
+ const handleWishlistToggle = useCallback((product) => {
89
+ const isInWishlist = isProductInWishlist(product.variation_uuid);
90
+ if (isInWishlist) {
91
+ const wishlistItem = wishlistItems.find((item) => item.variation_id?.id === product.variation_uuid);
92
+ if (wishlistItem) {
93
+ deleteWishlistItem({
94
+ wishlist_item_id: wishlistItem.drupal_internal__id.toString(),
95
+ });
96
+ }
97
+ }
98
+ else {
99
+ const nonFavoritesWishlists = wishlists.filter((w) => w.wishlist_id !== FAVORITES_WISHLIST_ID);
100
+ if (nonFavoritesWishlists.length > 0) {
101
+ addToWishlist({
102
+ wishlist_id: nonFavoritesWishlists[0].wishlist_id,
103
+ variation_id: product.variation_id,
104
+ quantity: 1,
105
+ });
106
+ }
107
+ else {
108
+ createWishlist({
109
+ name: 'Wishlist',
110
+ note: '',
111
+ }, {
112
+ onSuccess: (data) => {
113
+ if (data.data && data.data.id) {
114
+ addToWishlist({
115
+ wishlist_id: data.data.id,
116
+ variation_id: product.variation_id,
117
+ quantity: 1,
118
+ });
119
+ }
120
+ },
121
+ });
122
+ }
123
+ }
124
+ }, [
125
+ wishlists,
126
+ createWishlist,
127
+ addToWishlist,
128
+ isProductInWishlist,
129
+ wishlistItems,
130
+ deleteWishlistItem,
131
+ ]);
132
+ const handleAddToWishlist = useCallback((product, wishlistId) => {
133
+ addToWishlist({
134
+ wishlist_id: wishlistId,
135
+ variation_id: product.variation_id,
136
+ quantity: 1,
137
+ });
138
+ }, [addToWishlist]);
139
+ const handleCreateWishlist = useCallback((name, product) => {
140
+ createWishlist({
141
+ name,
142
+ note: '',
143
+ }, {
144
+ onSuccess: (data) => {
145
+ if (data.data && data.data.id) {
146
+ addToWishlist({
147
+ wishlist_id: data.data.id,
148
+ variation_id: product.variation_id,
149
+ quantity: 1,
150
+ });
151
+ }
152
+ },
153
+ });
154
+ }, [createWishlist, addToWishlist]);
155
+ const wishlistsForDropdown = wishlists
156
+ .filter((wishlist) => wishlist.wishlist_id !== FAVORITES_WISHLIST_ID)
157
+ .map((wishlist) => ({
158
+ id: wishlist.wishlist_id,
159
+ name: wishlist.name,
160
+ }));
161
+ const allWishlistsForDropdown = wishlists.map((wishlist) => ({
162
+ id: wishlist.wishlist_id,
163
+ name: wishlist.name,
164
+ }));
165
+ const getProductWishlistIds = useCallback((productUuid) => {
166
+ return wishlistItems
167
+ .filter((item) => item.variation_id?.id === productUuid)
168
+ .map((item) => item.wishlist_id?.drupal_internal__id?.toString())
169
+ .filter(Boolean);
170
+ }, [wishlistItems]);
171
+ const handleRemoveFromWishlist = useCallback((product, wishlistId) => {
172
+ const wishlistItem = wishlistItems.find((item) => item.variation_id?.id === product.variation_uuid &&
173
+ item.wishlist_id?.drupal_internal__id?.toString() === wishlistId);
174
+ if (wishlistItem) {
175
+ deleteWishlistItem({
176
+ wishlist_item_id: wishlistItem.drupal_internal__id.toString(),
177
+ });
178
+ }
179
+ }, [wishlistItems, deleteWishlistItem]);
180
+ const handleDeleteWishlist = useCallback((wishlistId) => {
181
+ deleteWishlist({
182
+ wishlist_id: wishlistId,
183
+ });
184
+ }, [deleteWishlist]);
185
+ return {
186
+ isLogged,
187
+ isWishlistPending,
188
+ isProductInFavorites,
189
+ handleLikeToggle,
190
+ wishlistsForDropdown,
191
+ allWishlistsForDropdown,
192
+ isProductInWishlist,
193
+ getProductWishlistIds,
194
+ handleWishlistToggle,
195
+ handleAddToWishlist,
196
+ handleCreateWishlist,
197
+ handleRemoveFromWishlist,
198
+ handleDeleteWishlist,
199
+ favoritesWishlist,
200
+ wishlistItems,
201
+ };
202
+ };
@@ -0,0 +1,14 @@
1
+ export * from './api/content/getBanners';
2
+ export * from './api/content/getBlog';
3
+ export * from './types/content/Banners';
4
+ export * from './types/content/Blog';
5
+ export * from './api/getTerms';
6
+ export * from './types/Term';
7
+ export * from './api/products/getProducts';
8
+ export * from './types/products/Product';
9
+ export * from './api/checkout/Checkout.service';
10
+ export * from './api/checkout/CheckoutService.types';
11
+ export * from './hooks/wishlist/useWishlist';
12
+ export * from './context';
13
+ export * from './context/cart/BasketContext';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AAEtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AAErC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAE7B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AAEzC,cAAc,iCAAiC,CAAC;AAChD,cAAc,sCAAsC,CAAC;AAErD,cAAc,8BAA8B,CAAC;AAE7C,cAAc,WAAW,CAAC;AAC1B,cAAc,8BAA8B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,13 @@
1
+ export * from './api/content/getBanners';
2
+ export * from './api/content/getBlog';
3
+ export * from './types/content/Banners';
4
+ export * from './types/content/Blog';
5
+ export * from './api/getTerms';
6
+ export * from './types/Term';
7
+ export * from './api/products/getProducts';
8
+ export * from './types/products/Product';
9
+ export * from './api/checkout/Checkout.service';
10
+ export * from './api/checkout/CheckoutService.types';
11
+ export * from './hooks/wishlist/useWishlist';
12
+ export * from './context';
13
+ export * from './context/cart/BasketContext';
@@ -0,0 +1,8 @@
1
+ export type ResetPasswordResponse = {
2
+ data: {
3
+ id: string;
4
+ email: string;
5
+ };
6
+ status: number;
7
+ };
8
+ //# sourceMappingURL=ResetPassword.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResetPassword.d.ts","sourceRoot":"","sources":["../../types/ResetPassword.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,15 @@
1
+ export type Term = {
2
+ uuid: string;
3
+ id: string;
4
+ type: string;
5
+ name: string;
6
+ href?: string;
7
+ description: string;
8
+ children?: Term[];
9
+ parent: {
10
+ uuid: string;
11
+ id: string;
12
+ drupal_internal__tid?: string;
13
+ } | null;
14
+ };
15
+ //# sourceMappingURL=Term.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Term.d.ts","sourceRoot":"","sources":["../../types/Term.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,IAAI,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC;IAClB,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,oBAAoB,CAAC,EAAE,MAAM,CAAC;KAC/B,GAAG,IAAI,CAAC;CACV,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,14 @@
1
+ export type BannerItem = {
2
+ id: string;
3
+ uuid: string;
4
+ type: string;
5
+ name: string;
6
+ field_description?: string;
7
+ field_link?: {
8
+ uri: string;
9
+ title: string;
10
+ };
11
+ field_image: string;
12
+ created: string;
13
+ };
14
+ //# sourceMappingURL=Banners.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Banners.d.ts","sourceRoot":"","sources":["../../../types/content/Banners.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE;QACX,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,12 @@
1
+ export type BlogItem = {
2
+ id: string;
3
+ uuid: string;
4
+ type: string;
5
+ title: string;
6
+ body: string;
7
+ field_image_url?: string;
8
+ field_image_alt?: string;
9
+ created: string;
10
+ changed: string;
11
+ };
12
+ //# sourceMappingURL=Blog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Blog.d.ts","sourceRoot":"","sources":["../../../types/content/Blog.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,8 @@
1
+ export type ResetPasswordResponse = {
2
+ data: {
3
+ id: string;
4
+ email: string;
5
+ };
6
+ status: number;
7
+ };
8
+ //# sourceMappingURL=ResetPassword.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResetPassword.d.ts","sourceRoot":"","sources":["../../../types/content/ResetPassword.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,69 @@
1
+ export type Product = {
2
+ variation_uuid: string;
3
+ variation_id: string;
4
+ type: string;
5
+ variation_name: string;
6
+ sku: string;
7
+ description: string;
8
+ price: number;
9
+ discountPercent: number | null;
10
+ category: any;
11
+ images: {
12
+ href: string;
13
+ alt: string;
14
+ }[];
15
+ product_id: string;
16
+ product_name: string;
17
+ changed: string | Date;
18
+ variations?: ProductVariation[];
19
+ badges?: Array<{
20
+ text: string;
21
+ color: string;
22
+ }>;
23
+ field_news?: boolean;
24
+ field_aftersale?: boolean;
25
+ field_care?: any[];
26
+ field_features?: any[];
27
+ field_returns?: any[];
28
+ field_shipping?: any[];
29
+ };
30
+ export type RawProductVariation = {
31
+ title: string;
32
+ sku: string;
33
+ drupal_internal__variation_id: string;
34
+ id: string;
35
+ field_ean: number;
36
+ field_stock_level?: {
37
+ available_stock: number;
38
+ value?: number;
39
+ };
40
+ list_price?: {
41
+ number: number;
42
+ };
43
+ price?: {
44
+ number: number;
45
+ };
46
+ field_image?: {
47
+ field_media_image?: {
48
+ uri?: {
49
+ url: string;
50
+ };
51
+ };
52
+ name?: string;
53
+ }[];
54
+ };
55
+ export type ProductVariation = {
56
+ uuid: string;
57
+ id: string;
58
+ title: string;
59
+ sku: string;
60
+ price: number;
61
+ discountPercentVariation?: number | null;
62
+ ean?: number;
63
+ stock?: number;
64
+ images?: {
65
+ href: string;
66
+ alt: string;
67
+ }[];
68
+ };
69
+ //# sourceMappingURL=Product.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Product.d.ts","sourceRoot":"","sources":["../../../types/products/Product.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,GAAG,CAAC;IACd,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;KACb,EAAE,CAAC;IACJ,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAGhC,MAAM,CAAC,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;IAEH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;IACnB,cAAc,CAAC,EAAE,GAAG,EAAE,CAAC;IACvB,aAAa,CAAC,EAAE,GAAG,EAAE,CAAC;IACtB,cAAc,CAAC,EAAE,GAAG,EAAE,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,6BAA6B,EAAE,MAAM,CAAC;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE;QAClB,eAAe,EAAE,MAAM,CAAC;QACxB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,UAAU,CAAC,EAAE;QACX,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,KAAK,CAAC,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,WAAW,CAAC,EAAE;QACZ,iBAAiB,CAAC,EAAE;YAClB,GAAG,CAAC,EAAE;gBACJ,GAAG,EAAE,MAAM,CAAC;aACb,CAAC;SACH,CAAC;QACF,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,EAAE,CAAC;CACL,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,wBAAwB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;KACb,EAAE,CAAC;CACL,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,8 @@
1
+ export type ResetPasswordResponse = {
2
+ data: {
3
+ id: string;
4
+ email: string;
5
+ };
6
+ status: number;
7
+ };
8
+ //# sourceMappingURL=ResetPassword.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResetPassword.d.ts","sourceRoot":"","sources":["../../../types/user/ResetPassword.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,31 @@
1
+ export type ProductCardWishlist = {
2
+ id: string;
3
+ name: string;
4
+ };
5
+ export type WishlistItemSimple = {
6
+ id: string;
7
+ drupal_internal__id: number;
8
+ quantity: number;
9
+ variation_id?: {
10
+ id: string;
11
+ drupal_internal__variation_id: number;
12
+ title: string;
13
+ sku: string;
14
+ price?: {
15
+ number: string;
16
+ currency_code: string;
17
+ formatted: string;
18
+ };
19
+ field_news?: boolean;
20
+ field_aftersale?: boolean;
21
+ };
22
+ wishlist_id?: {
23
+ id: string;
24
+ drupal_internal__target_id: number;
25
+ };
26
+ variationUuid?: string;
27
+ wishlistDrupalId?: number;
28
+ variationTitle?: string;
29
+ variationPrice?: number;
30
+ };
31
+ //# sourceMappingURL=Wishlist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Wishlist.d.ts","sourceRoot":"","sources":["../../../types/wishlist/Wishlist.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,mBAAmB,EAAE,MAAM,CAAA;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE;QACX,EAAE,EAAE,MAAM,CAAA;QACV,6BAA6B,EAAE,MAAM,CAAA;QACrC,KAAK,EAAE,MAAM,CAAA;QACb,GAAG,EAAE,MAAM,CAAA;QACX,KAAK,CAAC,EAAE;YACJ,MAAM,EAAE,MAAM,CAAA;YACd,aAAa,EAAE,MAAM,CAAA;YACrB,SAAS,EAAE,MAAM,CAAA;SACpB,CAAA;QACD,UAAU,CAAC,EAAE,OAAO,CAAA;QACpB,eAAe,CAAC,EAAE,OAAO,CAAA;KAC5B,CAAA;IACD,WAAW,CAAC,EAAE;QACV,EAAE,EAAE,MAAM,CAAA;QACV,0BAA0B,EAAE,MAAM,CAAA;KACrC,CAAA;IACD,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;CAC1B,CAAA"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,12 @@
1
+ interface Price {
2
+ number: number;
3
+ }
4
+ export declare function getDiscountPercent(price?: Price, listPrice?: Price): number | null;
5
+ export declare function handleSortChange(id: string): {
6
+ title: string;
7
+ direction: string;
8
+ } | null;
9
+ export declare const generateCartToken: () => string;
10
+ export declare const formatPrice: (price: number, locale: string) => string;
11
+ export {};
12
+ //# sourceMappingURL=generalHelper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generalHelper.d.ts","sourceRoot":"","sources":["../../utils/generalHelper.ts"],"names":[],"mappings":"AAAA,UAAU,KAAK;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,kBAAkB,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,CAOlF;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM;;;SAa1C;AAED,eAAO,MAAM,iBAAiB,QAAO,MAEpC,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,OAAO,MAAM,EAAE,QAAQ,MAAM,WAexD,CAAA"}
@@ -0,0 +1,37 @@
1
+ export function getDiscountPercent(price, listPrice) {
2
+ if (!price?.number || !listPrice?.number || listPrice.number === price.number) {
3
+ return 0;
4
+ }
5
+ const discount = ((price.number - listPrice.number) / price.number) * 100;
6
+ return Math.round(discount);
7
+ }
8
+ export function handleSortChange(id) {
9
+ switch (id) {
10
+ case 'title-ASC':
11
+ return { title: 'title', direction: 'ASC' };
12
+ case 'title-DESC':
13
+ return { title: 'title', direction: 'DESC' };
14
+ case 'price-ASC':
15
+ return { title: 'list_price.number', direction: 'ASC' };
16
+ case 'price-DESC':
17
+ return { title: 'list_price.number', direction: 'DESC' };
18
+ default:
19
+ return null;
20
+ }
21
+ }
22
+ export const generateCartToken = () => {
23
+ return Math.random().toString(36).slice(2);
24
+ };
25
+ export const formatPrice = (price, locale) => {
26
+ if (price === null || price === undefined) {
27
+ return locale === 'cs' ? '0,00 Kč' : '€0.00';
28
+ }
29
+ const roundedPrice = Number(price).toFixed(2);
30
+ const numericPrice = Number(roundedPrice);
31
+ const currency = locale === 'cs' ? 'CZK' : 'EUR';
32
+ const formatLocale = locale === 'cs' ? 'cs-CZ' : 'en-US';
33
+ return numericPrice.toLocaleString(formatLocale, {
34
+ style: 'currency',
35
+ currency,
36
+ });
37
+ };
@@ -0,0 +1,21 @@
1
+ export type JsonApiResource = {
2
+ id: string;
3
+ type: string;
4
+ attributes: Record<string, any>;
5
+ relationships?: Record<string, {
6
+ data: {
7
+ id: string;
8
+ type: string;
9
+ } | {
10
+ id: string;
11
+ type: string;
12
+ }[];
13
+ }>;
14
+ };
15
+ export type JsonApiResponse = {
16
+ data: JsonApiResource[] | JsonApiResource;
17
+ included?: JsonApiResource[];
18
+ };
19
+ export declare function mapIncludedResources<T = any>(data: JsonApiResponse, maxDepth?: number): T[];
20
+ export default mapIncludedResources;
21
+ //# sourceMappingURL=mapIncludedResources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapIncludedResources.d.ts","sourceRoot":"","sources":["../../utils/mapIncludedResources.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC/B,aAAa,CAAC,EAAE,MAAM,CACpB,MAAM,EACN;QACE,IAAI,EACA;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,GAC5B;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KACnC,CACF,CAAA;CACF,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,eAAe,EAAE,GAAG,eAAe,CAAA;IACzC,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAA;CAC7B,CAAA;AAED,wBAAgB,oBAAoB,CAAC,CAAC,GAAG,GAAG,EAC1C,IAAI,EAAE,eAAe,EACrB,QAAQ,SAAI,GACX,CAAC,EAAE,CA2CL;AAED,eAAe,oBAAoB,CAAA"}
@@ -0,0 +1,37 @@
1
+ export function mapIncludedResources(data, maxDepth = 4) {
2
+ const originalData = Array.isArray(data.data) ? data.data : [data.data];
3
+ const includedData = data.included || [];
4
+ const includedMap = new Map();
5
+ includedData.forEach((item) => {
6
+ includedMap.set(`${item.type}-${item.id}`, item);
7
+ });
8
+ const resolveRelationships = (resource, depth = 0) => {
9
+ if (depth > maxDepth)
10
+ return null;
11
+ const flatResource = {
12
+ ...resource.attributes,
13
+ id: resource.id,
14
+ type: resource.type,
15
+ };
16
+ if (resource.relationships) {
17
+ Object.entries(resource.relationships).forEach(([key, rel]) => {
18
+ const relData = rel.data;
19
+ if (Array.isArray(relData)) {
20
+ flatResource[key] = relData
21
+ .map((r) => includedMap.get(`${r.type}-${r.id}`))
22
+ .filter(Boolean)
23
+ .map((includedItem) => resolveRelationships(includedItem, depth + 1));
24
+ }
25
+ else if (relData) {
26
+ const includedItem = includedMap.get(`${relData.type}-${relData.id}`);
27
+ if (includedItem) {
28
+ flatResource[key] = resolveRelationships(includedItem, depth + 1);
29
+ }
30
+ }
31
+ });
32
+ }
33
+ return flatResource;
34
+ };
35
+ return originalData.map((item) => resolveRelationships(item));
36
+ }
37
+ export default mapIncludedResources;
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "@q2devel/q2-core",
3
+ "version": "1.0.0",
4
+ "main": "dist/index.js",
5
+ "types": "dist/index.d.ts",
6
+ "exports": {
7
+ ".": {
8
+ "import": "./dist/index.js",
9
+ "types": "./dist/index.d.ts"
10
+ }
11
+ },
12
+ "scripts": {
13
+ "build": "tsc",
14
+ "prepare": "npm run build"
15
+ },
16
+ "files": [
17
+ "dist"
18
+ ],
19
+ "license": "MIT",
20
+ "devDependencies": {
21
+ "@types/react": "^19.1.7",
22
+ "@types/react-dom": "^19.1.6",
23
+ "typescript": "^5.8.3"
24
+ },
25
+ "dependencies": {
26
+ "@tanstack/react-query": "^5.80.6",
27
+ "axios": "^1.9.0",
28
+ "drupal-jsonapi-params": "^2.3.2",
29
+ "react": "^19.1.0"
30
+ }
31
+ }