@acorel/contentful-integration
Version:
Contentful integration with SAP Composable Storefront by Acorel
57 lines (45 loc) • 1.71 kB
text/typescript
import {Injectable} from "@angular/core";
import {ContentfulLivePreview, ContentfulSubscribeConfig} from "@contentful/live-preview";
import {LanguageService, PageContext} from "@spartacus/core";
import {Argument} from "@contentful/live-preview/dist/types";
import {take} from "rxjs/operators";
({
providedIn: 'root',
})
export class ContentfulLivePreviewService {
contentfulLivePreview: any;
subscriptions: {id: string, data: Argument}[];
constructor(private languageService: LanguageService) {
this.languageService.getActive().pipe(take(1),).subscribe(locale => {
this.contentfulLivePreview = ContentfulLivePreview.init({locale: locale, debugMode: true});
});
this.subscriptions = [];
}
currentLocale(): string {
return ContentfulLivePreview.locale;
}
isPreviewEnabled(): boolean {
return ContentfulLivePreview.liveUpdatesEnabled;
}
subscribe(id: string, pageContext: PageContext, config: ContentfulSubscribeConfig): void {
let currentSubscription = this.subscriptions.find(o => o.id == id);
if (!currentSubscription) {
ContentfulLivePreview.subscribe(config);
this.subscriptions.push({id: id, data: config.data});
}
}
update(id: string, pageContext: PageContext, data: Argument) : void {
let currentSubscription = this.subscriptions.find(o => o.id == id);
if (currentSubscription) {
currentSubscription.data = data;
}
}
previewContent(id: string, pageContext: PageContext): Argument | undefined {
let currentSubscription = this.subscriptions.find(o => o.id == id);
if (currentSubscription) {
return currentSubscription.data;
} else {
return undefined;
}
}
}