UNPKG

@appbuckets/react-ui

Version:
125 lines (122 loc) 2.96 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 Icon from '../Icon/Icon.js'; import TableCellContent from './TableCellContent.js'; /* -------- * Component Render * -------- */ var TableCell = function (receivedProps) { var props = useWithDefaultProps('tableCell', receivedProps); var _a = useSharedClassName(props), className = _a.className, _b = _a.rest, active = _b.active, children = _b.children, content = _b.content, header = _b.header, icon = _b.icon, meta = _b.meta, selectable = _b.selectable, wrapped = _b.wrapped, rawRest = __rest(_b, [ 'active', 'children', 'content', 'header', 'icon', 'meta', 'selectable', 'wrapped', ]); var _c = __read(useSplitStateClassName(rawRest), 2), stateClassName = _c[0], rest = _c[1]; var ElementType = useElementType(TableCell, receivedProps, props); var classes = clsx( { active: active, selectable: selectable, wrapped: wrapped, 'with-icon': !!icon, }, 'cell', className, stateClassName ); // ---- // Generate Memoized Shorthand Content // ---- var iconElement = React.useMemo( function () { return Icon.create(icon, { autoGenerateKey: false }); }, [icon] ); var metaElement = React.useMemo( function () { return TableCellContent.create(meta, { autoGenerateKey: false, overrideProps: { type: 'meta' }, }); }, [meta] ); var titleElement = React.useMemo( function () { return TableCellContent.create(header, { autoGenerateKey: false, overrideProps: { type: 'title' }, }); }, [header] ); var contentElement = React.useMemo( function () { return TableCellContent.create(content, { autoGenerateKey: false, overrideProps: { type: 'content' }, }); }, [content] ); // ---- // Render Children // ---- if (!childrenUtils.isNil(children)) { return React.createElement( ElementType, __assign({}, rest, { className: classes }), iconElement, children ); } // ---- // Render Using Shorthand // ---- return React.createElement( ElementType, __assign({}, rest, { className: classes }), iconElement, metaElement, titleElement, contentElement ); }; TableCell.displayName = 'TableCell'; TableCell.Content = TableCellContent; TableCell.create = createShorthandFactory(TableCell, function (content) { return { header: content }; }); export { TableCell as default };