@faststore/core 3.81.0 → 3.82.2

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 (114) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +43 -43
  3. package/.next/cache/.tsbuildinfo +1 -1
  4. package/.next/cache/config.json +3 -3
  5. package/.next/cache/webpack/client-production/0.pack +0 -0
  6. package/.next/cache/webpack/client-production/index.pack +0 -0
  7. package/.next/cache/webpack/server-production/0.pack +0 -0
  8. package/.next/cache/webpack/server-production/index.pack +0 -0
  9. package/.next/prerender-manifest.js +1 -1
  10. package/.next/prerender-manifest.json +1 -1
  11. package/.next/react-loadable-manifest.json +24 -24
  12. package/.next/routes-manifest.json +1 -1
  13. package/.next/server/chunks/2430.js +1 -1
  14. package/.next/server/chunks/2570.js +1 -1
  15. package/.next/server/chunks/3945.js +1 -1
  16. package/.next/server/chunks/8071.js +1 -1
  17. package/.next/server/chunks/83.js +1 -1
  18. package/.next/server/chunks/8474.js +1 -1
  19. package/.next/server/chunks/8563.js +1 -1
  20. package/.next/server/chunks/8687.js +1 -1
  21. package/.next/server/chunks/9117.js +1 -1
  22. package/.next/server/chunks/948.js +2 -2
  23. package/.next/server/chunks/9563.js +2 -2
  24. package/.next/server/chunks/9630.js +3 -3
  25. package/.next/server/chunks/9853.js +1 -1
  26. package/.next/server/chunks/ButtonSignIn.js +1 -1
  27. package/.next/server/chunks/UISKUMatrixSidebar.js +1 -1
  28. package/.next/server/middleware-build-manifest.js +1 -1
  29. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  30. package/.next/server/pages/[...slug].js +1 -1
  31. package/.next/server/pages/[slug]/p.js +1 -1
  32. package/.next/server/pages/account/orders.js +1 -1
  33. package/.next/server/pages/api/graphql.js +2 -2
  34. package/.next/server/pages/en-US/404.html +1 -1
  35. package/.next/server/pages/en-US/500.html +1 -1
  36. package/.next/server/pages/en-US/checkout.html +1 -1
  37. package/.next/server/pages/en-US/login.html +1 -1
  38. package/.next/server/pages/en-US/s.html +1 -1
  39. package/.next/server/pages/en-US.html +1 -1
  40. package/.next/server/pages/s.js +1 -1
  41. package/.next/server/pages-manifest.json +1 -1
  42. package/.next/static/{v2vl5Y9dOFfl93DdQC3uY → Uvcxd2ViFEhaCaNA_H3ts}/_buildManifest.js +1 -1
  43. package/.next/static/chunks/2284.6e01b30c38bb74fd.js +1 -0
  44. package/.next/static/chunks/3155.8ff6efc44151971f.js +1 -0
  45. package/.next/static/chunks/{3166-a1d98d71987c90d6.js → 3166-785c61fd0e214905.js} +1 -1
  46. package/.next/static/chunks/3399.15d4dbadc57c3f42.js +1 -0
  47. package/.next/static/chunks/3836.63a23109a71dbbdb.js +1 -0
  48. package/.next/static/chunks/4803.74cf987971db6d93.js +1 -0
  49. package/.next/static/chunks/6700.ddae2aa02d2dd401.js +1 -0
  50. package/.next/static/chunks/{6789.634a5fcc1ed30b8d.js → 6789.38bef760c1190c23.js} +1 -1
  51. package/.next/static/chunks/7191-102277856f196551.js +1 -0
  52. package/.next/static/chunks/83.730576d7ded8dfe2.js +1 -0
  53. package/.next/static/chunks/8325.40b7331df742c2f5.js +1 -0
  54. package/.next/static/chunks/9173-912ae438e42cb222.js +1 -0
  55. package/.next/static/chunks/ButtonSignIn.e767fc25322cf230.js +1 -0
  56. package/.next/static/chunks/CartItem.d4c2664933f93606.js +1 -0
  57. package/.next/static/chunks/CartSidebar.e21ad4975e18e6db.js +1 -0
  58. package/.next/static/chunks/Gift.5891ca280b4f0164.js +1 -0
  59. package/.next/static/chunks/OrderSummary.35d859a1e467ad91.js +1 -0
  60. package/.next/static/chunks/ProductShelf.9f3194be577c7cce.js +1 -0
  61. package/.next/static/chunks/ProductTiles.e0528e72234381e6.js +1 -0
  62. package/.next/static/chunks/RegionModal.b5edb6ada60d37ec.js +1 -0
  63. package/.next/static/chunks/RegionSlider.3d9063b0cb6733d9.js +1 -0
  64. package/.next/static/chunks/UISKUMatrixSidebar.5793df7899038286.js +1 -0
  65. package/.next/static/chunks/pages/[slug]/p-0287b5a8ac0b92e5.js +1 -0
  66. package/.next/static/chunks/pages/_app-f8a8608651b3f06b.js +1 -0
  67. package/.next/static/chunks/pages/account/orders/[id]-c2d355a49d409bb0.js +1 -0
  68. package/.next/static/chunks/pages/account/orders-68bef823fcd81bf9.js +1 -0
  69. package/.next/static/chunks/{webpack-39f2e04144d694ad.js → webpack-3f872192534f3b6d.js} +1 -1
  70. package/.next/trace +136 -136
  71. package/.turbo/turbo-build.log +27 -27
  72. package/.turbo/turbo-test.log +5 -5
  73. package/CHANGELOG.md +10 -0
  74. package/cms/faststore/content-types.json +21 -0
  75. package/package.json +3 -3
  76. package/src/Layout.tsx +0 -2
  77. package/src/components/region/RegionBar/RegionBar.tsx +17 -23
  78. package/src/components/region/RegionButton/RegionButton.tsx +4 -35
  79. package/src/components/search/Filter/FilterDeliveryMethodFacet.tsx +2 -8
  80. package/src/components/search/Filter/FilterDesktop.tsx +19 -7
  81. package/src/components/search/Filter/FilterSlider.tsx +20 -9
  82. package/src/components/templates/ProductListingPage/ProductListing.tsx +1 -1
  83. package/src/components/ui/ProductGallery/ProductGallery.tsx +1 -1
  84. package/src/sdk/deliveryPromise/useDeliveryPromise.ts +127 -63
  85. package/src/sdk/geolocation/useGeolocation.ts +18 -28
  86. package/src/sdk/session/index.ts +11 -29
  87. package/src/sdk/userLocation/index.ts +142 -0
  88. package/src/utils/globalSettings.ts +5 -0
  89. package/.next/static/chunks/2284.6dd050e60172189a.js +0 -1
  90. package/.next/static/chunks/3155.c3fa96f983101956.js +0 -1
  91. package/.next/static/chunks/3399.60aae5ddb9123ef5.js +0 -1
  92. package/.next/static/chunks/3836.a2f49cd66f78bcb2.js +0 -1
  93. package/.next/static/chunks/4803.412bf2a7e15626a6.js +0 -1
  94. package/.next/static/chunks/6700.f046aa86e2c83b53.js +0 -1
  95. package/.next/static/chunks/7191-2b424236f6799274.js +0 -1
  96. package/.next/static/chunks/83.affac11ef34a0c11.js +0 -1
  97. package/.next/static/chunks/8325.b3ddbb43feda1a85.js +0 -1
  98. package/.next/static/chunks/9173-acced9d62b9088c8.js +0 -1
  99. package/.next/static/chunks/ButtonSignIn.111c95c4e7e2640f.js +0 -1
  100. package/.next/static/chunks/CartItem.e010557e686e1009.js +0 -1
  101. package/.next/static/chunks/CartSidebar.f2f885b6d9a227e2.js +0 -1
  102. package/.next/static/chunks/Gift.f93e4a95caf390e3.js +0 -1
  103. package/.next/static/chunks/OrderSummary.8092365254225970.js +0 -1
  104. package/.next/static/chunks/ProductShelf.dcdeffe85dca1ace.js +0 -1
  105. package/.next/static/chunks/ProductTiles.12e553830401871d.js +0 -1
  106. package/.next/static/chunks/RegionModal.0aff964cb36eb49a.js +0 -1
  107. package/.next/static/chunks/RegionSlider.cbf2ac28eeac8dbe.js +0 -1
  108. package/.next/static/chunks/UISKUMatrixSidebar.8b6fac58c48f999c.js +0 -1
  109. package/.next/static/chunks/pages/[slug]/p-2c73921b1ab00c27.js +0 -1
  110. package/.next/static/chunks/pages/_app-57478e0d1d2ddf62.js +0 -1
  111. package/.next/static/chunks/pages/account/orders/[id]-0a4ab1b9f4c54abb.js +0 -1
  112. package/.next/static/chunks/pages/account/orders-63e3a141c7bd9070.js +0 -1
  113. package/src/components/region/RegionModal/useRegionModal.ts +0 -44
  114. /package/.next/static/{v2vl5Y9dOFfl93DdQC3uY → Uvcxd2ViFEhaCaNA_H3ts}/_ssgManifest.js +0 -0
@@ -26,6 +26,9 @@ export const SHIPPING_FACET_KEY = 'shipping' as const
26
26
  export const PICKUP_IN_POINT_FACET_VALUE = 'pickup-in-point' as const
27
27
  export const ALL_DELIVERY_METHODS_FACET_VALUE = 'all-delivery-methods' as const
28
28
  export const PICKUP_ALL_FACET_VALUE = 'pickup-all' as const
29
+ export const ALL_DELIVERY_OPTIONS_FACET_VALUE = 'all-delivery-options' as const
30
+ export const DELIVERY_OPTIONS_FACET_KEY = 'delivery-options' as const
31
+ export const DYNAMIC_ESTIMATE_FACET_KEY = 'dynamic-estimate' as const
29
32
 
30
33
  type Facet = SearchState['selectedFacets'][number]
31
34
 
