UNPKG

@applicaster/zapp-react-native-utils

Version:

Applicaster Zapp React Native utilities package

83 lines (68 loc) 2.26 kB
import { parseJsonIfNeeded } from "../functionUtils"; import * as R from "ramda"; import { getNativeName as nativeNameUtil } from "../localizationUtils/localeLanguage"; export const modifyDefaultConfigValues = ( configuration: ConfigurationKeys, mapping: ConfigValuesMapping ): DefaultConfiguration => { return R.mapObjIndexed((value, key) => { const isFieldlessKey = key === "custom_configuration_fields"; const keyMapping = mapping[key]; const fields = value?.fields || value; if (!keyMapping) { return value; } const mapper = (obj) => { if (obj.fields) { return R.mergeLeft({ fields: R.map(mapper)(obj.fields) })(obj); } return R.mergeLeft(keyMapping?.[obj.key])(obj); }; const mappedFields = R.map(mapper)(fields); return R.unless(() => isFieldlessKey, R.objOf("fields"))(mappedFields); })(configuration); }; export function nativeName(localeCode) { try { const { getNativeName, } = require("@applicaster/zapp-react-native-utils/localizationUtils/localeLanguage"); return getNativeName(localeCode); } catch (error) { // eslint-disable-next-line no-console console.warn("Could not load localeLanguage utils from QB", error); return nativeNameUtil(localeCode); } } const setTrackType = R.curry( ( type: QuickBrickPlayer.TrackType, track: Omit<QuickBrickPlayer.TextTrack, "trackType"> ) => R.set(R.lensProp("trackType"), type)(track) ); export const parseLanguageTracks = ( nativeEvent: | QuickBrickPlayer.OnVideoLoadEvent["nativeEvent"] | QuickBrickPlayer.OnTracksChangeEvent["nativeEvent"] ): QuickBrickPlayer.TracksState => { const textTracks = R.compose( R.uniq, R.map(setTrackType("text")), parseJsonIfNeeded )(nativeEvent?.textTracks || []); const audioTracks = R.compose( R.uniq, R.map(setTrackType("audio")), parseJsonIfNeeded )(nativeEvent?.audioTracks || []); return { textTracks, audioTracks, // we are ok with it being undefined // @ts-ignore audioTrackId: audioTracks?.[nativeEvent?.selectedAudioTrack]?.id, // we are ok with it being undefined // @ts-ignore textTrackId: textTracks?.[nativeEvent?.selectedTextTrack]?.id, }; };