import * as React from "react"; import * as R from "ramda"; import { GeneralContentScreen } from "@applicaster/zapp-react-native-ui-components/Components/GeneralContentScreen"; import { FeedLoader } from "../FeedLoader"; import { ScreenResolver } from "../ScreenResolver"; type Props = ZappScreenProps & { feedUrl?: string; isInsideContainer?: boolean; screenData: {}; groupId: string; scrollViewExtraProps: ( | import("react-native").ScrollViewProps | import("react-native").FlatListProps ) & Record; appData: AppDataKeys; screenTitle: string; screenSummary: string; setIsScreenWrappedInContainer: (isInsideContainer: boolean) => void; screenContext: ZappRiver; river: ZappRiver; }; type State = { refreshing: boolean; }; export class RiverComponent extends React.Component { private currentScreenTitle: string; private currentScreenSummary: string; constructor(props: Props) { super(props); this.state = { refreshing: false, }; this.applyContexts(); this.pullToRefreshPipesV1RefreshingStateUpdater = this.pullToRefreshPipesV1RefreshingStateUpdater.bind(this); } applyContexts() { const { isInsideContainer = false, setIsScreenWrappedInContainer } = this.props; setIsScreenWrappedInContainer(isInsideContainer); } componentDidUpdate(prevProps) { const { screenContext: { navBar: { setTitle: setScreenTitle, setSummary: setScreenSummary }, }, isInsideContainer, } = this.props; if (!isInsideContainer) { if (this.props.screenTitle !== prevProps.screenTitle) { setScreenTitle(this.currentScreenTitle); } if (this.props.screenSummary !== prevProps.screenSummary) { setScreenSummary(this.currentScreenSummary); } } } usesPipesV1Layout() { return this.props?.appData?.layoutVersion === "v1"; } // Method added to keep pipes v1 logic up to date with the pullToRefresh state. // TODO: Remove when pipes v1 is deprecated. pullToRefreshPipesV1RefreshingStateUpdater(refreshing) { this.setState({ refreshing }); } render() { const { river, feedUrl, screenData, isInsideContainer, groupId, scrollViewExtraProps, } = this.props; const { id, type } = river; const connectedFeedURL = R.path(["content", "src"], screenData); const _feedUrl = feedUrl || connectedFeedURL; if (type !== "general_content") { let riverWithConnectedDatasource; if (_feedUrl && this.usesPipesV1Layout()) { riverWithConnectedDatasource = { ...river, data: R.merge(river.data || {}, { source: _feedUrl }), }; } return ( ); } if (!_feedUrl || !this.usesPipesV1Layout()) { this.currentScreenTitle = (screenData && screenData.title) || null; return ( ); } return ( this.pullToRefreshPipesV1RefreshingStateUpdater(false) } > {(feed) => { if (!feed) { return null; } this.currentScreenSummary = (feed && feed.summary) || null; this.currentScreenTitle = (feed && feed.title) || (screenData && screenData.title) || null; return ( ); }} ); } }