UNPKG

@applicaster/zapp-react-native-utils

Version:

Applicaster Zapp React Native utilities package

146 lines (120 loc) 3.63 kB
const R = require("ramda"); const { TV_ACTION_BUTTON_FIELDS } = require("../../keys"); const { tvActionButtonLabel } = require("../label"); const { toSnakeCase, generateFieldsFromDefaultsWithoutPrefixedLabel, } = require("../../_internals"); const { fieldsGroup } = require("../../utils"); const appendTo = (key) => (config) => { return { ...config, conditional_fields: [ ...(config.conditional_fields || []), { key, condition_value: true, }, ], }; }; const appendConditionalFieldForAssetEnabled = (prefix) => (configs) => { const appendAssetEnabled = (predicate, label) => (config) => { if (!predicate) { return config; } return { ...config, conditional_fields: [ { key: `styles/${toSnakeCase(label)}_asset_enabled`, condition_value: true, }, ], }; }; const isAssetProp = (key) => { return R.includes("_asset_", key) && !R.endsWith("_asset_enabled", key); }; return configs.map((config) => { return appendAssetEnabled(isAssetProp(config.key), prefix)(config); }); }; const appendConditionalToFirst = (label) => (configs) => { return configs.map((config, index) => { if (index === 0) { return appendTo(label)(config); } return config; }); }; const appendConditionalToRest = (label) => (configs) => { return configs.map((config, index) => { if (index !== 0) { return appendTo(label)(config); } return config; }); }; const appendConditionalToAllExceptFirstTwo = (label) => (configs) => { return configs.map((config, index) => { if (index === 0 || index === 1) { return config; } return appendTo(label)(config); }); }; const applyAllConditions = (configs) => { return configs.map((config) => { const count = R.pathOr(0, ["conditional_fields", "length"], config); if (count > 1) { return { ...config, rules: "all_conditions" }; } return config; }); }; function tvActionButton({ label, description, defaults, label1Defaults, label2Defaults, isFirstButton, }) { const buttonConfigs = generateFieldsFromDefaultsWithoutPrefixedLabel( label, defaults, TV_ACTION_BUTTON_FIELDS ); const label1 = `${label} Label 1`; const label2 = `${label} Label 2`; const label1Configs = tvActionButtonLabel(label1, label1Defaults); const label2Configs = tvActionButtonLabel(label2, label2Defaults); const buttonFields = R.compose( appendConditionalFieldForAssetEnabled(label), appendConditionalToFirst( `styles/${toSnakeCase("tv_buttons_container")}_buttons_enabled` ), appendConditionalToRest(`styles/${toSnakeCase(label)}_button_enabled`) )(buttonConfigs); const label1Fields = R.compose( appendConditionalToFirst(`styles/${toSnakeCase(label)}_button_enabled`), appendConditionalToRest(`styles/${toSnakeCase(label1)}_toggle`) )(label1Configs); const label2Fields = R.compose( appendConditionalToFirst(`styles/${toSnakeCase(label)}_button_enabled`), appendConditionalToRest(`styles/${toSnakeCase(label2)}_toggle`) )(label2Configs); const allFields = isFirstButton ? [...buttonFields, ...label1Fields, ...label2Fields] : appendConditionalToAllExceptFirstTwo( "styles/tv_buttons_container_independent_styles" )([...buttonFields, ...label1Fields, ...label2Fields]); return fieldsGroup(label, description, applyAllConditions(allFields)); } module.exports = { tvActionButton, appendConditionalFieldForAssetEnabled, appendConditionalToFirst, appendConditionalToRest, };