///
///
import React from "react";
import { useRoute } from "@applicaster/zapp-react-native-utils/reactHooks/navigation";
import { usePickFromState } from "@applicaster/zapp-react-native-redux/hooks";
import { ZappPipesSearchContext } from "@applicaster/zapp-react-native-ui-components/Contexts";
import { useScreenContext } from "@applicaster/zapp-react-native-utils/reactHooks/screen/useScreenContext";
import { ResolverSelector } from "./ResolverSelector";
import { ComponentDataSourceContext } from "./types";
type Props = {
component: ZappUIComponent;
feedUrl?: string;
riverId: string;
getStaticComponentFeed?: GeneralContentScreenProps["getStaticComponentFeed"];
componentIndex?: number;
isScreenWrappedInContainer?: boolean;
isLast?: boolean;
};
export function zappPipesDataConnector(
Component: React.FC | React.ComponentClass
) {
return function WrappedWithZappPipesData(props: Props) {
const { screenData } = useRoute();
const { plugins } = usePickFromState(["plugins"]);
const screenContextData = useScreenContext();
const {
component,
feedUrl,
getStaticComponentFeed,
componentIndex,
isScreenWrappedInContainer,
riverId,
isLast = false,
} = props;
// Handle context determination
// HACK for the tabs screen which needs to use 2 types of context.
const shouldUseNestedContext = isScreenWrappedInContainer && riverId;
const entryContext =
(shouldUseNestedContext && screenContextData?.nested?.entry
? screenContextData?.nested?.entry
: (screenContextData?.entry?.payload ?? screenContextData?.entry)) ||
{};
const screenContext =
(shouldUseNestedContext && screenContextData?.nested?.screen
? screenContextData?.nested?.screen
: screenContextData?.screen) || {};
const [searchContext] = ZappPipesSearchContext.useZappPipesContext();
// Prepare context for resolvers
const resolverProps: ComponentDataSourceContext = {
component,
feedUrl,
getStaticComponentFeed,
componentIndex,
isScreenWrappedInContainer,
riverId,
isLast,
entryContext,
screenContext,
searchContext,
screenData,
plugins,
};
return (
{(zappPipesDataProps) => (
)}
);
};
}