Skip to content

Commit 4bdd989

Browse files
committed
feat: use forwardRef on React Native
See #184
1 parent 7535693 commit 4bdd989

5 files changed

Lines changed: 29 additions & 11 deletions

File tree

packages/cli/src/__snapshots__/index.test.js.snap

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,11 @@ const SvgFile = ({ svgRef, ...props }) => (
210210
</Svg>
211211
)
212212
213-
export default SvgFile
213+
const ForwardRef = React.forwardRef((props, ref) => (
214+
<SvgFile svgRef={ref} {...props} />
215+
))
216+
217+
export default ForwardRef
214218
215219
"
216220
`;

packages/core/src/__snapshots__/convert.test.js.snap

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,11 @@ const SvgComponent = ({ svgRef, ...props }) => (
164164
</Svg>
165165
)
166166
167-
export default SvgComponent
167+
const ForwardRef = React.forwardRef((props, ref) => (
168+
<SvgComponent svgRef={ref} {...props} />
169+
))
170+
171+
export default ForwardRef
168172
"
169173
`;
170174

packages/core/src/templates/__snapshots__/reactNativeTemplate.test.js.snap

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@ exports[`reactNativeTemplate should wrap code into a component 3`] = `
3939
import Svg from 'react-native-svg';
4040
const Test = ({ svgRef }) => <Svg />
4141
42-
export default Test"
42+
const ForwardRef = React.forwardRef((props, ref) => <Test svgRef={ref} {...props} />)
43+
44+
export default ForwardRef"
4345
`;
4446

4547
exports[`reactNativeTemplate should wrap code into a component 4`] = `
@@ -55,7 +57,9 @@ exports[`reactNativeTemplate should wrap code into a component 5`] = `
5557
import Svg from 'react-native-svg';
5658
const Test = ({ svgRef, title }) => <Svg />
5759
58-
export default Test"
60+
const ForwardRef = React.forwardRef((props, ref) => <Test svgRef={ref} {...props} />)
61+
62+
export default ForwardRef"
5963
`;
6064

6165
exports[`reactNativeTemplate should wrap code into a component 6`] = `
@@ -71,5 +75,7 @@ exports[`reactNativeTemplate should wrap code into a component 7`] = `
7175
import Svg from 'react-native-svg';
7276
const Test = ({ svgRef, ...props }) => <Svg />
7377
74-
export default Test"
78+
const ForwardRef = React.forwardRef((props, ref) => <Test svgRef={ref} {...props} />)
79+
80+
export default ForwardRef"
7581
`;

packages/core/src/templates/reactNativeTemplate.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { getProps } from './util'
1+
import { getProps, getForwardRef, getExportName } from './util'
22

33
const getComponents = components => {
44
if (!components.size) return ''
@@ -30,7 +30,8 @@ const reactNativeTemplate = (code, config, state) => {
3030
result += `import Svg${components} from 'react-native-svg';\n`
3131
result += warnLog
3232
result += `const ${state.componentName} = ${props} => ${code}\n\n`
33-
result += `export default ${state.componentName}`
33+
result += getForwardRef(config, state)
34+
result += `export default ${getExportName(config, state)}`
3435

3536
return result
3637
}

packages/core/src/templates/util.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,24 @@ export const getProps = config => {
1010
return `({ ${props.join(', ')} })`
1111
}
1212

13+
export const getExportName = (config, state) =>
14+
config.ref ? 'ForwardRef' : state.componentName
15+
1316
export const getExport = (config, state) => {
14-
const component = config.ref ? 'ForwardRef' : state.componentName
17+
const exportName = getExportName(config, state)
1518
if (state.webpack && state.webpack.previousExport) {
1619
let result = ''
1720
result += `export default ${state.webpack.previousExport}\n`
18-
result += `export { ${component} as ReactComponent }`
21+
result += `export { ${exportName} as ReactComponent }`
1922
return result
2023
}
2124
if (state.rollup && state.rollup.previousExport) {
2225
let result = ''
2326
result += `${state.rollup.previousExport}\n`
24-
result += `export { ${component} as ReactComponent }`
27+
result += `export { ${exportName} as ReactComponent }`
2528
return result
2629
}
27-
return `export default ${component}`
30+
return `export default ${exportName}`
2831
}
2932

3033
export const getForwardRef = (config, state) => {

0 commit comments

Comments
 (0)