import { isNil, isBoolean } from 'lodash'; import React, { memo } from 'react'; import { View, TouchableWithoutFeedback } from 'react-native'; import { Divider, Skeleton, ShouldRender } from '@xrnjs/ui'; import { useTheme } from '../Theme'; import { Type } from './enum'; import createStyle from './styles/card.style'; import CardBody from './card-body'; import type { CardProps } from './interface'; import { renderTextLikeJSX } from '../../core/helpers'; import Image from '../Image'; const Card: React.FC = ({ type = Type.AllCard, background, imageSource, imageStyle, children, title, titleLeftExtra, extra, footer, headerStyle, titleStyle, titleTextStyle, bodyStyle, footerStyle, footerTextStyle, size = 'm', square = false, loading = false, headerDivider = false, footerDivider = false, bodyPadding = false, onPressHeader, onLayoutHeader, onLayoutBody, style, ...restProps }) => { const isS = size === 's'; const token = useTheme(); const styles = createStyle(token); const getCardStyle = () => { return { borderRadius: type === Type.AllCard ? token['--border-radius-medium'] : token['--border-radius-small'], }; }; const bgColor = { backgroundColor: background }; const hasTitleLeftExtra = !isNil(titleLeftExtra); const titleJSX = renderTextLikeJSX( title, [ styles.title_text, isS ? styles.title_text_s : null, titleTextStyle, hasTitleLeftExtra ? styles.title_text_margin_left : null, ], { numberOfLines: 2, } ); const footerJSX = renderTextLikeJSX(footer, [ styles.footer_text, footerTextStyle, ]); const showHeader = !isNil(titleJSX) || hasTitleLeftExtra || !isNil(extra); const headerJSX = ( <> {titleLeftExtra} {titleJSX} {extra} {headerDivider ? : null} ); return ( {showHeader ? ( onPressHeader ? ( {headerJSX} ) : ( headerJSX ) ) : null} {loading ? : children} {!isNil(footerJSX) ? ( <> {footerDivider ? : null} {footerJSX} ) : null} ); }; export default memo(Card);