Skip to content

Commit 8d2da9f

Browse files
feat(Select,Dropdown): renamed itemId prop (#493)
* feat(Select,Dropdown): renamed itemId prop * Removed react next logic
1 parent dcbe2fa commit 8d2da9f

File tree

4 files changed

+153
-1
lines changed

4 files changed

+153
-1
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
const { getFromPackage, renamePropsOnNode } = require("../../helpers");
2+
const renames = {
3+
SelectOption: {
4+
itemId: {
5+
newName: "value",
6+
message: (node) =>
7+
`itemId prop for ${node?.name?.name} has been renamed to value`,
8+
},
9+
},
10+
DropdownItem: {
11+
itemId: {
12+
newName: "value",
13+
message: (node) =>
14+
`itemId prop for ${node?.name?.name} has been renamed to value`,
15+
},
16+
},
17+
};
18+
19+
// https://github.com/patternfly/patternfly-react/pull/9175
20+
module.exports = {
21+
meta: { fixable: "code" },
22+
create: function (context) {
23+
const { imports: coreImports } = getFromPackage(
24+
context,
25+
"@patternfly/react-core"
26+
);
27+
const selectAndDropdownImports = coreImports.filter((imp) =>
28+
["SelectOption", "DropdownItem"].includes(imp.imported?.name)
29+
);
30+
31+
return !selectAndDropdownImports.length
32+
? {}
33+
: {
34+
JSXOpeningElement(node) {
35+
renamePropsOnNode(context, selectAndDropdownImports, node, renames);
36+
},
37+
};
38+
},
39+
};
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
const ruleTester = require("../../ruletester");
2+
const rule = require("../../../lib/rules/v5/selectDropdown-rename-itemId");
3+
4+
ruleTester.run("selectDropdown-rename-itemId", rule, {
5+
valid: [
6+
{
7+
code: `import { SelectOption } from '@patternfly/react-core'; <SelectOption />`,
8+
},
9+
{
10+
code: `import { SelectOption } from '@patternfly/react-core'; <SelectOption value />`,
11+
},
12+
{
13+
code: `import { DropdownItem } from '@patternfly/react-core'; <DropdownItem />`,
14+
},
15+
{
16+
code: `import { DropdownItem } from '@patternfly/react-core'; <DropdownItem value />`,
17+
},
18+
{
19+
// No @patternfly/react-core import
20+
code: `<SelectOption itemId />`,
21+
},
22+
{
23+
// No @patternfly/react-core import
24+
code: `<DropdownItem itemId />`,
25+
},
26+
],
27+
invalid: [
28+
{
29+
code: `import { SelectOption } from '@patternfly/react-core'; <SelectOption itemId="test" />`,
30+
output: `import { SelectOption } from '@patternfly/react-core'; <SelectOption value="test" />`,
31+
errors: [
32+
{
33+
message: `itemId prop for SelectOption has been renamed to value`,
34+
type: "JSXOpeningElement",
35+
},
36+
],
37+
},
38+
{
39+
code: `import { DropdownItem } from '@patternfly/react-core'; <DropdownItem itemId="test" />`,
40+
output: `import { DropdownItem } from '@patternfly/react-core'; <DropdownItem value="test" />`,
41+
errors: [
42+
{
43+
message: `itemId prop for DropdownItem has been renamed to value`,
44+
type: "JSXOpeningElement",
45+
},
46+
],
47+
},
48+
// Import from dist
49+
{
50+
code: `import { SelectOption } from '@patternfly/react-core/dist/esm/components/Select/index.js'; <SelectOption itemId="test" />`,
51+
output: `import { SelectOption } from '@patternfly/react-core/dist/esm/components/Select/index.js'; <SelectOption value="test" />`,
52+
errors: [
53+
{
54+
message: `itemId prop for SelectOption has been renamed to value`,
55+
type: "JSXOpeningElement",
56+
},
57+
],
58+
},
59+
{
60+
code: `import { DropdownItem } from '@patternfly/react-core/dist/esm/components/Dropdown/index.js'; <DropdownItem itemId="test" />`,
61+
output: `import { DropdownItem } from '@patternfly/react-core/dist/esm/components/Dropdown/index.js'; <DropdownItem value="test" />`,
62+
errors: [
63+
{
64+
message: `itemId prop for DropdownItem has been renamed to value`,
65+
type: "JSXOpeningElement",
66+
},
67+
],
68+
},
69+
// Aliased import
70+
{
71+
code: `import { SelectOption as PFSO } from '@patternfly/react-core'; <PFSO itemId="test" />`,
72+
output: `import { SelectOption as PFSO } from '@patternfly/react-core'; <PFSO value="test" />`,
73+
errors: [
74+
{
75+
message: `itemId prop for PFSO has been renamed to value`,
76+
type: "JSXOpeningElement",
77+
},
78+
],
79+
},
80+
{
81+
code: `import { DropdownItem as PFDI } from '@patternfly/react-core'; <PFDI itemId="test" />`,
82+
output: `import { DropdownItem as PFDI } from '@patternfly/react-core'; <PFDI value="test" />`,
83+
errors: [
84+
{
85+
message: `itemId prop for PFDI has been renamed to value`,
86+
type: "JSXOpeningElement",
87+
},
88+
],
89+
},
90+
],
91+
});

packages/pf-codemods/README.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2409,6 +2409,26 @@ import {
24092409
</>;
24102410
```
24112411

2412+
### selectDropdown-rename-itemId [(#9175)](https://github.com/patternfly/patternfly-react/pull/9175)
2413+
2414+
The `itemId` prop for our new implementation of SelectOption and DropdownItem has been renamed to `value`.
2415+
2416+
#### Examples
2417+
2418+
In:
2419+
2420+
```jsx
2421+
<SelectOption itemId="Option 1" />
2422+
<DropdownItem itemId="Item 1" />
2423+
```
2424+
2425+
Out:
2426+
2427+
```jsx
2428+
<SelectOption value="Option 1" />
2429+
<DropdownItem value="Item 1" />
2430+
```
2431+
24122432
### simpleList-remove-isCurrent [(#8132)](https://github.com/patternfly/patternfly-react/pull/8132)
24132433

24142434
We've removed the deprecated the `isCurrent` prop. This rule wil replace it with `isActive`.

test/test.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ import {
111111
SelectOption,
112112
WizardBody as WizardBodyNext,
113113
WizardFooter,
114+
DropdownItem as NextDropdownItem,
114115
} from "@patternfly/react-core/next";
115116
import {
116117
Table,
@@ -251,6 +252,7 @@ const alertVariantOption = AlertVariant.default;
251252
<Nav flyout={"menu"} />
252253
<Nav onSelect={(foo) => handler(foo)} onToggle={(foo) => handler(foo)} />
253254
<Nav variant='horizontal-subnav' />
255+
<NextDropdownItem itemId='test' />
254256
<NotificationBadge isRead />
255257
<NotificationBadge isRead={false} />
256258
<NotificationBadge isRead={isRead} />
@@ -295,7 +297,7 @@ const alertVariantOption = AlertVariant.default;
295297
<Select variant={SelectVariant.single}>
296298
<SelectOpt />
297299
</Select>
298-
<SelectOption hasCheck />
300+
<SelectOption hasCheck itemId='test' />
299301
<SelectToggle onToggle={} />
300302
<Slider onChange={(foo) => handler(foo)} />
301303
<Spinner isSVG />

0 commit comments

Comments
 (0)