@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.
- package/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +43 -43
- package/.next/cache/.tsbuildinfo +1 -1
- package/.next/cache/config.json +3 -3
- package/.next/cache/webpack/client-production/0.pack +0 -0
- package/.next/cache/webpack/client-production/index.pack +0 -0
- package/.next/cache/webpack/server-production/0.pack +0 -0
- package/.next/cache/webpack/server-production/index.pack +0 -0
- package/.next/prerender-manifest.js +1 -1
- package/.next/prerender-manifest.json +1 -1
- package/.next/react-loadable-manifest.json +24 -24
- package/.next/routes-manifest.json +1 -1
- package/.next/server/chunks/2430.js +1 -1
- package/.next/server/chunks/2570.js +1 -1
- package/.next/server/chunks/3945.js +1 -1
- package/.next/server/chunks/8071.js +1 -1
- package/.next/server/chunks/83.js +1 -1
- package/.next/server/chunks/8474.js +1 -1
- package/.next/server/chunks/8563.js +1 -1
- package/.next/server/chunks/8687.js +1 -1
- package/.next/server/chunks/9117.js +1 -1
- package/.next/server/chunks/948.js +2 -2
- package/.next/server/chunks/9563.js +2 -2
- package/.next/server/chunks/9630.js +3 -3
- package/.next/server/chunks/9853.js +1 -1
- package/.next/server/chunks/ButtonSignIn.js +1 -1
- package/.next/server/chunks/UISKUMatrixSidebar.js +1 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/[...slug].js +1 -1
- package/.next/server/pages/[slug]/p.js +1 -1
- package/.next/server/pages/account/orders.js +1 -1
- package/.next/server/pages/api/graphql.js +2 -2
- package/.next/server/pages/en-US/404.html +1 -1
- package/.next/server/pages/en-US/500.html +1 -1
- package/.next/server/pages/en-US/checkout.html +1 -1
- package/.next/server/pages/en-US/login.html +1 -1
- package/.next/server/pages/en-US/s.html +1 -1
- package/.next/server/pages/en-US.html +1 -1
- package/.next/server/pages/s.js +1 -1
- package/.next/server/pages-manifest.json +1 -1
- package/.next/static/{v2vl5Y9dOFfl93DdQC3uY → Uvcxd2ViFEhaCaNA_H3ts}/_buildManifest.js +1 -1
- package/.next/static/chunks/2284.6e01b30c38bb74fd.js +1 -0
- package/.next/static/chunks/3155.8ff6efc44151971f.js +1 -0
- package/.next/static/chunks/{3166-a1d98d71987c90d6.js → 3166-785c61fd0e214905.js} +1 -1
- package/.next/static/chunks/3399.15d4dbadc57c3f42.js +1 -0
- package/.next/static/chunks/3836.63a23109a71dbbdb.js +1 -0
- package/.next/static/chunks/4803.74cf987971db6d93.js +1 -0
- package/.next/static/chunks/6700.ddae2aa02d2dd401.js +1 -0
- package/.next/static/chunks/{6789.634a5fcc1ed30b8d.js → 6789.38bef760c1190c23.js} +1 -1
- package/.next/static/chunks/7191-102277856f196551.js +1 -0
- package/.next/static/chunks/83.730576d7ded8dfe2.js +1 -0
- package/.next/static/chunks/8325.40b7331df742c2f5.js +1 -0
- package/.next/static/chunks/9173-912ae438e42cb222.js +1 -0
- package/.next/static/chunks/ButtonSignIn.e767fc25322cf230.js +1 -0
- package/.next/static/chunks/CartItem.d4c2664933f93606.js +1 -0
- package/.next/static/chunks/CartSidebar.e21ad4975e18e6db.js +1 -0
- package/.next/static/chunks/Gift.5891ca280b4f0164.js +1 -0
- package/.next/static/chunks/OrderSummary.35d859a1e467ad91.js +1 -0
- package/.next/static/chunks/ProductShelf.9f3194be577c7cce.js +1 -0
- package/.next/static/chunks/ProductTiles.e0528e72234381e6.js +1 -0
- package/.next/static/chunks/RegionModal.b5edb6ada60d37ec.js +1 -0
- package/.next/static/chunks/RegionSlider.3d9063b0cb6733d9.js +1 -0
- package/.next/static/chunks/UISKUMatrixSidebar.5793df7899038286.js +1 -0
- package/.next/static/chunks/pages/[slug]/p-0287b5a8ac0b92e5.js +1 -0
- package/.next/static/chunks/pages/_app-f8a8608651b3f06b.js +1 -0
- package/.next/static/chunks/pages/account/orders/[id]-c2d355a49d409bb0.js +1 -0
- package/.next/static/chunks/pages/account/orders-68bef823fcd81bf9.js +1 -0
- package/.next/static/chunks/{webpack-39f2e04144d694ad.js → webpack-3f872192534f3b6d.js} +1 -1
- package/.next/trace +136 -136
- package/.turbo/turbo-build.log +27 -27
- package/.turbo/turbo-test.log +5 -5
- package/CHANGELOG.md +10 -0
- package/cms/faststore/content-types.json +21 -0
- package/package.json +3 -3
- package/src/Layout.tsx +0 -2
- package/src/components/region/RegionBar/RegionBar.tsx +17 -23
- package/src/components/region/RegionButton/RegionButton.tsx +4 -35
- package/src/components/search/Filter/FilterDeliveryMethodFacet.tsx +2 -8
- package/src/components/search/Filter/FilterDesktop.tsx +19 -7
- package/src/components/search/Filter/FilterSlider.tsx +20 -9
- package/src/components/templates/ProductListingPage/ProductListing.tsx +1 -1
- package/src/components/ui/ProductGallery/ProductGallery.tsx +1 -1
- package/src/sdk/deliveryPromise/useDeliveryPromise.ts +127 -63
- package/src/sdk/geolocation/useGeolocation.ts +18 -28
- package/src/sdk/session/index.ts +11 -29
- package/src/sdk/userLocation/index.ts +142 -0
- package/src/utils/globalSettings.ts +5 -0
- package/.next/static/chunks/2284.6dd050e60172189a.js +0 -1
- package/.next/static/chunks/3155.c3fa96f983101956.js +0 -1
- package/.next/static/chunks/3399.60aae5ddb9123ef5.js +0 -1
- package/.next/static/chunks/3836.a2f49cd66f78bcb2.js +0 -1
- package/.next/static/chunks/4803.412bf2a7e15626a6.js +0 -1
- package/.next/static/chunks/6700.f046aa86e2c83b53.js +0 -1
- package/.next/static/chunks/7191-2b424236f6799274.js +0 -1
- package/.next/static/chunks/83.affac11ef34a0c11.js +0 -1
- package/.next/static/chunks/8325.b3ddbb43feda1a85.js +0 -1
- package/.next/static/chunks/9173-acced9d62b9088c8.js +0 -1
- package/.next/static/chunks/ButtonSignIn.111c95c4e7e2640f.js +0 -1
- package/.next/static/chunks/CartItem.e010557e686e1009.js +0 -1
- package/.next/static/chunks/CartSidebar.f2f885b6d9a227e2.js +0 -1
- package/.next/static/chunks/Gift.f93e4a95caf390e3.js +0 -1
- package/.next/static/chunks/OrderSummary.8092365254225970.js +0 -1
- package/.next/static/chunks/ProductShelf.dcdeffe85dca1ace.js +0 -1
- package/.next/static/chunks/ProductTiles.12e553830401871d.js +0 -1
- package/.next/static/chunks/RegionModal.0aff964cb36eb49a.js +0 -1
- package/.next/static/chunks/RegionSlider.cbf2ac28eeac8dbe.js +0 -1
- package/.next/static/chunks/UISKUMatrixSidebar.8b6fac58c48f999c.js +0 -1
- package/.next/static/chunks/pages/[slug]/p-2c73921b1ab00c27.js +0 -1
- package/.next/static/chunks/pages/_app-57478e0d1d2ddf62.js +0 -1
- package/.next/static/chunks/pages/account/orders/[id]-0a4ab1b9f4c54abb.js +0 -1
- package/.next/static/chunks/pages/account/orders-63e3a141c7bd9070.js +0 -1
- package/src/components/region/RegionModal/useRegionModal.ts +0 -44
- /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
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
(
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
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(
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
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
|
-
|
|
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
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
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
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
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
|
-
|
|
302
|
-
|
|
303
|
-
|
|
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
|
-
|
|
307
|
-
|
|
308
|
-
(_, index) => index !== pickupInPointFacetIndex
|
|
376
|
+
facet.values = facet.values.sort((a, b) =>
|
|
377
|
+
(a.value ?? '').localeCompare(b.value ?? '')
|
|
309
378
|
)
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
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)
|
|
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(() =>
|
|
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
|
}
|
package/src/sdk/session/index.ts
CHANGED
|
@@ -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 (
|
|
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
|
-
|
|
109
|
-
|
|
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
|
+
}
|
|
@@ -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}}]);
|