UNPKG

@appbuckets/react-ui

Version:
149 lines (146 loc) 3.86 kB
import { __rest, __read, __assign } from 'tslib'; import * as React from 'react'; import clsx from 'clsx'; import { getElementType, childrenUtils, createShorthandFactory, } from '@appbuckets/react-ui-core'; import { useSplitStateClassName } from '../utils/customHook.js'; import getSharedClassNames from '../utils/getSharedClassNames.js'; import '../BucketTheme/BucketTheme.js'; import { useWithDefaultProps } from '../BucketTheme/BucketContext.js'; import Button from '../Button/Button.js'; import Icon from '../Icon/Icon.js'; import HeaderContent from './HeaderContent.js'; import HeaderSubheader from './HeaderSubheader.js'; /* -------- * Component Render * -------- */ var Header = function (receivedProps) { var props = useWithDefaultProps('header', receivedProps); var _a = getSharedClassNames(props), className = _a.className, _b = _a.rest, actions = _b.actions, children = _b.children, content = _b.content, disabled = _b.disabled, divided = _b.divided, icon = _b.icon, inverted = _b.inverted, subheader = _b.subheader, solid = _b.solid, rawRest = __rest(_b, [ 'actions', 'children', 'content', 'disabled', 'divided', 'icon', 'inverted', 'subheader', 'solid', ]); /** Get the component element type */ var ElementType = getElementType(Header, props); /** Split state className from rest props */ var _c = __read(useSplitStateClassName(rawRest), 2), stateClasses = _c[0], rest = _c[1]; var classes = clsx( { solid: solid, inverted: inverted, disabled: disabled, divided: divided, 'with-icon': icon, 'with-actions': Array.isArray(actions), }, 'header', stateClasses, className ); var hasChildren = !childrenUtils.isNil(children); var contentElement = React.useMemo( function () { return ( !hasChildren && HeaderContent.create(content, { autoGenerateKey: false }) ); }, [hasChildren, content] ); var subheaderElement = React.useMemo( function () { return ( !hasChildren && HeaderSubheader.create(subheader, { autoGenerateKey: false }) ); }, [hasChildren, subheader] ); var iconElement = React.useMemo( function () { return Icon.create(icon, { autoGenerateKey: false, defaultProps: { solid: solid && props.textAlign === 'center' ? inverted ? 'inverted circle' : 'circle' : undefined, }, }); }, // @ts-ignore [icon, solid, inverted, props.textAlign] ); var actionsElement = React.useMemo( function () { if (!Array.isArray(actions)) { return null; } return React.createElement( 'div', { className: 'header-actions' }, actions.map(function (action) { return Button.create(action, { autoGenerateKey: true, defaultProps: { className: 'action', }, }); }) ); }, [actions] ); return React.createElement( ElementType, __assign({}, rest, { className: classes }), iconElement && React.createElement('div', { className: 'header-icon' }, iconElement), React.createElement( 'div', { className: 'header-content' }, hasChildren ? children : React.createElement( React.Fragment, null, contentElement, subheaderElement ) ), actionsElement ); }; Header.Content = HeaderContent; Header.Subheader = HeaderSubheader; Header.displayName = 'Header'; Header.create = createShorthandFactory(Header, function (content) { return { content: content }; }); export { Header as default };