create-sitecore-jss 22.2.0-canary.2 → 22.2.0-canary.20
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/dist/bin.js +17 -42
- package/dist/common/index.js +5 -3
- package/dist/common/processes/install.js +1 -1
- package/dist/common/processes/next.js +3 -3
- package/dist/common/processes/transform.js +19 -19
- package/dist/common/prompts/base.js +0 -25
- package/dist/common/prompts/proxy.js +35 -0
- package/dist/common/prompts/sxp.js +34 -0
- package/dist/common/utils/helpers.js +29 -19
- package/dist/init-runner.js +6 -3
- package/dist/initializers/angular/index.js +0 -3
- package/dist/initializers/angular/prompts.js +6 -6
- package/dist/initializers/angular-sxp/index.js +8 -2
- package/dist/initializers/angular-xmcloud/index.js +28 -4
- package/dist/initializers/nextjs/index.js +2 -2
- package/dist/initializers/nextjs/prompts.js +2 -0
- package/dist/initializers/nextjs/remove-dev-dependencies.js +2 -2
- package/dist/initializers/nextjs-multisite/index.js +1 -1
- package/dist/initializers/nextjs-styleguide/index.js +1 -1
- package/dist/initializers/nextjs-styleguide-tracking/index.js +1 -1
- package/dist/initializers/nextjs-sxa/index.js +1 -1
- package/dist/initializers/nextjs-xmcloud/index.js +1 -1
- package/dist/initializers/node-xmcloud-proxy/index.js +2 -1
- package/dist/initializers/react/index.js +3 -3
- package/dist/initializers/react/prompts.js +1 -1
- package/dist/initializers/react-native/prompts.js +1 -0
- package/dist/initializers/vue/prompts.js +1 -1
- package/dist/templates/angular/.env +4 -5
- package/dist/templates/angular/package.json +0 -2
- package/dist/templates/angular/scripts/config/plugins/fallback.ts +0 -1
- package/dist/templates/angular/scripts/generate-config.ts +25 -6
- package/dist/templates/angular/scripts/update-graphql-fragment-data.ts +21 -30
- package/dist/templates/angular/server.bundle.ts +4 -5
- package/dist/templates/angular/src/app/JssState.ts +3 -6
- package/dist/templates/angular/src/app/app.module.ts +2 -0
- package/dist/templates/angular/src/app/lib/dictionary-service-factory.ts +4 -1
- package/dist/templates/angular/src/app/lib/graphql-client-factory/config.ts +21 -0
- package/dist/templates/angular/src/app/lib/graphql-client-factory/index.ts +16 -0
- package/dist/templates/angular/src/app/lib/layout-service-factory.ts +1 -1
- package/dist/templates/angular/src/app/routing/layout/layout.component.ts +10 -9
- package/dist/templates/angular-sxp/.env +2 -0
- package/dist/templates/angular-sxp/scripts/config/plugins/disconnected.ts +4 -2
- package/dist/templates/angular-xmcloud/.env +7 -1
- package/dist/templates/angular-xmcloud/angular.json +34 -0
- package/dist/templates/angular-xmcloud/package.json +15 -10
- package/dist/templates/angular-xmcloud/scripts/config/plugins/xmcloud.ts +16 -0
- package/dist/templates/angular-xmcloud/src/app/components/container/container.component.html +15 -0
- package/dist/templates/angular-xmcloud/src/app/components/container/container.component.ts +30 -0
- package/dist/templates/angular-xmcloud/src/app/components/richtext/richtext.component.html +13 -0
- package/dist/templates/angular-xmcloud/src/app/components/richtext/richtext.component.ts +16 -0
- package/dist/templates/angular-xmcloud/src/app/components/sxa.component.ts +15 -0
- package/dist/templates/angular-xmcloud/src/app/jss-link.service.ts +53 -0
- package/dist/templates/angular-xmcloud/src/app/lib/config.ts +2 -0
- package/dist/templates/angular-xmcloud/src/app/lib/graphql-client-factory/config.ts +58 -0
- package/dist/templates/angular-xmcloud/src/app/routing/layout/layout.component.html +39 -0
- package/dist/templates/angular-xmcloud/src/app/routing/layout/layout.component.ts +104 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/basic/_component.scss +48 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/basic/_container.scss +64 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/basic/_fonts.scss +3 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/basic/_footer.scss +31 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/basic/_header.scss +49 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/basic/_navigation.scss +150 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/basic/_promo.scss +58 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/basic/_rich-text.scss +11 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/basic/_variables.scss +10 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/basic/main.scss +8 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/main.scss +4 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/_app.scss +103 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/abstracts/_functions.scss +8 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/abstracts/_mixins.scss +121 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/abstracts/_vars.scss +3 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/abstracts/vars/_colors.scss +283 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/abstracts/vars/_fontSizes.scss +16 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/abstracts/vars/_margins.scss +11 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/base/fonts/_fonts.scss +1 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/base/fonts/index.scss +1 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/base/index.scss +3 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/base/links/_link-button.scss +26 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/base/links/index.scss +1 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/base/reset/_inputs.scss +58 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/base/reset/_links.scss +14 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/base/reset/_ui-datepicker.scss +7 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/base/richtext/_richtext-files-icons.scss +86 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/base/richtext/_richtext.scss +101 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/base/richtext/index.scss +2 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/base/typehead/_typehead.scss +95 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/base/typehead/index.scss +1 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/_component-column-splitter.scss +14 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/_component-container.scss +27 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/_component-image.scss +18 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/_component-navigation.scss +51 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/_component-promo.scss +42 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/_component-richtext-content.scss +19 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/common/_alignment.scss +26 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/common/_boxed.scss +16 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/common/_clearfix.scss +11 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/common/_highlighted.scss +63 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/common/_link-button.scss +16 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/common/_promoted-box.scss +3 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/common/index.scss +6 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/container/_bordered.scss +24 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/container/_title-row-box.scss +66 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/container/index.scss +1 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/image/_image-default-size.scss +6 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/image/index.scss +1 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/image-alignment/_image-left.scss +3 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/image-alignment/_image-right.scss +3 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/index.scss +17 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/layout/_acaindent.scss +5 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/layout/_background.scss +27 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/layout/index.scss +1 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/link-list/_component-link-list.scss +45 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/link-list/_list-vertical.scss +20 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/link-list/index.scss +2 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/navigation/_navigation-fat.scss +58 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/navigation/_navigation-main-horizontal-vertical.scss +176 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/navigation/_navigation-mobile.scss +85 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/navigation/_navigation-sidebar.scss +29 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/navigation/_sitemap-navigation.scss +20 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/navigation/index.scss +5 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/promo/_absolute-bottom-link.scss +8 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/promo/_promo-hero.scss +40 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/promo/_promo-shadow.scss +42 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/promo/index.scss +3 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/rich-text/_rich-text-lists.scss +63 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/rich-text/index.scss +1 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/spacing/_background-colors.scss +14 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/spacing/_indent.scss +13 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/spacing/index.scss +2 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/title/_component-title.scss +30 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/title/index.scss +1 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/main.scss +4 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/variants/index.scss +6 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/variants/link-list/index.scss +0 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/variants/navigation/index.scss +0 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/variants/page-content/index.scss +0 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/variants/promo/index.scss +0 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/variants/rich-text/index.scss +0 -0
- package/dist/templates/angular-xmcloud/src/assets/styles/sass/variants/title/index.scss +0 -0
- package/dist/templates/nextjs/scripts/config/plugins/fallback.ts +0 -1
- package/dist/templates/nextjs/scripts/generate-config.ts +8 -1
- package/dist/templates/nextjs-styleguide/scripts/config/plugins/disconnected.ts +1 -0
- package/dist/templates/nextjs-sxa/src/assets/sass/components/_component-image.scss +1 -1
- package/dist/templates/nextjs-sxa/src/components/Container.tsx +6 -14
- package/dist/templates/node-xmcloud-proxy/package.json +2 -2
- package/dist/templates/node-xmcloud-proxy/src/config.ts +1 -1
- package/dist/templates/node-xmcloud-proxy/src/index.ts +28 -4
- package/dist/templates/node-xmcloud-proxy/src/types.ts +5 -3
- package/dist/templates/react/scripts/generate-config.js +10 -3
- package/dist/templates/vue/scripts/generate-config.js +5 -0
- package/package.json +2 -2
- package/dist/templates/angular/src/app/lib/graphql-client-factory.ts +0 -28
- package/dist/templates/angular-xmcloud/src/app/lib/graphql-client-factory.ts +0 -44
package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/promo/_promo-shadow.scss
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
@import "sass/abstracts/vars";
|
|
2
|
+
@import "sass/abstracts/mixins";
|
|
3
|
+
|
|
4
|
+
.promo-shadow {
|
|
5
|
+
max-width: 960px;
|
|
6
|
+
padding: 0;
|
|
7
|
+
border-top-width: 3px;
|
|
8
|
+
border-top-color: $promo-shadow-border;
|
|
9
|
+
border-style: solid;
|
|
10
|
+
overflow: visible;
|
|
11
|
+
position: relative;
|
|
12
|
+
&.promo {
|
|
13
|
+
float: left;
|
|
14
|
+
}
|
|
15
|
+
>.component-content {
|
|
16
|
+
@include respond-to(all-mobile) {
|
|
17
|
+
margin: 0 10px 30px 10px;
|
|
18
|
+
}
|
|
19
|
+
padding: 15px;
|
|
20
|
+
margin: 0 0 30px 0;
|
|
21
|
+
&:before, &:after {
|
|
22
|
+
opacity: 0.7;
|
|
23
|
+
box-shadow: 0 17px 10px rgba(0, 0, 0, 0.7);
|
|
24
|
+
position: absolute;
|
|
25
|
+
z-index: -1;
|
|
26
|
+
height: 20%;
|
|
27
|
+
max-height: 100px;
|
|
28
|
+
max-width: 460px;
|
|
29
|
+
width: 47%;
|
|
30
|
+
content: "";
|
|
31
|
+
bottom: 10px;
|
|
32
|
+
}
|
|
33
|
+
&:before {
|
|
34
|
+
left: 2%;
|
|
35
|
+
transform: rotate(-3deg);
|
|
36
|
+
}
|
|
37
|
+
&:after {
|
|
38
|
+
right: 2%;
|
|
39
|
+
transform: rotate(3deg);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
@import 'sass/abstracts/vars';
|
|
2
|
+
@import 'sass/abstracts/mixins';
|
|
3
|
+
|
|
4
|
+
.rich-text-lists,
|
|
5
|
+
.field-featurelist {
|
|
6
|
+
ul {
|
|
7
|
+
box-sizing: border-box;
|
|
8
|
+
margin: 0;
|
|
9
|
+
padding: 0;
|
|
10
|
+
li {
|
|
11
|
+
@include font-size(1.3);
|
|
12
|
+
position: relative;
|
|
13
|
+
line-height: 21px;
|
|
14
|
+
list-style: none;
|
|
15
|
+
margin: 0;
|
|
16
|
+
padding: 5px 0 5px 25px;
|
|
17
|
+
&:before {
|
|
18
|
+
display: inline-block;
|
|
19
|
+
vertical-align: middle;
|
|
20
|
+
@include font-size(1.2);
|
|
21
|
+
font-family: 'FontAwesome', sans-serif;
|
|
22
|
+
position: absolute;
|
|
23
|
+
top: 3px;
|
|
24
|
+
left: 0;
|
|
25
|
+
color: $text-basic;
|
|
26
|
+
text-align: center;
|
|
27
|
+
content: '\f00c';
|
|
28
|
+
width: 20px;
|
|
29
|
+
margin: 0 5px 0 0;
|
|
30
|
+
padding: 0;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
.field-featurelist {
|
|
36
|
+
ul {
|
|
37
|
+
li {
|
|
38
|
+
&:before {
|
|
39
|
+
display: inline-block;
|
|
40
|
+
vertical-align: middle;
|
|
41
|
+
@include font-size(1.2);
|
|
42
|
+
font-family: 'FontAwesome', sans-serif;
|
|
43
|
+
position: absolute;
|
|
44
|
+
top: 3px;
|
|
45
|
+
left: 0;
|
|
46
|
+
color: $text-basic;
|
|
47
|
+
text-align: center;
|
|
48
|
+
content: '\f046';
|
|
49
|
+
width: 20px;
|
|
50
|
+
margin: 0 5px 0 0;
|
|
51
|
+
padding: 0;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
.media-link {
|
|
57
|
+
&.file-type-icon-media-link {
|
|
58
|
+
float: left;
|
|
59
|
+
.field-filetypeicon {
|
|
60
|
+
text-align: center;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@import "rich-text-lists";
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
@import 'sass/abstracts/vars';
|
|
2
|
+
|
|
3
|
+
.container-gray-background {
|
|
4
|
+
background: $bg-light-gray;
|
|
5
|
+
}
|
|
6
|
+
.container-clean-background {
|
|
7
|
+
background: $bg-basic-color;
|
|
8
|
+
}
|
|
9
|
+
.container-dark-background {
|
|
10
|
+
background: $bg-black-active;
|
|
11
|
+
}
|
|
12
|
+
.container-color-background {
|
|
13
|
+
background: $bg-blue;
|
|
14
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
@import 'sass/abstracts/vars';
|
|
2
|
+
.indent {
|
|
3
|
+
margin: 0 $extralarge-margin;
|
|
4
|
+
&.col-xxl-12, &.col-xl-12, &.col-lg-12, &.col-md-12, &.col-12 {
|
|
5
|
+
width: calc(100% - ($extralarge-margin * 2));
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
.indent-top {
|
|
9
|
+
margin-top: $middle-margin;
|
|
10
|
+
}
|
|
11
|
+
.indent-bottom {
|
|
12
|
+
margin-bottom: $middle-margin;
|
|
13
|
+
}
|
package/dist/templates/angular-xmcloud/src/assets/styles/sass/components/title/_component-title.scss
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
@import 'sass/abstracts/vars';
|
|
2
|
+
@import 'sass/abstracts/mixins';
|
|
3
|
+
|
|
4
|
+
.title {
|
|
5
|
+
background: $title-bg;
|
|
6
|
+
|
|
7
|
+
h1,
|
|
8
|
+
.field-title {
|
|
9
|
+
@include border-basic(bottom, $border-basic-color);
|
|
10
|
+
font-size: $font-extrabig;
|
|
11
|
+
margin-bottom: $small-margin;
|
|
12
|
+
color: $title-color;
|
|
13
|
+
line-height: normal;
|
|
14
|
+
padding-bottom: 10px;
|
|
15
|
+
display: block;
|
|
16
|
+
text-decoration: none;
|
|
17
|
+
cursor: pointer;
|
|
18
|
+
|
|
19
|
+
&:hover {
|
|
20
|
+
color: $title-color-active;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
> a,
|
|
24
|
+
> span {
|
|
25
|
+
text-decoration: none;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
@import 'sass/variants/title';
|
|
30
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@import "component-title";
|
|
File without changes
|
|
File without changes
|
package/dist/templates/angular-xmcloud/src/assets/styles/sass/variants/page-content/index.scss
ADDED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -13,7 +13,6 @@ class FallbackPlugin implements ConfigPlugin {
|
|
|
13
13
|
async exec(config: JssConfig) {
|
|
14
14
|
return Object.assign({}, config, {
|
|
15
15
|
defaultLanguage: config.defaultLanguage || 'en',
|
|
16
|
-
sitecoreApiKey: config.sitecoreApiKey || 'no-api-key-set',
|
|
17
16
|
layoutServiceConfigurationName: config.layoutServiceConfigurationName || 'default',
|
|
18
17
|
publicUrl: config.publicUrl || getPublicUrl(),
|
|
19
18
|
});
|
|
@@ -29,6 +29,11 @@ generateConfig(defaultConfig);
|
|
|
29
29
|
* @param {JssConfig} defaultConfig Default configuration.
|
|
30
30
|
*/
|
|
31
31
|
function generateConfig(defaultConfig: JssConfig): void {
|
|
32
|
+
// Handle undefined values
|
|
33
|
+
Object.keys(defaultConfig).forEach(prop => {
|
|
34
|
+
defaultConfig[prop] = defaultConfig[prop] || '';
|
|
35
|
+
}, {});
|
|
36
|
+
|
|
32
37
|
jssConfigFactory
|
|
33
38
|
.create(defaultConfig)
|
|
34
39
|
.then(config => {
|
|
@@ -53,7 +58,9 @@ const config = {};\n`;
|
|
|
53
58
|
|
|
54
59
|
// Set configuration values, allowing override with environment variables
|
|
55
60
|
Object.keys(config).forEach(prop => {
|
|
56
|
-
|
|
61
|
+
// Handle undefined values
|
|
62
|
+
const value = config[prop] || '';
|
|
63
|
+
configText += `config.${prop} = process.env.${constantCase(prop)} || '${value.trim()}';\n`;
|
|
57
64
|
});
|
|
58
65
|
|
|
59
66
|
configText += `module.exports = config;`;
|
|
@@ -1,14 +1,9 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
1
|
import {
|
|
3
2
|
ComponentParams,
|
|
4
3
|
ComponentRendering,
|
|
5
4
|
Placeholder,
|
|
6
|
-
useSitecoreContext,
|
|
7
5
|
} from '@sitecore-jss/sitecore-jss-nextjs';
|
|
8
|
-
|
|
9
|
-
const BACKGROUND_REG_EXP = new RegExp(
|
|
10
|
-
/[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/gi
|
|
11
|
-
);
|
|
6
|
+
import React from 'react';
|
|
12
7
|
|
|
13
8
|
interface ComponentProps {
|
|
14
9
|
rendering: ComponentRendering & { params: ComponentParams };
|
|
@@ -16,22 +11,19 @@ interface ComponentProps {
|
|
|
16
11
|
}
|
|
17
12
|
|
|
18
13
|
const DefaultContainer = (props: ComponentProps): JSX.Element => {
|
|
19
|
-
const { sitecoreContext } = useSitecoreContext();
|
|
20
14
|
const containerStyles = props.params && props.params.Styles ? props.params.Styles : '';
|
|
21
15
|
const styles = `${props.params.GridParameters} ${containerStyles}`.trimEnd();
|
|
22
16
|
const phKey = `container-${props.params.DynamicPlaceholderId}`;
|
|
23
17
|
const id = props.params.RenderingIdentifier;
|
|
18
|
+
const mediaUrlPattern = new RegExp(/mediaurl=\"([^"]*)\"/, 'i');
|
|
24
19
|
let backgroundImage = props.params.BackgroundImage as string;
|
|
25
20
|
let backgroundStyle: { [key: string]: string } = {};
|
|
26
21
|
|
|
27
|
-
if (backgroundImage) {
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
?.match(BACKGROUND_REG_EXP)
|
|
31
|
-
?.pop()
|
|
32
|
-
?.replace(/-/gi, '')}`;
|
|
22
|
+
if (backgroundImage && backgroundImage.match(mediaUrlPattern)) {
|
|
23
|
+
const mediaUrl = backgroundImage.match(mediaUrlPattern)?.[1] || '';
|
|
24
|
+
|
|
33
25
|
backgroundStyle = {
|
|
34
|
-
backgroundImage: `url('${
|
|
26
|
+
backgroundImage: `url('${mediaUrl}')`,
|
|
35
27
|
};
|
|
36
28
|
}
|
|
37
29
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "node-xmcloud-sample",
|
|
3
|
-
"version": "22.
|
|
3
|
+
"version": "22.2.0-canary",
|
|
4
4
|
"description": "Node XM Cloud Proxy sample for running XM Cloud JSS SPA apps",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Sitecore Corporation",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"http-proxy-middleware": "^3.0.0"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
|
-
"@sitecore-jss/sitecore-jss": "~22.
|
|
19
|
+
"@sitecore-jss/sitecore-jss": "~22.2.0-canary",
|
|
20
20
|
"@types/compression": "^1.7.2",
|
|
21
21
|
"@types/express": "^4.17.17",
|
|
22
22
|
"ts-node": "^10.9.1",
|
|
@@ -3,7 +3,7 @@ import { Config, ServerBundle } from './types';
|
|
|
3
3
|
/**
|
|
4
4
|
* The server.bundle.js file from your pre-built SPA app.
|
|
5
5
|
*/
|
|
6
|
-
const bundlePath = process.env.PROXY_BUNDLE_PATH ||
|
|
6
|
+
const bundlePath = process.env.PROXY_BUNDLE_PATH || '../dist/server.bundle';
|
|
7
7
|
|
|
8
8
|
const serverBundle: ServerBundle = require(bundlePath);
|
|
9
9
|
|
|
@@ -21,12 +21,11 @@ const requiredProperties = [
|
|
|
21
21
|
'renderView',
|
|
22
22
|
'parseRouteUrl',
|
|
23
23
|
'clientFactory',
|
|
24
|
+
'getClientFactoryConfig',
|
|
24
25
|
'siteName',
|
|
25
26
|
'defaultLanguage',
|
|
26
27
|
'layoutServiceFactory',
|
|
27
28
|
'dictionaryServiceFactory',
|
|
28
|
-
'graphQLEndpointPath',
|
|
29
|
-
'graphQLEndpoint',
|
|
30
29
|
];
|
|
31
30
|
|
|
32
31
|
const missingProperties = requiredProperties.filter((property) => !config.serverBundle[property]);
|
|
@@ -39,6 +38,31 @@ if (missingProperties.length > 0) {
|
|
|
39
38
|
);
|
|
40
39
|
}
|
|
41
40
|
|
|
41
|
+
/**
|
|
42
|
+
* GraphQL endpoint resolution to meet the requirements of the http-proxy-middleware
|
|
43
|
+
*/
|
|
44
|
+
const graphQLEndpoint = (() => {
|
|
45
|
+
const clientFactoryConfig = config.serverBundle.getClientFactoryConfig();
|
|
46
|
+
|
|
47
|
+
try {
|
|
48
|
+
const graphQLEndpoint = new URL(clientFactoryConfig.endpoint);
|
|
49
|
+
// Browser request path to the proxy. Includes only the pathname.
|
|
50
|
+
const pathname = graphQLEndpoint.pathname;
|
|
51
|
+
// Target URL for the proxy. Can't include the query string.
|
|
52
|
+
const target = `${graphQLEndpoint.protocol}//${graphQLEndpoint.hostname}${pathname}`;
|
|
53
|
+
|
|
54
|
+
return {
|
|
55
|
+
target,
|
|
56
|
+
path: pathname,
|
|
57
|
+
};
|
|
58
|
+
} catch (error) {
|
|
59
|
+
throw new Error(
|
|
60
|
+
`ERROR: The serverBundle should export a getClientFactoryConfig function with valid GraphQL endpoint URL returned, current value is ${clientFactoryConfig.endpoint}. ` +
|
|
61
|
+
'Please check your server bundle.'
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
})();
|
|
65
|
+
|
|
42
66
|
const layoutService = layoutServiceFactory.create();
|
|
43
67
|
|
|
44
68
|
const dictionaryService = dictionaryServiceFactory.create();
|
|
@@ -94,9 +118,9 @@ server.use(
|
|
|
94
118
|
* Proxy browser GraphQL requests to the Sitecore GraphQL endpoint
|
|
95
119
|
*/
|
|
96
120
|
server.use(
|
|
97
|
-
|
|
121
|
+
graphQLEndpoint.path,
|
|
98
122
|
createProxyMiddleware({
|
|
99
|
-
target:
|
|
123
|
+
target: graphQLEndpoint.target,
|
|
100
124
|
changeOrigin: true,
|
|
101
125
|
})
|
|
102
126
|
);
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
GraphQLRequestClientFactory,
|
|
3
|
+
GraphQLRequestClientFactoryConfig,
|
|
4
|
+
} from '@sitecore-jss/sitecore-jss';
|
|
2
5
|
import { DictionaryService } from '@sitecore-jss/sitecore-jss/i18n';
|
|
3
6
|
import { LayoutService, LayoutServiceData } from '@sitecore-jss/sitecore-jss/layout';
|
|
4
7
|
|
|
@@ -44,12 +47,11 @@ export interface ServerBundle {
|
|
|
44
47
|
renderView: AppRenderer;
|
|
45
48
|
parseRouteUrl: RouteUrlParser;
|
|
46
49
|
clientFactory: GraphQLRequestClientFactory;
|
|
50
|
+
getClientFactoryConfig: () => GraphQLRequestClientFactoryConfig;
|
|
47
51
|
siteName: string;
|
|
48
52
|
defaultLanguage: string;
|
|
49
53
|
layoutServiceFactory: { create: () => LayoutService };
|
|
50
54
|
dictionaryServiceFactory: { create: () => DictionaryService };
|
|
51
|
-
graphQLEndpointPath: string;
|
|
52
|
-
graphQLEndpoint: string;
|
|
53
55
|
}
|
|
54
56
|
|
|
55
57
|
export interface Config {
|
|
@@ -31,6 +31,11 @@ generateConfig();
|
|
|
31
31
|
* NOTE! Any configs returned here will be written into the client-side JS bundle. DO NOT PUT SECRETS HERE.
|
|
32
32
|
*/
|
|
33
33
|
function generateConfig() {
|
|
34
|
+
// Handle undefined values
|
|
35
|
+
Object.keys(defaultConfig).forEach((prop) => {
|
|
36
|
+
defaultConfig[prop] = defaultConfig[prop] || '';
|
|
37
|
+
});
|
|
38
|
+
|
|
34
39
|
try {
|
|
35
40
|
config = jssConfigFactory.create(defaultConfig);
|
|
36
41
|
} catch (error) {
|
|
@@ -50,9 +55,11 @@ const config = {};\n`;
|
|
|
50
55
|
|
|
51
56
|
// Set base configuration values, allowing override with environment variables
|
|
52
57
|
Object.keys(config).forEach(prop => {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
}
|
|
58
|
+
// Handle undefined values
|
|
59
|
+
const value = config[prop] || '';
|
|
60
|
+
configText += `config.${prop} = process.env.REACT_APP_${constantCase(
|
|
61
|
+
prop
|
|
62
|
+
)} || "${value.trim()}";\n`;
|
|
56
63
|
});
|
|
57
64
|
configText += 'module.exports = config;';
|
|
58
65
|
|
|
@@ -33,6 +33,11 @@ module.exports = function generateConfig(configOverrides) {
|
|
|
33
33
|
// and finally config passed in the configOverrides param wins.
|
|
34
34
|
const config = Object.assign(defaultConfig, scjssConfig, packageJson, configOverrides);
|
|
35
35
|
|
|
36
|
+
// Handle undefined values
|
|
37
|
+
Object.keys(config).forEach((prop) => {
|
|
38
|
+
config[prop] = config[prop] || '';
|
|
39
|
+
});
|
|
40
|
+
|
|
36
41
|
// The GraphQL endpoint is an example of making a _computed_ config setting
|
|
37
42
|
// based on other config settings.
|
|
38
43
|
const computedConfig = {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-sitecore-jss",
|
|
3
|
-
"version": "22.2.0-canary.
|
|
3
|
+
"version": "22.2.0-canary.20",
|
|
4
4
|
"description": "Sitecore JSS initializer",
|
|
5
5
|
"bin": "./dist/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -63,5 +63,5 @@
|
|
|
63
63
|
"ts-node": "^10.9.1",
|
|
64
64
|
"typescript": "~4.9.5"
|
|
65
65
|
},
|
|
66
|
-
"gitHead": "
|
|
66
|
+
"gitHead": "c525b47d1480e3e9ba40751f8493513f59fe25d0"
|
|
67
67
|
}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
GraphQLRequestClientFactoryConfig,
|
|
3
|
-
GraphQLRequestClient,
|
|
4
|
-
} from '@sitecore-jss/sitecore-jss-angular';
|
|
5
|
-
import { environment as env } from '../../environments/environment';
|
|
6
|
-
|
|
7
|
-
// The GraphQLRequestClientFactory serves as the central hub for executing GraphQL requests within the application
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Creates a new GraphQLRequestClientFactory instance
|
|
11
|
-
* @returns GraphQLRequestClientFactory instance
|
|
12
|
-
*/
|
|
13
|
-
export const createGraphQLClientFactory = () => {
|
|
14
|
-
let clientConfig: GraphQLRequestClientFactoryConfig;
|
|
15
|
-
|
|
16
|
-
if (env.graphQLEndpoint && env.sitecoreApiKey) {
|
|
17
|
-
clientConfig = {
|
|
18
|
-
endpoint: env.graphQLEndpoint,
|
|
19
|
-
apiKey: env.sitecoreApiKey,
|
|
20
|
-
};
|
|
21
|
-
} else {
|
|
22
|
-
throw new Error('Please configure your graphQLEndpoint and sitecoreApiKey.');
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
return GraphQLRequestClient.createClientFactory(clientConfig);
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
export const clientFactory = createGraphQLClientFactory();
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
GraphQLRequestClientFactoryConfig,
|
|
3
|
-
GraphQLRequestClient,
|
|
4
|
-
} from '@sitecore-jss/sitecore-jss-angular';
|
|
5
|
-
import { environment as env } from '../../environments/environment';
|
|
6
|
-
|
|
7
|
-
// The GraphQLRequestClientFactory serves as the central hub for executing GraphQL requests within the application
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Creates a new GraphQLRequestClientFactory instance
|
|
11
|
-
* @returns GraphQLRequestClientFactory instance
|
|
12
|
-
*/
|
|
13
|
-
export const createGraphQLClientFactory = () => {
|
|
14
|
-
let clientConfig: GraphQLRequestClientFactoryConfig;
|
|
15
|
-
|
|
16
|
-
// If we are in a production environment we are going to use Node XM Cloud proxy
|
|
17
|
-
if (env.production === 'true') {
|
|
18
|
-
if (env.proxyHost && env.sitecoreApiKey && env.graphQLEndpoint) {
|
|
19
|
-
// Server side requests should go directly to the Sitecore, browser requests should go through the proxy.
|
|
20
|
-
clientConfig = {
|
|
21
|
-
endpoint:
|
|
22
|
-
typeof window === 'undefined'
|
|
23
|
-
? env.graphQLEndpoint
|
|
24
|
-
: `${env.proxyHost}${env.graphQLEndpointPath}`,
|
|
25
|
-
apiKey: env.sitecoreApiKey,
|
|
26
|
-
};
|
|
27
|
-
} else {
|
|
28
|
-
throw new Error('Please configure your proxyHost, sitecoreApiKey, graphQLEndpoint.');
|
|
29
|
-
}
|
|
30
|
-
} else {
|
|
31
|
-
if (env.graphQLEndpoint && env.sitecoreApiKey) {
|
|
32
|
-
clientConfig = {
|
|
33
|
-
endpoint: env.graphQLEndpoint,
|
|
34
|
-
apiKey: env.sitecoreApiKey,
|
|
35
|
-
};
|
|
36
|
-
} else {
|
|
37
|
-
throw new Error('Please configure your graphQLEndpoint and sitecoreApiKey.');
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
return GraphQLRequestClient.createClientFactory(clientConfig);
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
export const clientFactory = createGraphQLClientFactory();
|