salsify-experiences-sdk
Version:
SDK to be used by commerce websites to implement product experiences.
104 lines (103 loc) • 3.97 kB
TypeScript
import SdkSettings from '../settings';
import { Logger } from '../utils/logger';
import { Context } from '../api';
import { PerProductConfig } from './perProductConfig';
/** @internal */
export declare const attachIframeContextListener: (context: Context) => void;
/** @internal */
export interface EnhancedContentApiOptions {
beforeRender?: (productId: string, idType?: string) => void;
afterRender?: (productId: string, idType?: string) => void;
}
/** @internal */
export interface EcRenderConfig {
productId: string;
idType: string;
content: PerProductConfig['content'] | null;
allContentExists: boolean;
source: string | null;
sourceExists: boolean;
}
/**
* The Enhanced Content API.
*
* This API is used to check for the existence of and to render Enhanced Content.
*/
export default class EnhancedContentApi {
#private;
/** @internal */
constructor(settings: SdkSettings, context: Context, logger: Logger, options?: EnhancedContentApiOptions);
/**
* Checks if Enhaned Content exists for the given combination of `productId` and `idType`
*
* This is an asynchronous request and uses a promise-based API. You must wait for the promise to resolve and use the
* _resolved_ value to determine existence of EC. This can be done using async/await or a `then` callback.
*
* @example
* Using `async/await`:
* ```typescript
* const ecExists = await salsify.enhancedContent.exists("123", "SKU");
* if (ecExists) {
* // ...render EC
* }
* ```
*
* @example
* Using a `then` callback:
* ```typescript
* salsify.enhancedContent.exists("123", "SKU").then((ecExists) => {
* if (ecExists) {
* // ...render EC
* }
* });
* ```
*
* @param productId The string ID for the product.
* @param idType The identifier type for the product; defaults to the value set {@link "api".SdkApi.init | on `init`}.
* @returns `true` if the product has Enhanced Content to display, `false` otherwise
*/
exists(productId: string, idType?: string): Promise<boolean>;
/**
* Renders Enhanced Content for the given `productId` and `idType` into an
* iFrame that is inserted into the provided `container` element.
*
* This can only be called in a browser runtime context.
*
* The Salsify SDK is responsible for creating the `IFrame` element and synchronizing the
* height based on content changes.
*
* @example
* ```javascript
* const salsify = window.salsifyExperiencesSdk;
* const element = document.getElementById('enhanced-content-container');
* salsify.enhancedContent.renderIframe(element, productId, idType);
* ```
*
* @param container The DOM element within which to render Enhanced Content.
* @param productId The string ID for the product.
* @param idType The identifier type for the product; defaults to the value set {@link "api".SdkApi.init | on `init`}.
*/
renderIframe(container: HTMLElement, productId: string, idType?: string): Promise<void>;
/**
* Updates the language code for subsequent Enhanced Content requests.
*
* This method can be used when a user updates the page language, and will
* change the language of the content _without re-rendering_.
*
* To update the currently displayed content, the client application will
* need to re-render the content after calling this method.
*
* @example
* ```javascript
* salsify.enhancedContent.updateLanguageCode('fr-CA');
*
* // this call now uses the new language code, "fr-CA"
* salsify.enhancedContent.exists(productId, idType);
* ```
*
* @param languageCode The language code to use for subsequent calls.
*/
updateLanguageCode(languageCode: string): void;
/** @internal */
get lastRenderConfig(): EcRenderConfig | undefined;
}