@applicaster/zapp-react-native-utils
Version:
Applicaster Zapp React Native utilities package
71 lines (54 loc) • 1.46 kB
text/typescript
import { appStore } from "@applicaster/zapp-react-native-redux/AppStore";
import { findPluginByIdentifier } from "@applicaster/zapp-react-native-utils/pluginUtils";
import { Player } from "./player";
import { PlayerRole } from "./conts";
type PlayerFactoryItem = {
Component: any;
controller: Player;
};
type PlayerFactoryProps = {
player: any;
playerId: string;
autoplay: boolean;
entry: ZappEntry;
muted: boolean;
playerPluginId: string;
screenConfig: Record<string, any>;
playerRole: PlayerRole;
};
interface PlayerConstructor {
new (params: any): Player;
}
export const playerFactory = (
config: PlayerFactoryProps
): PlayerFactoryItem | null => {
const IDENTIFIER = config?.playerPluginId;
if (!IDENTIFIER) {
return null;
}
const plugins = appStore.get("plugins");
if (!plugins) {
return null;
}
const playerPlugin = findPluginByIdentifier(IDENTIFIER, plugins);
if (!playerPlugin?.module?.playerProtocol) {
return null;
}
const playerProtocol: PlayerConstructor = playerPlugin.module.playerProtocol(
config?.screenConfig,
config?.entry
);
const playerView = (playerProtocol as any)?.Component || null;
if (!playerView) {
return null;
}
const Controller = (playerProtocol as any)?.controllerClass || null;
if (Controller === null) {
return null;
}
const controller = new Controller(config);
return {
controller,
Component: playerView,
};
};