Skip to content

Commit 183404b

Browse files
committed
✨ Adds textarea codemods!
1 parent 66386c1 commit 183404b

File tree

3 files changed

+133
-0
lines changed

3 files changed

+133
-0
lines changed
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
const defineInlineTest = require('jscodeshift/dist/testUtils').defineInlineTest;
2+
3+
import transformer from '../transform';
4+
5+
describe('@atlaskit/textarea@4.0.0 transform', () => {
6+
defineInlineTest(
7+
{ default: transformer, parser: 'tsx' },
8+
{},
9+
`
10+
import React, { useRef } from "react";
11+
import TextArea from "@atlaskit/textarea";
12+
const ref = useRef(null);
13+
export default () => <TextArea defaultValue="test" forwardedRef={ref}/>;
14+
`,
15+
`
16+
import React, { useRef } from "react";
17+
import TextArea from "@atlaskit/textarea";
18+
const ref = useRef(null);
19+
export default () => <TextArea defaultValue="test" ref={ref}/>;
20+
`,
21+
'should apply 1 migrates',
22+
);
23+
24+
defineInlineTest(
25+
{ default: transformer, parser: 'tsx' },
26+
{},
27+
`
28+
import React from "react";
29+
import TextArea from "@atlaskit/textarea";
30+
export default () => <TextArea defaultValue="test"/>;
31+
`,
32+
`
33+
import React from "react";
34+
import TextArea from "@atlaskit/textarea";
35+
export default () => <TextArea defaultValue="test"/>;
36+
`,
37+
'should not rename forwardedRef if it is not provided',
38+
);
39+
40+
defineInlineTest(
41+
{ default: transformer, parser: 'tsx' },
42+
{},
43+
`
44+
import React from "react";
45+
import TextArea from "@atlaskit/textarea";
46+
47+
const ref = React.createRef<HTMLTextAreaElement>();
48+
export default () => <TextArea defaultValue="test" forwardedRef={ref} />;
49+
`,
50+
`
51+
import React from "react";
52+
import TextArea from "@atlaskit/textarea";
53+
54+
const ref = React.createRef<HTMLTextAreaElement>();
55+
export default () => <TextArea defaultValue="test" ref={ref} />;
56+
`,
57+
'should rename forwardedRef to ref',
58+
);
59+
60+
defineInlineTest(
61+
{ default: transformer, parser: 'tsx' },
62+
{},
63+
`
64+
import React from "react";
65+
import SmartTextArea from "@atlaskit/textarea";
66+
67+
const ref = React.createRef<HTMLTextAreaElement>();
68+
export default () => <SmartTextArea defaultValue="test" forwardedRef={ref} />;
69+
`,
70+
`
71+
import React from "react";
72+
import SmartTextArea from "@atlaskit/textarea";
73+
74+
const ref = React.createRef<HTMLTextAreaElement>();
75+
export default () => <SmartTextArea defaultValue="test" ref={ref} />;
76+
`,
77+
'should rename forwardedRef to ref with alias',
78+
);
79+
80+
defineInlineTest(
81+
{ default: transformer, parser: 'tsx' },
82+
{},
83+
`
84+
import React from "react";
85+
import TextArea from "@atlaskit/textarea";
86+
87+
const ref = useRef<HTMLTextAreaElement>(null);
88+
export default () => <TextArea defaultValue="test" forwardedRef={ref} />;
89+
`,
90+
`
91+
import React from "react";
92+
import TextArea from "@atlaskit/textarea";
93+
94+
const ref = useRef<HTMLTextAreaElement>(null);
95+
export default () => <TextArea defaultValue="test" ref={ref} />;
96+
`,
97+
'should rename forwardedRef to ref when using ref via useRef',
98+
);
99+
});
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { API, FileInfo, Options } from 'jscodeshift';
2+
import {
3+
getDefaultImportSpecifierName,
4+
getJSXAttributesByName,
5+
} from '@codeshift/utils';
6+
7+
export default function transformer(
8+
fileInfo: FileInfo,
9+
{ jscodeshift: j }: API,
10+
options: Options,
11+
) {
12+
const source = j(fileInfo.source);
13+
14+
const defaultSpecifier = getDefaultImportSpecifierName(
15+
j,
16+
source,
17+
'@atlaskit/textarea',
18+
);
19+
20+
if (!defaultSpecifier) return fileInfo.source;
21+
22+
source.findJSXElements(defaultSpecifier).forEach(element => {
23+
getJSXAttributesByName(j, element, 'forwardedRef').forEach(attribute => {
24+
j(attribute).replaceWith(
25+
j.jsxAttribute(j.jsxIdentifier('ref'), attribute.node.value),
26+
);
27+
});
28+
});
29+
30+
return source.toSource(options.printOptions);
31+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export default {
2+
maintainers: ['danieldelcore'],
3+
};

0 commit comments

Comments
 (0)