@faststore/core 2.1.33 → 2.1.36
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/.turbo/turbo-build.log +7 -7
- package/package.json +3 -3
- package/src/components/common/Alert/Alert.tsx +5 -8
- package/src/components/navigation/Navbar/Navbar.tsx +22 -22
- package/src/components/navigation/NavbarLinks/NavbarLinks.tsx +8 -7
- package/src/components/navigation/NavbarSlider/NavbarSlider.tsx +15 -14
- package/src/components/product/ProductGrid/ProductGrid.tsx +5 -10
- package/src/components/region/RegionBar/RegionBar.tsx +27 -13
- package/src/components/search/Filter/Filter.tsx +6 -11
- package/src/components/sections/Alert/Alert.tsx +17 -13
- package/src/components/sections/Alert/Overrides.tsx +13 -25
- package/src/components/sections/BannerText/BannerText.tsx +24 -20
- package/src/components/sections/BannerText/Overrides.tsx +11 -23
- package/src/components/sections/Breadcrumb/Overrides.tsx +13 -25
- package/src/components/sections/EmptyState/EmptyState.tsx +6 -8
- package/src/components/sections/EmptyState/Overrides.tsx +12 -24
- package/src/components/sections/Hero/Hero.tsx +15 -12
- package/src/components/sections/Hero/Overrides.tsx +12 -24
- package/src/components/sections/Navbar/Overrides.tsx +43 -31
- package/src/components/sections/Newsletter/Overrides.tsx +28 -26
- package/src/components/sections/ProductDetails/Overrides.tsx +51 -38
- package/src/components/sections/ProductDetails/ProductDetails.tsx +22 -30
- package/src/components/sections/ProductGallery/Overrides.tsx +44 -35
- package/src/components/sections/ProductShelf/Overrides.tsx +14 -28
- package/src/components/sections/RegionBar/Overrides.tsx +12 -24
- package/src/components/ui/Breadcrumb/Breadcrumb.tsx +9 -7
- package/src/components/ui/ImageGallery/ImageGallery.tsx +13 -19
- package/src/components/ui/Newsletter/Newsletter.tsx +23 -24
- package/src/components/ui/ProductDetails/ProductDetailsSettings.tsx +21 -17
- package/src/components/ui/ProductGallery/ProductGallery.tsx +31 -38
- package/src/components/ui/ProductShelf/ProductShelf.tsx +11 -16
- package/src/components/ui/ShippingSimulation/ShippingSimulation.tsx +2 -3
- package/src/components/ui/SkuSelector/Selectors.tsx +8 -7
- package/src/customizations/components/overrides/Alert.tsx +3 -7
- package/src/customizations/components/overrides/BannerText.tsx +3 -7
- package/src/customizations/components/overrides/Breadcrumb.tsx +3 -7
- package/src/customizations/components/overrides/EmptyState.tsx +3 -6
- package/src/customizations/components/overrides/Hero.tsx +3 -8
- package/src/customizations/components/overrides/Navbar.tsx +3 -16
- package/src/customizations/components/overrides/Newsletter.tsx +3 -11
- package/src/customizations/components/overrides/ProductDetails.tsx +3 -18
- package/src/customizations/components/overrides/ProductGallery.tsx +3 -16
- package/src/customizations/components/overrides/ProductShelf.tsx +3 -8
- package/src/customizations/components/overrides/RegionBar.tsx +3 -8
- package/src/typings/overrideDefinitionUtils.ts +40 -0
- package/src/typings/overrides.ts +267 -0
- package/src/utils/overrides.ts +53 -0
- package/src/typings/overrides.d.ts +0 -97
|
@@ -6,7 +6,7 @@ import { useSession } from 'src/sdk/session'
|
|
|
6
6
|
import { IShippingItem } from '@faststore/api'
|
|
7
7
|
import { useShippingSimulation } from './useShippingSimulation'
|
|
8
8
|
|
|
9
|
-
import {
|
|
9
|
+
import { ShippingSimulation as ShippingSimulationWrapper } from 'src/components/sections/ProductDetails/Overrides'
|
|
10
10
|
|
|
11
11
|
type ShippingSimulationOptionalProps =
|
|
12
12
|
| 'title'
|
|
@@ -56,7 +56,6 @@ export default function ShippingSimulation({
|
|
|
56
56
|
...otherProps
|
|
57
57
|
}: ShippingSimulationProps) {
|
|
58
58
|
const { country, postalCode: sessionPostalCode } = useSession()
|
|
59
|
-
const { ShippingSimulation: ShippingSimulationWrapper } = Components
|
|
60
59
|
|
|
61
60
|
const {
|
|
62
61
|
input,
|
|
@@ -76,7 +75,7 @@ export default function ShippingSimulation({
|
|
|
76
75
|
const { location, options } = shippingSimulation
|
|
77
76
|
|
|
78
77
|
return (
|
|
79
|
-
<ShippingSimulationWrapper
|
|
78
|
+
<ShippingSimulationWrapper.Component
|
|
80
79
|
formatter={formatter}
|
|
81
80
|
onInput={handleOnInput}
|
|
82
81
|
onSubmit={handleSubmit}
|
|
@@ -4,9 +4,7 @@ import { SkuSelectorProps } from '@faststore/ui'
|
|
|
4
4
|
import NextLink from 'next/link'
|
|
5
5
|
import { Image } from '../Image'
|
|
6
6
|
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
const { SkuSelector } = Components
|
|
7
|
+
import { SkuSelector } from 'src/components/sections/ProductDetails/Overrides'
|
|
10
8
|
|
|
11
9
|
export type SkuVariantsByName = Record<
|
|
12
10
|
string,
|
|
@@ -44,16 +42,19 @@ function Selectors({
|
|
|
44
42
|
<section {...otherProps}>
|
|
45
43
|
{availableVariations &&
|
|
46
44
|
Object.keys(availableVariations).map((skuVariant) => (
|
|
47
|
-
<SkuSelector
|
|
45
|
+
<SkuSelector.Component
|
|
46
|
+
ImageComponent={ImageComponent}
|
|
47
|
+
{...SkuSelector.props}
|
|
48
48
|
key={skuVariant}
|
|
49
49
|
skuPropertyName={skuVariant}
|
|
50
50
|
availableVariations={availableVariations}
|
|
51
|
-
ImageComponent={ImageComponent}
|
|
52
51
|
activeVariations={activeVariations}
|
|
53
52
|
slugsMap={slugsMap}
|
|
54
53
|
linkProps={{
|
|
55
|
-
|
|
56
|
-
|
|
54
|
+
...(SkuSelector.props.linkProps ?? {}),
|
|
55
|
+
as: SkuSelector.props.linkProps?.as ?? NextLink,
|
|
56
|
+
legacyBehavior:
|
|
57
|
+
SkuSelector.props.linkProps?.legacyBehavior ?? false,
|
|
57
58
|
}}
|
|
58
59
|
/>
|
|
59
60
|
))}
|
|
@@ -4,12 +4,8 @@ import { SectionOverride } from 'src/typings/overrides'
|
|
|
4
4
|
|
|
5
5
|
const SECTION = 'Alert' as const
|
|
6
6
|
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
components: {
|
|
10
|
-
Alert: { props: {} },
|
|
11
|
-
Icon: { props: {} },
|
|
12
|
-
},
|
|
7
|
+
const override: SectionOverride = {
|
|
8
|
+
section: SECTION,
|
|
13
9
|
}
|
|
14
10
|
|
|
15
|
-
export
|
|
11
|
+
export { override }
|
|
@@ -4,12 +4,8 @@ import { SectionOverride } from 'src/typings/overrides'
|
|
|
4
4
|
|
|
5
5
|
const SECTION = 'BannerText' as const
|
|
6
6
|
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
components: {
|
|
10
|
-
BannerText: { props: {} },
|
|
11
|
-
BannerTextContent: { props: {} },
|
|
12
|
-
},
|
|
7
|
+
const override: SectionOverride = {
|
|
8
|
+
section: SECTION,
|
|
13
9
|
}
|
|
14
10
|
|
|
15
|
-
export
|
|
11
|
+
export { override }
|
|
@@ -4,12 +4,8 @@ import { SectionOverride } from 'src/typings/overrides'
|
|
|
4
4
|
|
|
5
5
|
const SECTION = 'Breadcrumb' as const
|
|
6
6
|
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
components: {
|
|
10
|
-
Breadcrumb: { props: {} },
|
|
11
|
-
Icon: { props: {} },
|
|
12
|
-
},
|
|
7
|
+
const override: SectionOverride = {
|
|
8
|
+
section: SECTION,
|
|
13
9
|
}
|
|
14
10
|
|
|
15
|
-
export
|
|
11
|
+
export { override }
|
|
@@ -3,11 +3,8 @@ import { SectionOverride } from 'src/typings/overrides'
|
|
|
3
3
|
|
|
4
4
|
const SECTION = 'EmptyState' as const
|
|
5
5
|
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
components: {
|
|
9
|
-
EmptyState: { props: {} },
|
|
10
|
-
},
|
|
6
|
+
const override: SectionOverride = {
|
|
7
|
+
section: SECTION,
|
|
11
8
|
}
|
|
12
9
|
|
|
13
|
-
export
|
|
10
|
+
export { override }
|
|
@@ -4,13 +4,8 @@ import { SectionOverride } from 'src/typings/overrides'
|
|
|
4
4
|
|
|
5
5
|
const SECTION = 'Hero' as const
|
|
6
6
|
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
components: {
|
|
10
|
-
Hero: { props: {} },
|
|
11
|
-
HeroImage: { props: {} },
|
|
12
|
-
HeroHeader: { props: {} },
|
|
13
|
-
},
|
|
7
|
+
const override: SectionOverride = {
|
|
8
|
+
section: SECTION,
|
|
14
9
|
}
|
|
15
10
|
|
|
16
|
-
export
|
|
11
|
+
export { override }
|
|
@@ -4,21 +4,8 @@ import { SectionOverride } from 'src/typings/overrides'
|
|
|
4
4
|
|
|
5
5
|
const SECTION = 'Navbar' as const
|
|
6
6
|
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
components: {
|
|
10
|
-
Navbar: { props: {} },
|
|
11
|
-
NavbarLinks: { props: {} },
|
|
12
|
-
NavbarLinksList: { props: {} },
|
|
13
|
-
NavbarSlider: { props: {} },
|
|
14
|
-
NavbarSliderHeader: { props: {} },
|
|
15
|
-
NavbarSliderContent: { props: {} },
|
|
16
|
-
NavbarSliderFooter: { props: {} },
|
|
17
|
-
NavbarHeader: { props: {} },
|
|
18
|
-
NavbarRow: { props: {} },
|
|
19
|
-
NavbarButtons: { props: {} },
|
|
20
|
-
IconButton: { props: {} },
|
|
21
|
-
},
|
|
7
|
+
const override: SectionOverride = {
|
|
8
|
+
section: SECTION,
|
|
22
9
|
}
|
|
23
10
|
|
|
24
|
-
export
|
|
11
|
+
export { override }
|
|
@@ -4,16 +4,8 @@ import { SectionOverride } from 'src/typings/overrides'
|
|
|
4
4
|
|
|
5
5
|
const SECTION = 'Newsletter' as const
|
|
6
6
|
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
components: {
|
|
10
|
-
ToastIconSuccess: { props: {} },
|
|
11
|
-
ToastIconError: { props: {} },
|
|
12
|
-
HeaderIcon: { props: {} },
|
|
13
|
-
InputFieldName: { props: {} },
|
|
14
|
-
InputFieldEmail: { props: {} },
|
|
15
|
-
Button: { props: {} },
|
|
16
|
-
},
|
|
7
|
+
const override: SectionOverride = {
|
|
8
|
+
section: SECTION,
|
|
17
9
|
}
|
|
18
10
|
|
|
19
|
-
export
|
|
11
|
+
export { override }
|
|
@@ -4,23 +4,8 @@ import { SectionOverride } from 'src/typings/overrides'
|
|
|
4
4
|
|
|
5
5
|
const SECTION = 'ProductDetails' as const
|
|
6
6
|
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
components: {
|
|
10
|
-
ProductTitle: { props: {} },
|
|
11
|
-
DiscountBadge: { props: {} },
|
|
12
|
-
BuyButton: { props: {} },
|
|
13
|
-
Icon: { props: {} },
|
|
14
|
-
Price: { props: {} },
|
|
15
|
-
QuantitySelector: { props: {} },
|
|
16
|
-
SkuSelector: { props: {} },
|
|
17
|
-
ShippingSimulation: { props: {} },
|
|
18
|
-
ImageGallery: { props: {} },
|
|
19
|
-
ImageZoom: { props: {} },
|
|
20
|
-
__experimentalImageGalleryImage: { props: {} },
|
|
21
|
-
__experimentalImageGallery: { props: {} },
|
|
22
|
-
__experimentalShippingSimulation: { props: {} },
|
|
23
|
-
},
|
|
7
|
+
const override: SectionOverride = {
|
|
8
|
+
section: SECTION,
|
|
24
9
|
}
|
|
25
10
|
|
|
26
|
-
export
|
|
11
|
+
export { override }
|
|
@@ -4,21 +4,8 @@ import { SectionOverride } from 'src/typings/overrides'
|
|
|
4
4
|
|
|
5
5
|
const SECTION = 'ProductGallery' as const
|
|
6
6
|
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
components: {
|
|
10
|
-
Button: { props: {} },
|
|
11
|
-
FilterIcon: { props: {} },
|
|
12
|
-
PrevIcon: { props: {} },
|
|
13
|
-
ResultsCountSkeleton: { props: {} },
|
|
14
|
-
SortSkeleton: { props: {} },
|
|
15
|
-
FilterButtonSkeleton: { props: {} },
|
|
16
|
-
LinkButtonPrev: { props: {} },
|
|
17
|
-
LinkButtonNext: { props: {} },
|
|
18
|
-
__experimentalFilterDesktop: { props: {} },
|
|
19
|
-
__experimentalFilterSlider: { props: {} },
|
|
20
|
-
__experimentalProductCard: { props: {} },
|
|
21
|
-
},
|
|
7
|
+
const override: SectionOverride = {
|
|
8
|
+
section: SECTION,
|
|
22
9
|
}
|
|
23
10
|
|
|
24
|
-
export
|
|
11
|
+
export { override }
|
|
@@ -4,13 +4,8 @@ import { SectionOverride } from 'src/typings/overrides'
|
|
|
4
4
|
|
|
5
5
|
const SECTION = 'ProductShelf' as const
|
|
6
6
|
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
components: {
|
|
10
|
-
ProductShelf: { props: {} },
|
|
11
|
-
__experimentalCarousel: { props: {} },
|
|
12
|
-
__experimentalProductCard: { props: {} },
|
|
13
|
-
},
|
|
7
|
+
const override: SectionOverride = {
|
|
8
|
+
section: SECTION,
|
|
14
9
|
}
|
|
15
10
|
|
|
16
|
-
export
|
|
11
|
+
export { override }
|
|
@@ -4,13 +4,8 @@ import { SectionOverride } from 'src/typings/overrides'
|
|
|
4
4
|
|
|
5
5
|
const SECTION = 'RegionBar' as const
|
|
6
6
|
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
components: {
|
|
10
|
-
RegionBar: { props: {} },
|
|
11
|
-
LocationIcon: { props: {} },
|
|
12
|
-
ButtonIcon: { props: {} },
|
|
13
|
-
},
|
|
7
|
+
const override: SectionOverride = {
|
|
8
|
+
section: SECTION,
|
|
14
9
|
}
|
|
15
10
|
|
|
16
|
-
export
|
|
11
|
+
export { override }
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export type DefaultSectionComponentsDefinitions<
|
|
2
|
+
T extends SectionOverrideDefinition
|
|
3
|
+
> = Record<keyof T['components'], React.ComponentType>
|
|
4
|
+
|
|
5
|
+
export type SectionOverrideDefinition<
|
|
6
|
+
SectionName extends string = string,
|
|
7
|
+
OC extends Record<string, ComponentOverrideDefinition<any, any>> = Record<
|
|
8
|
+
string,
|
|
9
|
+
ComponentOverrideDefinition<any, any>
|
|
10
|
+
>
|
|
11
|
+
> = {
|
|
12
|
+
section: SectionName
|
|
13
|
+
components?: Partial<Prettify<OC>>
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export type ComponentOverrideDefinition<ComponentProps, Props> =
|
|
17
|
+
| {
|
|
18
|
+
Component?: never
|
|
19
|
+
props: Partial<Props>
|
|
20
|
+
}
|
|
21
|
+
| {
|
|
22
|
+
Component: React.ComponentType<ComponentProps>
|
|
23
|
+
props?: never
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** This type makes complex types (usually generics) easier to read */
|
|
27
|
+
export type Prettify<T> = {
|
|
28
|
+
[K in keyof T]: T[K]
|
|
29
|
+
} & {}
|
|
30
|
+
|
|
31
|
+
// Taken from https://dev.to/lucianbc/union-type-merging-in-typescript-9al
|
|
32
|
+
type AllKeys<T> = T extends any ? keyof T : never
|
|
33
|
+
|
|
34
|
+
type PickType<T, K extends AllKeys<T>> = T extends { [k in K]?: any }
|
|
35
|
+
? T[K]
|
|
36
|
+
: undefined
|
|
37
|
+
|
|
38
|
+
export type Merge<T> = {
|
|
39
|
+
[k in AllKeys<T>]: PickType<T, k>
|
|
40
|
+
}
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import type { PropsWithChildren } from 'react'
|
|
2
|
+
import type {
|
|
3
|
+
AlertProps,
|
|
4
|
+
BannerTextContentProps,
|
|
5
|
+
BannerTextProps,
|
|
6
|
+
BreadcrumbProps,
|
|
7
|
+
ButtonProps,
|
|
8
|
+
DiscountBadgeProps,
|
|
9
|
+
EmptyStateProps,
|
|
10
|
+
HeroHeaderProps,
|
|
11
|
+
HeroImageProps,
|
|
12
|
+
HeroProps,
|
|
13
|
+
IconButtonProps,
|
|
14
|
+
IconProps,
|
|
15
|
+
ImageGalleryProps,
|
|
16
|
+
ImageZoomProps,
|
|
17
|
+
InputFieldProps,
|
|
18
|
+
LinkButtonProps,
|
|
19
|
+
NavbarButtonsProps,
|
|
20
|
+
NavbarHeaderProps,
|
|
21
|
+
NavbarLinksListProps,
|
|
22
|
+
NavbarLinksProps,
|
|
23
|
+
NavbarProps,
|
|
24
|
+
NavbarRowProps,
|
|
25
|
+
NavbarSliderContentProps,
|
|
26
|
+
NavbarSliderFooterProps,
|
|
27
|
+
NavbarSliderHeaderProps,
|
|
28
|
+
NavbarSliderProps,
|
|
29
|
+
PriceProps,
|
|
30
|
+
ProductShelfProps,
|
|
31
|
+
ProductTitleProps,
|
|
32
|
+
QuantitySelectorProps,
|
|
33
|
+
RegionBarProps,
|
|
34
|
+
ShippingSimulationProps,
|
|
35
|
+
SkeletonProps,
|
|
36
|
+
SkuSelectorProps,
|
|
37
|
+
} from '@faststore/ui'
|
|
38
|
+
|
|
39
|
+
import type {
|
|
40
|
+
ComponentOverrideDefinition,
|
|
41
|
+
SectionOverrideDefinition,
|
|
42
|
+
} from './overrideDefinitionUtils'
|
|
43
|
+
|
|
44
|
+
export type SectionOverride =
|
|
45
|
+
| AlertOverrideDefinition
|
|
46
|
+
| BannerTextOverrideDefinition
|
|
47
|
+
| BreadcrumbOverrideDefinition
|
|
48
|
+
| EmptyStateOverrideDefinition
|
|
49
|
+
| HeroOverrideDefinition
|
|
50
|
+
| NavbarOverrideDefinition
|
|
51
|
+
| NewsletterOverrideDefinition
|
|
52
|
+
| ProductDetailsOverrideDefinition
|
|
53
|
+
| ProductGalleryOverrideDefinition
|
|
54
|
+
| ProductShelfOverrideDefinition
|
|
55
|
+
| RegionBarOverrideDefinition
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Originally, these types were defined in their respective Overrides file
|
|
59
|
+
* For some reason, typescript wouldn't interpret SectionOverride correctly when
|
|
60
|
+
* defining it by importing each of the SectionOverrideDefinitions and would set it as 'any'
|
|
61
|
+
*
|
|
62
|
+
* For some reason, defining them in the same file as SectionOverride seems to fix the issue.
|
|
63
|
+
* Consider that before moving them elsewhere and test it on the starter as well.
|
|
64
|
+
*/
|
|
65
|
+
export type AlertOverrideDefinition = SectionOverrideDefinition<
|
|
66
|
+
'Alert',
|
|
67
|
+
{
|
|
68
|
+
Alert: ComponentOverrideDefinition<AlertProps, Omit<AlertProps, 'onClose'>>
|
|
69
|
+
Icon: ComponentOverrideDefinition<IconProps, IconProps>
|
|
70
|
+
}
|
|
71
|
+
>
|
|
72
|
+
|
|
73
|
+
export type BannerTextOverrideDefinition = SectionOverrideDefinition<
|
|
74
|
+
'BannerText',
|
|
75
|
+
{
|
|
76
|
+
BannerText: ComponentOverrideDefinition<BannerTextProps, BannerTextProps>
|
|
77
|
+
BannerTextContent: ComponentOverrideDefinition<
|
|
78
|
+
BannerTextContentProps,
|
|
79
|
+
BannerTextContentProps
|
|
80
|
+
>
|
|
81
|
+
}
|
|
82
|
+
>
|
|
83
|
+
|
|
84
|
+
export type BreadcrumbOverrideDefinition = SectionOverrideDefinition<
|
|
85
|
+
'Breadcrumb',
|
|
86
|
+
{
|
|
87
|
+
Breadcrumb: ComponentOverrideDefinition<BreadcrumbProps, BreadcrumbProps>
|
|
88
|
+
Icon: ComponentOverrideDefinition<IconProps, IconProps>
|
|
89
|
+
}
|
|
90
|
+
>
|
|
91
|
+
|
|
92
|
+
export type EmptyStateOverrideDefinition = SectionOverrideDefinition<
|
|
93
|
+
'EmptyState',
|
|
94
|
+
{
|
|
95
|
+
EmptyState: ComponentOverrideDefinition<
|
|
96
|
+
PropsWithChildren<EmptyStateProps>,
|
|
97
|
+
EmptyStateProps
|
|
98
|
+
>
|
|
99
|
+
}
|
|
100
|
+
>
|
|
101
|
+
|
|
102
|
+
export type HeroOverrideDefinition = SectionOverrideDefinition<
|
|
103
|
+
'Hero',
|
|
104
|
+
{
|
|
105
|
+
Hero: ComponentOverrideDefinition<HeroProps, HeroProps>
|
|
106
|
+
HeroImage: ComponentOverrideDefinition<HeroImageProps, HeroImageProps>
|
|
107
|
+
HeroHeader: ComponentOverrideDefinition<HeroHeaderProps, HeroHeaderProps>
|
|
108
|
+
}
|
|
109
|
+
>
|
|
110
|
+
|
|
111
|
+
export type NavbarOverrideDefinition = SectionOverrideDefinition<
|
|
112
|
+
'Navbar',
|
|
113
|
+
{
|
|
114
|
+
Navbar: ComponentOverrideDefinition<NavbarProps, NavbarProps>
|
|
115
|
+
NavbarLinks: ComponentOverrideDefinition<NavbarLinksProps, NavbarLinksProps>
|
|
116
|
+
NavbarLinksList: ComponentOverrideDefinition<
|
|
117
|
+
NavbarLinksListProps,
|
|
118
|
+
NavbarLinksListProps
|
|
119
|
+
>
|
|
120
|
+
NavbarSlider: ComponentOverrideDefinition<
|
|
121
|
+
NavbarSliderProps,
|
|
122
|
+
NavbarSliderProps
|
|
123
|
+
>
|
|
124
|
+
NavbarSliderHeader: ComponentOverrideDefinition<
|
|
125
|
+
NavbarSliderHeaderProps,
|
|
126
|
+
NavbarSliderHeaderProps
|
|
127
|
+
>
|
|
128
|
+
NavbarSliderContent: ComponentOverrideDefinition<
|
|
129
|
+
NavbarSliderContentProps,
|
|
130
|
+
NavbarSliderContentProps
|
|
131
|
+
>
|
|
132
|
+
NavbarSliderFooter: ComponentOverrideDefinition<
|
|
133
|
+
NavbarSliderFooterProps,
|
|
134
|
+
NavbarSliderFooterProps
|
|
135
|
+
>
|
|
136
|
+
NavbarHeader: ComponentOverrideDefinition<
|
|
137
|
+
NavbarHeaderProps,
|
|
138
|
+
NavbarHeaderProps
|
|
139
|
+
>
|
|
140
|
+
NavbarRow: ComponentOverrideDefinition<NavbarRowProps, NavbarRowProps>
|
|
141
|
+
NavbarButtons: ComponentOverrideDefinition<
|
|
142
|
+
NavbarButtonsProps,
|
|
143
|
+
NavbarButtonsProps
|
|
144
|
+
>
|
|
145
|
+
IconButton: ComponentOverrideDefinition<
|
|
146
|
+
IconButtonProps,
|
|
147
|
+
Omit<IconButtonProps, 'onClick'>
|
|
148
|
+
>
|
|
149
|
+
}
|
|
150
|
+
>
|
|
151
|
+
|
|
152
|
+
export type NewsletterOverrideDefinition = SectionOverrideDefinition<
|
|
153
|
+
'Newsletter',
|
|
154
|
+
{
|
|
155
|
+
ToastIconSuccess: ComponentOverrideDefinition<IconProps, IconProps>
|
|
156
|
+
ToastIconError: ComponentOverrideDefinition<IconProps, IconProps>
|
|
157
|
+
HeaderIcon: ComponentOverrideDefinition<IconProps, IconProps>
|
|
158
|
+
InputFieldName: ComponentOverrideDefinition<
|
|
159
|
+
InputFieldProps,
|
|
160
|
+
Omit<InputFieldProps, 'inputRef'>
|
|
161
|
+
>
|
|
162
|
+
InputFieldEmail: ComponentOverrideDefinition<
|
|
163
|
+
InputFieldProps,
|
|
164
|
+
Omit<InputFieldProps, 'inputRef'>
|
|
165
|
+
>
|
|
166
|
+
Button: ComponentOverrideDefinition<ButtonProps, ButtonProps>
|
|
167
|
+
}
|
|
168
|
+
>
|
|
169
|
+
|
|
170
|
+
export type ProductDetailsOverrideDefinition = SectionOverrideDefinition<
|
|
171
|
+
'ProductDetails',
|
|
172
|
+
{
|
|
173
|
+
ProductTitle: ComponentOverrideDefinition<
|
|
174
|
+
ProductTitleProps,
|
|
175
|
+
ProductTitleProps
|
|
176
|
+
>
|
|
177
|
+
DiscountBadge: ComponentOverrideDefinition<
|
|
178
|
+
DiscountBadgeProps,
|
|
179
|
+
Omit<DiscountBadgeProps, 'listPrice' | 'spotPrice'>
|
|
180
|
+
>
|
|
181
|
+
BuyButton: ComponentOverrideDefinition<ButtonProps, ButtonProps>
|
|
182
|
+
Icon: ComponentOverrideDefinition<IconProps, IconProps>
|
|
183
|
+
Price: ComponentOverrideDefinition<
|
|
184
|
+
PriceProps,
|
|
185
|
+
Omit<PriceProps, 'value' | 'data-value'>
|
|
186
|
+
>
|
|
187
|
+
QuantitySelector: ComponentOverrideDefinition<
|
|
188
|
+
QuantitySelectorProps,
|
|
189
|
+
Omit<QuantitySelectorProps, 'onChange'>
|
|
190
|
+
>
|
|
191
|
+
SkuSelector: ComponentOverrideDefinition<SkuSelectorProps, SkuSelectorProps>
|
|
192
|
+
ShippingSimulation: ComponentOverrideDefinition<
|
|
193
|
+
ShippingSimulationProps,
|
|
194
|
+
ShippingSimulationProps
|
|
195
|
+
>
|
|
196
|
+
ImageGallery: ComponentOverrideDefinition<
|
|
197
|
+
ImageGalleryProps,
|
|
198
|
+
ImageGalleryProps
|
|
199
|
+
>
|
|
200
|
+
ImageZoom: ComponentOverrideDefinition<ImageZoomProps, ImageZoomProps>
|
|
201
|
+
__experimentalImageGalleryImage: ComponentOverrideDefinition<any, any>
|
|
202
|
+
__experimentalImageGallery: ComponentOverrideDefinition<any, any>
|
|
203
|
+
__experimentalShippingSimulation: ComponentOverrideDefinition<any, any>
|
|
204
|
+
}
|
|
205
|
+
>
|
|
206
|
+
|
|
207
|
+
export type ProductGalleryOverrideDefinition = SectionOverrideDefinition<
|
|
208
|
+
'ProductGallery',
|
|
209
|
+
{
|
|
210
|
+
MobileFilterButton: ComponentOverrideDefinition<
|
|
211
|
+
ButtonProps,
|
|
212
|
+
Omit<ButtonProps, 'onClick'>
|
|
213
|
+
>
|
|
214
|
+
FilterIcon: ComponentOverrideDefinition<IconProps, IconProps>
|
|
215
|
+
PrevIcon: ComponentOverrideDefinition<IconProps, IconProps>
|
|
216
|
+
ResultsCountSkeleton: ComponentOverrideDefinition<
|
|
217
|
+
SkeletonProps,
|
|
218
|
+
Omit<SkeletonProps, 'loading'>
|
|
219
|
+
>
|
|
220
|
+
SortSkeleton: ComponentOverrideDefinition<
|
|
221
|
+
SkeletonProps,
|
|
222
|
+
Omit<SkeletonProps, 'loading'>
|
|
223
|
+
>
|
|
224
|
+
FilterButtonSkeleton: ComponentOverrideDefinition<
|
|
225
|
+
SkeletonProps,
|
|
226
|
+
Omit<SkeletonProps, 'loading'>
|
|
227
|
+
>
|
|
228
|
+
LinkButtonPrev: ComponentOverrideDefinition<
|
|
229
|
+
LinkButtonProps,
|
|
230
|
+
Omit<LinkButtonProps, 'onClick' | 'href'>
|
|
231
|
+
>
|
|
232
|
+
LinkButtonNext: ComponentOverrideDefinition<
|
|
233
|
+
LinkButtonProps,
|
|
234
|
+
Omit<LinkButtonProps, 'onClick' | 'href'>
|
|
235
|
+
>
|
|
236
|
+
__experimentalFilterDesktop: ComponentOverrideDefinition<any, any>
|
|
237
|
+
__experimentalFilterSlider: ComponentOverrideDefinition<any, any>
|
|
238
|
+
__experimentalProductCard: ComponentOverrideDefinition<any, any>
|
|
239
|
+
}
|
|
240
|
+
>
|
|
241
|
+
|
|
242
|
+
export type ProductShelfOverrideDefinition = SectionOverrideDefinition<
|
|
243
|
+
'ProductShelf',
|
|
244
|
+
{
|
|
245
|
+
ProductShelf: ComponentOverrideDefinition<
|
|
246
|
+
ProductShelfProps,
|
|
247
|
+
ProductShelfProps
|
|
248
|
+
>
|
|
249
|
+
__experimentalCarousel: ComponentOverrideDefinition<any, any>
|
|
250
|
+
__experimentalProductCard: ComponentOverrideDefinition<
|
|
251
|
+
any,
|
|
252
|
+
Omit<any, 'key' | 'product' | 'index'>
|
|
253
|
+
>
|
|
254
|
+
}
|
|
255
|
+
>
|
|
256
|
+
|
|
257
|
+
export type RegionBarOverrideDefinition = SectionOverrideDefinition<
|
|
258
|
+
'RegionBar',
|
|
259
|
+
{
|
|
260
|
+
RegionBar: ComponentOverrideDefinition<
|
|
261
|
+
RegionBarProps,
|
|
262
|
+
Omit<RegionBarProps, 'onButtonClick' | 'postalCode'>
|
|
263
|
+
>
|
|
264
|
+
LocationIcon: ComponentOverrideDefinition<IconProps, IconProps>
|
|
265
|
+
ButtonIcon: ComponentOverrideDefinition<IconProps, IconProps>
|
|
266
|
+
}
|
|
267
|
+
>
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
DefaultSectionComponentsDefinitions,
|
|
3
|
+
ComponentOverrideDefinition,
|
|
4
|
+
Merge,
|
|
5
|
+
} from 'src/typings/overrideDefinitionUtils'
|
|
6
|
+
|
|
7
|
+
import type { SectionOverride } from 'src/typings/overrides'
|
|
8
|
+
|
|
9
|
+
export type GetSectionOverridesReturn<SO extends SectionOverride> = {
|
|
10
|
+
[Key in keyof SO['components']]: Merge<SO['components'][Key]>
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function getSectionOverrides<SO extends SectionOverride>(
|
|
14
|
+
defaultComponents: DefaultSectionComponentsDefinitions<SO>,
|
|
15
|
+
override: SO
|
|
16
|
+
): GetSectionOverridesReturn<SO> {
|
|
17
|
+
const overriddenComponents = {} as GetSectionOverridesReturn<SO>
|
|
18
|
+
|
|
19
|
+
Object.entries(defaultComponents).forEach(([key, value]) => {
|
|
20
|
+
const componentOverride:
|
|
21
|
+
| ComponentOverrideDefinition<unknown, unknown>
|
|
22
|
+
| undefined = override.components?.[key]
|
|
23
|
+
|
|
24
|
+
if (!componentOverride) {
|
|
25
|
+
overriddenComponents[key] = {
|
|
26
|
+
Component: value,
|
|
27
|
+
props: {},
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
if (componentOverride.Component && componentOverride.props) {
|
|
34
|
+
console.warn(
|
|
35
|
+
`Mixed use of Component and props overrides detected. Defaulting to Component override: component ${key} in the ${override.section} section.`
|
|
36
|
+
)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
if (componentOverride.Component) {
|
|
40
|
+
overriddenComponents[key] = {
|
|
41
|
+
Component: componentOverride.Component,
|
|
42
|
+
props: {},
|
|
43
|
+
}
|
|
44
|
+
} else {
|
|
45
|
+
overriddenComponents[key] = {
|
|
46
|
+
Component: value,
|
|
47
|
+
props: componentOverride.props ?? {},
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
return overriddenComponents
|
|
53
|
+
}
|