import React, { FC, forwardRef, memo } from 'react'; import { cn } from '../../util/bem'; import { externalClasses, MediaPropsType } from '../../util/externalClasses'; import { FrameExtensionUnionType, RadiusSizesType, SizeType, TextColorType } from '../../util/global-props'; import { withMedia } from '../../util/media-merge'; import { Loader } from '../loader/loader.component'; import './wrapper.component.scss'; export type WrapperPropsType = { children?: React.ReactNode | string; className?: string; id?: string; row?: boolean; mediaColumn?: 'xsm' | 'sm' | 'md' | 'lg'; align?: 'center' | 'right' | 'left' | 'stretch' | 'space-between' | 'space-around'; valign?: 'top'|'center'|'bottom' | 'stretch'; frame?: FrameExtensionUnionType; hoverEffect?: boolean; color?: TextColorType; padding?: SizeType; margin?: SizeType; fullWidth?: boolean; fullHeight?: boolean; maxWidth?: string; flex?: number | string ; styles?: React.CSSProperties; style?: React.CSSProperties; radius?: RadiusSizesType; overflow?: 'hidden' | 'scroll' | 'visible'; loading?: boolean; loaderSize?: React.ComponentProps['size']; backgroundImage?: string; backgroundPosition?: ['left'| 'center' | 'right', 'top' | 'bottom' | 'center']; backgroundSize?: 'cover' | 'contain'; /** * Used for remove last child margin inside wrapper * * */ lastChildMargin?: boolean; innerRef?: React.Ref; onClick?: React.EventHandler>; onMouseDown?: React.EventHandler>; onMouseLeave?: React.EventHandler>; onMouseEnter?: React.EventHandler>; hide?: MediaPropsType; xsm?: WrapperPropsType; sm?: WrapperPropsType; md?: WrapperPropsType; lg?: WrapperPropsType; } const className = cn('wrapper'); export const Wrapper: FC = withMedia(memo(forwardRef((props, ref: React.Ref) => (
{ props.loading && } { props.children }
)))); Wrapper.defaultProps = { loaderSize: 'md' }; Wrapper.displayName = 'Wrapper';