import React from "react";
import { ComponentDataSourceContext, ZappPipesDataProps } from "./types";
import { StaticFeedResolver } from "./resolvers/StaticFeedResolver";
import { UrlFeedResolver } from "./resolvers/UrlFeedResolver";
import { NullFeedResolver } from "./resolvers/NullFeedResolver";
type ResolverSelectorProps = ComponentDataSourceContext & {
children: (dataProps: ZappPipesDataProps) => React.ReactNode;
};
export function ResolverSelector(props: ResolverSelectorProps) {
const { getStaticComponentFeed, component, feedUrl, children } = props;
const renderDefaultResolver = (
fallbackChildren: (dataProps: ZappPipesDataProps) => React.ReactNode
) => {
if (feedUrl || component?.data?.source) {
return {fallbackChildren};
}
return {fallbackChildren};
};
if (getStaticComponentFeed) {
return (
{(zappPipesDataProps) => {
const { data, loading, error } = zappPipesDataProps.zappPipesData;
const shouldFallback = !loading && data === null && !error;
if (shouldFallback) {
return renderDefaultResolver(children);
}
return children(zappPipesDataProps);
}}
);
}
return renderDefaultResolver(children);
}