@appbuckets/react-ui
Version:
Just Another React UI Framework
112 lines (109 loc) • 2.89 kB
JavaScript
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 };