UNPKG

@applicaster/zapp-react-native-utils

Version:

Applicaster Zapp React Native utilities package

131 lines (115 loc) 3.25 kB
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, };