@applicaster/zapp-react-native-utils
Version:
Applicaster Zapp React Native utilities package
83 lines (68 loc) • 2.26 kB
text/typescript
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,
};
};