@playkit-js/kaltura-player-js
Version:
[](https://github.com/kaltura/kaltura-player-js/actions/workflows/run_canary.yaml) [ • 4.83 kB
text/typescript
import { UIManager, Components, KPUIAddComponent, KPUIRemoveComponent } from '@playkit-js/playkit-js-ui';
import { Env, getLogger, Utils } from '@playkit-js/playkit-js';
import { KalturaPlayer } from '../kaltura-player';
import { UiConfig } from '../types';
import { KalturaPlayerConfig, PluginsConfig } from '../types';
/**
* The logger of the UIWrapper class.
* @private
* @const
*/
class UIWrapper {
private static _logger = getLogger('UIWrapper');
private _uiManager!: UIManager;
private readonly _disabled: boolean = false;
private _player: KalturaPlayer;
constructor(player: KalturaPlayer, options: KalturaPlayerConfig) {
this._player = player;
const config: UiConfig = options.ui;
if (config.disable) {
this._disabled = true;
const targetContainer = document.getElementById(config.targetId);
if (targetContainer) {
targetContainer.appendChild(player.getView());
}
} else {
this._uiManager = new UIManager(player, config);
if (config.customPreset || (window.kalturaCustomPresetMap && window.kalturaCustomPresetMap[config.targetId])) {
this._uiManager.buildCustomUI(config.customPreset || window.kalturaCustomPresetMap[config.targetId]['audioPlayer']);
} else {
this._uiManager.buildDefaultUI();
}
this._handleVr(options.plugins);
this._handleExternalCSS(config);
}
return new Proxy(this, {
get: (uiw: UIWrapper, prop: string): UIWrapper | (() => undefined) => {
if (this._disabled) return () => undefined;
// $FlowFixMe
return uiw[prop];
}
});
}
public destroy(): void {
this._uiManager.destroy();
}
public reset(): void {
this._resetErrorState();
}
public setConfig(config: any, componentAlias?: string): void {
this._uiManager.setConfig(config, componentAlias);
}
/**
* Add a component dynamically
*
* @param {KPUIAddComponent} component - The component to add
* @returns {Function} - Removal function
*/
public addComponent(component: KPUIAddComponent): () => void {
return this._uiManager.addComponent(component);
}
/**
* Remove a component dynamically
*
* @param {KPUIRemoveComponent} component - The component to remove
* @returns {Function} - Undo removal function
*/
public removeComponent(component: KPUIRemoveComponent): () => void {
const replaceComponent: KPUIAddComponent = {
label: `Remove_${component.removeComponent}`,
get: Components.Remove,
presets: component.presets,
area: (component.area || component.container) as string, // supporting also "container" prop for backward compatibility
replaceComponent: component.removeComponent
};
return this._uiManager.addComponent(replaceComponent);
}
public get store(): any {
return this._uiManager.store;
}
/**
* Deprecated - left for backward compatibility - use instead registerService in KalturaPlayer
* @param {string} name - the manager name
* @param {Object} manager - the manager object
* @returns {void}
*/
public registerManager(name: string, manager: any): void {
this._player.registerService(name, manager);
}
/**
* Deprecated - left for backward compatibility - use instead getService in KalturaPlayer
* @param {string} name - the manager name
* @returns {Object} - the manager object
*/
public getManager(name: string): any | void {
return this._player.getService(name);
}
/**
* Deprecated - left for backward compatibility - use instead hasService in KalturaPlayer
* @param {string} name - the manager name
* @returns {boolean} - if the manager exist
*/
public hasManager(name: string): boolean {
return this._player.hasService(name);
}
public setLoadingSpinnerState(show: boolean): void {
this.setConfig({ show: show }, 'loading');
}
private _resetErrorState(): void {
this.setConfig({ hasError: false }, 'engine');
}
private _handleExternalCSS(config: UiConfig): void {
if (config.css) {
Utils.Dom.loadStyleSheetAsync(config.css).then(
() => {
UIWrapper._logger.debug('external css was loaded successfully');
},
() => {
UIWrapper._logger.error('external css failed to load');
}
);
}
}
private _handleVr(config: PluginsConfig = {}): void {
if (config.vr && !config.vr['disable']) {
this._setStereoConfig(config.vr);
}
}
private _setStereoConfig(vrConfig: any): void {
if (vrConfig.toggleStereo || ((Env.isMobile || Env.isTablet) && vrConfig.toggleStereo !== false)) {
// enable stereo mode by default for mobile device
this.setConfig(Utils.Object.mergeDeep({}, { vrStereoMode: !!vrConfig.startInStereo }), 'vrStereo');
}
}
}
export { UIWrapper };