challenge-vtex-io-gabriel-f.../react/components/Html/index.tsx

55 lines
1.0 KiB
TypeScript
Raw Normal View History

import React, { ReactNode } from 'react'
import { useCssHandles } from 'vtex.css-handles'
2023-01-20 13:07:13 +00:00
const CSS_HANDLES = ['html'] as const
import './style.css'
2023-01-20 13:07:13 +00:00
type HtmlProps = {
children?: ReactNode
2023-01-26 14:21:37 +00:00
/**
* Qual tag Html que deseja que seja usar
*
* @default div
*/
tag?: keyof React.ReactHTML
2023-01-26 14:21:37 +00:00
/**
* Classes CSS extras que deseja adicionar.
* Feito para uso de [classes do tachyons](https://tachyons.io/)
*/
tachyonsClasses?: string
2023-01-26 14:21:37 +00:00
/**
* Se caso quiser usar esse componente
* para adicinar um texto simples
*/
text?: string
2023-01-26 14:21:37 +00:00
/**
* Tag ID para
*/
testId?: string
}
2023-01-20 13:07:13 +00:00
2023-01-26 14:21:37 +00:00
export const Html = ({
children = null,
tag = 'div',
text = '',
tachyonsClasses: classes = '',
2023-01-26 14:21:37 +00:00
testId,
}: HtmlProps) => {
const { handles } = useCssHandles(CSS_HANDLES)
2023-01-20 13:07:13 +00:00
2023-01-26 14:21:37 +00:00
const props = {
className: `${handles.html} ${classes}`,
'data-testid': testId,
}
2023-01-26 14:21:37 +00:00
const Children = (
<>
{children}
{text}
</>
)
const Element = React.createElement(tag, props, Children)
2023-01-20 13:07:13 +00:00
return <>{Element}</>
}