@@ -16,7 +16,9 @@ export default function transformer(file: FileInfo, api: API, options) {
16
16
trailingComma : true
17
17
} ;
18
18
19
- const transformDeclaration = ( useFormDeclarator : ASTPath < VariableDeclarator > ) => {
19
+ const transformDeclaration = (
20
+ useFormDeclarator : ASTPath < VariableDeclarator >
21
+ ) => {
20
22
/**
21
23
* We search for all `register` properties
22
24
* @example
@@ -42,29 +44,29 @@ export default function transformer(file: FileInfo, api: API, options) {
42
44
j ( registerProperty )
43
45
. closestScope ( )
44
46
. forEach ( ( component ) => {
45
- /**
46
- * We search for all `register`
47
- * */
47
+ /**
48
+ * We search for all `register`
49
+ * */
48
50
const registerIdentifiers = j ( component ) . find ( j . Identifier , {
49
51
name : register
50
52
} ) ;
51
53
52
54
registerIdentifiers . forEach ( ( registerIdentifier ) => {
53
55
const isCallExpression =
54
- registerIdentifier . parent . value . type === 'CallExpression' ;
56
+ registerIdentifier . parent . value . type === 'CallExpression' ;
55
57
56
58
/**
57
- * We filter `register` to keep only `ref`
58
- * @example
59
- * <input ref={register} name="example" />
60
- * <input ref={register()} name="example" />
61
- * <input ref={register({ required: true })} name="example" />
62
- * <input ref={registerCustomName({ required: true })} name="example" />
63
- * */
59
+ * We filter `register` to keep only `ref`
60
+ * @example
61
+ * <input ref={register} name="example" />
62
+ * <input ref={register()} name="example" />
63
+ * <input ref={register({ required: true })} name="example" />
64
+ * <input ref={registerCustomName({ required: true })} name="example" />
65
+ * */
64
66
if (
65
67
registerIdentifier . parent . value . type !==
66
- 'JSXExpressionContainer' &&
67
- ! isCallExpression
68
+ 'JSXExpressionContainer' &&
69
+ ! isCallExpression
68
70
) {
69
71
return ;
70
72
}
@@ -84,28 +86,33 @@ export default function transformer(file: FileInfo, api: API, options) {
84
86
nameAttributes . forEach ( ( nameAttribute ) => {
85
87
if (
86
88
nameAttribute . value . value . type !== 'Literal' &&
87
- nameAttribute . value . value . type !== 'StringLiteral'
89
+ nameAttribute . value . value . type !== 'StringLiteral' &&
90
+ nameAttribute . value . value . type !== 'JSXExpressionContainer' // Handle template string case
88
91
) {
89
92
return ;
90
93
}
91
94
92
- const name = nameAttribute . value . value . value ;
95
+ const name =
96
+ nameAttribute . value . value . type === 'JSXExpressionContainer'
97
+ ? nameAttribute . value . value . expression
98
+ : j . literal ( nameAttribute . value . value . value ) ;
99
+
93
100
/**
94
- * Add name to register('name')
95
- * ^
96
- * */
97
- const args = [ j . literal ( name ) ] ;
101
+ * Add name to register('name')
102
+ * ^
103
+ * */
104
+ const args = [ name ] ;
98
105
99
106
// If `register` have params, we add them to our new args
100
107
if ( isCallExpression ) {
101
108
args . push ( ...registerIdentifier . parent . value . arguments ) ;
102
109
}
103
110
104
111
/**
105
- * Replace `name` attribute with the new `register` api and args
106
- * @example
107
- * name="example" => {...register("example")}
108
- * */
112
+ * Replace `name` attribute with the new `register` api and args
113
+ * @example
114
+ * name="example" => {...register("example")}
115
+ * */
109
116
j ( nameAttribute ) . replaceWith (
110
117
j . jsxSpreadAttribute (
111
118
j . callExpression ( j . identifier ( register ) , args )
0 commit comments