34 lines
641 B
TypeScript
34 lines
641 B
TypeScript
import { ReactChild } from 'react'
|
|
|
|
export const JoinSpans = (props: {
|
|
children: ReactChild[]
|
|
separator?: JSX.Element | string
|
|
}) => {
|
|
const { separator } = props
|
|
const children = props.children.filter((x) => !!x)
|
|
|
|
if (children.length === 0) return <></>
|
|
if (children.length === 1) return children[0]
|
|
if (children.length === 2)
|
|
return (
|
|
<>
|
|
{children[0]} and {children[1]}
|
|
</>
|
|
)
|
|
|
|
const head = children.slice(0, -1).map((child) => (
|
|
<>
|
|
{child}
|
|
{separator || ','}{' '}
|
|
</>
|
|
))
|
|
|
|
const tail = children[children.length - 1]
|
|
|
|
return (
|
|
<>
|
|
{head}and {tail}
|
|
</>
|
|
)
|
|
}
|