UNPKG

@fluentui/react

Version:

Reusable React components for building web experiences.

85 lines 6.85 kB
define(["require", "exports", "tslib", "react", "../../Utilities", "../../Button", "../../Icon", "./MessageBar.types", "@fluentui/react-hooks"], function (require, exports, tslib_1, React, Utilities_1, Button_1, Icon_1, MessageBar_types_1, react_hooks_1) { "use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.MessageBarBase = void 0; var ICON_MAP = (_a = {}, _a[MessageBar_types_1.MessageBarType.info] = 'Info', _a[MessageBar_types_1.MessageBarType.warning] = 'Info', _a[MessageBar_types_1.MessageBarType.error] = 'ErrorBadge', _a[MessageBar_types_1.MessageBarType.blocked] = 'Blocked2', _a[MessageBar_types_1.MessageBarType.severeWarning] = 'Warning', _a[MessageBar_types_1.MessageBarType.success] = 'Completed', _a); var COMPONENT_NAME = 'MessageBar'; var getClassNames = (0, Utilities_1.classNamesFunction)(); var getAnnouncementPriority = function (messageBarType) { switch (messageBarType) { case MessageBar_types_1.MessageBarType.blocked: case MessageBar_types_1.MessageBarType.error: case MessageBar_types_1.MessageBarType.severeWarning: return 'assertive'; } return 'polite'; }; var getRole = function (messageBarType) { switch (messageBarType) { case MessageBar_types_1.MessageBarType.blocked: case MessageBar_types_1.MessageBarType.error: case MessageBar_types_1.MessageBarType.severeWarning: return 'alert'; } return 'status'; }; exports.MessageBarBase = React.forwardRef(function (props, ref) { var _a = (0, react_hooks_1.useBoolean)(false), expandSingleLine = _a[0], toggleExpandSingleLine = _a[1].toggle; var labelId = (0, react_hooks_1.useId)('MessageBar'); var actions = props.actions, className = props.className, children = props.children, // eslint-disable-next-line @typescript-eslint/no-deprecated overflowButtonAriaLabel = props.overflowButtonAriaLabel, dismissIconProps = props.dismissIconProps, styles = props.styles, theme = props.theme, _b = props.messageBarType, messageBarType = _b === void 0 ? MessageBar_types_1.MessageBarType.info : _b, _c = props.onDismiss, onDismiss = _c === void 0 ? undefined : _c, _d = props.isMultiline, isMultiline = _d === void 0 ? true : _d, truncated = props.truncated, dismissButtonAriaLabel = props.dismissButtonAriaLabel, messageBarIconProps = props.messageBarIconProps, role = props.role, _e = props.delayedRender, delayedRender = _e === void 0 ? true : _e, expandButtonProps = props.expandButtonProps, _f = props.onExpandButtonToggled, onExpandButtonToggled = _f === void 0 ? undefined : _f, showExpandButton = props.showExpandButton; // Wrap 'toggleExpandSingleLine' to execute the 'onExpandButtonToggled' callback whenever the expand button toggles var handleToggleExpandSingleLine = React.useCallback(function () { toggleExpandSingleLine(); if (onExpandButtonToggled) { // We use the opposite of 'expandSingleLine' here because at this point the useBoolean's // useState hasn't been updated yet. onExpandButtonToggled(!expandSingleLine); } }, [expandSingleLine, onExpandButtonToggled, toggleExpandSingleLine]); var nativeProps = (0, Utilities_1.getNativeProps)(props, Utilities_1.htmlElementProperties, [ 'className', 'role', ]); var classNames = getClassNames(styles, { theme: theme, messageBarType: messageBarType || MessageBar_types_1.MessageBarType.info, onDismiss: onDismiss !== undefined, actions: actions !== undefined, truncated: truncated, isMultiline: isMultiline, expandSingleLine: expandSingleLine, className: className, }); var expandIconProps = { iconName: expandSingleLine ? 'DoubleChevronUp' : 'DoubleChevronDown' }; var regionProps = actions || onDismiss ? { 'aria-describedby': labelId, role: 'region' } : {}; var actionsDiv = actions ? React.createElement("div", { className: classNames.actions }, actions) : null; var dismissButton = onDismiss ? (React.createElement(Button_1.IconButton, { disabled: false, className: classNames.dismissal, onClick: onDismiss, iconProps: dismissIconProps ? dismissIconProps : { iconName: 'Clear' }, title: dismissButtonAriaLabel, ariaLabel: dismissButtonAriaLabel })) : null; return (React.createElement("div", tslib_1.__assign({ ref: ref, className: classNames.root }, regionProps), React.createElement("div", { className: classNames.content }, React.createElement("div", { className: classNames.iconContainer, "aria-hidden": true }, messageBarIconProps ? (React.createElement(Icon_1.Icon, tslib_1.__assign({}, messageBarIconProps, { className: (0, Utilities_1.css)(classNames.icon, messageBarIconProps.className) }))) : (React.createElement(Icon_1.Icon, { iconName: ICON_MAP[messageBarType], className: classNames.icon }))), React.createElement("div", { className: classNames.text, id: labelId, role: role || getRole(messageBarType), "aria-live": getAnnouncementPriority(messageBarType) }, React.createElement("span", tslib_1.__assign({ className: classNames.innerText }, nativeProps), delayedRender ? (React.createElement(Utilities_1.DelayedRender, null, React.createElement("span", null, children))) : ( // this span is probably not necessary, but preserving it for now in case anyone // has styling that expects it to be present React.createElement("span", null, children)))), /* singleline expand/collapse button */ (showExpandButton || (!isMultiline && !actionsDiv && truncated)) && (React.createElement("div", { className: classNames.expandSingleLine }, React.createElement(Button_1.IconButton, tslib_1.__assign({ disabled: false, className: classNames.expand, onClick: handleToggleExpandSingleLine, iconProps: expandIconProps, ariaLabel: overflowButtonAriaLabel, "aria-expanded": expandSingleLine }, expandButtonProps)))), /* singleline actions */ !isMultiline && actionsDiv, /* singleline dismiss */ !isMultiline && dismissButton && (React.createElement("div", { className: classNames.dismissSingleLine }, dismissButton)), /* multiline dismiss */ isMultiline && dismissButton), /* multiline actions */ isMultiline && actionsDiv)); }); exports.MessageBarBase.displayName = COMPONENT_NAME; }); //# sourceMappingURL=MessageBar.base.js.map