import * as React from "react"; import { path, prop } from "ramda"; import { findPluginByType, findPluginByIdentifier, } from "@applicaster/zapp-react-native-utils/pluginUtils"; import { HandlePlayable } from "../../HandlePlayable"; import { HookRenderer } from "../../HookRenderer"; import { LinkHandler } from "../../LinkHandler"; import { Favorites } from "../../Favorites"; import { usePlugins } from "@applicaster/zapp-react-native-redux/hooks"; import { useNavigation } from "@applicaster/zapp-react-native-utils/reactHooks"; import { useCallbackActions } from "@applicaster/zapp-react-native-utils/zappFrameworkUtils/HookCallback/useCallbackActions"; import { useGetComponent } from "./useGetComponent"; import { getScreenTypeProps } from "../utils"; export enum PresentationType { Standalone = "Standalone", Hook = "Hook", } const screenTypeComponents = { favorites: Favorites, link: LinkHandler, playable: HandlePlayable, hooks: HookRenderer, }; export const useScreenComponentResolver = (screenType, props) => { const plugins = usePlugins(); const { hookPlugin } = props.screenData || {}; const component = useGetComponent(screenType); const screenAction = useCallbackActions( hookPlugin || props.screenData, props.screenData.callback ); const { videoModalState: { mode }, } = useNavigation(); const componentProps = { ...props, mode, screenAction, }; const ScreenTypeComponent = screenTypeComponents?.[screenType]; if (ScreenTypeComponent) { return ( ); } const ScreenPlugin = findPluginByType(screenType, plugins, { skipWarning: true }) || findPluginByIdentifier(screenType, plugins) || findPluginByIdentifier(hookPlugin && hookPlugin.identifier, plugins) || component; const ScreenComponent = path(["module", "Component"], ScreenPlugin) || prop("module", ScreenPlugin) || prop("Component", ScreenPlugin) || ScreenPlugin; const configuration = prop("configuration", ScreenPlugin) || prop("__plugin_configuration", ScreenComponent); if (!ScreenComponent) { return null; } return ( ); };