Skip to content

Commit c3b0b5e

Browse files
authored
update to react 18 (#97)
1 parent 7770682 commit c3b0b5e

File tree

11 files changed

+30533
-4903
lines changed

11 files changed

+30533
-4903
lines changed

.npmrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
registry=https://registry.npmjs.org/
22
package-lock=true
33
yes=true
4+
legacy-peer-deps=true

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@
3636
- The more experience you have with building React abstractions, the more
3737
helpful this workshop will be for you.
3838

39+
> NOTE: The EpicReact.dev videos were recorded with React version ^16.13 and all
40+
> material in this repo has been updated to React version ^18. Differences are
41+
> minor and any relevant differences are noted in the instructions.
42+
3943
## System Requirements
4044

4145
- [git][git] v2.13 or greater

package-lock.json

Lines changed: 30475 additions & 4849 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,18 @@
1414
"npm": ">=6"
1515
},
1616
"dependencies": {
17-
"@kentcdodds/react-workshop-app": "^4.3.0",
18-
"@testing-library/jest-dom": "^5.16.1",
19-
"@testing-library/react": "^12.1.2",
20-
"@testing-library/user-event": "^13.5.0",
17+
"@kentcdodds/react-workshop-app": "^5.0.0",
18+
"@testing-library/react": "^13.0.1",
19+
"@testing-library/user-event": "^14.1.0",
2120
"codegen.macro": "^4.1.0",
2221
"dequal": "^2.0.2",
2322
"lodash": "^4.17.21",
24-
"react": "^17.0.2",
25-
"react-dom": "^17.0.2"
23+
"react": "^18.0.0",
24+
"react-dom": "^18.0.0"
2625
},
2726
"devDependencies": {
28-
"@types/react": "^17.0.38",
29-
"@types/react-dom": "^17.0.11",
27+
"@types/react": "^18.0.4",
28+
"@types/react-dom": "^18.0.0",
3029
"cross-env": "^7.0.3",
3130
"husky": "^4.3.8",
3231
"npm-run-all": "^4.1.5",

src/__tests__/01.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ test('happy path works', async () => {
4848
expect(resetButton).toHaveAttribute('disabled')
4949

5050
const testData = {...mockUser, tagline: 'test tagline', bio: 'test bio'}
51-
userEvent.type(taglineInput, testData.tagline)
52-
userEvent.type(bioInput, testData.bio)
51+
await userEvent.type(taglineInput, testData.tagline)
52+
await userEvent.type(bioInput, testData.bio)
5353

5454
// changed form enables submit and reset
5555
expect(submitButton).toHaveTextContent(/submit/i)
@@ -61,7 +61,7 @@ test('happy path works', async () => {
6161
Promise.resolve(updatedUser),
6262
)
6363

64-
userEvent.click(submitButton)
64+
await userEvent.click(submitButton)
6565

6666
// pending form sets the submit button to ... and disables the submit and reset buttons
6767
expect(submitButton).toHaveTextContent(/\.\.\./i)
@@ -88,11 +88,11 @@ test('happy path works', async () => {
8888
expect(getDisplayData()).toEqual(updatedUser)
8989
})
9090

91-
test('reset works', () => {
91+
test('reset works', async () => {
9292
const {resetButton, taglineInput} = renderApp()
9393

94-
userEvent.type(taglineInput, 'foo')
95-
userEvent.click(resetButton)
94+
await userEvent.type(taglineInput, 'foo')
95+
await userEvent.click(resetButton)
9696
expect(taglineInput.value).toBe(mockUser.tagline)
9797
})
9898

@@ -107,15 +107,15 @@ test('failure works', async () => {
107107
} = renderApp()
108108

109109
const testData = {...mockUser, bio: 'test bio'}
110-
userEvent.type(bioInput, testData.bio)
110+
await userEvent.type(bioInput, testData.bio)
111111
const testErrorMessage = 'test error message'
112112
userClient.updateUser.mockImplementationOnce(() =>
113113
Promise.reject({message: testErrorMessage}),
114114
)
115115

116116
const updatedUser = {...mockUser, ...testData}
117117

118-
userEvent.click(submitButton)
118+
await userEvent.click(submitButton)
119119

120120
await waitForLoading()
121121

@@ -128,7 +128,7 @@ test('failure works', async () => {
128128
userClient.updateUser.mockImplementationOnce(() =>
129129
Promise.resolve(updatedUser),
130130
)
131-
userEvent.click(submitButton)
131+
await userEvent.click(submitButton)
132132

133133
await waitForLoading()
134134

src/__tests__/02.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@ import {renderToggle} from '../../test/utils'
33
import App from '../final/02'
44
// import App from '../exercise/02'
55

6-
test('renders a toggle component', () => {
6+
test('renders a toggle component', async () => {
77
const {toggleButton, toggle, container} = renderToggle(<App />)
88
expect(toggleButton).not.toBeChecked()
99
expect(container.textContent).toMatch('The button is off')
1010
expect(container.textContent).not.toMatch('The button is on')
11-
toggle()
11+
await toggle()
1212
expect(toggleButton).toBeChecked()
1313
expect(container.textContent).toMatch('The button is on')
1414
expect(container.textContent).not.toMatch('The button is off')
15-
toggle()
15+
await toggle()
1616
expect(toggleButton).not.toBeChecked()
1717
expect(container.textContent).toMatch('The button is off')
1818
expect(container.textContent).not.toMatch('The button is on')

src/__tests__/03.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@ import {renderToggle} from '../../test/utils'
33
import App from '../final/03'
44
// import App from '../exercise/03'
55

6-
test('renders a toggle component', () => {
6+
test('renders a toggle component', async () => {
77
const {toggleButton, toggle, container} = renderToggle(<App />)
88
expect(toggleButton).not.toBeChecked()
99
expect(container.textContent).toMatch('The button is off')
1010
expect(container.textContent).not.toMatch('The button is on')
11-
toggle()
11+
await toggle()
1212
expect(toggleButton).toBeChecked()
1313
expect(container.textContent).toMatch('The button is on')
1414
expect(container.textContent).not.toMatch('The button is off')
15-
toggle()
15+
await toggle()
1616
expect(toggleButton).not.toBeChecked()
1717
expect(container.textContent).toMatch('The button is off')
1818
expect(container.textContent).not.toMatch('The button is on')

src/__tests__/04.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,29 +3,29 @@ import {renderToggle, screen, userEvent} from '../../test/utils'
33
import App from '../final/04'
44
// import App from '../exercise/04'
55

6-
test('renders a toggle component', () => {
6+
test('renders a toggle component', async () => {
77
const {toggleButton, toggle} = renderToggle(<App />)
88
expect(toggleButton).not.toBeChecked()
9-
toggle()
9+
await toggle()
1010
expect(toggleButton).toBeChecked()
11-
toggle()
11+
await toggle()
1212
expect(toggleButton).not.toBeChecked()
1313
})
1414

15-
test('can also toggle with the custom button', () => {
15+
test('can also toggle with the custom button', async () => {
1616
const {toggleButton} = renderToggle(<App />)
1717
expect(toggleButton).not.toBeChecked()
18-
userEvent.click(screen.getByLabelText('custom-button'))
18+
await userEvent.click(screen.getByLabelText('custom-button'))
1919
expect(toggleButton).toBeChecked()
2020
})
2121

2222
// 💯 remove the `.skip` if you're working on the extra credit
23-
test.skip('passes custom props to the custom-button', () => {
23+
test.skip('passes custom props to the custom-button', async () => {
2424
const {toggleButton} = renderToggle(<App />)
2525
const customButton = screen.getByLabelText('custom-button')
2626
expect(customButton.getAttribute('id')).toBe('custom-button-id')
2727

28-
userEvent.click(customButton)
28+
await userEvent.click(customButton)
2929

3030
expect(toggleButton).toBeChecked()
3131
})

src/__tests__/05.js

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,41 +3,41 @@ import {renderToggle, screen, userEvent} from '../../test/utils'
33
import App from '../final/05'
44
// import App from '../exercise/05'
55

6-
test('renders a toggle component', () => {
6+
test('renders a toggle component', async () => {
77
const {toggleButton, toggle} = renderToggle(<App />)
88
expect(toggleButton).not.toBeChecked()
9-
toggle()
9+
await toggle()
1010
expect(toggleButton).toBeChecked()
11-
toggle()
11+
await toggle()
1212
expect(toggleButton).not.toBeChecked()
1313
})
1414

15-
test('can click too much', () => {
15+
test('can click too much', async () => {
1616
const {toggleButton, toggle} = renderToggle(<App />)
1717
expect(toggleButton).not.toBeChecked()
18-
toggle() // 1
18+
await toggle() // 1
1919
expect(toggleButton).toBeChecked()
20-
toggle() // 2
20+
await toggle() // 2
2121
expect(toggleButton).not.toBeChecked()
2222
expect(screen.getByTestId('click-count')).toHaveTextContent('2')
23-
toggle() // 3
23+
await toggle() // 3
2424
expect(toggleButton).toBeChecked()
2525
expect(screen.queryByText(/whoa/i)).not.toBeInTheDocument()
26-
toggle() // 4
26+
await toggle() // 4
2727
expect(toggleButton).toBeChecked()
2828
expect(screen.getByText(/whoa/i)).toBeInTheDocument()
29-
toggle() // 5: Whoa, too many
29+
await toggle() // 5: Whoa, too many
3030
expect(toggleButton).toBeChecked()
31-
toggle() // 6
31+
await toggle() // 6
3232
expect(toggleButton).toBeChecked()
3333

3434
expect(screen.getByTestId('notice')).not.toBeNull()
3535

36-
userEvent.click(screen.getByText('Reset'))
36+
await userEvent.click(screen.getByText('Reset'))
3737
expect(screen.queryByTestId('notice')).toBeNull()
3838

3939
expect(toggleButton).not.toBeChecked()
40-
toggle()
40+
await toggle()
4141
expect(toggleButton).toBeChecked()
4242

4343
expect(screen.getByTestId('click-count')).toHaveTextContent('1')

src/__tests__/06.extra-4.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ afterEach(() => {
1313
console.error.mockRestore()
1414
})
1515

16-
test('warning for controlled component without onChange', () => {
16+
test('warning for controlled component without onChange', async () => {
1717
render(<Toggle on={false} />)
1818
alfredTip(
1919
() =>
@@ -39,26 +39,26 @@ test('warning for controlled component without onChange', () => {
3939
expect(console.error).toHaveBeenCalledTimes(1)
4040
})
4141

42-
test('no warning for controlled component with onChange prop', () => {
42+
test('no warning for controlled component with onChange prop', async () => {
4343
render(<Toggle on={false} onChange={() => {}} />)
4444
expect(console.error).toHaveBeenCalledTimes(0)
4545
})
4646

47-
test('no warning for controlled component with readOnly prop', () => {
47+
test('no warning for controlled component with readOnly prop', async () => {
4848
render(<Toggle on={false} readOnly={true} />)
4949
alfredTip(
5050
() => expect(console.error).toHaveBeenCalledTimes(0),
5151
'Make sure you forward the readOnly prop to the hook',
5252
)
5353
})
5454

55-
test('warning for changing from controlled to uncontrolled', () => {
55+
test('warning for changing from controlled to uncontrolled', async () => {
5656
function Example() {
5757
const [state, setState] = React.useState(true)
5858
return <Toggle on={state} onChange={() => setState(undefined)} />
5959
}
6060
render(<Example />)
61-
userEvent.click(screen.getByLabelText(/toggle/i))
61+
await userEvent.click(screen.getByLabelText(/toggle/i))
6262
alfredTip(
6363
() =>
6464
expect(console.error).toHaveBeenCalledWith(
@@ -68,13 +68,13 @@ test('warning for changing from controlled to uncontrolled', () => {
6868
)
6969
})
7070

71-
test('warning for changing from uncontrolled to controlled', () => {
71+
test('warning for changing from uncontrolled to controlled', async () => {
7272
function Example() {
7373
const [state, setState] = React.useState(undefined)
7474
return <Toggle on={state} onChange={() => setState(true)} />
7575
}
7676
render(<Example />)
77-
userEvent.click(screen.getByLabelText(/toggle/i))
77+
await userEvent.click(screen.getByLabelText(/toggle/i))
7878
alfredTip(
7979
() =>
8080
expect(console.error).toHaveBeenCalledWith(

0 commit comments

Comments
 (0)