bridebook-ui-library
Version:
Bridebook UI Library
164 lines (139 loc) • 5.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.computeSectionValue = exports.createCheckbox = exports.createRadio = exports.createTextInput = exports.resetSectionValueTo = exports.numCheckboxesChecked = exports.setDisabled = exports.composeItemData = exports.maybeCreateEmptyObject = exports.nodeToJs = undefined;
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _components = require('../../components');
var _objectAssign = require('object-assign');
var _objectAssign2 = _interopRequireDefault(_objectAssign);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Function takes in React node and converts it into object.
* @function
* @param item {Node} - React node.
* @returns {Object} - Relevant properties extracted from node.
*/
var nodeToJs = exports.nodeToJs = function nodeToJs(item) {
var _item$props = item.props,
field = _item$props.field,
title = _item$props.title,
url = _item$props.url;
return { field: field, title: title, url: url };
};
/**
* Creates empty object if current value is invalid (null, undefined, string).
*
* @function
* @param {object} value - Supposedly nice object, will be replaced by newly created one if invalid.
* @returns {object} - Original object if it's actually an object or empty one.
*/
var maybeCreateEmptyObject = exports.maybeCreateEmptyObject = function maybeCreateEmptyObject(value) {
if (value !== null && value !== undefined && 'object' === (typeof value === 'undefined' ? 'undefined' : _typeof(value))) {
return value;
} else {
return {};
}
};
/**
* Curried takes in data from group and data from item and composes it
* to create data that can be fed to actual input component. This is curried
* function: `(groupData) => (itemData) => Result`.
* @function
* @param groupData {Object} - Data from group.
* @param itemData {Object} - Data specific to item.
* @returns {Object} - Composed data.
*/
var composeItemData = exports.composeItemData = function composeItemData(groupData) {
return function (itemData) {
var url = itemData.url;
var gv = groupData.value;
var field = itemData.field;
var value = gv.hasOwnProperty(field) ? gv[field] : null;
return {
action: groupData.action,
group: groupData.group,
field: field,
title: itemData.title,
value: value,
url: url
};
};
};
var setDisabled = exports.setDisabled = function setDisabled(disabled) {
return function (item) {
return (0, _objectAssign2.default)({ disabled: disabled }, item);
};
};
var numCheckboxesChecked = exports.numCheckboxesChecked = function numCheckboxesChecked(sectionValue) {
return Object.keys(sectionValue).map(function (itemName) {
return sectionValue[itemName];
}).filter(function (itemValue) {
return itemValue === true;
}).length;
};
var resetSectionValueTo = exports.resetSectionValueTo = function resetSectionValueTo(sectionValue, desiredValue) {
var result = (0, _objectAssign2.default)({}, sectionValue);
Object.keys(result).forEach(function (key) {
return result[key] = desiredValue;
});
return result;
};
var createTextInput = exports.createTextInput = function createTextInput(data, index) {
var action = data.action,
field = data.field,
title = data.title,
value = data.value,
url = data.url;
return _react2.default.createElement(_components.Text, {
action: action,
name: field,
title: title,
value: value,
key: index,
url: url
});
};
var createRadio = exports.createRadio = function createRadio(data, index) {
var action = data.action,
field = data.field,
title = data.title,
value = data.value,
group = data.group;
return _react2.default.createElement(_components.Radio, {
action: action,
title: title,
value: value,
key: index,
group: group,
field: field
});
};
var createCheckbox = exports.createCheckbox = function createCheckbox(data, index) {
var action = data.action,
field = data.field,
title = data.title,
value = data.value,
disabled = data.disabled;
return _react2.default.createElement(_components.Checkbox, {
action: action,
name: field,
title: title,
value: value,
disabled: disabled && value !== true,
key: index
});
};
var computeSectionValue = exports.computeSectionValue = function computeSectionValue(value) {
return Object.keys(value).map(function (itemName) {
return { key: itemName, value: value[itemName] };
}).filter(function (item) {
return item.value === true;
}).reduce(function (container, property) {
container[property.key] = property.value;
return container;
}, {});
};
//# sourceMappingURL=utils.js.map