@sitecore-jss/sitecore-jss-angular 23.0.0-canary.8 → 23.0.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/LICENSE.txt +202 -202
- package/README.md +10 -10
- package/angular.json +47 -47
- package/dist/README.md +10 -10
- package/dist/fesm2022/sitecore-jss-sitecore-jss-angular.mjs +55 -501
- package/dist/fesm2022/sitecore-jss-sitecore-jss-angular.mjs.map +1 -1
- package/dist/index.d.ts +17 -158
- package/ng-package.json +13 -13
- package/package.json +3 -4
- package/tsconfig.json +10 -10
- package/tsconfig.spec.json +18 -18
- package/typings/README.md +2 -2
|
@@ -1,23 +1,22 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, ViewContainerRef, TemplateRef, Input, Directive,
|
|
2
|
+
import { inject, ViewContainerRef, TemplateRef, Input, Directive, Renderer2, ElementRef, InjectionToken, Component, Injector, createNgModule, Injectable, EventEmitter, KeyValueDiffers, ChangeDetectorRef, PLATFORM_ID, ViewChild, ContentChild, Output, HostBinding, TransferState, ɵisPromise as _isPromise, NgModule } from '@angular/core';
|
|
3
3
|
import { mediaApi } from '@sitecore-jss/sitecore-jss/media';
|
|
4
4
|
export { mediaApi } from '@sitecore-jss/sitecore-jss/media';
|
|
5
|
-
import { isFieldValueEmpty,
|
|
6
|
-
export {
|
|
7
|
-
import { MetadataKind, DEFAULT_PLACEHOLDER_UID, mapButtonToCommand, getJssPagesClientData } from '@sitecore-jss/sitecore-jss/editing';
|
|
8
|
-
export { DefaultEditFrameButton, DefaultEditFrameButtons, handleEditorAnchors, isEditorActive, resetEditorChromes } from '@sitecore-jss/sitecore-jss/editing';
|
|
5
|
+
import { isFieldValueEmpty, isDynamicPlaceholder, getDynamicPlaceholderPattern } from '@sitecore-jss/sitecore-jss/layout';
|
|
6
|
+
export { GraphQLLayoutService, LayoutServicePageState, RestLayoutService, getChildPlaceholder, getFieldValue } from '@sitecore-jss/sitecore-jss/layout';
|
|
9
7
|
import { Router, RedirectCommand, UrlTree, ActivatedRoute, ROUTES } from '@angular/router';
|
|
10
|
-
import { isAbsoluteUrl
|
|
8
|
+
import { isAbsoluteUrl } from '@sitecore-jss/sitecore-jss/utils';
|
|
11
9
|
export { isServer } from '@sitecore-jss/sitecore-jss/utils';
|
|
12
10
|
import * as i1 from '@angular/common';
|
|
13
|
-
import { isPlatformServer, CommonModule, DatePipe
|
|
14
|
-
import {
|
|
11
|
+
import { isPlatformServer, CommonModule, DatePipe } from '@angular/common';
|
|
12
|
+
import { Observable, BehaviorSubject, isObservable, from, of, lastValueFrom } from 'rxjs';
|
|
15
13
|
import { takeWhile, take, mergeMap } from 'rxjs/operators';
|
|
16
|
-
import { constants
|
|
14
|
+
import { constants } from '@sitecore-jss/sitecore-jss';
|
|
17
15
|
export { ClientError, MemoryCacheClient, NativeDataFetcher, constants, debug, enableDebug } from '@sitecore-jss/sitecore-jss';
|
|
16
|
+
import { mapButtonToCommand } from '@sitecore-jss/sitecore-jss/editing';
|
|
17
|
+
export { DefaultEditFrameButton, DefaultEditFrameButtons, handleEditorAnchors, isEditorActive, resetEditorChromes } from '@sitecore-jss/sitecore-jss/editing';
|
|
18
18
|
export { GraphQLDictionaryService, RestDictionaryService } from '@sitecore-jss/sitecore-jss/i18n';
|
|
19
|
-
export { DefaultRetryStrategy, GraphQLRequestClient
|
|
20
|
-
export { CdpHelper, DEFAULT_VARIANT, GraphQLPersonalizeService, getGroomedVariantIds, personalizeLayout } from '@sitecore-jss/sitecore-jss/personalize';
|
|
19
|
+
export { DefaultRetryStrategy, GraphQLRequestClient } from '@sitecore-jss/sitecore-jss/graphql';
|
|
21
20
|
export { trackingApi } from '@sitecore-jss/sitecore-jss/tracking';
|
|
22
21
|
|
|
23
22
|
/**
|
|
@@ -63,38 +62,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
63
62
|
args: ['scFile']
|
|
64
63
|
}] } });
|
|
65
64
|
|
|
66
|
-
/**
|
|
67
|
-
* Component that renders a field' metadata chrome element.
|
|
68
|
-
*/
|
|
69
|
-
class FieldMetadataMarkerComponent {
|
|
70
|
-
metadata;
|
|
71
|
-
kind = MetadataKind.Open;
|
|
72
|
-
get metadataString() {
|
|
73
|
-
return this.metadata ? JSON.stringify(this.metadata) : '';
|
|
74
|
-
}
|
|
75
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: FieldMetadataMarkerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
76
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: FieldMetadataMarkerComponent, isStandalone: true, selector: "code[scFieldMetadataMarker]", inputs: { metadata: "metadata", kind: "kind" }, host: { properties: { "attr.type": "\"text/sitecore\"", "attr.chrometype": "\"field\"", "class": "\"scpm\"", "attr.kind": "this.kind" } }, ngImport: i0, template: '{{ metadataString }}', isInline: true });
|
|
77
|
-
}
|
|
78
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: FieldMetadataMarkerComponent, decorators: [{
|
|
79
|
-
type: Component,
|
|
80
|
-
args: [{
|
|
81
|
-
selector: 'code[scFieldMetadataMarker]',
|
|
82
|
-
template: '{{ metadataString }}',
|
|
83
|
-
host: {
|
|
84
|
-
'[attr.type]': '"text/sitecore"',
|
|
85
|
-
'[attr.chrometype]': '"field"',
|
|
86
|
-
'[class]': '"scpm"',
|
|
87
|
-
},
|
|
88
|
-
}]
|
|
89
|
-
}], propDecorators: { metadata: [{
|
|
90
|
-
type: Input
|
|
91
|
-
}], kind: [{
|
|
92
|
-
type: HostBinding,
|
|
93
|
-
args: ['attr.kind']
|
|
94
|
-
}, {
|
|
95
|
-
type: Input
|
|
96
|
-
}] } });
|
|
97
|
-
|
|
98
65
|
/**
|
|
99
66
|
* Base class that contains common functionality for the field directives.
|
|
100
67
|
*/
|
|
@@ -108,34 +75,6 @@ class BaseFieldDirective {
|
|
|
108
75
|
shouldRender() {
|
|
109
76
|
return !!this.field?.editable || !isFieldValueEmpty(this.field);
|
|
110
77
|
}
|
|
111
|
-
/**
|
|
112
|
-
* Renders the empty field markup which is required by Pages in editMode 'metadata' in case field is empty.
|
|
113
|
-
*/
|
|
114
|
-
renderEmpty() {
|
|
115
|
-
if (this.field?.metadata && this.editable) {
|
|
116
|
-
this.renderMetadata(MetadataKind.Open);
|
|
117
|
-
if (this.emptyFieldEditingTemplate) {
|
|
118
|
-
this.viewContainer.createEmbeddedView(this.emptyFieldEditingTemplate);
|
|
119
|
-
}
|
|
120
|
-
else {
|
|
121
|
-
this.viewContainer.createComponent(this.defaultFieldEditingComponent);
|
|
122
|
-
}
|
|
123
|
-
this.renderMetadata(MetadataKind.Close);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* Renders a metadata chrome marker for the field. Required by Pages in editMode 'metadata'.
|
|
128
|
-
* @param {string} kind - 'open' or 'close' to indicate the start or end of the metadata chrome
|
|
129
|
-
*/
|
|
130
|
-
renderMetadata(kind) {
|
|
131
|
-
if (this.field?.metadata && this.editable) {
|
|
132
|
-
const metadataChrome = this.viewContainer.createComponent(FieldMetadataMarkerComponent);
|
|
133
|
-
metadataChrome.setInput('kind', kind);
|
|
134
|
-
if (kind === MetadataKind.Open) {
|
|
135
|
-
metadataChrome.setInput('metadata', this.field.metadata);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
78
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: BaseFieldDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
140
79
|
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.18", type: BaseFieldDirective, isStandalone: true, ngImport: i0 });
|
|
141
80
|
}
|
|
@@ -143,30 +82,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
143
82
|
type: Directive
|
|
144
83
|
}] });
|
|
145
84
|
|
|
146
|
-
/**
|
|
147
|
-
* Default component that will be rendered in pages when image field is empty.
|
|
148
|
-
*/
|
|
149
|
-
class DefaultEmptyImageFieldEditingComponent {
|
|
150
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DefaultEmptyImageFieldEditingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
151
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: DefaultEmptyImageFieldEditingComponent, isStandalone: true, selector: "[sc-default-empty-image-field-editing-placeholder]", ngImport: i0, template: `
|
|
152
|
-
<img
|
|
153
|
-
alt=""
|
|
154
|
-
src='data:image/svg+xml,%3Csvg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 240 240" style="enable-background:new 0 0 240 240;" xml:space="preserve"%3E%3Cstyle type="text/css"%3E .st0%7Bfill:none;%7D .st1%7Bfill:%23969696;%7D .st2%7Bfill:%23FFFFFF;%7D .st3%7Bfill:%23FFFFFF;stroke:%23FFFFFF;stroke-width:0.75;stroke-miterlimit:10;%7D%0A%3C/style%3E%3Cg%3E%3Crect class="st0" width="240" height="240"/%3E%3Cg%3E%3Cg%3E%3Crect x="20" y="20" class="st1" width="200" height="200"/%3E%3C/g%3E%3Cg%3E%3Ccircle class="st2" cx="174" cy="67" r="14"/%3E%3Cpath class="st2" d="M174,54c7.17,0,13,5.83,13,13s-5.83,13-13,13s-13-5.83-13-13S166.83,54,174,54 M174,52 c-8.28,0-15,6.72-15,15s6.72,15,15,15s15-6.72,15-15S182.28,52,174,52L174,52z"/%3E%3C/g%3E%3Cpolyline class="st3" points="29.5,179.25 81.32,122.25 95.41,137.75 137.23,91.75 209.5,179.75 "/%3E%3C/g%3E%3C/g%3E%3C/svg%3E'
|
|
155
|
-
class="scEmptyImage"
|
|
156
|
-
/>
|
|
157
|
-
`, isInline: true, styles: [":host{min-width:48px;min-height:48px;max-width:400px;max-height:400px;cursor:pointer}\n"] });
|
|
158
|
-
}
|
|
159
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DefaultEmptyImageFieldEditingComponent, decorators: [{
|
|
160
|
-
type: Component,
|
|
161
|
-
args: [{ selector: '[sc-default-empty-image-field-editing-placeholder]', template: `
|
|
162
|
-
<img
|
|
163
|
-
alt=""
|
|
164
|
-
src='data:image/svg+xml,%3Csvg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 240 240" style="enable-background:new 0 0 240 240;" xml:space="preserve"%3E%3Cstyle type="text/css"%3E .st0%7Bfill:none;%7D .st1%7Bfill:%23969696;%7D .st2%7Bfill:%23FFFFFF;%7D .st3%7Bfill:%23FFFFFF;stroke:%23FFFFFF;stroke-width:0.75;stroke-miterlimit:10;%7D%0A%3C/style%3E%3Cg%3E%3Crect class="st0" width="240" height="240"/%3E%3Cg%3E%3Cg%3E%3Crect x="20" y="20" class="st1" width="200" height="200"/%3E%3C/g%3E%3Cg%3E%3Ccircle class="st2" cx="174" cy="67" r="14"/%3E%3Cpath class="st2" d="M174,54c7.17,0,13,5.83,13,13s-5.83,13-13,13s-13-5.83-13-13S166.83,54,174,54 M174,52 c-8.28,0-15,6.72-15,15s6.72,15,15,15s15-6.72,15-15S182.28,52,174,52L174,52z"/%3E%3C/g%3E%3Cpolyline class="st3" points="29.5,179.25 81.32,122.25 95.41,137.75 137.23,91.75 209.5,179.75 "/%3E%3C/g%3E%3C/g%3E%3C/svg%3E'
|
|
165
|
-
class="scEmptyImage"
|
|
166
|
-
/>
|
|
167
|
-
`, styles: [":host{min-width:48px;min-height:48px;max-width:400px;max-height:400px;cursor:pointer}\n"] }]
|
|
168
|
-
}] });
|
|
169
|
-
|
|
170
85
|
class ImageDirective extends BaseFieldDirective {
|
|
171
86
|
field;
|
|
172
87
|
editable = true;
|
|
@@ -180,14 +95,6 @@ class ImageDirective extends BaseFieldDirective {
|
|
|
180
95
|
mediaUrlPrefix;
|
|
181
96
|
urlParams = {};
|
|
182
97
|
attrs = {};
|
|
183
|
-
/**
|
|
184
|
-
* Custom template to render in Pages in Metadata edit mode if field value is empty
|
|
185
|
-
*/
|
|
186
|
-
emptyFieldEditingTemplate;
|
|
187
|
-
/**
|
|
188
|
-
* Default component to render in Pages in Metadata edit mode if field value is empty and emptyFieldEditingTemplate is not provided
|
|
189
|
-
*/
|
|
190
|
-
defaultFieldEditingComponent = DefaultEmptyImageFieldEditingComponent;
|
|
191
98
|
inlineRef = null;
|
|
192
99
|
templateRef = inject(TemplateRef);
|
|
193
100
|
renderer = inject(Renderer2);
|
|
@@ -204,7 +111,6 @@ class ImageDirective extends BaseFieldDirective {
|
|
|
204
111
|
}
|
|
205
112
|
updateView() {
|
|
206
113
|
if (!this.shouldRender()) {
|
|
207
|
-
super.renderEmpty();
|
|
208
114
|
return;
|
|
209
115
|
}
|
|
210
116
|
const overrideAttrs = {
|
|
@@ -235,9 +141,7 @@ class ImageDirective extends BaseFieldDirective {
|
|
|
235
141
|
}
|
|
236
142
|
attrs = this.getImageAttrs(img, overrideAttrs, this.urlParams);
|
|
237
143
|
if (attrs) {
|
|
238
|
-
this.renderMetadata(MetadataKind.Open);
|
|
239
144
|
this.renderTemplate(attrs);
|
|
240
|
-
this.renderMetadata(MetadataKind.Close);
|
|
241
145
|
}
|
|
242
146
|
}
|
|
243
147
|
getImageAttrs(fieldAttrs, parsedAttrs, imageParams) {
|
|
@@ -302,7 +206,7 @@ class ImageDirective extends BaseFieldDirective {
|
|
|
302
206
|
this.inlineRef = span;
|
|
303
207
|
}
|
|
304
208
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ImageDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
305
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.18", type: ImageDirective, isStandalone: true, selector: "[scImage]", inputs: { field: ["scImage", "field"], editable: ["scImageEditable", "editable"], mediaUrlPrefix: ["scImageMediaUrlPrefix", "mediaUrlPrefix"], urlParams: ["scImageUrlParams", "urlParams"], attrs: ["scImageAttrs", "attrs"]
|
|
209
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.18", type: ImageDirective, isStandalone: true, selector: "[scImage]", inputs: { field: ["scImage", "field"], editable: ["scImageEditable", "editable"], mediaUrlPrefix: ["scImageMediaUrlPrefix", "mediaUrlPrefix"], urlParams: ["scImageUrlParams", "urlParams"], attrs: ["scImageAttrs", "attrs"] }, usesInheritance: true, usesOnChanges: true, ngImport: i0 });
|
|
306
210
|
}
|
|
307
211
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ImageDirective, decorators: [{
|
|
308
212
|
type: Directive,
|
|
@@ -322,38 +226,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
322
226
|
}], attrs: [{
|
|
323
227
|
type: Input,
|
|
324
228
|
args: ['scImageAttrs']
|
|
325
|
-
}], emptyFieldEditingTemplate: [{
|
|
326
|
-
type: Input,
|
|
327
|
-
args: ['scImageEmptyFieldEditingTemplate']
|
|
328
229
|
}] } });
|
|
329
230
|
|
|
330
|
-
/**
|
|
331
|
-
* Default component that will be rendered in pages when field is empty; applies for text, richtext, date and link fields.
|
|
332
|
-
*/
|
|
333
|
-
class DefaultEmptyFieldEditingComponent {
|
|
334
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DefaultEmptyFieldEditingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
335
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: DefaultEmptyFieldEditingComponent, isStandalone: true, selector: "<span>[sc-default-empty-text-field-editing-placeholder]</span>", ngImport: i0, template: '[No text in field]', isInline: true });
|
|
336
|
-
}
|
|
337
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DefaultEmptyFieldEditingComponent, decorators: [{
|
|
338
|
-
type: Component,
|
|
339
|
-
args: [{
|
|
340
|
-
selector: '<span>[sc-default-empty-text-field-editing-placeholder]</span>',
|
|
341
|
-
template: '[No text in field]',
|
|
342
|
-
}]
|
|
343
|
-
}] });
|
|
344
|
-
|
|
345
231
|
class LinkDirective extends BaseFieldDirective {
|
|
346
232
|
editable = true;
|
|
347
233
|
attrs = {};
|
|
348
234
|
field;
|
|
349
|
-
/**
|
|
350
|
-
* Custom template to render in Pages in Metadata edit mode if field value is empty
|
|
351
|
-
*/
|
|
352
|
-
emptyFieldEditingTemplate;
|
|
353
|
-
/**
|
|
354
|
-
* Default component to render in Pages in Metadata edit mode if field value is empty and emptyFieldEditingTemplate is not provided
|
|
355
|
-
*/
|
|
356
|
-
defaultFieldEditingComponent = DefaultEmptyFieldEditingComponent;
|
|
357
235
|
templateRef = inject(TemplateRef);
|
|
358
236
|
renderer = inject(Renderer2);
|
|
359
237
|
inlineRef = null;
|
|
@@ -403,12 +281,11 @@ class LinkDirective extends BaseFieldDirective {
|
|
|
403
281
|
/**
|
|
404
282
|
* Determines if directive should render the field as is
|
|
405
283
|
* Returns true if we are in edit mode 'chromes' (field.editable is present) or field is not empty
|
|
406
|
-
* or link field text is present
|
|
284
|
+
* or link field text is present.
|
|
407
285
|
* The right side of the expression was added to preserve existing functionality
|
|
408
286
|
*/
|
|
409
287
|
shouldRender() {
|
|
410
|
-
return
|
|
411
|
-
!!((this.field?.text || this.field?.value?.text) && !this.field?.metadata));
|
|
288
|
+
return super.shouldRender() || !!(this.field?.text || this.field?.value?.text);
|
|
412
289
|
}
|
|
413
290
|
updateView() {
|
|
414
291
|
const field = this.field;
|
|
@@ -417,7 +294,6 @@ class LinkDirective extends BaseFieldDirective {
|
|
|
417
294
|
}
|
|
418
295
|
else {
|
|
419
296
|
if (!this.shouldRender()) {
|
|
420
|
-
super.renderEmpty();
|
|
421
297
|
return;
|
|
422
298
|
}
|
|
423
299
|
const props = field.href ? field : field.value;
|
|
@@ -426,9 +302,7 @@ class LinkDirective extends BaseFieldDirective {
|
|
|
426
302
|
const href = `${props?.href}${anchor}`;
|
|
427
303
|
const mergedAttrs = { ...props, ...this.attrs, href };
|
|
428
304
|
delete mergedAttrs.anchor;
|
|
429
|
-
this.renderMetadata(MetadataKind.Open);
|
|
430
305
|
this.renderTemplate(mergedAttrs, linkText);
|
|
431
|
-
this.renderMetadata(MetadataKind.Close);
|
|
432
306
|
}
|
|
433
307
|
}
|
|
434
308
|
renderInlineWrapper(editableFirstPart, editableLastPart) {
|
|
@@ -464,7 +338,7 @@ class LinkDirective extends BaseFieldDirective {
|
|
|
464
338
|
return attrs;
|
|
465
339
|
}
|
|
466
340
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: LinkDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
467
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.18", type: LinkDirective, isStandalone: true, selector: "[scLink]", inputs: { editable: ["scLinkEditable", "editable"], attrs: ["scLinkAttrs", "attrs"], field: ["scLink", "field"]
|
|
341
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.18", type: LinkDirective, isStandalone: true, selector: "[scLink]", inputs: { editable: ["scLinkEditable", "editable"], attrs: ["scLinkAttrs", "attrs"], field: ["scLink", "field"] }, usesInheritance: true, usesOnChanges: true, ngImport: i0 });
|
|
468
342
|
}
|
|
469
343
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: LinkDirective, decorators: [{
|
|
470
344
|
type: Directive,
|
|
@@ -478,19 +352,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
478
352
|
}], field: [{
|
|
479
353
|
type: Input,
|
|
480
354
|
args: ['scLink']
|
|
481
|
-
}], emptyFieldEditingTemplate: [{
|
|
482
|
-
type: Input,
|
|
483
|
-
args: ['scLinkEmptyFieldEditingTemplate']
|
|
484
355
|
}] } });
|
|
485
356
|
|
|
486
357
|
class RouterLinkDirective extends LinkDirective {
|
|
487
358
|
editable = true;
|
|
488
359
|
attrs = {};
|
|
489
360
|
field;
|
|
490
|
-
/**
|
|
491
|
-
* Custom template to render in Pages in Metadata edit mode if field value is empty
|
|
492
|
-
*/
|
|
493
|
-
emptyFieldEditingTemplate;
|
|
494
361
|
router = inject(Router);
|
|
495
362
|
renderTemplate(props, linkText) {
|
|
496
363
|
const viewRef = this.viewContainer.createEmbeddedView(this.templateRef);
|
|
@@ -513,7 +380,7 @@ class RouterLinkDirective extends LinkDirective {
|
|
|
513
380
|
});
|
|
514
381
|
}
|
|
515
382
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: RouterLinkDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
516
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.18", type: RouterLinkDirective, isStandalone: true, selector: "[scRouterLink]", inputs: { editable: ["scRouterLinkEditable", "editable"], attrs: ["scRouterLinkAttrs", "attrs"], field: ["scRouterLink", "field"]
|
|
383
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.18", type: RouterLinkDirective, isStandalone: true, selector: "[scRouterLink]", inputs: { editable: ["scRouterLinkEditable", "editable"], attrs: ["scRouterLinkAttrs", "attrs"], field: ["scRouterLink", "field"] }, usesInheritance: true, ngImport: i0 });
|
|
517
384
|
}
|
|
518
385
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: RouterLinkDirective, decorators: [{
|
|
519
386
|
type: Directive,
|
|
@@ -527,9 +394,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
527
394
|
}], field: [{
|
|
528
395
|
type: Input,
|
|
529
396
|
args: ['scRouterLink']
|
|
530
|
-
}], emptyFieldEditingTemplate: [{
|
|
531
|
-
type: Input,
|
|
532
|
-
args: ['scRouterLinkEmptyFieldEditingTemplate']
|
|
533
397
|
}] } });
|
|
534
398
|
|
|
535
399
|
class GenericLinkDirective extends LinkDirective {
|
|
@@ -537,10 +401,6 @@ class GenericLinkDirective extends LinkDirective {
|
|
|
537
401
|
attrs = {};
|
|
538
402
|
field;
|
|
539
403
|
extras;
|
|
540
|
-
/**
|
|
541
|
-
* Custom template to render in Pages in Metadata edit mode if field value is empty
|
|
542
|
-
*/
|
|
543
|
-
emptyFieldEditingTemplate;
|
|
544
404
|
router = inject(Router);
|
|
545
405
|
renderTemplate(props, linkText) {
|
|
546
406
|
const viewRef = this.viewContainer.createEmbeddedView(this.templateRef);
|
|
@@ -576,7 +436,7 @@ class GenericLinkDirective extends LinkDirective {
|
|
|
576
436
|
});
|
|
577
437
|
}
|
|
578
438
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: GenericLinkDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
579
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.18", type: GenericLinkDirective, isStandalone: true, selector: "[scGenericLink]", inputs: { editable: ["scGenericLinkEditable", "editable"], attrs: ["scGenericLinkAttrs", "attrs"], field: ["scGenericLink", "field"], extras: ["scGenericLinkExtras", "extras"]
|
|
439
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.18", type: GenericLinkDirective, isStandalone: true, selector: "[scGenericLink]", inputs: { editable: ["scGenericLinkEditable", "editable"], attrs: ["scGenericLinkAttrs", "attrs"], field: ["scGenericLink", "field"], extras: ["scGenericLinkExtras", "extras"] }, usesInheritance: true, ngImport: i0 });
|
|
580
440
|
}
|
|
581
441
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: GenericLinkDirective, decorators: [{
|
|
582
442
|
type: Directive,
|
|
@@ -593,9 +453,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
593
453
|
}], extras: [{
|
|
594
454
|
type: Input,
|
|
595
455
|
args: ['scGenericLinkExtras']
|
|
596
|
-
}], emptyFieldEditingTemplate: [{
|
|
597
|
-
type: Input,
|
|
598
|
-
args: ['scGenericLinkEmptyFieldEditingTemplate']
|
|
599
456
|
}] } });
|
|
600
457
|
|
|
601
458
|
/**
|
|
@@ -805,46 +662,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
805
662
|
}]
|
|
806
663
|
}] });
|
|
807
664
|
|
|
808
|
-
class BaseJssState {
|
|
809
|
-
sitecore;
|
|
810
|
-
viewBag;
|
|
811
|
-
}
|
|
812
|
-
/**
|
|
813
|
-
* The service that is used to store and retrieve the current state of the app.
|
|
814
|
-
* Referenced by the SDK to get the current state of the app.
|
|
815
|
-
*/
|
|
816
|
-
class JssStateService {
|
|
817
|
-
transferState = inject(TransferState);
|
|
818
|
-
_state;
|
|
819
|
-
constructor() {
|
|
820
|
-
this._state = new BehaviorSubject({});
|
|
821
|
-
}
|
|
822
|
-
/**
|
|
823
|
-
* Observable JSS state to subscribe to
|
|
824
|
-
*/
|
|
825
|
-
get state() {
|
|
826
|
-
return this._state.asObservable();
|
|
827
|
-
}
|
|
828
|
-
/**
|
|
829
|
-
* The 'here and now' state value, usable without subscribing
|
|
830
|
-
*/
|
|
831
|
-
get stateValue() {
|
|
832
|
-
return this._state.value;
|
|
833
|
-
}
|
|
834
|
-
/**
|
|
835
|
-
* Set new JSS state
|
|
836
|
-
* @param {JssState} newState new state
|
|
837
|
-
*/
|
|
838
|
-
setState(newState) {
|
|
839
|
-
this._state.next(newState);
|
|
840
|
-
}
|
|
841
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: JssStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
842
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: JssStateService });
|
|
843
|
-
}
|
|
844
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: JssStateService, decorators: [{
|
|
845
|
-
type: Injectable
|
|
846
|
-
}], ctorParameters: () => [] });
|
|
847
|
-
|
|
848
665
|
class PlaceholderComponent {
|
|
849
666
|
name;
|
|
850
667
|
rendering;
|
|
@@ -857,9 +674,7 @@ class PlaceholderComponent {
|
|
|
857
674
|
renderEmptyTemplate;
|
|
858
675
|
placeholderLoading;
|
|
859
676
|
view;
|
|
860
|
-
metadataNode;
|
|
861
677
|
isLoading = true;
|
|
862
|
-
metadataMode;
|
|
863
678
|
chromeType;
|
|
864
679
|
_inputs;
|
|
865
680
|
_differ;
|
|
@@ -867,7 +682,6 @@ class PlaceholderComponent {
|
|
|
867
682
|
placeholderData;
|
|
868
683
|
destroyed = false;
|
|
869
684
|
parentStyleAttribute = '';
|
|
870
|
-
contextSubscription;
|
|
871
685
|
differs = inject(KeyValueDiffers);
|
|
872
686
|
componentFactory = inject(JssComponentFactoryService);
|
|
873
687
|
changeDetectorRef = inject(ChangeDetectorRef);
|
|
@@ -879,12 +693,6 @@ class PlaceholderComponent {
|
|
|
879
693
|
guardResolver = inject(GUARD_RESOLVER);
|
|
880
694
|
dataResolver = inject(DATA_RESOLVER);
|
|
881
695
|
platformId = inject(PLATFORM_ID);
|
|
882
|
-
jssState = inject(JssStateService);
|
|
883
|
-
constructor() {
|
|
884
|
-
this.contextSubscription = this.jssState.state.subscribe(({ sitecore }) => {
|
|
885
|
-
this.metadataMode = sitecore?.context.editMode === EditMode.Metadata;
|
|
886
|
-
});
|
|
887
|
-
}
|
|
888
696
|
set inputs(value) {
|
|
889
697
|
this._inputs = value;
|
|
890
698
|
if (!this._differ && value) {
|
|
@@ -909,9 +717,6 @@ class PlaceholderComponent {
|
|
|
909
717
|
ngOnDestroy() {
|
|
910
718
|
this.destroyed = true;
|
|
911
719
|
this._componentInstances = [];
|
|
912
|
-
if (this.contextSubscription) {
|
|
913
|
-
this.contextSubscription.unsubscribe();
|
|
914
|
-
}
|
|
915
720
|
}
|
|
916
721
|
ngOnChanges(changes) {
|
|
917
722
|
this.chromeType = changes.name ? 'placeholder' : 'rendering';
|
|
@@ -934,56 +739,16 @@ class PlaceholderComponent {
|
|
|
934
739
|
changes.forEachChangedItem((change) => (updates[change.key] = change.currentValue));
|
|
935
740
|
this._componentInstances.forEach((componentInstance) => this._setComponentInputs(componentInstance, updates));
|
|
936
741
|
}
|
|
937
|
-
/**
|
|
938
|
-
* Gets id for Metadata code blocks, in specific format
|
|
939
|
-
* Metadata code blocks will wrap be added around placeholder content and each rendering component
|
|
940
|
-
* to allow for editing integration in Pages.
|
|
941
|
-
* @param {string} kind code block type ("open" or "close"). "open" is added before an element, and "close" added after one.
|
|
942
|
-
* @param {string?} renderingId rendering uid to apply as id to code block
|
|
943
|
-
* @returns {string} formatted id value for code HTML node
|
|
944
|
-
*/
|
|
945
|
-
getCodeBlockId = (kind, renderingId) => {
|
|
946
|
-
if (this.rendering && kind === MetadataKind.Open) {
|
|
947
|
-
const placeholderName = this.name;
|
|
948
|
-
const id = renderingId || this.rendering?.uid;
|
|
949
|
-
if (!renderingId && placeholderName) {
|
|
950
|
-
let phId = '';
|
|
951
|
-
for (const placeholder of Object.keys(this.rendering.placeholders || [])) {
|
|
952
|
-
if (placeholderName === placeholder) {
|
|
953
|
-
phId = id
|
|
954
|
-
? `${placeholderName}_${id}`
|
|
955
|
-
: `${placeholderName}_${DEFAULT_PLACEHOLDER_UID}`;
|
|
956
|
-
break;
|
|
957
|
-
}
|
|
958
|
-
// Check if the placeholder is a dynamic placeholder
|
|
959
|
-
if (isDynamicPlaceholder(placeholder)) {
|
|
960
|
-
const pattern = getDynamicPlaceholderPattern(placeholder);
|
|
961
|
-
// Check if the placeholder matches the dynamic placeholder pattern
|
|
962
|
-
if (pattern.test(placeholderName)) {
|
|
963
|
-
phId = id ? `${placeholder}_${id}` : `${placeholder}_${DEFAULT_PLACEHOLDER_UID}`;
|
|
964
|
-
break;
|
|
965
|
-
}
|
|
966
|
-
}
|
|
967
|
-
}
|
|
968
|
-
return phId;
|
|
969
|
-
}
|
|
970
|
-
else {
|
|
971
|
-
return id;
|
|
972
|
-
}
|
|
973
|
-
}
|
|
974
|
-
return undefined;
|
|
975
|
-
};
|
|
976
742
|
/**
|
|
977
743
|
* Get renderings/components to be rendered for current placeholder name
|
|
978
744
|
* Can modify the inner placeholders collection to adjust to using SXA dynamic placeholders
|
|
979
745
|
* @returns {ComponentRendering<ComponentFields> | HtmlElementRendering[] | null} List of renderings to be rendered
|
|
980
746
|
*/
|
|
981
747
|
getPlaceholder() {
|
|
982
|
-
|
|
748
|
+
const phName = this.name?.slice() || '';
|
|
983
749
|
/**
|
|
984
750
|
* Process (SXA) dynamic placeholders
|
|
985
751
|
* Find and replace the matching dynamic placeholder e.g 'nameOfContainer-{*}' with the requested e.g. 'nameOfContainer-1'.
|
|
986
|
-
* For Metadata EditMode, we need to keep the raw placeholder name in place.
|
|
987
752
|
*/
|
|
988
753
|
this.rendering?.placeholders &&
|
|
989
754
|
Object.keys(this.rendering.placeholders).forEach((placeholder) => {
|
|
@@ -991,13 +756,8 @@ class PlaceholderComponent {
|
|
|
991
756
|
? getDynamicPlaceholderPattern(placeholder)
|
|
992
757
|
: null;
|
|
993
758
|
if (patternPlaceholder && patternPlaceholder.test(phName)) {
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
}
|
|
997
|
-
else {
|
|
998
|
-
this.rendering.placeholders[phName] = this.rendering.placeholders[placeholder];
|
|
999
|
-
delete this.rendering.placeholders[placeholder];
|
|
1000
|
-
}
|
|
759
|
+
this.rendering.placeholders[phName] = this.rendering.placeholders[placeholder];
|
|
760
|
+
delete this.rendering.placeholders[placeholder];
|
|
1001
761
|
}
|
|
1002
762
|
});
|
|
1003
763
|
if (this.rendering &&
|
|
@@ -1050,26 +810,13 @@ class PlaceholderComponent {
|
|
|
1050
810
|
try {
|
|
1051
811
|
const nonGuarded = await this.guardResolver(factories);
|
|
1052
812
|
const withData = await this.dataResolver(nonGuarded);
|
|
1053
|
-
// not using index to ensure code blocks are rendered at correct positions
|
|
1054
813
|
withData.forEach((rendering) => {
|
|
1055
|
-
this.metadataMode &&
|
|
1056
|
-
this.view.createEmbeddedView(this.metadataNode, {
|
|
1057
|
-
kind: MetadataKind.Open,
|
|
1058
|
-
chromeType: 'rendering',
|
|
1059
|
-
renderingId: rendering.factory.componentDefinition?.uid,
|
|
1060
|
-
});
|
|
1061
814
|
if (this.renderEachTemplate && !isRawRendering(rendering.factory.componentDefinition)) {
|
|
1062
815
|
this._renderTemplatedComponent(rendering.factory.componentDefinition);
|
|
1063
816
|
}
|
|
1064
817
|
else {
|
|
1065
818
|
this._renderEmbeddedComponent(rendering.factory, rendering.data);
|
|
1066
819
|
}
|
|
1067
|
-
this.metadataMode &&
|
|
1068
|
-
this.view.createEmbeddedView(this.metadataNode, {
|
|
1069
|
-
kind: MetadataKind.Close,
|
|
1070
|
-
chromeType: 'rendering',
|
|
1071
|
-
renderingId: rendering.factory.componentDefinition?.uid,
|
|
1072
|
-
});
|
|
1073
820
|
});
|
|
1074
821
|
this.isLoading = false;
|
|
1075
822
|
this.changeDetectorRef.markForCheck();
|
|
@@ -1141,40 +888,11 @@ class PlaceholderComponent {
|
|
|
1141
888
|
this._componentInstances.push(componentInstance);
|
|
1142
889
|
}
|
|
1143
890
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: PlaceholderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1144
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: PlaceholderComponent, isStandalone: true, selector: "sc-placeholder,[sc-placeholder]", inputs: { name: "name", rendering: "rendering", renderings: "renderings", outputs: "outputs", clientOnly: "clientOnly", inputs: "inputs" }, outputs: { loaded: "loaded", failed: "failed" }, queries: [{ propertyName: "renderEachTemplate", first: true, predicate: RenderEachDirective, descendants: true, static: true }, { propertyName: "renderEmptyTemplate", first: true, predicate: RenderEmptyDirective, descendants: true, static: true }, { propertyName: "placeholderLoading", first: true, predicate: PlaceholderLoadingDirective, descendants: true, static: true }], viewQueries: [{ propertyName: "view", first: true, predicate: ["view"], descendants: true, read: ViewContainerRef, static: true }
|
|
891
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: PlaceholderComponent, isStandalone: true, selector: "sc-placeholder,[sc-placeholder]", inputs: { name: "name", rendering: "rendering", renderings: "renderings", outputs: "outputs", clientOnly: "clientOnly", inputs: "inputs" }, outputs: { loaded: "loaded", failed: "failed" }, queries: [{ propertyName: "renderEachTemplate", first: true, predicate: RenderEachDirective, descendants: true, static: true }, { propertyName: "renderEmptyTemplate", first: true, predicate: RenderEmptyDirective, descendants: true, static: true }, { propertyName: "placeholderLoading", first: true, predicate: PlaceholderLoadingDirective, descendants: true, static: true }], viewQueries: [{ propertyName: "view", first: true, predicate: ["view"], descendants: true, read: ViewContainerRef, static: true }], usesOnChanges: true, ngImport: i0, template: `
|
|
1145
892
|
@if (isLoading) {
|
|
1146
893
|
<ng-template [ngTemplateOutlet]="placeholderLoading?.templateRef"></ng-template>
|
|
1147
894
|
}
|
|
1148
|
-
<ng-template
|
|
1149
|
-
#metadataCodeBlock
|
|
1150
|
-
let-kind="kind"
|
|
1151
|
-
let-type="chromeType"
|
|
1152
|
-
let-renderingId="renderingId"
|
|
1153
|
-
>
|
|
1154
|
-
<code
|
|
1155
|
-
[attr.kind]="kind"
|
|
1156
|
-
type="text/sitecore"
|
|
1157
|
-
[attr.chrometype]="type"
|
|
1158
|
-
class="scpm"
|
|
1159
|
-
[attr.id]="getCodeBlockId(kind, renderingId)"
|
|
1160
|
-
></code
|
|
1161
|
-
></ng-template>
|
|
1162
|
-
|
|
1163
|
-
@if (metadataMode && metadataCodeBlock) {
|
|
1164
|
-
<ng-container
|
|
1165
|
-
*ngTemplateOutlet="metadataCodeBlock; context: { kind: 'open', chromeType: 'placeholder' }"
|
|
1166
|
-
>
|
|
1167
|
-
</ng-container>
|
|
1168
|
-
}
|
|
1169
|
-
|
|
1170
895
|
<ng-template #view></ng-template>
|
|
1171
|
-
|
|
1172
|
-
@if (metadataMode && metadataCodeBlock) {
|
|
1173
|
-
<ng-container
|
|
1174
|
-
*ngTemplateOutlet="metadataCodeBlock; context: { kind: 'close', chromeType: 'placeholder' }"
|
|
1175
|
-
>
|
|
1176
|
-
</ng-container>
|
|
1177
|
-
}
|
|
1178
896
|
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
|
|
1179
897
|
}
|
|
1180
898
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: PlaceholderComponent, decorators: [{
|
|
@@ -1185,40 +903,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
1185
903
|
@if (isLoading) {
|
|
1186
904
|
<ng-template [ngTemplateOutlet]="placeholderLoading?.templateRef"></ng-template>
|
|
1187
905
|
}
|
|
1188
|
-
<ng-template
|
|
1189
|
-
#metadataCodeBlock
|
|
1190
|
-
let-kind="kind"
|
|
1191
|
-
let-type="chromeType"
|
|
1192
|
-
let-renderingId="renderingId"
|
|
1193
|
-
>
|
|
1194
|
-
<code
|
|
1195
|
-
[attr.kind]="kind"
|
|
1196
|
-
type="text/sitecore"
|
|
1197
|
-
[attr.chrometype]="type"
|
|
1198
|
-
class="scpm"
|
|
1199
|
-
[attr.id]="getCodeBlockId(kind, renderingId)"
|
|
1200
|
-
></code
|
|
1201
|
-
></ng-template>
|
|
1202
|
-
|
|
1203
|
-
@if (metadataMode && metadataCodeBlock) {
|
|
1204
|
-
<ng-container
|
|
1205
|
-
*ngTemplateOutlet="metadataCodeBlock; context: { kind: 'open', chromeType: 'placeholder' }"
|
|
1206
|
-
>
|
|
1207
|
-
</ng-container>
|
|
1208
|
-
}
|
|
1209
|
-
|
|
1210
906
|
<ng-template #view></ng-template>
|
|
1211
|
-
|
|
1212
|
-
@if (metadataMode && metadataCodeBlock) {
|
|
1213
|
-
<ng-container
|
|
1214
|
-
*ngTemplateOutlet="metadataCodeBlock; context: { kind: 'close', chromeType: 'placeholder' }"
|
|
1215
|
-
>
|
|
1216
|
-
</ng-container>
|
|
1217
|
-
}
|
|
1218
907
|
`,
|
|
1219
908
|
imports: [CommonModule],
|
|
1220
909
|
}]
|
|
1221
|
-
}],
|
|
910
|
+
}], propDecorators: { name: [{
|
|
1222
911
|
type: Input
|
|
1223
912
|
}], rendering: [{
|
|
1224
913
|
type: Input
|
|
@@ -1244,9 +933,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
1244
933
|
}], view: [{
|
|
1245
934
|
type: ViewChild,
|
|
1246
935
|
args: ['view', { read: ViewContainerRef, static: true }]
|
|
1247
|
-
}], metadataNode: [{
|
|
1248
|
-
type: ViewChild,
|
|
1249
|
-
args: ['metadataCodeBlock', { read: TemplateRef }]
|
|
1250
936
|
}], inputs: [{
|
|
1251
937
|
type: Input
|
|
1252
938
|
}] } });
|
|
@@ -1365,14 +1051,6 @@ class DateDirective extends BaseFieldDirective {
|
|
|
1365
1051
|
locale;
|
|
1366
1052
|
editable = true;
|
|
1367
1053
|
field;
|
|
1368
|
-
/**
|
|
1369
|
-
* Custom template to render in Pages in Metadata edit mode if field value is empty
|
|
1370
|
-
*/
|
|
1371
|
-
emptyFieldEditingTemplate;
|
|
1372
|
-
/**
|
|
1373
|
-
* Default component to render in Pages in Metadata edit mode if field value is empty and emptyFieldEditingTemplate is not provided
|
|
1374
|
-
*/
|
|
1375
|
-
defaultFieldEditingComponent = DefaultEmptyFieldEditingComponent;
|
|
1376
1054
|
templateRef = inject(TemplateRef);
|
|
1377
1055
|
datePipe = inject(DatePipe);
|
|
1378
1056
|
ngOnChanges(changes) {
|
|
@@ -1383,12 +1061,9 @@ class DateDirective extends BaseFieldDirective {
|
|
|
1383
1061
|
}
|
|
1384
1062
|
updateView() {
|
|
1385
1063
|
if (!this.shouldRender()) {
|
|
1386
|
-
super.renderEmpty();
|
|
1387
1064
|
return;
|
|
1388
1065
|
}
|
|
1389
|
-
this.renderMetadata(MetadataKind.Open);
|
|
1390
1066
|
this.viewRef = this.viewContainer.createEmbeddedView(this.templateRef);
|
|
1391
|
-
this.renderMetadata(MetadataKind.Close);
|
|
1392
1067
|
const field = this.field;
|
|
1393
1068
|
const html = field.editable && this.editable ? field.editable : field.value;
|
|
1394
1069
|
const setDangerously = field.editable && this.editable;
|
|
@@ -1402,7 +1077,7 @@ class DateDirective extends BaseFieldDirective {
|
|
|
1402
1077
|
});
|
|
1403
1078
|
}
|
|
1404
1079
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DateDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
1405
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.18", type: DateDirective, isStandalone: true, selector: "[scDate]", inputs: { format: ["scDateFormat", "format"], timezone: ["scDateTimezone", "timezone"], locale: ["scDateLocale", "locale"], editable: ["scDateEditable", "editable"], field: ["scDate", "field"]
|
|
1080
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.18", type: DateDirective, isStandalone: true, selector: "[scDate]", inputs: { format: ["scDateFormat", "format"], timezone: ["scDateTimezone", "timezone"], locale: ["scDateLocale", "locale"], editable: ["scDateEditable", "editable"], field: ["scDate", "field"] }, usesInheritance: true, usesOnChanges: true, ngImport: i0 });
|
|
1406
1081
|
}
|
|
1407
1082
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DateDirective, decorators: [{
|
|
1408
1083
|
type: Directive,
|
|
@@ -1424,9 +1099,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
1424
1099
|
}], field: [{
|
|
1425
1100
|
type: Input,
|
|
1426
1101
|
args: ['scDate']
|
|
1427
|
-
}], emptyFieldEditingTemplate: [{
|
|
1428
|
-
type: Input,
|
|
1429
|
-
args: ['scDateEmptyFieldEditingTemplate']
|
|
1430
1102
|
}] } });
|
|
1431
1103
|
|
|
1432
1104
|
class EditFrameComponent {
|
|
@@ -1521,139 +1193,49 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
1521
1193
|
type: Input
|
|
1522
1194
|
}] } });
|
|
1523
1195
|
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
*/
|
|
1528
|
-
class EditingScriptsComponent {
|
|
1529
|
-
renderer = inject(Renderer2);
|
|
1530
|
-
stateService = inject(JssStateService);
|
|
1531
|
-
document = inject(DOCUMENT);
|
|
1532
|
-
ngOnInit() {
|
|
1533
|
-
const state = this.stateService.stateValue;
|
|
1534
|
-
const { pageState, editMode, clientData, clientScripts } = state.sitecore?.context || {};
|
|
1535
|
-
// Don't render anything if not in editing mode or not server side
|
|
1536
|
-
if (pageState === LayoutServicePageState.Normal ||
|
|
1537
|
-
pageState === LayoutServicePageState.Preview ||
|
|
1538
|
-
!isServer()) {
|
|
1539
|
-
return;
|
|
1540
|
-
}
|
|
1541
|
-
if (editMode === EditMode.Metadata) {
|
|
1542
|
-
const jssClientData = { ...clientData, ...getJssPagesClientData() };
|
|
1543
|
-
clientScripts?.forEach((src) => {
|
|
1544
|
-
const scriptElement = this.renderer.createElement('script');
|
|
1545
|
-
scriptElement.src = src;
|
|
1546
|
-
this.renderer.appendChild(this.document.body, scriptElement);
|
|
1547
|
-
});
|
|
1548
|
-
Object.keys(jssClientData).forEach((id) => {
|
|
1549
|
-
const scriptElement = this.renderer.createElement('script');
|
|
1550
|
-
scriptElement.id = id;
|
|
1551
|
-
scriptElement.type = 'application/json';
|
|
1552
|
-
scriptElement.innerHTML = JSON.stringify(jssClientData[id]);
|
|
1553
|
-
this.renderer.appendChild(this.document.body, scriptElement);
|
|
1554
|
-
});
|
|
1555
|
-
}
|
|
1556
|
-
}
|
|
1557
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: EditingScriptsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1558
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: EditingScriptsComponent, isStandalone: true, selector: "sc-editing-scripts", ngImport: i0, template: '', isInline: true });
|
|
1196
|
+
class BaseJssState {
|
|
1197
|
+
sitecore;
|
|
1198
|
+
viewBag;
|
|
1559
1199
|
}
|
|
1560
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: EditingScriptsComponent, decorators: [{
|
|
1561
|
-
type: Component,
|
|
1562
|
-
args: [{
|
|
1563
|
-
selector: 'sc-editing-scripts',
|
|
1564
|
-
template: '',
|
|
1565
|
-
}]
|
|
1566
|
-
}] });
|
|
1567
|
-
|
|
1568
1200
|
/**
|
|
1569
|
-
*
|
|
1570
|
-
|
|
1571
|
-
const EDGE_CONFIG = new InjectionToken('Sc.edgeConfig');
|
|
1572
|
-
|
|
1573
|
-
let { executeScriptElements, loadForm, subscribeToFormSubmitEvent } = form;
|
|
1574
|
-
/**
|
|
1575
|
-
* Mock function to replace the form module functions for `testing` purposes.
|
|
1576
|
-
* @param {any} formModule - The form module to mock
|
|
1577
|
-
*/
|
|
1578
|
-
const mockFormModule = (formModule) => {
|
|
1579
|
-
executeScriptElements = formModule.executeScriptElements;
|
|
1580
|
-
loadForm = formModule.loadForm;
|
|
1581
|
-
subscribeToFormSubmitEvent = formModule.subscribeToFormSubmitEvent;
|
|
1582
|
-
};
|
|
1583
|
-
/**
|
|
1584
|
-
* A component that renders a Sitecore Form.
|
|
1585
|
-
* It fetches the form markup from the Sitecore Edge service and renders it in the component's template.
|
|
1201
|
+
* The service that is used to store and retrieve the current state of the app.
|
|
1202
|
+
* Referenced by the SDK to get the current state of the app.
|
|
1586
1203
|
*/
|
|
1587
|
-
class
|
|
1204
|
+
class JssStateService {
|
|
1205
|
+
transferState = inject(TransferState);
|
|
1206
|
+
_state;
|
|
1207
|
+
constructor() {
|
|
1208
|
+
this._state = new BehaviorSubject({});
|
|
1209
|
+
}
|
|
1588
1210
|
/**
|
|
1589
|
-
*
|
|
1211
|
+
* Observable JSS state to subscribe to
|
|
1590
1212
|
*/
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
isEditing = false;
|
|
1594
|
-
contextSubscription;
|
|
1595
|
-
edgeConfig = inject(EDGE_CONFIG);
|
|
1596
|
-
platformId = inject(PLATFORM_ID);
|
|
1597
|
-
elRef = inject(ElementRef);
|
|
1598
|
-
jssState = inject(JssStateService);
|
|
1599
|
-
ngOnInit() {
|
|
1600
|
-
if (isPlatformBrowser(this.platformId)) {
|
|
1601
|
-
this.loadForm();
|
|
1602
|
-
this.contextSubscription = this.jssState.state.subscribe(({ sitecore }) => {
|
|
1603
|
-
this.isEditing = sitecore?.context.pageState !== LayoutServicePageState.Normal;
|
|
1604
|
-
});
|
|
1605
|
-
}
|
|
1213
|
+
get state() {
|
|
1214
|
+
return this._state.asObservable();
|
|
1606
1215
|
}
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
|
|
1216
|
+
/**
|
|
1217
|
+
* The 'here and now' state value, usable without subscribing
|
|
1218
|
+
*/
|
|
1219
|
+
get stateValue() {
|
|
1220
|
+
return this._state.value;
|
|
1611
1221
|
}
|
|
1612
1222
|
/**
|
|
1613
|
-
*
|
|
1223
|
+
* Set new JSS state
|
|
1224
|
+
* @param {JssState} newState new state
|
|
1614
1225
|
*/
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
try {
|
|
1618
|
-
const content = await loadForm(sitecoreEdgeContextId, this.rendering.params.FormId, sitecoreEdgeUrl);
|
|
1619
|
-
this.elRef.nativeElement.innerHTML = content;
|
|
1620
|
-
this.elRef.nativeElement.className = this.rendering.params?.styles?.trimEnd() || '';
|
|
1621
|
-
this.elRef.nativeElement.id = this.rendering.params?.RenderingIdentifier || '';
|
|
1622
|
-
const form = this.elRef.nativeElement.querySelector('form');
|
|
1623
|
-
if (!form) {
|
|
1624
|
-
debug.form(`Form '${this.rendering.params.FormId}' was not able to render since form element was not found`);
|
|
1625
|
-
return;
|
|
1626
|
-
}
|
|
1627
|
-
executeScriptElements(this.elRef.nativeElement);
|
|
1628
|
-
if (!this.isEditing) {
|
|
1629
|
-
subscribeToFormSubmitEvent(form, this.rendering.uid);
|
|
1630
|
-
}
|
|
1631
|
-
}
|
|
1632
|
-
catch {
|
|
1633
|
-
this.hasError = true;
|
|
1634
|
-
}
|
|
1226
|
+
setState(newState) {
|
|
1227
|
+
this._state.next(newState);
|
|
1635
1228
|
}
|
|
1636
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type:
|
|
1637
|
-
static
|
|
1229
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: JssStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1230
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: JssStateService });
|
|
1638
1231
|
}
|
|
1639
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type:
|
|
1640
|
-
type:
|
|
1641
|
-
|
|
1642
|
-
}], propDecorators: { rendering: [{
|
|
1643
|
-
type: Input
|
|
1644
|
-
}] } });
|
|
1232
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: JssStateService, decorators: [{
|
|
1233
|
+
type: Injectable
|
|
1234
|
+
}], ctorParameters: () => [] });
|
|
1645
1235
|
|
|
1646
1236
|
class RichTextDirective extends BaseFieldDirective {
|
|
1647
1237
|
editable = true;
|
|
1648
1238
|
field;
|
|
1649
|
-
/**
|
|
1650
|
-
* Custom template to render in Pages in Metadata edit mode if field value is empty
|
|
1651
|
-
*/
|
|
1652
|
-
emptyFieldEditingTemplate;
|
|
1653
|
-
/**
|
|
1654
|
-
* Default component to render in Pages in Metadata edit mode if field value is empty and emptyFieldEditingTemplate is not provided
|
|
1655
|
-
*/
|
|
1656
|
-
defaultFieldEditingComponent = DefaultEmptyFieldEditingComponent;
|
|
1657
1239
|
templateRef = inject(TemplateRef);
|
|
1658
1240
|
renderer = inject(Renderer2);
|
|
1659
1241
|
router = inject(Router);
|
|
@@ -1665,12 +1247,9 @@ class RichTextDirective extends BaseFieldDirective {
|
|
|
1665
1247
|
}
|
|
1666
1248
|
updateView() {
|
|
1667
1249
|
if (!this.shouldRender()) {
|
|
1668
|
-
super.renderEmpty();
|
|
1669
1250
|
return;
|
|
1670
1251
|
}
|
|
1671
|
-
this.renderMetadata(MetadataKind.Open);
|
|
1672
1252
|
this.viewRef = this.viewContainer.createEmbeddedView(this.templateRef);
|
|
1673
|
-
this.renderMetadata(MetadataKind.Close);
|
|
1674
1253
|
const field = this.field;
|
|
1675
1254
|
const html = field.editable && this.editable ? field.editable : field.value;
|
|
1676
1255
|
this.viewRef.rootNodes.forEach((node) => {
|
|
@@ -1694,7 +1273,7 @@ class RichTextDirective extends BaseFieldDirective {
|
|
|
1694
1273
|
});
|
|
1695
1274
|
}
|
|
1696
1275
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: RichTextDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
1697
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.18", type: RichTextDirective, isStandalone: true, selector: "[scRichText]", inputs: { editable: ["scRichTextEditable", "editable"], field: ["scRichText", "field"]
|
|
1276
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.18", type: RichTextDirective, isStandalone: true, selector: "[scRichText]", inputs: { editable: ["scRichTextEditable", "editable"], field: ["scRichText", "field"] }, usesInheritance: true, usesOnChanges: true, ngImport: i0 });
|
|
1698
1277
|
}
|
|
1699
1278
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: RichTextDirective, decorators: [{
|
|
1700
1279
|
type: Directive,
|
|
@@ -1707,23 +1286,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
1707
1286
|
}], field: [{
|
|
1708
1287
|
type: Input,
|
|
1709
1288
|
args: ['scRichText']
|
|
1710
|
-
}], emptyFieldEditingTemplate: [{
|
|
1711
|
-
type: Input,
|
|
1712
|
-
args: ['scRichTextEmptyFieldEditingTemplate']
|
|
1713
1289
|
}] } });
|
|
1714
1290
|
|
|
1715
1291
|
class TextDirective extends BaseFieldDirective {
|
|
1716
1292
|
editable = true;
|
|
1717
1293
|
encode = true;
|
|
1718
1294
|
field;
|
|
1719
|
-
/**
|
|
1720
|
-
* Custom template to render in Pages in Metadata edit mode if field value is empty
|
|
1721
|
-
*/
|
|
1722
|
-
emptyFieldEditingTemplate;
|
|
1723
|
-
/**
|
|
1724
|
-
* Default component to render in Pages in Metadata edit mode if field value is empty and emptyFieldEditingTemplate is not provided
|
|
1725
|
-
*/
|
|
1726
|
-
defaultFieldEditingComponent = DefaultEmptyFieldEditingComponent;
|
|
1727
1295
|
templateRef = inject(TemplateRef);
|
|
1728
1296
|
ngOnChanges(changes) {
|
|
1729
1297
|
if (changes.field || changes.editable || changes.encode) {
|
|
@@ -1733,12 +1301,9 @@ class TextDirective extends BaseFieldDirective {
|
|
|
1733
1301
|
}
|
|
1734
1302
|
updateView() {
|
|
1735
1303
|
if (!this.shouldRender()) {
|
|
1736
|
-
super.renderEmpty();
|
|
1737
1304
|
return;
|
|
1738
1305
|
}
|
|
1739
|
-
this.renderMetadata(MetadataKind.Open);
|
|
1740
1306
|
this.viewRef = this.viewContainer.createEmbeddedView(this.templateRef);
|
|
1741
|
-
this.renderMetadata(MetadataKind.Close);
|
|
1742
1307
|
const field = this.field;
|
|
1743
1308
|
let editable = this.editable;
|
|
1744
1309
|
// can't use editable value if we want to output unencoded
|
|
@@ -1757,7 +1322,7 @@ class TextDirective extends BaseFieldDirective {
|
|
|
1757
1322
|
});
|
|
1758
1323
|
}
|
|
1759
1324
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: TextDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
1760
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.18", type: TextDirective, isStandalone: true, selector: "[scText]", inputs: { editable: ["scTextEditable", "editable"], encode: ["scTextEncode", "encode"], field: ["scText", "field"]
|
|
1325
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.18", type: TextDirective, isStandalone: true, selector: "[scText]", inputs: { editable: ["scTextEditable", "editable"], encode: ["scTextEncode", "encode"], field: ["scText", "field"] }, usesInheritance: true, usesOnChanges: true, ngImport: i0 });
|
|
1761
1326
|
}
|
|
1762
1327
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: TextDirective, decorators: [{
|
|
1763
1328
|
type: Directive,
|
|
@@ -1773,9 +1338,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
1773
1338
|
}], field: [{
|
|
1774
1339
|
type: Input,
|
|
1775
1340
|
args: ['scText']
|
|
1776
|
-
}], emptyFieldEditingTemplate: [{
|
|
1777
|
-
type: Input,
|
|
1778
|
-
args: ['scTextEmptyFieldEditingTemplate']
|
|
1779
1341
|
}] } });
|
|
1780
1342
|
|
|
1781
1343
|
/**
|
|
@@ -2049,9 +1611,7 @@ class JssModule {
|
|
|
2049
1611
|
RichTextDirective,
|
|
2050
1612
|
MissingComponentComponent,
|
|
2051
1613
|
HiddenRenderingComponent,
|
|
2052
|
-
EditFrameComponent,
|
|
2053
|
-
EditingScriptsComponent,
|
|
2054
|
-
FormComponent], exports: [FileDirective,
|
|
1614
|
+
EditFrameComponent], exports: [FileDirective,
|
|
2055
1615
|
ImageDirective,
|
|
2056
1616
|
DateDirective,
|
|
2057
1617
|
LinkDirective,
|
|
@@ -2065,9 +1625,7 @@ class JssModule {
|
|
|
2065
1625
|
PlaceholderLoadingDirective,
|
|
2066
1626
|
RichTextDirective,
|
|
2067
1627
|
TextDirective,
|
|
2068
|
-
EditFrameComponent
|
|
2069
|
-
EditingScriptsComponent,
|
|
2070
|
-
FormComponent] });
|
|
1628
|
+
EditFrameComponent] });
|
|
2071
1629
|
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: JssModule, imports: [CommonModule,
|
|
2072
1630
|
PlaceholderComponent,
|
|
2073
1631
|
EditFrameComponent] });
|
|
@@ -2094,8 +1652,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
2094
1652
|
MissingComponentComponent,
|
|
2095
1653
|
HiddenRenderingComponent,
|
|
2096
1654
|
EditFrameComponent,
|
|
2097
|
-
EditingScriptsComponent,
|
|
2098
|
-
FormComponent,
|
|
2099
1655
|
],
|
|
2100
1656
|
exports: [
|
|
2101
1657
|
FileDirective,
|
|
@@ -2113,8 +1669,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
2113
1669
|
RichTextDirective,
|
|
2114
1670
|
TextDirective,
|
|
2115
1671
|
EditFrameComponent,
|
|
2116
|
-
EditingScriptsComponent,
|
|
2117
|
-
FormComponent,
|
|
2118
1672
|
],
|
|
2119
1673
|
}]
|
|
2120
1674
|
}] });
|
|
@@ -2123,5 +1677,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
2123
1677
|
* Generated bundle index. Do not edit.
|
|
2124
1678
|
*/
|
|
2125
1679
|
|
|
2126
|
-
export { BaseJssState, ComponentNameAndType, DYNAMIC_COMPONENT, DateDirective,
|
|
1680
|
+
export { BaseJssState, ComponentNameAndType, DYNAMIC_COMPONENT, DateDirective, EditFrameComponent, FileDirective, GenericLinkDirective, HiddenRenderingComponent, ImageDirective, JssModule, JssStateService, LinkDirective, PlaceholderComponent, PlaceholderLoadingDirective, RenderComponentComponent, RenderEachDirective, RenderEmptyDirective, RichTextDirective, RouterLinkDirective, TextDirective, isRawRendering };
|
|
2127
1681
|
//# sourceMappingURL=sitecore-jss-sitecore-jss-angular.mjs.map
|