@bootstrap-styled/ra-ui
Version:
UI components for react-admin
167 lines (130 loc) • 6.65 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf3 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _classnames = _interopRequireDefault(require("classnames"));
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _reactFontawesome = require("@fortawesome/react-fontawesome");
var _faPlusCircle = require("@fortawesome/free-solid-svg-icons/faPlusCircle");
var _Dropdown = _interopRequireDefault(require("@bootstrap-styled/v4/lib/Dropdown"));
var _DropdownToggle = _interopRequireDefault(require("@bootstrap-styled/v4/lib/Dropdown/DropdownToggle"));
var _DropdownMenu = _interopRequireDefault(require("@bootstrap-styled/v4/lib/Dropdown/DropdownMenu"));
var SelectInputUnstyled = function (_React$Component) {
(0, _inherits2.default)(SelectInputUnstyled, _React$Component);
function SelectInputUnstyled() {
var _getPrototypeOf2;
var _this;
(0, _classCallCheck2.default)(this, SelectInputUnstyled);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = (0, _possibleConstructorReturn2.default)(this, (_getPrototypeOf2 = (0, _getPrototypeOf3.default)(SelectInputUnstyled)).call.apply(_getPrototypeOf2, [this].concat(args)));
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "state", {
isOpen: false
});
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "handleClick", function () {
_this.setState({
isOpen: !_this.state.isOpen
});
});
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "handleItemClick", function (child) {
return function (event) {
var onChange = _this.props.onChange;
if (onChange) {
var value;
var target;
if (event.target) {
target = event.target;
}
value = Array.isArray(_this.props.value) ? (0, _toConsumableArray2.default)(_this.props.value) : [];
var itemIndex = value.indexOf(child.props.value);
if (itemIndex === -1) {
value.push(child.props.value);
} else {
value.splice(itemIndex, 1);
}
event.persist();
event.target = (0, _objectSpread2.default)({}, target, {
value: value
});
onChange(event, child);
}
};
});
return _this;
}
(0, _createClass2.default)(SelectInputUnstyled, [{
key: "render",
value: function render() {
var _this2 = this;
var _this$props = this.props,
children = _this$props.children,
className = _this$props.className,
value = _this$props.value,
renderValue = _this$props.renderValue;
var items = _react.default.Children.map(children, function (child) {
if (!_react.default.isValidElement(child)) {
return null;
}
var selected;
selected = value.indexOf(child.props.value) !== -1;
return _react.default.cloneElement(child, {
onClick: _this2.handleItemClick(child),
role: 'option',
selected: selected,
value: undefined,
className: (0, _classnames.default)({
active: selected
})
});
});
return _react.default.createElement("div", {
className: (0, _classnames.default)(className, 'select-multiple cursor-pointer')
}, _react.default.createElement(_Dropdown.default, {
isOpen: this.state.isOpen,
toggle: this.handleClick,
dropup: true
}, _react.default.createElement(_DropdownToggle.default, {
tag: "div",
className: "select-multiple-toggle d-flex align-items-center",
tabIndex: "0"
}, value ? renderValue(value) : null, _react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
icon: _faPlusCircle.faPlusCircle,
className: "ml-2 text-success",
size: "2x"
})), _react.default.createElement(_DropdownMenu.default, null, items)), _react.default.createElement("input", {
value: Array.isArray(value) ? value.join(',') : value,
type: "hidden"
}));
}
}]);
return SelectInputUnstyled;
}(_react.default.Component);
var SelectInput = (0, _styledComponents.default)(SelectInputUnstyled).withConfig({
displayName: "SelectMutiple__SelectInput",
componentId: "sc-1c88xbb-0"
})(["", ""], function (props) {
return "\n &.select-multiple {\n .select-multiple-toggle {\n border: 1px solid lightgrey;\n line-height: 1.25;\n padding: .25rem;\n min-height: 32px;\n border-radius: 5px;\n min-width: 75px;\n width: auto;\n &:focus {\n outline: 1px solid ".concat(props.theme['$brand-primary'], ";\n }\n .badge {\n border-radius: 1rem;\n padding: .75rem;\n }\n }\n .dropdown-item {\n padding: .25rem;\n &.active {\n background-color: lightgrey;\n color: black;\n }\n }\n }\n");
});
SelectInput.propTypes = {
className: _propTypes.default.string,
children: _propTypes.default.node,
options: _propTypes.default.array,
value: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number, _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number]))]).isRequired
};
var _default = SelectInput;
exports.default = _default;
module.exports = exports.default;