@faststore/components 3.70.2 → 3.78.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 (89) hide show
  1. package/dist/cjs/hooks/index.d.ts +1 -0
  2. package/dist/cjs/hooks/index.d.ts.map +1 -1
  3. package/dist/cjs/hooks/index.js +3 -1
  4. package/dist/cjs/hooks/index.js.map +1 -1
  5. package/dist/cjs/hooks/useProductComparison.d.ts +2 -0
  6. package/dist/cjs/hooks/useProductComparison.d.ts.map +1 -0
  7. package/dist/cjs/hooks/useProductComparison.js +14 -0
  8. package/dist/cjs/hooks/useProductComparison.js.map +1 -0
  9. package/dist/cjs/index.d.ts +2 -0
  10. package/dist/cjs/index.d.ts.map +1 -1
  11. package/dist/cjs/index.js +6 -1
  12. package/dist/cjs/index.js.map +1 -1
  13. package/dist/cjs/molecules/ToggleField/ToggleField.d.ts +2 -1
  14. package/dist/cjs/molecules/ToggleField/ToggleField.d.ts.map +1 -1
  15. package/dist/cjs/molecules/ToggleField/ToggleField.js.map +1 -1
  16. package/dist/cjs/organisms/ProductComparison/ProductComparison.d.ts +7 -0
  17. package/dist/cjs/organisms/ProductComparison/ProductComparison.d.ts.map +1 -0
  18. package/dist/cjs/organisms/ProductComparison/ProductComparison.js +11 -0
  19. package/dist/cjs/organisms/ProductComparison/ProductComparison.js.map +1 -0
  20. package/dist/cjs/organisms/ProductComparison/ProductComparisonSidebar.d.ts +79 -0
  21. package/dist/cjs/organisms/ProductComparison/ProductComparisonSidebar.d.ts.map +1 -0
  22. package/dist/cjs/organisms/ProductComparison/ProductComparisonSidebar.js +135 -0
  23. package/dist/cjs/organisms/ProductComparison/ProductComparisonSidebar.js.map +1 -0
  24. package/dist/cjs/organisms/ProductComparison/ProductComparisonToolbar.d.ts +9 -0
  25. package/dist/cjs/organisms/ProductComparison/ProductComparisonToolbar.d.ts.map +1 -0
  26. package/dist/cjs/organisms/ProductComparison/ProductComparisonToolbar.js +25 -0
  27. package/dist/cjs/organisms/ProductComparison/ProductComparisonToolbar.js.map +1 -0
  28. package/dist/cjs/organisms/ProductComparison/ProductComparisonTrigger.d.ts +11 -0
  29. package/dist/cjs/organisms/ProductComparison/ProductComparisonTrigger.d.ts.map +1 -0
  30. package/dist/cjs/organisms/ProductComparison/ProductComparisonTrigger.js +18 -0
  31. package/dist/cjs/organisms/ProductComparison/ProductComparisonTrigger.js.map +1 -0
  32. package/dist/cjs/organisms/ProductComparison/index.d.ts +11 -0
  33. package/dist/cjs/organisms/ProductComparison/index.d.ts.map +1 -0
  34. package/dist/cjs/organisms/ProductComparison/index.js +17 -0
  35. package/dist/cjs/organisms/ProductComparison/index.js.map +1 -0
  36. package/dist/cjs/organisms/ProductComparison/provider/ProductComparisonProvider.d.ts +75 -0
  37. package/dist/cjs/organisms/ProductComparison/provider/ProductComparisonProvider.d.ts.map +1 -0
  38. package/dist/cjs/organisms/ProductComparison/provider/ProductComparisonProvider.js +50 -0
  39. package/dist/cjs/organisms/ProductComparison/provider/ProductComparisonProvider.js.map +1 -0
  40. package/dist/esm/hooks/index.d.ts +1 -0
  41. package/dist/esm/hooks/index.d.ts.map +1 -1
  42. package/dist/esm/hooks/index.js +1 -0
  43. package/dist/esm/hooks/index.js.map +1 -1
  44. package/dist/esm/hooks/useProductComparison.d.ts +2 -0
  45. package/dist/esm/hooks/useProductComparison.d.ts.map +1 -0
  46. package/dist/esm/hooks/useProductComparison.js +10 -0
  47. package/dist/esm/hooks/useProductComparison.js.map +1 -0
  48. package/dist/esm/index.d.ts +2 -0
  49. package/dist/esm/index.d.ts.map +1 -1
  50. package/dist/esm/index.js +1 -0
  51. package/dist/esm/index.js.map +1 -1
  52. package/dist/esm/molecules/ToggleField/ToggleField.d.ts +2 -1
  53. package/dist/esm/molecules/ToggleField/ToggleField.d.ts.map +1 -1
  54. package/dist/esm/molecules/ToggleField/ToggleField.js.map +1 -1
  55. package/dist/esm/organisms/ProductComparison/ProductComparison.d.ts +7 -0
  56. package/dist/esm/organisms/ProductComparison/ProductComparison.d.ts.map +1 -0
  57. package/dist/esm/organisms/ProductComparison/ProductComparison.js +8 -0
  58. package/dist/esm/organisms/ProductComparison/ProductComparison.js.map +1 -0
  59. package/dist/esm/organisms/ProductComparison/ProductComparisonSidebar.d.ts +79 -0
  60. package/dist/esm/organisms/ProductComparison/ProductComparisonSidebar.d.ts.map +1 -0
  61. package/dist/esm/organisms/ProductComparison/ProductComparisonSidebar.js +132 -0
  62. package/dist/esm/organisms/ProductComparison/ProductComparisonSidebar.js.map +1 -0
  63. package/dist/esm/organisms/ProductComparison/ProductComparisonToolbar.d.ts +9 -0
  64. package/dist/esm/organisms/ProductComparison/ProductComparisonToolbar.d.ts.map +1 -0
  65. package/dist/esm/organisms/ProductComparison/ProductComparisonToolbar.js +22 -0
  66. package/dist/esm/organisms/ProductComparison/ProductComparisonToolbar.js.map +1 -0
  67. package/dist/esm/organisms/ProductComparison/ProductComparisonTrigger.d.ts +11 -0
  68. package/dist/esm/organisms/ProductComparison/ProductComparisonTrigger.d.ts.map +1 -0
  69. package/dist/esm/organisms/ProductComparison/ProductComparisonTrigger.js +15 -0
  70. package/dist/esm/organisms/ProductComparison/ProductComparisonTrigger.js.map +1 -0
  71. package/dist/esm/organisms/ProductComparison/index.d.ts +11 -0
  72. package/dist/esm/organisms/ProductComparison/index.d.ts.map +1 -0
  73. package/dist/esm/organisms/ProductComparison/index.js +6 -0
  74. package/dist/esm/organisms/ProductComparison/index.js.map +1 -0
  75. package/dist/esm/organisms/ProductComparison/provider/ProductComparisonProvider.d.ts +75 -0
  76. package/dist/esm/organisms/ProductComparison/provider/ProductComparisonProvider.d.ts.map +1 -0
  77. package/dist/esm/organisms/ProductComparison/provider/ProductComparisonProvider.js +46 -0
  78. package/dist/esm/organisms/ProductComparison/provider/ProductComparisonProvider.js.map +1 -0
  79. package/package.json +2 -2
  80. package/src/hooks/index.ts +1 -0
  81. package/src/hooks/useProductComparison.ts +15 -0
  82. package/src/index.ts +14 -0
  83. package/src/molecules/ToggleField/ToggleField.tsx +2 -2
  84. package/src/organisms/ProductComparison/ProductComparison.tsx +24 -0
  85. package/src/organisms/ProductComparison/ProductComparisonSidebar.tsx +452 -0
  86. package/src/organisms/ProductComparison/ProductComparisonToolbar.tsx +78 -0
  87. package/src/organisms/ProductComparison/ProductComparisonTrigger.tsx +49 -0
  88. package/src/organisms/ProductComparison/index.ts +14 -0
  89. package/src/organisms/ProductComparison/provider/ProductComparisonProvider.tsx +144 -0