@@ -105,6 +108,8 @@ export function useDeliveryPromise({
105
108
  } = useDeliveryPromiseContext()
106
109
 
107
110
  const isDeliveryPromiseEnabled = deliveryPromiseConfig.enabled
111
+ const isDeliveryOptionsEnabled =
112
+ deliveryPromiseSettings?.deliveryOptions?.enabled ?? true
108
113
 
109
114
  const selectedFacets = useMemo(
110
115
  () => selectedFilterFacets ?? searchState.selectedFacets,
@@ -199,21 +204,39 @@ export function useDeliveryPromise({
199
204
  [defaultPickupPoint, selectedFacets]
200
205
  )
201
206
 
202
- const allDeliveryMethodsFacet = useMemo(
203
- () => ({
204
- value: ALL_DELIVERY_METHODS_FACET_VALUE,
205
- label:
206
- deliveryPromiseSettings?.deliveryMethods?.allDeliveryMethods ??
207
- 'All delivery methods',
208
- selected:
209
- !selectedFacets.some((facet) => facet.key === SHIPPING_FACET_KEY) ||
210
- selectedFacets?.some(
211
- (facet) =>
212
- facet.key === SHIPPING_FACET_KEY &&
213
- facet.value === ALL_DELIVERY_METHODS_FACET_VALUE
214
- ),
215
- quantity: 0,
216
- }),
207
+ const [allDeliveryMethodsFacet, allDeliveryOptionsFacet] = useMemo(
208
+ () => [
209
+ {
210
+ value: ALL_DELIVERY_METHODS_FACET_VALUE,
211
+ label:
212
+ deliveryPromiseSettings?.deliveryMethods?.allDeliveryMethods ??
213
+ 'All delivery methods',
214
+ selected:
215
+ !selectedFacets.some(({ key }) => key === SHIPPING_FACET_KEY) ||
216
+ selectedFacets?.some(
217
+ ({ key, value }) =>
218
+ key === SHIPPING_FACET_KEY &&
219
+ value === ALL_DELIVERY_METHODS_FACET_VALUE
220
+ ),
221
+ quantity: 0,
222
+ },
223
+ {
224
+ value: ALL_DELIVERY_OPTIONS_FACET_VALUE,
225
+ label:
226
+ deliveryPromiseSettings?.deliveryOptions?.allDeliveryOptions ??
227
+ 'All delivery options',
228
+ selected:
229
+ !selectedFacets.some(
230
+ ({ key }) => key === DELIVERY_OPTIONS_FACET_KEY
231
+ ) ||
232
+ selectedFacets?.some(
233
+ ({ key, value }) =>
234
+ key === DELIVERY_OPTIONS_FACET_KEY &&
235
+ value === ALL_DELIVERY_OPTIONS_FACET_VALUE
236
+ ),
237
+ quantity: 0,
238
+ },
239
+ ],
217
240
  [selectedFacets, deliveryPromiseSettings, pickupInPointFacet]
218
241
  )
219
242
 
@@ -272,61 +295,100 @@ export function useDeliveryPromise({
272
295
  if (!allFacets) return []
273
296
 
274
297
  return !isDeliveryPromiseEnabled || !postalCode
275
- ? allFacets.filter(({ key }) => key !== SHIPPING_FACET_KEY)
276
- : allFacets.map((facet) => {
277
- if (
278
- facet.key !== SHIPPING_FACET_KEY ||
279
- facet.__typename !== 'StoreFacetBoolean'
280
- )
281
- return facet
298
+ ? allFacets.filter(
299
+ ({ key }) =>
300
+ key !== SHIPPING_FACET_KEY &&
301
+ key !== DELIVERY_OPTIONS_FACET_KEY &&
302
+ key !== DYNAMIC_ESTIMATE_FACET_KEY
303
+ )
304
+ : allFacets
305
+ .filter(({ key }) => key !== DYNAMIC_ESTIMATE_FACET_KEY) // TODO: remove this filter when dynamic estimate is implemented
306
+ .filter(({ key }) => {
307
+ if (
308
+ !isDeliveryOptionsEnabled &&
309
+ key === DELIVERY_OPTIONS_FACET_KEY
310
+ ) {
311
+ return false
312
+ }
313
+
314
+ return true
315
+ })
316
+ .map((facet) => {
317
+ if (facet.__typename !== 'StoreFacetBoolean') return facet
318
+
319
+ if (facet.key === DELIVERY_OPTIONS_FACET_KEY) {
320
+ facet.values = withUniqueFacet(
321
+ facet.values,
322
+ allDeliveryOptionsFacet
323
+ )
324
+
325
+ return facet
326
+ }
282
327
 
283
- facet.values = withUniqueFacet(facet.values, allDeliveryMethodsFacet)
284
- const pickupInPointFacetIndex = facet.values.findIndex(
285
- (item) => item?.value === PICKUP_IN_POINT_FACET_VALUE
286
- )
328
+ if (facet.key !== SHIPPING_FACET_KEY) return facet
287
329
 
288
- // Remove old pickup `pickup in point` facet from list and search state
289
- if (pickupInPointFacetIndex !== -1 && !defaultPickupPoint) {
290
- const selectedShippingFacet = selectedFacets.find(
291
- ({ key }) => key === SHIPPING_FACET_KEY
330
+ facet.values = withUniqueFacet(
331
+ facet.values,
332
+ allDeliveryMethodsFacet
333
+ )
334
+ const pickupInPointFacetIndex = facet.values.findIndex(
335
+ (item) => item?.value === PICKUP_IN_POINT_FACET_VALUE
292
336
  )
293
337
 
294
- if (selectedShippingFacet) {
295
- const selectedPickupInPointFacets = selectedFacets.filter(
296
- ({ key, value }) =>
297
- value === PICKUP_IN_POINT_FACET_VALUE ||
298
- key === PICKUP_POINT_FACET_KEY
338
+ // Remove old pickup `pickup in point` facet from list and search state
339
+ if (pickupInPointFacetIndex !== -1 && !defaultPickupPoint) {
340
+ const selectedShippingFacet = selectedFacets.find(
341
+ ({ key }) => key === SHIPPING_FACET_KEY
299
342
  )
300
343
 
301
- selectedPickupInPointFacets.length
302
- ? onDeliveryFacetChange({ facets: selectedPickupInPointFacets })
303
- : onDeliveryFacetChange({ facet: selectedShippingFacet })
344
+ if (selectedShippingFacet) {
345
+ const selectedPickupInPointFacets = selectedFacets.filter(
346
+ ({ key, value }) =>
347
+ value === PICKUP_IN_POINT_FACET_VALUE ||
348
+ key === PICKUP_POINT_FACET_KEY
349
+ )
350
+
351
+ selectedPickupInPointFacets.length
352
+ ? onDeliveryFacetChange({
353
+ facets: selectedPickupInPointFacets,
354
+ })
355
+ : onDeliveryFacetChange({ facet: selectedShippingFacet })
356
+ }
357
+
358
+ // Removes pickupInPointIndex from array
359
+ facet.values = facet.values.filter(
360
+ (_, index) => index !== pickupInPointFacetIndex
361
+ )
362
+ }
363
+ // Prevent multiple `pickup in point` facet
364
+ else if (pickupInPointFacetIndex === -1 && defaultPickupPoint) {
365
+ facet.values.push(pickupInPointFacet)
366
+ }
367
+ // Replace current `pickup-in-point` facet with the updated one
368
+ else if (
369
+ facet.values[pickupInPointFacetIndex] &&
370
+ facet.values[pickupInPointFacetIndex]?.label !==
371
+ pickupInPointFacet.label
372
+ ) {
373
+ facet.values[pickupInPointFacetIndex] = pickupInPointFacet
304
374
  }
305
375
 
306
- // Removes pickupInPointIndex from array
307
- facet.values = facet.values.filter(
308
- (_, index) => index !== pickupInPointFacetIndex
376
+ facet.values = facet.values.sort((a, b) =>
377
+ (a.value ?? '').localeCompare(b.value ?? '')
309
378
  )
310
- }
311
- // Prevent multiple `pickup in point` facet
312
- else if (pickupInPointFacetIndex === -1 && defaultPickupPoint) {
313
- facet.values.push(pickupInPointFacet)
314
- }
315
- // Replace current `pickup-in-point` facet with the updated one
316
- else if (
317
- facet.values[pickupInPointFacetIndex] &&
318
- facet.values[pickupInPointFacetIndex]?.label !==
319
- pickupInPointFacet.label
320
- ) {
321
- facet.values[pickupInPointFacetIndex] = pickupInPointFacet
322
- }
323
-
324
- facet.values = facet.values.sort((a, b) =>
325
- (a.value ?? '').localeCompare(b.value ?? '')
326
- )
327
-
328
- return facet
329
- })
379
+
380
+ return facet
381
+ })
382
+ .sort((a, b) => {
383
+ // Define priority order: shipping (0), delivery-options (1), others (2)
384
+ const getPriority = (key: string) => {
385
+ if (key === SHIPPING_FACET_KEY) return 0
386
+ if (key === DELIVERY_OPTIONS_FACET_KEY) return 1
387
+ return 2
388
+ }
389
+
390
+ return getPriority(a.key) - getPriority(b.key)
391
+ })
330
392
  }, [
331
393
  allDeliveryMethodsFacet,
332
394
  pickupInPointFacet,
@@ -395,6 +457,8 @@ export function useDeliveryPromise({
395
457
  onDeliveryFacetChange,
396
458
  deliveryLabel:
397
459
  deliveryPromiseSettings?.deliveryMethods?.title ?? 'Delivery',
460
+ deliveryOptionsLabel:
461
+ deliveryPromiseSettings?.deliveryOptions?.title ?? 'Delivery Option',
398
462
  isPickupAllEnabled:
399
463
  pickupPoints?.length > 0 &&
400
464
  (deliveryPromiseSettings?.deliveryMethods?.pickupAll?.enabled ?? false),
@@ -408,10 +472,10 @@ type BoleanFacet = Extract<
408
472
  >['values'][number]
409
473
 
410
474
  function withUniqueFacet(facets: Array<BoleanFacet>, facet: BoleanFacet) {
411
- return facets.filter((item) => item.value !== facet.value).concat([facet])
475
+ return [facet, ...facets.filter((item) => item.value !== facet.value)]
412
476
  }
413
477
 
414
- const RADIO_FACETS = ['shipping', 'pickupPoint'] as const
478
+ const RADIO_FACETS = ['shipping', 'pickupPoint', 'delivery-options'] as const
415
479
  function isRadioFacet(facet: unknown): facet is (typeof RADIO_FACETS)[number] {
416
480
  if (typeof facet !== 'string') return false
417
481
 
@@ -3,33 +3,7 @@ import { useEffect } from 'react'
3
3
  import { deliveryPromise } from 'discovery.config'
4
4
  import { TIME_TO_VALIDATE_SESSION } from 'src/constants'
5
5
  import { sessionStore, validateSession } from 'src/sdk/session'
6
-
7
- async function askGeolocationConsent() {
8
- const { postalCode: stalePostalCode, geoCoordinates: staleGeoCoordinates } =
9
- sessionStore.read()
10
-
11
- if (navigator?.geolocation && (!stalePostalCode || !staleGeoCoordinates)) {
12
- navigator.geolocation.getCurrentPosition(
13
- async ({ coords: { latitude, longitude } }) => {
14
- // Revalidate the session because users can set a zip code while granting consent.
15
- const revalidatedSession = sessionStore.read()
16
- if (
17
- revalidatedSession.postalCode ||
18
- revalidatedSession.geoCoordinates
19
- ) {
20
- return
21
- }
22
-
23
- const newSession = {
24
- ...revalidatedSession,
25
- geoCoordinates: { latitude, longitude },
26
- }
27
- const validatedSession = await validateSession(newSession)
28
- sessionStore.set(validatedSession ?? newSession)
29
- }
30
- )
31
- }
32
- }
6
+ import { getNavigatorGeolocation } from '../userLocation'
33
7
 
34
8
  export default function useGeolocation() {
35
9
  useEffect(() => {
@@ -37,6 +11,22 @@ export default function useGeolocation() {
37
11
  return
38
12
  }
39
13
 
40
- setTimeout(() => askGeolocationConsent(), TIME_TO_VALIDATE_SESSION)
14
+ setTimeout(() => {
15
+ let session = sessionStore.read()
16
+
17
+ if (!session.postalCode || !session.geoCoordinates) {
18
+ getNavigatorGeolocation(session).then(async (newSession) => {
19
+ if (session === newSession) return
20
+
21
+ // checks if someone already filled the location data
22
+ session = sessionStore.read()
23
+ if (session.postalCode || session.geoCoordinates) {
24
+ return
25
+ }
26
+ const validatedSession = await validateSession(newSession)
27
+ sessionStore.set(validatedSession ?? newSession)
28
+ })
29
+ }
30
+ }, TIME_TO_VALIDATE_SESSION)
41
31
  }, [])
42
32
  }
@@ -13,8 +13,9 @@ import { sanitizeHost } from 'src/utils/utilities'
13
13
  import storeConfig from '../../../discovery.config'
14
14
  import { cartStore } from '../cart'
15
15
  import { request } from '../graphql/request'
16
- import { getSavedAddress } from '../profile'
17
16
  import { createValidationStore, useStore } from '../useStore'
17
+ import { getPostalCode } from '../userLocation/index'
18
+ import deepEqual from 'fast-deep-equal'
18
19
 
19
20
  const REFRESH_TOKEN_URL = `${discoveryConfig.storeUrl}/api/vtexid/refreshtoken/webstore`
20
21
 
@@ -75,41 +76,20 @@ export const mutation = gql(`
75
76
 
76
77
  export const validateSession = async (session: Session) => {
77
78
  // If deliveryPromise is enabled and there is no postalCode in the session
78
- if (storeConfig.deliveryPromise?.enabled && !session.postalCode) {
79
+ if (
80
+ storeConfig.deliveryPromise?.enabled &&
81
+ (!session.postalCode ||
82
+ session.postalCode === storeConfig.session.postalCode)
83
+ ) {
79
84
  // Case B2B: If a B2B shopper is logged in and a saved address is available, the postalCode field is automatically updated with the postal code from that address by the B2B session apps (shopper-session and profile-session).
80
85
  if (session.b2b && session.b2b?.savedPostalCode) {
81
86
  sessionStore.set({
82
87
  ...session,
83
88
  postalCode: session.b2b.savedPostalCode,
84
89
  })
85
- }
86
-
87
- // Case B2C: If a B2C shopper is logged in, try to get the location (postalCode, geoCoordinates, and country) from their saved address
88
- else if (session.person?.id) {
89
- const address = await getSavedAddress(session.person?.id)
90
-
91
- // Save the location in the session
92
- if (address) {
93
- sessionStore.set({
94
- ...session,
95
- city: address?.city,
96
- postalCode: address?.postalCode,
97
- geoCoordinates: {
98
- // the values come in the reverse expected order
99
- latitude: address?.geoCoordinate ? address?.geoCoordinate[1] : null,
100
- longitude: address?.geoCoordinate
101
- ? address?.geoCoordinate[0]
102
- : null,
103
- },
104
- country: address?.country,
105
- })
106
- }
107
90
  } else {
108
- // Fallback: use the initial postalCode defined in discovery.config.js
109
- const initialPostalCode = defaultStore.readInitial().postalCode
110
-
111
- !!initialPostalCode &&
112
- sessionStore.set({ ...session, postalCode: initialPostalCode })
91
+ const sessionWithLocation = await getPostalCode(session)
92
+ !!sessionWithLocation && sessionStore.set(sessionWithLocation)
113
93
  }
114
94
  }
115
95
 
@@ -170,6 +150,8 @@ const defaultStore = createSessionStore(storeConfig.session, onValidate)
170
150
  export const sessionStore = {
171
151
  ...defaultStore,
172
152
  set: (val: Session) => {
153
+ if (deepEqual(val, defaultStore.read()) === true) return
154
+
173
155
  defaultStore.set(val)
174
156
 
175
157
  // Trigger cart revalidation when session changes
@@ -0,0 +1,142 @@
1
+ import type { Session } from '@faststore/sdk'
2
+ import { getSavedAddress } from '../profile'
3
+ import DiscoveryConfig from 'discovery.config'
4
+ import { sessionStore } from '../session'
5
+ import { type RefObject, useEffect, useState } from 'react'
6
+ import { useUI } from '@faststore/ui'
7
+
8
+ const set = (session: Session, data: Partial<Session>) => {
9
+ if (!data || !Object.keys(data).length) return session
10
+
11
+ return { ...session, ...data }
12
+ }
13
+
14
+ let userAddress: Partial<
15
+ Pick<Session, 'city' | 'country' | 'geoCoordinates' | 'postalCode'>
16
+ > = undefined
17
+ const getUserSavedAddress = async (session: Session): Promise<Session> => {
18
+ if (!!userAddress) return set(session, userAddress)
19
+ const user = session?.person
20
+ if (!user?.id) return Promise.resolve(session)
21
+
22
+ const { city, country, geoCoordinate, postalCode } =
23
+ (await getSavedAddress(user.id)) ?? {}
24
+
25
+ userAddress = {
26
+ city,
27
+ country,
28
+ geoCoordinates: {
29
+ latitude: geoCoordinate?.[1] ?? null,
30
+ longitude: geoCoordinate?.[0] ?? null,
31
+ },
32
+ postalCode,
33
+ }
34
+
35
+ return set(session, userAddress)
36
+ }
37
+
38
+ let geoCoordinates: Session['geoCoordinates'] = undefined
39
+ export const getNavigatorGeolocation = (session: Session) => {
40
+ return new Promise<Session>((res) => {
41
+ if (!!geoCoordinates) return res(set(session, { geoCoordinates }))
42
+
43
+ const successLocation: PositionCallback = ({
44
+ coords: { latitude, longitude },
45
+ }) => {
46
+ geoCoordinates = { latitude, longitude }
47
+ return res(set(session, { geoCoordinates }))
48
+ }
49
+
50
+ const onError: PositionErrorCallback = (err) => {
51
+ console.warn('Failed to get navigator location: ', err)
52
+ return res(session)
53
+ }
54
+
55
+ if (!!navigator && 'geolocation' in navigator) {
56
+ const SECONDS = 1000,
57
+ MINUTE = 60 * SECONDS
58
+
59
+ return navigator.geolocation.getCurrentPosition(
60
+ successLocation,
61
+ onError,
62
+ {
63
+ timeout: 3 * MINUTE,
64
+ }
65
+ )
66
+ }
67
+
68
+ return session
69
+ })
70
+ }
71
+
72
+ export const getPostalCode = async (session: Session) => {
73
+ const sessionWithLoggedAddress = await getUserSavedAddress(session)
74
+
75
+ if (sessionWithLoggedAddress !== session) return sessionWithLoggedAddress
76
+
77
+ const defaultPostalCode: string | null =
78
+ DiscoveryConfig.session?.postalCode ?? null
79
+
80
+ return set(session, {
81
+ postalCode: defaultPostalCode,
82
+ })
83
+ }
84
+
85
+ const { deliveryPromise, session: defaultSession } = DiscoveryConfig
86
+
87
+ export const useCheckRegionState = (popoverRef?: RefObject<HTMLElement>) => {
88
+ const [regionPopoverState, setRegionPopoverState] = useState<
89
+ 'open' | 'closed'
90
+ >('closed')
91
+ const { openModal, openPopover, modal: modalOpen, closePopover } = useUI()
92
+
93
+ function getPopoverState(session: Session) {
94
+ const isDefaultPostalCode =
95
+ !!defaultSession.postalCode &&
96
+ defaultSession.postalCode === session?.postalCode
97
+
98
+ const newPopoverState =
99
+ isDefaultPostalCode ||
100
+ (!session?.postalCode && !deliveryPromise.mandatory)
101
+ ? 'open'
102
+ : 'closed'
103
+
104
+ return newPopoverState
105
+ }
106
+
107
+ useEffect(() => {
108
+ if (!deliveryPromise.enabled) return
109
+
110
+ const handle = (session: Session) => {
111
+ if (deliveryPromise.mandatory && !session?.postalCode && !modalOpen)
112
+ return openModal()
113
+
114
+ setRegionPopoverState((state) => {
115
+ const newState = getPopoverState(session)
116
+ return state !== newState ? newState : state
117
+ })
118
+ }
119
+
120
+ return sessionStore.subscribe(handle)
121
+ }, [modalOpen])
122
+
123
+ useEffect(() => {
124
+ if (regionPopoverState === 'closed') {
125
+ closePopover()
126
+ return
127
+ }
128
+
129
+ if (popoverRef) {
130
+ openPopover({
131
+ isOpen: true,
132
+ triggerRef: popoverRef,
133
+ })
134
+ }
135
+ }, [popoverRef, regionPopoverState])
136
+
137
+ return {
138
+ openModal,
139
+ openPopover,
140
+ regionPopoverState,
141
+ }
142
+ }
@@ -58,6 +58,11 @@ type DeliveryPromiseCmsData = {
58
58
  alt?: string
59
59
  }
60
60
  }
61
+ deliveryOptions?: {
62
+ enabled?: boolean
63
+ title?: string
64
+ allDeliveryOptions?: string
65
+ }
61
66
  }
62
67
 
63
68
  export function getGlobalSettings(
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2284],{2284:function(e,t,r){r.r(t),r.d(t,{default:function(){return search_SearchDropdown_SearchDropdown},sendAutocompleteClickEvent:function(){return sendAutocompleteClickEvent}});var a=r(3067),n=r(4235),i=r(1933),o=r(4583),c=r(2174),s=r(757),l=r(9994),u=r(2701),d=r(9482),m=r(1379),f=r(1549);function ownKeys(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,a)}return r}function _objectSpread(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ownKeys(Object(r),!0).forEach(function(t){(0,a.Z)(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ownKeys(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var search_SearchHistory_SearchHistory=e=>{var t=Object.assign({},e),{values:{onSearchSelection:r}}=(0,i.R)(),{searchHistory:a,clearSearchHistory:n}=(0,m.Z)();return a.length?(0,f.jsx)(u.Z,_objectSpread(_objectSpread({title:"History",onClear:n},t),{},{children:a.map(e=>(0,f.jsx)(d.Z,{value:e.term,linkProps:{href:e.path,onClick:()=>null==r?void 0:r(e.term,e.path)}},e.term))})):null},p=r(3311),h=r(1287),v=r(704),y=r(5487),g=r(2693),b=r(31),O=y.M,search_useTopSearch=function(){var{channel:e,locale:t}=(0,b.kP)(),{data:r,error:a}=(0,g.aM)(O,{term:"",selectedFacets:[{key:"channel",value:null!=e?e:""},{key:"locale",value:t}]});return{data:r,error:a}},w=["topTerms","sort"];function SearchTop_ownKeys(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,a)}return r}function SearchTop_objectSpread(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?SearchTop_ownKeys(Object(r),!0).forEach(function(t){(0,a.Z)(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):SearchTop_ownKeys(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var search_SearchTop_SearchTop=function(e){var t,{topTerms:r=[],sort:a}=e,o=(0,n.Z)(e,w),{values:{onSearchSelection:c}}=(0,i.R)(),{data:s}=search_useTopSearch(),l=(null!==(t=null==s?void 0:s.search.suggestions.terms)&&void 0!==t?t:r).slice(0,5);return 0===l.length?null:(0,f.jsx)(p.Z,SearchTop_objectSpread(SearchTop_objectSpread({title:"Top Search"},o),{},{children:l.map((e,t)=>(0,f.jsx)(h.Z,{value:e.value,index:t,linkProps:{href:(0,v.u)({term:e.value,sort:a}),onClick:()=>null==c?void 0:c(e.value,(0,v.u)({term:e.value,sort:a}))}},t))}))},E=r(6652),S=r(6035),k=r(9082),j=r(7190),P=r(2614),_=r(7866),Z=r(7859),C=r(4194),x=r(2056),D=r(8687),I=r(9746),q=r(643),R=r(8563),T=r(1090),M=r.n(T),K=["product","index","quickOrderSettings","onChangeCustomSearchDropdownVisible"],V=["href","onClick"];function SearchProductItem_ownKeys(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,a)}return r}function SearchProductItem_objectSpread(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?SearchProductItem_ownKeys(Object(r),!0).forEach(function(t){(0,a.Z)(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):SearchProductItem_ownKeys(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var search_SearchProductItem_SearchProductItem=function(e){var{product:t,index:r,quickOrderSettings:a,onChangeCustomSearchDropdownVisible:o}=e,c=(0,n.Z)(e,K),{values:{term:s,onSearchSelection:l}}=(0,i.R)(),{pushToast:u}=(0,E.l8)(),{__experimentalSKUMatrixSidebar:d}=(0,I.r3)(),m=(0,R.w)({product:t,selectedOffer:0,index:r}),{href:p,onClick:h}=m,v=(0,n.Z)(m,V),{0:y,1:g}=(0,C.useState)(1),{id:b,sku:O,gtin:w,brand:T,isVariantOf:L,isVariantOf:{name:Q},unitMultiplier:B,image:[F],offers:{lowPrice:N,offers:[{listPrice:U,availability:A,price:H,listPriceWithTaxes:G,seller:z,priceWithTaxes:W,quantity:$}]},additionalProperty:J}=t,X=SearchProductItem_objectSpread({href:p,onClick:()=>{var e;h(),null==l||l(Q,p),sendAutocompleteClickEvent({url:p,term:s,position:r,productId:null!==(e=t.isVariantOf.productGroupID)&&void 0!==e?e:t.sku})}},v),Y=(0,C.useMemo)(()=>"https://schema.org/OutOfStock"===A,[A]),ee=(0,C.useMemo)(()=>!!Object.keys(t.isVariantOf.skuVariants.allVariantsByName).length,[t]),et=(0,D.Q)({id:b,price:H,priceWithTaxes:W,listPrice:U,listPriceWithTaxes:G,seller:z,quantity:y,itemOffered:{sku:O,name:Q,gtin:w,image:[F],brand:T,isVariantOf:L,additionalProperty:J,unitMultiplier:B}},!1);return(0,f.jsxs)(S.Z,SearchProductItem_objectSpread(SearchProductItem_objectSpread({linkProps:X},c),{},{children:[(0,f.jsx)(k.Z,{children:(0,f.jsx)(x.Z,{src:F.url,alt:F.alternateName,width:56,height:56})}),(0,f.jsx)(j.Z,{title:Q,price:{value:N,listPrice:U,formatter:q.P},onValidateBlur:(e,t,r)=>u({title:"Invalid quantity!",message:"The quantity you entered is outside the range of ".concat(e," to ").concat(t,". The quantity was set to ").concat(r,"."),status:"INFO",icon:(0,f.jsx)(P.Z,{name:"CircleWavyWarning",width:30,height:30})}),quickOrder:{enabled:null==a?void 0:a.quickOrder,outOfStockLabel:"Out of stock",availability:!Y,hasVariants:ee,buyProps:et,quantity:y,onChangeQuantity:g,max:$,skuMatrixControl:(0,f.jsx)(f.Fragment,{children:(null==a?void 0:a.quickOrder)&&(0,f.jsxs)(_.Z,{children:[(0,f.jsx)(Z.Z,{children:null==a?void 0:a.skuMatrix.triggerButtonLabel}),(0,f.jsx)(d.Component,{overlayProps:{className:M().section},formatter:q.P,columns:null==a?void 0:a.skuMatrix.columns,product:t,status:e=>o("visible"===e)})]})})}})]}))},L=["sort","quickOrderSettings","onChangeCustomSearchDropdownVisible"];function SearchDropdown_ownKeys(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,a)}return r}function SearchDropdown_objectSpread(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?SearchDropdown_ownKeys(Object(r),!0).forEach(function(t){(0,a.Z)(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):SearchDropdown_ownKeys(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function sendAutocompleteClickEvent(e){var{url:t,term:a,position:n,productId:i}=e;r.e(6393).then(r.bind(r,6393)).then(e=>{var{sendAnalyticsEvent:r}=e;r({name:"intelligent_search_autocomplete_click",params:{term:a,url:t,productId:i,position:n}})})}var search_SearchDropdown_SearchDropdown=function(e){var{sort:t,quickOrderSettings:r,onChangeCustomSearchDropdownVisible:a}=e,u=(0,n.Z)(e,L),{values:{onSearchSelection:d,products:m,term:p,terms:h}}=(0,i.R)();return(0,f.jsxs)(o.Z,SearchDropdown_objectSpread(SearchDropdown_objectSpread({},u),{},{children:[(0,f.jsx)(search_SearchHistory_SearchHistory,{sort:t}),(0,f.jsx)(search_SearchTop_SearchTop,{sort:t}),(0,f.jsx)(c.Z,{children:null==h?void 0:h.map(e=>{var{value:r}=e;return(0,f.jsx)(s.Z,{term:p,suggestion:r,linkProps:{href:(0,v.u)({term:r,sort:t}),onClick:()=>{null==d||d(p,(0,v.u)({term:p,sort:t})),sendAutocompleteClickEvent({term:p,url:window.location.href})}}},r)})}),(0,f.jsx)(l.Z,{children:m.map((e,t)=>(0,f.jsx)(search_SearchProductItem_SearchProductItem,{product:e,index:t,quickOrderSettings:r,onChangeCustomSearchDropdownVisible:a},e.id))})]}))}},8687:function(e,t,r){r.d(t,{Q:function(){return useBuyButton}});var a=r(4194),n=r(6652),i=r(31),o=r(1041),useBuyButton=function(e){var t,c=!(arguments.length>1)||void 0===arguments[1]||arguments[1],{openCart:s}=(0,n.l8)(),{currency:{code:l}}=(0,i.kP)(),u=Array.isArray(e);return{onClick:(0,a.useCallback)(t=>{if(t.preventDefault(),e){var a=u?e.reduce((e,t)=>e+=t.price*t.quantity,0):e.price*e.quantity;r.e(6393).then(r.bind(r,6393)).then(t=>{var{sendAnalyticsEvent:r}=t;r({name:"add_to_cart",params:{currency:l,value:a,items:u?e.map(generatedItem):[generatedItem(e)]}})}),u?e.forEach(e=>o.i8.addItem(e)):o.i8.addItem(e),c&&s()}function generatedItem(e){return{item_id:e.itemOffered.isVariantOf.productGroupID,item_name:e.itemOffered.isVariantOf.name,item_brand:e.itemOffered.brand.name,item_variant:e.itemOffered.sku,quantity:e.quantity,price:e.price,discount:e.listPrice-e.price,currency:l,item_variant_name:e.itemOffered.name,product_reference_id:e.itemOffered.gtin}}},[l,e,s,u]),"data-testid":"buy-button","data-sku":u?"sku-matrix-sidebar":null==e?void 0:e.itemOffered.sku,"data-seller":u?null===(t=e[0])||void 0===t?void 0:t.seller.identifier:null==e?void 0:e.seller.identifier}}},643:function(e,t,r){r.d(t,{P:function(){return useFormattedPrice}});var a=r(4194),n=r(31),usePriceFormatter=function(){var{decimals:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{currency:t,locale:r}=(0,n.kP)();return(0,a.useCallback)(a=>Intl.NumberFormat(r,{style:"currency",currency:t.code,minimumFractionDigits:e?2:0}).format(a),[t.code,r,e])},useFormattedPrice=e=>{var t=usePriceFormatter();return(0,a.useMemo)(()=>t(e),[t,e])}},8563:function(e,t,r){r.d(t,{w:function(){return useProductLink}});var a=r(4194),n=r(31),useProductLink=e=>{var{index:t,product:i,selectedOffer:o}=e,{slug:c}=i,{currency:{code:s}}=(0,n.kP)(),l=(0,a.useCallback)(()=>{r.e(6393).then(r.bind(r,6393)).then(e=>{var{sendAnalyticsEvent:r}=e;r({name:"select_item",params:{items:[{item_id:i.isVariantOf.productGroupID,item_name:i.isVariantOf.name,item_brand:i.brand.name,item_variant:i.sku,index:t,price:i.offers.offers[o].price,discount:i.offers.offers[o].listPrice-i.offers.offers[o].price,currency:s,item_variant_name:i.name,product_reference_id:i.gtin}]}}),r({name:"search_select_item",params:{url:window.location.href,items:[{item_id:i.isVariantOf.productGroupID,item_variant:i.sku,index:t}]}})})},[s,i,t,o]);return{href:"/".concat(c,"/p"),onClick:l,"data-testid":"product-link"}}},9767:function(e,t,r){var a=r(4194),n=r(5450);let i=(0,a.forwardRef)(function({value:e,as:t="span",variant:r="selling",testId:i="fs-price",formatter:o=e=>e,SRText:c,...s},l){let u=o(e,r);return a.createElement(t,{ref:l,"data-fs-price":!0,"data-fs-price-variant":r,"data-testid":i,...s},c&&a.createElement(n.Z,{text:c}),u)});t.Z=i},5450:function(e,t,r){var a=r(4194);t.Z=function({text:e,as:t}){let r=t??"span";return a.createElement(r,{"data-fs-sr-only":!0},e)}},2955:function(e,t,r){r.d(t,{_:function(){return useSKUMatrix}});var a=r(4194),n=r(3442);function useSKUMatrix(){let e=(0,a.useContext)(n.m);if(!e)throw Error("Do not use SKUMatrix components outside the SKUMatrix context.");return e}},1933:function(e,t,r){r.d(t,{R:function(){return useSearch}});var a=r(4194),n=r(101);let useSearch=()=>{let e=(0,a.useContext)(n.c);return e?{inContext:!0,values:e}:{inContext:!1}}},9088:function(e,t,r){var a=r(4194),n=r(9767);let i=(0,a.forwardRef)(function({testId:e="fs-product-price",value:t,listPrice:r,formatter:i,...o},c){let s=r??0,l=t??0;return a.createElement("div",{ref:c,"data-fs-product-price":!0,"data-testid":e,...o},l!==s&&0!==s?a.createElement(a.Fragment,null,a.createElement(n.Z,{value:s,formatter:i,testId:"list-price","data-value":s,variant:"listing",SRText:"Original price:"}),a.createElement(n.Z,{value:l,formatter:i,testId:"price","data-value":l,variant:"spot",SRText:"Price:"})):a.createElement(n.Z,{value:l,formatter:i,testId:"price","data-value":l,variant:"spot",SRText:"Price:"}))});t.Z=i},6693:function(e,t,r){var a=r(4194),n=r(7041),i=r(2614),o=r(2256);t.Z=({max:e,min:t=1,unitMultiplier:r=1,useUnitMultiplier:c,initial:s,disabled:l=!1,onChange:u,onValidateBlur:d,testId:m="fs-quantity-selector",...f})=>{let[p,h]=(0,a.useState)(s??t),[v,y]=(0,a.useState)(p*r),roundUpQuantityIfNeeded=e=>c?Math.ceil(e/r)*r:e,g=p===t,b=p===e,changeQuantity=e=>{let t=validateQuantityBounds(p+e);u?.(t),h(t),y(t*r)};function validateQuantityBounds(a){let n=t?Math.max(a,t):a;return e?Math.min(n,c?e*r:e):n}return(0,a.useEffect)(()=>{s&&h(s)},[s]),a.createElement("div",{"data-fs-quantity-selector":l?"disabled":"true","data-testid":m,...f},a.createElement(n.Z,{"data-quantity-selector-button":"left",icon:a.createElement(i.Z,{name:"Minus",width:16,height:16,weight:"bold"}),"aria-label":"Decrement Quantity","aria-controls":"quantity-selector-input",disabled:g||l,onClick:()=>changeQuantity(-1),testId:`${m}-left-button`,size:"small"}),a.createElement(o.Z,{"data-quantity-selector-input":!0,id:"quantity-selector-input","aria-label":"Quantity",value:c?v:p,onChange:e=>{let t=e.target.value.replace(/\D/g,"");h(Number(t))},onBlur:function(){let a=validateQuantityBounds(p),n=roundUpQuantityIfNeeded(a),i=e??(t?Math.max(p,t):p),o=p>i||p<t;o&&d?.(t,i,n),h(()=>(y(n),u?.(n/r),n/r))},onInput:e=>{let t=e.currentTarget;t.value=t.value.replace(/\D/g,"")},disabled:l}),a.createElement(n.Z,{"data-quantity-selector-button":"right","aria-controls":"quantity-selector-input","aria-label":"Increment Quantity",disabled:b||l,icon:a.createElement(i.Z,{name:"Plus",width:16,height:16,weight:"bold"}),onClick:()=>changeQuantity(1),testId:`${m}-right-button`,size:"small"}))}},2174:function(e,t,r){var a=r(4194),n=r(1933),i=r(4564);t.Z=({testId:e="fs-search-auto-complete",children:t,...r})=>{let{inContext:o,values:c}=(0,n.R)();return o&&(c.terms.length<=0||c.term.length<=0)?null:a.createElement("section",{"data-testid":e,"data-fs-search-auto-complete":!0,...r},a.createElement(i.Z,{as:"ol"},t))}},757:function(e,t,r){var a=r(4194),n=r(2614),i=r(727);t.Z=({testId:e="fs-search-auto-complete-term",suggestion:t,term:r,linkProps:o,icon:c=a.createElement(n.Z,{name:"MagnifyingGlass",width:18,height:18})})=>{let s=t.toLowerCase().split(r.toLowerCase());return a.createElement("li",{"data-fs-search-auto-complete-item":!0,"data-testid":e},a.createElement(i.Z,{...o,"data-fs-search-auto-complete-item-link":!0,variant:"display"},a.createElement("span",{"data-fs-search-auto-complete-item-icon":!0},c),a.createElement("p",null,s.map((e,n)=>a.createElement(a.Fragment,{key:[e,n].join()},e.length>0&&a.createElement("strong",{"data-fs-search-auto-complete-item-suggestion":!0},0===n?e.charAt(0).toUpperCase()+e.slice(1):e),n!==s.length-1&&(0===n?r.split("").map((e,r)=>0===r&&0===t.indexOf(e.toUpperCase())?e.toUpperCase():e.toLowerCase()).join(""):r.toLowerCase()))))))}},4583:function(e,t,r){var a=r(4194),n=r(1933);let SearchLoading=()=>{let{inContext:e,values:t}=(0,n.R)();return a.createElement(a.Fragment,null,e&&t.isLoading&&a.createElement("p",{"data-fs-search-dropdown-loading-text":!0},"Loading..."))},i=(0,a.forwardRef)(function({testId:e="fs-search-dropdown",children:t,...r},n){return a.createElement("div",{ref:n,"data-fs-search-dropdown":!0,"data-testid":e,...r},a.createElement("section",null,a.createElement(SearchLoading,null),t))});t.Z=i},2701:function(e,t,r){var a=r(4194),n=r(1933),i=r(9009),o=r(4564);t.Z=({testId:e="fs-search-history",title:t="History",clearLabel:r="Clear History",onClear:c,children:s,...l})=>{let{inContext:u,values:d}=(0,n.R)();return u&&(0!==d.term.length||d.isLoading)?null:a.createElement("section",{"data-testid":e,"data-fs-search-history":!0,...l},a.createElement("header",{"data-fs-search-history-header":!0},a.createElement("p",{"data-fs-search-history-title":!0},t),a.createElement(i.Z,{variant:"tertiary",onClick:c,size:"small"},r)),a.createElement(o.Z,{as:"ol"},s))}},9482:function(e,t,r){var a=r(4194),n=r(2614),i=r(727);t.Z=({testId:e="fs-search-history-term",value:t,linkProps:r,icon:o=a.createElement(n.Z,{name:"ClockClockwise",width:18,height:18})})=>a.createElement("li",{"data-fs-search-history-item":!0,"data-testid":e},a.createElement(i.Z,{...r,"data-fs-search-history-item-link":!0,variant:"display"},a.createElement("span",{"data-fs-search-history-item-icon":!0},o),a.createElement("span",null,t)))},6035:function(e,t,r){var a=r(4194),n=r(727);let i=(0,a.forwardRef)(function({testId:e="fs-search-product-item",linkProps:t,children:r},i){return a.createElement("li",{ref:i,"data-fs-search-product-item":!0,"data-testid":e},a.createElement(n.Z,{...t,"data-fs-search-product-item-link":!0,variant:"display"},r))});t.Z=i},7190:function(e,t,r){r.d(t,{Z:function(){return f}});var a=r(4194),n=r(9088),i=r(1667),o=r(2614),c=r(276),s=r(6693),l=r(2256),u=r(7041);let d=(0,a.forwardRef)(function({availability:e,children:t,hasVariants:r,skuMatrixControl:n,quantity:d,outOfStockLabel:m,min:f=1,max:p,onClick:h,onChangeQuantity:v,onValidateBlur:y,...g},b){let[O,w]=(0,a.useState)("default"),E=e&&r;function stopPropagationClick(e){e.preventDefault(),e.stopPropagation()}let S=(0,a.useCallback)(()=>{switch(O){case"inProgress":return a.createElement(i.Z,null);case"completed":return a.createElement(o.Z,{name:"Checked",width:24,height:24});default:return a.createElement(o.Z,{name:"ShoppingCart",width:24,height:24})}},[O]);return a.createElement("div",{ref:b,"data-fs-search-product-item-control":!0,...g},a.createElement("div",{"data-fs-search-product-item-control-content":!0},!e&&a.createElement(c.Z,{"data-fs-search-product-item-control-badge":!0,variant:"warning"},m),t),e&&!r&&a.createElement("div",{"data-fs-search-product-item-control-actions":!0,role:"group","aria-hidden":!0,tabIndex:-1,onKeyDown:()=>{},onClick:stopPropagationClick},a.createElement("div",{"data-fs-search-product-item-control-actions-desktop":!0},a.createElement(s.Z,{disabled:"default"!==O,max:p,onValidateBlur:y,initial:d,onChange:v})),a.createElement("div",{"data-fs-search-product-item-control-actions-mobile":!0},a.createElement(l.Z,{"data-fs-product-item-control-input":!0,min:1,value:d,onChange:e=>v(e.target.value?Number(e.target.value):0),onBlur:function(){let e=p??(f?Math.max(d,f):d),t=d>e||d<f,r=d>e?e:d<f?f:d;t&&y?.(f,e,r),v(r)},onInput:e=>{let t=e.currentTarget;t.value=t.value.replace(/\D/g,"")}})),a.createElement(u.Z,{variant:"primary","aria-label":"Add product to cart",onClick:function(e){h&&(w("inProgress"),setTimeout(()=>{w("completed"),h(e)},1e3),setTimeout(()=>{w("default"),v(1)},2e3))},disabled:"inProgress"===O,icon:S()})),E&&a.createElement("div",{onClick:stopPropagationClick,"aria-hidden":!0,tabIndex:-1,onKeyDown:()=>{}},n))}),m=(0,a.forwardRef)(function({price:e,title:t,quickOrder:r,onValidateBlur:i,...o},c){let s=(0,a.useCallback)(()=>a.createElement(a.Fragment,null,a.createElement("p",{"data-fs-search-product-item-title":!0},t),0!==e.value&&a.createElement(n.Z,{"data-fs-search-product-item-prices":!0,listPrice:e.listPrice,value:e.value,formatter:e.formatter})),[e.formatter,e.listPrice,e.value,t]);return a.createElement("section",{ref:c,"data-fs-search-product-item-content":!0,...o},!r?.enabled&&s(),r?.enabled&&a.createElement(d,{outOfStockLabel:r.outOfStockLabel,availability:r.availability,hasVariants:r.hasVariants,skuMatrixControl:r.skuMatrixControl,quantity:r.quantity,onChangeQuantity:r.onChangeQuantity,max:r.max,onValidateBlur:i,...r.buyProps},s()))});var f=m},9082:function(e,t,r){var a=r(4194);let n=(0,a.forwardRef)(function({testId:e="fs-search-product-item-image",children:t,...r},n){return a.createElement("div",{ref:n,"data-fs-search-product-item-image":!0,"data-testid":e,...r},t)});t.Z=n},9994:function(e,t,r){var a=r(4194),n=r(1933),i=r(4564);t.Z=({testId:e="fs-search-products",title:t="Suggested Products",children:r,...o})=>{let{inContext:c,values:s}=(0,n.R)();return c&&s.products.length<=0?null:a.createElement("section",{"data-testid":e,"data-fs-search-products":!0,...o},a.createElement("header",{"data-fs-search-products-header":!0},a.createElement("p",{"data-fs-search-products-title":!0},t)),a.createElement(i.Z,{as:"ol"},r))}},3311:function(e,t,r){var a=r(4194),n=r(1933),i=r(4564);let o=(0,a.forwardRef)(function({testId:e="fs-top-search",title:t="Top Search",children:r,...o},c){let{inContext:s,values:l}=(0,n.R)();return s&&(0!==l.term.length||l.isLoading)?null:a.createElement("section",{ref:c,"data-testid":e,"data-fs-search-top":!0,...o},a.createElement("header",{"data-fs-search-top-header":!0},a.createElement("p",{"data-fs-search-top-title":!0},t)),a.createElement(i.Z,{as:"ol"},r))});t.Z=o},1287:function(e,t,r){var a=r(4194),n=r(727),i=r(276);let o=(0,a.forwardRef)(function({testId:e="fs-top-search-term",value:t,linkProps:r,index:o},c){return a.createElement("li",{ref:c,"data-fs-search-top-item":!0,"data-testid":e},a.createElement(n.Z,{...r,"data-fs-search-top-item-link":!0,variant:"display"},a.createElement(i.Z,{"data-fs-search-top-item-badge":!0,variant:"info"},o+1),t))});t.Z=o},7866:function(e,t,r){var a=r(4194),n=r(3442);let i=(0,a.forwardRef)(function({testId:e="fs-sku-matrix",children:t,...r},i){return a.createElement("div",{ref:i,"data-fs-sku-matrix":!0,"data-testid":e,...r},a.createElement(n.Z,null,t))});t.Z=i},7859:function(e,t,r){var a=r(4194),n=r(9009),i=r(2955);let o=(0,a.forwardRef)(function({children:e,variant:t="secondary",onClick:r,...o},c){let{setIsOpen:s}=(0,i._)();return a.createElement(n.Z,{ref:c,variant:t,onClick:e=>{s(!0),r?.(e)},...o},e)});t.Z=o},3442:function(e,t,r){r.d(t,{m:function(){return n}});var a=r(4194);let n=(0,a.createContext)(null);t.Z=function({children:e}){let[t,r]=(0,a.useState)(!1),[i,o]=(0,a.useState)([]),c=(0,a.useCallback)((e,t)=>{let r=[...i],a=r.find(t=>t.id===e);return a&&(a.selectedCount=t),o(r),r},[i]);return a.createElement(n.Provider,{value:{isOpen:t,allVariantProducts:i,setAllVariantProducts:o,onChangeQuantityItem:c,setIsOpen:r}},e)}}}]);
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3155],{2430:function(e,t,a){a.d(t,{Z:function(){return FilterDeliveryMethodFacet}});var n=a(6652),r=a(9009),l=a(31),i=a(4018),o=a(1549);function FilterDeliveryMethodFacet(e){var t,a,c,u,d,s,{item:m,deliveryMethods:f}=e,{city:v,postalCode:b}=l.Qf.read(),{openRegionSlider:p}=(0,n.l8)(),h=v?"".concat((0,i._W)(v),", ").concat(b):b,x={delivery:null!==(t=null==f?void 0:f.delivery)&&void 0!==t?t:"Shipping to","pickup-in-point":null!==(a=null==f?void 0:f.pickupInPoint)&&void 0!==a?a:"Pickup at","pickup-nearby":null!==(c=null==f?void 0:f.pickupNearby)&&void 0!==c?c:"Pickup Nearby","pickup-all":null!==(u=null==f?void 0:null===(d=f.pickupAll)||void 0===d?void 0:d.label)&&void 0!==u?u:"Pickup Anywhere"};return"delivery"===m.value?(0,o.jsxs)(o.Fragment,{children:[x[m.value],(0,o.jsx)(r.Z,{"data-fs-filter-list-item-button":!0,size:"small",onClick:()=>{p(n.gK.changeLocation)},children:h})]}):"pickup-in-point"===m.value?(0,o.jsxs)(o.Fragment,{children:[x[m.value],(0,o.jsx)(r.Z,{"data-fs-filter-list-item-button":!0,size:"small",onClick:()=>{p(n.gK.changePickupPoint)},children:m.label})]}):(0,o.jsx)(o.Fragment,{children:null!==(s=x[m.value])&&void 0!==s?s:m.label})}},3155:function(e,t,a){a.r(t),a.d(t,{fragment:function(){return E}});var n=a(5487),r=a(9029),l=a(9664),i=a(6652),o=a(5699),c=a(4199),u=a(9009),d=a(2614),s=a(2815),m=a(6174),f=a(2230),v=a(643),b=a(2011),p=a(3303),h=a(2430),x=a(1549),E=n.j9;t.default=function(e){var t,a,n,{facets:E,testId:g,dispatch:y,expanded:Z,title:k}=e,M=(0,p.T)(),{deliveryPromise:w}=null!=M?M:{},{resetInfiniteScroll:C,state:$,setState:N}=(0,r.R)(),{openRegionSlider:F}=(0,i.l8)(),{facets:A,deliveryLabel:S,isPickupAllEnabled:R,shouldDisplayDeliveryButton:I,onDeliveryFacetChange:j}=(0,b.z0)({allFacets:E,selectedFilterFacets:$.selectedFacets,deliveryPromiseSettings:w});return(0,x.jsx)(x.Fragment,{children:(0,x.jsxs)(o.Z,{testId:"desktop-".concat(g),title:k,indicesExpanded:Z,onAccordionChange:e=>y({type:"toggleExpanded",payload:e}),children:[I&&(0,x.jsx)(c.Z,{testId:g,index:0,type:"",label:S,description:null==w?void 0:null===(t=w.deliveryMethods)||void 0===t?void 0:t.description,children:(0,x.jsx)(u.Z,{"data-fs-filter-list-delivery-button":!0,variant:"secondary",onClick:()=>F(i.gK.setLocation),icon:(0,x.jsx)(d.Z,{name:"MapPin"}),children:null!==(a=null==w?void 0:null===(n=w.deliveryMethods)||void 0===n?void 0:n.setLocationButtonLabel)&&void 0!==a?a:"Set Location"})},"".concat(g,"-delivery-unset")),A.map((e,t)=>{var a,n=I?t+1:t,{__typename:r,label:i}=e,o=Z.has(n),u="shipping"===e.key;return(0,x.jsxs)(c.Z,{testId:g,index:n,type:r,label:u?S:i,description:u?null==w?void 0:null===(a=w.deliveryMethods)||void 0===a?void 0:a.description:void 0,children:["StoreFacetBoolean"===r&&o&&(0,x.jsx)(s.Z,{children:e.values.map(t=>(t.value!==b.d||R)&&(0,x.jsx)(m.Z,{id:"".concat(g,"-").concat(e.label,"-").concat(t.value),testId:g,onFacetChange:e=>{j({facet:e}),C(0)},selected:t.selected,value:t.value,quantity:t.quantity,facetKey:e.key,label:u?(0,x.jsx)(h.Z,{item:t,deliveryMethods:null==w?void 0:w.deliveryMethods}):t.label,type:u?"radio":"checkbox"},"".concat(g,"-").concat(e.label,"-").concat(t.value)))}),"StoreFacetRange"===r&&o&&(0,x.jsx)(f.Z,{facetKey:e.key,min:e.min,max:e.max,formatter:"price"===e.key.toLowerCase()?v.P:void 0,onFacetChange:e=>{N({selectedFacets:(0,l.uL)($.selectedFacets,e,!0),page:0}),C(0)}})]},"".concat(g,"-").concat(i,"-").concat(n))})]})})}},2740:function(e,t,a){var n=a(4194);let r=(0,n.forwardRef)(function({testId:e="fs-checkbox",partial:t,...a},r){return n.createElement("input",{ref:r,"data-fs-checkbox":!0,"data-testid":e,"data-fs-checkbox-partial":t,type:"checkbox",...a})});t.Z=r},6735:function(e,t,a){var n=a(4194);let r=(0,n.forwardRef)(function({testId:e="fs-radio",...t},a){return n.createElement("input",{ref:a,"data-fs-radio":!0,type:"radio","data-testid":e,...t})});t.Z=r},9395:function(e,t,a){var n=a(4194);let percent=(e,t,a)=>Math.round((e-t)/(a-t)*100),r=(0,n.forwardRef)(function({min:e,max:t,absoluteValuesLabel:a,onChange:r,onEnd:l,testId:i="fs-slider",getAriaValueText:o,step:c,minValueLabelComponent:u,maxValueLabelComponent:d,...s},m){let f=(0,n.useMemo)(()=>(t.absolute-e.absolute)/100,[t.absolute,e.absolute]),[v,b]=(0,n.useState)(()=>percent(e.selected,e.absolute,t.absolute)),[p,h]=(0,n.useState)(()=>percent(t.selected,e.absolute,t.absolute)),[x,E]=(0,n.useState)(()=>Math.floor(e.absolute+v*f)),[g,y]=(0,n.useState)(()=>Math.round(e.absolute+p*f));return(0,n.useImperativeHandle)(m,()=>({setSliderValues:a=>{let n=Math.min(Number(a.min),g);if(E(n),b(percent(n,e.absolute,t.absolute)),a.max>t.absolute){y(t.absolute),h(percent(t.absolute,e.absolute,t.absolute));return}let r=Math.max(Number(a.max),x);y(r),h(percent(r,e.absolute,t.absolute))}})),n.createElement("div",{"data-fs-slider":!0,"data-testid":i,...s},n.createElement("div",{"data-fs-slider-absolute-values":!0},n.createElement("span",null,a.min),n.createElement("span",null,a.max)),n.createElement("div",{"data-fs-slider-wrapper":!0},n.createElement("div",{"data-fs-slider-range":!0,style:{left:`${v}%`,width:`${p-v}%`}}),n.createElement("input",{type:"range",min:Math.floor(e.absolute),max:Math.round(t.absolute),value:x,step:c,onMouseUp:()=>l?.({min:x,max:g}),onTouchEnd:()=>l?.({min:x,max:g}),onChange:a=>{let n=Math.min(Number(a.target.value),g);E(n),b(percent(n,e.absolute,t.absolute)),r?.({min:n,max:g})},"data-fs-slider-thumb":"left","aria-valuemin":e.absolute,"aria-valuemax":t.absolute,"aria-valuenow":x,"aria-label":String(x),"aria-labelledby":o?.(x,"min")}),u&&n.createElement("span",{"data-fs-slider-value-label":"min",style:{left:`calc(${x/t.absolute*100}% + (${8-.2*(x/t.absolute*100)}px))`}},u(x)),n.createElement("input",{type:"range",min:Math.floor(e.absolute),max:Math.round(t.absolute),value:g,step:c,onMouseUp:()=>l?.({min:x,max:g}),onTouchEnd:()=>l?.({min:x,max:g}),onChange:a=>{let n=Math.max(Number(a.target.value),x);y(n),h(percent(n,e.absolute,t.absolute)),r?.({min:x,max:n})},"data-fs-slider-thumb":"right","aria-valuemin":e.absolute,"aria-valuemax":t.absolute,"aria-valuenow":g,"aria-label":String(g),"aria-labelledby":o?.(g,"max")}),d&&n.createElement("span",{"data-fs-slider-value-label":"max",style:{left:`calc(${g/t.absolute*100}% + (${8-.2*(g/t.absolute*100)}px))`}},d(g))))});t.Z=r},1516:function(e,t,a){a.d(t,{A:function(){return useAccordion}});var n=a(4194);let r=(0,n.createContext)(void 0),l=(0,n.forwardRef)(function({testId:e="fs-accordion",indices:t,onChange:a,children:l,...i},o){let c=n.Children.map(l,(e,t)=>{if(e)return(0,n.cloneElement)(e,{index:e.props.index??t})}),u={indices:new Set(t),onChange:a,numberOfItems:c.length};return n.createElement(r.Provider,{value:u},n.createElement("div",{ref:o,"data-fs-accordion":!0,role:"region","data-testid":e,...i},c))});function useAccordion(){let e=(0,n.useContext)(r);if(void 0===e)throw Error("Do not use Accordion components outside the Accordion context.");return e}t.Z=l},7734:function(e,t,a){var n=a(4194),r=a(1516),l=a(783),i=a(2614),o=a(9009);let c=(0,n.forwardRef)(function({testId:e="fs-accordion-button",expandedIcon:t=n.createElement(i.Z,{name:"MinusCircle","data-icon":"expanded"}),collapsedIcon:a=n.createElement(i.Z,{name:"PlusCircle","data-icon":"collapsed"}),children:c,...u},d){let{indices:s,onChange:m,numberOfItems:f}=(0,r.A)(),{index:v,panel:b,button:p,prefixId:h}=(0,l.D)();return n.createElement(o.Z,{ref:d,id:p,variant:"tertiary","data-fs-accordion-button":s.has(v)?"expanded":"collapsed","aria-expanded":s.has(v),icon:s.has(v)?t:a,iconPosition:"right","aria-controls":b,onKeyDown:e=>{if(["ArrowDown","ArrowUp"].includes(e.key))switch(e.key){case"ArrowDown":e.preventDefault(),(()=>{let e=Number(v)+1===f?0:Number(v)+1;return document.getElementById(`${h&&`${h}-`}button--${e}`)})()?.focus();break;case"ArrowUp":e.preventDefault(),(()=>{let e=Number(v)-1<0?f-1:Number(v)-1;return document.getElementById(`${h&&`${h}-`}button--${e}`)})()?.focus()}},onClick:()=>{m(v)},"data-testid":e,...u},c)});t.Z=c},783:function(e,t,a){a.d(t,{D:function(){return useAccordionItem}});var n=a(4194);let r=(0,n.createContext)(void 0),l=(0,n.forwardRef)(function({prefixId:e="",index:t=0,as:a,children:l,testId:i="fs-accordion-item",...o},c){let u=a??"div",d={index:t,prefixId:e,panel:`${e&&`${e}-`}panel--${t}`,button:`${e&&`${e}-`}button--${t}`};return n.createElement(r.Provider,{value:d},n.createElement(u,{ref:c,"data-fs-accordion-item":!0,"data-testid":i,...o},l))});function useAccordionItem(){let e=(0,n.useContext)(r);if(void 0===e)throw Error("Do not use AccordionItem components outside the AccordionItem context.");return e}t.Z=l},7583:function(e,t,a){var n=a(4194),r=a(1516),l=a(783);let i=(0,n.forwardRef)(function({testId:e="fs-accordion-panel",children:t,...a},i){let{indices:o}=(0,r.A)(),{index:c,button:u,panel:d}=(0,l.D)();return n.createElement("div",{ref:i,id:d,"data-fs-accordion-panel":!0,"aria-labelledby":u,role:"region",hidden:!o.has(c),"data-testid":e,...a},t)});t.Z=i},5737:function(e,t,a){var n=a(4194),r=a(1953),l=a(6735);let i=(0,n.forwardRef)(function({testId:e="fs-radio-field",id:t,label:a,value:i,name:o,...c},u){return n.createElement("div",{ref:u,"data-fs-radio-field":!0,"data-testid":e},n.createElement(l.Z,{id:t,value:"string"==typeof a?a:i,name:o,...c}),n.createElement(r.Z,{htmlFor:t},a))});t.Z=i},5699:function(e,t,a){var n=a(4194),r=a(1516);t.Z=function({testId:e,title:t,indicesExpanded:a,onAccordionChange:l,children:i}){return n.createElement("div",{"data-fs-filter":!0,"data-testid":e},n.createElement("h2",{"data-fs-filter-title":!0},t),n.createElement(r.Z,{indices:a,onChange:l,"data-fs-filter-accordion":!0},i))}},2815:function(e,t,a){var n=a(4194),r=a(4564);t.Z=function({children:e}){return n.createElement(r.Z,{"data-fs-filter-list":!0},e)}},6174:function(e,t,a){var n=a(4194),r=a(2740),l=a(1953),i=a(276),o=a(5737);t.Z=function({testId:e,id:t,selected:a,value:c,quantity:u,facetKey:d,label:s,type:m="checkbox",onFacetChange:f}){return n.createElement("li",{key:t,"data-fs-filter-list-item":!0},"checkbox"===m?n.createElement(n.Fragment,null,n.createElement(r.Z,{id:t,checked:a,onChange:()=>f({key:d,value:c},"BOOLEAN"),"data-fs-filter-list-item-checkbox":!0,"data-testid":`${e}-accordion-panel-checkbox`,"data-value":c,"data-quantity":u}),n.createElement(l.Z,{htmlFor:t,className:"text__title-mini-alt","data-fs-filter-list-item-label":!0},s," ",n.createElement(i.Z,{"data-fs-filter-list-item-badge":!0},u))):n.createElement(o.Z,{id:t,name:d,value:c,checked:a,onChange:()=>f({key:d,value:c},"BOOLEAN"),"data-fs-filter-list-item-radio":!0,"data-testid":`${e}-accordion-panel-radio`,"data-value":c,label:s}))}},2230:function(e,t,a){var n=a(4194),r=a(8110);let formatRange=(e,t)=>`${e.toFixed(2)}-to-${t.toFixed(2)}`;t.Z=function({min:e,max:t,formatter:a,facetKey:l,onFacetChange:i}){return n.createElement(r.Z,{"data-fs-filter-facet-range":!0,min:e,max:t,formatter:a,step:1,onEnd:e=>i({key:l,value:formatRange(e.min,e.max)},"RANGE")})}},4199:function(e,t,a){var n=a(4194),r=a(783),l=a(7734),i=a(7583);t.Z=function({testId:e,label:t,index:a,children:o,type:c,description:u}){return n.createElement(r.Z,{key:`${t}-${a}`,prefixId:e,testId:`${e}-accordion`,index:a,"data-type":c,"data-fs-filter-accordion-item":!0},n.createElement(l.Z,{testId:`${e}-accordion-button`},t),n.createElement(i.Z,null,u&&n.createElement("span",{"data-fs-filter-accordion-item-description":!0},u),o))}},8110:function(e,t,a){var n=a(4194),r=a(9395),l=a(9767),i=a(3779);let o=(0,n.forwardRef)(function({formatter:e,max:t,min:a,step:o=1,onChange:c,onEnd:u,testId:d="fs-price-range",variant:s,"aria-label":m,...f},v){let b=(0,n.useRef)();(0,n.useImperativeHandle)(v,()=>({setPriceRangeValues:e=>{c?.(e),b.current?.setSliderValues(e)}}));let p=(0,n.useRef)(null),h=(0,n.useRef)(null),[x,E]=(0,n.useState)(),[g,y]=(0,n.useState)(),[Z,k]=(0,n.useState)({min:Math.floor(a.selected),max:Math.round(t.selected)});return n.createElement("div",{"data-fs-price-range":!0,"data-testid":d,...f},n.createElement(r.Z,{ref:b,min:a,max:t,step:o,onEnd:e=>{u?.(e),E(void 0),y(void 0),k({min:e.min,max:e.max}),p.current?.value&&(p.current.value=String(e.min)),h.current?.value&&(h.current.value=String(e.max))},"aria-label":m,onChange:e=>c?.(e),absoluteValuesLabel:{min:n.createElement(l.Z,{value:Math.floor(a.absolute),variant:s,formatter:e}),max:n.createElement(l.Z,{value:Math.round(t.absolute),variant:s,formatter:e})},minValueLabelComponent:t=>n.createElement(l.Z,{value:t,variant:s,formatter:e}),maxValueLabelComponent:t=>n.createElement(l.Z,{value:t,variant:s,formatter:e})}),n.createElement("div",{"data-fs-price-range-inputs":!0},n.createElement(i.Z,{id:"price-range-min",step:o,label:"Min",type:"number",inputMode:"numeric",error:x,inputRef:p,min:Math.floor(a.absolute),max:Z.max,value:Z.min,onChange:e=>{var t;return t=e.target.value,void(E(void 0),Number(t)<Math.floor(a.absolute)||(Number(t)>Math.floor(Z.max)&&E("Min price can't be greater than max"),k({...Z,min:Number(t)}),b.current?.setSliderValues({...Z,min:Number(t)})))},onBlur:()=>!x&&u?.(Z)}),n.createElement(i.Z,{id:"price-range-max",label:"Max",step:o,type:"number",inputMode:"numeric",error:g,inputRef:h,max:Math.round(t.absolute),min:Z.min,value:Z.max,onChange:e=>{var a;return a=e.target.value,void(y(void 0),Number(a)>Math.round(t.absolute)||(Number(a)<Math.round(Z.min)&&y("Max price can't be smaller than min"),k({...Z,max:Number(a)}),b.current?.setSliderValues({...Z,max:Number(a)})))},onBlur:()=>!g&&u?.(Z)})))});t.Z=o}}]);
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3399],{3399:function(e,t,r){r.r(t),r.d(t,{default:function(){return _}});var n=r(3067),i=r(9115),o=r(1347),s=r(7171),a=r(4194),c=r(1349),d=r(9746),l=r(679),u=r(6410),p=r(1917),h=new Set,f=[],g=null,v=r(1549),product_ProductSentinel=function(e){var{product:t,title:r,page:n,pageSize:i,children:o}=e,{ref:s,inView:c}=(0,u.YD)(),{sendViewItemListEvent:d}=(0,p.m)({title:r,page:n,pageSize:i});return(0,a.useEffect)(()=>{c&&function(e){var{product:t,sendViewItemListEvent:r}=e;h.has(t.id)||(h.add(t.id),f.push({node:t}),g&&clearTimeout(g),g=setTimeout(()=>{f.length>0&&(r({products:f}),f=[])},300))}({product:t,sendViewItemListEvent:d})},[c,t]),(0,v.jsx)("div",{ref:s,style:{minHeight:"15.225rem"},children:o})};function ownKeys(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function _objectSpread(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ownKeys(Object(r),!0).forEach(function(t){(0,n.Z)(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ownKeys(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var b=(0,a.memo)(function(e){var{products:t,page:r,pageSize:n,productCard:{showDiscountBadge:a,bordered:u,taxesConfiguration:p,sponsoredLabel:h}={},firstPage:f,shouldShowComparison:g,compareLabel:b,title:m}=e,{isMobile:w}=(0,l.Z)(),{__experimentalProductCard:y}=(0,d.r3)();return(0,v.jsx)(s.Z,{aspectRatio:1,loading:0===t.length,children:(0,v.jsx)(i.Z,{children:w&&f===r?(0,v.jsxs)(v.Fragment,{children:[t.slice(0,2).map((e,t)=>{var{node:i}=e;return(0,v.jsx)(o.Z,{children:(0,v.jsx)(product_ProductSentinel,{product:i,title:m,page:r,pageSize:n,children:(0,v.jsx)(y.Component,_objectSpread(_objectSpread({enableCompareCheckbox:g,compareLabel:b,aspectRatio:1,imgProps:{width:150,height:150,sizes:"30vw",loading:"eager"}},y.props),{},{bordered:null!=u?u:y.props.bordered,showDiscountBadge:null!=a?a:y.props.showDiscountBadge,product:i,index:n*r+t+1,taxesConfiguration:p,sponsoredLabel:h}))})},"".concat(i.id))}),(0,v.jsx)(c.Z,{sectionName:"UIProductGrid-out-viewport",children:t.slice(2).map((e,t)=>{var{node:i}=e;return(0,v.jsx)(o.Z,{children:(0,v.jsx)(product_ProductSentinel,{product:i,title:m,page:r,pageSize:n,children:(0,v.jsx)(y.Component,_objectSpread(_objectSpread({enableCompareCheckbox:g,compareLabel:b,aspectRatio:1,imgProps:{width:150,height:150,sizes:"30vw",loading:"lazy"}},y.props),{},{bordered:null!=u?u:y.props.bordered,showDiscountBadge:null!=a?a:y.props.showDiscountBadge,product:i,index:n*r+t+1,taxesConfiguration:p,sponsoredLabel:h}))})},"".concat(i.id))})})]}):(0,v.jsx)(v.Fragment,{children:t.map((e,t)=>{var{node:i}=e;return(0,v.jsx)(o.Z,{children:(0,v.jsx)(product_ProductSentinel,{product:i,title:m,page:r,pageSize:n,children:(0,v.jsx)(y.Component,_objectSpread(_objectSpread({enableCompareCheckbox:g,compareLabel:b,aspectRatio:1,imgProps:{width:150,height:150,sizes:"30vw",loading:0===t?"eager":"lazy"}},y.props),{},{bordered:null!=u?u:y.props.bordered,showDiscountBadge:null!=a?a:y.props.showDiscountBadge,product:i,index:n*r+t+1,taxesConfiguration:p,sponsoredLabel:h}))})},"".concat(i.id))})})})})}),m=r(9029),w=r(3339),replacePagination=(e,t)=>{var r=new URL(window.location.href);r.searchParams.get("page")!==e&&(r.searchParams.set("page",e),t.replace(r,void 0,{shallow:!0,scroll:!1}))},search_Sentinel=function(e){var{page:t,children:r}=e,n=(0,w.useRouter)(),{pages:i}=(0,m.R)(),{isMobile:o}=(0,l.Z)(),{ref:s,inView:c}=(0,u.YD)({threshold:o?.3:.7});return(0,a.useEffect)(()=>{c&&i.length>1&&replacePagination(t.toString(),n)},[i.length,c,t]),(0,v.jsx)("div",{ref:s,children:r})},y=r(330),_=(0,a.memo)(function(e){var t,r,n,{page:i,title:o,productCard:s,itemsPerPage:a,firstPage:c,shouldShowComparison:d,compareLabel:l}=e,{data:u}=(0,y.__)(i),p=null!==(t=null==u?void 0:null===(r=u.search)||void 0===r?void 0:null===(n=r.products)||void 0===n?void 0:n.edges)&&void 0!==t?t:[];return(0,v.jsx)(search_Sentinel,{products:p,page:i,pageSize:a,title:o,children:(0,v.jsx)(b,{shouldShowComparison:d,compareLabel:l,products:p,page:i,pageSize:a,productCard:s,firstPage:c,title:o})})})},1917:function(e,t,r){r.d(t,{m:function(){return useViewItemListEvent}});var n=r(4194),i=r(31),useViewItemListEvent=e=>{var{products:t,title:o,page:s,pageSize:a}=e,{currency:{code:c}}=(0,i.kP)();return{sendViewItemListEvent:(0,n.useCallback)(e=>{var n=null!=t&&t.length?t:null==e?void 0:e.products;n&&0!==n.length&&r.e(6393).then(r.bind(r,6393)).then(e=>{var{sendAnalyticsEvent:t}=e;t({name:"view_item_list",params:{item_list_name:o,item_list_id:o,items:n.map((e,t)=>{var{node:r}=e;return{item_id:r.isVariantOf.productGroupID,item_name:r.isVariantOf.name,item_brand:r.brand.name,item_variant:r.sku,price:r.offers.offers[0].price,index:s*a+t+1,discount:r.offers.offers[0].listPrice-r.offers.offers[0].price,currency:c,item_variant_name:r.name,product_reference_id:r.gtin}})}})})},[c,t,o,s,a])}}},6410:function(e,t,r){r.d(t,{YD:function(){return useInView},df:function(){return d}});var n=r(4194);function _extends(){return(_extends=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e}).apply(this,arguments)}function _setPrototypeOf(e,t){return(_setPrototypeOf=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var i=new Map,o=new WeakMap,s=0,a=void 0;function observe(e,t,r,n){if(void 0===r&&(r={}),void 0===n&&(n=a),void 0===window.IntersectionObserver&&void 0!==n){var c=e.getBoundingClientRect();return t(n,{isIntersecting:n,target:e,intersectionRatio:"number"==typeof r.threshold?r.threshold:0,time:0,boundingClientRect:c,intersectionRect:c,rootBounds:c}),function(){}}var d=function(e){var t=Object.keys(e).sort().filter(function(t){return void 0!==e[t]}).map(function(t){var r;return t+"_"+("root"===t?(r=e.root)?(o.has(r)||(s+=1,o.set(r,s.toString())),o.get(r)):"0":e[t])}).toString(),r=i.get(t);if(!r){var n,a=new Map,c=new IntersectionObserver(function(t){t.forEach(function(t){var r,i=t.isIntersecting&&n.some(function(e){return t.intersectionRatio>=e});e.trackVisibility&&void 0===t.isVisible&&(t.isVisible=i),null==(r=a.get(t.target))||r.forEach(function(e){e(i,t)})})},e);n=c.thresholds||(Array.isArray(e.threshold)?e.threshold:[e.threshold||0]),r={id:t,observer:c,elements:a},i.set(t,r)}return r}(r),l=d.id,u=d.observer,p=d.elements,h=p.get(e)||[];return p.has(e)||p.set(e,h),h.push(t),u.observe(e),function(){h.splice(h.indexOf(t),1),0===h.length&&(p.delete(e),u.unobserve(e)),0===p.size&&(u.disconnect(),i.delete(l))}}var c=["children","as","triggerOnce","threshold","root","rootMargin","onChange","skip","trackVisibility","delay","initialInView","fallbackInView"];function isPlainChildren(e){return"function"!=typeof e.children}var d=function(e){function InView(t){var r;return(r=e.call(this,t)||this).node=null,r._unobserveCb=null,r.handleNode=function(e){!r.node||(r.unobserve(),e||r.props.triggerOnce||r.props.skip||r.setState({inView:!!r.props.initialInView,entry:void 0})),r.node=e||null,r.observeNode()},r.handleChange=function(e,t){e&&r.props.triggerOnce&&r.unobserve(),isPlainChildren(r.props)||r.setState({inView:e,entry:t}),r.props.onChange&&r.props.onChange(e,t)},r.state={inView:!!t.initialInView,entry:void 0},r}InView.prototype=Object.create(e.prototype),InView.prototype.constructor=InView,_setPrototypeOf(InView,e);var t=InView.prototype;return t.componentDidUpdate=function(e){(e.rootMargin!==this.props.rootMargin||e.root!==this.props.root||e.threshold!==this.props.threshold||e.skip!==this.props.skip||e.trackVisibility!==this.props.trackVisibility||e.delay!==this.props.delay)&&(this.unobserve(),this.observeNode())},t.componentWillUnmount=function(){this.unobserve(),this.node=null},t.observeNode=function(){if(this.node&&!this.props.skip){var e=this.props,t=e.threshold,r=e.root,n=e.rootMargin,i=e.trackVisibility,o=e.delay,s=e.fallbackInView;this._unobserveCb=observe(this.node,this.handleChange,{threshold:t,root:r,rootMargin:n,trackVisibility:i,delay:o},s)}},t.unobserve=function(){this._unobserveCb&&(this._unobserveCb(),this._unobserveCb=null)},t.render=function(){if(!isPlainChildren(this.props)){var e=this.state,t=e.inView,r=e.entry;return this.props.children({inView:t,entry:r,ref:this.handleNode})}var i=this.props,o=i.children,s=i.as,a=function(e,t){if(null==e)return{};var r,n,i={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(i[r]=e[r]);return i}(i,c);return n.createElement(s||"div",_extends({ref:this.handleNode},a),o)},InView}(n.Component);function useInView(e){var t=void 0===e?{}:e,r=t.threshold,i=t.delay,o=t.trackVisibility,s=t.rootMargin,a=t.root,c=t.triggerOnce,d=t.skip,l=t.initialInView,u=t.fallbackInView,p=n.useRef(),h=n.useState({inView:!!l}),f=h[0],g=h[1],v=n.useCallback(function(e){void 0!==p.current&&(p.current(),p.current=void 0),!d&&e&&(p.current=observe(e,function(e,t){g({inView:e,entry:t}),t.isIntersecting&&c&&p.current&&(p.current(),p.current=void 0)},{root:a,rootMargin:s,threshold:r,trackVisibility:o,delay:i},u))},[Array.isArray(r)?r.toString():r,a,s,c,d,o,u,i]);(0,n.useEffect)(function(){p.current||!f.entry||c||d||g({inView:!!l})});var b=[v,f.inView,f.entry];return b.ref=b[0],b.inView=b[1],b.entry=b[2],b}d.displayName="InView",d.defaultProps={threshold:0,triggerOnce:!1,initialInView:!1}},9115:function(e,t,r){var n=r(4194);let i=(0,n.forwardRef)(function({testId:e="fs-product-grid",children:t,...r},i){return n.createElement("ul",{ref:i,"data-fs-product-grid":!0,...r},t)});t.Z=i},1347:function(e,t,r){var n=r(4194);let i=(0,n.forwardRef)(function({testId:e="fs-product-grid-item",children:t,...r},i){return n.createElement("li",{ref:i,"data-fs-product-grid-item":!0,...r},t)});t.Z=i}}]);