Skip to content

Commit ae03d91

Browse files
authored
[sitecore-jss-angular] Fix Editing Scripts component rendered twice in pages (#1948)
* add additional condition for rendering client scripts - do not render on client --------- Co-authored-by: Artem Alexeyenko <[email protected]>
1 parent 8773ee4 commit ae03d91

File tree

3 files changed

+51
-3
lines changed

3 files changed

+51
-3
lines changed

CHANGELOG.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ Our versioning strategy is as follows:
6262
- `scRichTextEmptyFieldEditingTemplate` for _scRichText_
6363
- `scRouterLinkEmptyFieldEditingTemplate` for _scRouterLink_
6464
- `scTextEmptyFieldEditingTemplate` for _scText_
65-
* `[sitecore-jss-angular]` `[templates/angular-xmcloud]` Render clientScripts / clientData. The new `sc-editing-scripts` component is exposed from `sitecore-jss-angular` package and required to be rendered on the page to enable Metadata Edit mode. ([#1924](https://github.com/Sitecore/jss/pull/1924))
65+
* `[sitecore-jss-angular]` `[templates/angular-xmcloud]` Render clientScripts / clientData. The new `sc-editing-scripts` component is exposed from `sitecore-jss-angular` package and required to be rendered on the page to enable Metadata Edit mode. ([#1924](https://github.com/Sitecore/jss/pull/1924))([#1948](https://github.com/Sitecore/jss/pull/1948))
6666
* `[sitecore-jss]` GenericFieldValue model is updated to accept Date type ([#1916](https://github.com/Sitecore/jss/pull/1916))
6767
* `[template/node-xmcloud-proxy]` `[sitecore-jss-proxy]` Introduced /api/healthz endpoint ([#1928](https://github.com/Sitecore/jss/pull/1928))
6868
* `[sitecore-jss]` `[sitecore-jss-angular]` Render field metdata chromes in editMode metadata - in edit mode metadata in Pages, angular package field directives will render wrapping `code` elements with field metadata required for editing; ([#1926](https://github.com/Sitecore/jss/pull/1926))

packages/sitecore-jss-angular/src/components/editing-scripts.component.spec.ts

+46
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { PAGES_EDITING_MARKER } from '@sitecore-jss/sitecore-jss/editing';
66
import { inject } from '@angular/core/testing';
77
import { JssStateService } from '../services/jss-state.service';
88
import { EditingScriptsComponent } from './editing-scripts.component';
9+
import * as utils from '@sitecore-jss/sitecore-jss/utils';
910

1011
@Component({
1112
selector: 'test-component',
@@ -35,6 +36,14 @@ describe('<EditingScripts />', () => {
3536
},
3637
};
3738

39+
beforeAll(() => {
40+
jasmine.getEnv().allowRespy(true);
41+
});
42+
43+
afterAll(() => {
44+
jasmine.getEnv().allowRespy(false);
45+
});
46+
3847
beforeEach(() => {
3948
TestBed.configureTestingModule({
4049
declarations: [TestComponent, EditingScriptsComponent],
@@ -44,6 +53,7 @@ describe('<EditingScripts />', () => {
4453
{ provide: DOCUMENT, useValue: document.implementation.createHTMLDocument() },
4554
],
4655
}).compileComponents();
56+
spyOnProperty(utils, 'isServer').and.returnValue(() => true);
4757
fixture = TestBed.createComponent(TestComponent);
4858
});
4959

@@ -111,6 +121,42 @@ describe('<EditingScripts />', () => {
111121
}
112122
));
113123

124+
it('should not add editing scripts and client data when edit mode is Metadata and rendering is not server side', inject(
125+
[JssStateService, DOCUMENT],
126+
(stateService: JssStateService, _document: Document) => {
127+
stateService.setState({
128+
sitecore: {
129+
context: {
130+
editMode: EditMode.Metadata,
131+
pageState: LayoutServicePageState.Edit,
132+
...sharedData,
133+
},
134+
route: null,
135+
},
136+
});
137+
138+
spyOnProperty(utils, 'isServer').and.returnValue(() => false);
139+
140+
fixture.detectChanges();
141+
// reset spy state
142+
spyOnProperty(utils, 'isServer').and.returnValue(() => true);
143+
144+
expect(_document.body.querySelector(`#${PAGES_EDITING_MARKER}`)).toBeNull();
145+
expect(_document.body.querySelector('#hrz-canvas-state')).toBeNull();
146+
expect(_document.body.querySelector('#hrz-canvas-verification-token')).toBeNull();
147+
expect(
148+
_document.body.querySelector(
149+
'script[src="https://test.com/packages/page-extension/latest/page.js"]'
150+
)
151+
).toBeNull();
152+
expect(
153+
_document.body.querySelector(
154+
'script[src="https://test.com/horizon/canvas/horizon.canvas.js"]'
155+
)
156+
).toBeNull();
157+
}
158+
));
159+
114160
it('should add editing scripts and client data when edit mode is Metadata', inject(
115161
[JssStateService, DOCUMENT],
116162
(stateService: JssStateService, _document: Document) => {

packages/sitecore-jss-angular/src/components/editing-scripts.component.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { getJssPagesClientData } from '@sitecore-jss/sitecore-jss/editing';
33
import { JssStateService } from '../services/jss-state.service';
44
import { DOCUMENT } from '@angular/common';
55
import { EditMode, LayoutServicePageState } from '@sitecore-jss/sitecore-jss/layout';
6+
import { isServer } from '@sitecore-jss/sitecore-jss/utils';
67

78
/**
89
* Component that renders editing scripts and client data for the current page in Sitecore Editor.
@@ -23,10 +24,11 @@ export class EditingScriptsComponent implements OnInit {
2324
const state = this.stateService.stateValue;
2425
const { pageState, editMode, clientData, clientScripts } = state.sitecore?.context || {};
2526

26-
// Don't render anything if not in editing mode
27+
// Don't render anything if not in editing mode or not server side
2728
if (
2829
pageState === LayoutServicePageState.Normal ||
29-
pageState === LayoutServicePageState.Preview
30+
pageState === LayoutServicePageState.Preview ||
31+
!isServer()
3032
) {
3133
return;
3234
}

0 commit comments

Comments
 (0)