@@ -0,0 +1,144 @@
1
+ import React, {
2
+ createContext,
3
+ type ReactNode,
4
+ useCallback,
5
+ useState,
6
+ } from 'react'
7
+
8
+ export interface IProductComparison {
9
+ slug: string
10
+ sku: string
11
+ name: string
12
+ gtin: string
13
+ id: string
14
+ unitMultiplier: number
15
+ brand: { name: string; brandName: string }
16
+ isVariantOf: {
17
+ productGroupID: string
18
+ name: string
19
+ skuVariants: {
20
+ activeVariations: any | null
21
+ slugsMap: any | null
22
+ availableVariations: any | null
23
+ allVariantProducts: Array<{
24
+ name: string
25
+ productID: string
26
+ }> | null
27
+ }
28
+ }
29
+ image: Array<{ url: string; alternateName: string }>
30
+ offers: {
31
+ lowPrice: number
32
+ lowPriceWithTaxes: number
33
+ offers: Array<{
34
+ availability: string
35
+ price: number
36
+ listPrice: number
37
+ listPriceWithTaxes: number
38
+ priceWithTaxes: number
39
+ quantity: number
40
+ seller: { identifier: string }
41
+ }>
42
+ }
43
+ additionalProperty: Array<{
44
+ propertyID: string
45
+ name: string
46
+ value: any
47
+ valueReference: any
48
+ }>
49
+ advertisement: { adId: string; adResponseId: string } | null
50
+ hasSpecifications?: boolean
51
+ skuSpecifications?: Array<{ field: string; values: string[] }>
52
+ }
53
+
54
+ export interface ProductComparisonProviderContextValue {
55
+ /*
56
+ * A boolean value that indicates if the modal is open.
57
+ */
58
+ isOpen: boolean
59
+ /*
60
+ * Function to set the modal is open.
61
+ */
62
+ setIsOpen: (isOpen: boolean) => void
63
+ /*
64
+ * Array of all product ids selected to compare.
65
+ */
66
+ productIds: string[]
67
+ /*
68
+ * Array of all products selected to compare.
69
+ */
70
+ products: IProductComparison[]
71
+ /*
72
+ * Function to handle the product ids selected to compare.
73
+ */
74
+ handleProductsIds: (product: IProductComparison) => void
75
+ /*
76
+ * Function to handle the products selected to compare.
77
+ */
78
+ handleProductsComparison: (products: IProductComparison[]) => void
79
+ /*
80
+ * Function to clear all products selected to compare.
81
+ */
82
+ clearProducts: () => void
83
+ }
84
+
85
+ export const ProductComparisonContext = createContext<
86
+ ProductComparisonProviderContextValue | undefined
87
+ >(undefined)
88
+
89
+ function ProductComparisonProvider({ children }: { children: ReactNode }) {
90
+ const [productIds, setProductIds] = useState<string[]>([])
91
+ const [products, setProducts] = useState<IProductComparison[]>([])
92
+ const [isOpen, setIsOpen] = useState(false)
93
+
94
+ const handleProductsIds = useCallback((product: IProductComparison) => {
95
+ setProductIds((prev) => {
96
+ if (prev.includes(product?.id)) {
97
+ return prev.filter((id) => id !== product.id)
98
+ }
99
+ return [...prev, product.id]
100
+ })
101
+
102
+ setProducts((prev) => {
103
+ if (prev.some((p) => p.id === product.id)) {
104
+ return prev.filter((p) => p.id !== product.id)
105
+ }
106
+ return [...prev, product]
107
+ })
108
+ }, [])
109
+
110
+ function handleProductsComparison(products: IProductComparison[]) {
111
+ const productSelectedWithFullData = products.map((product) => {
112
+ const productAlreadySelected = products.find((p) => p.id === product.id)
113
+ return {
114
+ ...product,
115
+ ...productAlreadySelected,
116
+ }
117
+ })
118
+
119
+ setProducts(productSelectedWithFullData)
120
+ }
121
+
122
+ function clearProducts() {
123
+ setProductIds([])
124
+ setProducts([])
125
+ }
126
+
127
+ return (
128
+ <ProductComparisonContext.Provider
129
+ value={{
130
+ isOpen,
131
+ setIsOpen,
132
+ productIds,
133
+ products,
134
+ handleProductsIds,
135
+ handleProductsComparison,
136
+ clearProducts,
137
+ }}
138
+ >
139
+ {children}
140
+ </ProductComparisonContext.Provider>
141
+ )
142
+ }
143
+
144
+ export default ProductComparisonProvider