UNPKG

@enact/ui

Version:

A collection of simplified unstyled cross-platform UI components for Enact

93 lines (87 loc) 3.24 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.determineSkin = determineSkin; exports.determineVariants = determineVariants; exports.getClassName = getClassName; exports.preferDefined = exports.objectify = void 0; var _classnames = _interopRequireDefault(require("classnames")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } var objectify = exports.objectify = function objectify(arg) { // undefined, null, empty string case // bail early if (!arg) return {}; if (typeof arg === 'string') { // String case, convert to array for processing arg = arg.split(' '); } if (arg instanceof Array) { // Convert array values into object properties return arg.reduce(function (obj, a) { obj[a] = true; return obj; }, {}); } else if (typeof arg === 'object') { // Can just return objects as-is return arg; } else { // Invalid, return an empty object return {}; } }; var preferDefined = exports.preferDefined = function preferDefined(a, b) { return a != null ? a : b; }; /** * Determines the effective skin * * @param {String} defaultSkin The local default for this instance of useSkins * @param {String} authorSkin The author-provided skin value * @param {String} parentSkin The inherited skin value from an upstream useSkins * @private */ function determineSkin(defaultSkin, authorSkin, parentSkin) { return authorSkin || defaultSkin || parentSkin; } /** * Determines the effective skin variant * * @param {String|String[]} defaultVariants The local default variants for this instance * @param {String|String[]} allowedVariants The allowed variants for this instance * @param {String|String[]} authorVariants The author-provided variants * @param {String|String[]} parentVariants The inherited variants from an upstream useSkins * @private */ function determineVariants(defaultVariants, allowedVariants, authorVariants, parentVariants) { if (!allowedVariants || !(allowedVariants instanceof Array)) { // There are no allowed variants, so just return an empty object, indicating that there are no viable determined variants. return {}; } defaultVariants = objectify(defaultVariants); authorVariants = objectify(authorVariants); parentVariants = objectify(parentVariants); // Merge all the variants objects, preferring values in objects from left to right. var mergedObj = [defaultVariants, parentVariants, authorVariants].reduce(function (obj, a) { if (a) { Object.keys(a).forEach(function (key) { obj[key] = preferDefined(a[key], obj[key]); }); } return obj; }, {}); // Clean up the merged object for (var key in mergedObj) { // Delete keys that are null or undefined and delete keys that aren't allowed if (mergedObj[key] == null || !allowedVariants.includes(key)) { delete mergedObj[key]; } } return mergedObj; } function getClassName(skins, effectiveSkin, variants) { var skin = skins && skins[effectiveSkin]; // only apply the skin class if it's set and different from the "current" skin as // defined by the value in context return (0, _classnames["default"])(skin, variants); }