UNPKG

maisonsport-common-ui

Version:

Suite of styled-components to be consumed by the React-Native App and by the Web (via React-Native for Web)

243 lines (214 loc) 8.93 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.inputMargins = exports.inputColors = exports.inputID = exports.inputIconID = exports.inputContainerID = exports.placeholderErrorIconID = exports.errorMessageTestID = exports.inputParentID = void 0; var _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _native = _interopRequireWildcard(require("styled-components/native")); var _styledSystem = require("styled-system"); var _composeReactRefs = _interopRequireDefault(require("@seznam/compose-react-refs")); var _Box = _interopRequireDefault(require("../../atoms/Box")); var _Touchable = _interopRequireDefault(require("../../atoms/Touchable")); var _Text = _interopRequireDefault(require("../../atoms/Text")); var _theme = _interopRequireDefault(require("../../theme")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } 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 _templateObject() { const data = _taggedTemplateLiteral(["\n ", "\n ", "\n ", "\n ", "\n ", "\n"]); _templateObject = function () { return data; }; return data; } function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } const inputParentID = 'input-parent'; exports.inputParentID = inputParentID; const errorMessageTestID = 'input-error-message'; exports.errorMessageTestID = errorMessageTestID; const placeholderErrorIconID = 'input-placeholder-error-icon'; exports.placeholderErrorIconID = placeholderErrorIconID; const inputContainerID = 'input-container'; exports.inputContainerID = inputContainerID; const inputIconID = 'input-icon'; exports.inputIconID = inputIconID; const inputID = 'text-input'; exports.inputID = inputID; const inputColors = { error: 'red', default: 'lightGrey' }; exports.inputColors = inputColors; const inputMargins = { error: 1, default: 0 }; exports.inputMargins = inputMargins; const StyledTextInput = _native.default.TextInput.attrs(({ theme }) => ({ placeholderTextColor: theme.colors.darkGrey }))(_templateObject(), _styledSystem.color, _styledSystem.typography, _styledSystem.layout, _styledSystem.space, _styledSystem.fontFamily); StyledTextInput.defaultProps = { color: 'black', backgroundColor: inputColors.default, fontFamily: 0, fontWeight: 3, fontSize: 2, height: '100%', flex: 1, width: 1, placeholderStyle: { font: 0 } }; const TextInput = /*#__PURE__*/(0, _react.forwardRef)(({ noWrapTheme, icon, iconRight, error, errorMessages, ErrorIconComponent, marginBottom, marginTop, marginLeft, marginRight, backgroundColor, ...props }, externalRef) => { const inputRef = /*#__PURE__*/(0, _react.createRef)(); const [componentHasError, setComponentHasError] = (0, _react.useState)(false); (0, _react.useEffect)(() => { setComponentHasError(error || !!errorMessages.filter(Boolean).length); }, [error, errorMessages.filter(Boolean).length]); if (backgroundColor) inputColors.default = backgroundColor; function getErrorMessages() { return errorMessages.filter(Boolean).map(message => /*#__PURE__*/_react.default.createElement(_Box.default, { key: message, flexDirection: "row", marginBottom: 1, alignItems: "center" }, /*#__PURE__*/_react.default.createElement(_Box.default, { width: "7.5px", height: "7.5px", backgroundColor: inputColors.error, borderRadius: "7.5px" }), /*#__PURE__*/_react.default.createElement(_Text.default, { testID: errorMessageTestID, noWrapTheme: true, variant: "p", color: inputColors.error, fontWeight: 4, marginLeft: 1, textAlign: "left" }, message))); } function getRightSideIcon() { const Container = ({ onPress = () => {}, children }) => /*#__PURE__*/_react.default.createElement(_Touchable.default, { noWrapTheme: true, accessible: false, backgroundColor: inputColors.default, width: "8%", height: 1, justifyContent: "center", alignItems: "center", onPress: onPress, activeOpacity: 1, tabIndex: -1, style: { cursor: 'text' } }, children); let rightSideIcon = null; if (componentHasError) { rightSideIcon = /*#__PURE__*/_react.default.createElement(Container, { onPress: () => { var _inputRef$current; return inputRef === null || inputRef === void 0 ? void 0 : (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.focus(); } }, /*#__PURE__*/_react.default.createElement(ErrorIconComponent, { width: 15, height: 15, stroke: _theme.default.colors[inputColors.error] })); } else if (iconRight) { rightSideIcon = /*#__PURE__*/_react.default.createElement(Container, { pointerEvents: "box-none" }, iconRight); } return rightSideIcon; } return /*#__PURE__*/_react.default.createElement(_native.ThemeProvider, { theme: _theme.default }, /*#__PURE__*/_react.default.createElement(_Box.default, { testID: "".concat(props.placeholder || '', "_").concat(inputParentID), noWrapTheme: true, marginTop: marginTop, marginRight: marginRight, marginBottom: marginBottom, marginLeft: marginLeft }, /*#__PURE__*/_react.default.createElement(_Box.default, { testID: inputContainerID, noWrapTheme: true, height: props.height || 'textInputHeight', backgroundColor: inputColors.default, borderColor: componentHasError ? inputColors.error : inputColors.default, borderWidth: "medium", borderRadius: 4, flexDirection: "row", justifyContent: "space-between", alignItems: "center", marginBottom: componentHasError ? inputMargins.error : inputMargins.default }, icon && /*#__PURE__*/_react.default.createElement(_Box.default, { testID: inputIconID, noWrapTheme: true, accessible: false, width: "8%", height: 1, backgroundColor: inputColors.default, justifyContent: "center", alignItems: "center", activeOpacity: 1, tabIndex: -1 }, icon), /*#__PURE__*/_react.default.createElement(StyledTextInput, _extends({ testID: inputID, paddingLeft: 1, autoCapitalize: (props === null || props === void 0 ? void 0 : props.type) && ['email'].includes(props.type) ? 'none' : 'sentences' // eslint-disable-next-line react/jsx-props-no-spreading }, props, { ref: (0, _composeReactRefs.default)(inputRef, externalRef) })), getRightSideIcon()), componentHasError && /*#__PURE__*/_react.default.createElement(_Box.default, { marginY: 1 }, getErrorMessages()))); }); TextInput.defaultProps = { type: null, icon: null, iconRight: null, error: false, errorMessages: [], ErrorIconComponent: () => /*#__PURE__*/_react.default.createElement(_Text.default, { fontWeight: "black", color: inputColors.error, testID: placeholderErrorIconID }, "X"), backgroundColor: null }; TextInput.propTypes = { type: _propTypes.default.string, icon: _propTypes.default.node, iconRight: _propTypes.default.node, error: _propTypes.default.bool, // eslint-disable-next-line react/forbid-prop-types errorMessages: _propTypes.default.array, ErrorIconComponent: _propTypes.default.func, backgroundColor: _propTypes.default.string }; TextInput.displayName = 'TextInput'; var _default = TextInput; exports.default = _default; //# sourceMappingURL=index.js.map