UNPKG

@appbuckets/react-ui

Version:
108 lines (105 loc) 2.66 kB
import { __rest, __read, __assign } from 'tslib'; import * as React from 'react'; import clsx from 'clsx'; import { useElementType, childrenUtils } from '@appbuckets/react-ui-core'; import { useSharedClassName, useSplitStateClassName, } from '../utils/customHook.js'; import '../BucketTheme/BucketTheme.js'; import { useWithDefaultProps } from '../BucketTheme/BucketContext.js'; import Icon from '../Icon/Icon.js'; import Header from '../Header/Header.js'; /* -------- * Component Render * -------- */ var Message = function (receivedProps) { var props = useWithDefaultProps('message', receivedProps); var _a = useSharedClassName(props), className = _a.className, _b = _a.rest, children = _b.children, content = _b.content, header = _b.header, icon = _b.icon, onDismiss = _b.onDismiss, rawRest = __rest(_b, [ 'children', 'content', 'header', 'icon', 'onDismiss', ]); /** Get Proper Element type */ var ElementType = useElementType(Message, receivedProps, props); /** Split state classNames */ var _c = __read(useSplitStateClassName(rawRest), 2), stateClassNames = _c[0], rest = _c[1]; /** Build class list */ var classes = clsx( typeof onDismiss === 'function' && 'dismissible', 'message', stateClassNames, className ); /* -------- * Component Handlers * -------- */ var handleDismiss = function (e) { if (typeof onDismiss === 'function') { onDismiss(e, props); } }; /* -------- * Internal Elements * -------- */ var dismissIcon = typeof onDismiss === 'function' && React.createElement(Icon, { name: 'times', className: 'dismiss', onClick: handleDismiss, }); /* -------- * Internal Content Generated * -------- */ var messageContent = React.useMemo( function () { return ( (header || content || icon) && Header.create( { content: header, subheader: content, icon: icon, }, { autoGenerateKey: false } ) ); }, [header, content, icon] ); /* -------- * If element has children, render them * -------- */ if (!childrenUtils.isNil(children)) { return React.createElement( ElementType, __assign({}, rest, { className: classes }), dismissIcon, children ); } /* -------- * Render the Component * -------- */ return React.createElement( ElementType, __assign({}, rest, { className: classes }), dismissIcon, messageContent ); }; Message.displayName = 'Message'; export { Message as default };