/
dedaMazai
/
reactGoodPattern
Обзор
Документация
Войти
/
dedaMazai
/
reactGoodPattern
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/shared/ui/Stack/Flex/Flex.tsx
81 строка
2 KB
Andrei Chipizubov
First commit
23 май 2023, 16:55
23 май 2023, 16:55
7f90536
Код
Авторство
О чём код?
import { DetailedHTMLProps, HTMLAttributes, ReactNode } from 'react'; import { classNames, Mods } from '@/shared/lib/classNames/classNames'; import cls from './Flex.module.scss'; export type FlexJustify = 'start' | 'center' | 'end' | 'between' | 'around'; export type FlexAlign = 'start' | 'center' | 'end'; export type FlexDirection = 'row' | 'column'; export type FlexGap = '2' |'4' | '8' | '16' | '24' | '32'; type DivProps = DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>; export interface FlexProps extends DivProps { className?: string; children: ReactNode; justify?: FlexJustify; align?: FlexAlign; direction?: FlexDirection; gap?: FlexGap; max?: boolean; wrap?: boolean; } const justifyClasses: Record<FlexJustify, string> = { start: cls.justifyStart, center: cls.justifyCenter, end: cls.justifyEnd, between: cls.justifyBetween, around: cls.justifyAround, }; const alignClasses: Record<FlexAlign, string> = { start: cls.alignStart, center: cls.alignCenter, end: cls.alignEnd, }; const directionClasses: Record<FlexDirection, string> = { row: cls.directionsRow, column: cls.directionsColumn, }; const gapClasses: Record<FlexGap, string> = { 2: cls.gap2, 4: cls.gap4, 8: cls.gap8, 16: cls.gap16, 24: cls.gap24, 32: cls.gap32, }; export const Flex = (props: FlexProps) => { const { className, children, justify = 'start', align = 'center', direction = 'row', gap, max, wrap, } = props; const classes = [ className, justifyClasses[justify], alignClasses[align], directionClasses[direction], gap && gapClasses[gap], ]; const mods: Mods = { [cls.max]: max, [cls.wrap]: wrap, }; return ( <div className={classNames(cls.Flex, mods, classes)}> {children} </div> ); };