@applicaster/zapp-react-native-ui-components
Version:
Applicaster Zapp React Native ui components for the Quick Brick App
140 lines (108 loc) • 3.6 kB
text/typescript
import * as R from "ramda";
import {
isAndroidPlatform,
platformSelect,
} from "@applicaster/zapp-react-native-utils/reactUtils";
import { usePickFromState } from "@applicaster/zapp-react-native-redux/hooks";
import { useIsTablet } from "@applicaster/zapp-react-native-utils/reactHooks/device";
import { useNavigation } from "@applicaster/zapp-react-native-utils/reactHooks/navigation/useNavigation";
import { playerManager } from "@applicaster/zapp-react-native-utils/appUtils";
import { StyleSheet, Dimensions, ViewStyle } from "react-native";
import { DimensionsT } from "./types";
export const useConfiguration = () => {
const {
videoModalState: { item },
} = useNavigation();
const { rivers, contentTypes, pluginConfigurations } = usePickFromState([
"rivers",
"contentTypes",
"pluginConfigurations",
]);
const targetScreenId = contentTypes?.[item?.type?.value]?.screen_id;
const targetScreenConfiguration = rivers?.[targetScreenId];
const pluginConfiguration =
pluginConfigurations[targetScreenConfiguration?.type]?.configuration_json;
const playerPluginConfig = playerManager.getPluginConfiguration();
const config = R.mergeRight(playerPluginConfig, {
...targetScreenConfiguration?.general,
...targetScreenConfiguration?.styles,
...pluginConfiguration,
});
const {
minimised_height = 0,
minimised_height_tablet = 0,
modal_background_color,
} = config;
const minimisedHeight = useIsTablet()
? minimised_height_tablet
: minimised_height;
return {
minimised_height: Number(minimisedHeight),
modal_background_color,
};
};
const fullSize = {
width: "100%",
height: "100%",
} as const;
export const playerDimensionsHack: ViewStyle = platformSelect({
android_tv: fullSize,
amazon: fullSize,
lg_tv: fullSize,
samsung_tv: fullSize,
default: {},
});
const orientationStyles = StyleSheet.create({
landscape: { flexDirection: "row" },
portrait: { flexDirection: "column" },
});
export const directionStyles = (isTabletLandscape: boolean): ViewStyle => {
if (isTabletLandscape) {
return orientationStyles.landscape;
}
return orientationStyles.portrait;
};
export const getScreenAspectRatio = () => {
const { width: SCREEN_WIDTH, height: SCREEN_HEIGHT } =
Dimensions.get("screen");
const longEdge = Math.max(SCREEN_WIDTH, SCREEN_HEIGHT);
const shortEdge = Math.min(SCREEN_WIDTH, SCREEN_HEIGHT);
return longEdge / shortEdge;
};
export const getEdges = (isTablet: boolean, isInlineModal: boolean) => {
if (isTablet) {
return ["top"];
}
if (!isInlineModal && isAndroidPlatform()) {
return [];
}
return ["top"];
};
export const getTabletWidth = (
tabletSidebarWidth: string | undefined,
dimensions: DimensionsT
) => {
const { width } = dimensions;
const sidebarWidthPercentage = Number(tabletSidebarWidth?.replace("%", ""));
if (tabletSidebarWidth?.includes("%")) {
return Number(width) * (1 - sidebarWidthPercentage / 100);
}
if (Number.isNaN(sidebarWidthPercentage)) {
return Number(width) * 0.65;
}
return Number(width) - sidebarWidthPercentage;
};
export const getTabletSidebarWidth = (
tabletSidebarWidth: string | undefined,
dimensions: DimensionsT
) => {
const { width } = dimensions;
const sidebarWidthPercentage = Number(tabletSidebarWidth?.replace("%", ""));
if (tabletSidebarWidth?.includes("%")) {
return Number(width) * (sidebarWidthPercentage / 100);
}
if (Number.isNaN(sidebarWidthPercentage)) {
return Number(width) * 0.35;
}
return sidebarWidthPercentage;
};