UNPKG

@appbuckets/react-ui

Version:
112 lines (109 loc) 2.89 kB
import { __rest, __read, __assign } from 'tslib'; import * as React from 'react'; import clsx from 'clsx'; import { createShorthandFactory, 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 PanelHeader from './PanelHeader.js'; import PanelBody from './PanelBody.js'; import PanelFooter from './PanelFooter.js'; import Loader from '../Loader/Loader.js'; /* -------- * Component Render * -------- */ var Panel = function (receivedProps) { var props = useWithDefaultProps('panel', receivedProps); var _a = useSharedClassName(props), className = _a.className, _b = _a.rest, children = _b.children, content = _b.content, fab = _b.fab, footer = _b.footer, disabled = _b.disabled, loading = _b.loading, header = _b.header, solid = _b.solid, table = _b.table, rawRest = __rest(_b, [ 'children', 'content', 'fab', 'footer', 'disabled', 'loading', 'header', 'solid', 'table', ]); var ElementType = useElementType(Panel, receivedProps, props); var _c = __read(useSplitStateClassName(rawRest), 2), stateClasses = _c[0], rest = _c[1]; var classes = clsx( { solid: solid, disabled: disabled || loading, loading: loading, 'table-container': table, }, 'panel', className, stateClasses ); /** Use shorthand to build panel elements */ var loaderElement = React.useMemo( function () { return ( loading && Loader.create({ size: 'big' }, { autoGenerateKey: false }) ); }, [loading] ); var headerElement = React.useMemo( function () { return PanelHeader.create(header, { autoGenerateKey: false }); }, [header] ); var footerElement = React.useMemo( function () { return PanelFooter.create(footer, { autoGenerateKey: false }); }, [footer] ); /** If children exists, render them */ if (!childrenUtils.isNil(children)) { return React.createElement( ElementType, __assign({}, rest, { className: classes }), children ); } var bodyContent = childrenUtils.isNil(children) ? content : children; /** Return the Panel */ return React.createElement( ElementType, __assign({}, rest, { className: classes }), loaderElement, headerElement, bodyContent && React.createElement(PanelBody, { fab: fab }, bodyContent), footerElement ); }; Panel.displayName = 'Panel'; Panel.create = createShorthandFactory(Panel, function (content) { return { content: content }; }); Panel.Header = PanelHeader; Panel.Body = PanelBody; Panel.Footer = PanelFooter; export { Panel as default };