Skip to content

Commit e294b4b

Browse files
committed
feat: CCreateElement: add posibility of pasing component tag as string
1 parent 7217997 commit e294b4b

File tree

1 file changed

+18
-12
lines changed

1 file changed

+18
-12
lines changed

src/CCreateElement.js

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,31 @@
1-
import React from 'react'
1+
import React, { useMemo } from 'react'
22
import PropTypes from 'prop-types'
33

4-
const renderItem = (item, i) => {
5-
const { _tag: Tag, _children, ...rest } = item
6-
const children = _children ? _children.map((child, i) => {
7-
return typeof child === 'object' ? renderItem(child, i) : child
8-
}) : ''
9-
return <Tag key={Tag + i} {...rest}>{children}</Tag>
10-
}
11-
124
//component - CoreUI / CCreateElement
13-
const CCreateElement = props => {
5+
const CCreateElement = ({ items, components = {} }) => {
6+
const renderItem = (item, i) => {
7+
const { _tag, _children, ...rest } = item
8+
const Tag = components[_tag] || _tag
9+
const children = _children ? _children.map((child, i) => {
10+
return typeof child === 'object' ? renderItem(child, i) : child
11+
}) : ''
12+
return <Tag key={Tag + i} {...rest}>{children}</Tag>
13+
}
14+
15+
const generatedItems = useMemo(() => {
16+
return items && items.map((item, i) => renderItem(item, i))
17+
}, [JSON.stringify(items)])
18+
1419
return (
1520
<React.Fragment>
16-
{props.items && props.items.map((item, i) => renderItem(item, i))}
21+
{generatedItems}
1722
</React.Fragment>
1823
)
1924
}
2025

2126
CCreateElement.propTypes = {
22-
items: PropTypes.array.isRequired
27+
items: PropTypes.array.isRequired,
28+
components: PropTypes.object
2329
};
2430

2531
export default CCreateElement

0 commit comments

Comments
 (0)