@atlaskit/form
Version:
A form allows people to input information.
91 lines (86 loc) • 2.96 kB
JavaScript
/* message.tsx generated by @compiled/babel-plugin v3.0.2 */
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
import "./message.compiled.css";
import * as React from 'react';
import { ax, ix } from "@compiled/react/runtime";
import { useContext, useEffect, useRef, useState } from 'react';
import ErrorIcon from '@atlaskit/icon/core/status-error';
import SuccessIcon from '@atlaskit/icon/core/status-success';
import { MessageWrapperContext } from './message-context';
/**
* API for the internal `<Message />` component. This is not public API.
*/
/**
* Public API of the various message components.
*/
var messageStyles = null;
var messageAppearanceStyles = {
default: "_syaz1rpy",
error: "_syaz1tmw",
valid: "_syazgsak"
};
var iconWrapperStyles = {
root: "_1e0c1txw _4t3i7vkz _4cvr1h6o"
};
var IconWrapper = function IconWrapper(_ref) {
var children = _ref.children;
return /*#__PURE__*/React.createElement("span", {
className: ax([iconWrapperStyles.root])
}, children);
};
var messageIcons = {
error: /*#__PURE__*/React.createElement(ErrorIcon, {
color: "currentColor",
label: "error",
size: "small"
}),
valid: /*#__PURE__*/React.createElement(SuccessIcon, {
color: "currentColor",
label: "success",
size: "small"
})
};
/**
* __Message__
*
* A message component for displaying messages in a form.
*/
var Message = function Message(_ref2) {
var children = _ref2.children,
_ref2$appearance = _ref2.appearance,
appearance = _ref2$appearance === void 0 ? 'default' : _ref2$appearance,
fieldId = _ref2.fieldId,
testId = _ref2.testId;
var icon = messageIcons[appearance];
var messageRef = useRef(null);
var _useState = useState(false),
_useState2 = _slicedToArray(_useState, 2),
hasMessageWrapper = _useState2[0],
setHasMessageWrapper = _useState2[1];
var _useContext = useContext(MessageWrapperContext),
isWrapper = _useContext.isWrapper;
useEffect(function () {
if (messageRef.current) {
setHasMessageWrapper(isWrapper);
}
}, [isWrapper]);
/**
* The wrapping span is necessary to preserve spaces between children.
* Otherwise the flex layout of the message will remove any whitespace
* between children.
*
* If the child is just a string, this is not required and we can use one
* less DOM element.
*/
var content = typeof children === 'string' ? children : /*#__PURE__*/React.createElement("span", null, children);
return /*#__PURE__*/React.createElement("div", {
"data-testid": testId,
id: fieldId,
ref: messageRef
// For backwards compatability, if there is a wrapper, aria-live is not needed
,
"aria-live": !hasMessageWrapper ? 'polite' : undefined,
className: ax(["_zulp12x7 _11c8wadc _1e0c1txw _1bah1q9y _1pfh1b66", messageAppearanceStyles[appearance]])
}, icon && /*#__PURE__*/React.createElement(IconWrapper, null, icon), content);
};
export default Message;