forked from lingui/js-lingui
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRender.js
38 lines (31 loc) · 1 KB
/
Render.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// @flow
import * as React from "react"
import PropTypes from "prop-types"
export type RenderProps = {
render?: any,
className?: string
}
type RenderComponentProps = {
value: string | ?Array<any>
} & RenderProps
export default class Render extends React.Component<RenderComponentProps> {
props: RenderComponentProps
static contextTypes = {
linguiDefaultRender: PropTypes.any
}
render() {
const { className, value } = this.props
let render = this.props.render || this.context.linguiDefaultRender
if (render === null || render === undefined) {
return value
} else if (typeof render === "string") {
// Built-in element: h1, p
return React.createElement(render, { className }, value)
}
return React.isValidElement(render)
? // Custom element: <p className="lear' />
React.cloneElement(render, {}, value)
: // Custom component: ({ translation }) => <a title={translation}>x</a>
React.createElement(render, { translation: value })
}
}