@applicaster/zapp-react-native-utils
Version:
Applicaster Zapp React Native utilities package
53 lines (42 loc) • 1.44 kB
text/typescript
import React from "react";
import { usePickFromState } from "@applicaster/zapp-react-native-redux/hooks";
import * as R from "ramda";
import { appStore } from "@applicaster/zapp-react-native-redux/AppStore";
export function getTargetScreenData(
entry: ZappEntry,
rivers: { [key in string]: ZappRiver },
contentTypes: ZappContentTypes
): ZappRiver {
const entryType = entry?.type?.value;
// Cant do mapping if entryType, rivers or content types is not defined
if (!entryType || !rivers || !contentTypes) {
return undefined;
}
const screenId = contentTypes?.[entryType]?.screen_id;
if (!screenId) {
if (entryType === "video") {
return R.compose(
R.find(R.propEq("plugin_type", "player")),
R.values
)(rivers);
}
if (entryType === "link") {
return R.compose(
R.find(R.propEq("type", "webview_screen_qb")),
R.values
)(rivers);
}
}
return rivers?.[screenId];
}
export function getTargetScreenDataFromEntry(entry: ZappEntry): ZappRiver {
const { rivers, contentTypes } = appStore.get(["rivers", "contentTypes"]);
return getTargetScreenData(entry, rivers, contentTypes);
}
export const useTargetScreenData = (entry: ZappEntry) => {
const { rivers, contentTypes } = usePickFromState(["rivers", "contentTypes"]);
return React.useMemo(
() => getTargetScreenData(entry, rivers, contentTypes),
[entry, rivers, contentTypes]
);
};