@jetshop/template-trend 5.10.0 → 5.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.linaria-cache/packages/template-trend/src/components/ContentPage/ContentPage.linaria.css +5 -3
- package/.linaria-cache/packages/template-trend/src/components/ContentPage/SubPageNavigation.linaria.css +4 -0
- package/.linaria-cache/packages/template-trend/src/components/Layout/Header/ChannelSelector/ChannelSelector.linaria.css +1 -1
- package/.linaria-cache/packages/template-trend/src/components/StartPage/Content/StartPageCampaign.linaria.css +1 -1
- package/.linaria-cache/packages/template-trend/src/components/StartPage/Content/StartPageHero.linaria.css +1 -1
- package/.linaria-cache/packages/template-trend/src/components/StartPage/StartPage.linaria.css +0 -1
- package/.linaria-cache/packages/template-trend/src/components/ui/Button.linaria.css +3 -2
- package/.linaria-cache/packages/ui/Breadcrumbs/Breadcrumbs.linaria.css +1 -1
- package/.linaria-cache/packages/ui/DropdownMenu/DropdownMenu.linaria.css +1 -1
- package/.vscode/launch.json +11 -0
- package/README.md +118 -1944
- package/package.json +5 -5
- package/schema.graphql +5 -2
- package/src/components/Auth/ForgotPassword.js +3 -8
- package/src/components/Auth/README.md +5 -0
- package/src/components/Cart/CartButton.js +40 -44
- package/src/components/Cart/CartFlyout.js +18 -7
- package/src/components/Cart/CartItem.js +12 -15
- package/src/components/Cart/{addMultipleToCart.gql → queries/addMultipleToCart.gql} +1 -1
- package/src/components/Cart/{addToCart.gql → queries/addToCart.gql} +1 -1
- package/src/components/Cart/{CartFragment.gql → queries/cartFragment.gql} +2 -5
- package/src/components/Cart/{CartQuery.gql → queries/cartQuery.gql} +1 -1
- package/src/components/Cart/{decrementQuantity.gql → queries/decrementQuantity.gql} +1 -1
- package/src/components/Cart/{incrementQuantity.gql → queries/incrementQuantity.gql} +1 -1
- package/src/components/Cart/{removeFromCart.gql → queries/removeFromCart.gql} +1 -1
- package/src/components/CategoryPage/CategoryHeader.js +3 -3
- package/src/components/CategoryPage/CategoryPage.js +1 -0
- package/src/components/CategoryPage/ProductCard.js +4 -2
- package/src/components/CategoryPage/ProductGrid.js +8 -2
- package/src/components/CategoryPage/ProductGridWindow.js +22 -14
- package/src/components/CategoryPage/README.md +11 -0
- package/src/components/CategoryPage/StandardCategoryPage.js +2 -0
- package/src/components/CategoryPage/WindowedCategoryPage.js +7 -0
- package/src/components/ContentPage/ContentPage.js +69 -38
- package/src/components/ContentPage/ContentPageFragment.gql +29 -0
- package/src/components/ContentPage/SubPageNavigation.js +206 -0
- package/src/components/Layout/Footer/FooterLinks.js +6 -4
- package/src/components/Layout/Footer/PagesQuery.gql +9 -0
- package/src/components/Layout/Header/AutocompleteQuery.gql +1 -6
- package/src/components/Layout/Header/ChannelSelector/ChannelSelector.js +3 -0
- package/src/components/Layout/Header/ChannelSelector/ChannelSelectorModal.js +4 -3
- package/src/components/Layout/Header/ChannelSelector/Selector.js +2 -0
- package/src/components/Layout/Header/RecommendedChannel/RecommendedChannelSelector.js +2 -0
- package/src/components/LogOut.loadable.js +10 -0
- package/src/components/PreviewRoute.loadable.js +10 -0
- package/src/components/ProductList/AddToCart.js +8 -5
- package/src/components/ProductList/Favourite.js +2 -2
- package/src/components/ProductList/FavouriteCount.js +2 -2
- package/src/components/ProductList/Favourites.js +17 -12
- package/src/components/ProductList/Lister.js +44 -0
- package/src/components/ProductList/Product.js +5 -4
- package/src/components/ProductList/ProductLists.gql +8 -5
- package/src/components/ProductList/SelectVariant.js +6 -10
- package/src/components/ProductList/productListQueries.js +5 -0
- package/src/components/ProductPage/AddToCart/AddToCartForm.js +19 -18
- package/src/components/ProductPage/AddToCart/ProductToast.js +18 -7
- package/src/components/ProductPage/Images/ImageContainer.js +12 -1
- package/src/components/ProductPage/PackageProduct/PackageProduct.js +8 -6
- package/src/components/ProductPage/ProductInfo.js +1 -1
- package/src/components/ProductPage/ProductPage.js +3 -5
- package/src/components/ProductPage/ProductPageFragment.gql +1 -0
- package/src/components/ProductPage/StockStatus/WarehouseStock.js +15 -17
- package/src/components/ProductPage/VariantSelector.js +1 -1
- package/src/components/RouteQuery.gql +2 -2
- package/src/components/{StartPage → SearchPage}/CategoryList.js +6 -4
- package/src/components/SearchPage/EmptySearchResults.js +1 -1
- package/src/components/Shop.js +52 -76
- package/src/components/StartPage/Content/StartPageHero.js +12 -1
- package/src/components/StartPage/ContentItemFragment.gql +6 -1
- package/src/components/StartPage/StartPage.js +0 -13
- package/src/components/StartPage/StartPageProductGridFragment.gql +1 -0
- package/src/components/ui/Button.js +19 -1
- package/.linaria-cache/packages/ui/ChannelSelector/Region.linaria.css +0 -3
- package/src/components/StartPage/Campaign.js +0 -162
- package/src/components/StartPage/CampaignHeader.js +0 -101
- package/src/components/StartPage/ExtraDetails.js +0 -72
- package/src/components/StartPage/Readme.md +0 -88
- package/src/components/StartPage/campaign.json +0 -20
- package/src/components/StartPage/campaignHeader.json +0 -5
- package/src/components/StartPage/categoryList.json +0 -65
- package/src/components/StartPage/extraDetails.json +0 -6
- package/src/components/StartPage/title.json +0 -3
|
@@ -66,12 +66,23 @@ const heroStyles = css`
|
|
|
66
66
|
justify-content: center;
|
|
67
67
|
`;
|
|
68
68
|
|
|
69
|
-
const StartPageHero = ({
|
|
69
|
+
const StartPageHero = ({
|
|
70
|
+
header,
|
|
71
|
+
text,
|
|
72
|
+
buttonText,
|
|
73
|
+
buttonLink,
|
|
74
|
+
imageSrc,
|
|
75
|
+
isAboveFold
|
|
76
|
+
}) => (
|
|
70
77
|
<StartPageHeroWrapper>
|
|
71
78
|
<Image
|
|
72
79
|
fillAvailableSpace={true}
|
|
73
80
|
src={imageSrc.value}
|
|
74
81
|
className={heroStyles}
|
|
82
|
+
critical={isAboveFold?.value}
|
|
83
|
+
focalPointY={imageSrc.value.focalPointY}
|
|
84
|
+
focalPointX={imageSrc.value.focalPointX}
|
|
85
|
+
aspect={'2:1'}
|
|
75
86
|
>
|
|
76
87
|
<Container>
|
|
77
88
|
<Title>{header.value}</Title>
|
|
@@ -3,11 +3,16 @@
|
|
|
3
3
|
|
|
4
4
|
fragment ContentItemFragment on ContentItem {
|
|
5
5
|
type
|
|
6
|
-
properties {
|
|
6
|
+
properties(getImageAsImageValue: true) {
|
|
7
7
|
name
|
|
8
8
|
type
|
|
9
9
|
valueType
|
|
10
10
|
value {
|
|
11
|
+
... on ImageValue {
|
|
12
|
+
value
|
|
13
|
+
focalPointX
|
|
14
|
+
focalPointY
|
|
15
|
+
}
|
|
11
16
|
... on Product {
|
|
12
17
|
...StartPageProductGrid
|
|
13
18
|
}
|
|
@@ -2,7 +2,6 @@ import StartPageRenderer from '@jetshop/ui/StartPageRenderer';
|
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { useQuery } from 'react-apollo';
|
|
4
4
|
import { styled } from 'linaria/react';
|
|
5
|
-
import MaxWidth from '../Layout/MaxWidth';
|
|
6
5
|
import LoadingPage from '../LoadingPage';
|
|
7
6
|
import StartPageCampaign from './Content/StartPageCampaign';
|
|
8
7
|
import StartPageCategories from './Content/StartPageCategories';
|
|
@@ -12,8 +11,6 @@ import StartPageProductGrid from './Content/StartPageProductGrid';
|
|
|
12
11
|
import startPageQuery from './StartPageQuery.gql';
|
|
13
12
|
import { StartPageCategoryItem } from './Content/StartPageCategories';
|
|
14
13
|
|
|
15
|
-
import { theme } from '../Theme';
|
|
16
|
-
|
|
17
14
|
const startPageComponents = {
|
|
18
15
|
HERO: StartPageHero,
|
|
19
16
|
HTML: StartPageHTMLContent,
|
|
@@ -29,16 +26,6 @@ const StartPageWrapper = styled('div')`
|
|
|
29
26
|
flex-direction: column;
|
|
30
27
|
`;
|
|
31
28
|
|
|
32
|
-
export const MainSectionWrapper = styled(MaxWidth)`
|
|
33
|
-
width: 100%;
|
|
34
|
-
align-self: center;
|
|
35
|
-
padding-left: 1.5rem;
|
|
36
|
-
padding-right: 1.5rem;
|
|
37
|
-
${theme.below.sm} {
|
|
38
|
-
padding-left: 0px;
|
|
39
|
-
padding-right: 0px;
|
|
40
|
-
}
|
|
41
|
-
`;
|
|
42
29
|
const StartPage = ({ startPageId }) => {
|
|
43
30
|
const result = useQuery(startPageQuery, {
|
|
44
31
|
variables: { startPageId: startPageId }
|
|
@@ -5,6 +5,7 @@ import { Link } from 'react-router-dom';
|
|
|
5
5
|
import Spinner from './Spinner';
|
|
6
6
|
import t from '@jetshop/intl';
|
|
7
7
|
import { theme } from '../Theme';
|
|
8
|
+
import { isRelativeUrl } from '@jetshop/core/helpers/isRelativeUrl';
|
|
8
9
|
|
|
9
10
|
export const baseStyles = `
|
|
10
11
|
background-color: ${theme.colors.blue};
|
|
@@ -47,7 +48,7 @@ const Button = styled('button')`
|
|
|
47
48
|
${baseStyles};
|
|
48
49
|
`;
|
|
49
50
|
|
|
50
|
-
|
|
51
|
+
const TrendABase = styled('a')`
|
|
51
52
|
${baseStyles};
|
|
52
53
|
text-decoration: none;
|
|
53
54
|
display: flex;
|
|
@@ -56,6 +57,23 @@ export const TrendLink = styled(Link)`
|
|
|
56
57
|
height: 54px;
|
|
57
58
|
`;
|
|
58
59
|
|
|
60
|
+
const TrendLinkBase = styled(Link)`
|
|
61
|
+
${baseStyles};
|
|
62
|
+
text-decoration: none;
|
|
63
|
+
display: flex;
|
|
64
|
+
justify-content: center;
|
|
65
|
+
align-items: center;
|
|
66
|
+
height: 54px;
|
|
67
|
+
`;
|
|
68
|
+
|
|
69
|
+
export function TrendLink({ to, ...props }) {
|
|
70
|
+
return typeof to === 'string' && !isRelativeUrl(to) ? (
|
|
71
|
+
<TrendABase href={to} {...props} />
|
|
72
|
+
) : (
|
|
73
|
+
<TrendLinkBase to={to} {...props} />
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
|
|
59
77
|
const StyledSpinner = styled(Spinner)`
|
|
60
78
|
height: 25px;
|
|
61
79
|
circle.path {
|
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { styled } from 'linaria/react';
|
|
3
|
-
import { theme } from '../Theme';
|
|
4
|
-
|
|
5
|
-
import Image from '@jetshop/ui/Image';
|
|
6
|
-
import { MainSectionWrapper } from './StartPage';
|
|
7
|
-
import { TrendLink } from '../ui/Button';
|
|
8
|
-
|
|
9
|
-
const Container = styled('div')`
|
|
10
|
-
margin-bottom: 24px;
|
|
11
|
-
`;
|
|
12
|
-
const DescriptionBlock = styled('div')`
|
|
13
|
-
line-height: 1.25;
|
|
14
|
-
display: flex;
|
|
15
|
-
justify-content: center;
|
|
16
|
-
align-items: center;
|
|
17
|
-
flex-direction: column;
|
|
18
|
-
|
|
19
|
-
padding: 24px;
|
|
20
|
-
|
|
21
|
-
${theme.above.sm} {
|
|
22
|
-
max-width: 60vw;
|
|
23
|
-
padding: 32px;
|
|
24
|
-
}
|
|
25
|
-
${theme.above.md} {
|
|
26
|
-
max-width: 50vw;
|
|
27
|
-
padding: 48px;
|
|
28
|
-
}
|
|
29
|
-
`;
|
|
30
|
-
|
|
31
|
-
const Row = styled('div')`
|
|
32
|
-
display: flex;
|
|
33
|
-
flex-direction: row;
|
|
34
|
-
align-items: stretch;
|
|
35
|
-
justify-content: stretch;
|
|
36
|
-
position: relative;
|
|
37
|
-
margin-bottom: 1rem;
|
|
38
|
-
${theme.below.sm} {
|
|
39
|
-
flex-direction: column;
|
|
40
|
-
}
|
|
41
|
-
`;
|
|
42
|
-
|
|
43
|
-
const NewProductImage = styled('div')`
|
|
44
|
-
width: 50%;
|
|
45
|
-
${theme.below.sm} {
|
|
46
|
-
width: 100%;
|
|
47
|
-
}
|
|
48
|
-
`;
|
|
49
|
-
const NewProductText = styled(DescriptionBlock)`
|
|
50
|
-
width: 50%;
|
|
51
|
-
${theme.below.sm} {
|
|
52
|
-
width: 100%;
|
|
53
|
-
}
|
|
54
|
-
`;
|
|
55
|
-
const News = styled('h3')`
|
|
56
|
-
font-size: 60px;
|
|
57
|
-
text-align: center;
|
|
58
|
-
margin-bottom: 32px;
|
|
59
|
-
${theme.below.sm} {
|
|
60
|
-
margin-bottom: 24px;
|
|
61
|
-
}
|
|
62
|
-
`;
|
|
63
|
-
const SubtitleText = styled('p')`
|
|
64
|
-
color: black;
|
|
65
|
-
max-width: 420px;
|
|
66
|
-
font-size: 30px;
|
|
67
|
-
text-align: center;
|
|
68
|
-
margin-bottom: 32px;
|
|
69
|
-
${theme.below.sm} {
|
|
70
|
-
font-size: 22px;
|
|
71
|
-
margin-bottom: 24px;
|
|
72
|
-
}
|
|
73
|
-
`;
|
|
74
|
-
|
|
75
|
-
const AmbassadorImage = styled('div')`
|
|
76
|
-
width: 50%;
|
|
77
|
-
|
|
78
|
-
${theme.below.sm} {
|
|
79
|
-
width: 100%;
|
|
80
|
-
}
|
|
81
|
-
`;
|
|
82
|
-
const AmbassadorText = styled(DescriptionBlock)`
|
|
83
|
-
background-color: #000000;
|
|
84
|
-
width: 50%;
|
|
85
|
-
color: white;
|
|
86
|
-
${theme.below.sm} {
|
|
87
|
-
width: 100%;
|
|
88
|
-
}
|
|
89
|
-
`;
|
|
90
|
-
const Ambassadors = styled('h3')`
|
|
91
|
-
margin-bottom: 32px;
|
|
92
|
-
color: #ffffff;
|
|
93
|
-
font-size: 40px;
|
|
94
|
-
${theme.below.sm} {
|
|
95
|
-
margin-bottom: 24px;
|
|
96
|
-
}
|
|
97
|
-
`;
|
|
98
|
-
const LearnMore = styled('p')`
|
|
99
|
-
color: white;
|
|
100
|
-
font-size: 22px;
|
|
101
|
-
font-weight: bold;
|
|
102
|
-
margin-bottom: 32px;
|
|
103
|
-
text-align: center;
|
|
104
|
-
width: 360px;
|
|
105
|
-
|
|
106
|
-
${theme.below.sm} {
|
|
107
|
-
font-size: 18px;
|
|
108
|
-
margin-bottom: 24px;
|
|
109
|
-
width: auto;
|
|
110
|
-
}
|
|
111
|
-
`;
|
|
112
|
-
const GetInspiredButton = styled(TrendLink)`
|
|
113
|
-
margin: 4px;
|
|
114
|
-
width: 100%;
|
|
115
|
-
max-width: 300px;
|
|
116
|
-
`;
|
|
117
|
-
|
|
118
|
-
const FirstImage = ({ src }) => (
|
|
119
|
-
<NewProductImage>
|
|
120
|
-
<Image src={src} aspect="4:5" cover sizes={[1, 1 / 2]} quality={80} />
|
|
121
|
-
</NewProductImage>
|
|
122
|
-
);
|
|
123
|
-
const FirstSquare = ({ mainText, subtitleText, buttonText, buttonUrl }) => (
|
|
124
|
-
<NewProductText>
|
|
125
|
-
<News>{mainText}</News>
|
|
126
|
-
<SubtitleText>{subtitleText}</SubtitleText>
|
|
127
|
-
<GetInspiredButton to={buttonUrl || '/'}>{buttonText}</GetInspiredButton>
|
|
128
|
-
</NewProductText>
|
|
129
|
-
);
|
|
130
|
-
|
|
131
|
-
const SecondImage = ({ src }) => (
|
|
132
|
-
<AmbassadorImage>
|
|
133
|
-
<Image src={src} aspect="5:4" cover sizes={[1, 1 / 2]} quality={80} />
|
|
134
|
-
</AmbassadorImage>
|
|
135
|
-
);
|
|
136
|
-
|
|
137
|
-
const SecondSquare = ({ mainText, subtitleText, buttonText, buttonUrl }) => (
|
|
138
|
-
<AmbassadorText>
|
|
139
|
-
<Ambassadors>{mainText}</Ambassadors>
|
|
140
|
-
<LearnMore>{subtitleText}</LearnMore>
|
|
141
|
-
<GetInspiredButton to={buttonUrl || '/'}>{buttonText}</GetInspiredButton>
|
|
142
|
-
</AmbassadorText>
|
|
143
|
-
);
|
|
144
|
-
|
|
145
|
-
const Campaign = ({ firstImage, firstSquare, secondImage, secondSquare }) => {
|
|
146
|
-
return (
|
|
147
|
-
<MainSectionWrapper>
|
|
148
|
-
<Container>
|
|
149
|
-
<Row>
|
|
150
|
-
<FirstImage {...firstImage} />
|
|
151
|
-
<FirstSquare {...firstSquare} />
|
|
152
|
-
</Row>
|
|
153
|
-
<Row>
|
|
154
|
-
<SecondSquare {...secondSquare} />
|
|
155
|
-
<SecondImage {...secondImage} />
|
|
156
|
-
</Row>
|
|
157
|
-
</Container>
|
|
158
|
-
</MainSectionWrapper>
|
|
159
|
-
);
|
|
160
|
-
};
|
|
161
|
-
|
|
162
|
-
export default Campaign;
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { styled } from 'linaria/react';
|
|
3
|
-
import { css } from 'linaria';
|
|
4
|
-
import MaxWidth from '../Layout/MaxWidth';
|
|
5
|
-
import { theme } from '../Theme';
|
|
6
|
-
import Image from '@jetshop/ui/Image';
|
|
7
|
-
import { TrendLink } from '../ui/Button';
|
|
8
|
-
|
|
9
|
-
const Background = styled('div')`
|
|
10
|
-
background-color: #000000;
|
|
11
|
-
width: 100%;
|
|
12
|
-
margin-bottom: 32px;
|
|
13
|
-
|
|
14
|
-
display: flex;
|
|
15
|
-
flex: 1 1 50vh;
|
|
16
|
-
height: 100%;
|
|
17
|
-
min-height: 360px;
|
|
18
|
-
`;
|
|
19
|
-
|
|
20
|
-
const Content = styled(MaxWidth)``;
|
|
21
|
-
const heroStyles = css`
|
|
22
|
-
height: 100%;
|
|
23
|
-
background-size: cover;
|
|
24
|
-
background-position: 50% 25%;
|
|
25
|
-
|
|
26
|
-
${theme.above.lg} {
|
|
27
|
-
margin: 0 -2rem;
|
|
28
|
-
}
|
|
29
|
-
`;
|
|
30
|
-
|
|
31
|
-
const Overlay = styled('div')`
|
|
32
|
-
display: flex;
|
|
33
|
-
width: 100%;
|
|
34
|
-
height: 100%;
|
|
35
|
-
flex-direction: column;
|
|
36
|
-
padding: 1.5rem;
|
|
37
|
-
color: white;
|
|
38
|
-
align-items: center;
|
|
39
|
-
${theme.below.sm} {
|
|
40
|
-
padding: 8px;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
${theme.above.lg} {
|
|
44
|
-
padding-left: 3.5rem;
|
|
45
|
-
padding-right: 3.5rem;
|
|
46
|
-
|
|
47
|
-
background: linear-gradient(
|
|
48
|
-
to right,
|
|
49
|
-
#000,
|
|
50
|
-
rgba(0, 0, 0, 0) 10%,
|
|
51
|
-
rgba(0, 0, 0, 0) 90%,
|
|
52
|
-
#000
|
|
53
|
-
);
|
|
54
|
-
}
|
|
55
|
-
`;
|
|
56
|
-
|
|
57
|
-
const CampaignText = styled('h2')`
|
|
58
|
-
font-size: 5rem;
|
|
59
|
-
max-width: 50rem;
|
|
60
|
-
margin-top: auto;
|
|
61
|
-
font-family: 'Source Sans Pro';
|
|
62
|
-
font-style: normal;
|
|
63
|
-
font-weight: bold;
|
|
64
|
-
line-height: 105px;
|
|
65
|
-
font-size: 76px;
|
|
66
|
-
text-align: center;
|
|
67
|
-
|
|
68
|
-
${theme.below.sm} {
|
|
69
|
-
font-size: 2.875rem;
|
|
70
|
-
max-width: 100;
|
|
71
|
-
text-align: center;
|
|
72
|
-
}
|
|
73
|
-
`;
|
|
74
|
-
|
|
75
|
-
const HeaderButton = styled(TrendLink)`
|
|
76
|
-
margin: 2.5rem 0;
|
|
77
|
-
width: 14rem;
|
|
78
|
-
font-size: 1rem;
|
|
79
|
-
text-transform: uppercase;
|
|
80
|
-
`;
|
|
81
|
-
|
|
82
|
-
export default ({ imageSrc, text, buttonText, buttonUrl }) => {
|
|
83
|
-
return (
|
|
84
|
-
<Background>
|
|
85
|
-
<Content>
|
|
86
|
-
<Image
|
|
87
|
-
src={imageSrc}
|
|
88
|
-
aspect={null}
|
|
89
|
-
cover={true}
|
|
90
|
-
quality={80}
|
|
91
|
-
className={heroStyles}
|
|
92
|
-
>
|
|
93
|
-
<Overlay>
|
|
94
|
-
<CampaignText>{text}</CampaignText>
|
|
95
|
-
<HeaderButton to={buttonUrl || '/'}>{buttonText}</HeaderButton>
|
|
96
|
-
</Overlay>
|
|
97
|
-
</Image>
|
|
98
|
-
</Content>
|
|
99
|
-
</Background>
|
|
100
|
-
);
|
|
101
|
-
};
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { styled } from 'linaria/react';
|
|
3
|
-
import MaxWidth from '../Layout/MaxWidth';
|
|
4
|
-
import { theme } from '../Theme';
|
|
5
|
-
|
|
6
|
-
const ExtraDetailsWrapper = styled('div')`
|
|
7
|
-
background-color: #f7f7f7;
|
|
8
|
-
width: 100%;
|
|
9
|
-
|
|
10
|
-
${theme.below.md} {
|
|
11
|
-
margin-bottom: 2rem;
|
|
12
|
-
}
|
|
13
|
-
`;
|
|
14
|
-
|
|
15
|
-
const MainContentWrapper = styled('div')`
|
|
16
|
-
display: flex;
|
|
17
|
-
justify-content: space-around;
|
|
18
|
-
padding: 3rem 0;
|
|
19
|
-
|
|
20
|
-
${theme.below.sm} {
|
|
21
|
-
flex-wrap: wrap;
|
|
22
|
-
align-items: flex-start;
|
|
23
|
-
padding: 1.5rem 0.5rem;
|
|
24
|
-
height: auto;
|
|
25
|
-
}
|
|
26
|
-
`;
|
|
27
|
-
|
|
28
|
-
const IconTextWrapper = styled('div')`
|
|
29
|
-
width: 160px;
|
|
30
|
-
display: flex;
|
|
31
|
-
flex-direction: column;
|
|
32
|
-
align-items: center;
|
|
33
|
-
justify-content: flex-start;
|
|
34
|
-
text-align: center;
|
|
35
|
-
line-height: 18px;
|
|
36
|
-
font-size: 14px;
|
|
37
|
-
|
|
38
|
-
> svg {
|
|
39
|
-
height: 32px;
|
|
40
|
-
margin-bottom: 16px;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
${theme.below.sm} {
|
|
44
|
-
width: 50%;
|
|
45
|
-
padding: 1rem 0.5rem;
|
|
46
|
-
}
|
|
47
|
-
`;
|
|
48
|
-
|
|
49
|
-
const ExtraDetails = ({ deliveryText, heartText, paymentText, giftText }) => {
|
|
50
|
-
return (
|
|
51
|
-
<ExtraDetailsWrapper>
|
|
52
|
-
<MaxWidth>
|
|
53
|
-
<MainContentWrapper>
|
|
54
|
-
<IconTextWrapper>
|
|
55
|
-
<p>{deliveryText}</p>
|
|
56
|
-
</IconTextWrapper>
|
|
57
|
-
<IconTextWrapper>
|
|
58
|
-
<p>{heartText}</p>
|
|
59
|
-
</IconTextWrapper>
|
|
60
|
-
<IconTextWrapper>
|
|
61
|
-
<p>{paymentText}</p>
|
|
62
|
-
</IconTextWrapper>
|
|
63
|
-
<IconTextWrapper>
|
|
64
|
-
<p>{giftText}</p>
|
|
65
|
-
</IconTextWrapper>
|
|
66
|
-
</MainContentWrapper>
|
|
67
|
-
</MaxWidth>
|
|
68
|
-
</ExtraDetailsWrapper>
|
|
69
|
-
);
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
export default ExtraDetails;
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
# Northern Spirit Start Page
|
|
2
|
-
|
|
3
|
-
In this folder you will find several start page components wih their associated JSON files. To learn how to work with these components please read the Start Page documentation [here](docs.jesthop.tech/#startpagerenderer)
|
|
4
|
-
|
|
5
|
-
## Ambassador List
|
|
6
|
-
|
|
7
|
-
Renders a black box with a list of ambassadors. See ambassadors.json for an example
|
|
8
|
-
|
|
9
|
-
### Properties
|
|
10
|
-
|
|
11
|
-
- listTitle: Title of the ambassadors list. Appears on the top
|
|
12
|
-
- ambassadors: Array of names
|
|
13
|
-
- buttonText: Text to go on the call to action button
|
|
14
|
-
- url: relative url to go to when the button is clicked
|
|
15
|
-
|
|
16
|
-
## Campaign
|
|
17
|
-
|
|
18
|
-
Renders 2 images and 2 Campaign boxes with text and a CTA button
|
|
19
|
-
|
|
20
|
-
### Properties
|
|
21
|
-
|
|
22
|
-
- firstImage: First Image has only one property
|
|
23
|
-
- src: Url for the top left image to be rendered
|
|
24
|
-
- firstSquare: First Square has four properties
|
|
25
|
-
- mainText: The largest text in the square
|
|
26
|
-
- subtitleText: Text that appears below the mainText
|
|
27
|
-
- buttonText: Text that appears on the button in this square
|
|
28
|
-
- buttonUrl: relative url to go to when the button is clicked
|
|
29
|
-
- secondImage: First Image has only one property
|
|
30
|
-
- src: Url for the top left image to be rendered
|
|
31
|
-
- secondSquare: First Square has four properties
|
|
32
|
-
- mainText: The largest text in the square
|
|
33
|
-
- subtitleText: Text that appears below the mainText
|
|
34
|
-
- buttonText: Text that appears on the button in this square
|
|
35
|
-
- buttonUrl: relative url to go to when the button is clicked
|
|
36
|
-
|
|
37
|
-
## Campaign Header
|
|
38
|
-
|
|
39
|
-
Renders a large full width Campaign image with text
|
|
40
|
-
|
|
41
|
-
### Properties
|
|
42
|
-
|
|
43
|
-
- text: Text to show in large font on the campaign header
|
|
44
|
-
- buttonText: Text to go on the call to action button
|
|
45
|
-
- buttonUrl: relative url to go to when the button is clicked
|
|
46
|
-
|
|
47
|
-
## Category List
|
|
48
|
-
|
|
49
|
-
Renders a list of categories with a title
|
|
50
|
-
|
|
51
|
-
### Properties
|
|
52
|
-
|
|
53
|
-
- title: Text to render for the title of this list of categories
|
|
54
|
-
- categories: Array of Category objects
|
|
55
|
-
- Category Object:
|
|
56
|
-
- name: Name of the Category
|
|
57
|
-
- images: Array of images. Currently only the first image will be used
|
|
58
|
-
- url: url for the image of the category
|
|
59
|
-
- primaryRoute: Object containing a path
|
|
60
|
-
- path: Path for this category
|
|
61
|
-
- id: Id of the category
|
|
62
|
-
|
|
63
|
-
## Extra Details
|
|
64
|
-
|
|
65
|
-
Component that shows some text underneath icons
|
|
66
|
-
|
|
67
|
-
### Properties
|
|
68
|
-
|
|
69
|
-
- deliveryText: Text to go under the delivery icon
|
|
70
|
-
- heartText: Text to go under the heart icon
|
|
71
|
-
- paymentText: Text to go under the credit card icon
|
|
72
|
-
- giftText: Text to go under the gift icon
|
|
73
|
-
|
|
74
|
-
## Title
|
|
75
|
-
|
|
76
|
-
A simple title component
|
|
77
|
-
|
|
78
|
-
### Properties
|
|
79
|
-
|
|
80
|
-
- text: text to render
|
|
81
|
-
|
|
82
|
-
## Feed
|
|
83
|
-
|
|
84
|
-
Renders the instagram feed
|
|
85
|
-
|
|
86
|
-
### Properties
|
|
87
|
-
|
|
88
|
-
- title: Title to render before the instagram feed
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"firstImage": {
|
|
3
|
-
"src": "/pub_docs/files/Custom_Item_Images/brand-photo-1.jpeg"
|
|
4
|
-
},
|
|
5
|
-
"firstSquare": {
|
|
6
|
-
"mainText": "NEWS!",
|
|
7
|
-
"subtitleText": "Muscle tanks, tights, bras, shorts and hoodies",
|
|
8
|
-
"buttonText": "Shop new products",
|
|
9
|
-
"buttonUrl": "/news"
|
|
10
|
-
},
|
|
11
|
-
"secondImage": {
|
|
12
|
-
"src": "/pub_docs/files/Custom_Item_Images/brand-photo-2.jpeg"
|
|
13
|
-
},
|
|
14
|
-
"secondSquare": {
|
|
15
|
-
"mainText": "Ambassadors",
|
|
16
|
-
"subtitleText": "Learn more about the ambassadors of Northern Spirit",
|
|
17
|
-
"buttonText": "Get Inspired",
|
|
18
|
-
"buttonUrl": "/ambassadors"
|
|
19
|
-
}
|
|
20
|
-
}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"title": "SHOP BY CATEGORY",
|
|
3
|
-
"categories": [
|
|
4
|
-
{
|
|
5
|
-
"name": "News!",
|
|
6
|
-
"images": [
|
|
7
|
-
{
|
|
8
|
-
"url": "/pub_docs/files/Custom_Item_Images/news.jpeg"
|
|
9
|
-
}
|
|
10
|
-
],
|
|
11
|
-
"primaryRoute": {
|
|
12
|
-
"path": "/news"
|
|
13
|
-
},
|
|
14
|
-
"id": 159
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
"name": "Tights",
|
|
18
|
-
"images": [
|
|
19
|
-
{
|
|
20
|
-
"url": "/pub_docs/files/Custom_Item_Images/tights.jpeg"
|
|
21
|
-
}
|
|
22
|
-
],
|
|
23
|
-
"primaryRoute": {
|
|
24
|
-
"path": "/ladies/tights"
|
|
25
|
-
},
|
|
26
|
-
"id": 181
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
"name": "Long Sleves",
|
|
30
|
-
"images": [
|
|
31
|
-
{
|
|
32
|
-
"url": "/pub_docs/files/Custom_Item_Images/long-sleves.jpeg"
|
|
33
|
-
}
|
|
34
|
-
],
|
|
35
|
-
"primaryRoute": {
|
|
36
|
-
"path": "/ladies/womens-longsleeve"
|
|
37
|
-
},
|
|
38
|
-
"id": 218
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
"name": "T-Shirts",
|
|
42
|
-
"images": [
|
|
43
|
-
{
|
|
44
|
-
"url": "/pub_docs/files/Custom_Item_Images/t-shirts.jpeg"
|
|
45
|
-
}
|
|
46
|
-
],
|
|
47
|
-
"primaryRoute": {
|
|
48
|
-
"path": "/ladies/t-shirts"
|
|
49
|
-
},
|
|
50
|
-
"id": 177
|
|
51
|
-
},
|
|
52
|
-
{
|
|
53
|
-
"name": "Hoodies & SweatShirts",
|
|
54
|
-
"images": [
|
|
55
|
-
{
|
|
56
|
-
"url": "/pub_docs/files/Custom_Item_Images/hoodies.jpeg"
|
|
57
|
-
}
|
|
58
|
-
],
|
|
59
|
-
"primaryRoute": {
|
|
60
|
-
"path": "/ladies/hoodies-sweatshirts"
|
|
61
|
-
},
|
|
62
|
-
"id": 184
|
|
63
|
-
}
|
|
64
|
-
]
|
|
65
|
-
}
|