import React, { FC, HTMLAttributes, ReactNode } from 'react'; import classNames from 'classnames'; import { notifyDeprecation } from '../utils'; export interface SectionProps extends HTMLAttributes { /** * Classi aggiuntive da usare per il contenitore più esterno * Per replicare il comportamento precedente, in cui `className` veniva applicato anche al wrapper, * passare `true`. * */ wrapperClassName?: string | true; /** Classi aggiuntive da usare per il contenitore più interno */ className?: string; /** * Colore utilizzato per lo sfondo del componente Section. * In caso di `primary` o `neutral` si consiglia di applicare la classe `.white-color` al contenuto per garantire la leggibilità dei testi. * */ color?: 'primary' | 'neutral' | 'muted' | string; /** * Indicare l'URL dell'immagine da utilizzare come sfondo della sezione. */ image?: string; /** Il contenuto della sezione */ children?: ReactNode | ReactNode[]; /** Quando abilitato applica lo sfondo di tipo "neutral" al componente. * @deprecated. Utilizzare `color="neutral"` */ neutral?: boolean; /** Quando abilitato applica lo sfondo di tipo "muted" al componente. * @deprecated. Utilizzare `color="muted"` */ muted?: boolean; testId?: string; } export const Section: FC = ({ color, image, testId, wrapperClassName, className, children, neutral, muted, ...rest }) => { const classes = classNames('section', wrapperClassName === true ? className : wrapperClassName, { [`section-${color}`]: color, 'section-image': image }); if (neutral || muted) { notifyDeprecation( `Please use the prop "color" instead of the "${neutral ? 'neutral' : 'muted'}" for the Section component.` ); } // have them separated from the classes above or these will conflict with the color prop // concatenate them at the end. Worst case a duplicate class will appear const deprecatedClasses = classNames({ 'section-neutral': neutral, 'section-muted': muted }); const innerClasses = classNames('section-content', className); const styleClass = { backgroundImageClass: image ? { backgroundImage: `url(${image})` } : {} }; const finalWrapperClassName = classNames(classes, deprecatedClasses); return (
{children}
); };