@applicaster/zapp-react-native-utils
Version:
Applicaster Zapp React Native utilities package
100 lines (76 loc) • 2.71 kB
text/typescript
import * as R from "ramda";
import { playerManager } from "@applicaster/zapp-react-native-utils/appUtils/playerManager";
import { isString } from "@applicaster/zapp-react-native-utils/typeGuards";
import { isFilledArray } from "@applicaster/zapp-react-native-utils/arrayUtils";
import { isTV } from "@applicaster/zapp-react-native-utils/reactUtils";
import { getBoolFromConfigValue } from "../configurationUtils";
export { getPlayerActionButtons } from "./getPlayerActionButtons";
/**
* Gets duration value from player manager, and from extensions
* then checks whether the value from either is a not a valid number
* If the number is invalid or less than zero we can assume it is live
* @param {object} content
* @returns {boolean}
*/
export function isLiveLegacy(content) {
const isNaNCurry = R.curry(isNaN);
const isNotaValidNumber = R.anyPass([
R.isEmpty,
R.isNil,
isNaNCurry,
R.equals(Infinity),
]);
const durationFromExt = R.path(["extensions", "duration"], content);
const durationFromMgr = playerManager.getDuration();
const duration = Math.floor(durationFromExt || durationFromMgr);
const isLive = R.anyPass([isNotaValidNumber, R.lte(R.__, 0)])(duration);
return isLive;
}
export function isLiveByDuration(duration): boolean {
const durationNumber = duration && parseFloat(duration);
if (R.isNil(durationNumber) || R.isEmpty(durationNumber)) {
return false;
}
return durationNumber <= 0;
}
export function hasLiveExtension(entry): boolean {
return !!(
entry?.type?.value === "channel" ||
getBoolFromConfigValue(entry?.extensions?.live) ||
getBoolFromConfigValue(entry?.extensions?.isLive)
);
}
export function isEntryLive(entry): boolean {
if (R.isNil(entry)) {
return false;
}
const duration = R.path(["extensions", "duration"], entry);
return hasLiveExtension(entry) || isLiveByDuration(duration);
}
function isLiveByManager(): boolean {
const playerStateIsLive =
playerManager.getActivePlayer()?.playerState?.isLive;
if (playerStateIsLive) {
return true;
}
const durationFromPlayerManager = playerManager.getDuration();
return isLiveByDuration(durationFromPlayerManager);
}
export function isLive(entry: ZappEntry): boolean {
return isEntryLive(entry) || isLiveByManager();
}
export const isAudioItem = (item: Option<ZappEntry>) => {
if (
isString(item?.content?.type) &&
item?.content?.type?.includes?.("audio")
) {
return true;
}
if (isString(item?.type?.value) && item?.type?.value?.includes?.("audio")) {
return true;
}
return false;
};
export const isInlineTV = (screenData) => {
return isTV() && isFilledArray(screenData?.ui_components);
};