mirror of
https://github.com/idanoo/GoScrobble.git
synced 2024-11-28 03:15:16 +00:00
86 lines
3.2 KiB
JavaScript
86 lines
3.2 KiB
JavaScript
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
||
|
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
||
|
import React from 'react';
|
||
|
import PropTypes from 'prop-types';
|
||
|
import classNames from 'classnames';
|
||
|
import { mapToCssModules } from './utils';
|
||
|
import CustomFileInput from './CustomFileInput';
|
||
|
var propTypes = {
|
||
|
className: PropTypes.string,
|
||
|
id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
|
||
|
type: PropTypes.string.isRequired,
|
||
|
label: PropTypes.node,
|
||
|
inline: PropTypes.bool,
|
||
|
valid: PropTypes.bool,
|
||
|
invalid: PropTypes.bool,
|
||
|
bsSize: PropTypes.string,
|
||
|
htmlFor: PropTypes.string,
|
||
|
cssModule: PropTypes.object,
|
||
|
children: PropTypes.oneOfType([PropTypes.node, PropTypes.array, PropTypes.func]),
|
||
|
innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.string, PropTypes.func])
|
||
|
};
|
||
|
|
||
|
function CustomInput(props) {
|
||
|
var className = props.className,
|
||
|
label = props.label,
|
||
|
inline = props.inline,
|
||
|
valid = props.valid,
|
||
|
invalid = props.invalid,
|
||
|
cssModule = props.cssModule,
|
||
|
children = props.children,
|
||
|
bsSize = props.bsSize,
|
||
|
innerRef = props.innerRef,
|
||
|
htmlFor = props.htmlFor,
|
||
|
attributes = _objectWithoutPropertiesLoose(props, ["className", "label", "inline", "valid", "invalid", "cssModule", "children", "bsSize", "innerRef", "htmlFor"]);
|
||
|
|
||
|
var type = attributes.type;
|
||
|
var customClass = mapToCssModules(classNames(className, "custom-" + type, bsSize ? "custom-" + type + "-" + bsSize : false), cssModule);
|
||
|
var validationClassNames = mapToCssModules(classNames(invalid && "is-invalid", valid && "is-valid"), cssModule);
|
||
|
var labelHtmlFor = htmlFor || attributes.id;
|
||
|
|
||
|
if (type === "select") {
|
||
|
var _type = attributes.type,
|
||
|
_rest = _objectWithoutPropertiesLoose(attributes, ["type"]);
|
||
|
|
||
|
return /*#__PURE__*/React.createElement("select", _extends({}, _rest, {
|
||
|
ref: innerRef,
|
||
|
className: classNames(validationClassNames, customClass),
|
||
|
"aria-invalid": invalid
|
||
|
}), children);
|
||
|
}
|
||
|
|
||
|
if (type === "file") {
|
||
|
return /*#__PURE__*/React.createElement(CustomFileInput, props);
|
||
|
}
|
||
|
|
||
|
if (type !== "checkbox" && type !== "radio" && type !== "switch") {
|
||
|
return /*#__PURE__*/React.createElement("input", _extends({}, attributes, {
|
||
|
ref: innerRef,
|
||
|
"aria-invalid": invalid,
|
||
|
className: classNames(validationClassNames, customClass)
|
||
|
}));
|
||
|
}
|
||
|
|
||
|
var wrapperClasses = classNames(customClass, mapToCssModules(classNames("custom-control", {
|
||
|
"custom-control-inline": inline
|
||
|
}), cssModule));
|
||
|
|
||
|
var hidden = attributes.hidden,
|
||
|
rest = _objectWithoutPropertiesLoose(attributes, ["hidden"]);
|
||
|
|
||
|
return /*#__PURE__*/React.createElement("div", {
|
||
|
className: wrapperClasses,
|
||
|
hidden: hidden || false
|
||
|
}, /*#__PURE__*/React.createElement("input", _extends({}, rest, {
|
||
|
type: type === "switch" ? "checkbox" : type,
|
||
|
ref: innerRef,
|
||
|
"aria-invalid": invalid,
|
||
|
className: classNames(validationClassNames, mapToCssModules("custom-control-input", cssModule))
|
||
|
})), /*#__PURE__*/React.createElement("label", {
|
||
|
className: mapToCssModules("custom-control-label", cssModule),
|
||
|
htmlFor: labelHtmlFor
|
||
|
}, label), children);
|
||
|
}
|
||
|
|
||
|
CustomInput.propTypes = propTypes;
|
||
|
export default CustomInput;
|