5180 fichiers 38.5 Mo 0 téléchargements 150 vues mis à jour il y a 4 heures ui
Flex.tsx 1.7 Ko Télécharger le fichier
import { FC, useMemo } from 'react';
import { Base, BaseProps } from './Base';
import { AlignItemType, AlignSelfType, JustifyContentType, SpacingType } from './types';

export interface FlexProps extends BaseProps<HTMLDivElement> {
    column?: boolean;
    reverse?: boolean;
    gap?: SpacingType;
    center?: boolean;
    alignSelf?: AlignSelfType;
    alignItems?: AlignItemType;
    justifyContent?: JustifyContentType;
}

export const Flex: FC<FlexProps> = (props) => {
    const {
        display = 'flex',
        column = undefined,
        reverse = false,
        gap = null,
        center = false,
        alignSelf = null,
        alignItems = null,
        justifyContent = null,
        classNames = [],
        ...rest
    } = props;

    const getClassNames = useMemo(() => {
        const newClassNames: string[] = [];

        if (column) {
            if (reverse) newClassNames.push('flex-col-span-reverse');
            else newClassNames.push('flex-col');
        } else {
            if (reverse) newClassNames.push('flex-row-reverse');
        }

        if (gap) newClassNames.push('gap-' + gap);

        if (alignSelf) newClassNames.push('self-' + alignSelf);

        if (alignItems) newClassNames.push('items-' + alignItems);

        if (justifyContent) newClassNames.push('justify-' + justifyContent);

        if (!alignItems && !justifyContent && center) newClassNames.push('items-center', 'justify-center');

        if (classNames.length) newClassNames.push(...classNames);

        return newClassNames;
    }, [column, reverse, gap, center, alignSelf, alignItems, justifyContent, classNames]);

    return <Base classNames={getClassNames} display={display} {...rest} />;
};
15Sujets
1Dépôts
20Membres
7En ligne
Profile
Inscrit
Dernière visite
Messages
0
Votes positifs
0
Votes négatifs
0

Nous utilisons des cookies pour assurer le bon fonctionnement du site et améliorer votre expérience. en savoir plus

Autoriser