@applicaster/zapp-react-native-utils
Version:
Applicaster Zapp React Native utilities package
131 lines (115 loc) • 3.25 kB
JavaScript
const defaultPlatforms = {
tvos: "tvOS",
android_tv: "Android TV",
lg_tv: "LG TV",
samsung_tv: "Samsung TV",
};
const global_defaults = {
fontSize: 20,
lineHeight: 40,
letterSpacing: 0.4,
};
const generateFontConfiguration = (platforms = defaultPlatforms) => {
const platformEntries = Object.entries(platforms);
const defaultsEntries = Object.entries(global_defaults);
const splitCamelCase = (str) => str.replace(/([a-z](?=[A-Z]))/g, "$1_");
return platformEntries.reduce((acc, [platformKey, platformValue]) => {
acc.push(
...defaultsEntries.reduce((acc2, [valueKey, defaultValue]) => {
acc2.push({
type: "number_input",
label: `${platformValue} ${splitCamelCase(valueKey).replace(
"_",
" "
)}`,
key: `${platformKey}_${splitCamelCase(valueKey)}`.toLowerCase(),
initial_value: defaultValue,
});
return acc2;
}, [])
);
return acc;
}, []);
};
const conditional_rule = (key, condition_value) => ({
key,
condition_value,
});
const createConditionalConfig = (rules, matchAll = false) => ({
rules: matchAll ? "all_conditions" : "conditional",
conditional_fields: rules.map((field) => conditional_rule(...field)),
});
const conditional_horizontal_type = createConditionalConfig([
["styles/screen_picker_type", "horizontal"],
]);
const conditional_vertical_type = createConditionalConfig([
["styles/screen_picker_type", "vertical"],
]);
const conditional_horizontal_type_item_fixed = createConditionalConfig(
[
["styles/screen_picker_type", "horizontal"],
["styles/screen_picker_item_size", "fixed"],
],
true
);
const conditional_horizontal_type_item_dynamic = createConditionalConfig(
[
["styles/screen_picker_type", "horizontal"],
["screen_picker_horizontal_display_type", "dynamic"],
],
true
);
const conditional_horizontal_display_type_fixed = createConditionalConfig(
[
["styles/screen_picker_type", "horizontal"],
["styles/screen_picker_horizontal_display_type", "fixed"],
],
true
);
const conditional_horizontal_asset_on = createConditionalConfig(
[
["styles/screen_picker_type", "horizontal"],
["styles/screen_picker_asset_switch", true],
],
true
);
const createVariationFields = ({
prefix = "screen_picker",
key,
type = "number_input",
label = "",
variants: [a, b],
}) => {
return [
{
type,
key: `${prefix}${prefix.length > 0 ? "_" : ""}${
a?.key ?? "vertical"
}_${key}`,
label: a?.label ?? label,
initial_value: a.initial_value,
...conditional_vertical_type,
},
{
type,
key: `${prefix}${prefix.length > 0 ? "_" : ""}${
b.key ?? "horizontal"
}_${key}`,
label: b?.label ?? label,
initial_value: b.initial_value,
...conditional_horizontal_type,
},
];
};
module.exports = {
generateFontConfiguration,
createVariationFields,
createConditionalConfig,
conditional_rule,
conditional_horizontal_type,
conditional_vertical_type,
conditional_horizontal_type_item_fixed,
conditional_horizontal_type_item_dynamic,
conditional_horizontal_display_type_fixed,
conditional_horizontal_asset_on,
};