@@ -16,7 +16,9 @@ export default function transformer(file: FileInfo, api: API, options) {
1616 trailingComma : true
1717 } ;
1818
19- const transformDeclaration = ( useFormDeclarator : ASTPath < VariableDeclarator > ) => {
19+ const transformDeclaration = (
20+ useFormDeclarator : ASTPath < VariableDeclarator >
21+ ) => {
2022 /**
2123 * We search for all `register` properties
2224 * @example
@@ -42,29 +44,29 @@ export default function transformer(file: FileInfo, api: API, options) {
4244 j ( registerProperty )
4345 . closestScope ( )
4446 . forEach ( ( component ) => {
45- /**
46- * We search for all `register`
47- * */
47+ /**
48+ * We search for all `register`
49+ * */
4850 const registerIdentifiers = j ( component ) . find ( j . Identifier , {
4951 name : register
5052 } ) ;
5153
5254 registerIdentifiers . forEach ( ( registerIdentifier ) => {
5355 const isCallExpression =
54- registerIdentifier . parent . value . type === 'CallExpression' ;
56+ registerIdentifier . parent . value . type === 'CallExpression' ;
5557
5658 /**
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+ * */
6466 if (
6567 registerIdentifier . parent . value . type !==
66- 'JSXExpressionContainer' &&
67- ! isCallExpression
68+ 'JSXExpressionContainer' &&
69+ ! isCallExpression
6870 ) {
6971 return ;
7072 }
@@ -84,28 +86,33 @@ export default function transformer(file: FileInfo, api: API, options) {
8486 nameAttributes . forEach ( ( nameAttribute ) => {
8587 if (
8688 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
8891 ) {
8992 return ;
9093 }
9194
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+
93100 /**
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 ] ;
98105
99106 // If `register` have params, we add them to our new args
100107 if ( isCallExpression ) {
101108 args . push ( ...registerIdentifier . parent . value . arguments ) ;
102109 }
103110
104111 /**
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+ * */
109116 j ( nameAttribute ) . replaceWith (
110117 j . jsxSpreadAttribute (
111118 j . callExpression ( j . identifier ( register ) , args )
0 commit comments