UNPKG

@vtex/styleguide

Version:

> VTEX Styleguide React components ([Docs](https://vtex.github.io/styleguide))

235 lines (186 loc) 7.99 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _react = require("react"); var _react2 = _interopRequireDefault(_react); var _propTypes = require("prop-types"); var _propTypes2 = _interopRequireDefault(_propTypes); var _Button = require("../Button"); var _Button2 = _interopRequireDefault(_Button); var _Close = require("../icon/Close"); var _Close2 = _interopRequireDefault(_Close); var _SubjectAtom = require("./Atoms/SubjectAtom"); var _SubjectAtom2 = _interopRequireDefault(_SubjectAtom); var _VerbAtom = require("./Atoms/VerbAtom"); var _VerbAtom2 = _interopRequireDefault(_VerbAtom); var _ObjectAtom = require("./Atoms/ObjectAtom"); var _ObjectAtom2 = _interopRequireDefault(_ObjectAtom); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } var Statement = /*#__PURE__*/ function (_React$Component) { _inheritsLoose(Statement, _React$Component); function Statement(props) { var _this; _this = _React$Component.call(this, props) || this; _this.handleChangeStatement = function (newValue, structure) { _this.props.onChangeStatement(newValue, structure); }; _this.handleRemoveStatement = function () { _this.props.onRemoveStatement(); }; _this.getChoiceBySubject = function (subject) { var options = _this.props.options; return options[subject]; }; _this.resetPredicate = function (subjectValue) { var options = _this.props.options; _this.handleChangeStatement(options[subjectValue].verbs[0].value || Statement.defaultProps.statements[0].verb, 'verb'); _this.handleChangeStatement(Statement.defaultProps.statements[0].object, 'object'); _this.handleChangeStatement(null, 'error'); }; _this.clearObjects = function () { _this.handleChangeStatement(Statement.defaultProps.statements[0].object, 'object'); _this.handleChangeStatement(null, 'error'); }; _this.handleChangeStatement({ subject: _react2.default.createRef(), verb: _react2.default.createRef(), object: _react2.default.createRef() }, 'refs'); return _this; } var _proto = Statement.prototype; _proto.render = function render() { var _this2 = this; var _this$props = this.props, canDelete = _this$props.canDelete, options = _this$props.options, subjectPlaceholder = _this$props.subjectPlaceholder, isRtl = _this$props.isRtl, isFullWidth = _this$props.isFullWidth, statements = _this$props.statements, statementIndex = _this$props.statementIndex, labels = _this$props.labels, onChangeObjectCallback = _this$props.onChangeObjectCallback, noOptionsMessage = _this$props.noOptionsMessage; var condition = statements[statementIndex]; var atomProps = { statements: statements, options: options, isFullWidth: isFullWidth, statementIndex: statementIndex, noOptionsMessage: noOptionsMessage, onChangeObjectCallback: onChangeObjectCallback }; var statementAtoms = [_react2.default.createElement(_SubjectAtom2.default, _extends({ ref: condition.refs.subject, key: "subject" }, atomProps, { placeholder: subjectPlaceholder, onChangeStatement: function onChangeStatement(value, structure) { _this2.handleChangeStatement(value, structure); _this2.resetPredicate(value); } })), _react2.default.createElement(_VerbAtom2.default, _extends({ ref: condition.refs.verb, key: "verb" }, atomProps, { onChangeStatement: function onChangeStatement(value, structure) { _this2.handleChangeStatement(value, structure); } })), _react2.default.createElement(_ObjectAtom2.default, _extends({ key: "object" }, atomProps))]; return _react2.default.createElement("div", null, _react2.default.createElement("div", { className: "flex-column w-100 mv3" }, _react2.default.createElement("div", { className: "flex w-100 items-start " + (isFullWidth ? 'flex-column items-stretch' : '') }, canDelete && !isFullWidth && isRtl && _react2.default.createElement("div", { className: "ma3 c-muted-2 pointer hover-c-danger", onClick: this.handleRemoveStatement }, _react2.default.createElement(_Close2.default, { size: 25 })), isRtl ? [].concat(statementAtoms).reverse() : statementAtoms, canDelete && !isFullWidth && !isRtl && _react2.default.createElement("div", { className: "ma3 c-muted-2 pointer hover-c-danger", onClick: this.handleRemoveStatement }, _react2.default.createElement(_Close2.default, { size: 25 })), canDelete && isFullWidth && _react2.default.createElement("div", { className: "tr" }, _react2.default.createElement(_Button2.default, { variation: "tertiary", size: "small", onClick: this.handleRemoveStatement }, _react2.default.createElement("div", { className: "dib" }, _react2.default.createElement(_Close2.default, { className: "c-on-action-primary" })), _react2.default.createElement("div", { className: "dib mb1 v-mid", style: { lineHeight: '10px' } }, labels.delete)))), condition.error && condition.error.message && _react2.default.createElement("div", { className: "red t-small mh3 mt2 lh-title" }, condition.error.message))); }; return Statement; }(_react2.default.Component); Statement.defaultProps = { onRemoveStatement: function onRemoveStatement() {}, onChangeStatement: function onChangeStatement() {}, onChangeObjectCallback: function onChangeObjectCallback() {}, canDelete: true, statements: [{ subject: '', verb: '', object: null }], isRtl: false, isFullWidth: false, statementIndex: 0, labels: { delete: 'DELETE' }, noOptionsMessage: 'No Options' }; Statement.propTypes = { /** Shows or hides the delete button */ canDelete: _propTypes2.default.bool, /** Current selected options for this Statement */ statements: _propTypes2.default.arrayOf(_propTypes2.default.shape({ refs: _propTypes2.default.shape({ subject: _propTypes2.default.string, verb: _propTypes2.default.string, object: _propTypes2.default.any }), error: _propTypes2.default.string })), /** Possible options and respective data types, verb options */ options: _propTypes2.default.object.isRequired, /** Placeholder for subject dropdown */ subjectPlaceholder: _propTypes2.default.string.isRequired, /** Stretch component to 100% of the width */ isFullWidth: _propTypes2.default.bool, /** Whether the order of elements and text if right to left */ isRtl: _propTypes2.default.bool, /** Statement change callback */ onChangeStatement: _propTypes2.default.func, /** Statement remove callback */ onRemoveStatement: _propTypes2.default.func, /** To which row does this Statement belong to? */ statementIndex: _propTypes2.default.number, /** Labels for the controls and texts, default is english */ labels: _propTypes2.default.shape({ delete: _propTypes2.default.string }), /** Please use the following one with caution, I did not test it, so it can break everything */ onChangeObjectCallback: _propTypes2.default.func, /** Value showed when has no options in subject, verb and object*/ noOptionsMessage: _propTypes2.default.string }; exports.default = Statement;