Skip to content

Commit 844869d

Browse files
committed
Add documentation for codemods
1 parent 2427ff0 commit 844869d

File tree

2 files changed

+111
-1
lines changed

2 files changed

+111
-1
lines changed

website/docs/codemods.mdx

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
---
2+
id: codemods
3+
title: Codemods
4+
sidebar_label: Codemods
5+
hide_title: true
6+
description: Codemods
7+
---
8+
9+
import TabItem from '@theme/TabItem'
10+
import Tabs from '@theme/Tabs'
11+
import { InternalLinks } from '@site/src/components/InternalLinks'
12+
13+
# Codemods
14+
15+
## `convertInputSelectorsToArray`
16+
17+
Transforms the usage of Reselect's <InternalLinks.CreateSelector /> API by consolidating multiple inline input selector arguments into a single array.
18+
19+
It should work with both JavaScript and TypeScript files.
20+
21+
**Before**:
22+
23+
{/* START: codemods/convertInputSelectorsToArray/before.ts */}
24+
25+
<Tabs
26+
groupId='language'
27+
defaultValue='ts'
28+
values={[
29+
{label: 'TypeScript', value: 'ts'},
30+
{label: 'JavaScript', value: 'js'},
31+
]}>
32+
<TabItem value='ts'>
33+
34+
```ts title="codemods/convertInputSelectorsToArray/before.ts"
35+
import { createSelector } from 'reselect'
36+
37+
export interface RootState {
38+
todos: { id: number; completed: boolean }[]
39+
alerts: { id: number; read: boolean }[]
40+
}
41+
42+
const selectTodoById = createSelector(
43+
(state: RootState) => state.todos,
44+
(state: RootState, id: number) => id,
45+
(todos, id) => todos.find(todo => todo.id === id)
46+
)
47+
```
48+
49+
</TabItem>
50+
<TabItem value='js'>
51+
52+
```js title="codemods/convertInputSelectorsToArray/before.js"
53+
import { createSelector } from 'reselect'
54+
55+
const selectTodoById = createSelector(
56+
state => state.todos,
57+
(state, id) => id,
58+
(todos, id) => todos.find(todo => todo.id === id)
59+
)
60+
```
61+
62+
</TabItem>
63+
</Tabs>
64+
65+
{/* END: codemods/convertInputSelectorsToArray/before.ts */}
66+
67+
**After**:
68+
69+
{/* START: codemods/convertInputSelectorsToArray/after.ts */}
70+
71+
<Tabs
72+
groupId='language'
73+
defaultValue='ts'
74+
values={[
75+
{label: 'TypeScript', value: 'ts'},
76+
{label: 'JavaScript', value: 'js'},
77+
]}>
78+
<TabItem value='ts'>
79+
80+
```ts title="codemods/convertInputSelectorsToArray/after.ts"
81+
import { createSelector } from 'reselect'
82+
83+
export interface RootState {
84+
todos: { id: number; completed: boolean }[]
85+
alerts: { id: number; read: boolean }[]
86+
}
87+
88+
const selectTodoById = createSelector(
89+
[(state: RootState) => state.todos, (state: RootState, id: number) => id],
90+
(todos, id) => todos.find(todo => todo.id === id)
91+
)
92+
```
93+
94+
</TabItem>
95+
<TabItem value='js'>
96+
97+
```js title="codemods/convertInputSelectorsToArray/after.js"
98+
import { createSelector } from 'reselect'
99+
100+
const selectTodoById = createSelector(
101+
[state => state.todos, (state, id) => id],
102+
(todos, id) => todos.find(todo => todo.id === id)
103+
)
104+
```
105+
106+
</TabItem>
107+
</Tabs>
108+
109+
{/* END: codemods/convertInputSelectorsToArray/after.ts */}

website/sidebars.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,8 @@ const sidebars: SidebarsConfig = {
5757
},
5858
'FAQ',
5959
'external-references',
60-
'related-projects'
60+
'related-projects',
61+
'codemods'
6162
]
6263
}
6364

0 commit comments

Comments
 (0)